{"id":3580,"date":"2026-09-13T00:35:49","date_gmt":"2026-09-13T00:35:49","guid":{"rendered":"https:\/\/jiris.ca\/?page_id=3580"},"modified":"2026-09-13T00:36:58","modified_gmt":"2026-09-13T00:36:58","slug":"fiche-apprivoiser-la-solitude","status":"publish","type":"page","link":"https:\/\/jiris.ca\/en\/fiche-apprivoiser-la-solitude\/","title":{"rendered":"Fiche-Apprivoiser la solitude"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"3580\" class=\"elementor elementor-3580\" 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\">Apprivoiser la solitude<\/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>Apprivoiser la solitude \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.10) 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 ===== *\/\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 ===== *\/\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.chosen {\n    border-left: 4px solid var(--accent);\n  }\n\n  .control-box.suffered {\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.chosen .control-header { color: var(--accent); }\n  .control-box.suffered .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.chosen {\n    background: var(--accent-soft);\n    border-left: 4px solid var(--accent);\n  }\n\n  .summary-control-box.suffered {\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.chosen .summary-control-label { color: var(--accent); }\n  .summary-control-box.suffered .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\">\ud83c\udf19<\/div>\n    <h1>Apprivoiser la solitude<\/h1>\n    <p class=\"subtitle\">Un outil d'accompagnement pour traverser la solitude subie avec plus de douceur, comprendre ce qui manque, et retrouver un premier fil de connexion.<\/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>Solitude n'est pas isolement<\/h3>\n        <p>La solitude peut \u00eatre choisie et f\u00e9conde. Quand elle est <strong>subie<\/strong> et qu'elle p\u00e8se, elle peut devenir une souffrance r\u00e9elle \u2014 qui m\u00e9rite d'\u00eatre entendue, pas minimis\u00e9e.<\/p>\n        <p>Cet outil ne remplace pas un accompagnement professionnel. Si la solitude s'accompagne d'une <strong>d\u00e9tresse importante, d'id\u00e9es noires, ou d'un isolement prolong\u00e9<\/strong>, il est essentiel d'en parler : <strong>811<\/strong> (Info-Social, 24\/7, Qu\u00e9bec), <strong>988<\/strong> (ligne d'aide en pr\u00e9vention du suicide, 24\/7, Canada), ou <strong>911<\/strong> en cas d'urgence. Vous n'\u00eates pas seul\u00b7e \u00e0 traverser cela.<\/p>\n      <\/div>\n    <\/div>\n\n    <p>La solitude est une exp\u00e9rience profond\u00e9ment humaine. Parfois choisie, souvent subie. Lorsqu'elle p\u00e8se, elle peut donner l'impression d'\u00eatre invisible, en d\u00e9calage, ou d'avoir perdu le fil qui reliait aux autres.<\/p>\n    <p>Cet outil vous propose de <strong>nommer la solitude telle que vous la vivez<\/strong>, de distinguer la solitude choisie de la solitude subie, d'identifier ce qui manque, de reconna\u00eetre vos besoins de connexion, d'explorer vos ressources, et de poser un premier pas de reconnexion \u2014 \u00e0 votre rythme.<\/p>\n    <p><strong>Il n'y a pas de honte \u00e0 se sentir seul\u00b7e.<\/strong> Mettre des mots dessus, c'est d\u00e9j\u00e0 une forme de soin.<\/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 relire en douceur, 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 en douceur \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\">\ud83c\udf2b\ufe0f<\/span> La solitude telle que je la vis<\/h2>\n    <p class=\"step-hint\">Commen\u00e7ons par mettre des mots, sans jugement. La solitude a mille visages \u2014 la v\u00f4tre est unique.<\/p>\n\n    <div class=\"field-group\">\n      <label class=\"field-label\" for=\"situation\">\n        Comment d\u00e9cririez-vous la solitude que vous ressentez en ce moment ?\n        <span class=\"field-example\">Quelques mots ou phrases suffisent. Ex. : \u00ab Je me sens seul\u00b7e m\u00eame entour\u00e9\u00b7e \u00bb, \u00ab Je n'ai personne \u00e0 qui parler vraiment \u00bb, \u00ab Je passe des jours sans \u00e9changer avec quelqu'un \u00bb.<\/span>\n      <\/label>\n      <textarea id=\"situation\" placeholder=\"Ma solitude, en ce moment\u2026\"><\/textarea>\n    <\/div>\n\n    <div class=\"field-group\">\n      <label class=\"field-label\" for=\"duration\">\n        Depuis combien de temps cette solitude est-elle pr\u00e9sente ?\n        <span class=\"field-example\">Ex. : \u00ab Depuis quelques semaines \u00bb, \u00ab Depuis un d\u00e9m\u00e9nagement \u00bb, \u00ab Depuis plusieurs ann\u00e9es \u00bb, \u00ab Depuis une rupture \u00bb.<\/span>\n      <\/label>\n      <input type=\"text\" id=\"duration\" placeholder=\"Depuis\u2026\">\n    <\/div>\n\n    <div class=\"field-group\">\n      <label class=\"field-label\" for=\"moments\">\n        \u00c0 quels moments la solitude se fait-elle le plus sentir ?\n        <span class=\"field-example\">Ex. : \u00ab Le soir \u00bb, \u00ab Les fins de semaine \u00bb, \u00ab Les repas \u00bb, \u00ab Les jours de f\u00eate \u00bb, \u00ab Quand je vois les autres en couple ou en groupe \u00bb.<\/span>\n      <\/label>\n      <textarea id=\"moments\" placeholder=\"La solitude p\u00e8se surtout quand\u2026\"><\/textarea>\n    <\/div>\n\n    <div class=\"field-group\">\n      <label class=\"field-label\">Sur une \u00e9chelle de 0 \u00e0 10, quelle est l'intensit\u00e9 de la souffrance li\u00e9e \u00e0 cette solitude en ce moment ?<\/label>\n      <div class=\"chips-row\" id=\"intensityChips\"><\/div>\n      <div class=\"helper-text\">0 = tr\u00e8s l\u00e9g\u00e8re \u00b7 10 = tr\u00e8s lourde. 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 Distinguer<\/span>\n    <h2 class=\"step-title\"><span class=\"step-emoji\">\ud83c\udf17<\/span> Solitude choisie, solitude subie<\/h2>\n    <p class=\"step-hint\">Toute solitude n'est pas souffrance. Distinguer ce qui est choisi de ce qui est subi aide \u00e0 reconna\u00eetre ce qui, pr\u00e9cis\u00e9ment, p\u00e8se et peut \u00eatre transform\u00e9.<\/p>\n\n    <div class=\"info-callout\">\n      <strong>\ud83d\udca1 Une distinction utile<\/strong><br>\n      La <strong>solitude choisie<\/strong> est un espace que l'on s'accorde \u2014 elle peut ressourcer, permettre de se recentrer, \u00eatre f\u00e9conde. La <strong>solitude subie<\/strong> est un vide que l'on n'a pas voulu \u2014 elle isole, \u00e9puise, fait mal. Les deux peuvent coexister chez la m\u00eame personne, \u00e0 des moments diff\u00e9rents.\n    <\/div>\n\n    <div class=\"control-grid\">\n      <div class=\"control-box chosen\">\n        <div class=\"control-header\">\n          <span class=\"control-icon\">\ud83c\udf3f<\/span>\n          <span>Ce qui est choisi, ou me fait du bien<\/span>\n        <\/div>\n        <textarea id=\"chosen\" placeholder=\"Moments o\u00f9 \u00eatre seul\u00b7e me ressource, me calme, me pla\u00eet : un caf\u00e9 tranquille, lire, marcher, \u00e9couter de la musique\u2026\"><\/textarea>\n        <div class=\"control-help\">Ce que je m'accorde volontiers.<\/div>\n      <\/div>\n\n      <div class=\"control-box suffered\">\n        <div class=\"control-header\">\n          <span class=\"control-icon\">\ud83d\udcad<\/span>\n          <span>Ce qui est subi, ou me fait mal<\/span>\n        <\/div>\n        <textarea id=\"suffered\" placeholder=\"Moments o\u00f9 la solitude p\u00e8se sans que je l'aie voulue : repas seul\u00b7e, fins de semaine, envie de parler \u00e0 quelqu'un et personne\u2026\"><\/textarea>\n        <div class=\"control-help\">Ce que je n'ai pas choisi et qui me p\u00e8se.<\/div>\n      <\/div>\n    <\/div>\n\n    <div class=\"field-group\" style=\"margin-top: 18px;\">\n      <label class=\"field-label\" for=\"grayZone\">\n        Y a-t-il des zones grises \u2014 des moments o\u00f9 vous ne savez pas si c'est choisi ou subi ?\n        <span class=\"field-example\">Ex. : \u00ab Je reste chez moi le samedi soir, mais je ne sais plus si c'est par envie ou par peur \u00bb.<\/span>\n      <\/label>\n      <textarea id=\"grayZone\" placeholder=\"Les zones grises\u2026\"><\/textarea>\n    <\/div>\n\n    <div class=\"field-group\">\n      <label class=\"field-label\" for=\"whatILike\">\n        Qu'est-ce que vous aimez vraiment faire seul\u00b7e, sans culpabilit\u00e9 ?\n        <span class=\"field-example\">Cela peut servir de base pour des moments de solitude choisis et nourrissants.<\/span>\n      <\/label>\n      <textarea id=\"whatILike\" placeholder=\"Ce que j'aime faire seul\u00b7e\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 Explorer<\/span>\n    <h2 class=\"step-title\"><span class=\"step-emoji\">\ud83d\udd0d<\/span> Ce qui manque<\/h2>\n    <p class=\"step-hint\">La solitude subie n'est pas qu'une question de nombre de personnes autour. Elle parle souvent d'un manque plus pr\u00e9cis \u2014 qu'il est utile de nommer.<\/p>\n\n    <div class=\"field-group\">\n      <label class=\"field-label\">\n        De quoi manquez-vous le plus, en ce moment ?\n        <span class=\"field-example\">Cochez tout ce qui r\u00e9sonne, puis compl\u00e9tez.<\/span>\n      <\/label>\n      <div class=\"multi-grid\" id=\"missingGrid\"><\/div>\n    <\/div>\n\n    <div class=\"field-group\">\n      <label class=\"field-label\" for=\"missingText\">\n        Formulez plus pr\u00e9cis\u00e9ment ce qui vous manque :\n      <\/label>\n      <textarea id=\"missingText\" placeholder=\"Ce qui me manque le plus, c'est\u2026\"><\/textarea>\n    <\/div>\n\n    <div class=\"field-group\">\n      <label class=\"field-label\" for=\"illusion\">\n        Y a-t-il des id\u00e9es toutes faites sur la solitude qui vous p\u00e8sent ?\n        <span class=\"field-example\">Ex. : \u00ab Je devrais avoir plus d'amis \u00bb, \u00ab \u00c0 mon \u00e2ge, ce n'est pas normal \u00bb, \u00ab Les autres y arrivent, pas moi \u00bb.<\/span>\n      <\/label>\n      <textarea id=\"illusion\" placeholder=\"Ce que je me dis sur ma solitude\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> Mes besoins de connexion<\/h2>\n    <p class=\"step-hint\">Derri\u00e8re la solitude, il y a souvent des besoins relationnels pr\u00e9cis. Les nommer, c'est se donner une chance de chercher ce qui y r\u00e9pondrait vraiment.<\/p>\n\n    <div class=\"field-group\">\n      <label class=\"field-label\">\n        De quelle forme de connexion auriez-vous besoin en ce moment ?\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=\"fromSelf\">\n        De quoi auriez-vous besoin <strong>de vous-m\u00eame<\/strong>, dans cette travers\u00e9e ?\n        <span class=\"field-example\">Ex. : \u00ab De moins me juger \u00bb, \u00ab De me traiter comme un\u00b7e ami\u00b7e \u00bb, \u00ab De me donner le droit d'\u00eatre l\u00e0 o\u00f9 j'en suis \u00bb, \u00ab De me faire un peu de bien \u00bb.<\/span>\n      <\/label>\n      <textarea id=\"fromSelf\" placeholder=\"De moi-m\u00eame, 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 Ressources<\/span>\n    <h2 class=\"step-title\"><span class=\"step-emoji\">\ud83e\udd1d<\/span> Mes points d'appui<\/h2>\n    <p class=\"step-hint\">M\u00eame quand on se sent seul\u00b7e, il y a presque toujours des fils existants \u2014 parfois t\u00e9nus, parfois oubli\u00e9s. Les rep\u00e9rer peut ouvrir des portes insoup\u00e7onn\u00e9es.<\/p>\n\n    <div class=\"field-group\">\n      <label class=\"field-label\">\n        Sur qui ou sur quoi pouvez-vous vous appuyer, m\u00eame un peu ?\n        <span class=\"field-example\">Personnes, souvenirs, communaut\u00e9s, lieux, ressources.<\/span>\n      <\/label>\n      <div class=\"guided-list\" id=\"resourcesList\">\n        <div class=\"guided-item\">\n          <div class=\"item-label\"><span class=\"item-num\">1<\/span> Une personne \u2014 m\u00eame lointaine<\/div>\n          <textarea class=\"resources-input\" placeholder=\"Un proche, un\u00b7e ancien\u00b7ne ami\u00b7e, un membre de la famille, un\u00b7e coll\u00e8gue\u2026\"><\/textarea>\n        <\/div>\n        <div class=\"guided-item\">\n          <div class=\"item-label\"><span class=\"item-num\">2<\/span> Un lieu ou une communaut\u00e9<\/div>\n          <textarea class=\"resources-input\" placeholder=\"Un caf\u00e9, une biblioth\u00e8que, une association, un groupe en ligne, un lieu de culte, un club\u2026\"><\/textarea>\n        <\/div>\n        <div class=\"guided-item\">\n          <div class=\"item-label\"><span class=\"item-num\">3<\/span> Une activit\u00e9 qui me relie<\/div>\n          <textarea class=\"resources-input\" placeholder=\"Une activit\u00e9 physique, un loisir, du b\u00e9n\u00e9volat, un cours, une chorale\u2026\"><\/textarea>\n        <\/div>\n        <div class=\"guided-item\">\n          <div class=\"item-label\"><span class=\"item-num\">4<\/span> Une ressource professionnelle<\/div>\n          <textarea class=\"resources-input\" placeholder=\"Psychologue, travailleur\u00b7se social\u00b7e, CLSC, ligne d'\u00e9coute, groupe de soutien\u2026\"><\/textarea>\n        <\/div>\n      <\/div>\n    <\/div>\n\n    <div class=\"field-group\">\n      <label class=\"field-label\">\n        Distinguons deux zones :\n        <span class=\"field-example\">Ce qui d\u00e9pend de moi peut devenir un levier. Ce qui ne d\u00e9pend pas de moi peut \u00eatre d\u00e9pos\u00e9 \u2014 au moins un peu.<\/span>\n      <\/label>\n\n      <div class=\"control-grid\">\n        <div class=\"control-box chosen\">\n          <div class=\"control-header\">\n            <span class=\"control-icon\">\u2705<\/span>\n            <span>Ce qui d\u00e9pend de moi<\/span>\n          <\/div>\n          <textarea id=\"controlMine\" placeholder=\"Ex. : \u00e9crire \u00e0 quelqu'un, m'inscrire \u00e0 une activit\u00e9, sortir, demander de l'aide, prendre soin de moi\u2026\"><\/textarea>\n          <div class=\"control-help\">Mes actions, mes choix, mes gestes possibles.<\/div>\n        <\/div>\n\n        <div class=\"control-box suffered\">\n          <div class=\"control-header\">\n            <span class=\"control-icon\">\ud83d\udeab<\/span>\n            <span>Ce qui ne d\u00e9pend pas de moi<\/span>\n          <\/div>\n          <textarea id=\"controlNotMine\" placeholder=\"Ex. : la disponibilit\u00e9 des autres, la r\u00e9action qu'ils auront, le hasard des rencontres, le temps que \u00e7a prendra\u2026\"><\/textarea>\n          <div class=\"control-help\">Ce qui appartient \u00e0 l'autre, au contexte, \u00e0 l'impr\u00e9vu.<\/div>\n        <\/div>\n      <\/div>\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 Se reconnecter<\/span>\n    <h2 class=\"step-title\"><span class=\"step-emoji\">\ud83d\udc63<\/span> Un premier pas de reconnexion<\/h2>\n    <p class=\"step-hint\">Un tout petit geste, r\u00e9aliste, respectueux de votre \u00e9nergie du moment. Pas un grand plan social \u2014 juste un fil \u00e0 renouer, un souffle de contact.<\/p>\n\n    <div class=\"info-emphasis\">\n      <strong>\ud83d\udca1 La r\u00e8gle du tout petit pas<\/strong><br>\n      Le geste doit \u00eatre <strong>faisable dans les prochains jours<\/strong>, et assez petit pour ne pas \u00eatre d\u00e9courageant. Ex. : \u00ab Envoyer un message court \u00e0 une personne \u00bb, \u00ab Sortir 15 minutes dans un lieu public \u00bb, \u00ab \u00c9crire \u00e0 un ancien contact \u00bb, \u00ab M'inscrire \u00e0 une activit\u00e9 de quartier \u00bb, \u00ab Appeler une ligne d'\u00e9coute \u00bb.\n    <\/div>\n\n    <div class=\"field-group\">\n      <label class=\"field-label\" for=\"firstStep\">\n        Quel serait votre premier pas \u2014 m\u00eame minuscule \u2014 vers une reconnexion ?\n        <span class=\"field-example\">Ex. : \u00ab Envoyer un simple bonjour \u00e0 une ancienne connaissance \u00bb, \u00ab Aller prendre un caf\u00e9 dans un endroit o\u00f9 il y a du monde \u00bb, \u00ab M'inscrire \u00e0 un cours d'une heure \u00bb, \u00ab \u00c9crire une lettre \u00e0 un proche \u00bb, \u00ab Appeler une ligne d'\u00e9coute juste pour parler \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 pourriez-vous le faire ?\n        <span class=\"field-example\">Un moment pr\u00e9cis, dans un d\u00e9lai tr\u00e8s r\u00e9aliste.<\/span>\n      <\/label>\n      <input type=\"text\" id=\"whenStep\" placeholder=\"Ex. : 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 auriez-vous besoin pour vous 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\" for=\"selfKind\">\n        Comment allez-vous prendre soin de vous si le pas ne se passe pas comme esp\u00e9r\u00e9 ?\n        <span class=\"field-example\">Ex. : \u00ab Me rappeler que ce n'est pas un \u00e9chec \u00bb, \u00ab Me dire que j'ai os\u00e9 \u00bb, \u00ab R\u00e9essayer un autre jour, plus doucement \u00bb.<\/span>\n      <\/label>\n      <textarea id=\"selfKind\" placeholder=\"Si \u00e7a ne se passe pas comme pr\u00e9vu, je\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 solitude ressentie <em>maintenant<\/em> ?\n      <\/label>\n      <div class=\"chips-row\" id=\"intensityChipsAfter\"><\/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 \ud83c\udf19<\/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 mots. 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>988<\/strong> \u2014 Ligne d'aide en pr\u00e9vention du suicide (24\/7, gratuite, Canada)<br>\n      \u2022 <strong>811 (Info-Social)<\/strong> \u2014 Parler \u00e0 une intervenante psychosociale (24\/7, Qu\u00e9bec)<br>\n      \u2022 <strong>911<\/strong> \u2014 En cas d'urgence<br>\n      \u2022 <strong>Votre m\u00e9decin de famille<\/strong> ou <strong>CLSC<\/strong> \u2014 Pour un accompagnement suivi<br>\n      \u2022 <strong>Tel-jeunes, Jeunesse J'\u00e9coute<\/strong> \u2014 Pour les plus jeunes<br>\n      \u2022 <strong>Lignes d'\u00e9coute locales<\/strong> \u2014 Souvent disponibles 24\/7 dans votre r\u00e9gion<br>\n      \u2022 <strong>Organismes communautaires<\/strong> \u2014 Clubs sociaux, maisons de quartier, groupes de soutien\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>\ud83c\udf19 <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-solitude-outil';\n  const TOTAL_STEPS = 6;\n\n  const state = {\n    currentStep: 0,\n    situation: '',\n    duration: '',\n    moments: '',\n    intensityBefore: null,\n    chosen: '',\n    suffered: '',\n    grayZone: '',\n    whatILike: '',\n    missing: [],\n    missingText: '',\n    illusion: '',\n    needs: [],\n    needText: '',\n    fromSelf: '',\n    resources: ['', '', '', ''],\n    controlMine: '',\n    controlNotMine: '',\n    firstStep: '',\n    whenStep: '',\n    supportStep: '',\n    selfKind: '',\n    intensityAfter: null,\n    completed: false\n  };\n\n  const INTENSITY_LEVELS = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10];\n\n  const MISSING_LIST = [\n    'Parler vraiment, en profondeur',\n    '\u00catre \u00e9cout\u00e9\u00b7e sans jugement',\n    'Partager des moments simples (repas, caf\u00e9, marche)',\n    '\u00catre touch\u00e9\u00b7e, c\u00e2lin\u00e9\u00b7e',\n    'Rire avec quelqu\\'un',\n    'Sentir qu\\'on compte pour quelqu\\'un',\n    'Faire partie d\\'un groupe, d\\'une communaut\u00e9',\n    'Avoir des projets avec d\\'autres',\n    '\u00catre reconnu\u00b7e, vu\u00b7e',\n    'Vivre une intimit\u00e9, de la tendresse',\n    'Avoir quelqu\\'un \u00e0 qui raconter sa journ\u00e9e',\n    'Se sentir utile aux autres',\n    'Partager une passion, un int\u00e9r\u00eat',\n    'Avoir un soutien dans les moments difficiles',\n    'Des gestes de tendresse ou d\\'affection',\n    'Un contact r\u00e9gulier, fiable'\n  ];\n\n  const NEEDS_LIST = [\n    'Un lien plus profond avec une personne',\n    'Plus de moments partag\u00e9s',\n    'Une communaut\u00e9, un groupe',\n    'Du contact physique ou de la tendresse',\n    '\u00catre entendu\u00b7e dans ce que je vis',\n    'Du temps avec quelqu\\'un sans pression',\n    'Faire une activit\u00e9 avec d\\'autres',\n    'Sentir que je peux compter sur quelqu\\'un',\n    'Un espace pour parler vrai',\n    '\u00catre accueilli\u00b7e tel\u00b7le que je suis',\n    'Retrouver confiance dans les autres',\n    'Un fil de contact, m\u00eame l\u00e9ger'\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 renderIntensityChips(containerId, keyName) {\n    const container = document.getElementById(containerId);\n    if (!container) return;\n    container.innerHTML = '';\n    INTENSITY_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 renderNeedsChips() {\n    const container = document.getElementById('needsChips');\n    if (!container) return;\n    container.innerHTML = '';\n    NEEDS_LIST.forEach(need => {\n      const btn = document.createElement('button');\n      btn.type = 'button';\n      btn.className = 'chip';\n      btn.textContent = need;\n      if (state.needs.includes(need)) btn.classList.add('selected');\n      btn.addEventListener('click', () => {\n        const idx = state.needs.indexOf(need);\n        if (idx >= 0) {\n          state.needs.splice(idx, 1);\n          btn.classList.remove('selected');\n        } else {\n          state.needs.push(need);\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('situation', 'situation');\n    bind('duration', 'duration');\n    bind('moments', 'moments');\n    bind('chosen', 'chosen');\n    bind('suffered', 'suffered');\n    bind('grayZone', 'grayZone');\n    bind('whatILike', 'whatILike');\n    bind('missingText', 'missingText');\n    bind('illusion', 'illusion');\n    bind('needText', 'needText');\n    bind('fromSelf', 'fromSelf');\n    bind('controlMine', 'controlMine');\n    bind('controlNotMine', 'controlNotMine');\n    bind('firstStep', 'firstStep');\n    bind('whenStep', 'whenStep');\n    bind('supportStep', 'supportStep');\n    bind('selfKind', 'selfKind');\n\n    document.querySelectorAll('.resources-input').forEach((ta, i) => {\n      ta.addEventListener('input', e => {\n        state.resources[i] = e.target.value;\n        saveState();\n      });\n    });\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('situation', state.situation);\n    fill('duration', state.duration);\n    fill('moments', state.moments);\n    fill('chosen', state.chosen);\n    fill('suffered', state.suffered);\n    fill('grayZone', state.grayZone);\n    fill('whatILike', state.whatILike);\n    fill('missingText', state.missingText);\n    fill('illusion', state.illusion);\n    fill('needText', state.needText);\n    fill('fromSelf', state.fromSelf);\n    fill('controlMine', state.controlMine);\n    fill('controlNotMine', state.controlNotMine);\n    fill('firstStep', state.firstStep);\n    fill('whenStep', state.whenStep);\n    fill('supportStep', state.supportStep);\n    fill('selfKind', state.selfKind);\n\n    document.querySelectorAll('.resources-input').forEach((ta, i) => {\n      ta.value = state.resources[i] || '';\n    });\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.situation || state.duration || state.moments || state.intensityBefore !== null) {\n      let inner = '';\n      if (state.situation) inner += '<p>' + escapeHtml(state.situation) + '<\/p>';\n      if (state.duration) inner += '<p style=\"margin-top: 10px;\"><strong>Depuis :<\/strong> ' + escapeHtml(state.duration) + '<\/p>';\n      if (state.moments) inner += '<p style=\"margin-top: 10px;\"><strong>Moments les plus sensibles :<\/strong><br>' + escapeHtml(state.moments) + '<\/p>';\n      if (state.intensityBefore !== null) inner += '<p style=\"margin-top: 10px; font-size: 14px; color: var(--muted);\">Intensit\u00e9 au d\u00e9part : <strong style=\"color: var(--primary);\">' + state.intensityBefore + '\/10<\/strong><\/p>';\n      blocks.push(\n        '<div class=\"summary-block\">' +\n        '<h3>\ud83c\udf2b\ufe0f La solitude, telle que je la vis<\/h3>' +\n        inner +\n        '<\/div>'\n      );\n    }\n\n    if (state.chosen || state.suffered || state.grayZone || state.whatILike) {\n      let inner = '<div class=\"summary-control-grid\">';\n      if (state.chosen) {\n        inner += '<div class=\"summary-control-box chosen\">' +\n          '<span class=\"summary-control-label\">\ud83c\udf3f Choisi \/ ressource<\/span>' +\n          escapeHtml(state.chosen) +\n          '<\/div>';\n      }\n      if (state.suffered) {\n        inner += '<div class=\"summary-control-box suffered\">' +\n          '<span class=\"summary-control-label\">\ud83d\udcad Subi \/ douloureux<\/span>' +\n          escapeHtml(state.suffered) +\n          '<\/div>';\n      }\n      inner += '<\/div>';\n      if (state.grayZone) {\n        inner += '<p style=\"margin-top: 14px;\"><strong>Zones grises :<\/strong><br>' + escapeHtml(state.grayZone) + '<\/p>';\n      }\n      if (state.whatILike) {\n        inner += '<p style=\"margin-top: 10px;\"><strong>Ce que j\\'aime faire seul\u00b7e :<\/strong><br>' + escapeHtml(state.whatILike) + '<\/p>';\n      }\n      blocks.push(\n        '<div class=\"summary-block\">' +\n        '<h3>\ud83c\udf17 Solitude choisie et solitude subie<\/h3>' +\n        inner +\n        '<\/div>'\n      );\n    }\n\n    if (state.missing.length > 0 || state.missingText || state.illusion) {\n      let inner = '';\n      if (state.missing.length > 0) {\n        inner += '<ul>' + state.missing.map(m => '<li>' + escapeHtml(m) + '<\/li>').join('') + '<\/ul>';\n      }\n      if (state.missingText) {\n        inner += '<p style=\"margin-top: 10px;\">' + escapeHtml(state.missingText) + '<\/p>';\n      }\n      if (state.illusion) {\n        inner += '<p style=\"margin-top: 12px;\"><strong>Ce que je me dis sur ma solitude :<\/strong><br>' + escapeHtml(state.illusion) + '<\/p>';\n      }\n      blocks.push(\n        '<div class=\"summary-block\">' +\n        '<h3>\ud83d\udd0d Ce qui manque<\/h3>' +\n        inner +\n        '<\/div>'\n      );\n    }\n\n    if (state.needs.length > 0 || state.needText || state.fromSelf) {\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.fromSelf) {\n        inner += '<p style=\"margin-top: 12px;\"><strong>De moi-m\u00eame :<\/strong><br>' + escapeHtml(state.fromSelf) + '<\/p>';\n      }\n      blocks.push(\n        '<div class=\"summary-block\">' +\n        '<h3>\ud83c\udf31 Mes besoins de connexion<\/h3>' +\n        inner +\n        '<\/div>'\n      );\n    }\n\n    const resourcesFilled = state.resources.filter(r => r && r.trim());\n    if (resourcesFilled.length > 0) {\n      blocks.push(\n        '<div class=\"summary-block\">' +\n        '<h3>\ud83e\udd1d Mes points d\\'appui<\/h3>' +\n        '<ul>' + resourcesFilled.map(r => '<li>' + escapeHtml(r) + '<\/li>').join('') + '<\/ul>' +\n        '<\/div>'\n      );\n    }\n\n    if (state.controlMine || state.controlNotMine) {\n      let inner = '<div class=\"summary-control-grid\">';\n      if (state.controlMine) {\n        inner += '<div class=\"summary-control-box chosen\">' +\n          '<span class=\"summary-control-label\">\u2705 Ce qui d\u00e9pend de moi<\/span>' +\n          escapeHtml(state.controlMine) +\n          '<\/div>';\n      }\n      if (state.controlNotMine) {\n        inner += '<div class=\"summary-control-box suffered\">' +\n          '<span class=\"summary-control-label\">\ud83d\udeab Ce qui ne d\u00e9pend pas de moi<\/span>' +\n          escapeHtml(state.controlNotMine) +\n          '<\/div>';\n      }\n      inner += '<\/div>';\n      blocks.push(\n        '<div class=\"summary-block\">' +\n        '<h3>\u2696\ufe0f Ce qui d\u00e9pend de moi \/ de ce qui n\\'en d\u00e9pend pas<\/h3>' +\n        inner +\n        '<\/div>'\n      );\n    }\n\n    if (state.firstStep || state.whenStep || state.supportStep || state.selfKind) {\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      if (state.selfKind) inner += '<p style=\"margin-top: 10px;\"><strong>Si \u00e7a ne se passe pas comme pr\u00e9vu :<\/strong><br>' + escapeHtml(state.selfKind) + '<\/p>';\n      blocks.push(\n        '<div class=\"summary-block\">' +\n        '<h3>\ud83d\udc63 Premier pas de reconnexion<\/h3>' +\n        inner +\n        '<\/div>'\n      );\n    }\n\n    if (state.intensityBefore !== null && state.intensityAfter !== null) {\n      const diff = state.intensityBefore - state.intensityAfter;\n      let evoText = '';\n      if (diff > 0) evoText = 'L\\'intensit\u00e9 de la solitude ressentie 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>. Le simple fait d\\'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 la solitude peut raviver temporairement la douleur \u2014 c\\'est humain. Prenez soin de vous, doucement.';\n\n      blocks.push(\n        '<div class=\"summary-block\">' +\n        '<h3>\ud83d\udcca \u00c9volution de l\\'intensit\u00e9<\/h3>' +\n        '<p>Avant : <strong>' + state.intensityBefore + '\/10<\/strong> \u00b7 Apr\u00e8s : <strong>' + state.intensityAfter + '\/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 = '\ud83c\udf19 APPRIVOISER LA SOLITUDE\\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 += 'La solitude choisie peut \u00eatre f\u00e9conde. La solitude subie m\u00e9rite d\\'\u00eatre entendue.\\n';\n    t += 'Cet outil ne remplace pas un accompagnement professionnel.\\n';\n    t += 'Ressources : 988 \u00b7 811 Info-Social \u00b7 911 en urgence\\n\\n';\n\n    if (state.situation || state.duration || state.moments || state.intensityBefore !== null) {\n      t += '\ud83c\udf2b\ufe0f LA SOLITUDE, TELLE QUE JE LA VIS\\n';\n      if (state.situation) t += state.situation + '\\n';\n      if (state.duration) t += 'Depuis : ' + state.duration + '\\n';\n      if (state.moments) t += 'Moments sensibles : ' + state.moments + '\\n';\n      if (state.intensityBefore !== null) t += 'Intensit\u00e9 au d\u00e9part : ' + state.intensityBefore + '\/10\\n';\n      t += '\\n';\n    }\n\n    if (state.chosen || state.suffered || state.grayZone || state.whatILike) {\n      t += '\ud83c\udf17 SOLITUDE CHOISIE ET SOLITUDE SUBIE\\n';\n      if (state.chosen) t += 'Choisi \/ ressource : ' + state.chosen + '\\n';\n      if (state.suffered) t += 'Subi \/ douloureux : ' + state.suffered + '\\n';\n      if (state.grayZone) t += 'Zones grises : ' + state.grayZone + '\\n';\n      if (state.whatILike) t += 'Ce que j\\'aime faire seul\u00b7e : ' + state.whatILike + '\\n';\n      t += '\\n';\n    }\n\n    if (state.missing.length > 0 || state.missingText || state.illusion) {\n      t += '\ud83d\udd0d CE QUI MANQUE\\n';\n      state.missing.forEach((m, i) => t += (i + 1) + '. ' + m + '\\n');\n      if (state.missingText) t += state.missingText + '\\n';\n      if (state.illusion) t += 'Ce que je me dis sur ma solitude : ' + state.illusion + '\\n';\n      t += '\\n';\n    }\n\n    if (state.needs.length > 0 || state.needText || state.fromSelf) {\n      t += '\ud83c\udf31 MES BESOINS DE CONNEXION\\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.fromSelf) t += 'De moi-m\u00eame : ' + state.fromSelf + '\\n';\n      t += '\\n';\n    }\n\n    const resourcesFilled = state.resources.filter(r => r && r.trim());\n    if (resourcesFilled.length > 0) {\n      t += '\ud83e\udd1d MES POINTS D\\'APPUI\\n';\n      resourcesFilled.forEach((r, i) => t += (i + 1) + '. ' + r + '\\n');\n      t += '\\n';\n    }\n\n    if (state.controlMine || state.controlNotMine) {\n      t += '\u2696\ufe0f CE QUI D\u00c9PEND DE MOI \/ CE QUI N\\'EN D\u00c9PEND PAS\\n';\n      if (state.controlMine) t += '\u2705 Ce qui d\u00e9pend de moi :\\n' + state.controlMine + '\\n';\n      if (state.controlNotMine) t += '\ud83d\udeab Ce qui ne d\u00e9pend pas de moi :\\n' + state.controlNotMine + '\\n';\n      t += '\\n';\n    }\n\n    if (state.firstStep || state.whenStep || state.supportStep || state.selfKind) {\n      t += '\ud83d\udc63 PREMIER PAS DE RECONNEXION\\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      if (state.selfKind) t += 'Si \u00e7a ne se passe pas comme pr\u00e9vu : ' + state.selfKind + '\\n';\n      t += '\\n';\n    }\n\n    if (state.intensityBefore !== null && state.intensityAfter !== null) {\n      t += '\ud83d\udcca \u00c9VOLUTION DE L\\'INTENSIT\u00c9\\n';\n      t += 'Avant : ' + state.intensityBefore + '\/10 \u00b7 Apr\u00e8s : ' + state.intensityAfter + '\/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 = 'solitude-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 Apprivoiser la solitude';\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 === 'resources') state[k] = ['', '', '', ''];\n      else if (k === 'missing' || k === 'needs') state[k] = [];\n      else if (k === 'intensityBefore' || k === 'intensityAfter') 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    renderIntensityChips('intensityChips', 'intensityBefore');\n    renderIntensityChips('intensityChipsAfter', 'intensityAfter');\n    renderMultiGrid('missingGrid', 'missing', MISSING_LIST);\n    renderNeedsChips();\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 en douceur \u2192';\n    }\n\n    console.log('\u2705 Outil \u00ab Apprivoiser la solitude \u00bb initialis\u00e9');\n  }\n\n  window.jirisSolitude = {\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>Apprivoiser la solitude Apprivoiser la solitude \u2014 Outil d&rsquo;accompagnement JIRIS \ud83c\udf19 Apprivoiser la solitude Un outil d&rsquo;accompagnement pour traverser la solitude subie avec plus de douceur, comprendre ce qui manque, et retrouver un premier fil de connexion. Avant de commencer \u26a0\ufe0f Solitude n&rsquo;est pas isolement La solitude peut \u00eatre choisie et f\u00e9conde. Quand elle est [&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-3580","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/jiris.ca\/en\/wp-json\/wp\/v2\/pages\/3580","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=3580"}],"version-history":[{"count":4,"href":"https:\/\/jiris.ca\/en\/wp-json\/wp\/v2\/pages\/3580\/revisions"}],"predecessor-version":[{"id":3584,"href":"https:\/\/jiris.ca\/en\/wp-json\/wp\/v2\/pages\/3580\/revisions\/3584"}],"wp:attachment":[{"href":"https:\/\/jiris.ca\/en\/wp-json\/wp\/v2\/media?parent=3580"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}