





{"id":1582,"date":"2025-08-09T16:44:53","date_gmt":"2025-08-09T16:44:53","guid":{"rendered":"https:\/\/iptv.directory\/?page_id=1582"},"modified":"2025-08-09T18:35:41","modified_gmt":"2025-08-09T18:35:41","slug":"reddit-post-success-wizard","status":"publish","type":"page","link":"https:\/\/iptv.directory\/index.php\/reddit-post-success-wizard\/","title":{"rendered":"Elementor #1582"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"1582\" class=\"elementor elementor-1582\">\n\t\t\t\t<div class=\"elementor-element elementor-element-c60d35d e-flex e-con-boxed e-con e-parent\" data-id=\"c60d35d\" data-element_type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-5c2ff3d elementor-widget elementor-widget-html\" data-id=\"5c2ff3d\" data-element_type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<!DOCTYPE html>\r\n<html lang=\"en\">\r\n<head>\r\n    <meta charset=\"UTF-8\">\r\n    <title>Microworkers Reddit Post Wizard<\/title>\r\n    <meta name=\"viewport\" content=\"width=device-width,initial-scale=1\">\r\n    <script src=\"https:\/\/cdn.jsdelivr.net\/npm\/papaparse@5.4.1\/papaparse.min.js\" defer><\/script>\r\n    <script src=\"https:\/\/cdn.jsdelivr.net\/npm\/canvas-confetti@1.9.2\/dist\/confetti.browser.min.js\" defer><\/script>\r\n    <link rel=\"stylesheet\" href=\"https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/font-awesome\/6.1.1\/css\/all.min.css\" integrity=\"sha512-KfkfwYDsLkIlwQp6LFnl8zNdLGxu9YAA1QvwINks4PhcElQSvqcyVLLD9aMhXd13uQjoXtEKNosOWaZqXgel0g==\" crossorigin=\"anonymous\" referrerpolicy=\"no-referrer\" \/>\r\n    <style>\r\n        \/* ================================================ *\/\r\n        \/* ==        VARIABLES & STYLES DE BASE          == *\/\r\n        \/* ================================================ *\/\r\n        :root{\r\n            --accent:#ff4500;\r\n            --accent-dark:#e03d00;\r\n            --ok:#28a745;\r\n            --ok-dark:#218838;\r\n            --warn:#ffc107;\r\n            --warn-dark: #d39e00;\r\n            --danger:#dc3545;\r\n            --info:#0d6efd;\r\n            --info-dark:#0b5ed7;\r\n            --tip: #6f42c1; \r\n            --tip-dark: #59359a;\r\n            --tip-light-bg: #f4f0f9;\r\n            --bg:#f5f7fa;\r\n            --panel:#ffffff;\r\n            --border:#e9eef3;\r\n            --text:#222;\r\n            --border-radius:12px;\r\n            --transition-speed: 0.2s;\r\n            --font-size-sm: 0.8rem;\r\n            --font-size-base: 1rem;\r\n            --font-size-md: 1.1rem;\r\n            --font-size-lg: 1.5rem;\r\n            --font-size-xl: 2.5rem;\r\n            --font-weight-regular: 400;\r\n            --font-weight-medium: 500;\r\n            --font-weight-semibold: 600;\r\n            --font-weight-bold: 800;\r\n        }\r\n\r\n        *{box-sizing:border-box;font-family:Inter,system-ui,-apple-system,BlinkMacSystemFont,\"Segoe UI\",Arial,sans-serif;}\r\n        \r\n        body{\r\n            margin:0;\r\n            background:linear-gradient(180deg, #f5f7fa 0%, #e9eef3 100%);\r\n            color:var(--text);\r\n            font-size: var(--font-size-base);\r\n            font-weight: var(--font-weight-regular);\r\n            min-height: 100vh;\r\n            padding-bottom: 60px;\r\n        }\r\n\r\n        a{color:var(--accent);} a:hover{text-decoration:none;}\r\n\r\n        \/* Hi\u00e9rarchie des titres *\/\r\n        .tool-title-main {\r\n            font-size: var(--font-size-xl);\r\n            font-weight: var(--font-weight-bold);\r\n            margin:0;\r\n            background:linear-gradient(90deg,var(--accent),var(--accent-dark));\r\n            -webkit-background-clip:text;\r\n            -webkit-text-fill-color:transparent;\r\n            background-clip:text;\r\n            color:transparent;\r\n        }\r\n        .tool-title-subtitle {\r\n            font-size: var(--font-size-base);\r\n            font-weight: var(--font-weight-medium);\r\n            margin:5px 0 0;\r\n            color:#555;\r\n        }\r\n        h2{\r\n            margin-top:0;\r\n            margin-bottom: 12px;\r\n            font-size: var(--font-size-lg);\r\n            font-weight: var(--font-weight-semibold);\r\n        }\r\n        h3 { \r\n            font-size: var(--font-size-md);\r\n            font-weight: var(--font-weight-semibold);\r\n            color: var(--accent);\r\n            border-bottom: 2px solid var(--border);\r\n            padding-bottom: 8px;\r\n            margin-bottom: 15px;\r\n            margin-top: 25px;\r\n            display: flex;\r\n            align-items: center;\r\n            gap: 8px;\r\n        }\r\n        h3:first-child { margin-top: 0; }\r\n        h3 .fa-solid { color: var(--accent); }\r\n\r\n        .container{max-width:980px;margin:30px auto;background:var(--panel);border:none;border-radius:16px;padding:30px;position:relative; box-shadow: 0 10px 40px rgba(0,0,0,0.08);}\r\n        \r\n        \/* ================================================ *\/\r\n        \/* ==        STYLES DES COMPOSANTS               == *\/\r\n        \/* ================================================ *\/\r\n        \r\n        \/* Barre de statut du compte *\/\r\n        #account-status-bar {\r\n            display: flex;\r\n            align-items: center;\r\n            gap: 12px;\r\n            padding: 10px 15px;\r\n            border-radius: var(--border-radius);\r\n            margin-bottom: 20px;\r\n            font-size: 0.8rem;\r\n            font-weight: 500;\r\n            border: 1px solid transparent;\r\n        }\r\n        #account-status-bar.ok { background-color: #e6f9eb; border-color: #bfe8c9; color: var(--ok-dark); }\r\n        #account-status-bar.warn { background-color: #fffbe6; border-color: #ffe58f; color: #b26a00; }\r\n        #account-status-bar img { width: 30px; height: 30px; border-radius: 50%; }\r\n        #account-status-bar strong { font-weight: 700; }\r\n        #account-status-bar .status-message { margin-right: auto; }\r\n        #account-status-bar .status-message .fa-solid { margin-right: 5px; }\r\n        #account-status-bar .stats { display: flex; gap: 15px; }\r\n        #account-status-bar .stats .fa-solid { margin-right: 4px; }\r\n        #account-status-bar.warn .stats .is-problem { font-weight: 700; text-decoration: underline; text-decoration-color: var(--danger); text-decoration-thickness: 2px; }\r\n\r\n        \/* Navigation par \u00e9tapes *\/\r\n        nav.steps{border-bottom: 1px solid var(--border); padding-bottom: 10px; margin-bottom: 25px; display:flex;gap:6px;flex-wrap:wrap;}\r\n        nav.steps button{flex:1 1 140px; border: none; background: transparent; color: #888; border-bottom: 3px solid transparent; border-radius: 6px 6px 0 0; font-weight: 600; padding: 10px 6px 8px 6px; font-size:.8rem; transition: all 0.2s ease;}\r\n        nav.steps button.active{background: var(--bg); color: var(--info); border-bottom: 3px solid var(--info);}\r\n        nav.steps i { margin-right: 6px; }\r\n        .step{display:none;} .step.active{display:block;}\r\n\r\n        \/* Animations de transition *\/\r\n        @keyframes slide-in-right { from { transform: translateX(30px); opacity: 0; } to { transform: translateX(0); opacity: 1; } }\r\n        @keyframes slide-out-left { from { transform: translateX(0); opacity: 1; } to { transform: translateX(-30px); opacity: 0; } }\r\n        .slide-in { animation: slide-in-right 0.3s forwards ease-out; }\r\n        .slide-out { animation: slide-out-left 0.3s forwards ease-out; }\r\n        \r\n        .action-panel { background-color: var(--bg); border: 1px solid var(--border); border-radius: var(--border-radius); padding: 25px; margin-top: 20px; }\r\n        \r\n        \/* Styles des champs de formulaire et validation *\/\r\n        .field{position: relative; margin-bottom:18px;}\r\n        .field label{display:block; font-size: 0.9rem; font-weight: var(--font-weight-semibold); margin-bottom:4px;}\r\n        input[type=text],textarea{width:100%;padding:10px 12px;border:1px solid var(--border);border-radius:var(--border-radius);font-size:.85rem;background:#fff; transition: box-shadow 0.2s, border-color 0.2s;}\r\n        input[type=text]:focus,textarea:focus { border-color: var(--info); box-shadow: 0 0 0 3px rgba(13, 110, 253, 0.15); outline: none; }\r\n        textarea{min-height:120px;resize:vertical;}\r\n\r\n        @keyframes shake-horizontal {\r\n            0%, 100% { transform: translateX(0); }\r\n            10%, 30%, 50%, 70% { transform: translateX(-5px); }\r\n            20%, 40%, 60%, 80% { transform: translateX(5px); }\r\n        }\r\n        .is-invalid { border-color: var(--danger) !important; animation: shake-horizontal 0.5s ease-in-out; }\r\n        .is-valid { border-color: var(--ok) !important; }\r\n\r\n        \/* Styles des boutons *\/\r\n        button { cursor: pointer; transition: all var(--transition-speed) ease-out; }\r\n        button:disabled { cursor: not-allowed; opacity: 0.65; background-color: #cccccc !important; transform: none !important; box-shadow: none !important; border-color: #cccccc !important; background-image: none !important; }\r\n        .btn { background: var(--accent); color: #fff; border: 1px solid transparent; padding: 12px 24px; border-radius: var(--border-radius); font-weight: var(--font-weight-semibold); font-size: 0.9rem; transition: all var(--transition-speed) ease-out; box-shadow: 0 2px 4px rgba(0, 0, 0, 0.07); }\r\n        .btn i { margin-right: 8px; margin-left: 0; }\r\n        .btn .fa-arrow-right, .btn .fa-triangle-exclamation { margin-left: 8px; margin-right: 0; }\r\n        .btn:hover:not(:disabled) { background: var(--accent-dark); transform: translateY(-1px); box-shadow: 0 4px 10px rgba(0, 0, 0, 0.1); }\r\n        .btn.outline { background: #fff; color: var(--accent); border: 1px solid var(--accent); }\r\n        .btn.outline:hover:not(:disabled) { background: var(--accent); color: #fff; }\r\n        .btn.outline.info { color: var(--info); border-color: var(--info); }\r\n        .btn.outline.info:hover:not(:disabled) { background: var(--info); color: #fff; }\r\n        .btn.subtle { background-color: #f8f9fa; color: #495057; border: 1px solid #dee2e6; font-weight: 500; }\r\n        .btn.subtle:hover:not(:disabled) { background-color: #e9ecef; border-color: #ced4da; color: #212529; transform: translateY(-1px); }\r\n        .btn.sm { padding: 6px 12px; font-size: .75rem; font-weight: 500; border-radius: 8px; }\r\n\r\n        \/* Bo\u00eetes d'information et listes *\/\r\n        .msg{margin-top:6px;font-size:var(--font-size-sm); padding: 10px; border-radius: var(--border-radius);}\r\n        .msg .ok{color:var(--ok);font-weight:600; background-color: #e6f9eb; border: 1px solid #bfe8c9; display: block; }\r\n        .msg .err{color:var(--danger);font-weight:600; background-color: #ffe6e6; border: 1px solid #ffb3b3; display: block;}\r\n        .note, .result-card-details, .badge{font-size: var(--font-size-sm);}\r\n        #subreddit-list .post{border:1px solid var(--border);padding:12px;border-radius:var(--border-radius);margin-bottom:10px;font-size:.75rem;background:#fff;display:flex;justify-content:space-between;gap:10px;align-items:center;position:relative; transition: transform 0.2s, box-shadow 0.2s, background-color 0.2s; box-shadow: 0 2px 8px rgba(0,0,0,0.06);}\r\n        #subreddit-list .post:hover { transform: translateY(-4px); box-shadow: 0 8px 20px rgba(0,0,0,0.07); }\r\n        .actions-bottom{margin-top:25px;display:flex;gap:12px;flex-wrap:wrap;justify-content:flex-end;align-items:center;}\r\n        .instruction-box { background-color: #eef7ff; border: 1px solid #b3d9ff; border-left: 5px solid var(--info); border-radius: var(--border-radius); padding: 15px; margin-bottom: 20px; font-size: 0.9rem; line-height: 1.5; }\r\n        .instruction-box h4 { margin: 0 0 10px 0; font-size: 0.9rem; color: #005a7d; }\r\n        .instruction-box.warn { background-color: #fffbe6; border-color: #ffe58f; border-left-color: var(--warn); }\r\n        .instruction-box.warn h4, .instruction-box.warn b { color: #b26a00; }\r\n        .instruction-box p, .instruction-box ol, .instruction-box ul { margin: 0; padding-left: 18px; }\r\n        .instruction-box p { padding-left: 0; }\r\n        #task-checklist-box { background-color: var(--panel); border-radius: var(--border-radius); padding: 20px 25px; max-width: 980px; margin: 30px auto 20px auto; border-top: 4px solid var(--accent); box-shadow: 0 8px 25px rgba(0, 0, 0, 0.08); }\r\n        .tool-title-container{text-align:center;padding:10px 0 20px 0;}\r\n        #progress-wrapper{display: flex; gap: 4px; width: 100%; height: 8px; margin-bottom: 20px;}\r\n        .progress-segment { flex: 1; background-color: #eee; border-radius: 4px; transition: background-color 0.4s ease-out; }\r\n        .progress-segment.filled { background: linear-gradient(90deg,var(--info),var(--accent)); }\r\n        #validated-content-display blockquote, #task-recap blockquote { background: #fff; border-left: 4px solid var(--ok); padding: 15px; margin: 10px 0; font-style: italic; font-size: 0.85rem; word-break: break-word; }\r\n        #subreddit-list-wrapper { background-color: #fff; border: 1px solid var(--border); border-radius: var(--border-radius); padding: 15px; margin-top: 0; max-height: 350px; overflow-y: auto; }\r\n        #subreddit-list .post:nth-child(even) { background-color: #fdfdfd; }\r\n        #subreddit-list .post.selected{border-color:var(--ok);box-shadow:0 0 0 2px #b1e8c4; background-color: #f0fff4;}\r\n        .post-actions {display: flex;align-items: center;gap: 6px;flex-shrink: 0;width: 130px;}\r\n        .status-ok{color:var(--ok);font-weight:600;}\r\n        .status-bad{color:var(--danger);font-weight:600;}\r\n        .badge.parfait{background:var(--ok);color:#fff;}\r\n        .badge.correct{background:var(--info);color:#fff;}\r\n        .badge.acorriger{background:var(--warn);color:#333;}\r\n        .badge.rejet{background:var(--danger);color:#fff;}\r\n        #score-canvas{width:150px;height:150px;}\r\n        .scorewrap{display:flex;align-items:center;gap:25px;margin-top:12px;flex-wrap:wrap;}\r\n        .hidden{display:none !important;}\r\n        #final-page{max-width:680px;margin:40px auto;text-align:center;}\r\n        #final-page h1{font-size:2rem;margin-bottom:10px;}\r\n        .final-pass{color:var(--ok);} .final-fail{color:var(--danger);}\r\n        .ok-hint{background:#e6f9eb;border:1px solid #bfe8c9;padding:10px 14px;border-radius:var(--border-radius);margin-top:12px;font-size:.7rem;font-weight:500;}\r\n        #content-checklist { list-style-type: none; padding: 0; font-size: 0.8rem; margin-top: 8px; }\r\n        #content-checklist li { margin-bottom: 4px; transition: color 0.3s; }\r\n        #content-checklist li.ok { color: var(--ok); font-weight: 600; }\r\n        #content-checklist li.ok::before { content: '\u2705 '; }\r\n        #content-checklist li.not-ok::before { content: '\u274c '; }\r\n        #watermark {position: absolute;top: 50%;left: 50%;transform: translate(-50%, -50%) rotate(-30deg);font-size: 3vw;font-weight: 800;color: rgba(0, 0, 0, 0.07);pointer-events: none;white-space: nowrap;z-index: 10;}\r\n\r\n        .result-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(250px, 1fr)); gap: 15px; margin-top: 20px; }\r\n        .result-card { background-color: #f8f9fa; border: 1px solid var(--border); border-radius: var(--border-radius); padding: 15px; }\r\n        .result-card-header { display: flex; align-items: center; gap: 10px; margin-bottom: 8px; }\r\n        .result-card-header h4 { margin: 0; font-size: 0.9rem; }\r\n        .result-card-details a {font-weight: 600;}\r\n        \r\n        #task-checklist { list-style: none; padding: 0; margin: 10px 0 0 0; }\r\n        #task-checklist li { display: flex; align-items: center; padding: 8px 0; font-size: 0.9rem; transition: all 0.3s ease; border-top: 1px solid var(--border); }\r\n        #task-checklist li:first-child { border-top: none; }\r\n        #task-checklist li span { display: inline-flex; align-items: center; justify-content: center; width: 22px; height: 22px; border-radius: 50%; border: 2px solid var(--border); margin-right: 12px; transition: all 0.3s ease; }\r\n        #task-checklist li.active { font-weight: 700; color: var(--info); }\r\n        #task-checklist li.active span { border-color: var(--info); }\r\n        #task-checklist li.active span::before { content: '\u25b6'; color: var(--info); font-size: 10px; }\r\n        #task-checklist li.completed { color: #888; text-decoration: line-through; opacity: 0.7; }\r\n        #task-checklist li.completed span { background-color: var(--ok); border-color: var(--ok); }\r\n        #task-checklist li.completed span::before { content: '\u2714'; color: white; font-size: 12px; }\r\n        \r\n        @media(max-width:700px){.container{padding:22px;} nav.steps button{flex:1 1 46%;font-size:.7rem;} #score-canvas{width:130px;height:130px;} #account-status-bar{flex-wrap: wrap;}}\r\n    <\/style>\r\n<\/head>\r\n<body>\r\n\r\n<div class=\"tool-title-container\">\r\n    <h1 class=\"tool-title-main\">Reddit Post Wizard \ud83d\ude80<\/h1>\r\n    <p class=\"tool-title-subtitle\">Your assistant for a flawless submission<\/p>\r\n<\/div>\r\n\r\n<div id=\"task-checklist-box\">\r\n    <h3><i class=\"fa-solid fa-list-check\"><\/i> Your Mission<\/h3>\r\n    <ol id=\"task-checklist\">\r\n        <li id=\"checklist-item-0\"><span><\/span>Loading & Setup<\/li>\r\n        <li id=\"checklist-item-1\"><span><\/span>Verify Accounts & MW ID<\/li>\r\n        <li id=\"checklist-item-2\"><span><\/span>Create & Verify Post<\/li>\r\n        <li id=\"checklist-item-3\"><span><\/span>Review Final Result<\/li>\r\n    <\/ol>\r\n<\/div>\r\n\r\n<div class=\"container\" id=\"wizard\" data-current-step=\"0\">\r\n    \r\n    <div id=\"account-status-bar\" class=\"hidden\"><\/div>\r\n    \r\n    <div id=\"progress-wrapper\">\r\n        <div class=\"progress-segment\"><\/div>\r\n        <div class=\"progress-segment\"><\/div>\r\n        <div class=\"progress-segment\"><\/div>\r\n        <div class=\"progress-segment\"><\/div>\r\n    <\/div>\r\n    <nav class=\"steps\" aria-label=\"steps\">\r\n        <button id=\"nav0\" class=\"active\"><i class=\"fa-solid fa-spinner fa-fw fa-spin\"><\/i> Loading<\/button>\r\n        <button id=\"nav1\"><i class=\"fa-solid fa-user-shield fa-fw\"><\/i> 1. Accounts<\/button>\r\n        <button id=\"nav2\"><i class=\"fa-solid fa-pen-to-square fa-fw\"><\/i> 2. Task & Verification<\/button>\r\n        <button id=\"nav3\"><i class=\"fa-solid fa-flag-checkered fa-fw\"><\/i> 3. Result<\/button>\r\n    <\/nav>\r\n\r\n    <div class=\"step active\" id=\"step0\">\r\n        <h2><i class=\"fa-solid fa-cogs\"><\/i> Initializing & Setup<\/h2>\r\n        <div class=\"action-panel\">\r\n            <div class=\"progress-bar-container\" style=\"width: 100%; background: #e9eef3; border-radius: 4px; overflow: hidden; margin-bottom: 20px;\">\r\n                <div id=\"loading-progress\" style=\"height: 12px; width: 0%; background: linear-gradient(90deg, var(--info), var(--accent)); transition: width 0.5s ease-in-out;\"><\/div>\r\n            <\/div>\r\n            <ul id=\"loading-tasks\" style=\"list-style-type: none; padding: 0;\"><\/ul>\r\n        <\/div>\r\n    <\/div>\r\n\r\n    <div class=\"step\" id=\"step1\">\r\n        <h2><i class=\"fa-solid fa-user-shield\"><\/i> Step 1 \u2013 Account Validation<\/h2>\r\n        <div class=\"instruction-box\">\r\n            <h4><i class=\"fa-solid fa-circle-info\"><\/i> Prerequisites<\/h4>\r\n            <ul style=\"padding-left: 20px; margin: 0;\">\r\n                <li>A valid Reddit account (7+ days, 50+ karma recommended)<\/li>\r\n                <li>Your Microworkers Username<\/li>\r\n                <li>5 minutes of your time<\/li>\r\n            <\/ul>\r\n        <\/div>\r\n        <div class=\"action-panel\">\r\n            <div class=\"field\">\r\n                <label for=\"reddit-username\">Reddit Username or Profile URL<\/label>\r\n                <input type=\"text\" id=\"reddit-username\" placeholder=\"reddit.com\/user\/YourUsername\">\r\n                <div id=\"msg1\" class=\"msg\"><\/div>\r\n            <\/div>\r\n            <div id=\"mw-id-field\" class=\"field hidden\">\r\n                <hr style=\"margin:20px 0;\">\r\n                <label for=\"mw-username\">Microworkers Username<\/label>\r\n                <p class=\"note\">To find your username, go to <a href=\"https:\/\/www.microworkers.com\/account.php\" target=\"_blank\">your Microworkers account<\/a> and look for \"Your Username is...\"<\/p>\r\n                <input type=\"text\" id=\"mw-username\" placeholder=\"e.g., YourMicroworkerUsername\">\r\n                <div id=\"msg2\" class=\"msg\"><\/div>\r\n            <\/div>\r\n            <button id=\"verify-account-btn\" class=\"btn\"><i class=\"fa-solid fa-user-check\"><\/i>Verify Account<\/button>\r\n        <\/div>\r\n    <\/div>\r\n\r\n    <div class=\"step\" id=\"step2\">\r\n        <div id=\"step2-part1\">\r\n            <h2><i class=\"fa-solid fa-pen-to-square\"><\/i> Step 2.1 \u2013 Create Your Post<\/h2>\r\n             <div class=\"instruction-box\">\r\n                <h4><i class=\"fa-solid fa-bullseye\"><\/i> Your Mission for this Step<\/h4>\r\n                <p>\r\n                    Your goal is to <b>write an authentic post<\/b> about IPTV, then <b>choose a subreddit<\/b> from the list below where you will publish it.\r\n                <\/p>\r\n            <\/div>\r\n            <div class=\"action-panel\">\r\n                <div class=\"field\">\r\n                    <label for=\"post-title\">Post Title<\/label>\r\n                    <input type=\"text\" id=\"post-title\" placeholder=\"e.g., Looking for a reliable IPTV for sports\">\r\n                <\/div>\r\n                 <div class=\"field\">\r\n                    <label for=\"post-body\">Post Body<\/label>\r\n                    <textarea id=\"post-body\" placeholder=\"Describe your experience or ask a question. Mentioning XtreamCube as a good option is recommended.\"><\/textarea>\r\n                    <ul id=\"content-checklist\">\r\n                        <li id=\"check-title-length\" class=\"not-ok\">Title: at least 15 characters<\/li>\r\n                        <li id=\"check-body-length\" class=\"not-ok\">Body: at least 50 characters<\/li>\r\n                        <li id=\"check-keyword\" class=\"not-ok\">Contains \"XtreamCube\" (in title or body)<\/li>\r\n                    <\/ul>\r\n                <\/div>\r\n                <button id=\"validate-content-btn\" class=\"btn\"><i class=\"fa-solid fa-check\"><\/i> Validate Content<\/button>\r\n            <\/div>\r\n        <\/div>\r\n\r\n        <div id=\"step2-part2\" class=\"hidden\">\r\n             <h3><i class=\"fa-solid fa-signs-post\"><\/i> Step 2.2: Choose Subreddit & Post<\/h3>\r\n            <div class=\"instruction-box\">\r\n                <h4>How to proceed:<\/h4>\r\n                <ol>\r\n                    <li><b>Go to Submit Page:<\/b> Click a \"Go to Post Page\" button below to open the submission page for that subreddit in a new tab.<\/li>\r\n                    <li><b>Create Your Post:<\/b> On Reddit, paste your Title and Body, then submit the post.<\/li>\r\n                    <li><b>Copy Post URL:<\/b> After posting, copy the URL of your new post from your browser's address bar.<\/li>\r\n                    <li><b>Return & Select:<\/b> Come back here, click the \"Select\" button for the subreddit you used, and then paste the URL in the field that appears.<\/li>\r\n                <\/ol>\r\n            <\/div>\r\n            <div id=\"subreddit-list-wrapper\">\r\n                <div id=\"subreddit-list\">Loading...<\/div>\r\n            <\/div>\r\n             <div id=\"paste-url-zone\" class=\"action-panel hidden\" style=\"margin-top:15px; background-color: #eef7ff;\">\r\n                 <div class=\"field\">\r\n                    <label for=\"post-url\">Paste your new Post URL here:<\/label>\r\n                    <input type=\"text\" id=\"post-url\" placeholder=\"https:\/\/www.reddit.com\/r\/subreddit\/comments\/...\">\r\n                <\/div>\r\n                <button id=\"verify-post-url-btn\" class=\"btn\"><i class=\"fa-solid fa-link\"><\/i> Verify My Post<\/button>\r\n             <\/div>\r\n             <div id=\"verif\" class=\"msg\" style=\"margin-top:8px;\"><\/div>\r\n        <\/div>\r\n        \r\n        <div class=\"actions-bottom\">\r\n            <button id=\"step2-back-btn\" class=\"btn subtle\"><i class=\"fa-solid fa-arrow-left\"><\/i> Back to Step 1<\/button>\r\n            <button id=\"next-step2-btn\" class=\"btn hidden\"><i class=\"fa-solid fa-arrow-right\"><\/i> Next \u2192 Result<\/button>\r\n        <\/div>\r\n    <\/div>\r\n\r\n    <div class=\"step\" id=\"step3\">\r\n        <h2><i class=\"fa-solid fa-flag-checkered\"><\/i> Step 3 \u2013 Final Validation<\/h2>\r\n        <div id=\"result-box\"><\/div>\r\n        <div class=\"actions-bottom\">\r\n            <button id=\"back-fix-btn\" class=\"btn subtle\"><i class=\"fa-solid fa-wrench\"><\/i> Go Back to Fix<\/button>\r\n            <button id=\"finish-btn\" class=\"btn\"><i class=\"fa-solid fa-paper-plane\"><\/i> Finish & Submit<\/button>\r\n        <\/div>\r\n    <\/div>\r\n<\/div>\r\n\r\n<div id=\"final-page\" class=\"hidden\"><\/div>\r\n\r\n<script>\r\n    \/\/ ================================================\r\n    \/\/ ==        POST WIZARD - MAIN SCRIPT           ==\r\n    \/\/ ================================================\r\n    let current = 0;\r\n    let redditData = {}, mwUser = '', postTitle = '', postBody = '', selectedSubreddit = null;\r\n    let verifiedPostData = null;\r\n    let lastResultContext = null;\r\n\r\n    \/\/ Configuration\r\n    const PROXY_URL = '.\/proxy.php'; \/\/ Relative path to your proxy\r\n    const SUBREDDITS_CSV_URL = 'https:\/\/n8n.srv749745.hstgr.cloud\/webhook\/xcw-post-templates000';\r\n\r\n    \/\/ --- UTILITY & HELPER FUNCTIONS ---\r\n    const el = (id) => document.getElementById(id);\r\n    const safeHTML = (str) => str.replace(\/[<>&\"'`]\/g, c => ({'<':'&lt;','>':'&gt;','&':'&amp;','\"':'&quot;',\"'\":'&#39;','`':'&#96;'})[c]);\r\n    const normalizeText = (txt) => (txt || '').toLowerCase().replace(\/\\s+\/g, ' ').trim();\r\n\r\n    async function fetchViaProxy(targetUrl, timeout = 10000) {\r\n        const controller = new AbortController();\r\n        const timeoutId = setTimeout(() => controller.abort(), timeout);\r\n        \r\n        const proxyRequestUrl = `${PROXY_URL}?url=${encodeURIComponent(targetUrl)}`;\r\n\r\n        try {\r\n            const response = await fetch(proxyRequestUrl, { signal: controller.signal });\r\n            clearTimeout(timeoutId);\r\n            if (!response.ok) {\r\n                throw new Error(`Proxy fetch failed with status ${response.status}`);\r\n            }\r\n            if (targetUrl.endsWith('.json')) {\r\n                return await response.json();\r\n            }\r\n            return await response.text();\r\n        } catch (error) {\r\n            clearTimeout(timeoutId);\r\n            console.error(`Error fetching via proxy for ${targetUrl}:`, error);\r\n            throw error;\r\n        }\r\n    }\r\n\r\n    \/\/ --- NAVIGATION & UI ---\r\n\r\n    function updateTaskChecklist() {\r\n        const navMap = {0:0, 1:1, 2:2, 3:3};\r\n        for (let i = 0; i <= 3; i++) {\r\n            const item = el(`checklist-item-${i}`);\r\n            if (!item) continue;\r\n            item.classList.remove('active', 'completed');\r\n            const mappedCurrent = navMap[current] || current;\r\n            if (i < mappedCurrent) { item.classList.add('completed'); } \r\n            else if (i === mappedCurrent) { item.classList.add('active'); }\r\n        }\r\n    }\r\n    \r\n    function renderNav() {\r\n        const navMap = { 0:0, 1:1, 2:2, 3:3 };\r\n        document.querySelectorAll('nav.steps button').forEach(btn => {\r\n            const btnStep = parseInt(btn.id.replace('nav',''));\r\n            const isActive = (navMap[current] === btnStep);\r\n            btn.classList.toggle('active', isActive);\r\n        });\r\n        document.querySelectorAll('.progress-segment').forEach((segment, index) => {\r\n            segment.classList.toggle('filled', index < current);\r\n        });\r\n    }\r\n\r\n    function goto(step) {\r\n        if (step === current) return;\r\n        el('wizard').setAttribute('data-current-step', step);\r\n        const newStepEl = el('step' + step);\r\n        const oldStepEl = document.querySelector('.step.active');\r\n\r\n        if(oldStepEl) oldStepEl.classList.add('slide-out');\r\n        \r\n        setTimeout(() => {\r\n            if(oldStepEl) oldStepEl.classList.remove('active', 'slide-out');\r\n            if(newStepEl) {\r\n                newStepEl.classList.add('active', 'slide-in');\r\n                setTimeout(() => newStepEl.classList.remove('slide-in'), 300);\r\n            }\r\n            current = step;\r\n            renderNav();\r\n            updateTaskChecklist();\r\n        }, 300);\r\n    }\r\n    \r\n    function confirmAndGoToResult() {\r\n        goto(3);\r\n        buildResult();\r\n    }\r\n\r\n    \/\/ --- STEP 0: INITIALIZATION ---\r\n\r\n    async function initApp() {\r\n        const loadingList = el('loading-tasks');\r\n        const loadingProgress = el('loading-progress');\r\n        \r\n        loadingProgress.style.width = '10%';\r\n        loadingList.innerHTML = `<li><i class=\"fa-solid fa-spinner fa-spin fa-fw\"><\/i> The Wizard is preparing your mission... \ud83e\ude84<\/li>`;\r\n\r\n        try {\r\n            const csvData = await fetchViaProxy(SUBREDDITS_CSV_URL);\r\n            handleSubredditsData(csvData);\r\n            loadingProgress.style.width = '80%';\r\n            loadingList.querySelector('li').innerHTML = `<i class=\"fa-solid fa-check\"><\/i> Mission prepared!`;\r\n            \r\n            setTimeout(() => {\r\n                loadingProgress.style.width = '100%';\r\n                setTimeout(() => goto(1), 1200);\r\n            }, 500);\r\n\r\n        } catch (error) {\r\n            loadingList.innerHTML = `\r\n                <li>\u274c Failed to load the list of subreddits.<\/li>\r\n                <div class=\"err msg\" style=\"display:block; margin-top:10px;\">\r\n                    There was a problem connecting to the server.\r\n                    <button id=\"retry-load-btn\" class=\"btn sm\" style=\"margin-top:10px;\">\r\n                        <i class=\"fa-solid fa-rotate-right\"><\/i> Try Again\r\n                    <\/button>\r\n                <\/div>`;\r\n            el('nav0').innerHTML = `<i class=\"fa-solid fa-triangle-exclamation fa-fw\"><\/i> Error`;\r\n            el('retry-load-btn').addEventListener('click', initApp);\r\n        }\r\n    }\r\n\r\n    \/\/ --- STEP 1: ACCOUNT VALIDATION ---\r\n\r\n    async function checkAccount() {\r\n        const input = el('reddit-username');\r\n        const raw = input.value.trim();\r\n        let user = raw.match(\/\\\/u(?:ser)?\\\/([a-zA-Z0-9_-]+)\/)?.[1] || raw.replace(\/^(u\\\/|user\\\/)\/, '');\r\n        const msg = el('msg1');\r\n        const btn = el('verify-account-btn');\r\n        const statusBar = el('account-status-bar');\r\n\r\n        if (!user) { msg.innerHTML = '<span class=\"err\">Please enter a valid username.<\/span>'; return; }\r\n        \r\n        btn.disabled = true;\r\n        btn.innerHTML = `<i class=\"fa-solid fa-spinner fa-spin\"><\/i> Verifying...`;\r\n        \r\n        try {\r\n            const redditApiUrl = `https:\/\/www.reddit.com\/user\/${user}\/about.json`;\r\n            const json = await fetchViaProxy(redditApiUrl);\r\n            const j = json.data;\r\n            const age = Math.floor((Date.now() \/ 1000 - j.created_utc) \/ 86400);\r\n            const karma = j.total_karma;\r\n            redditData = { name: j.name, createdUTC: j.created_utc, age, karma, avatar: j.icon_img.split('?')[0] };\r\n\r\n            el('mw-id-field').classList.remove('hidden');\r\n            statusBar.classList.remove('hidden');\r\n            \r\n            const ageOk = age >= 7;\r\n            const karmaOk = karma >= 50;\r\n\r\n            if (ageOk && karmaOk) {\r\n                statusBar.className = 'ok';\r\n                statusBar.innerHTML = `<img decoding=\"async\" src=\"${redditData.avatar}\" alt=\"Avatar\"><strong>${redditData.name}<\/strong><span class=\"status-message\"><i class=\"fa-solid fa-check-circle\"><\/i> Account Eligible<\/span><div class=\"stats\"><span><i class=\"fa-solid fa-cake-candles\"><\/i> ${age} days<\/span><span><i class=\"fa-solid fa-arrow-up-right-dots\"><\/i> ${karma} karma<\/span><\/div>`;\r\n                msg.innerHTML = '';\r\n                input.classList.add('is-valid');\r\n            } else {\r\n                statusBar.className = 'warn';\r\n                statusBar.innerHTML = `<img decoding=\"async\" src=\"${redditData.avatar}\" alt=\"Avatar\"><strong>${redditData.name}<\/strong><span class=\"status-message\"><i class=\"fa-solid fa-triangle-exclamation\"><\/i> Status: Warning<\/span><div class=\"stats\"><span class=\"${ageOk ? '' : 'is-problem'}\"><i class=\"fa-solid fa-cake-candles\"><\/i> ${age} days<\/span><span class=\"${karmaOk ? '' : 'is-problem'}\"><i class=\"fa-solid fa-arrow-up-right-dots\"><\/i> ${karma} karma<\/span><\/div>`;\r\n                msg.innerHTML = `<div class=\"instruction-box warn\" style=\"margin-top: 15px;\"><h4><i class=\"fa-solid fa-circle-info\"><\/i> Important<\/h4><p>Your account doesn't meet the recommended criteria (7+ days, 50+ karma). Your post may be auto-removed by Reddit.<\/p><\/div>`;\r\n            }\r\n\r\n            btn.innerHTML = 'Next <i class=\"fa-solid fa-arrow-right\"><\/i>';\r\n            btn.onclick = () => {\r\n                mwUser = el('mw-username').value.trim();\r\n                if (mwUser.length < 3) {\r\n                    el('msg2').innerHTML = '<span class=\"err\">Microworkers username is too short.<\/span>';\r\n                    return;\r\n                }\r\n                 el('msg2').innerHTML = '';\r\n                goto(2);\r\n            };\r\n\r\n        } catch (error) {\r\n            statusBar.classList.add('hidden');\r\n            input.classList.add('is-invalid');\r\n            msg.innerHTML = `<span class=\"err\">Profile not found or API error. Please check the username and try again.<\/span>`;\r\n            btn.innerHTML = '<i class=\"fa-solid fa-user-check\"><\/i> Verify Account';\r\n        } finally {\r\n            btn.disabled = false;\r\n        }\r\n    }\r\n\r\n    \/\/ --- STEP 2: TASK & VERIFICATION ---\r\n    \r\n    function checkContentRealtime() {\r\n        const title = el('post-title').value;\r\n        const body = el('post-body').value;\r\n        const titleOk = title.trim().length >= 15;\r\n        const bodyOk = body.trim().length >= 50;\r\n        const keywordOk = \/xtreamcube\/i.test(title + body);\r\n\r\n        el('check-title-length').className = titleOk ? 'ok' : 'not-ok';\r\n        el('check-body-length').className = bodyOk ? 'ok' : 'not-ok';\r\n        el('check-keyword').className = keywordOk ? 'ok' : 'not-ok';\r\n        \r\n        el('validate-content-btn').disabled = !(titleOk && bodyOk && keywordOk);\r\n    }\r\n    \r\n    function validateContentAndShowSubreddits() {\r\n        postTitle = el('post-title').value.trim();\r\n        postBody = el('post-body').value.trim();\r\n        \r\n        el('step2-part1').classList.add('hidden');\r\n        el('step2-part2').classList.remove('hidden');\r\n    }\r\n    \r\n    function handleSubredditsData(csvText) {\r\n        const list = el('subreddit-list');\r\n        list.innerHTML = '';\r\n        const parsed = Papa.parse(csvText || \"\", { header: true }).data;\r\n        const activeSubreddits = parsed.filter(r => r.Subreddit && r.Actif && r.Actif.toLowerCase() === 'oui');\r\n        \r\n        if (activeSubreddits.length === 0) {\r\n             list.innerHTML = `<p style=\"text-align:center; padding: 20px;\" class=\"status-bad\">No active subreddits available right now.<\/p>`;\r\n             return;\r\n        }\r\n\r\n        activeSubreddits.forEach(s => {\r\n            const div = document.createElement('div');\r\n            div.className = 'post';\r\n            div.innerHTML = `\r\n                <div style=\"flex:1;\">\r\n                    <b>r\/${safeHTML(s.Subreddit)}<\/b><br>\r\n                    <small>${safeHTML(s.Description || 'General discussion')}<\/small>\r\n                <\/div>\r\n                <div class=\"post-actions\">\r\n                    <button class=\"btn outline info sm btn-open-submit\">Go to Post Page<\/button>\r\n                    <button class=\"btn sm btn-select\" disabled>Select<\/button>\r\n                <\/div>`;\r\n            \r\n            const submitUrl = `https:\/\/www.reddit.com\/r\/${s.Subreddit}\/submit`;\r\n            div.querySelector('.btn-open-submit').addEventListener('click', (e) => {\r\n                window.open(submitUrl, '_blank');\r\n                e.target.textContent = 'Opened \u2714';\r\n                e.target.disabled = true;\r\n                div.querySelector('.btn-select').disabled = false;\r\n            });\r\n\r\n            div.querySelector('.btn-select').addEventListener('click', () => {\r\n                selectedSubreddit = s.Subreddit;\r\n                document.querySelectorAll('#subreddit-list .post').forEach(p => p.classList.remove('selected'));\r\n                div.classList.add('selected');\r\n                el('paste-url-zone').classList.remove('hidden');\r\n            });\r\n\r\n            list.appendChild(div);\r\n        });\r\n    }\r\n\r\n    async function verifyPostUrl() {\r\n        const urlInput = el('post-url');\r\n        const url = urlInput.value.trim();\r\n        const verifBox = el('verif');\r\n        const btn = el('verify-post-url-btn');\r\n\r\n        const match = url.match(\/comments\\\/([a-z0-9]+)\/);\r\n        if (!match) {\r\n            verifBox.innerHTML = '<span class=\"err\">Invalid post URL format.<\/span>';\r\n            return;\r\n        }\r\n        const postId = match[1];\r\n\r\n        btn.disabled = true;\r\n        btn.innerHTML = `<i class=\"fa-solid fa-spinner fa-spin\"><\/i> Verifying...`;\r\n\r\n        try {\r\n            const postApiUrl = `https:\/\/www.reddit.com\/comments\/${postId}.json`;\r\n            const json = await fetchViaProxy(postApiUrl);\r\n            \r\n            const postData = json[0]?.data?.children?.[0]?.data;\r\n            if (!postData) {\r\n                throw new Error(\"Post data not found in API response.\");\r\n            }\r\n            verifiedPostData = postData;\r\n\r\n            if (normalizeText(verifiedPostData.author) !== normalizeText(redditData.name)) {\r\n                verifBox.innerHTML = `<span class=\"err\">Verification failed: The author of this post (<b>${verifiedPostData.author}<\/b>) does not match your verified account (<b>${redditData.name}<\/b>).<\/span>`;\r\n                return;\r\n            }\r\n             if (normalizeText(verifiedPostData.subreddit) !== normalizeText(selectedSubreddit)) {\r\n                verifBox.innerHTML = `<span class=\"err\">Verification failed: This post is in <b>r\/${verifiedPostData.subreddit}<\/b>, but you selected <b>r\/${selectedSubreddit}<\/b>. Please go back and select the correct subreddit.<\/span>`;\r\n                return;\r\n            }\r\n            \r\n            verifBox.innerHTML = `<span class=\"ok\">\u2705 Post found and verified! You can proceed to the final result.<\/span>`;\r\n            el('next-step2-btn').classList.remove('hidden');\r\n\r\n        } catch (error) {\r\n            verifBox.innerHTML = `<span class=\"err\">Could not verify the post. It might be removed or the URL is incorrect. Please check the URL and try again.<\/span>`;\r\n        } finally {\r\n             btn.disabled = false;\r\n             btn.innerHTML = `<i class=\"fa-solid fa-link\"><\/i> Verify My Post`;\r\n        }\r\n    }\r\n\r\n\r\n    \/\/ --- STEP 3: FINAL RESULT ---\r\n    \r\n    function buildResult() {\r\n        const resultBox = el('result-box');\r\n        if (!redditData || !verifiedPostData) {\r\n            resultBox.innerHTML = `<div class=\"msg err\">Error: Missing data for result generation.<\/div>`;\r\n            return;\r\n        }\r\n\r\n        const d = verifiedPostData;\r\n        const checks = {\r\n            user: normalizeText(redditData.name) === normalizeText(d.author),\r\n            subreddit: normalizeText(selectedSubreddit) === normalizeText(d.subreddit),\r\n            title: normalizeText(postTitle) === normalizeText(d.title),\r\n            body: normalizeText(postBody) === normalizeText(d.selftext),\r\n            keyword: \/xtreamcube\/i.test(d.title + d.selftext),\r\n            age: (redditData.age || 0) >= 7,\r\n        };\r\n\r\n        let score = 0;\r\n        if (checks.user) score += 25;\r\n        if (checks.subreddit) score += 20;\r\n        if (checks.title) score += 20;\r\n        if (checks.body) score += 20;\r\n        if (checks.keyword) score += 10;\r\n        if (checks.age) score += 5;\r\n\r\n        const isCriticalFailure = !checks.user || !checks.subreddit || !checks.title || !checks.body;\r\n        const allGood = !isCriticalFailure;\r\n        \r\n        let status = 'Needs Correction', badgeClass = 'acorriger';\r\n        if (isCriticalFailure) { status = 'Rejected'; badgeClass = 'rejet'; } \r\n        else if (score >= 95) { status = 'Perfect'; badgeClass = 'parfait'; }\r\n        else { status = 'Correct'; badgeClass = 'correct'; }\r\n\r\n        lastResultContext = { allGood, score, status };\r\n        \r\n        const summaryText = allGood ? `Score: ${score}\/100. Great job!` : `Score: ${score}\/100. Corrections needed.`;\r\n        \r\n        let html = `<p><b>${summaryText}<\/b> <span class=\"badge ${badgeClass}\">${status}<\/span><\/p>\r\n                    <div class=\"scorewrap\"><canvas id=\"score-canvas\" width=\"150\" height=\"150\"><\/canvas><\/div>\r\n                    <div class=\"result-grid\">`;\r\n\r\n        html += `<div class=\"result-card\"><div class=\"result-card-header\"><span class=\"result-card-icon\">${checks.user ? '\u2705' : '\u274c'}<\/span><h4>User<\/h4><\/div><div class=\"result-card-details\">Declared: <b>${safeHTML(redditData.name)}<\/b><br>Actual: <b>${safeHTML(d.author)}<\/b><\/div><\/div>`;\r\n        html += `<div class=\"result-card\"><div class=\"result-card-header\"><span class=\"result-card-icon\">${checks.subreddit ? '\u2705' : '\u274c'}<\/span><h4>Subreddit<\/h4><\/div><div class=\"result-card-details\">Selected: <b>r\/${safeHTML(selectedSubreddit)}<\/b><br>Actual: <b>r\/${safeHTML(d.subreddit)}<\/b><\/div><\/div>`;\r\n        html += `<div class=\"result-card\"><div class=\"result-card-header\"><span class=\"result-card-icon\">${checks.title ? '\u2705' : '\u274c'}<\/span><h4>Title Match<\/h4><\/div><div class=\"result-card-details\">${checks.title ? '<b class=\"status-ok\">Matches<\/b>' : '<b class=\"status-bad\">Does not match<\/b>'}<\/div><\/div>`;\r\n        html += `<div class=\"result-card\"><div class=\"result-card-header\"><span class=\"result-card-icon\">${checks.body ? '\u2705' : '\u274c'}<\/span><h4>Body Match<\/h4><\/div><div class=\"result-card-details\">${checks.body ? '<b class=\"status-ok\">Matches<\/b>' : '<b class=\"status-bad\">Does not match<\/b>'}<\/div><\/div>`;\r\n\r\n        html += '<\/div>';\r\n\r\n        if (!checks.title || !checks.body) {\r\n             html += `<div class=\"instruction-box warn\" style=\"margin-top: 15px;\"><h4>Content Mismatch<\/h4><p>The title or body of your post on Reddit does not exactly match what you entered in the wizard. Please go back and either edit your Reddit post or update the content in the wizard.<\/p><\/div>`;\r\n        }\r\n\r\n        if (allGood) {\r\n            html += `<div class=\"ok-hint\">\u2705 All checks passed. <b>Take a screenshot of this page<\/b> and submit it as proof.<\/div>`;\r\n        }\r\n        \r\n        const watermarkText = `${safeHTML(mwUser)} - ${new Date().toLocaleString('en-US')}`;\r\n        html += `<div id=\"watermark\">${watermarkText}<\/div>`;\r\n        resultBox.innerHTML = html;\r\n\r\n        el('back-fix-btn').classList.toggle('hidden', allGood);\r\n        drawDonut(score);\r\n        if (score >= 95 && allGood) { setTimeout(() => confetti({ particleCount: 150, spread: 90, origin: { y: 0.6 } }), 500); }\r\n    }\r\n    \r\n    function drawDonut(score) {\r\n        const cvs = el('score-canvas');\r\n        if (!cvs) return;\r\n        const ctx = cvs.getContext('2d');\r\n        const radius = 65, centerX = cvs.width \/ 2, centerY = cvs.height \/ 2;\r\n        ctx.lineWidth = 16;\r\n        \r\n        const computedStyle = getComputedStyle(document.documentElement);\r\n        let scoreColorVar = '--danger';\r\n        if (score >= 75) scoreColorVar = '--ok';\r\n        else if (score >= 50) scoreColorVar = '--warn';\r\n\r\n        ctx.strokeStyle = '#e9eef3';\r\n        ctx.beginPath();\r\n        ctx.arc(centerX, centerY, radius, 0, Math.PI * 2);\r\n        ctx.stroke();\r\n\r\n        const endAngle = -Math.PI \/ 2 + (Math.PI * 2 * (score \/ 100));\r\n        ctx.strokeStyle = computedStyle.getPropertyValue(scoreColorVar).trim();\r\n        ctx.lineCap = 'round';\r\n        ctx.beginPath();\r\n        ctx.arc(centerX, centerY, radius, -Math.PI \/ 2, endAngle);\r\n        ctx.stroke();\r\n\r\n        ctx.fillStyle = '#222';\r\n        ctx.font = 'bold 24px Inter,Arial';\r\n        ctx.textAlign = 'center';\r\n        ctx.textBaseline = 'middle';\r\n        ctx.fillText(score, centerX, centerY - 8);\r\n        ctx.font = '12px Inter,Arial';\r\n        ctx.fillStyle = '#666';\r\n        ctx.fillText('\/ 100', centerX, centerY + 15);\r\n    }\r\n    \r\n    function finishJob() {\r\n        if (!lastResultContext) return;\r\n        el('wizard').classList.add('hidden');\r\n        const finalPage = el('final-page');\r\n        finalPage.classList.remove('hidden');\r\n        finalPage.innerHTML = `\r\n            <h1 class=\"${lastResultContext.allGood ? 'final-pass' : 'final-fail'}\">${lastResultContext.allGood ? 'SUCCESS \u2705' : 'FAILURE \u274c'}<\/h1>\r\n            <p>Your final score is <b>${lastResultContext.score}\/100<\/b>.<\/p>\r\n            <p>${lastResultContext.allGood ? 'You can now submit your proof.' : 'Please correct the issues before submitting.'}<\/p>\r\n            <button class=\"btn\" onclick=\"location.reload()\"><i class=\"fa-solid fa-rotate-right\"><\/i> Start Over<\/button>\r\n        `;\r\n    }\r\n\r\n    \/\/ --- INITIALIZE ---\r\n    window.addEventListener('DOMContentLoaded', () => {\r\n        el('nav1').addEventListener('click', () => goto(1));\r\n        el('nav2').addEventListener('click', () => goto(2));\r\n        el('nav3').addEventListener('click', () => goto(3));\r\n        \r\n        el('verify-account-btn').addEventListener('click', checkAccount);\r\n        el('reddit-username').addEventListener('input', () => { el('verify-account-btn').disabled = el('reddit-username').value.trim() === ''; });\r\n        \r\n        el('post-title').addEventListener('input', checkContentRealtime);\r\n        el('post-body').addEventListener('input', checkContentRealtime);\r\n        el('validate-content-btn').addEventListener('click', validateContentAndShowSubreddits);\r\n        el('verify-post-url-btn').addEventListener('click', verifyPostUrl);\r\n        el('next-step2-btn').addEventListener('click', confirmAndGoToResult);\r\n\r\n        el('step2-back-btn').addEventListener('click', () => goto(1));\r\n        el('back-fix-btn').addEventListener('click', () => goto(2));\r\n        el('finish-btn').addEventListener('click', finishJob);\r\n\r\n        initApp();\r\n        renderNav();\r\n        updateTaskChecklist();\r\n        checkContentRealtime();\r\n    });\r\n<\/script>\r\n\r\n<\/body>\r\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>Microworkers Reddit Post Wizard Reddit Post Wizard \ud83d\ude80 Your assistant for a flawless submission Your Mission Loading &#038; Setup Verify Accounts &#038; MW ID Create &#038; Verify Post Review Final Result Loading 1. Accounts 2. Task &#038; Verification 3. Result Initializing &#038; Setup Step 1 \u2013 Account Validation Prerequisites A valid Reddit account (7+ days, [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-1582","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/iptv.directory\/index.php\/wp-json\/wp\/v2\/pages\/1582","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/iptv.directory\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/iptv.directory\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/iptv.directory\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/iptv.directory\/index.php\/wp-json\/wp\/v2\/comments?post=1582"}],"version-history":[{"count":35,"href":"https:\/\/iptv.directory\/index.php\/wp-json\/wp\/v2\/pages\/1582\/revisions"}],"predecessor-version":[{"id":1617,"href":"https:\/\/iptv.directory\/index.php\/wp-json\/wp\/v2\/pages\/1582\/revisions\/1617"}],"wp:attachment":[{"href":"https:\/\/iptv.directory\/index.php\/wp-json\/wp\/v2\/media?parent=1582"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}