{"id":3908,"date":"2026-01-22T23:20:39","date_gmt":"2026-01-22T23:20:39","guid":{"rendered":"https:\/\/measuresquare.com\/?page_id=3908"},"modified":"2026-01-23T23:01:59","modified_gmt":"2026-01-23T23:01:59","slug":"estimator-curriculum-milestones","status":"publish","type":"page","link":"https:\/\/measuresquare.com\/estimator-curriculum-milestones\/","title":{"rendered":"Estimator Curriculum Milestones"},"content":{"rendered":"<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img decoding=\"async\" width=\"2560\" height=\"919\" src=\"https:\/\/measuresquare.com\/wp-content\/uploads\/2026\/01\/Blue-and-Peach-Modern-Lined-Illustration-Business-Plan-Presentation-2560-x-919-px-12-scaled.png\" alt=\"\" class=\"wp-image-3920\" srcset=\"https:\/\/measuresquare.com\/wp-content\/uploads\/2026\/01\/Blue-and-Peach-Modern-Lined-Illustration-Business-Plan-Presentation-2560-x-919-px-12-scaled.png 2560w, https:\/\/measuresquare.com\/wp-content\/uploads\/2026\/01\/Blue-and-Peach-Modern-Lined-Illustration-Business-Plan-Presentation-2560-x-919-px-12-300x108.png 300w, https:\/\/measuresquare.com\/wp-content\/uploads\/2026\/01\/Blue-and-Peach-Modern-Lined-Illustration-Business-Plan-Presentation-2560-x-919-px-12-1024x368.png 1024w, https:\/\/measuresquare.com\/wp-content\/uploads\/2026\/01\/Blue-and-Peach-Modern-Lined-Illustration-Business-Plan-Presentation-2560-x-919-px-12-1536x551.png 1536w, https:\/\/measuresquare.com\/wp-content\/uploads\/2026\/01\/Blue-and-Peach-Modern-Lined-Illustration-Business-Plan-Presentation-2560-x-919-px-12-2048x735.png 2048w, https:\/\/measuresquare.com\/wp-content\/uploads\/2026\/01\/Blue-and-Peach-Modern-Lined-Illustration-Business-Plan-Presentation-2560-x-919-px-12-564x202.png 564w\" sizes=\"(max-width: 2560px) 100vw, 2560px\" \/><\/figure>\n<\/div>\n\n\n<div id=\"ms-crm-onboard-root\"><\/div>\n\n<style>\n    \/* ====== Base ====== *\/\n    #ms-crm-onboard-root {\n        \/* font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\",\n            Roboto, Helvetica, Arial, sans-serif;\n        color: #0f172a; *\/\n    }\n\n    .ms-wrap {\n        max-width: 1300px;\n        margin: 0 auto;\n        padding: 32px 18px 60px;\n    }\n\n    .ms-muted {\n        color: #64748b;\n    }\n\n    .ms-h1 {\n        font-size: 32px;\n        font-weight: 800;\n        letter-spacing: -0.02em;\n        margin: 0 0 8px;\n    }\n\n    .ms-h2 {\n        font-size: 20px;\n        font-weight: 800;\n        margin: 0 0 10px;\n    }\n\n    .ms-h3 {\n        font-size: 16px;\n        font-weight: 800;\n        margin: 0 0 8px;\n    }\n\n    .ms-card {\n        background: #fff;\n        border: 1px solid #e2e8f0;\n        border-radius: 14px;\n        box-shadow: 0 6px 20px rgba(15, 23, 42, 0.05);\n    }\n\n    .ms-btn {\n        background: #0b84ff;\n        color: #fff;\n        border: none;\n        border-radius: 10px;\n        padding: 10px 14px;\n        font-weight: 700;\n        cursor: pointer;\n        font-size: 14px;\n    }\n\n    .ms-btn.secondary {\n        background: #fff;\n        color: #0b84ff;\n        border: 1.5px solid #cfe6ff;\n    }\n\n    .ms-btn.ghost {\n        background: transparent;\n        color: #0b84ff;\n        border: none;\n    }\n\n    .ms-divider {\n        height: 1px;\n        background: #e2e8f0;\n        margin: 22px 0;\n    }\n\n    .ms-pill {\n        font-size: 12px;\n        font-weight: 700;\n        color: #0b84ff;\n        border: 1px solid #cfe6ff;\n        background: #f5faff;\n        padding: 4px 8px;\n        border-radius: 999px;\n    }\n\n    \/* ====== Step containers ====== *\/\n    .ms-step {\n        margin-top: 14px;\n    }\n\n    .ms-step-head {\n        display: flex;\n        align-items: center;\n        justify-content: space-between;\n        gap: 10px;\n        margin-bottom: 10px;\n    }\n\n    \/* ====== Welcome ====== *\/\n    .ms-welcome {\n        padding: 20px;\n        display: grid;\n        grid-template-columns: 1.4fr 0.6fr;\n        gap: 14px;\n    }\n\n    .ms-welcome p {\n        line-height: 1.6;\n        margin: 0 0 10px;\n    }\n\n    .ms-welcome-hero {\n        background: linear-gradient(135deg, #f2f8ff, #ffffff);\n        border: 1px dashed #cfe6ff;\n        border-radius: 14px;\n        padding: 14px;\n        display: flex;\n        flex-direction: column;\n        gap: 8px;\n    }\n\n    \/* ====== Roles ====== *\/\n    .ms-role-grid {\n        display: grid;\n        grid-template-columns: repeat(3, 1fr);\n        grid-template-rows: repeat(2, auto);\n        gap: 12px 16px;\n        \/* \u4e0a\u4e0b12px \u5de6\u53f316px\uff0c\u95f4\u8ddd\u66f4\u7f8e\u89c2 *\/\n        margin-top: 20px;\n        max-width: 700px;\n        \/* \u8ba9\u6574\u4f53\u66f4\u96c6\u4e2d\u3001\u7f8e\u89c2 *\/\n        margin-left: auto;\n        margin-right: auto;\n    }\n\n\n    @media (max-width: 1000px) {\n        .ms-role-grid {\n            grid-template-columns: repeat(3, 1fr);\n        }\n\n        .ms-welcome {\n            grid-template-columns: 1fr;\n        }\n    }\n\n    @media (max-width: 520px) {\n        .ms-role-grid {\n            grid-template-columns: repeat(2, 1fr);\n        }\n    }\n\n    .ms-role-btn {\n        padding: 14px 10px;\n        border: 2px solid #bfe1ff;\n        color: #0b84ff;\n        background: #fff;\n        border-radius: 12px;\n        font-weight: 800;\n        cursor: pointer;\n        min-height: 58px;\n    }\n\n    .ms-role-btn.active {\n        background: #0b84ff;\n        color: #fff;\n        border-color: #0b84ff;\n        box-shadow: 0 6px 16px rgba(11, 132, 255, 0.25);\n    }\n\n    \/* ====== Milestones Overview ====== *\/\n    .ms-milestone-row {\n        display: grid;\n        grid-template-columns: repeat(3, 1fr);\n        gap: 18px;\n        margin-top: 8px;\n    }\n\n    @media (max-width: 1000px) {\n        .ms-milestone-row {\n            grid-template-columns: repeat(2, 1fr);\n        }\n    }\n\n    @media (max-width: 520px) {\n        .ms-milestone-row {\n            grid-template-columns: 1fr;\n        }\n    }\n\n    .ms-milestone-card {\n        padding: 14px;\n        border: 2px dashed #bfe1ff;\n        border-radius: 12px;\n        background: #fff;\n        cursor: pointer;\n        transition: 0.15s ease;\n\n        display: flex;\n        flex-direction: column;\n        min-height: 260px;\n        \/* \u4fdd\u8bc1\u6240\u6709\u5361\u7247\u9ad8\u5ea6\u4e00\u81f4\uff0c\u53ef\u5fae\u8c03 *\/\n    }\n\n\n    .ms-milestone-card:hover {\n        transform: translateY(-2px);\n    }\n\n    .ms-milestone-title {\n        font-weight: 900;\n        margin-bottom: 4px;\n    }\n\n    .ms-milestone-meta {\n        display: flex;\n        gap: 8px;\n        flex-wrap: wrap;\n        margin: 6px 0 8px;\n    }\n\n    .ms-milestone-desc {\n        color: #334155;\n        font-size: 14px;\n        line-height: 1.45;\n        flex: 1;\n    }\n\n    \/* =========================================================\n     \u2705 Milestone Detail (Timeline style like your FIG 2)\n     ========================================================= *\/\n    .ms-mdetail-topbar {\n        background: #f3f4f6;\n        border-radius: 10px;\n        padding: 12px 14px;\n        display: grid;\n        grid-template-columns: 1fr 2fr 1fr;\n        gap: 8px;\n        font-weight: 700;\n        color: #475569;\n        font-size: 14px;\n        align-items: center;\n        margin: 6px 0 12px;\n    }\n\n    .ms-mdetail-topbar div:nth-child(2) {\n        visibility: hidden;\n    }\n\n\n    .ms-mdetail-layout {\n        display: grid;\n        grid-template-columns: 260px 1fr;\n        gap: 18px;\n        margin-top: 6px;\n        align-items: start;\n    }\n\n    @media (max-width: 900px) {\n        .ms-mdetail-layout {\n            grid-template-columns: 1fr;\n        }\n    }\n\n    \/* Left info card *\/\n    .ms-mdetail-side {\n        border: 3px dashed #bfe1ff;\n        border-radius: 12px;\n        padding: 14px;\n        background: #fff;\n    }\n\n    .ms-mdetail-side .title {\n        font-weight: 900;\n        font-size: 18px;\n        margin-bottom: 6px;\n        display: flex;\n        justify-content: space-between;\n        align-items: center;\n    }\n\n    .ms-mdetail-side .desc {\n        font-size: 14px;\n        line-height: 1.6;\n        color: #334155;\n        margin-top: 10px;\n    }\n\n    .ms-mdetail-side .playbook {\n        width: 100%;\n        margin-top: 14px;\n        padding: 10px 12px;\n        border-radius: 10px;\n        border: 1.5px solid #cfe6ff;\n        background: #0b84ff;\n        color: #fff;\n        font-weight: 800;\n        cursor: pointer;\n    }\n\n    \/* Timeline column *\/\n    .ms-timeline {\n        position: relative;\n        padding-left: 34px;\n    }\n\n    .ms-timeline:before {\n        content: \"\";\n        position: absolute;\n        left: 10px;\n        top: 6px;\n        bottom: 6px;\n        width: 2px;\n        background: #e5e7eb;\n    }\n\n    .ms-tl-item {\n        position: relative;\n        margin-bottom: 14px;\n    }\n\n    .ms-tl-dot {\n        position: absolute;\n        left: -31px;\n        top: 18px;\n        width: 16px;\n        height: 16px;\n        border-radius: 50%;\n        border: 3px solid #e5e7eb;\n        background: #fff;\n    }\n\n    \/* Right lesson cards fixed max width 750px *\/\n    .ms-lesson-card-v2 {\n        max-width: 750px;\n        width: 100%;\n        border: 2px dashed #e5e7eb;\n        border-radius: 12px;\n        background: #fff;\n        padding: 14px 16px;\n        display: grid;\n        grid-template-columns: 1fr auto;\n        gap: 10px;\n        align-items: center;\n    }\n\n    .ms-lesson-card-v2 .l-title {\n        font-size: 18px;\n        font-weight: 900;\n        margin-bottom: 4px;\n    }\n\n    .ms-lesson-card-v2 .l-desc {\n        font-size: 14px;\n        color: #334155;\n        line-height: 1.6;\n    }\n\n    .ms-lesson-card-v2 .l-min {\n        font-size: 14px;\n        color: #475569;\n        text-align: right;\n        margin-bottom: 8px;\n        font-weight: 700;\n    }\n\n    .ms-lesson-card-v2 .l-cta {\n        display: flex;\n        flex-direction: column;\n        align-items: flex-end;\n        gap: 6px;\n        min-width: 150px;\n    }\n\n    .ms-lesson-link {\n        font-weight: 800;\n        color: #0b84ff;\n        background: transparent;\n        border: none;\n        cursor: pointer;\n        font-size: 14px;\n    }\n\n    .ms-lesson-link:hover {\n        text-decoration: underline;\n    }\n\n    \/* ====== Tutorial page ====== *\/\n    .ms-tutorial {\n        padding: 16px;\n        margin-top: 8px;\n    }\n\n    .ms-objectives {\n        border: 2px dashed #0b84ff;\n        border-radius: 12px;\n        padding: 12px;\n        margin-top: 8px;\n    }\n\n    .ms-objectives li {\n        margin: 6px 0;\n    }\n\n    .ms-kb-slot {\n        height: 220px;\n        border-radius: 12px;\n        border: 1.5px dashed #cbd5e1;\n        display: flex;\n        align-items: center;\n        justify-content: center;\n        color: #64748b;\n        margin-top: 14px;\n        background: #fafafa;\n    }\n\n    .ms-rel-articles a {\n        display: block;\n        color: #0b84ff;\n        text-decoration: none;\n        margin-top: 6px;\n        font-weight: 600;\n    }\n\n    .ms-rel-articles a:hover {\n        text-decoration: underline;\n    }\n\n    \/* ====== Other resources ====== *\/\n    .ms-resource-grid {\n        display: grid;\n        grid-template-columns: repeat(4, 1fr);\n        gap: 12px;\n        margin-top: 10px;\n    }\n\n    @media (max-width: 900px) {\n        .ms-resource-grid {\n            grid-template-columns: repeat(2, 1fr);\n        }\n    }\n\n    @media (max-width: 520px) {\n        .ms-resource-grid {\n            grid-template-columns: 1fr;\n        }\n    }\n\n    .ms-resource-card {\n        padding: 10px;\n        border: 2px solid #bfe1ff;\n        border-radius: 12px;\n    }\n\n    .ms-resource-thumb {\n        height: 110px;\n        background: #0b84ff;\n        border-radius: 8px;\n        margin-bottom: 8px;\n    }\n\n    .ms-resource-title {\n        font-weight: 800;\n        margin-bottom: 2px;\n    }\n\n    .ms-resource-date {\n        font-size: 12px;\n        color: #64748b;\n    }\n\n    \/* ====== About Instructor (Plan A: Professional Authority) ====== *\/\n    .ms-instructor {\n        padding: 20px;\n        border: 1px solid #cfe6ff;\n        \/* soft border *\/\n        border-radius: 14px;\n        background: linear-gradient(135deg, #f5faff, #ffffff);\n        \/* light, clean *\/\n    }\n\n    .ms-instructor-wrap {\n        display: grid;\n        grid-template-columns: 160px 1fr;\n        gap: 16px;\n        align-items: start;\n    }\n\n    @media (max-width: 700px) {\n        .ms-instructor-wrap {\n            grid-template-columns: 1fr;\n        }\n    }\n\n    .ms-instructor-avatar {\n        width: 140px;\n        height: 140px;\n        border-radius: 999px;\n        \/* circular *\/\n        border: 3px solid #bfe1ff;\n        background: #ffffff;\n        box-shadow: 0 6px 18px rgba(15, 23, 42, 0.06);\n        overflow: hidden;\n        display: flex;\n        align-items: center;\n        justify-content: center;\n        margin: 0 auto;\n    }\n\n    .ms-instructor-avatar img {\n        width: 100%;\n        height: 100%;\n        object-fit: cover;\n        display: block;\n    }\n\n    .ms-instructor-name {\n        font-size: 18px;\n        font-weight: 900;\n        margin: 0;\n        line-height: 1.25;\n        color: #0f172a;\n    }\n\n    .ms-instructor-title {\n        margin-top: 6px;\n        font-size: 14px;\n        font-weight: 800;\n        color: #334155;\n    }\n\n    .ms-instructor-bio {\n        margin-top: 10px;\n        font-size: 14px;\n        line-height: 1.7;\n        color: #334155;\n    }\n\n    .ms-instructor-badges {\n        display: flex;\n        gap: 8px;\n        flex-wrap: wrap;\n        margin-top: 10px;\n    }\n\n    .ms-badge {\n        font-size: 12px;\n        font-weight: 800;\n        color: #0b84ff;\n        border: 1px solid #cfe6ff;\n        background: #ffffff;\n        padding: 6px 10px;\n        border-radius: 999px;\n    }\n\n    .ms-instructor-quote {\n        margin-top: 12px;\n        padding: 12px 14px;\n        border-radius: 12px;\n        border: 1px dashed #bfe1ff;\n        background: #ffffff;\n        color: #334155;\n        font-size: 14px;\n        line-height: 1.65;\n    }\n\n    .ms-instructor-quote strong {\n        color: #0f172a;\n    }\n<\/style>\n\n<script>\n    (function () {\n        \/* =========================================================\n           DATA: Role, lessons\n           ========================================================= *\/\n        const DATA = {\n            roles: [\n                { id: \"admin\", label: \"Admin\" },\n                { id: \"field_sup\", label: \"Field Sup\" },\n                { id: \"pm\", label: \"Project Manager\" },\n                { id: \"installer\", label: \"Installer\" },\n                { id: \"accountant\", label: \"Accountant\" },\n                { id: \"sales_rep\", label: \"Sales Rep\" },\n            ],\n            milestones: [\n                {\n                    id: \"m1\",\n                    title: \"Milestone 1\",\n                    achievement: \"Digital Takeoff Fundamentals\",\n                    lessonsCount: 3,\n                    estHours: \"1 hour\",\n                    roles: [\"admin\", \"sales_rep\", \"pm\"],\n                    desc: \"Master importing, scaling, and rescaling plans; manipulate rooms via merging, punching, holes, and auto-completion; configure wall thickness and room settings to ensure precise alignment of interior partitions across complex layouts.\",\n                    lessons: [\n                        {\n                            id: \"l1\",\n                            title: \"Session 1: Takeoff Fundamentals\",\n                            minutes: 25,\n                            desc: \"Learn how to set up projects correctly by importing plans, selecting pages, and scaling drawings. This session ensures all measurements start with accurate foundations.\",\n                            objectives: [\n                                \"Importing PDF, JPEG, and PNG plans\",\n                                \"Selecting relevant plan pages\",\n                                \"Setting and verifying blueprint scale\",\n                                \"Navigating and zooming within drawings\",\n                                \"Drawing basic rectangular rooms\"\n                            ],\n                            url: \"https:\/\/www.youtube.com\/watch?v=rUUKixoIRIU&list=PLTdAHW7WN17vdN-8t3aadbbPVRAfuGQ-q&index=1\",\n                            kbEmbed: `<div class=\"ms-kb-slot\">Insert User guide article \/ video here<\/div>`,\n                            related: [\n                                { title: \"What is a Lead vs Contact?\", url: \"#\" },\n                                { title: \"CRM Navigation Shortcuts\", url: \"#\" },\n                            ]\n                        },\n                        {\n                            id: \"l2\",\n                            title: \"Session 2: Drawing Continued\",\n                            minutes: 13,\n                            desc: \"Build confidence in creating complex room shapes and managing negative spaces to ensure accurate takeoffs in real-world floor plans.\",\n                            objectives: [\n                                \"Using draw rectangle and free draw tools\",\n                                \"Closing complex corridors and shapes\",\n                                \"Inserting holes for chases and gaps\",\n                                \"Removing non-floor areas from quantities\",\n                                \"Cleaning and aligning wall segments\"\n                            ],\n                            url: \"https:\/\/www.youtube.com\/watch?v=XqihSlcL5WA&list=PLTdAHW7WN17vdN-8t3aadbbPVRAfuGQ-q&index=2\",\n                            kbEmbed: `<div class=\"ms-kb-slot\">Insert User guide article \/ video here<\/div>`,\n                            related: [{ title: \"Lead Import Template\", url: \"#\" }]\n                        },\n                        {\n                            id: \"l3\",\n                            title: \"Session 3: Estimating Fundamentals\",\n                            minutes: 24,\n                            desc: \"Learn how to estimate non-standard architectural elements like stairs, landings, and custom openings while building accurate product templates.\",\n                            objectives: [\n                                \"Creating stairwells and landings\",\n                                \"Using the Stairway tool\",\n                                \"Adding custom door openings\",\n                                \"Duplicating and modifying products\",\n                                \"Configuring product dimensions and units\"\n                            ],\n                            url: \"https:\/\/www.youtube.com\/watch?v=W1NwORT1d1g&list=PLTdAHW7WN17vdN-8t3aadbbPVRAfuGQ-q&index=3\",\n                            kbEmbed: `<div class=\"ms-kb-slot\">Insert User guide article \/ video here<\/div>`,\n                            related: [{ title: \"Lead Import Template\", url: \"#\" }]\n                        }\n                    ]\n                },\n                {\n                    id: \"m2\",\n                    title: \"Milestone 2\",\n                    achievement: \"Finish Application & Documentation\",\n                    lessonsCount: 3,\n                    estHours: \"1.5 hour\",\n                    roles: [\"admin\", \"sales_rep\"],\n                    desc: \"Apply carpet, tile, and trim to floors, walls, and ceilings; use pattern positioning and 45-degree layouts; master annotation tools, legends, and saved print profiles for professional documentation.\",\n                    lessons: [\n                        {\n                            id: \"l4\",\n                            title: \"Session 4A: Product Assignment and Estimation\",\n                            minutes: 32,\n                            desc: \"Apply finishes and transitions efficiently to rooms and walls while understanding how linear items are calculated.\",\n                            objectives: [\n                                \"Dragging products into rooms and walls\",\n                                \"Applying transitions at doorways\",\n                                \"Calculating wall base automatically\",\n                                \"Understanding perimeter-based quantities\"\n                            ],\n                            url: \"https:\/\/www.youtube.com\/watch?v=pzspZ4FQdG4&list=PLTdAHW7WN17vdN-8t3aadbbPVRAfuGQ-q&index=4\",\n                            kbEmbed: `<div class=\"ms-kb-slot\">Insert User guide article \/ video here<\/div>`,\n                            related: []\n                        },\n                        {\n                            id: \"l5\",\n                            title: \"Session 4B: Advanced Product Application\",\n                            minutes: 26,\n                            desc: \"Control phasing, alignment, and large-area estimation to ensure product placement matches design intent and construction logic.\",\n                            objectives: [\n                                \"Assigning room phases\",\n                                \"Setting tile start points\",\n                                \"Applying products to stairs and landings\",\n                                \"Managing waste in large areas\",\n                                \"Aligning adjacent finishes\"\n                            ],\n                            url: \"https:\/\/www.youtube.com\/watch?v=jCpSsiihN_M&list=PLTdAHW7WN17vdN-8t3aadbbPVRAfuGQ-q&index=5\",\n                            kbEmbed: `<div class=\"ms-kb-slot\">Insert User guide article \/ video here<\/div>`,\n                            related: []\n                        },\n                        {\n                            id: \"l6\",\n                            title: \"Session 5: Print Settings and Reports\",\n                            minutes: 18,\n                            desc: \"Transform takeoff data into professional documents with customizable worksheets, reports, and branded layouts.\",\n                            objectives: [\n                                \"Organizing data in the Worksheet\",\n                                \"Generating PDF reports\",\n                                \"Exporting takeoff drawings\",\n                                \"Adjusting fonts and legends\",\n                                \"Adding company logos\"\n                            ],\n                            url: \"https:\/\/www.youtube.com\/watch?v=Coit4DszMuY&list=PLTdAHW7WN17vdN-8t3aadbbPVRAfuGQ-q&index=6\",\n                            kbEmbed: `<div class=\"ms-kb-slot\">Insert User guide article \/ video here<\/div>`,\n                            related: []\n                        }\n                    ]\n                },\n                {\n                    id: \"m3\",\n                    title: \"Milestone 3\",\n                    achievement: \"Intermediate Design & Elevation Tools\",\n                    lessonsCount: 3,\n                    estHours: \"1 hour\",\n                    roles: [\"admin\", \"sales_rep\", \"pm\"],\n                    desc: \"Use Dividers and Segments for complex floor designs and linear products; master Vertical Takeoffs with Elevation; apply Poly, stamps, and arrows to highlight revisions and critical project changes.\",\n                    lessons: [\n                        {\n                            id: \"l7\",\n                            title: \"Session 6: Review and Refinement\",\n                            minutes: 20,\n                            desc: \"Validate project accuracy by auditing quantities, correcting errors, and preparing data for final delivery.\",\n                            objectives: [\n                                \"Reviewing the Estimate List\",\n                                \"Identifying missing products\",\n                                \"Finding orphaned items\",\n                                \"Verifying scope accuracy\",\n                                \"Exporting data to Excel or proposals\"\n                            ],\n                            url: \"https:\/\/www.youtube.com\/watch?v=iZ42ZuqXlss&list=PLTdAHW7WN17vdN-8t3aadbbPVRAfuGQ-q&index=7\",\n                            kbEmbed: `<div class=\"ms-kb-slot\">Insert User guide article \/ video here<\/div>`,\n                            related: [\n                                { title: \"What is a Lead vs Contact?\", url: \"#\" },\n                                { title: \"CRM Navigation Shortcuts\", url: \"#\" },\n                            ]\n                        },\n                        {\n                            id: \"l8\",\n                            title: \"Session 7: Segment, Elevation, and Markup\",\n                            minutes: 18,\n                            desc: \"Capture vertical and linear elements while clearly communicating changes using professional markup tools.\",\n                            objectives: [\n                                \"Using Elevation for millwork\",\n                                \"Applying products under cabinetry\",\n                                \"Creating toe-kick base with Segments\",\n                                \"Adding revision clouds\",\n                                \"Using notes, arrows, and stamps\"\n                            ],\n                            url: \"https:\/\/www.youtube.com\/watch?v=qUvB2oqCugo&list=PLTdAHW7WN17vdN-8t3aadbbPVRAfuGQ-q&index=8\",\n                            kbEmbed: `<div class=\"ms-kb-slot\">Insert User guide article \/ video here<\/div>`,\n                            related: [{ title: \"Lead Import Template\", url: \"#\" }]\n                        },\n                        {\n                            id: \"l9\",\n                            title: \"Session 8: Shower and Mud Bed Estimation\",\n                            minutes: 22,\n                            desc: \"Estimate wet-area construction accurately by modeling curbs, niches, trims, and specialty tile applications.\",\n                            objectives: [\n                                \"Building shower curbs\",\n                                \"Adjusting curb heights\",\n                                \"Applying floor and wall tile\",\n                                \"Creating recessed niches\",\n                                \"Using trim on exposed edges\"\n                            ],\n                            url: \"https:\/\/www.youtube.com\/watch?v=fUvkFC_cPko&list=PLTdAHW7WN17vdN-8t3aadbbPVRAfuGQ-q&index=9\",\n                            kbEmbed: `<div class=\"ms-kb-slot\">Insert User guide article \/ video here<\/div>`,\n                            related: []\n                        }\n                    ]\n                },\n                {\n                    id: \"m4\",\n                    title: \"Milestone 4\",\n                    achievement: \"Tile Best Practices & System Logic\",\n                    lessonsCount: 4,\n                    estHours: \"1.5 hour\",\n                    roles: [\"admin\", \"sales_rep\", \"pm\"],\n                    desc: \"Configure calculation methods, waste radius, and grout defaults; build complex tile patterns with random layouts and welded joints; adjust rotation permissions to ensure accurate, real-world tile quantities.\",\n                    lessons: [\n                        {\n                            id: \"l10\",\n                            title: \"Session 9: Tile and Product Settings\",\n                            minutes: 27,\n                            desc: \"Configure calculation methods and system defaults to balance accuracy, efficiency, and real-world installation behavior.\",\n                            objectives: [\n                                \"Selecting calculation methods\",\n                                \"Setting grout width defaults\",\n                                \"Enabling tile rotation\",\n                                \"Configuring waste share radius\",\n                                \"Isolating waste by tab\"\n                            ],\n                            url: \"https:\/\/www.youtube.com\/watch?v=iAH5AbnWDSg&list=PLTdAHW7WN17vdN-8t3aadbbPVRAfuGQ-q&index=10\",\n                            kbEmbed: `<div class=\"ms-kb-slot\">Insert User guide article \/ video here<\/div>`,\n                            related: [\n                                { title: \"What is a Lead vs Contact?\", url: \"#\" },\n                                { title: \"CRM Navigation Shortcuts\", url: \"#\" },\n                            ]\n                        },\n                        {\n                            id: \"l11\",\n                            title: \"Session 10: Patterns and Modular Products\",\n                            minutes: 25,\n                            desc: \"Design and apply complex tile patterns while ensuring seamless continuity across connected spaces.\",\n                            objectives: [\n                                \"Resizing built-in patterns\",\n                                \"Quick-assigning patterned products\",\n                                \"Building custom patterns\",\n                                \"Snapping repeatable tiles\",\n                                \"Aligning patterns across rooms\"\n                            ],\n                            url: \"https:\/\/www.youtube.com\/watch?v=Fyt-WL2yDeQ&list=PLTdAHW7WN17vdN-8t3aadbbPVRAfuGQ-q&index=11\",\n                            kbEmbed: `<div class=\"ms-kb-slot\">Insert User guide article \/ video here<\/div>`,\n                            related: [{ title: \"Lead Import Template\", url: \"#\" }]\n                        },\n                        {\n                            id: \"l12\",\n                            title: \"Session 11: Layout and Transitions\",\n                            minutes: 18,\n                            desc: \"Control visual flow and seam placement to meet design intent and reduce installation risk.\",\n                            objectives: [\n                                \"Aligning patterns in high-traffic areas\",\n                                \"Using layout direction tools\",\n                                \"Matching design arrows\",\n                                \"Managing seams for rolled goods\",\n                                \"Switching seam sides\"\n                            ],\n                            url: \"https:\/\/www.youtube.com\/watch?v=6wSivuaEkM4&list=PLTdAHW7WN17vdN-8t3aadbbPVRAfuGQ-q&index=12\",\n                            kbEmbed: `<div class=\"ms-kb-slot\">Insert User guide article \/ video here<\/div>`,\n                            related: []\n                        },\n                        {\n                            id: \"l13\",\n                            title: \"Session 12: Underlayment and Waste Communication\",\n                            minutes: 20,\n                            desc: \"Layer materials accurately and visually confirm assemblies while refining waste calculations.\",\n                            objectives: [\n                                \"Stacking underlayment and labor\",\n                                \"Using Shift to speed entry\",\n                                \"Visualizing layers\",\n                                \"Adjusting Max Cut Times\",\n                                \"Changing calculation methods\"\n                            ],\n                            url: \"https:\/\/www.youtube.com\/watch?v=irwCOXTM_iM&list=PLTdAHW7WN17vdN-8t3aadbbPVRAfuGQ-q&index=13\",\n                            kbEmbed: `<div class=\"ms-kb-slot\">Insert User guide article \/ video here<\/div>`,\n                            related: []\n                        }\n                    ]\n                },\n                {\n                    id: \"m5\",\n                    title: \"Milestone 5\",\n                    achievement: \"Advanced Rolled Goods & Seam Optimization\",\n                    lessonsCount: 1,\n                    estHours: \"27 minutes\",\n                    roles: [\"admin\", \"sales_rep\", \"pm\"],\n                    desc: \"Configure patterned-goods settings, roll variables, and round-up logic; execute advanced seam layouts; move and stagger cuts; use Consolidate Waste and cut-sheet controls to maximize material efficiency and optimize installation sequencing.\",\n                    lessons: [\n                        {\n                            id: \"l14\",\n                            title: \"Session 13: Advanced Rolled Goods\",\n                            minutes: 27,\n                            desc: \"Master roll-based estimating by controlling global settings, managing cut sheets, and consolidating waste.\",\n                            objectives: [\n                                \"Configuring roll system defaults\",\n                                \"Understanding cut margins and seams\",\n                                \"Using dynamic cut sheets\",\n                                \"Linking cuts to plans\",\n                                \"Consolidating waste\"\n                            ],\n                            url: \"https:\/\/www.youtube.com\/watch?v=FPkAncGSpW0&list=PLTdAHW7WN17vdN-8t3aadbbPVRAfuGQ-q&index=14\",\n                            kbEmbed: `<div class=\"ms-kb-slot\">Insert User guide article \/ video here<\/div>`,\n                            related: [\n                                { title: \"What is a Lead vs Contact?\", url: \"#\" },\n                                { title: \"CRM Navigation Shortcuts\", url: \"#\" },\n                            ]\n                        }\n                    ]\n                },\n                {\n                    id: \"m6\",\n                    title: \"Milestone 6\",\n                    achievement: \"Form Building & Project Finalization\",\n                    lessonsCount: 1,\n                    estHours: \"24 minutes\",\n                    roles: [\"admin\", \"sales_rep\", \"pm\"],\n                    desc: \"Convert takeoffs into professional Worksheets and Proposals using \u201cEstimate By\u201d; configure columns, taxes, and shipping; finalize documents with custom instructions, exclusions, and manufacturer-specific freight details for field and office teams.\",\n                    lessons: [\n                        {\n                            id: \"l15\",\n                            title: \"Session 14: Forms and Proposals\",\n                            minutes: 24,\n                            desc: \"Turn takeoffs into polished client-ready documents with flexible worksheets and custom instructions.\",\n                            objectives: [\n                                \"Duplicating data across tabs\",\n                                \"Estimating by floor\",\n                                \"Creating proposals and work orders\",\n                                \"Separating labor and material\",\n                                \"Adding project-specific instructions\"\n                            ],\n                            url: \"https:\/\/www.youtube.com\/watch?v=Ta84_4RLmgE&list=PLTdAHW7WN17vdN-8t3aadbbPVRAfuGQ-q&index=15\",\n                            kbEmbed: `<div class=\"ms-kb-slot\">Insert User guide article \/ video here<\/div>`,\n                            related: [\n                                { title: \"What is a Lead vs Contact?\", url: \"#\" },\n                                { title: \"CRM Navigation Shortcuts\", url: \"#\" },\n                            ]\n                        }\n                    ]\n                },\n            ],\n\n            instructor: {\n                name: \"Anastasia Adams\",\n                title: \"Senior Estimator | MeasureSquare Certified Expert\",\n                bio: \"With over 14 years of experience in commercial construction, 10+ in commercial flooring, Anastasia has trained hundreds of professionals by combining industry best practices with real MeasureSquare 8 workflows.\",\n                quote: \"This curriculum is built on the foundations of estimator theory, to streamline your workflow for maximum accuracy\u2014giving you the confidence that every estimate you produce is professional-grade.\",\n                badges: [\"10+ Years in Estimating\", \"400+ Estimators Trained\", \"MeasureSquare Power User\"],\n                avatarUrl: \"https:\/\/measuresquare.com\/wp-content\/uploads\/2026\/01\/Anastasia-profile.webp\"\n            },\n            otherResources: [\n                {\n                    title: \"Estimator Curriculum Playlist\",\n                    date: \"Nov 11, 2025\",\n                    url: \"https:\/\/www.youtube.com\/playlist?list=PLTdAHW7WN17vdN-8t3aadbbPVRAfuGQ-q\",\n                    img: \"https:\/\/measuresquare.com\/wp-content\/uploads\/2025\/12\/youtube-icon-e1764788270218.png\"\n                },\n                {\n                    title: \"M8 Knowledge Base\",\n                    date: \"Dec 15, 2025\",\n                    url: \"https:\/\/measuresquare.zohodesk.com\/portal\/en\/kb\/measure-square\/windows\",\n                    img: \"https:\/\/measuresquare.com\/wp-content\/uploads\/2025\/12\/knowledge-base-icon.png\"\n                },\n                {\n                    title: \"MeasureSquare 8 Udemy\",\n                    date: \"Jan 20, 2026\",\n                    url: \"https:\/\/www.udemy.com\/course\/measuresquare-8-measure-estimating-for-commercial-flooring\/\",\n                    img: \"https:\/\/measuresquare.com\/wp-content\/uploads\/2024\/01\/Udemy_M2-8.jpg\"\n                },\n                {\n                    title: \"MeasureSquare Facebook User Group\",\n                    date: \"Feb 10, 2026\",\n                    url: \"https:\/\/www.facebook.com\/groups\/measuresquareusers\",\n                    img: \"https:\/\/measuresquare.com\/wp-content\/uploads\/2025\/12\/facebook-group-icon.png\"\n                },\n            ]\n        };\n\n        const root = document.getElementById(\"ms-crm-onboard-root\");\n\n        const state = {\n            step: \"milestones\",      \/\/ welcome | role | milestones | milestoneDetail | lessonDetail\n            roleId: null,\n            milestoneId: null,\n            lessonId: null,\n            completed: new Set()\n        };\n\n        function el(html) {\n            const t = document.createElement(\"template\");\n            t.innerHTML = html.trim();\n            return t.content.firstChild;\n        }\n\n        function render() {\n            root.innerHTML = \"\";\n            root.appendChild(el(`\n      <div class=\"ms-wrap\">\n        <!--${renderBreadcrumb()} -->\n        <!-- ${renderWelcome()} -->\n        <!-- ${renderRoleSelect()} -->\n        ${renderMilestonesOverview()}\n        ${renderMilestoneDetailTimeline()}\n        ${renderLessonDetail()}\n        <div class=\"ms-divider\" style=\"margin:36px 0;\"><\/div>\n        ${renderInstructor()}\n        ${renderOtherResources()}\n      <\/div>\n    `));\n            bindEvents();\n        }\n\n        function renderBreadcrumb() {\n            const crumbs = [];\n            crumbs.push(`Onboarding`);\n            if (state.roleId) {\n                crumbs.push(DATA.roles.find(r => r.id === state.roleId)?.label || state.roleId);\n            }\n            if (state.milestoneId) {\n                const m = DATA.milestones.find(x => x.id === state.milestoneId);\n                if (m) crumbs.push(m.title);\n            }\n            if (state.lessonId) {\n                const l = findLesson(state.lessonId);\n                if (l) crumbs.push(l.title);\n            }\n            return `\n      <div class=\"ms-muted\" style=\"font-size:13px; margin-bottom:10px;\">\n        ${crumbs.join(\"  >  \")}\n      <\/div>\n    `;\n        }\n\n        function renderWelcome() {\n            if (state.step !== \"welcome\") return \"\";\n\n            return `\n      <section class=\"ms-step ms-card ms-welcome\">\n        <div>\n          <h1 class=\"ms-h1\">Welcome to MeasureSquare CRM \ud83c\udf89<\/h1>\n          <p class=\"ms-muted\">\n            Your MeasureSquare CRM adventure starts here. Learn at your own pace, skip ahead anytime, and follow the path built for your role. \n            Every click gets you closer to CRM mastery and bigger wins.\n          <\/p>\n        <!--  <p class=\"ms-muted\">\n            You\u2019ll start by selecting your role, then complete milestones and lessons.\n          <\/p> -->\n          <div style=\"display:flex; gap:8px; margin-top:30px;\">\n            <!--<button class=\"ms-btn\" data-action=\"start\">Start Onboarding<\/button>-->\n            <button class=\"ms-btn secondary\" data-action=\"skip-role\">View Milestones<\/button> \n          <\/div>\n        <\/div>\n        <div class=\"ms-welcome-hero\">\n          <div class=\"ms-h3\">How it works<\/div>\n          <div class=\"ms-muted\" style=\"font-size:14px; line-height:1.55;\">\n            <!--1) Choose your role \u2705<br\/>-->\n            1) Milestones Overview \u2705<br\/>\n            2) Finish lessons \u2705<br\/>\n            3) Become a CRM pro \u2705\n          <\/div>\n        <\/div>\n      <\/section>\n    `;\n        }\n\n        function renderRoleSelect() {\n            if (state.step !== \"role\") return \"\";\n            return `\n      <section class=\"ms-step\">\n        <div class=\"ms-step-head\">\n          <h2 class=\"ms-h2\">Choose your role<\/h2>\n          <button class=\"ms-btn ghost\" data-action=\"back-welcome\">\u2190 Back<\/button>\n        <\/div>\n\n        <p class=\"ms-muted\" style=\"margin-top:-10px; margin-bottom:16px; font-size:14px;\">\n            Please select the role that best matches your work. This helps us deliver a tailored onboarding path designed specifically for your responsibilities.\n        <\/p>\n\n\n        <div class=\"ms-role-grid\">\n          ${DATA.roles.map(r => `\n            <button class=\"ms-role-btn ${state.roleId === r.id ? 'active' : ''}\" data-role=\"${r.id}\">\n              ${r.label}\n            <\/button>\n          `).join(\"\")}\n        <\/div>\n\n        <div style=\"margin-top:30px; text-align:center;\">\n            <button class=\"ms-btn\" data-action=\"confirm-role\">Continue<\/button>\n        <\/div>\n      <\/section>\n    `;\n        }\n\n        function renderMilestonesOverview() {\n            if (state.step !== \"milestones\") return \"\";\n            const list = state.roleId\n                ? DATA.milestones.filter(m => m.roles.includes(state.roleId))\n                : DATA.milestones;\n\n            return `\n             <div class=\"ms-card\" style=\"border: 1px dashed #cfe6ff; padding: 20px; margin-bottom: 26px;\">\n  <h2 class=\"ms-h2\" style=\"text-align:center; margin-top:0;\">Before You Start<\/h2>\n  <p class=\"ms-muted\" style=\"line-height:2; font-size:16px;\">\n    This curriculum is designed to help estimators build real-world skills by combining industry best practices with hands-on MeasureSquare 8 workflows. Set aside 20\u201330 minutes a day to complete each milestone in order\u2014each lesson builds on the last, just like a real project.\n    Whether you\u2019re new to estimating or refining your process, focus on accuracy, consistency, and intent. Practice along in your own projects, and don\u2019t hesitate to pause, repeat, and experiment.\n    <\/p>\n  <p class=\"ms-muted\" style=\"line-height:2; font-size:16px;\">\n    Need guidance? Our support team is always here for you\u2014big questions or small. Reach out anytime at\n    <strong> support@measuresquare.com<\/strong>.<br>\n    Let\u2019s build confidence, precision, and professional-grade estimates. Happy learning!\n  <\/p>\n<\/div>  \n<hr style=\"border:0; border-top:1px solid #e5e7eb; margin:40px 0;\">\n\n\n      <section class=\"ms-step\">\n\n          <div style=\"display:flex; gap:8px;\">\n            <!-- <button class=\"ms-btn secondary\" data-action=\"change-role\">Change Role<\/button> -->\n            <!--<button class=\"ms-btn ghost\" data-action=\"back-role\">\u2190 Back<\/button> -->\n          <\/div>\n\n        <div class=\"ms-milestone-row\">\n          ${list.map(m => `\n            <div class=\"ms-milestone-card\" data-milestone=\"${m.id}\">\n              <div style=\"display:flex; align-items:center; justify-content:space-between;\">\n                <div class=\"ms-milestone-title\">${m.title}<\/div>\n                ${isMilestoneCompleted(m) ? `<span class=\"ms-pill\">COMPLETED<\/span>` : ``}\n              <\/div>\n            <h2 class=\"ms-muted\" style=\"font-size:18px; margin-top:2px;\">\n                ${m.achievement}\n            <\/h2>\n\n              <div class=\"ms-milestone-meta\">\n                <span class=\"ms-pill\">${m.lessonsCount} lessons<\/span>\n                <span class=\"ms-pill\">${m.estHours}<\/span>\n              <\/div>\n              <div class=\"ms-milestone-desc\">${m.desc}<\/div>\n              <div class=\"ms-milestone-cta\" style=\"margin-top:16px; display:flex; justify-content:center;\">\n                <button class=\"ms-btn\">\n                    Enter Milestone \u2192\n                <\/button>\n              <\/div>\n            <\/div>\n          `).join(\"\")}\n        <\/div>\n      <\/section>\n    `;\n        }\n\n        \/* ====== \u2705 Milestone Detail Timeline Version ====== *\/\n        function renderMilestoneDetailTimeline() {\n            if (state.step !== \"milestoneDetail\") return \"\";\n            const m = DATA.milestones.find(x => x.id === state.milestoneId);\n            if (!m) return \"\";\n\n            return `\n      <section class=\"ms-step\">\n        <div class=\"ms-step-head\">\n          <div>\n            <h2 class=\"ms-h2\">${m.title}<\/h2>\n            <!-- <div class=\"ms-muted\" style=\"font-size:14px;\">\n              ${m.lessonsCount} lessons \u00b7 Roles: ${m.roles.map(id => DATA.roles.find(r => r.id === id)?.label).join(\", \")} \u00b7 ${m.estHours}\n            <\/div> -->\n          <\/div>\n          <button class=\"ms-btn ghost\" data-action=\"back-milestones\">\u2190 Back to Milestones<\/button>\n        <\/div>\n\n        <!-- top info bar like fig2 -->\n        <div class=\"ms-mdetail-topbar\">\n          <div style=\"text-align:center;\">${m.lessonsCount} Lessons<\/div>\n          <div style=\"text-align:center;\">\n            ${m.roles.map(id => DATA.roles.find(r => r.id === id)?.label).join(\", \")}\n          <\/div>\n          <div style=\"text-align:center;\">${m.estHours}<\/div>\n        <\/div>\n\n        <div class=\"ms-mdetail-layout\">\n          <!-- LEFT SIDEBAR -->\n          <div class=\"ms-mdetail-side ms-card\">\n            <div class=\"title\">\n              <span>${m.title}<\/span>\n              <span class=\"ms-muted\" style=\"font-size:14px;\">${m.lessonsCount} lessons<\/span>\n            <\/div>\n            <div class=\"ms-muted\" style=\"font-weight:800; margin-top:2px;\">\n                ${m.achievement}\n            <\/div>\n            <div class=\"desc\">${m.desc}<\/div>\n            <!-- <button class=\"playbook\">Download Playbook<\/button> -->\n          <\/div>\n\n          <!-- RIGHT TIMELINE -->\n          <div class=\"ms-timeline\">\n            ${m.lessons.length ? m.lessons.map(lesson => `\n              <div class=\"ms-tl-item\">\n                <div class=\"ms-tl-dot\"><\/div>\n                <div class=\"ms-lesson-card-v2 ms-card\">\n                  <div>\n                    <div class=\"l-title\" style=\"display:flex; align-items:center; gap:6px; position:relative;\">\n  ${lesson.title}\n\n  <!-- ICON + Tooltip Wrapper -->\n  <span style=\"position:relative; display:inline-block;\">\n\n    <!-- SVG icon -->\n    <span style=\"display:inline-flex; align-items:center; justify-content:center;\n                 width:16px; height:16px; border-radius:50%; background:#0b84ff;\n                 color:#fff; font-size:12px; cursor:pointer;\">\n      i\n    <\/span>\n\n    <!-- Tooltip bubble -->\n    <span style=\"\n        visibility:hidden;\n        opacity:0;\n        transition:opacity .15s ease;\n\n        position:absolute;\n        top:22px;\n        left:0;\n        z-index:999;\n\n        background:#ffffff;\n        color:#334155;\n        padding:8px 12px;\n        border-radius:10px;\n        font-size:13px;\n        line-height:1.4;\n        width:400px;\n        box-shadow:0 4px 12px rgba(0,0,0,0.12);\n        border:1px solid #e2e8f0;\n      \">\n      ${lesson.desc}\n    <\/span>\n\n  <\/span>\n\n  <!-- Hover rule -->\n  <style>\n    \/* keep inline but safe *\/\n    .l-title span:hover span:last-child {\n      visibility: visible !important;\n      opacity: 1 !important;\n    }\n  \n    \/* ====== About Instructor (Plan A: Professional Authority) ====== *\/\n    .ms-instructor {\n        padding: 20px;\n        border: 1px solid #cfe6ff; \/* soft border *\/\n        border-radius: 14px;\n        background: linear-gradient(135deg, #f5faff, #ffffff); \/* light, clean *\/\n    }\n\n    .ms-instructor-wrap {\n        display: grid;\n        grid-template-columns: 160px 1fr;\n        gap: 16px;\n        align-items: start;\n    }\n\n    @media (max-width: 700px) {\n        .ms-instructor-wrap {\n            grid-template-columns: 1fr;\n        }\n    }\n\n    .ms-instructor-avatar {\n        width: 140px;\n        height: 140px;\n        border-radius: 999px; \/* circular *\/\n        border: 3px solid #bfe1ff;\n        background: #ffffff;\n        box-shadow: 0 6px 18px rgba(15, 23, 42, 0.06);\n        overflow: hidden;\n        display: flex;\n        align-items: center;\n        justify-content: center;\n        margin: 0 auto;\n    }\n\n    .ms-instructor-avatar img {\n        width: 100%;\n        height: 100%;\n        object-fit: cover;\n        display: block;\n    }\n\n    .ms-instructor-name {\n        font-size: 18px;\n        font-weight: 900;\n        margin: 0;\n        line-height: 1.25;\n        color: #0f172a;\n    }\n\n    .ms-instructor-title {\n        margin-top: 6px;\n        font-size: 14px;\n        font-weight: 800;\n        color: #334155;\n    }\n\n    .ms-instructor-bio {\n        margin-top: 10px;\n        font-size: 14px;\n        line-height: 1.7;\n        color: #334155;\n    }\n\n    .ms-instructor-badges {\n        display: flex;\n        gap: 8px;\n        flex-wrap: wrap;\n        margin-top: 10px;\n    }\n\n    .ms-badge {\n        font-size: 12px;\n        font-weight: 800;\n        color: #0b84ff;\n        border: 1px solid #cfe6ff;\n        background: #ffffff;\n        padding: 6px 10px;\n        border-radius: 999px;\n    }\n\n    .ms-instructor-quote {\n        margin-top: 12px;\n        padding: 12px 14px;\n        border-radius: 12px;\n        border: 1px dashed #bfe1ff;\n        background: #ffffff;\n        color: #334155;\n        font-size: 14px;\n        line-height: 1.65;\n    }\n\n    .ms-instructor-quote strong {\n        color: #0f172a;\n    }\n\n<\/style>\n<\/div>\n\n                <div class=\"l-desc\">\n    <div style=\"font-weight:700; margin-bottom:4px;\">\n        By the end of this lesson, you will learn to:\n    <\/div>\n    <ul style=\"margin:4px 0 0 18px; list-style:disc;\">\n       ${lesson.objectives.map(o => `<li>\u2705${o}<\/li>`).join(\"\")}\n    <\/ul>\n<\/div>\n\n                  <\/div>\n                  <div class=\"l-cta\">\n                    <div class=\"l-min\">${lesson.minutes} minutes<\/div>\n                    <a class=\"ms-btn\" \n   href=\"${lesson.url}\" \n   target=\"_blank\" \n   style=\"text-decoration:none; display:inline-block;\">\n   Begin Lesson \u2192\n<\/a>\n\n                    ${state.completed.has(lesson.id) ? `<span class=\"ms-pill\">DONE<\/span>` : ``}\n                  <\/div>\n                <\/div>\n              <\/div>\n            `).join(\"\") : `<div class=\"ms-muted\">Lessons for this milestone are coming soon.<\/div>`}\n          <\/div>\n        <\/div>\n      <\/section>\n    `;\n        }\n\n        function renderLessonDetail() {\n            if (state.step !== \"lessonDetail\") return \"\";\n            const lesson = findLesson(state.lessonId);\n            const milestone = findMilestoneByLesson(state.lessonId);\n            if (!lesson || !milestone) return \"\";\n\n            return `\n      <section class=\"ms-step ms-card ms-tutorial\">\n        <div class=\"ms-step-head\">\n          <div>\n            <h2 class=\"ms-h2\">${lesson.title}<\/h2>\n            <div class=\"ms-muted\" style=\"font-size:14px;\">\n              ${lesson.minutes} minutes \u00b7 ${milestone.title}\n            <\/div>\n          <\/div>\n          <div style=\"display:flex; gap:8px;\">\n            <button class=\"ms-btn secondary\" data-action=\"complete-lesson\">Mark as Completed<\/button>\n            <button class=\"ms-btn ghost\" data-action=\"back-milestone\">\u2190 Back<\/button>\n          <\/div>\n        <\/div>\n\n        <div class=\"ms-objectives\">\n          <div class=\"ms-h3\">By the end of this lesson, you will learn to:<\/div>\n          <ul style=\"margin:8px 0 0 18px;\">\n            ${lesson.objectives.map(o => `<li>${o}<\/li>`).join(\"\")}\n          <\/ul>\n        <\/div>\n\n        ${lesson.kbEmbed || `<div class=\"ms-kb-slot\">Insert User guide article \/ video here<\/div>`}\n\n        <div style=\"margin-top:14px;\">\n          <div class=\"ms-h3\">Relevant Articles<\/div>\n          <div class=\"ms-rel-articles\">\n            ${lesson.related && lesson.related.length\n                    ? lesson.related.map(a => `<a href=\"${a.url}\" target=\"_blank\" rel=\"noopener\">${a.title}<\/a>`).join(\"\")\n                    : `<div class=\"ms-muted\" style=\"font-size:14px; margin-top:6px;\">No related articles yet.<\/div>`\n                }\n          <\/div>\n        <\/div>\n      <\/section>\n    `;\n        }\n\n\n        function renderInstructor() {\n            if ([\"welcome\", \"role\"].includes(state.step)) return \"\";\n            const i = DATA.instructor;\n            if (!i) return \"\";\n\n            return `\n      <section class=\"ms-step ms-card ms-instructor\" style=\"margin-top:26px;\">\n        <h2 class=\"ms-h2\" style=\"text-align:center; margin-top:0;\">About Your Instructor<\/h2>\n\n        <div class=\"ms-instructor-wrap\">\n          <div>\n            <div class=\"ms-instructor-avatar\">\n              <img decoding=\"async\" src=\"${i.avatarUrl}\" alt=\"Instructor portrait\" onerror=\"this.style.display='none'; this.parentElement.innerHTML='<div class=\\\\'ms-muted\\\\' style=\\\\'font-weight:800;\\\\'>Instructor<\/div>';\">\n            <\/div>\n          <\/div>\n\n          <div>\n            <p class=\"ms-instructor-name\">${i.name}<\/p>\n            <div class=\"ms-instructor-title\">${i.title}<\/div>\n\n            <div class=\"ms-instructor-bio\">${i.bio}<\/div>\n\n            <div class=\"ms-instructor-badges\">\n              ${i.badges.map(b => `<span class=\"ms-badge\">${b}<\/span>`).join(\"\")}\n            <\/div>\n\n            <div class=\"ms-instructor-quote\">\n              <strong>Instructor Note:<\/strong> \u201c${i.quote}\u201d\n            <\/div>\n          <\/div>\n        <\/div>\n      <\/section>\n    `;\n        }\n\n        function renderOtherResources() {\n            if ([\"welcome\", \"role\"].includes(state.step)) return \"\";\n            return `\n      <section class=\"ms-step\" style=\"margin-top:26px;\">\n        <div class=\"ms-divider\"><\/div>\n        <h2 class=\"ms-h2\" style=\"text-align:center;\">Other Resources<\/h2>\n\n        <div class=\"ms-resource-grid\">\n          ${DATA.otherResources.map(r => `\n            <a class=\"ms-resource-card ms-card\" href=\"${r.url}\" target=\"_blank\" rel=\"noopener\" style=\"text-decoration:none; color:inherit;\">\n              <div class=\"ms-resource-thumb\" style=\"\n                background-image:url('${r.img}');\n                background-size:cover;\n                background-position:center;\n              \"><\/div>\n              <div class=\"ms-resource-title\">${r.title}<\/div>\n              <!-- <div class=\"ms-resource-date\">${r.date}<\/div> -->\n            <\/a>\n          `).join(\"\")}\n        <\/div>\n      <\/section>\n    `;\n        }\n\n        \/* ====== HELPERS ====== *\/\n        function findLesson(lessonId) {\n            for (const m of DATA.milestones) {\n                const l = m.lessons.find(x => x.id === lessonId);\n                if (l) return l;\n            }\n            return null;\n        }\n        function findMilestoneByLesson(lessonId) {\n            return DATA.milestones.find(m => m.lessons.some(l => l.id === lessonId));\n        }\n        function isMilestoneCompleted(m) {\n            if (!m.lessons.length) return false;\n            return m.lessons.every(l => state.completed.has(l.id));\n        }\n\n        \/* ====== EVENTS ====== *\/\n        function bindEvents() {\n            root.querySelectorAll(\"[data-action]\").forEach(btn => {\n                btn.addEventListener(\"click\", () => {\n                    const action = btn.getAttribute(\"data-action\");\n                    switch (action) {\n                        case \"start\": state.step = \"role\"; break;\n                        case \"skip-role\": state.step = \"milestones\"; state.roleId = null; break;\n                        case \"back-welcome\": state.step = \"welcome\"; break;\n                        case \"back-role\": state.step = \"role\"; break;\n                        case \"change-role\": state.step = \"role\"; break;\n                        case \"confirm-role\": state.step = \"milestones\"; break;\n                        case \"back-milestones\": state.step = \"milestones\"; state.milestoneId = null; break;\n                        case \"back-milestone\": state.step = \"milestoneDetail\"; state.lessonId = null; break;\n                        case \"complete-lesson\":\n                            if (state.lessonId) state.completed.add(state.lessonId);\n                            break;\n                    }\n                    render();\n                });\n            });\n\n            root.querySelectorAll(\"[data-role]\").forEach(btn => {\n                btn.addEventListener(\"click\", () => {\n                    state.roleId = btn.getAttribute(\"data-role\");\n                    render();\n                });\n            });\n\n            root.querySelectorAll(\"[data-milestone]\").forEach(card => {\n                card.addEventListener(\"click\", () => {\n                    state.milestoneId = card.getAttribute(\"data-milestone\");\n                    state.step = \"milestoneDetail\";\n                    render();\n                });\n            });\n\n            root.querySelectorAll(\"[data-lesson]\").forEach(btn => {\n                btn.addEventListener(\"click\", (e) => {\n                    e.stopPropagation();\n                    state.lessonId = btn.getAttribute(\"data-lesson\");\n                    state.step = \"lessonDetail\";\n                    render();\n                });\n            });\n        }\n\n        render();\n    })();\n<\/script>\n","protected":false},"excerpt":{"rendered":"","protected":false},"author":11,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"templates\/fronteditor.php","meta":{"inline_featured_image":false,"_lmt_disableupdate":"no","_lmt_disable":"","footnotes":""},"class_list":["post-3908","page","type-page","status-publish","hentry"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v24.1 (Yoast SEO v24.1) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Estimator Curriculum Milestones - measuresquare.com<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/measuresquare.com\/estimator-curriculum-milestones\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Estimator Curriculum Milestones\" \/>\n<meta property=\"og:url\" content=\"https:\/\/measuresquare.com\/estimator-curriculum-milestones\/\" \/>\n<meta property=\"og:site_name\" content=\"measuresquare.com\" \/>\n<meta property=\"article:modified_time\" content=\"2026-01-23T23:01:59+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/measuresquare.com\/wp-content\/uploads\/2026\/01\/Blue-and-Peach-Modern-Lined-Illustration-Business-Plan-Presentation-2560-x-919-px-12-scaled.png\" \/>\n\t<meta property=\"og:image:width\" content=\"2560\" \/>\n\t<meta property=\"og:image:height\" content=\"919\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data1\" content=\"1 minute\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/measuresquare.com\/estimator-curriculum-milestones\/\",\"url\":\"https:\/\/measuresquare.com\/estimator-curriculum-milestones\/\",\"name\":\"Estimator Curriculum Milestones - measuresquare.com\",\"isPartOf\":{\"@id\":\"https:\/\/measuresquare.com\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/measuresquare.com\/estimator-curriculum-milestones\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/measuresquare.com\/estimator-curriculum-milestones\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/measuresquare.com\/wp-content\/uploads\/2026\/01\/Blue-and-Peach-Modern-Lined-Illustration-Business-Plan-Presentation-2560-x-919-px-12-scaled.png\",\"datePublished\":\"2026-01-22T23:20:39+00:00\",\"dateModified\":\"2026-01-23T23:01:59+00:00\",\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/measuresquare.com\/estimator-curriculum-milestones\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/measuresquare.com\/estimator-curriculum-milestones\/#primaryimage\",\"url\":\"https:\/\/measuresquare.com\/wp-content\/uploads\/2026\/01\/Blue-and-Peach-Modern-Lined-Illustration-Business-Plan-Presentation-2560-x-919-px-12-scaled.png\",\"contentUrl\":\"https:\/\/measuresquare.com\/wp-content\/uploads\/2026\/01\/Blue-and-Peach-Modern-Lined-Illustration-Business-Plan-Presentation-2560-x-919-px-12-scaled.png\",\"width\":2560,\"height\":919},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/measuresquare.com\/#website\",\"url\":\"https:\/\/measuresquare.com\/\",\"name\":\"measuresquare.com\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/measuresquare.com\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Estimator Curriculum Milestones - measuresquare.com","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/measuresquare.com\/estimator-curriculum-milestones\/","og_locale":"en_US","og_type":"article","og_title":"Estimator Curriculum Milestones","og_url":"https:\/\/measuresquare.com\/estimator-curriculum-milestones\/","og_site_name":"measuresquare.com","article_modified_time":"2026-01-23T23:01:59+00:00","og_image":[{"width":2560,"height":919,"url":"https:\/\/measuresquare.com\/wp-content\/uploads\/2026\/01\/Blue-and-Peach-Modern-Lined-Illustration-Business-Plan-Presentation-2560-x-919-px-12-scaled.png","type":"image\/png"}],"twitter_card":"summary_large_image","twitter_misc":{"Est. reading time":"1 minute"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/measuresquare.com\/estimator-curriculum-milestones\/","url":"https:\/\/measuresquare.com\/estimator-curriculum-milestones\/","name":"Estimator Curriculum Milestones - measuresquare.com","isPartOf":{"@id":"https:\/\/measuresquare.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/measuresquare.com\/estimator-curriculum-milestones\/#primaryimage"},"image":{"@id":"https:\/\/measuresquare.com\/estimator-curriculum-milestones\/#primaryimage"},"thumbnailUrl":"https:\/\/measuresquare.com\/wp-content\/uploads\/2026\/01\/Blue-and-Peach-Modern-Lined-Illustration-Business-Plan-Presentation-2560-x-919-px-12-scaled.png","datePublished":"2026-01-22T23:20:39+00:00","dateModified":"2026-01-23T23:01:59+00:00","inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/measuresquare.com\/estimator-curriculum-milestones\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/measuresquare.com\/estimator-curriculum-milestones\/#primaryimage","url":"https:\/\/measuresquare.com\/wp-content\/uploads\/2026\/01\/Blue-and-Peach-Modern-Lined-Illustration-Business-Plan-Presentation-2560-x-919-px-12-scaled.png","contentUrl":"https:\/\/measuresquare.com\/wp-content\/uploads\/2026\/01\/Blue-and-Peach-Modern-Lined-Illustration-Business-Plan-Presentation-2560-x-919-px-12-scaled.png","width":2560,"height":919},{"@type":"WebSite","@id":"https:\/\/measuresquare.com\/#website","url":"https:\/\/measuresquare.com\/","name":"measuresquare.com","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/measuresquare.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"}]}},"_links":{"self":[{"href":"https:\/\/measuresquare.com\/wp-json\/wp\/v2\/pages\/3908","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/measuresquare.com\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/measuresquare.com\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/measuresquare.com\/wp-json\/wp\/v2\/users\/11"}],"replies":[{"embeddable":true,"href":"https:\/\/measuresquare.com\/wp-json\/wp\/v2\/comments?post=3908"}],"version-history":[{"count":13,"href":"https:\/\/measuresquare.com\/wp-json\/wp\/v2\/pages\/3908\/revisions"}],"predecessor-version":[{"id":3927,"href":"https:\/\/measuresquare.com\/wp-json\/wp\/v2\/pages\/3908\/revisions\/3927"}],"wp:attachment":[{"href":"https:\/\/measuresquare.com\/wp-json\/wp\/v2\/media?parent=3908"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}