{"id":690,"date":"2026-07-19T21:40:29","date_gmt":"2026-07-19T21:40:29","guid":{"rendered":"https:\/\/vikoko.ai\/?page_id=690"},"modified":"2026-07-19T22:48:17","modified_gmt":"2026-07-19T22:48:17","slug":"recits-de-travail","status":"publish","type":"page","link":"https:\/\/vikoko.ai\/fr\/workplace-stories\/","title":{"rendered":"Histoires de bureau"},"content":{"rendered":"\n<style>\nbody:has(.vikoko-stories-bg) .wp-block-post-title,\nbody:has(.vikoko-stories-bg) .entry-title {\n    display: none !important;\n}\n\nbody:has(.vikoko-stories-bg) main,\nbody:has(.vikoko-stories-bg) .wp-block-post-content,\nbody:has(.vikoko-stories-bg) .entry-content {\n    margin-top: 0 !important;\n    padding-top: 0 !important;\n}\n\nbody:has(.vikoko-stories-bg) main > *,\nbody:has(.vikoko-stories-bg) .wp-block-post-content > *,\nbody:has(.vikoko-stories-bg) .entry-content > * {\n    margin-block-start: 0 !important;\n}\n\nbody:has(.vikoko-stories-bg) .wp-site-blocks {\n    padding-top: 0 !important;\n}\n\n.vikoko-stories-bg {\n    width: 100% !important;\n    max-width: none !important;\n    margin: 0 !important;\n    padding: 0 !important;\n    overflow: hidden;\n\n    background:\n        radial-gradient(\n            circle at 15% 8%,\n            rgba(255, 184, 107, 0.35),\n            transparent 30%\n        ),\n        radial-gradient(\n            circle at 85% 12%,\n            rgba(124, 92, 255, 0.28),\n            transparent 32%\n        ),\n        linear-gradient(\n            180deg,\n            #fffaf4,\n            #ffffff 45%,\n            #f6f1ff\n        );\n}\n\n@media (max-width: 768px) {\n    body:has(.vikoko-stories-bg) main,\n    body:has(.vikoko-stories-bg) .wp-block-post-content,\n    body:has(.vikoko-stories-bg) .entry-content {\n        margin: 0 !important;\n        padding: 0 !important;\n    }\n\n    body:has(.vikoko-stories-bg) main > *,\n    body:has(.vikoko-stories-bg) .wp-block-post-content > *,\n    body:has(.vikoko-stories-bg) .entry-content > * {\n        margin-block-start: 0 !important;\n    }\n}\n<\/style>\n\n\n\n<div class=\"wp-block-group alignfull vikoko-stories-bg is-layout-flow wp-block-group-is-layout-flow\">\n\n        <div class=\"vks3-page\" id=\"vks3-page\">\n        <section class=\"vks3-hero\">\n            <div class=\"vks3-eyebrow\">\n                Workplace Stories\n            <\/div>\n\n            <h1>\n                Learn professional language through a\n                story you want to finish\n            <\/h1>\n\n            <p>\n                Choose a mystery, enter your profession,\n                and read a continuous workplace\n                conversation with line-by-line translation.\n            <\/p>\n        <\/section>\n\n        <form\n            id=\"vks3-form\"\n            class=\"vks3-form\"\n            novalidate\n        >\n            <section class=\"vks3-panel\">\n                <h2>Choose a story<\/h2>\n\n                <div class=\"vks3-story-select-wrap\">\n                    <select\n                        id=\"vks3-story-id\"\n                        name=\"story_id\"\n                        required\n                    >\n                        <option value=\"\">\n                            Choose a story\n                        <\/option>\n\n                                                    <option\n                                value=\"call_from_my_own_number\"\n                            >\n                                I Answered a Call from My Own Number                            <\/option>\n                                                    <option\n                                value=\"message_sent_ten_years_ago\"\n                            >\n                                The Message Was Sent Ten Years Ago \u2014 But It Mentioned Today                            <\/option>\n                                                    <option\n                                value=\"missing_colleague_messages\"\n                            >\n                                Our Missing Colleague Kept Sending Messages                            <\/option>\n                                                    <option\n                                value=\"changing_photograph\"\n                            >\n                                Someone New Appears in This Photograph Every Night                            <\/option>\n                                                    <option\n                                value=\"apartment_that_does_not_exist\"\n                            >\n                                There Is an Apartment in My Building That Doesn\u2019t Exist                            <\/option>\n                                                    <option\n                                value=\"forgotten_passenger\"\n                            >\n                                Everyone Forgot the Passenger \u2014 Except Me                            <\/option>\n                                                    <option\n                                value=\"key_with_no_door\"\n                            >\n                                I Found a Key to a Door That Isn\u2019t There                            <\/option>\n                                                    <option\n                                value=\"voice_in_the_recording\"\n                            >\n                                A Voice Appeared in the Recording \u2014 But No One Had Spoken                            <\/option>\n                                                    <option\n                                value=\"package_delivered_tomorrow\"\n                            >\n                                The Package Was Delivered Tomorrow                            <\/option>\n                                                    <option\n                                value=\"same_stranger_every_photo\"\n                            >\n                                The Same Stranger Is in Every Photo of My Life                            <\/option>\n                                            <\/select>\n                <\/div>\n\n                <div\n                    id=\"vks3-story-teaser\"\n                    class=\"vks3-story-teaser\"\n                    hidden\n                ><\/div>\n\n                <label class=\"vks3-custom-plot-toggle\">\n                    <input\n                        id=\"vks3-use-custom-plot\"\n                        name=\"use_custom_plot\"\n                        type=\"checkbox\"\n                        value=\"1\"\n                    >\n                    <span>Create my own theme and plot<\/span>\n                <\/label>\n\n                <div\n                    id=\"vks3-custom-plot-wrap\"\n                    class=\"vks3-custom-plot-wrap\"\n                    hidden\n                >\n                    <label class=\"vks3-field\">\n                        <span>Your theme and plot<\/span>\n                        <textarea\n                            id=\"vks3-custom-plot\"\n                            name=\"custom_plot\"\n                            maxlength=\"2500\"\n                            rows=\"7\"\n                            placeholder=\"Describe the theme, central situation, characters, mystery, important events, or the direction you want the story to follow.\"\n                        ><\/textarea>\n                    <\/label>\n                <\/div>\n            <\/section>\n\n            <section class=\"vks3-panel\">\n                <h2>Personalize the workplace<\/h2>\n\n                <div class=\"vks3-fields\">\n                    <label\n                        class=\"vks3-field vks3-wide\"\n                    >\n                        <span>\n                            Profession or job role\n                        <\/span>\n\n                        <input\n                            id=\"vks3-profession\"\n                            name=\"profession_label\"\n                            type=\"text\"\n                            maxlength=\"100\"\n                            placeholder=\"For example: Content Manager\"\n                            required\n                        >\n                    <\/label>\n\n                    <label\n                        class=\"vks3-field vks3-wide\"\n                    >\n                        <span>\n                            Additional story details (optional)\n                        <\/span>\n\n                        <textarea\n                            id=\"vks3-story-details\"\n                            name=\"story_details\"\n                            maxlength=\"1200\"\n                            rows=\"4\"\n                            placeholder=\"Add optional details such as setting, tone, character roles, workplace situations, or topics to include.\"\n                        ><\/textarea>\n                    <\/label>\n\n                    <label class=\"vks3-field\">\n                        <span>Story language<\/span>\n\n                        <select\n                            id=\"vks3-target-language\"\n                            name=\"target_language\"\n                        >\n                           <option value=\"english\">\n    English\n<\/option>\n<option value=\"german\">\n    German\n<\/option>\n<option value=\"ukrainian\">\n    Ukrainian\n<\/option>\n<option value=\"russian\">\n    Russian\n<\/option>\n<option value=\"french\">\n    French\n<\/option>\n<option value=\"spanish\">\n    Spanish\n<\/option>\n<option value=\"italian\">\n    Italian\n<\/option>\n<option value=\"portuguese\">\n    Portuguese\n<\/option>\n<option value=\"malay\">\n    Malay\n<\/option>\n<option value=\"dutch\">\n    Dutch\n<\/option>\n<option value=\"polish\">\n    Polish\n<\/option>\n<option value=\"czech\">\n    Czech\n<\/option>\n<option value=\"slovak\">\n    Slovak\n<\/option>\n<option value=\"hungarian\">\n    Hungarian\n<\/option>\n<option value=\"romanian\">\n    Romanian\n<\/option>\n<option value=\"bulgarian\">\n    Bulgarian\n<\/option>\n<option value=\"croatian\">\n    Croatian\n<\/option>\n<option value=\"serbian\">\n    Serbian\n<\/option>\n<option value=\"slovenian\">\n    Slovenian\n<\/option>\n<option value=\"greek\">\n    Greek\n<\/option>\n<option value=\"turkish\">\n    Turkish\n<\/option>\n<option value=\"swedish\">\n    Swedish\n<\/option>\n<option value=\"danish\">\n    Danish\n<\/option>\n<option value=\"finnish\">\n    Finnish\n<\/option>\n<option value=\"norwegian\">\n    Norwegian\n<\/option>\n<option value=\"estonian\">\n    Estonian\n<\/option>\n<option value=\"latvian\">\n    Latvian\n<\/option>\n<option value=\"lithuanian\">\n    Lithuanian\n<\/option>\n<option value=\"arabic\">\n    Arabic\n<\/option>\n<option value=\"hebrew\">\n    Hebrew\n<\/option>\n<option value=\"hindi\">\n    Hindi\n<\/option>\n<option value=\"bengali\">\n    Bengali\n<\/option>\n<option value=\"urdu\">\n    Urdu\n<\/option>\n<option value=\"chinese\">\n    Chinese\n<\/option>\n<option value=\"japanese\">\n    Japanese\n<\/option>\n<option value=\"korean\">\n    Korean\n<\/option>\n<option value=\"thai\">\n    Thai\n<\/option>\n<option value=\"vietnamese\">\n    Vietnamese\n<\/option>\n<option value=\"indonesian\">\n    Indonesian\n<\/option>\n                        <\/select>\n                    <\/label>\n\n                    <label class=\"vks3-field\">\n                        <span>\n                            Translation language\n                        <\/span>\n\n                        <select\n                            id=\"vks3-translation-language\"\n                            name=\"translation_language\"\n                        >\n                            <option value=\"english\">\n    English\n<\/option>\n<option value=\"german\">\n    German\n<\/option>\n<option value=\"ukrainian\">\n    Ukrainian\n<\/option>\n<option value=\"russian\">\n    Russian\n<\/option>\n<option value=\"french\">\n    French\n<\/option>\n<option value=\"spanish\">\n    Spanish\n<\/option>\n<option value=\"italian\">\n    Italian\n<\/option>\n<option value=\"portuguese\">\n    Portuguese\n<\/option>\n<option value=\"dutch\">\n    Dutch\n<\/option>\n<option value=\"polish\">\n    Polish\n<\/option>\n<option value=\"czech\">\n    Czech\n<\/option>\n<option value=\"slovak\">\n    Slovak\n<\/option>\n<option value=\"hungarian\">\n    Hungarian\n<\/option>\n<option value=\"romanian\">\n    Romanian\n<\/option>\n<option value=\"bulgarian\">\n    Bulgarian\n<\/option>\n<option value=\"croatian\">\n    Croatian\n<\/option>\n<option value=\"serbian\">\n    Serbian\n<\/option>\n<option value=\"slovenian\">\n    Slovenian\n<\/option>\n<option value=\"greek\">\n    Greek\n<\/option>\n<option value=\"turkish\">\n    Turkish\n<\/option>\n<option value=\"swedish\">\n    Swedish\n<\/option>\n<option value=\"danish\">\n    Danish\n<\/option>\n<option value=\"finnish\">\n    Finnish\n<\/option>\n<option value=\"norwegian\">\n    Norwegian\n<\/option>\n<option value=\"estonian\">\n    Estonian\n<\/option>\n<option value=\"latvian\">\n    Latvian\n<\/option>\n<option value=\"lithuanian\">\n    Lithuanian\n<\/option>\n<option value=\"arabic\">\n    Arabic\n<\/option>\n<option value=\"hebrew\">\n    Hebrew\n<\/option>\n<option value=\"hindi\">\n    Hindi\n<\/option>\n<option value=\"bengali\">\n    Bengali\n<\/option>\n<option value=\"urdu\">\n    Urdu\n<\/option>\n<option value=\"chinese\">\n    Chinese\n<\/option>\n<option value=\"japanese\">\n    Japanese\n<\/option>\n<option value=\"korean\">\n    Korean\n<\/option>\n<option value=\"thai\">\n    Thai\n<\/option>\n<option value=\"vietnamese\">\n    Vietnamese\n<\/option>\n<option value=\"indonesian\">\n    Indonesian\n<\/option>\n                        <\/select>\n                    <\/label>\n\n                    <label class=\"vks3-field\">\n                        <span>Language level<\/span>\n\n                        <select\n                            id=\"vks3-level\"\n                            name=\"language_level\"\n                        >\n                            <option value=\"A2\">\n                                A2\n                            <\/option>\n                            <option\n                                value=\"B1\"\n                                selected\n                            >\n                                B1\n                            <\/option>\n                            <option value=\"B2\">\n                                B2\n                            <\/option>\n\t\t\t\t\t\t\t<option value=\"C1\">\n                                C1\n                            <\/option>\n\t\t\t\t\t\t\t<option value=\"C2\">\n                                C2\n                            <\/option>\n                        <\/select>\n                    <\/label>\n                <\/div>\n            <\/section>\n\n            <div class=\"vks3-form-actions\">\n                <button\n                    id=\"vks3-start\"\n                    type=\"submit\"\n                    class=\"vks3-primary-button\"\n                >\n                    Generate Episode 1\n                <\/button>\n            <\/div>\n        <\/form>\n\n        <div\n            id=\"vks3-error\"\n            class=\"vks3-error\"\n            hidden\n        ><\/div>\n\n        <div\n            id=\"vks3-loading\"\n            class=\"vks3-loading\"\n            hidden\n        >\n            Generating the episode\u2026\n        <\/div>\n\n        <section\n            id=\"vks3-reader\"\n            class=\"vks3-reader is-hidden\"\n        >\n            <div class=\"vks3-reader-toolbar\">\n                <button\n                    id=\"vks3-new-story\"\n                    type=\"button\"\n                    class=\"vks3-secondary-button\"\n                >\n                    Start a new story\n                <\/button>\n            <\/div>\n\n            <div id=\"vks3-episodes\">\n                            <\/div>\n\n            <div\n                id=\"vks3-continue-wrap\"\n                class=\"vks3-continue-wrap\"\n                            >\n                <button\n                    id=\"vks3-continue\"\n                    type=\"button\"\n                    class=\"vks3-primary-button\"\n                >\n                    Generate next episode\n                <\/button>\n            <\/div>\n\n            <div\n                id=\"vks3-finished\"\n                class=\"vks3-finished\"\n                 hidden            >\n                The story is complete.\n            <\/div>\n        <\/section>\n    <\/div>\n\n    <style>\n        .vks3-page,\n        .vks3-page * {\n            box-sizing: border-box;\n        }\n\n        .vks3-page {\n            width: 100%;\n            max-width: 980px;\n            margin: 0 auto;\n            padding: 44px 18px 80px;\n            color: #1a0643;\n        }\n\n        .vks3-hero {\n            max-width: 780px;\n            margin: 0 auto 36px;\n            text-align: center;\n        }\n\n        .vks3-eyebrow {\n            display: inline-block;\n            margin-bottom: 14px;\n            padding: 7px 12px;\n            border-radius: 5px;\n            background: rgba(64, 64, 162, 0.09);\n            color: #4040a2;\n            font-size: 12px;\n            font-weight: 800;\n            letter-spacing: 0.08em;\n            text-transform: uppercase;\n        }\n\n        .vks3-hero h1 {\n            margin: 0;\n            color: #1a0643;\n            font-size: clamp(34px, 5vw, 56px);\n            line-height: 1.07;\n            letter-spacing: -0.035em;\n        }\n\n        .vks3-hero p {\n            max-width: 680px;\n            margin: 20px auto 0;\n            color: #625d71;\n            font-size: 18px;\n            line-height: 1.6;\n        }\n\n        .vks3-form {\n            display: grid;\n            gap: 22px;\n        }\n\n        .vks3-panel,\n        .vks3-episode {\n            padding: 28px;\n            border: 1px solid rgba(26, 6, 67, 0.12);\n            border-radius: 8px;\n            background: #ffffff;\n            box-shadow: 0 14px 40px rgba(26, 6, 67, 0.06);\n        }\n\n        .vks3-panel h2 {\n            margin: 0 0 18px;\n            color: #1a0643;\n            font-size: 24px;\n        }\n\n        .vks3-story-select-wrap select,\n        .vks3-field input,\n        .vks3-field select,\n        .vks3-field textarea {\n            width: 100%;\n            min-height: 52px;\n            padding: 11px 14px;\n            border: 1px solid rgba(26, 6, 67, 0.2);\n            border-radius: 5px;\n            background: #ffffff;\n            color: #211b30;\n            font: inherit;\n        }\n\n        .vks3-field textarea {\n            min-height: 110px;\n            resize: vertical;\n            line-height: 1.5;\n        }\n\n        .vks3-story-teaser {\n            margin-top: 13px;\n            padding: 14px;\n            border-left: 3px solid #4040a2;\n            background: rgba(64, 64, 162, 0.06);\n            color: #5d576c;\n        }\n\n        .vks3-custom-plot-toggle {\n            display: inline-flex;\n            align-items: center;\n            gap: 9px;\n            margin-top: 15px;\n            color: #1a0643;\n            font-size: 14px;\n            font-weight: 750;\n            cursor: pointer;\n        }\n\n        .vks3-custom-plot-toggle input {\n            width: 18px;\n            height: 18px;\n            margin: 0;\n            accent-color: #4040a2;\n        }\n\n        .vks3-custom-plot-wrap {\n            margin-top: 16px;\n        }\n\n        .vks3-fields {\n            display: grid;\n            grid-template-columns:\n                repeat(3, minmax(0, 1fr));\n            gap: 18px;\n        }\n\n        .vks3-field {\n            display: block;\n        }\n\n        .vks3-field span {\n            display: block;\n            margin-bottom: 8px;\n            font-size: 14px;\n            font-weight: 750;\n        }\n\n        .vks3-wide {\n            grid-column: 1 \/ -1;\n        }\n\n        .vks3-form-actions,\n        .vks3-continue-wrap {\n            display: flex;\n            justify-content: center;\n        }\n\n        .vks3-primary-button,\n        .vks3-secondary-button {\n            min-height: 52px;\n            padding: 12px 22px;\n            border: 0;\n            border-radius: 5px;\n            font-size: 16px;\n            font-weight: 800;\n            cursor: pointer;\n        }\n\n        .vks3-primary-button {\n            background:\n                linear-gradient(\n                    135deg,\n                    #1a0643,\n                    #4040a2\n                );\n            color: #ffffff;\n        }\n\n        .vks3-secondary-button {\n            background: #e9edf5;\n            color: #1a0643;\n        }\n\n        .vks3-primary-button:disabled,\n        .vks3-secondary-button:disabled {\n            cursor: wait;\n            opacity: 0.65;\n        }\n\n        .vks3-error,\n        .vks3-loading,\n        .vks3-finished {\n            margin: 22px auto;\n            padding: 16px 18px;\n            border-radius: 5px;\n            text-align: center;\n        }\n\n        .vks3-error {\n            border: 1px solid #f2b8b5;\n            background: #fff2f1;\n            color: #9b1c1c;\n        }\n\n        .vks3-loading {\n            background: rgba(64, 64, 162, 0.08);\n            color: #4040a2;\n        }\n\t\n\t\n\t\n\t\n\t\n\t        .vks3-finished {\n            background: rgba(26, 6, 67, 0.07);\n            color: #1a0643;\n            font-weight: 800;\n        }\n\n        .vks3-reader-toolbar {\n            display: flex;\n            justify-content: flex-end;\n            margin-bottom: 18px;\n        }\n\n        .vks3-episodes {\n            display: grid;\n            gap: 28px;\n        }\n\n        .vks3-episode {\n            margin-bottom: 28px;\n        }\n\n        .vks3-episode-number {\n            display: inline-block;\n            margin-bottom: 10px;\n            color: #4040a2;\n            font-size: 13px;\n            font-weight: 850;\n            letter-spacing: 0.07em;\n            text-transform: uppercase;\n        }\n\n        .vks3-episode-head h2 {\n            margin: 0;\n            color: #1a0643;\n            font-size: clamp(28px, 4vw, 42px);\n            line-height: 1.15;\n        }\n\n        .vks3-title-translation {\n            margin: 8px 0 0;\n            color: #716b7d;\n            font-size: 18px;\n        }\n\n        .vks3-intro {\n            margin: 24px 0;\n            padding: 18px;\n            border-left: 4px solid #4040a2;\n            background: rgba(64, 64, 162, 0.05);\n        }\n\n        .vks3-dialogue {\n            display: grid;\n            gap: 13px;\n        }\n\n        .vks3-line {\n            padding: 16px;\n            border: 1px solid rgba(26, 6, 67, 0.1);\n            border-radius: 5px;\n            background: #ffffff;\n        }\n\n        .vks3-speaker {\n            margin-bottom: 6px;\n            color: #4040a2;\n            font-size: 13px;\n            font-weight: 850;\n            letter-spacing: 0.04em;\n            text-transform: uppercase;\n        }\n\n        .vks3-original {\n            color: #211b30;\n            font-size: 18px;\n            line-height: 1.55;\n        }\n\n        .vks3-translation {\n            margin-top: 5px;\n            color: #706a7c;\n            font-size: 16px;\n            line-height: 1.55;\n        }\n\n        .vks3-phrases {\n            margin-top: 24px;\n            padding: 16px;\n            border: 1px solid rgba(26, 6, 67, 0.12);\n            border-radius: 5px;\n            background: #faf9fd;\n        }\n\n        .vks3-phrases summary {\n            cursor: pointer;\n            color: #1a0643;\n            font-weight: 850;\n        }\n\n        .vks3-phrases-list {\n            display: grid;\n            gap: 16px;\n            margin-top: 16px;\n        }\n\n        .vks3-phrase p {\n            margin: 5px 0;\n            color: #655f72;\n        }\n\n        .vks3-example-translation {\n            margin-top: 3px;\n            color: #777181;\n        }\n\n        .vks3-cliffhanger {\n            margin-top: 24px;\n            padding: 18px;\n            border-left: 4px solid #1a0643;\n            background: rgba(26, 6, 67, 0.07);\n            color: #1a0643;\n            font-size: 18px;\n            font-weight: 800;\n            line-height: 1.5;\n        }\n\n        .vks3-continue-wrap {\n            margin-top: 10px;\n        }\n\n        .is-hidden {\n            display: none !important;\n        }\n\n        [hidden] {\n            display: none !important;\n        }\n\n        @media (max-width: 760px) {\n            .vks3-page {\n                padding: 32px 12px 60px;\n            }\n\n            .vks3-panel,\n            .vks3-episode {\n                padding: 20px 15px;\n            }\n\n            .vks3-fields {\n                grid-template-columns: 1fr;\n            }\n\n            .vks3-wide {\n                grid-column: auto;\n            }\n\n            .vks3-reader-toolbar {\n                justify-content: stretch;\n            }\n\n            .vks3-primary-button,\n            .vks3-secondary-button {\n                width: 100%;\n            }\n        }\n    <\/style>\n\n    <script>\n        document.addEventListener(\n            'DOMContentLoaded',\n            function () {\n                const page =\n                    document.getElementById(\n                        'vks3-page'\n                    );\n\n                if (!page) {\n                    return;\n                }\n\n                const config = {\n                    ajaxUrl: \"https:\\\/\\\/vikoko.ai\\\/wp-admin\\\/admin-ajax.php\",\n                    nonce: \"9b1b590ed6\",\n                    catalog: {\"call_from_my_own_number\":{\"title\":\"I Answered a Call from My Own Number\",\"teaser\":\"The voice on the other end knew what would happen next.\",\"premise\":\"The central character begins receiving calls from their own phone number. The caller has the same voice and knows events shortly before they happen. Develop a coherent explanation gradually; do not decide that it was merely a dream or a random prank.\"},\"message_sent_ten_years_ago\":{\"title\":\"The Message Was Sent Ten Years Ago \u2014 But It Mentioned Today\",\"teaser\":\"Someone had been waiting a decade for it to be read.\",\"premise\":\"The central character discovers a message verifiably sent ten years earlier, yet it describes details from the present day. The mystery must explain who prepared it, why it arrived now, and what the sender expected the recipient to do.\"},\"missing_colleague_messages\":{\"title\":\"Our Missing Colleague Kept Sending Messages\",\"teaser\":\"The police said the colleague had disappeared three days earlier.\",\"premise\":\"A missing colleague continues sending messages containing workplace details that only the missing person should know. The messages become increasingly specific and urgent while evidence suggests they could not have been sent normally.\"},\"changing_photograph\":{\"title\":\"Someone New Appears in This Photograph Every Night\",\"teaser\":\"Last night, the stranger was standing directly behind the owner.\",\"premise\":\"A printed photograph changes every night. A new figure appears closer each time, although the physical photograph never leaves its frame. The story must develop a consistent connection between the photograph, its owner, and the approaching figure.\"},\"apartment_that_does_not_exist\":{\"title\":\"There Is an Apartment in My Building That Doesn\u2019t Exist\",\"teaser\":\"The elevator stops there only after midnight.\",\"premise\":\"A resident discovers an apartment number absent from plans, records, and daytime reality. After midnight the elevator reaches it. The mystery must gradually reveal why the apartment exists, who can enter it, and what it changes in the building.\"},\"forgotten_passenger\":{\"title\":\"Everyone Forgot the Passenger \u2014 Except Me\",\"teaser\":\"Then the passenger appeared outside the witness\u2019s home.\",\"premise\":\"After a journey, everyone denies that a particular passenger was present. Only one witness remembers them. Evidence from the trip begins changing, while the forgotten passenger appears in places connected to the witness.\"},\"key_with_no_door\":{\"title\":\"I Found a Key to a Door That Isn\u2019t There\",\"teaser\":\"The engraved address disappeared twenty years ago.\",\"premise\":\"The central character finds a key engraved with an address that no longer exists. The key begins reacting to locations and objects that should be unrelated. The story must reveal the missing door and the consequences of opening it.\"},\"voice_in_the_recording\":{\"title\":\"A Voice Appeared in the Recording \u2014 But No One Had Spoken\",\"teaser\":\"It whispered a name and warned someone not to go home.\",\"premise\":\"A routine recording contains a voice that was not present during the session. The voice knows personal details and issues a precise warning. Later recordings contain further fragments that form a coherent message.\"},\"package_delivered_tomorrow\":{\"title\":\"The Package Was Delivered Tomorrow\",\"teaser\":\"Inside was proof of something that had not happened yet.\",\"premise\":\"A package carries a valid delivery record dated one day in the future. Its contents document an event that has not happened yet. Attempts to prevent the event alter later evidence inside the package.\"},\"same_stranger_every_photo\":{\"title\":\"The Same Stranger Is in Every Photo of My Life\",\"teaser\":\"The stranger looks unchanged in photographs taken decades apart.\",\"premise\":\"The central character discovers the same unidentified stranger in photographs from every period of their life. The stranger never ages and appears closer in each later image. The story must establish a consistent reason for the stranger\u2019s presence.\"},\"custom_story\":{\"title\":\"My Own Story\",\"teaser\":\"Create a story from your own theme and plot.\",\"premise\":\"Use the custom theme and plot supplied by the user as the central premise of the story.\"}},\n                    projectKey: \"\",\n                    chapterNumber: 0,\n                    isFinal: false                };\n\n                const form =\n                    document.getElementById(\n                        'vks3-form'\n                    );\n\n                const storySelect =\n                    document.getElementById(\n                        'vks3-story-id'\n                    );\n\n                const teaser =\n                    document.getElementById(\n                        'vks3-story-teaser'\n                    );\n\n                const target =\n                    document.getElementById(\n                        'vks3-target-language'\n                    );\n\n                const translation =\n                    document.getElementById(\n                        'vks3-translation-language'\n                    );\n\n                const profession =\n                    document.getElementById(\n                        'vks3-profession'\n                    );\n\n                const storyDetails =\n                    document.getElementById(\n                        'vks3-story-details'\n                    );\n\n                const useCustomPlot =\n                    document.getElementById(\n                        'vks3-use-custom-plot'\n                    );\n\n                const customPlotWrap =\n                    document.getElementById(\n                        'vks3-custom-plot-wrap'\n                    );\n\n                const customPlot =\n                    document.getElementById(\n                        'vks3-custom-plot'\n                    );\n\n                const startButton =\n                    document.getElementById(\n                        'vks3-start'\n                    );\n\n                const continueButton =\n                    document.getElementById(\n                        'vks3-continue'\n                    );\n\n                const continueWrap =\n                    document.getElementById(\n                        'vks3-continue-wrap'\n                    );\n\n                const newStoryButton =\n                    document.getElementById(\n                        'vks3-new-story'\n                    );\n\n                const reader =\n                    document.getElementById(\n                        'vks3-reader'\n                    );\n\n                const episodes =\n                    document.getElementById(\n                        'vks3-episodes'\n                    );\n\n                const errorBox =\n                    document.getElementById(\n                        'vks3-error'\n                    );\n\n                const loadingBox =\n                    document.getElementById(\n                        'vks3-loading'\n                    );\n\n                const finishedBox =\n                    document.getElementById(\n                        'vks3-finished'\n                    );\n\n                function showError(message) {\n                    errorBox.textContent =\n                        message ||\n                        'Something went wrong.';\n\n                    errorBox.hidden = false;\n\n                    errorBox.scrollIntoView({\n                        behavior: 'smooth',\n                        block: 'center'\n                    });\n                }\n\n                function clearError() {\n                    errorBox.hidden = true;\n                    errorBox.textContent = '';\n                }\n\n                function setLoading(\n                    active,\n                    text\n                ) {\n                    loadingBox.textContent =\n                        text ||\n                        'Generating the episode\u2026';\n\n                    loadingBox.hidden = !active;\n\n                    if (startButton) {\n                        startButton.disabled =\n                            active;\n                    }\n\n                    if (continueButton) {\n                        continueButton.disabled =\n                            active;\n                    }\n                }\n\n                async function postAction(\n                    action,\n                    payload\n                ) {\n                    const body =\n                        new FormData();\n\n                    body.append(\n                        'action',\n                        action\n                    );\n\n                    body.append(\n                        'nonce',\n                        config.nonce\n                    );\n\n                    Object.keys(\n                        payload\n                    ).forEach(function (key) {\n                        body.append(\n                            key,\n                            payload[key]\n                        );\n                    });\n\n                    const response =\n                        await fetch(\n                            config.ajaxUrl,\n                            {\n                                method: 'POST',\n                                credentials:\n                                    'same-origin',\n                                body: body\n                            }\n                        );\n\n                    let result;\n\n                    try {\n                        result =\n                            await response.json();\n                    } catch (error) {\n                        throw new Error(\n                            'The server returned an unreadable response.'\n                        );\n                    }\n\n                    if (!result.success) {\n                        throw new Error(\n                            result.data &&\n                            result.data.message\n                                ? result.data.message\n                                : 'The episode could not be generated.'\n                        );\n                    }\n\n                    return result.data;\n                }\n\n                if (storySelect) {\n                    storySelect.addEventListener(\n                        'change',\n                        function () {\n                            if (\n                                useCustomPlot &&\n                                useCustomPlot.checked\n                            ) {\n                                teaser.hidden = true;\n                                teaser.textContent = '';\n                                return;\n                            }\n\n                            const story =\n                                config.catalog[\n                                    storySelect.value\n                                ];\n\n                            if (!story) {\n                                teaser.hidden = true;\n                                teaser.textContent =\n                                    '';\n                                return;\n                            }\n\n                            teaser.textContent =\n                                story.teaser;\n\n                            teaser.hidden = false;\n                        }\n                    );\n                }\n\n                if (\n                    useCustomPlot &&\n                    customPlotWrap &&\n                    customPlot\n                ) {\n                    useCustomPlot.addEventListener(\n                        'change',\n                        function () {\n                            const enabled =\n                                useCustomPlot.checked;\n\n                            customPlotWrap.hidden =\n                                !enabled;\n\n                            customPlot.required =\n                                enabled;\n\n                            storySelect.required =\n                                !enabled;\n\n                            if (enabled) {\n                                teaser.hidden = true;\n                                teaser.textContent = '';\n                                customPlot.focus();\n                            } else if (\n                                storySelect.value &&\n                                config.catalog[\n                                    storySelect.value\n                                ]\n                            ) {\n                                teaser.textContent =\n                                    config.catalog[\n                                        storySelect.value\n                                    ].teaser;\n\n                                teaser.hidden = false;\n                            }\n                        }\n                    );\n                }\n\n                if (form) {\n                    form.addEventListener(\n                        'submit',\n                        async function (event) {\n                            event.preventDefault();\n                            clearError();\n\n                            const storyId =\n                                storySelect.value;\n\n                            const professionLabel =\n                                profession.value.trim();\n\n                            const customPlotEnabled =\n                                Boolean(\n                                    useCustomPlot &&\n                                    useCustomPlot.checked\n                                );\n\n                            const customPlotText =\n                                customPlot\n                                    ? customPlot.value.trim()\n                                    : '';\n\n                            if (\n                                !customPlotEnabled &&\n                                !storyId\n                            ) {\n                                showError(\n                                    'Choose a story.'\n                                );\n                                return;\n                            }\n\n                            if (\n                                customPlotEnabled &&\n                                customPlotText.length < 10\n                            ) {\n                                showError(\n                                    'Describe your theme and plot in at least 10 characters.'\n                                );\n                                return;\n                            }\n\n                            if (\n                                professionLabel.length <\n                                2\n                            ) {\n                                showError(\n                                    'Enter a profession or job role.'\n                                );\n                                return;\n                            }\n\n                            if (\n                                target.value ===\n                                translation.value\n                            ) {\n                                showError(\n                                    'The story and translation languages must be different.'\n                                );\n                                return;\n                            }\n\n                            setLoading(\n                                true,\n                                'Generating Episode 1\u2026'\n                            );\n\n                            try {\n                                const data =\n                                    await postAction(\n                                        'vks3_start_story',\n                                        {\n                                            story_id:\n                                                customPlotEnabled\n                                                    ? 'custom_story'\n                                                    : storyId,\n                                            profession_label:\n                                                professionLabel,\n                                            story_details:\n                                                storyDetails\n                                                    ? storyDetails.value.trim()\n                                                    : '',\n                                            use_custom_plot:\n                                                customPlotEnabled\n                                                    ? '1'\n                                                    : '',\n                                            custom_plot:\n                                                customPlotText,\n                                            target_language:\n                                                target.value,\n                                            translation_language:\n                                                translation.value,\n                                            language_level:\n                                                document\n                                                    .getElementById(\n                                                        'vks3-level'\n                                                    )\n                                                    .value\n                                        }\n                                    );\n\n                                config.projectKey =\n                                    data.project_key;\n\n                                config.chapterNumber =\n                                    data.chapter_number;\n\n                                config.isFinal =\n                                    Boolean(\n                                        data.is_final\n                                    );\n\n                                episodes.innerHTML =\n                                    data.html;\n\n                                form.classList.add(\n                                    'is-hidden'\n                                );\n\n                                reader.classList.remove(\n                                    'is-hidden'\n                                );\n\n                                continueWrap.hidden =\n                                    config.isFinal;\n\n                                finishedBox.hidden =\n                                    !config.isFinal;\n\n                                reader.scrollIntoView({\n                                    behavior:\n                                        'smooth',\n                                    block: 'start'\n                                });\n                            } catch (error) {\n                                showError(\n                                    error.message\n                                );\n                            } finally {\n                                setLoading(false);\n                            }\n                        }\n                    );\n                }\n\n                if (continueButton) {\n                    continueButton.addEventListener(\n                        'click',\n                        async function () {\n                            clearError();\n\n                            if (\n                                !config.projectKey\n                            ) {\n                                showError(\n                                    'The current story project was not found.'\n                                );\n                                return;\n                            }\n\n                            const nextEpisode =\n                                config.chapterNumber +\n                                1;\n\n                            setLoading(\n                                true,\n                                'Generating Episode ' +\n                                nextEpisode +\n                                '\u2026'\n                            );\n\n                            try {\n                                const data =\n                                    await postAction(\n                                        'vks3_continue_story',\n                                        {\n                                            project_key:\n                                                config.projectKey\n                                        }\n                                    );\n\n                                config.chapterNumber =\n                                    data.chapter_number;\n\n                                config.isFinal =\n                                    Boolean(\n                                        data.is_final\n                                    );\n\n                                const holder =\n                                    document.createElement(\n                                        'div'\n                                    );\n\n                                holder.innerHTML =\n                                    data.html;\n\n                                const newEpisode =\n                                    holder.firstElementChild;\n\n                                episodes.appendChild(\n                                    newEpisode\n                                );\n\n                                continueWrap.hidden =\n                                    config.isFinal;\n\n                                finishedBox.hidden =\n                                    !config.isFinal;\n\n                                newEpisode.scrollIntoView({\n                                    behavior:\n                                        'smooth',\n                                    block: 'start'\n                                });\n                            } catch (error) {\n                                showError(\n                                    error.message\n                                );\n                            } finally {\n                                setLoading(false);\n                            }\n                        }\n                    );\n                }\n\n                if (newStoryButton) {\n                    newStoryButton.addEventListener(\n                        'click',\n                        function () {\n                            window.location.href =\n                                window.location.pathname;\n                        }\n                    );\n                }\n            }\n        );\n    <\/script>\n    \n\n\n<\/div>\n","protected":false},"excerpt":{"rendered":"","protected":false},"author":2,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_acf_changed":false,"_wpcom_ai_launchpad_about_page":false,"_wpcom_ai_launchpad_gallery_page":false,"_wpcom_ai_launchpad_contact_page":false,"_wpcom_ai_launchpad_events_page":false,"_wpcom_ai_launchpad_video_page":false,"_wpcom_ai_launchpad_portfolio_piece":false,"footnotes":""},"class_list":["post-690","page","type-page","status-publish","hentry"],"blocksy_meta":{"has_hero_section":"disabled","styles_descriptor":{"styles":{"desktop":"[data-prefix=\"single_page\"] {background-color:#ffffff;background-image:none;} [data-prefix=\"single_page\"] [class*=\"ct-container\"] > article[class*=\"post\"] {--has-boxed:var(--false);--has-wide:var(--true);}","tablet":"","mobile":""},"google_fonts":[],"version":6},"disable_featured_image":"yes","disable_share_box":"yes","disable_header":"yes","disable_footer":"yes","background":{"background_type":"color","background_pattern":"type-1","background_image":{"attachment_id":null,"x":0,"y":0},"gradient":"linear-gradient(135deg,rgba(6,147,227,1) 0%,rgb(155,81,224) 100%)","background_repeat":"repeat","background_size":"auto","background_attachment":"scroll","patternColor":{"default":{"color":"#e5e7ea"}},"overlayColor":{"default":{"color":"CT_CSS_SKIP_RULE"}},"backgroundColor":{"default":{"color":"#ffffff"}}},"page_structure_type":"default","content_style_source":"custom","vertical_spacing_source":"custom","content_area_spacing":"none","content_style":"wide"},"acf":[],"_links":{"self":[{"href":"https:\/\/vikoko.ai\/fr\/wp-json\/wp\/v2\/pages\/690","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/vikoko.ai\/fr\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/vikoko.ai\/fr\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/vikoko.ai\/fr\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/vikoko.ai\/fr\/wp-json\/wp\/v2\/comments?post=690"}],"version-history":[{"count":33,"href":"https:\/\/vikoko.ai\/fr\/wp-json\/wp\/v2\/pages\/690\/revisions"}],"predecessor-version":[{"id":724,"href":"https:\/\/vikoko.ai\/fr\/wp-json\/wp\/v2\/pages\/690\/revisions\/724"}],"wp:attachment":[{"href":"https:\/\/vikoko.ai\/fr\/wp-json\/wp\/v2\/media?parent=690"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}