{"id":242,"date":"2026-08-31T09:15:40","date_gmt":"2026-08-31T09:15:40","guid":{"rendered":"https:\/\/massgraduates.com\/?page_id=242"},"modified":"2026-09-01T03:51:48","modified_gmt":"2026-09-01T03:51:48","slug":"cuet-ug-launchpad-full-length-pyqs","status":"publish","type":"page","link":"https:\/\/massgraduates.com\/index.php\/cuet-ug-launchpad-full-length-pyqs\/","title":{"rendered":"CUET UG launchpad Full length PYQs"},"content":{"rendered":"\n<!-- =========================================================\nBOOSTER c 360 \u2014 FINAL PREMIUM REDESIGN\nAll && replaced with nested if \u2014 WordPress\u2011compatible\n============================================================ -->\n<meta charset=\"UTF-8\">\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n<title>CUET PREVIOUSYEAR Questions Launchpad 360<\/title>\n<link href=\"https:\/\/fonts.googleapis.com\/css2?family=Sora:wght@400;500;600;700;800&amp;family=Inter:wght@400;500;600;700&amp;display=swap\" rel=\"stylesheet\">\n\n<style>\n    \/* ======================================================================\n       DESIGN SYSTEM \u2014 premium, refined, consistent\n       ====================================================================== *\/\n    #lp360-root {\n        --lp-brand: #E85D3A;\n        --lp-brand-light: #FF7A3D;\n        --lp-brand-dark: #C94A2A;\n        --lp-gold: #FFC542;\n        --lp-cyan: #33C3F0;\n        --lp-purple: #8B5CF6;\n        --lp-green: #22C55E;\n        --lp-red: #EF4444;\n        --lp-orange2: #F97316;\n        --lp-teal: #14B8A6;\n        --lp-yellow: #FACC15;\n        --lp-purple2: #A78BFA;\n        --lp-amber: #F59E0B;\n\n        \/* NEW: Ultra-vibrant Gradients *\/\n        --lp-gradient-brand: linear-gradient(135deg, #FF4B2B 0%, #FF416C 100%);\n        --lp-gradient-cyan: linear-gradient(135deg, #00C6FF 0%, #0072FF 100%);\n        --lp-gradient-purple: linear-gradient(135deg, #B14BF4 0%, #4A00E0 100%);\n        --lp-gradient-green: linear-gradient(135deg, #11998E 0%, #38EF7D 100%);\n        --lp-gradient-gold: linear-gradient(135deg, #F6D365 0%, #FDA085 100%);\n\n        \/* NEW: Eye-Catching Neon Glows *\/\n        --lp-brand-glow: 0 8px 32px rgba(255, 65, 108, 0.4);\n        --lp-gold-glow: 0 8px 32px rgba(253, 160, 133, 0.45);\n        --lp-cyan-glow: 0 8px 32px rgba(0, 198, 255, 0.4);\n\n        \/* NEW: Punchier Tinted Backgrounds *\/\n        --lp-bg-brand-soft: #271410;\n        --lp-bg-cyan-soft: #082F49;\n        --lp-bg-purple-soft: #2E1065;\n        --lp-bg-green-soft: #022C22;\n        --lp-bg-amber-soft: #451A03;\n        --lp-bg-red-soft: #450A0A;\n        --lp-bg-teal-soft: #134E4A;\n\n        \/* NEW: Deep Vibrant Accents for Borders *\/\n        --lp-cyan-deep: #0072FF;\n        --lp-purple-deep: #7C3AED;\n        --lp-red-deep: #E11D48;\n        --lp-teal-deep: #0F766E;\n\n        --lp-dark-1: #0d1024;\n        --lp-dark-2: #1b1240;\n        --lp-text-dark: #0b0e1a;\n        --lp-text-gray: #5b6478;\n        --lp-text-gray-light: #8e96a8;\n        --lp-bg-canvas: #f4f6fa;\n        --lp-card-bg: #ffffff;\n        --lp-border-subtle: #e9ecf2;\n        --lp-shadow-sm: 0 2px 8px rgba(15, 23, 42, 0.06);\n        --lp-shadow-md: 0 6px 20px rgba(15, 23, 42, 0.07);\n        --lp-shadow-lg: 0 12px 40px rgba(15, 23, 42, 0.09);\n\n        --lp-radius-lg: 20px;\n        --lp-radius-md: 14px;\n        --lp-radius-sm: 10px;\n        --lp-radius-xs: 6px;\n\n        --lp-space-1: 4px;\n        --lp-space-2: 8px;\n        --lp-space-3: 12px;\n        --lp-space-4: 16px;\n        --lp-space-5: 20px;\n        --lp-space-6: 24px;\n        --lp-space-7: 32px;\n        --lp-space-8: 40px;\n\n        font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;\n        color: var(--lp-text-dark);\n        box-sizing: border-box;\n        max-width: 100%;\n    }\n    #lp360-root *,\n    #lp360-root *::before,\n    #lp360-root *::after {\n        box-sizing: border-box;\n        max-width: 100%;\n    }\n\n    #lp360-root .lp360-font-display,\n    #lp360-root .lp360-page-title,\n    #lp360-root .lp360-section-title h2,\n    #lp360-root .lp360-gauge-value,\n    #lp360-root .lp360-hero-metric-value,\n    #lp360-root .lp360-time-card-value,\n    #lp360-root .lp360-breakdown-total,\n    #lp360-root .lp360-dm-summary-value,\n    #lp360-root .lp360-breakdown-list li b {\n        font-family: 'Sora', 'Inter', sans-serif;\n    }\n\n    \/* ======================================================================\n       SHELL\n       ====================================================================== *\/\n    .lp360-shell {\n        max-width: 1100px;\n        margin: 0 auto;\n        padding: var(--lp-space-6);\n        background: var(--lp-bg-canvas);\n        border-radius: var(--lp-radius-lg);\n        overflow-x: hidden;\n    }\n\n    \/* ======================================================================\n       HEADER\n       ====================================================================== *\/\n    .lp360-page-header {\n        text-align: center;\n        margin-bottom: var(--lp-space-5);\n    }\n    .lp360-page-title {\n        font-size: clamp(28px, 3.6vw, 40px);\n        font-weight: 800;\n        letter-spacing: -0.5px;\n        margin: 0;\n        color: var(--lp-text-dark);\n    }\n    .lp360-page-title span {\n        background: linear-gradient(90deg, var(--lp-brand-light), var(--lp-gold));\n        -webkit-background-clip: text;\n        background-clip: text;\n        color: transparent;\n    }\n\n    \/* ======================================================================\n       TABS\n       ====================================================================== *\/\n    .lp360-tabs {\n        display: flex;\n        justify-content: center;\n        gap: var(--lp-space-2);\n        margin-bottom: var(--lp-space-5);\n        flex-wrap: wrap;\n        position: sticky;\n        top: 0;\n        z-index: 50;\n        background: var(--lp-bg-canvas);\n        padding: var(--lp-space-3) 0;\n    }\n    .lp360-tab {\n        display: inline-flex;\n        align-items: center;\n        gap: var(--lp-space-2);\n        padding: 10px 22px;\n        border-radius: 999px;\n        border: 1.5px solid var(--lp-border-subtle);\n        background: #fff;\n        color: var(--lp-text-gray);\n        font-weight: 700;\n        font-size: 14px;\n        cursor: pointer;\n        transition: all 0.2s ease;\n        white-space: nowrap;\n        font-family: 'Inter', sans-serif;\n    }\n    .lp360-tab-icon {\n        width: 17px;\n        height: 17px;\n    }\n    .lp360-tab:hover {\n        border-color: var(--lp-brand-light);\n        color: var(--lp-brand-light);\n        transform: translateY(-1px);\n    }\n    .lp360-tab.active {\n        background: linear-gradient(90deg, var(--lp-brand-light), var(--lp-gold));\n        border-color: transparent;\n        color: #fff;\n        box-shadow: 0 6px 16px rgba(232, 93, 58, 0.35);\n    }\n\n    \/* ======================================================================\n       PANELS\n       ====================================================================== *\/\n    .lp360-tab-panel {\n        display: block;\n        animation: lp360FadeIn 0.35s ease;\n    }\n\n    .lp360-tab-panel.active {\n        display: block;\n    }\n\n    .lp360-tab-panel+.lp360-tab-panel {\n        margin-top: var(--lp-space-7);\n        padding-top: var(--lp-space-6);\n        border-top: 1px solid var(--lp-border-subtle);\n    }\n    @keyframes lp360FadeIn {\n        from {\n            opacity: 0;\n            transform: translateY(6px);\n        }\n        to {\n            opacity: 1;\n            transform: translateY(0);\n        }\n    }\n\n    \/* ======================================================================\n       SECTION CARD \u2014 unified outer container\n       ====================================================================== *\/\n    .lp360-section-card {\n        background: var(--lp-card-bg);\n        border-radius: var(--lp-radius-lg);\n        box-shadow: var(--lp-shadow-sm);\n        border: 1px solid var(--lp-border-subtle);\n        padding: var(--lp-space-4) var(--lp-space-5) var(--lp-space-5);\n        margin-bottom: var(--lp-space-6);\n        overflow: hidden;\n        transition: box-shadow 0.25s ease;\n    }\n    .lp360-section-card:hover {\n        box-shadow: var(--lp-shadow-md);\n    }\n    .lp360-section-card .lp360-section-title {\n        margin-bottom: var(--lp-space-4);\n    }\n    .lp360-section-card .lp360-section-title h2 {\n        font-size: 20px;\n        font-weight: 800;\n        margin: 0 0 4px;\n    }\n    .lp360-section-divider {\n        height: 1px;\n        background: var(--lp-border-subtle);\n        margin: var(--lp-space-4) 0;\n        width: 100%;\n    }\n    .lp360-section-divider--strong {\n        height: 2px;\n        background: var(--lp-border-subtle);\n        margin: var(--lp-space-5) 0;\n        width: 100%;\n        opacity: 0.6;\n    }\n\n    \/* ======================================================================\n       SECTION TITLE (used inside cards)\n       ====================================================================== *\/\n    .lp360-section-title {\n        margin: 0;\n    }\n    .lp360-section-title h2 {\n        font-size: 22px;\n        font-weight: 800;\n        margin: 0 0 4px;\n        color: var(--lp-text-dark);\n        letter-spacing: -0.3px;\n    }\n    .lp360-section-title h2 span {\n        color: var(--lp-brand-light);\n    }\n    .lp360-underline {\n        display: block;\n        width: 36px;\n        height: 4px;\n        border-radius: 4px;\n        background: linear-gradient(90deg, var(--lp-brand-light), var(--lp-gold));\n    }\n\n    \/* ======================================================================\n       HERO CARD \u2014 dark gradient header inside section card\n       ====================================================================== *\/\n    .lp360-hero-card {\n        background: linear-gradient(135deg, var(--lp-dark-1) 40%, var(--lp-dark-2) 100%);\n        box-shadow: var(--lp-brand-glow);\n        color: #ffffff;\n        border-radius: var(--lp-radius-md);\n        padding: var(--lp-space-4) var(--lp-space-5);\n        display: grid;\n        grid-template-columns: 1fr auto 1fr auto 1fr;\n        align-items: center;\n        gap: var(--lp-space-3);\n        box-shadow: 0 8px 24px rgba(13, 16, 36, 0.25);\n        margin: 0;\n    }\n    .lp360-hero-divider {\n        width: 1px;\n        height: 100px;\n        background: rgba(255, 255, 255, 0.1);\n        justify-self: center;\n    }\n\n    .lp360-gauge-wrap {\n        position: relative;\n        width: 190px;\n        height: 190px;\n        margin: 0 auto;\n    }\n    .lp360-gauge-svg {\n        width: 100%;\n        height: 100%;\n        transform: rotate(-125deg);\n        filter: drop-shadow(0 0 20px rgba(255, 122, 61, 0.35));\n    }\n    .lp360-gauge-track {\n        fill: none;\n        stroke: rgba(255, 255, 255, 0.08);\n        stroke-width: 12;\n    }\n    .lp360-gauge-progress {\n        fill: none;\n        stroke-width: 12;\n        stroke-linecap: round;\n        stroke-dasharray: 691;\n        stroke-dashoffset: 691;\n        transition: stroke-dashoffset 1.1s cubic-bezier(0.2, 0.7, 0.2, 1);\n    }\n    .lp360-gauge-center {\n        position: absolute;\n        inset: 0;\n        display: flex;\n        flex-direction: column;\n        align-items: center;\n        justify-content: center;\n        text-align: center;\n    }\n    .lp360-gauge-label {\n        font-size: 11px;\n        letter-spacing: 2.5px;\n        color: #cbd5e1;\n        font-weight: 700;\n        text-transform: uppercase;\n        margin-bottom: 6px;\n    }\n    .lp360-gauge-value {\n        display: inline-flex;\n        align-items: baseline;\n        font-size: 44px;\n        font-weight: 800;\n        line-height: 1;\n        background: linear-gradient(90deg, var(--lp-gold), var(--lp-brand-light));\n        -webkit-background-clip: text;\n        background-clip: text;\n        color: transparent;\n    }\n    .lp360-gauge-value small {\n        font-size: 20px;\n        color: #94a3b8;\n        -webkit-text-fill-color: #94a3b8;\n        font-weight: 600;\n    }\n    .lp360-gauge-minibar {\n        width: 60%;\n        max-width: 110px;\n        height: 6px;\n        background: rgba(255, 255, 255, 0.1);\n        border-radius: 6px;\n        margin: 10px auto 0;\n        overflow: hidden;\n    }\n    .lp360-gauge-minibar-fill {\n        height: 100%;\n        width: 0%;\n        border-radius: 6px;\n        background: linear-gradient(90deg, var(--lp-teal), var(--lp-cyan));\n        transition: width 1s ease 0.2s;\n    }\n\n    .lp360-hero-metric {\n        text-align: center;\n        color: #fff;\n    }\n    .lp360-icon-badge {\n        width: 54px;\n        height: 54px;\n        border-radius: 50%;\n        display: flex;\n        align-items: center;\n        justify-content: center;\n        margin: 0 auto 8px;\n    }\n    .lp360-icon-badge svg {\n        width: 26px;\n        height: 26px;\n    }\n    .lp360-icon-badge--cyan {\n        background: radial-gradient(circle, #1c5f78, #123047);\n        color: var(--lp-cyan);\n        box-shadow: 0 0 0 6px rgba(51, 195, 240, 0.08);\n    }\n    .lp360-icon-badge--purple {\n        background: radial-gradient(circle, #4a2f86, #2a1a52);\n        color: var(--lp-purple2);\n        box-shadow: 0 0 0 6px rgba(139, 92, 246, 0.1);\n    }\n    .lp360-hero-metric-label {\n        display: block;\n        font-size: 12px;\n        letter-spacing: 1.8px;\n        color: #cbd5e1;\n        font-weight: 700;\n        text-transform: uppercase;\n        margin-bottom: 8px;\n    }\n    .lp360-hero-metric-value {\n        display: inline-flex;\n        align-items: baseline;\n        justify-content: center;\n        font-size: 32px;\n        font-weight: 800;\n        color: var(--lp-cyan);\n        padding: 8px 20px;\n        border-radius: 14px;\n        background: rgba(51, 195, 240, 0.1);\n        box-shadow: inset 0 0 0 1.5px rgba(51, 195, 240, 0.3);\n        min-width: 120px;\n        font-family: 'Sora', 'Inter', sans-serif;\n    }\n    #lp360-total-attempt {\n        color: #a78bfa;\n        background: rgba(139, 92, 246, 0.15);\n        box-shadow: inset 0 0 0 1.5px rgba(167, 139, 250, 0.35);\n    }\n    .lp360-hero-metric-footer {\n        font-size: 12px;\n        color: #8b93a7;\n        margin-top: 8px;\n        font-weight: 600;\n    }\n\n    \/* ======================================================================\n       STANDARDIZED INFO BUTTON \u2014 two-tone ring with glow\n       ====================================================================== *\/\n    .lp360-info-btn {\n        display: inline-flex;\n        align-items: center;\n        justify-content: center;\n        width: 38px;\n        height: 38px;\n        border-radius: 50%;\n        border: 3px solid rgba(255, 122, 61, 0.35);\n        background: rgba(255, 122, 61, 0.12);\n        color: #fff;\n        font-size: 0;\n        cursor: pointer;\n        transition: all 0.3s ease;\n        flex-shrink: 0;\n        -webkit-appearance: none;\n        appearance: none;\n        line-height: 0;\n        padding: 0;\n        margin: 0;\n        position: relative;\n        box-shadow: 0 0 0 0 rgba(255, 122, 61, 0);\n    }\n    .lp360-info-btn::before {\n        content: '';\n        position: absolute;\n        inset: 4px;\n        border-radius: 50%;\n        background: linear-gradient(135deg, var(--lp-brand-light), var(--lp-brand-dark));\n        z-index: 0;\n        transition: transform 0.3s ease, background 0.3s ease;\n    }\n    .lp360-info-btn::after {\n        content: 'i';\n        font-family: 'Inter', sans-serif;\n        font-weight: 800;\n        font-size: 16px;\n        color: #fff;\n        line-height: 1;\n        position: relative;\n        z-index: 1;\n        transition: transform 0.3s ease;\n    }\n    .lp360-info-btn:hover {\n        transform: scale(1.08);\n        box-shadow: 0 0 20px rgba(255, 122, 61, 0.4);\n    }\n    .lp360-info-btn:hover::before {\n        transform: scale(1.12);\n        background: linear-gradient(135deg, var(--lp-gold), var(--lp-brand-light));\n    }\n    .lp360-info-btn:hover::after {\n        transform: rotate(10deg) scale(1.05);\n    }\n\n\n    \/* ======================================================================\n       INFO POPOVER \u2014 premium, colourful, glass\u2011morphism\n       ====================================================================== *\/\n    .lp360-info-popover {\n        position: fixed;\n        inset: 0;\n        background: rgba(0, 0, 0, 0.50);\n        backdrop-filter: blur(12px) saturate(1.3);\n        -webkit-backdrop-filter: blur(12px) saturate(1.3);\n        display: flex;\n        align-items: center;\n        justify-content: center;\n        z-index: 10000;\n        padding: var(--lp-space-5);\n        animation: lp360FadeIn 0.3s ease;\n    }\n    .lp360-info-popover__content {\n        background: rgba(255, 255, 255, 0.95);\n        backdrop-filter: blur(4px);\n        -webkit-backdrop-filter: blur(4px);\n        border-radius: 28px;\n        max-width: 520px;\n        width: 100%;\n        padding: 0;\n        box-shadow: 0 40px 80px rgba(0, 0, 0, 0.30), 0 0 0 1px rgba(232, 93, 58, 0.20) inset, 0 0 0 2px rgba(255, 255, 255, 0.6) inset;\n        animation: lp360PopoverSlideUp 0.5s cubic-bezier(0.34, 1.56, 0.64, 1);\n        position: relative;\n        text-align: center;\n        border: none;\n        overflow: hidden;\n    }\n    .lp360-info-popover__content::before {\n        content: '';\n        position: absolute;\n        top: 0;\n        left: 0;\n        right: 0;\n        height: 6px;\n        background: linear-gradient(90deg, var(--lp-brand-light), var(--lp-gold), var(--lp-brand-light));\n        background-size: 200% 100%;\n        animation: lp360GradientMove 3s ease infinite;\n    }\n    @keyframes lp360GradientMove {\n        0% {\n            background-position: 0% 50%;\n        }\n        50% {\n            background-position: 100% 50%;\n        }\n        100% {\n            background-position: 0% 50%;\n        }\n    }\n    @keyframes lp360PopoverSlideUp {\n        from {\n            opacity: 0;\n            transform: translateY(30px) scale(0.95);\n        }\n        to {\n            opacity: 1;\n            transform: translateY(0) scale(1);\n        }\n    }\n    .lp360-info-popover__close {\n        position: absolute;\n        top: 16px;\n        right: 18px;\n        background: rgba(0, 0, 0, 0.05);\n        border: none;\n        font-size: 24px;\n        font-weight: 400;\n        color: var(--lp-text-gray);\n        cursor: pointer;\n        line-height: 1;\n        transition: all 0.25s ease;\n        padding: 0;\n        width: 40px;\n        height: 40px;\n        display: flex;\n        align-items: center;\n        justify-content: center;\n        border-radius: 50%;\n        z-index: 5;\n    }\n    .lp360-info-popover__close:hover {\n        color: var(--lp-red);\n        background: rgba(239, 68, 68, 0.15);\n        transform: rotate(90deg);\n    }\n    .lp360-info-popover__icon {\n        width: 80px;\n        height: 80px;\n        border-radius: 50%;\n        background: linear-gradient(135deg, var(--lp-brand-light), var(--lp-gold));\n        display: flex;\n        align-items: center;\n        justify-content: center;\n        margin: 36px auto 20px;\n        color: #fff;\n        box-shadow: 0 10px 40px rgba(232, 93, 58, 0.40);\n        animation: lp360PopoverIconPulse 2.6s ease-in-out infinite;\n    }\n    @keyframes lp360PopoverIconPulse {\n        0%,\n        100% {\n            box-shadow: 0 10px 40px rgba(232, 93, 58, 0.40);\n        }\n        50% {\n            box-shadow: 0 10px 50px rgba(232, 93, 58, 0.60);\n        }\n    }\n    .lp360-info-popover__icon svg {\n        width: 38px;\n        height: 38px;\n    }\n    .lp360-info-popover__title {\n        font-family: 'Sora', 'Inter', sans-serif;\n        font-size: 24px;\n        font-weight: 800;\n        margin: 0 0 8px;\n        color: var(--lp-text-dark);\n        letter-spacing: -0.3px;\n        padding: 0 var(--lp-space-5);\n    }\n    .lp360-info-popover__desc {\n        font-size: 16px;\n        line-height: 1.7;\n        color: #374151;\n        margin: 0;\n        text-align: left;\n        padding: 0 var(--lp-space-6) var(--lp-space-5);\n    }\n    .lp360-info-popover__desc p {\n        margin: 0 0 0.5em;\n    }\n    .lp360-info-popover__desc p:last-child {\n        margin-bottom: 0;\n    }\n    .lp360-info-popover__badge {\n        display: inline-block;\n        margin: 0 0 28px;\n        padding: 8px 24px;\n        border-radius: 999px;\n        background: linear-gradient(90deg, var(--lp-brand-light), var(--lp-gold));\n        color: #fff;\n        font-size: 13px;\n        font-weight: 700;\n        letter-spacing: 1px;\n        text-transform: uppercase;\n        box-shadow: 0 6px 20px rgba(232, 93, 58, 0.30);\n    }\n    \/* ======================================================================\n       TIME CARDS \u2014 unified container with internal dividers\n       ====================================================================== *\/\n    .lp360-time-cards {\n        display: flex;\n        background: transparent;\n        border: none;\n        margin: 0;\n        gap: var(--lp-space-4);\n    }\n    .lp360-time-card {\n        flex: 1;\n        padding: var(--lp-space-4) var(--lp-space-4);\n        text-align: center;\n        display: flex;\n        flex-direction: column;\n        align-items: center;\n        gap: 2px;\n        position: relative;\n        background: transparent;\n        border: none;\n        box-shadow: none;\n        border-radius: var(--lp-radius-md);\n    }\n    .lp360-time-card:last-child {\n        border-right: none;\n    }\n    .lp360-time-card>* {\n        max-width: 220px;\n    }\n    .lp360-time-card--red {\n        background: #fef2f2;\n        border: 1px solid #fecaca;\n        box-shadow: 0 4px 12px rgba(239, 68, 68, 0.05);\n        color: var(--lp-red);\n    }\n    .lp360-time-card--orange {\n        background: #fff7ed;\n        border: 1px solid #fed7aa;\n        box-shadow: 0 4px 12px rgba(249, 115, 22, 0.05);\n        color: var(--lp-orange2);\n    }\n    .lp360-time-card--blue {\n        background: #eff6ff;\n        border: 1px solid #bfdbfe;\n        box-shadow: 0 4px 12px rgba(59, 130, 246, 0.05);\n        color: #2563eb;\n    }\n\n    .lp360-icon-badge--red-soft {\n        background: #fbdada;\n        color: var(--lp-red);\n    }\n    .lp360-icon-badge--orange-soft {\n        background: #fde3c8;\n        color: var(--lp-orange2);\n    }\n    .lp360-icon-badge--blue-soft {\n        background: #d9e8fb;\n        color: #2563eb;\n    }\n    .lp360-time-card .lp360-icon-badge {\n        margin: 0 auto 4px;\n        width: 38px;\n        height: 38px;\n        background: #fff;\n        color: currentColor;\n        box-shadow: 0 2px 8px rgba(0, 0, 0, 0.04);\n    }\n    .lp360-time-card .lp360-icon-badge svg {\n        width: 18px;\n        height: 18px;\n    }\n\n    .lp360-time-card .lp360-time-card-label {\n        font-size: 11px;\n        letter-spacing: 0.8px;\n        font-weight: 700;\n        text-transform: uppercase;\n        line-height: 1.3;\n        color: currentColor;\n    }\n\n    .lp360-time-card .lp360-time-card-value {\n        display: inline-flex;\n        align-items: baseline;\n        gap: 2px;\n        font-size: 26px;\n        font-weight: 800;\n        padding: 4px 14px;\n        border-radius: 10px;\n        font-family: 'Sora', 'Inter', sans-serif;\n        color: currentColor;\n    }\n    .lp360-time-card-value small {\n        font-size: 12px;\n        font-weight: 600;\n        color: currentColor;\n        opacity: 0.7;\n    }\n\n    .lp360-time-card .lp360-mini-rule {\n        display: block;\n        width: 28px;\n        height: 2px;\n        background: currentColor;\n        opacity: 0.2;\n        margin: 4px auto;\n        color: currentColor;\n    }\n\n    .lp360-time-card .lp360-time-card-badge {\n        display: inline-block;\n        padding: 3px 14px;\n        border-radius: 999px;\n        font-weight: 700;\n        text-transform: uppercase;\n        letter-spacing: 0.5px;\n        font-size: 12px;\n        color: currentColor;\n        background: #fff;\n        border: 1px solid currentColor;\n        box-shadow: none;\n    }\n\n    \/* ======================================================================\n       BREAKDOWN \u2014 unified card with internal columns (Fix 6: mobile stacking)\n       ====================================================================== *\/\n    .lp360-breakdown-unified {\n        background: transparent;\n        border-radius: 0;\n        border: none;\n        padding: 0;\n        margin: 0;\n        display: grid;\n        grid-template-columns: 1fr 1fr 1fr;\n        gap: 0;\n        overflow: hidden;\n        border-top: 1px solid var(--lp-border-subtle);\n    }\n    .lp360-breakdown-col {\n        padding: var(--lp-space-3) var(--lp-space-4);\n        position: relative;\n        background: transparent;\n        color: #ffffff;\n    }\n    .lp360-breakdown-col h3 {\n        color: #ffffff !important;\n    }\n    .lp360-breakdown-col .lp360-breakdown-head {\n        color: #ffffff;\n    }\n    .lp360-breakdown-col:nth-child(1) {\n        background: var(--lp-bg-green-soft);\n        border-left: 4px solid var(--lp-green);\n    }\n    .lp360-breakdown-col:nth-child(2) {\n        background: var(--lp-bg-red-soft);\n        border-left: 4px solid var(--lp-red);\n    }\n    .lp360-breakdown-col:nth-child(3) {\n        background: var(--lp-bg-amber-soft);\n        border-left: 4px solid var(--lp-amber);\n    }\n    .lp360-breakdown-col+.lp360-breakdown-col {\n        border-left: 1px solid var(--lp-border-subtle);\n    }\n    .lp360-breakdown-head {\n        display: flex;\n        align-items: center;\n        gap: var(--lp-space-3);\n        margin-bottom: var(--lp-space-3);\n    }\n    .lp360-round-icon {\n        width: 38px;\n        height: 38px;\n        border-radius: 50%;\n        display: flex;\n        align-items: center;\n        justify-content: center;\n        flex-shrink: 0;\n    }\n    .lp360-round-icon svg {\n        width: 18px;\n        height: 18px;\n    }\n    .lp360-round-icon--green {\n        background: var(--lp-green);\n    }\n    .lp360-round-icon--red {\n        background: var(--lp-red);\n    }\n    .lp360-round-icon--orange {\n        background: var(--lp-orange2);\n    }\n\n    .lp360-breakdown-label {\n        font-size: 11px;\n        font-weight: 700;\n        letter-spacing: 1.2px;\n        text-transform: uppercase;\n        color: var(--lp-text-gray);\n        margin-bottom: 2px;\n    }\n    .lp360-breakdown-col--green .lp360-breakdown-label {\n        color: var(--lp-green);\n    }\n    .lp360-breakdown-col--red .lp360-breakdown-label {\n        color: var(--lp-red);\n    }\n    .lp360-breakdown-col--orange .lp360-breakdown-label {\n        color: var(--lp-orange2);\n    }\n\n    .lp360-breakdown-total {\n        display: inline-block;\n        font-size: 26px;\n        font-weight: 800;\n        padding: 0 12px;\n        border-radius: 8px;\n        font-family: 'Sora', 'Inter', sans-serif;\n    }\n    .lp360-breakdown-col--green .lp360-breakdown-total {\n        color: var(--lp-green);\n        background: rgba(34, 197, 94, 0.1);\n    }\n    .lp360-breakdown-col--red .lp360-breakdown-total {\n        color: var(--lp-red);\n        background: rgba(239, 68, 68, 0.1);\n    }\n    .lp360-breakdown-col--orange .lp360-breakdown-total {\n        color: var(--lp-orange2);\n        background: rgba(249, 115, 22, 0.1);\n    }\n\n    .lp360-breakdown-list {\n        list-style: none;\n        margin: 0;\n        padding: 0;\n    }\n    .lp360-breakdown-list li {\n        display: flex;\n        align-items: center;\n        gap: var(--lp-space-2);\n        font-size: 13.5px;\n        color: #374151;\n        font-weight: 500;\n        padding: 10px 14px;\n        margin-bottom: 8px;\n        border-radius: var(--lp-radius-md);\n        background: #f8fafc;\n        border: 1px solid #f1f5f9;\n        transition: all 0.2s ease;\n    }\n    .lp360-breakdown-list li:hover {\n        background: #fff;\n        border-color: #e2e8f0;\n        box-shadow: 0 2px 4px rgba(0, 0, 0, 0.02);\n    }\n    .lp360-breakdown-col--green .lp360-breakdown-list li,\n    .lp360-breakdown-col--red .lp360-breakdown-list li,\n    .lp360-breakdown-col--orange .lp360-breakdown-list li {\n        background: rgba(255, 255, 255, 0.05);\n        border: 1px solid rgba(255, 255, 255, 0.1);\n        color: #ffffff;\n    }\n    .lp360-breakdown-col--green .lp360-breakdown-list li:hover,\n    .lp360-breakdown-col--red .lp360-breakdown-list li:hover,\n    .lp360-breakdown-col--orange .lp360-breakdown-list li:hover {\n        background: rgba(255, 255, 255, 0.1);\n    }\n    .lp360-breakdown-list li:last-child {\n        margin-bottom: 0;\n    }\n    .lp360-breakdown-list li b {\n        margin-left: auto;\n        font-weight: 700;\n        color: #ffffff;\n        font-size: 14px;\n        background: rgba(255, 255, 255, 0.15);\n        box-shadow: none;\n        padding: 4px 12px;\n        border-radius: 999px;\n        min-width: 32px;\n        text-align: center;\n        font-family: 'Sora', 'Inter', sans-serif;\n    }\n    .lp360-mini-icon {\n        width: 24px;\n        height: 24px;\n        border-radius: 50%;\n        display: flex;\n        align-items: center;\n        justify-content: center;\n        flex-shrink: 0;\n    }\n    .lp360-mini-icon svg {\n        width: 12px;\n        height: 12px;\n    }\n    .lp360-breakdown-list li .lp360-mini-icon {\n        background: rgba(255, 255, 255, 0.15);\n        color: #ffffff;\n        box-shadow: none;\n    }\n    .lp360-mini-icon--green {\n        background: #e6f7ec;\n        color: var(--lp-green);\n    }\n    .lp360-mini-icon--red {\n        background: #fdeaea;\n        color: var(--lp-red);\n    }\n    .lp360-mini-icon--orange {\n        background: #fdecd9;\n        color: var(--lp-orange2);\n    }\n\n    \/* ======================================================================\n       DECISION MARKER \u2014 compact table, mobile scroll (Fix 8)\n       ====================================================================== *\/\n    .lp360-decision-card {\n        background: var(--lp-card-bg);\n        border-radius: var(--lp-radius-lg);\n        padding: var(--lp-space-4);\n        box-shadow: var(--lp-shadow-sm);\n        border: 1px solid var(--lp-border-subtle);\n        margin: 0;\n        overflow: hidden;\n    }\n    .lp360-decision-card .lp360-section-title {\n        margin-bottom: var(--lp-space-3);\n    }\n    .lp360-decision-card .lp360-section-title h2 {\n        font-size: 20px;\n    }\n\n    .lp360-dm-table-scroll {\n        overflow-x: auto;\n        padding-bottom: 4px;\n        -webkit-overflow-scrolling: touch;\n        scrollbar-width: thin;\n        scrollbar-color: var(--lp-border-subtle) transparent;\n        position: relative;\n    }\n    .lp360-dm-table-scroll::-webkit-scrollbar {\n        height: 6px;\n    }\n    .lp360-dm-table-scroll::-webkit-scrollbar-track {\n        background: transparent;\n    }\n    .lp360-dm-table-scroll::-webkit-scrollbar-thumb {\n        background: var(--lp-border-subtle);\n        border-radius: 10px;\n    }\n    .lp360-dm-table-scroll::after {\n        content: '';\n        position: absolute;\n        right: 0;\n        top: 0;\n        bottom: 0;\n        width: 30px;\n        background: linear-gradient(to right, transparent, rgba(255, 255, 255, 0.8));\n        pointer-events: none;\n        opacity: 0;\n        transition: opacity 0.3s ease;\n    }\n    .lp360-dm-table-scroll.is-scrollable::after {\n        opacity: 1;\n    }\n\n    .lp360-dm-table {\n        width: 100%;\n        border-collapse: separate;\n        border-spacing: 0 4px;\n        table-layout: auto;\n        font-size: 13px;\n        min-width: 600px;\n    }\n    .lp360-dm-table thead th {\n        font-size: 11px;\n        font-weight: 700;\n        text-align: center;\n        padding: 10px 12px;\n        white-space: nowrap;\n        letter-spacing: 0.5px;\n        text-transform: uppercase;\n        background: linear-gradient(135deg, var(--lp-brand-light), var(--lp-brand-dark));\n        color: #fff;\n        border: none;\n        position: sticky;\n        top: 0;\n        z-index: 2;\n    }\n    \/* Make interval headers match body cell size *\/\n    .lp360-dm-table thead th:not(:first-child) {\n        font-size: 15px;\n        font-weight: 700;\n        letter-spacing: 0;\n        text-transform: none;\n    }\n    .lp360-dm-table thead th:first-child {\n        border-radius: 10px 0 0 10px;\n        text-align: left !important;\n    }\n    .lp360-dm-table thead th:last-child {\n        border-radius: 0 10px 10px 0;\n    }\n    .lp360-dm-row-head-col {\n        min-width: 0;\n        text-align: left !important;\n        font-weight: 700 !important;\n        white-space: normal;\n        background: linear-gradient(135deg, var(--lp-brand-light), var(--lp-brand-dark)) !important;\n        color: #fff !important;\n    }\n\n    .lp360-dm-table tbody td {\n        padding: 8px 10px;\n        vertical-align: middle;\n        white-space: nowrap;\n        font-weight: 700;\n        font-size: 15px;\n    }\n    \/* Keep the first column (labels) left-aligned and normal weight *\/\n    .lp360-dm-table tbody td:first-child {\n        text-align: left !important;\n        font-weight: 700;\n        font-size: 13px;\n    }\n    \/* All other cells (numbers) centered *\/\n    .lp360-dm-table tbody td:not(:first-child) {\n        text-align: center;\n    }\n    .lp360-dm-table tbody td:first-child {\n        border-radius: 10px 0 0 10px;\n        white-space: normal;\n    }\n    .lp360-dm-table tbody td:last-child {\n        border-radius: 0 10px 10px 0;\n    }\n\n    .lp360-dm-row-label {\n        display: flex;\n        align-items: center;\n        gap: var(--lp-space-2);\n        font-weight: 700;\n        font-size: 13px;\n        white-space: normal;\n        word-break: break-word;\n    }\n    .lp360-dm-row-icon {\n        width: 24px;\n        height: 24px;\n        border-radius: 50%;\n        display: flex;\n        align-items: center;\n        justify-content: center;\n        flex-shrink: 0;\n    }\n    .lp360-dm-row-icon svg {\n        width: 12px;\n        height: 12px;\n    }\n    .lp360-dm-chip-cell {\n        display: flex;\n        flex-wrap: wrap;\n        gap: 4px;\n        justify-content: center;\n    }\n    .lp360-dm-chip,\n    .lp360-time-card-badge {\n        cursor: pointer;\n        transition: transform 0.15s ease, box-shadow 0.15s ease;\n    }\n    .lp360-dm-chip:hover,\n    .lp360-time-card-badge:hover {\n        transform: translateY(-2px) scale(1.06);\n        box-shadow: 0 4px 10px rgba(232, 93, 58, 0.25);\n    }\n    .lp360-dm-chip {\n        display: inline-flex;\n        align-items: center;\n        font-size: 11px;\n        font-weight: 700;\n        padding: 3px 8px;\n        border-radius: 999px;\n        background: #fff;\n        box-shadow: 0 1px 4px rgba(15, 23, 42, 0.06);\n        border: 1.5px solid transparent;\n        white-space: nowrap;\n    }\n\n    .lp360-dm-row--green {\n        background: #eaf8ef;\n    }\n    .lp360-dm-row--red {\n        background: #fdeaea;\n    }\n    .lp360-dm-row--teal {\n        background: #e4f7f4;\n    }\n    .lp360-dm-row--peach {\n        background: #fdecd9;\n    }\n    .lp360-dm-row--yellow {\n        background: #fdf6db;\n    }\n    .lp360-dm-row--purple {\n        background: #ede8fb;\n    }\n\n    .lp360-dm-row-icon--green {\n        background: var(--lp-green);\n    }\n    .lp360-dm-row-icon--red {\n        background: var(--lp-red);\n    }\n    .lp360-dm-row-icon--teal {\n        background: var(--lp-teal);\n    }\n    .lp360-dm-row-icon--peach {\n        background: var(--lp-orange2);\n    }\n    .lp360-dm-row-icon--yellow {\n        background: var(--lp-yellow);\n    }\n    .lp360-dm-row-icon--purple {\n        background: var(--lp-purple2);\n    }\n    \/* New: Blue attempt row *\/\n    .lp360-dm-row--blue {\n        background: #f0f7ff;\n    }\n    .lp360-dm-row-icon--blue {\n        background: #3b82f6;\n    }\n    .lp360-dm-chip--green {\n        color: var(--lp-green);\n        border-color: #bdeccb;\n    }\n    .lp360-dm-chip--red {\n        color: var(--lp-red);\n        border-color: #f9c9c9;\n    }\n    .lp360-dm-chip--teal {\n        color: #0d9488;\n        border-color: #b8ece5;\n    }\n    .lp360-dm-chip--peach {\n        color: var(--lp-orange2);\n        border-color: #fbd6ac;\n    }\n    .lp360-dm-chip--yellow {\n        color: #b45309;\n        border-color: #f9e6a0;\n    }\n    .lp360-dm-chip--purple {\n        color: #7c3aed;\n        border-color: #d8cdf7;\n    }\n    .lp360-dm-summary {\n        display: grid;\n        grid-template-columns: repeat(3, 1fr);\n        gap: var(--lp-space-4);\n        margin-top: var(--lp-space-4);\n        \/* No border-top \u2013 removed per your earlier request *\/\n    }\n\n    .lp360-dm-summary-card {\n        border-radius: var(--lp-radius-md);\n        padding: var(--lp-space-4) var(--lp-space-3);\n        text-align: center;\n        background: #fafbfc;\n        box-shadow: var(--lp-shadow-sm);\n        border: 1px solid var(--lp-border-subtle);\n        transition: all 0.25s ease;\n        display: flex;\n        flex-direction: column;\n        align-items: center;\n        gap: 4px;\n    }\n    .lp360-dm-summary-card:hover {\n        transform: translateY(-3px);\n        box-shadow: var(--lp-shadow-md);\n    }\n    .lp360-dm-summary-icon {\n        width: 44px;\n        height: 44px;\n        border-radius: 50%;\n        display: flex;\n        align-items: center;\n        justify-content: center;\n        margin-bottom: 2px;\n        background: rgba(255, 255, 255, 0.9);\n        box-shadow: 0 2px 8px rgba(0, 0, 0, 0.05);\n    }\n    .lp360-dm-summary-icon svg {\n        width: 20px;\n        height: 20px;\n    }\n    .lp360-dm-summary-value {\n        font-family: 'Sora', 'Inter', sans-serif;\n        font-size: 15px;\n        font-weight: 700;\n        line-height: 1.3;\n        color: var(--lp-text-dark);\n    }\n    .lp360-dm-summary-label {\n        font-size: 11px;\n        font-weight: 600;\n        text-transform: uppercase;\n        letter-spacing: 0.6px;\n        color: var(--lp-text-gray);\n    }\n    \/* Coloured accents for each card *\/\n    .lp360-dm-summary-card--blue .lp360-dm-summary-icon {\n        background: #e0f2fe;\n        color: #2563eb;\n    }\n    .lp360-dm-summary-card--blue .lp360-dm-summary-value {\n        color: #2563eb;\n    }\n    .lp360-dm-summary-card--blue {\n        border-top: 3px solid #2563eb;\n    }\n    .lp360-dm-summary-card--green .lp360-dm-summary-icon {\n        background: #dcfce7;\n        color: #16a34a;\n    }\n    .lp360-dm-summary-card--green .lp360-dm-summary-value {\n        color: #16a34a;\n    }\n    .lp360-dm-summary-card--green {\n        border-top: 3px solid #16a34a;\n    }\n    .lp360-dm-summary-card--red .lp360-dm-summary-icon {\n        background: #fee2e2;\n        color: #dc2626;\n    }\n    .lp360-dm-summary-card--red .lp360-dm-summary-value {\n        color: #dc2626;\n    }\n    .lp360-dm-summary-card--red {\n        border-top: 3px solid #dc2626;\n    }\n    .lp360-dm-summary-card--teal,\n    .lp360-dm-summary-card--peach,\n    .lp360-dm-summary-card--yellow,\n    .lp360-dm-summary-card--purple {\n        border-top: 3px solid var(--lp-border-subtle);\n    }\n\n    .lp360-dm-inference {\n        margin: var(--lp-space-4) 0 0;\n        padding: var(--lp-space-3) var(--lp-space-4);\n        border-radius: 12px;\n        background: #fff7ed;\n        border: 1px solid #fed7aa;\n        color: #9a3412;\n        font-size: 13px;\n        font-weight: 600;\n        line-height: 1.5;\n    }\n\n\n    \/* ======================================================================\n       TRACKER PANEL \u2014 unified card with internal sections\n       ====================================================================== *\/\n    #lp360-panel-tracker.active {\n        display: block;\n    }\n    .lp360-tracker-card,\n    .lp360-accuracy-card,\n    .lp360-time-tracker-card {\n        background: transparent;\n        border-radius: 0;\n        padding: 0;\n        box-shadow: none;\n        border: none;\n        overflow: visible;\n        margin: 0;\n    }\n    .lp360-tracker-card+.lp360-tracker-card,\n    .lp360-accuracy-card+.lp360-tracker-card,\n    .lp360-tracker-card+.lp360-accuracy-card {\n        padding-top: var(--lp-space-5);\n        border-top: 1px solid var(--lp-border-subtle);\n        margin-top: var(--lp-space-4);\n    }\n    .lp360-tracker-header {\n        margin-bottom: var(--lp-space-3);\n    }\n    .lp360-tracker-title {\n        font-size: 20px;\n        font-weight: 800;\n        margin: 0 0 2px;\n        color: var(--lp-text-dark);\n        font-family: 'Sora', 'Inter', sans-serif;\n    }\n    .lp360-tracker-title span {\n        color: var(--lp-brand-light);\n    }\n    .lp360-tracker-desc {\n        display: none;\n    }\n\n    .lp360-tracker-chart-wrap {\n        position: relative;\n        width: 100%;\n        background: #fafaf9;\n        border-radius: var(--lp-radius-sm);\n        padding: 4px;\n        box-shadow: inset 0 1px 4px rgba(0, 0, 0, 0.02);\n        overflow: visible;\n    }\n    #lp360-tracker-canvas,\n    #lp360-accuracy-canvas {\n        display: block;\n        width: 100%;\n        height: auto;\n        background: #ffffff;\n        border-radius: var(--lp-radius-xs);\n        box-shadow: 0 1px 4px rgba(0, 0, 0, 0.02);\n        cursor: crosshair;\n    }\n\n    \/* time tracker info \u2014 removed, now in popup *\/\n    .lp360-time-tracker-info {\n        display: none;\n    }\n\n    \/* time tracker layout *\/\n    .lp360-time-tracker-layout {\n        display: grid;\n        grid-template-columns: 35% 1fr;\n        gap: var(--lp-space-5);\n        align-items: start;\n    }\n    @media (max-width: 900px) {\n        .lp360-time-tracker-layout {\n            grid-template-columns: 1fr;\n        }\n    }\n    .lp360-time-tracker-left {\n        display: flex;\n        flex-direction: column;\n        gap: var(--lp-space-4);\n    }\n    .lp360-time-tracker-right {\n        display: flex;\n        flex-direction: column;\n        gap: var(--lp-space-4);\n        background: var(--lp-bg-cyan-soft);\n        color: #ffffff;\n        border: 1px solid var(--lp-border-subtle);\n        border-radius: var(--lp-radius-md);\n        padding: var(--lp-space-4);\n        box-shadow: var(--lp-shadow-sm);\n    }\n\n    \/* time tabs *\/\n    .lp360-time-tracker-tabs {\n        display: flex;\n        gap: 0;\n        margin-bottom: 0;\n        border-radius: var(--lp-radius-sm);\n        overflow: hidden;\n        border: 1px solid var(--lp-border-subtle);\n        background: #f9fafb;\n    }\n    .lp360-time-tab {\n        flex: 1;\n        padding: 10px 12px;\n        text-align: center;\n        font-weight: 700;\n        font-size: 13px;\n        color: #1f2937;\n        background: transparent;\n        border: none;\n        cursor: pointer;\n        transition: all 0.2s ease;\n        font-family: 'Inter', sans-serif;\n        border-right: 1px solid var(--lp-border-subtle);\n    }\n    .lp360-time-tab:last-child {\n        border-right: none;\n    }\n    .lp360-time-tab:hover {\n        background: #f3f4f6;\n    }\n    .lp360-time-tab.active {\n        background: var(--lp-brand-light);\n        color: #fff;\n        box-shadow: 0 4px 12px rgba(232, 93, 58, 0.3);\n    }\n\n    \/* gauges *\/\n    .lp360-time-tracker-gauges {\n        display: grid;\n        grid-template-columns: repeat(3, 1fr);\n        gap: var(--lp-space-3);\n        margin-bottom: 0;\n    }\n    .lp360-gauge-column {\n        background: #fff;\n        border-radius: var(--lp-radius-md);\n        padding: var(--lp-space-2) var(--lp-space-3);\n        border: 1px solid var(--lp-border-subtle);\n        box-shadow: var(--lp-shadow-sm);\n        display: flex;\n        flex-direction: column;\n        align-items: center;\n        text-align: center;\n        transition: transform 0.2s ease, box-shadow 0.2s ease;\n    }\n    .lp360-gauge-column:hover {\n        transform: translateY(-2px);\n        box-shadow: var(--lp-shadow-md);\n    }\n    .lp360-gauge-column--orange {\n        border-top: 3px solid var(--lp-brand-light);\n    }\n    .lp360-gauge-column--green {\n        border-top: 3px solid var(--lp-green);\n    }\n    .lp360-gauge-column--amber {\n        border-top: 3px solid var(--lp-amber);\n    }\n\n    .lp360-gauge-column-header {\n        display: flex;\n        flex-direction: column;\n        align-items: center;\n        gap: var(--lp-space-1);\n        margin-bottom: var(--lp-space-2);\n        width: 100%;\n    }\n    .lp360-gauge-column-icon {\n        width: 28px;\n        height: 28px;\n        border-radius: 50%;\n        display: flex;\n        align-items: center;\n        justify-content: center;\n        flex-shrink: 0;\n        margin-bottom: 2px;\n    }\n    .lp360-gauge-column-icon.orange {\n        background: #fef0e8;\n    }\n    .lp360-gauge-column-icon.green {\n        background: #e8f5ed;\n    }\n    .lp360-gauge-column-icon.amber {\n        background: #fef3e8;\n    }\n    .lp360-gauge-column-icon svg {\n        width: 14px;\n        height: 14px;\n    }\n    .lp360-gauge-column-title {\n        font-size: 11px;\n        font-weight: 800;\n        text-align: center;\n        line-height: 1.2;\n    }\n    .lp360-gauge-column--orange .lp360-gauge-column-title {\n        color: var(--lp-brand-light);\n    }\n    .lp360-gauge-column--green .lp360-gauge-column-title {\n        color: var(--lp-green);\n    }\n    .lp360-gauge-column--amber .lp360-gauge-column-title {\n        color: var(--lp-amber);\n    }\n    .lp360-gauge-column-sub {\n        font-size: 9px;\n        color: var(--lp-text-gray);\n        text-align: center;\n        line-height: 1.2;\n    }\n\n    .lp360-gauge-column-chart {\n        width: 100%;\n        max-width: 121px;\n        margin: 2px auto var(--lp-space-1);\n        overflow: visible;\n        display: flex;\n        justify-content: center;\n    }\n    .lp360-gauge-canvas {\n        display: block;\n        width: 100%;\n        height: auto;\n    }\n    .lp360-gauge-column-value {\n        font-family: 'Sora', 'Inter', sans-serif;\n        font-size: 22px;\n        font-weight: 800;\n        padding: 2px 10px;\n        border-radius: 8px;\n        background: #f8f9fc;\n        line-height: 1.3;\n        margin-top: 2px;\n    }\n    .lp360-gauge-column--orange .lp360-gauge-column-value {\n        color: var(--lp-brand-light);\n        background: rgba(232, 93, 58, 0.08);\n    }\n    .lp360-gauge-column--green .lp360-gauge-column-value {\n        color: var(--lp-green);\n        background: rgba(34, 197, 94, 0.08);\n    }\n    .lp360-gauge-column--amber .lp360-gauge-column-value {\n        color: var(--lp-amber);\n        background: rgba(245, 158, 11, 0.08);\n    }\n    .lp360-gauge-column-value span {\n        font-size: 11px;\n        font-weight: 700;\n    }\n\n    \/* inferences *\/\n    .lp360-time-tracker-inferences {\n        display: flex;\n        flex-direction: column;\n        gap: var(--lp-space-4);\n        width: 100%;\n        margin-top: 0;\n    }\n    .lp360-inference-block {\n        display: flex;\n        align-items: flex-start;\n        gap: var(--lp-space-4);\n        background: #f9fafb;\n        border-radius: var(--lp-radius-md);\n        padding: var(--lp-space-4) var(--lp-space-5);\n        border: 1px solid var(--lp-border-subtle);\n        transition: transform 0.15s ease;\n        width: 100%;\n        overflow: visible;\n    }\n    .lp360-inference-block:hover {\n        transform: translateY(-1px);\n    }\n    .lp360-inference-icon {\n        width: 34px;\n        height: 34px;\n        border-radius: 50%;\n        display: flex;\n        align-items: center;\n        justify-content: center;\n        flex-shrink: 0;\n    }\n    .lp360-inference-icon.orange {\n        background: var(--lp-brand-light);\n    }\n    .lp360-inference-icon.green {\n        background: var(--lp-green);\n    }\n    .lp360-inference-icon svg {\n        width: 16px;\n        height: 16px;\n        stroke: #fff;\n        stroke-width: 2.5;\n        fill: none;\n    }\n    .lp360-inference-title {\n        font-size: 12px;\n        font-weight: 800;\n        letter-spacing: 0.8px;\n        text-transform: uppercase;\n        margin-bottom: 4px;\n        color: var(--lp-text-gray);\n    }\n    .lp360-inference-block:first-child .lp360-inference-title {\n        color: var(--lp-brand-light);\n    }\n    .lp360-inference-block:last-child .lp360-inference-title {\n        color: var(--lp-green);\n    }\n    .lp360-inference-text {\n        font-size: 14px;\n        line-height: 1.6;\n        color: #374151;\n        overflow-wrap: break-word;\n        word-break: break-word;\n        white-space: normal;\n    }\n\n    \/*\n======================================================================\n       ANSWER KEY SECTION (Fix 11)\n       ====================================================================== *\/\n    .lp360-answer-key-card {\n        background: var(--lp-card-bg);\n        border-radius: var(--lp-radius-lg);\n        padding: var(--lp-space-4);\n        box-shadow: var(--lp-shadow-sm);\n        border: 1px solid var(--lp-border-subtle);\n        margin: 0;\n        text-align: center;\n    }\n    .lp360-answer-key-card .lp360-answer-key-placeholder {\n        font-size: 16px;\n        color: var(--lp-text-gray);\n        padding: var(--lp-space-8) var(--lp-space-4);\n    }\n\n    \/* ======================================================================\n       RESPONSIVE\n       ====================================================================== *\/\n    @media (max-width: 1024px) {\n        .lp360-hero-card {\n            grid-template-columns: 1fr;\n            gap: var(--lp-space-4);\n            text-align: center;\n            padding: var(--lp-space-4);\n        }\n        .lp360-hero-divider {\n            width: 60%;\n            height: 1px;\n        }\n        .lp360-gauge-wrap {\n            width: 160px;\n            height: 160px;\n            margin-bottom: var(--lp-space-4);\n        }\n        .lp360-gauge-minibar {\n            position: absolute;\n            bottom: -16px;\n            left: 50%;\n            transform: translateX(-50%);\n            width: 60%;\n            max-width: 110px;\n            margin: 0;\n        }\n        .lp360-gauge-value {\n            font-size: 38px;\n        }\n        .lp360-gauge-value small {\n            font-size: 18px;\n        }\n        .lp360-hero-metric-value {\n            font-size: 28px;\n            padding: 6px 16px;\n            min-width: 100px;\n        }\n        .lp360-time-cards {\n            flex-direction: column;\n            border-radius: var(--lp-radius-md);\n            border-top: none;\n            border-bottom: none;\n        }\n        .lp360-time-card {\n            border-right: none;\n            border-bottom: 1px solid var(--lp-border-subtle);\n            padding: var(--lp-space-3);\n        }\n        .lp360-time-card:last-child {\n            border-bottom: none;\n        }\n        .lp360-breakdown-unified {\n            grid-template-columns: 1fr 1fr;\n        }\n        .lp360-breakdown-col:nth-child(3) {\n            grid-column: span 2;\n            border-left: none;\n            border-top: 1px solid var(--lp-border-subtle);\n        }\n        .lp360-dm-summary {\n            grid-template-columns: repeat(3, 1fr);\n        }\n        .lp360-time-tracker-gauges {\n            grid-template-columns: 1fr 1fr;\n        }\n        .lp360-time-tracker-inferences {\n            grid-template-columns: 1fr;\n        }\n        .lp360-tracker-chart-wrap {\n            overflow-x: auto;\n            -webkit-overflow-scrolling: touch;\n        }\n        .lp360-tracker-chart-wrap canvas {\n            min-width: 500px;\n            width: auto;\n            height: auto;\n        }\n    }\n\n    @media (max-width: 860px) {\n        .lp360-hero-metric-value {\n            min-width: 0;\n        }\n        \/* Fix 6: mobile stacking using flex column *\/\n        .lp360-breakdown-unified {\n            display: flex;\n            flex-direction: column;\n            width: 100%;\n        }\n        .lp360-breakdown-col {\n            border-left: none !important;\n            border-top: 1px solid var(--lp-border-subtle);\n            padding: var(--lp-space-3) 0;\n            width: 100%;\n        }\n        .lp360-breakdown-col:first-child {\n            border-top: none;\n            padding-top: 0;\n        }\n        .lp360-breakdown-col:last-child {\n            padding-bottom: 0;\n        }\n        .lp360-breakdown-head {\n            justify-content: flex-start;\n        }\n        .lp360-breakdown-list li {\n            justify-content: flex-start;\n        }\n        .lp360-time-tracker-gauges {\n            grid-template-columns: 1fr 1fr;\n            max-width: 400px;\n            margin-left: auto;\n            margin-right: auto;\n        }\n    }\n\n    @media (max-width: 640px) {\n        .lp360-shell {\n            padding: var(--lp-space-3);\n            border-radius: var(--lp-radius-md);\n        }\n        .lp360-section-card {\n            padding: var(--lp-space-3);\n            border-radius: var(--lp-radius-md);\n        }\n        .lp360-hero-card {\n            padding: var(--lp-space-3);\n            border-radius: var(--lp-radius-sm);\n        }\n        .lp360-gauge-wrap {\n            width: 130px;\n            height: 130px;\n            margin-bottom: var(--lp-space-3);\n        }\n        .lp360-gauge-minibar {\n            bottom: -14px;\n            width: 55%;\n            max-width: 90px;\n        }\n        .lp360-gauge-value {\n            font-size: 32px;\n        }\n        .lp360-gauge-value small {\n            font-size: 15px;\n        }\n        .lp360-gauge-label {\n            font-size: 9px;\n            letter-spacing: 1.5px;\n        }\n        .lp360-hero-metric-value {\n            font-size: 22px;\n            padding: 4px 12px;\n            min-width: 80px;\n        }\n        .lp360-hero-metric-label {\n            font-size: 10px;\n        }\n        .lp360-icon-badge {\n            width: 44px;\n            height: 44px;\n        }\n        .lp360-icon-badge svg {\n            width: 20px;\n            height: 20px;\n        }\n        .lp360-time-cards {\n            flex-direction: column;\n        }\n        .lp360-breakdown-unified {\n            display: flex;\n            flex-direction: column;\n        }\n        .lp360-breakdown-col {\n            border-left: none !important;\n            border-top: 1px solid var(--lp-border-subtle);\n            padding: var(--lp-space-3) 0;\n            width: 100%;\n        }\n        .lp360-breakdown-col:first-child {\n            border-top: none;\n            padding-top: 0;\n        }\n        .lp360-dm-summary {\n            grid-template-columns: repeat(3, 1fr);\n            gap: var(--lp-space-2);\n        }\n        .lp360-tabs {\n            gap: 4px;\n        }\n        .lp360-tab {\n            padding: 8px 16px;\n            font-size: 12px;\n        }\n        .lp360-time-card-value {\n            font-size: 22px;\n        }\n        .lp360-tracker-title {\n            font-size: 20px;\n        }\n        .lp360-time-tracker-gauges {\n            grid-template-columns: 1fr;\n            max-width: 280px;\n            margin-left: auto;\n            margin-right: auto;\n        }\n        .lp360-time-tab {\n            font-size: 11px;\n            padding: 8px 4px;\n        }\n        .lp360-gauge-column-header {\n            justify-content: center;\n        }\n        .lp360-gauge-column-title,\n        .lp360-gauge-column-sub {\n            text-align: center;\n        }\n        .lp360-decision-card {\n            padding: var(--lp-space-3);\n        }\n        .lp360-tracker-card,\n        .lp360-accuracy-card,\n        .lp360-time-tracker-card {\n            padding: 0;\n        }\n        .lp360-tracker-card+.lp360-tracker-card,\n        .lp360-accuracy-card+.lp360-tracker-card,\n        .lp360-tracker-card+.lp360-accuracy-card {\n            padding-top: var(--lp-space-4);\n            margin-top: var(--lp-space-3);\n        }\n        .lp360-tracker-chart-wrap canvas {\n            min-width: 400px;\n        }\n        .lp360-gauge-column-chart {\n            max-width: 110px;\n        }\n        .lp360-gauge-column-value {\n            font-size: 20px;\n        }\n        .lp360-gauge-column {\n            padding: var(--lp-space-2);\n        }\n        .lp360-info-popover__content {\n            max-width: 340px;\n            padding: var(--lp-space-4) var(--lp-space-3) var(--lp-space-3);\n        }\n        .lp360-info-popover__title {\n            font-size: 16px;\n        }\n        .lp360-info-popover__desc {\n            font-size: 14px;\n        }\n        .lp360-answer-key-card .lp360-answer-key-placeholder {\n            padding: var(--lp-space-6) var(--lp-space-4);\n            font-size: 15px;\n        }\n    }\n\n    @media (max-width: 480px) {\n        .lp360-shell {\n            padding: var(--lp-space-2);\n        }\n        .lp360-section-card {\n            padding: var(--lp-space-2);\n        }\n        .lp360-hero-card {\n            padding: var(--lp-space-3) var(--lp-space-2);\n        }\n        .lp360-gauge-wrap {\n            width: 110px;\n            height: 110px;\n        }\n        .lp360-gauge-minibar {\n            bottom: -12px;\n            width: 50%;\n            max-width: 70px;\n        }\n        .lp360-gauge-value {\n            font-size: 26px;\n        }\n        .lp360-gauge-value small {\n            font-size: 13px;\n        }\n        .lp360-gauge-label {\n            font-size: 8px;\n            letter-spacing: 1px;\n        }\n        .lp360-hero-metric-value {\n            font-size: 18px;\n            padding: 4px 10px;\n            min-width: 60px;\n        }\n        .lp360-icon-badge {\n            width: 36px;\n            height: 36px;\n        }\n        .lp360-icon-badge svg {\n            width: 16px;\n            height: 16px;\n        }\n        .lp360-time-card-value {\n            font-size: 20px;\n            padding: 4px 10px;\n        }\n        .lp360-breakdown-total {\n            font-size: 20px;\n        }\n        .lp360-tab {\n            padding: 6px 12px;\n            font-size: 11px;\n        }\n        .lp360-section-title h2 {\n            font-size: 18px;\n        }\n        .lp360-tracker-title {\n            font-size: 18px;\n        }\n        .lp360-dm-summary {\n            grid-template-columns: repeat(3, 1fr);\n            gap: var(--lp-space-1);\n        }\n        .lp360-dm-summary-card {\n            padding: var(--lp-space-1) var(--lp-space-2);\n        }\n        .lp360-dm-summary-value {\n            font-size: 15px;\n        }\n        .lp360-dm-summary-label {\n            font-size: 8px;\n        }\n        .lp360-dm-table {\n            min-width: 500px;\n        }\n        .lp360-time-tracker-gauges {\n            max-width: 220px;\n        }\n        .lp360-gauge-column-chart {\n            max-width: 88px;\n        }\n        .lp360-gauge-column-value {\n            font-size: 18px;\n        }\n        .lp360-info-popover__content {\n            max-width: 300px;\n            padding: var(--lp-space-3);\n        }\n        .lp360-info-popover__title {\n            font-size: 15px;\n        }\n        .lp360-info-popover__desc {\n            font-size: 13px;\n        }\n        .lp360-answer-key-card .lp360-answer-key-placeholder {\n            padding: var(--lp-space-5) var(--lp-space-3);\n            font-size: 14px;\n        }\n    }\n    \/* ======================================================================\n       SCORE TRACKER INFERENCE OVERLAY\n       ====================================================================== *\/\n    .lp360-tracker-chart-wrap {\n        position: relative;\n    }\n    .lp360-tracker-chart-wrap.has-inference canvas {\n        filter: blur(6px);\n        pointer-events: none;\n        user-select: none;\n        transition: filter 0.4s ease;\n    }\n    .lp360-tracker-overlay {\n        display: none;\n        position: absolute;\n        inset: 0;\n        align-items: center;\n        justify-content: center;\n        z-index: 10;\n        padding: var(--lp-space-4);\n        pointer-events: none;\n    }\n    .lp360-tracker-chart-wrap.has-inference .lp360-tracker-overlay {\n        display: flex;\n    }\n    .lp360-tracker-overlay__card {\n        background: rgba(255, 255, 255, 0.94);\n        backdrop-filter: blur(10px);\n        -webkit-backdrop-filter: blur(10px);\n        border-radius: var(--lp-radius-md);\n        padding: var(--lp-space-4);\n        max-width: 280px;\n        width: auto;\n        box-shadow: 0 12px 32px rgba(0, 0, 0, 0.18), 0 0 0 1px rgba(232, 93, 58, 0.2) inset;\n        text-align: center;\n        animation: lp360FadeIn 0.5s ease;\n    }\n    .lp360-tracker-overlay__card h3 {\n        font-family: 'Sora', 'Inter', sans-serif;\n        font-size: 14px;\n        font-weight: 800;\n        margin: 0 0 6px;\n        color: var(--lp-text-dark);\n        letter-spacing: -0.2px;\n    }\n    .lp360-tracker-overlay__card p {\n        font-size: 12px;\n        line-height: 1.5;\n        color: #374151;\n        margin: 0;\n    }\n    .lp360-tracker-overlay__icon {\n        width: 36px;\n        height: 36px;\n        border-radius: 50%;\n        background: linear-gradient(135deg, var(--lp-brand-light), var(--lp-gold));\n        display: flex;\n        align-items: center;\n        justify-content: center;\n        margin: 0 auto 10px;\n        color: #fff;\n        box-shadow: 0 6px 16px rgba(232, 93, 58, 0.3);\n    }\n    .lp360-tracker-overlay__icon svg {\n        width: 16px;\n        height: 16px;\n    }\n    \/* Generic section description box *\/\n    .lp360-section-description {\n        margin: 12px 0 16px 0;\n        padding: 12px 18px;\n        background: #fcf8f3;\n        border-radius: var(--lp-radius-sm);\n        border-left: 4px solid var(--lp-brand-light);\n        font-size: 11.5px;\n        line-height: 1.6;\n        color: #3d3f4b;\n        font-weight: 500;\n        box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.02);\n    }\n    .lp360-section-description p {\n        margin: 0;\n    }\n    \/* \n\/* ======================================================================\n   NO ATTEMPTS OVERLAY \u2014 full\u2011screen blur + premium red theme\n   ====================================================================== *\/\n.lp360-no-attempts-overlay {\n    position: fixed;\n    inset: 0;\n    z-index: 99999;\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    background: rgba(0, 0, 0, 0.55);\n    backdrop-filter: blur(12px) saturate(1.2);\n    -webkit-backdrop-filter: blur(12px) saturate(1.2);\n    padding: 20px;\n    animation: lp360FadeIn 0.5s ease;\n}\n\n.lp360-no-attempts-card {\n    background: #1a0a0a;\n    border-radius: 32px;\n    max-width: 560px;\n    width: 100%;\n    padding: 40px 32px 32px;\n    box-shadow: 0 40px 80px rgba(0, 0, 0, 0.35), 0 0 0 1px rgba(239, 68, 68, 0.25) inset, 0 0 0 2px rgba(255, 255, 255, 0.08) inset;\n    text-align: center;\n    animation: lp360PopoverSlideUp 0.6s cubic-bezier(0.34, 1.56, 0.64, 1);\n    position: relative;\n    overflow: hidden;\n}\n.lp360-no-attempts-card--red {\n    border-left: 5px solid #EF4444;\n}\n.lp360-no-attempts-card::before {\n    content: '';\n    position: absolute;\n    top: 0;\n    left: 0;\n    right: 0;\n    height: 5px;\n    background: linear-gradient(90deg, #EF4444, #F97316, #EF4444);\n    background-size: 200% 100%;\n    animation: lp360GradientMove 3s ease infinite;\n}\n.lp360-no-attempts-icon {\n    width: 80px;\n    height: 80px;\n    border-radius: 50%;\n    background: linear-gradient(135deg, #EF4444, #DC2626);\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    margin: 0 auto 20px;\n    box-shadow: 0 10px 40px rgba(239, 68, 68, 0.45);\n    animation: lp360WarningPulse 2.2s ease-in-out infinite;\n}\n@keyframes lp360WarningPulse {\n    0%, 100% { box-shadow: 0 10px 40px rgba(239, 68, 68, 0.45); }\n    50% { box-shadow: 0 10px 60px rgba(239, 68, 68, 0.75); }\n}\n.lp360-no-attempts-icon svg {\n    width: 44px;\n    height: 44px;\n    stroke: #fff;\n    stroke-width: 2;\n    fill: none;\n}\n.lp360-no-attempts-title {\n    font-family: 'Sora', 'Inter', sans-serif;\n    font-size: 26px;\n    font-weight: 800;\n    letter-spacing: -0.3px;\n    margin: 0 0 12px;\n    color: #ffffff;\n}\n.lp360-no-attempts-title--red {\n    color: #FCA5A5;\n}\n.lp360-no-attempts-message {\n    font-size: 17px;\n    line-height: 1.7;\n    color: #D1D5DB;\n    margin: 0 0 24px;\n}\n.lp360-no-attempts-badge {\n    display: inline-block;\n    padding: 14px 36px;\n    border-radius: 999px;\n    background: linear-gradient(90deg, #EF4444, #DC2626);\n    color: #fff;\n    font-weight: 700;\n    font-size: 15px;\n    letter-spacing: 0.5px;\n    text-transform: uppercase;\n    box-shadow: 0 8px 28px rgba(239, 68, 68, 0.35);\n    text-decoration: none;\n    transition: all 0.3s ease;\n    cursor: pointer;\n    border: none;\n}\n.lp360-no-attempts-badge:hover {\n    transform: translateY(-3px) scale(1.04);\n    box-shadow: 0 12px 40px rgba(239, 68, 68, 0.5);\n    background: linear-gradient(90deg, #F87171, #EF4444);\n}\n.lp360-no-attempts-badge:active {\n    transform: scale(0.97);\n}\n\/* Mobile adjustments *\/\n@media (max-width: 640px) {\n    .lp360-no-attempts-card {\n        padding: 28px 20px 24px;\n        border-radius: 24px;\n        max-width: 400px;\n    }\n    .lp360-no-attempts-title {\n        font-size: 22px;\n    }\n    .lp360-no-attempts-message {\n        font-size: 15px;\n    }\n    .lp360-no-attempts-icon {\n        width: 64px;\n        height: 64px;\n    }\n    .lp360-no-attempts-icon svg {\n        width: 34px;\n        height: 34px;\n    }\n    .lp360-no-attempts-badge {\n        padding: 12px 28px;\n        font-size: 13px;\n    }\n}\n@media (max-width: 480px) {\n    .lp360-no-attempts-card {\n        padding: 24px 16px 20px;\n        max-width: 340px;\n    }\n    .lp360-no-attempts-title {\n        font-size: 20px;\n    }\n    .lp360-no-attempts-message {\n        font-size: 14px;\n    }\n    .lp360-no-attempts-badge {\n        padding: 10px 22px;\n        font-size: 12px;\n    }\n}\n\n\/* ======================================================================\n   MOBILE FILL FIX \u2014 time tracker cards should use full mobile width\n   ====================================================================== *\/\n@media (max-width: 640px) {\n    .lp360-time-tracker-right {\n        width: 100%;\n        padding: 12px;\n        gap: 12px;\n    }\n    .lp360-time-tracker-tabs {\n        width: 100%;\n    }\n    .lp360-time-tab {\n        flex: 1 1 25%;\n        min-width: 0;\n        padding: 10px 4px;\n        line-height: 1.1;\n    }\n    .lp360-time-tracker-gauges {\n        grid-template-columns: 1fr !important;\n        width: 100%;\n        max-width: none !important;\n        margin-left: 0 !important;\n        margin-right: 0 !important;\n        gap: 14px;\n    }\n    .lp360-gauge-column {\n        width: 100%;\n        max-width: none;\n        padding: 14px 12px;\n        border-radius: 18px;\n    }\n    .lp360-gauge-column-chart {\n        width: 100%;\n        max-width: 170px !important;\n        margin: 6px auto 8px;\n    }\n}\n\n@media (max-width: 480px) {\n    .lp360-time-tracker-right {\n        padding: 10px;\n    }\n    .lp360-time-tracker-gauges {\n        width: 100%;\n        max-width: none !important;\n        gap: 12px;\n    }\n    .lp360-gauge-column {\n        width: 100%;\n        padding: 14px 10px;\n    }\n    .lp360-gauge-column-chart {\n        max-width: 160px !important;\n    }\n    .lp360-gauge-column-title {\n        font-size: 12px;\n    }\n    .lp360-gauge-column-sub {\n        font-size: 10px;\n    }\n}\n\n<\/style>\n\n<div id=\"lp360-root\">\n    <div class=\"lp360-shell\">\n\n        <!-- HEADER -->\n        <header class=\"lp360-page-header\">\n            <h1 class=\"lp360-page-title\">CUET  <span>Launchpad 360<\/span><\/h1>\n        <\/header>\n\n        <!-- TABS -->\n        <nav class=\"lp360-tabs\" role=\"tablist\" aria-label=\"Launchpad 360 sections\">\n            <button class=\"lp360-tab active\" data-tab=\"basicinfo\" role=\"tab\" aria-selected=\"true\">\n                <svg viewBox=\"0 0 24 24\" class=\"lp360-tab-icon\"><path d=\"M12 2a10 10 0 100 20 10 10 0 000-20zm0 4v6l4 2\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><\/path><\/svg>\n                Basic Info\n            <\/button>\n            <button class=\"lp360-tab\" data-tab=\"tracker\" role=\"tab\" aria-selected=\"false\">\n                <svg viewBox=\"0 0 24 24\" class=\"lp360-tab-icon\"><path d=\"M3 17l5-5 4 4 7-9\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><\/path><\/svg>\n                Tracker\n            <\/button>\n            <button class=\"lp360-tab\" data-tab=\"answerkey\" role=\"tab\" aria-selected=\"false\">\n                <svg viewBox=\"0 0 24 24\" class=\"lp360-tab-icon\"><path d=\"M4 6h16M4 12h10M4 18h6\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\"><\/path><\/svg>\n                Answer Key\n            <\/button>\n        <\/nav>\n\n        <!-- ================================================================\n               PANEL: BASIC INFO\n               ================================================================ -->\n        <section class=\"lp360-tab-panel active\" id=\"lp360-panel-basicinfo\">\n\n            <!-- ========== BASIC INFO CARD ========== -->\n            <div class=\"lp360-section-card\">\n                <div class=\"lp360-section-title\">\n                    <h2>Basic Info<\/h2>\n                    <span class=\"lp360-underline\"><\/span>\n                <\/div>\n\n                <!-- Hero -->\n                <div class=\"lp360-hero-card\">\n                    <div class=\"lp360-hero-gauge\">\n                        <div class=\"lp360-gauge-wrap\">\n                            <svg viewBox=\"0 0 260 260\" class=\"lp360-gauge-svg\">\n                                <defs>\n                                    <linearGradient id=\"lp360GaugeGrad\" x1=\"0%\" y1=\"0%\" x2=\"100%\" y2=\"100%\">\n                                        <stop offset=\"0%\" stop-color=\"#FFC542\"><\/stop>\n                                        <stop offset=\"100%\" stop-color=\"#FF7A3D\"><\/stop>\n                                    <\/linearGradient>\n                                <\/defs>\n                                <circle cx=\"130\" cy=\"130\" r=\"110\" class=\"lp360-gauge-track\"><\/circle>\n                                <circle cx=\"130\" cy=\"130\" r=\"110\" class=\"lp360-gauge-progress\" id=\"lp360-gauge-progress\" stroke=\"url(#lp360GaugeGrad)\"><\/circle>\n                            <\/svg>\n                            <div class=\"lp360-gauge-center\">\n                                <span class=\"lp360-gauge-label\">YOUR SCORE<\/span>\n                                <div class=\"lp360-gauge-value\">\n                                    <span id=\"lp360-score-obtained\">0<\/span><small>\/<span id=\"lp360-score-total\">100<\/span><\/small>\n                                <\/div>\n                                <div class=\"lp360-gauge-minibar\">\n                                    <div class=\"lp360-gauge-minibar-fill\" id=\"lp360-gauge-minibar-fill\"><\/div>\n                                <\/div>\n                            <\/div>\n                        <\/div>\n                    <\/div>\n                    <div class=\"lp360-hero-divider\"><\/div>\n                    <div class=\"lp360-hero-metric\">\n                        <div class=\"lp360-icon-badge lp360-icon-badge--cyan\">\n                            <svg viewBox=\"0 0 28 28\"><path d=\"M14 10v4l3 2M14 2a12 12 0 100 24 12 12 0 000-24z\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><\/path><\/svg>\n                        <\/div>\n                        <span class=\"lp360-hero-metric-label\">TIME USED<\/span>\n                        <div class=\"lp360-hero-metric-value\" id=\"lp360-time-used\">0<\/div>\n                        <div class=\"lp360-hero-metric-footer\"> <\/div>\n                    <\/div>\n                    <div class=\"lp360-hero-divider\"><\/div>\n                    <div class=\"lp360-hero-metric\">\n                        <div class=\"lp360-icon-badge lp360-icon-badge--purple\">\n                            <svg viewBox=\"0 0 28 28\"><path d=\"M14 2l3 7.5L24 10l-5.5 5 2 7.5-6.5-4-6.5 4 2-7.5L4 10l7.5-.5z\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><\/path><\/svg>\n                        <\/div>\n                        <span class=\"lp360-hero-metric-label\">TOTAL ATTEMPT<\/span>\n                        <div class=\"lp360-hero-metric-value\" id=\"lp360-total-attempt\">0<\/div>\n                        <div class=\"lp360-hero-metric-footer\">Questions attempted<\/div>\n                    <\/div>\n                <\/div>\n\n                <!-- Time cards -->\n                <div class=\"lp360-time-cards\">\n                    <div class=\"lp360-time-card lp360-time-card--red\">\n                        <div class=\"lp360-icon-badge lp360-icon-badge--red-soft\">\n                            <svg viewBox=\"0 0 24 24\"><path d=\"M12 8v4l3 2M12 2a10 10 0 100 20 10 10 0 000-20z\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><\/path><\/svg>\n                        <\/div>\n                        <div class=\"lp360-time-card-label\">MAX TIME PER QUESTION<\/div>\n                        <div class=\"lp360-time-card-value\"><span id=\"lp360-max-time\"><\/span><\/div>\n                        <span class=\"lp360-mini-rule\"><\/span>\n                        <div class=\"lp360-time-card-badge\" id=\"lp360-max-tag\">Q0<\/div>\n                    <\/div>\n                    <div class=\"lp360-time-card lp360-time-card--orange\">\n                        <div class=\"lp360-icon-badge lp360-icon-badge--orange-soft\">\n                            <svg viewBox=\"0 0 24 24\"><path d=\"M12 8v4l3 2M12 2a10 10 0 100 20 10 10 0 000-20z\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><\/path><\/svg>\n                        <\/div>\n                        <div class=\"lp360-time-card-label\">MIN TIME PER QUESTION<\/div>\n                        <div class=\"lp360-time-card-value\"><span id=\"lp360-min-time\"><\/span><\/div>\n                        <span class=\"lp360-mini-rule\"><\/span>\n                        <div class=\"lp360-time-card-badge\" id=\"lp360-min-tag\">Q0<\/div>\n                    <\/div>\n                    <div class=\"lp360-time-card lp360-time-card--blue\">\n                        <div class=\"lp360-icon-badge lp360-icon-badge--blue-soft\">\n                            <svg viewBox=\"0 0 24 24\"><path d=\"M12 8v4l3 2M12 2a10 10 0 100 20 10 10 0 000-20z\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><\/path><\/svg>\n                        <\/div>\n                        <div class=\"lp360-time-card-label\">AVERAGE TIME PER QUESTION<\/div>\n                        <div class=\"lp360-time-card-value\"><span id=\"lp360-avg-time\"><\/span><\/div>\n                        <span class=\"lp360-mini-rule\"><\/span>\n                    <\/div>\n                <\/div>\n\n                <!-- Breakdown -->\n                <div class=\"lp360-breakdown-unified\">\n                    <!-- Correct -->\n                    <div class=\"lp360-breakdown-col lp360-breakdown-col--green\">\n                        <div class=\"lp360-breakdown-head\">\n                            <div class=\"lp360-round-icon lp360-round-icon--green\">\n                                <svg viewBox=\"0 0 24 24\"><path d=\"M20 6L9 17l-5-5\" fill=\"none\" stroke=\"#fff\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><\/path><\/svg>\n                            <\/div>\n                            <div>\n                                <div class=\"lp360-breakdown-label\">CORRECT<\/div>\n                                <div class=\"lp360-breakdown-total\" id=\"lp360-correct-total\">0<\/div>\n                            <\/div>\n                        <\/div>\n                        <ul class=\"lp360-breakdown-list\">\n                            <li><span class=\"lp360-mini-icon lp360-mini-icon--green\"><svg viewBox=\"0 0 24 24\"><path d=\"M20 21v-2a4 4 0 00-4-4H8a4 4 0 00-4 4v2M12 11a4 4 0 100-8 4 4 0 000 8z\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><\/path><\/svg><\/span>Single Attempt Correct <b id=\"lp360-correct-single\">0<\/b><\/li>\n                            <li><span class=\"lp360-mini-icon lp360-mini-icon--green\"><svg viewBox=\"0 0 24 24\"><path d=\"M17 21v-2a4 4 0 00-4-4H5a4 4 0 00-4 4v2M9 11a4 4 0 100-8 4 4 0 000 8zM23 21v-2a4 4 0 00-3-3.87M16 3.13a4 4 0 010 7.75\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><\/path><\/svg><\/span>Multiple Attempt Correct <b id=\"lp360-correct-multiple\">0<\/b><\/li>\n                            <li><span class=\"lp360-mini-icon lp360-mini-icon--green\"><svg viewBox=\"0 0 24 24\"><path d=\"M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><\/path><circle cx=\"12\" cy=\"12\" r=\"3\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><\/circle><\/svg><\/span>Reviewed Attempt Correct <b id=\"lp360-correct-reviewed\">0<\/b><\/li>\n                            <li><span class=\"lp360-mini-icon lp360-mini-icon--green\"><svg viewBox=\"0 0 24 24\"><path d=\"M5 4l14 8-14 8V4z\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><\/path><\/svg><\/span>Skipped Attempt Correct <b id=\"lp360-correct-skipped\">0<\/b><\/li>\n                        <\/ul>\n                    <\/div>\n                    <!-- Incorrect -->\n                    <div class=\"lp360-breakdown-col lp360-breakdown-col--red\">\n                        <div class=\"lp360-breakdown-head\">\n                            <div class=\"lp360-round-icon lp360-round-icon--red\">\n                                <svg viewBox=\"0 0 24 24\"><path d=\"M18 6L6 18M6 6l12 12\" fill=\"none\" stroke=\"#fff\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><\/path><\/svg>\n                            <\/div>\n                            <div>\n                                <div class=\"lp360-breakdown-label\">INCORRECT<\/div>\n                                <div class=\"lp360-breakdown-total\" id=\"lp360-incorrect-total\">0<\/div>\n                            <\/div>\n                        <\/div>\n                        <ul class=\"lp360-breakdown-list\">\n                            <li><span class=\"lp360-mini-icon lp360-mini-icon--red\"><svg viewBox=\"0 0 24 24\"><path d=\"M20 21v-2a4 4 0 00-4-4H8a4 4 0 00-4 4v2M12 11a4 4 0 100-8 4 4 0 000 8z\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><\/path><\/svg><\/span>Single Attempt Incorrect <b id=\"lp360-incorrect-single\">0<\/b><\/li>\n                            <li><span class=\"lp360-mini-icon lp360-mini-icon--red\"><svg viewBox=\"0 0 24 24\"><path d=\"M17 21v-2a4 4 0 00-4-4H5a4 4 0 00-4 4v2M9 11a4 4 0 100-8 4 4 0 000 8zM23 21v-2a4 4 0 00-3-3.87M16 3.13a4 4 0 010 7.75\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><\/path><\/svg><\/span>Multiple Attempt Incorrect <b id=\"lp360-incorrect-multiple\">0<\/b><\/li>\n                            <li><span class=\"lp360-mini-icon lp360-mini-icon--red\"><svg viewBox=\"0 0 24 24\"><path d=\"M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><\/path><circle cx=\"12\" cy=\"12\" r=\"3\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><\/circle><\/svg><\/span>Reviewed Attempt Incorrect <b id=\"lp360-incorrect-reviewed\">0<\/b><\/li>\n                            <li><span class=\"lp360-mini-icon lp360-mini-icon--red\"><svg viewBox=\"0 0 24 24\"><path d=\"M5 4l14 8-14 8V4z\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><\/path><\/svg><\/span>Skipped Attempt Incorrect <b id=\"lp360-incorrect-skipped\">0<\/b><\/li>\n                        <\/ul>\n                    <\/div>\n                    <!-- Unattempted -->\n                    <div class=\"lp360-breakdown-col lp360-breakdown-col--orange\">\n                        <div class=\"lp360-breakdown-head\">\n                            <div class=\"lp360-round-icon lp360-round-icon--orange\">\n                                <svg viewBox=\"0 0 24 24\"><path d=\"M12 17h.01M12 8v4M12 2a10 10 0 100 20 10 10 0 000-20z\" fill=\"none\" stroke=\"#fff\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><\/path><\/svg>\n                            <\/div>\n                            <div>\n                                <div class=\"lp360-breakdown-label\">UNATTEMPTED<\/div>\n                                <div class=\"lp360-breakdown-total\" id=\"lp360-unattempted-total\">0<\/div>\n                            <\/div>\n                        <\/div>\n                        <ul class=\"lp360-breakdown-list\">\n                            <li><span class=\"lp360-mini-icon lp360-mini-icon--orange\"><svg viewBox=\"0 0 24 24\"><path d=\"M5 4l14 8-14 8V4z\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><\/path><\/svg><\/span>Skipped <b id=\"lp360-unattempted-skipped\">0<\/b><\/li>\n                            <li><span class=\"lp360-mini-icon lp360-mini-icon--orange\"><svg viewBox=\"0 0 24 24\"><path d=\"M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><\/path><circle cx=\"12\" cy=\"12\" r=\"3\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><\/circle><\/svg><\/span>Reviewed Unattempted <b id=\"lp360-unattempted-reviewed\">0<\/b><\/li>\n                            <li><span class=\"lp360-mini-icon lp360-mini-icon--orange\"><svg viewBox=\"0 0 24 24\"><rect x=\"4\" y=\"3\" width=\"16\" height=\"18\" rx=\"2\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><\/rect><path d=\"M8 8h8M8 12h8M8 16h5\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\"><\/path><\/svg><\/span>Not Viewed <b id=\"lp360-unattempted-notviewed\">0<\/b><\/li>\n                        <\/ul>\n                    <\/div>\n                <\/div>\n            <\/div>\n            <!-- \/Basic Info card -->\n\n            <div class=\"lp360-section-divider--strong\"><\/div>\n\n            <!-- ========== DECISION MARKER CARD ========== -->\n            <div class=\"lp360-section-card\">\n                <div class=\"lp360-section-title\">\n                    <h2>Decision <span>Marker<\/span><\/h2>\n                    <span class=\"lp360-underline\"><\/span>\n                <\/div>\n                <div class=\"lp360-section-description\">\n                    <p> The Decision Marker tracks correct and incorrect question attempts during each ten minute interval. It reveals your pacing and question selection habits, helping you build a smarter exam strategy by showing exactly when you make mistakes.<\/p>\n                <\/div>\n\n                <div class=\"lp360-dm-table-scroll\" id=\"lp360-dm-table-scroll\">\n                    <table class=\"lp360-dm-table\" id=\"lp360-dm-table\">\n                        <thead>\n                            <tr id=\"lp360-dm-thead-row\">\n                                <th class=\"lp360-dm-row-head-col\">Categories count\/ Time-intervals in minutes)<\/th>\n                            <\/tr>\n                        <\/thead>\n                        <tbody id=\"lp360-dm-tbody\"><\/tbody>\n                    <\/table>\n                <\/div>\n\n                <div class=\"lp360-dm-summary\" id=\"lp360-dm-summary\"><\/div>\n                <p class=\"lp360-dm-inference\" id=\"lp360-dm-inference\" style=\"display:none;\"><\/p>\n            <\/div>\n\n        <\/section>\n\n        <!-- ================================================================\n               PANEL: TRACKER\n               ================================================================ -->\n        <section class=\"lp360-tab-panel\" id=\"lp360-panel-tracker\">\n\n            <!-- ========== TRACKER CARD ========== -->\n            <div class=\"lp360-section-card\">\n                <div class=\"lp360-section-title\">\n                    <h2>Tracker<\/h2>\n                    <span class=\"lp360-underline\"><\/span>\n                <\/div>\n\n                <!-- Score Tracker -->\n                <div class=\"lp360-tracker-card\">\n                    <div class=\"lp360-tracker-header\">\n                        <h3 class=\"lp360-tracker-title\">Score <span>Tracker<\/span><\/h3>\n                    <\/div>\n                    <div class=\"lp360-section-description\">\n                        <p> The Score Tracker is a simple line graph that shows how your total marks increase or decrease as you answer more questions during the test. We track this to monitor your progress and see if your current attempting strategy is helping you gain marks steadily or causing you to lose points due to wrong answers<\/p>\n                    <\/div>\n                    <div class=\"lp360-tracker-chart-wrap\">\n                        <canvas id=\"lp360-tracker-canvas\"><\/canvas>\n                    <\/div>\n                <\/div>\n\n                <div class=\"lp360-section-divider\"><\/div>\n\n                <!-- Accuracy Tracker -->\n                <div class=\"lp360-accuracy-card\">\n                    <div class=\"lp360-tracker-header\">\n                        <h3 class=\"lp360-tracker-title\">Accuracy <span>Tracker<\/span><\/h3>\n                    <\/div>\n                    <div class=\"lp360-section-description\">\n                        <p> The Accuracy Tracker calculates the percentage of correct answers you provided in each time interval of the test. We monitor this to see if your accuracy drops and mistakes increase as the exam progresses, helping you identify when you need to slow down and stay careful.<\/p>\n                    <\/div>\n                    <div class=\"lp360-tracker-chart-wrap\">\n                        <canvas id=\"lp360-accuracy-canvas\"><\/canvas>\n                    <\/div>\n                <\/div>\n\n                <div class=\"lp360-section-divider\"><\/div>\n\n                <!-- Time Tracker -->\n                <div class=\"lp360-time-tracker-card\">\n                    <div class=\"lp360-tracker-header\">\n                        <h3 class=\"lp360-tracker-title\">Time <span>Tracker<\/span><\/h3>\n                    <\/div>\n                    <div class=\"lp360-time-tracker-layout\">\n                        <div class=\"lp360-time-tracker-left\">\n                            <div class=\"lp360-section-description\">\n                                <p> The Time Tracker analyzes the quality and quantity of your attempts by grouping your solving speed into specific time buckets which are less than 30 sec, 30 sec to 60 sec, 60 sec to 90 sec and more than 90 sec. We measure this to see the direct relationship between the time you spend on a question and the marks you actually secure. This helps you identify bad habits like rushing through easy questions or spending too much time on difficult ones and missing out on simpler marks.<\/p>\n                            <\/div>\n                            <div class=\"lp360-time-tracker-inferences\">\n                                <div class=\"lp360-inference-block\">\n                                    <div class=\"lp360-inference-icon orange\">\n                                        <svg viewBox=\"0 0 24 24\"><path d=\"M3 17l5-5 4 4 7-9\" fill=\"none\" stroke=\"#fff\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><\/path><\/svg>\n                                    <\/div>\n                                    <div>\n                                        <div class=\"lp360-inference-title\">INFERENCE 01<\/div>\n                                        <div class=\"lp360-inference-text\" id=\"lp360-time-inf1\">Highest attempt activity was observed during the 0-30 time interval, while the lowest attempt activity occurred during the 30-60 time interval.<\/div>\n                                    <\/div>\n                                <\/div>\n                                <div class=\"lp360-inference-block\">\n                                    <div class=\"lp360-inference-icon green\">\n                                        <svg viewBox=\"0 0 24 24\"><path d=\"M20 6L9 17l-5-5\" fill=\"none\" stroke=\"#fff\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><\/path><\/svg>\n                                    <\/div>\n                                    <div>\n                                        <div class=\"lp360-inference-title\">INFERENCE 02<\/div>\n                                        <div class=\"lp360-inference-text\" id=\"lp360-time-inf2\">The highest number of correct answers was recorded during the 0-30 secs time interval, while the lowest number of correct answers was recorded during the 30-60 time interval.<\/div>\n                                    <\/div>\n                                <\/div>\n                            <\/div>\n                        <\/div>\n                        <div class=\"lp360-time-tracker-right\">\n                            <div class=\"lp360-time-tracker-tabs\" id=\"lp360-time-tabs\">\n                                <button class=\"lp360-time-tab active\" data-range=\"0-30\">&lt; 30 SEC<\/button>\n                                <button class=\"lp360-time-tab\" data-range=\"30-60\">30 \u2013 60 SEC<\/button>\n                                <button class=\"lp360-time-tab\" data-range=\"60-90\">60 \u2013 90 SEC<\/button>\n                                <button class=\"lp360-time-tab\" data-range=\"90+\">&gt; 90 SEC<\/button>\n                            <\/div>\n                            <div class=\"lp360-time-tracker-gauges\">\n                                <div class=\"lp360-gauge-column lp360-gauge-column--orange\">\n                                    <div class=\"lp360-gauge-column-header\">\n                                        <span class=\"lp360-gauge-column-icon orange\">\n                                            <svg viewBox=\"0 0 24 24\"><path d=\"M3 17l5-5 4 4 7-9\" fill=\"none\" stroke=\"#FF7A3D\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><\/path><\/svg>\n                                        <\/span>\n                                        <div>\n                                            <div class=\"lp360-gauge-column-title\">ATTEMPT RATE<\/div>\n                                            <div class=\"lp360-gauge-column-sub\">Total attempts in this time range<\/div>\n                                        <\/div>\n                                    <\/div>\n                                    <div class=\"lp360-gauge-column-chart\">\n                                        <canvas class=\"lp360-gauge-canvas\" id=\"lp360-gauge-attempt\" data-value=\"0\" data-max=\"50\" data-color=\"#FF7A3D\" data-label=\"ATTEMPT RATE\"><\/canvas>\n                                    <\/div>\n                                    <div class=\"lp360-gauge-column-value\">0<\/div>\n                                <\/div>\n\n                                <div class=\"lp360-gauge-column lp360-gauge-column--green\">\n                                    <div class=\"lp360-gauge-column-header\">\n                                        <span class=\"lp360-gauge-column-icon green\">\n                                            <svg viewBox=\"0 0 24 24\"><circle cx=\"12\" cy=\"12\" r=\"9\" fill=\"none\" stroke=\"#22C55E\" stroke-width=\"2.5\"><\/circle><circle cx=\"12\" cy=\"12\" r=\"4.5\" fill=\"none\" stroke=\"#22C55E\" stroke-width=\"2.5\"><\/circle><circle cx=\"12\" cy=\"12\" r=\"1.2\" fill=\"#22C55E\"><\/circle><\/svg>\n                                        <\/span>\n                                        <div>\n                                            <div class=\"lp360-gauge-column-title\">CORRECT ANSWER RATE<\/div>\n                                            <div class=\"lp360-gauge-column-sub\">Correct count in preferred time<\/div>\n                                        <\/div>\n                                    <\/div>\n                                    <div class=\"lp360-gauge-column-chart\">\n                                        <canvas class=\"lp360-gauge-canvas\" id=\"lp360-gauge-correct\" data-value=\"0\" data-max=\"50\" data-color=\"#22C55E\" data-label=\"CORRECT ANSWER\"><\/canvas>\n                                    <\/div>\n                                    <div class=\"lp360-gauge-column-value\">0<\/div>\n                                <\/div>\n\n                                <div class=\"lp360-gauge-column lp360-gauge-column--amber\">\n                                    <div class=\"lp360-gauge-column-header\">\n                                        <span class=\"lp360-gauge-column-icon amber\">\n                                            <svg viewBox=\"0 0 24 24\"><circle cx=\"12\" cy=\"12\" r=\"10\" fill=\"none\" stroke=\"#F59E0B\" stroke-width=\"2.5\"><\/circle><path d=\"M12 6v6l4 2\" fill=\"none\" stroke=\"#F59E0B\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><\/path><\/svg>\n                                        <\/span>\n                                        <div>\n                                            <div class=\"lp360-gauge-column-title\">TIME USED<\/div>\n                                            <div class=\"lp360-gauge-column-sub\">Time used for answering the questions<\/div>\n                                        <\/div>\n                                    <\/div>\n                                    <div class=\"lp360-gauge-column-chart\">\n                                        <canvas class=\"lp360-gauge-canvas\" id=\"lp360-gauge-time\" data-value=\"0\" data-max=\"30\" data-color=\"#F59E0B\" data-label=\"TIME USED\" data-unit=\"MIN\"><\/canvas>\n                                    <\/div>\n                                    <div class=\"lp360-gauge-column-value\">0 <span>MIN<\/span><\/div>\n                                <\/div>\n                            <\/div>\n                        <\/div>\n                    <\/div>\n                <\/div>\n            <\/div>\n            <!-- \/Tracker card -->\n\n        <\/section>\n\n        <!-- ================================================================\n               PANEL: ANSWER KEY\n               ================================================================ -->\n        <section class=\"lp360-tab-panel\" id=\"lp360-panel-answerkey\">\n            <div class=\"lp360-section-card\">\n                <div class=\"lp360-section-title\">\n                    <h2>Answer Key<\/h2>\n                    <span class=\"lp360-underline\"><\/span>\n                <\/div>\n                <div class=\"lp360-answer-key-card\">\n                    <div class=\"lp360-answer-key-placeholder\">\n                        [Answer key content goes here]\n                    <\/div>\n                <\/div>\n            <\/div>\n        <\/section>\n\n    <\/div><!-- \/.lp360-shell -->\n    <!-- \/#lp360-root -->\n\n    <!-- ==============================================================\n    JAVASCRIPT \u2014 all && replaced with nested if (plus auto-scroll + Decision Marker 10-min fix)\n    ============================================================ -->\n    <script>\n        (function() {\n            \"use strict\";\n\n            \/\/ ---- Fix 7: Universal time formatting ----\n            function formatTimeDisplay(seconds) {\n                var s = Math.round(Number(seconds) || 0);\n                if (s < 0) s = 0;\n                if (s < 60) {\n                    return s + ' sec';\n                }\n                var m = Math.floor(s \/ 60);\n                var rem = s % 60;\n                if (rem === 0) {\n                    return m + ' min';\n                }\n                return m + ' min ' + rem + ' sec';\n            }\n\n            \/\/ ---- Accuracy Tracker domain xMax (used for hover) ----\n            var __accuracyDomainXMax = 2;\n\n            \/\/ ---- ROW_THEME &#038; ICONS ----\n            var ROW_THEME = {\n                correct: { color: 'green', icon: 'check' },\n                incorrect: { color: 'red', icon: 'cross' },\n\n            };\n\n            var ICONS = {\n                check: '<path d=\"M20 6L9 17l-5-5\" fill=\"none\" stroke=\"#fff\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/>',\n                cross: '<path d=\"M18 6L6 18M6 6l12 12\" fill=\"none\" stroke=\"#fff\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/>',\n                eye: '<path d=\"M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z\" fill=\"none\" stroke=\"#fff\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/><circle cx=\"12\" cy=\"12\" r=\"3\" fill=\"none\" stroke=\"#fff\" stroke-width=\"2\"\/>',\n                help: '<path d=\"M12 17h.01M9.5 9a2.5 2.5 0 015 0c0 1.5-2.5 2-2.5 3.5\" fill=\"none\" stroke=\"#fff\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/>',\n                skip: '<path d=\"M5 4l14 8-14 8V4z\" fill=\"none\" stroke=\"#fff\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/>',\n                attempt: '<circle cx=\"12\" cy=\"12\" r=\"9\" fill=\"none\" stroke=\"#fff\" stroke-width=\"2\"\/><path d=\"M12 4v16M4 12h16\" stroke=\"#fff\" stroke-width=\"2\" stroke-linecap=\"round\"\/>'\n            };\n\n            function iconSvg(name) {\n                return '<svg viewBox=\"0 0 24 24\">' + (ICONS[name] || ICONS.check) + '<\/svg>';\n            }\n\n            \/\/ ---- Render functions ----\n\n            function renderBasicInfo(data) {\n                if (!data) { return; }\n                var el = document.getElementById.bind(document);\n                var obtained = 0;\n                var total = 100;\n                if (data.score) {\n                    obtained = Number(data.score.obtained) || 0;\n                    total = Number(data.score.total) || 100;\n                }\n                var pct = total > 0 ? Math.max(0, Math.min(1, obtained \/ total)) : 0;\n\n                el('lp360-score-obtained').textContent = obtained;\n                el('lp360-score-total').textContent = total;\n\n                var circumference = 691;\n                var progress = document.getElementById('lp360-gauge-progress');\n                if (progress) {\n                    progress.style.strokeDasharray = circumference;\n                    progress.style.strokeDashoffset = circumference;\n                    requestAnimationFrame(function() {\n                        progress.style.strokeDashoffset = circumference - (circumference * pct);\n                    });\n                }\n                var minibar = el('lp360-gauge-minibar-fill');\n                if (minibar) {\n                    requestAnimationFrame(function() {\n                        minibar.style.width = (pct * 100) + '%';\n                    });\n                }\n\n                el('lp360-time-used').textContent = formatTimeDisplay(data.timeUsedSeconds);\n                el('lp360-total-attempt').textContent = (data.totalAttempts != null) ? data.totalAttempts : 0;\n\n                var tpq = data.timePerQuestion || {};\n                if (tpq.max) {\n                    el('lp360-max-time').textContent = formatTimeDisplay(tpq.max.value);\n                    var maxTagEl = el('lp360-max-tag');\n                    maxTagEl.textContent = tpq.max.questionTag || '';\n                    maxTagEl.setAttribute('data-qnum', (tpq.max.questionTag || '').replace('Q', ''));\n                }\n                if (tpq.min) {\n                    el('lp360-min-time').textContent = formatTimeDisplay(tpq.min.value);\n                    var minTagEl = el('lp360-min-tag');\n                    minTagEl.textContent = tpq.min.questionTag || '';\n                    minTagEl.setAttribute('data-qnum', (tpq.min.questionTag || '').replace('Q', ''));\n                }\n                if (tpq.avg) {\n                    el('lp360-avg-time').textContent = formatTimeDisplay(tpq.avg.value);\n                }\n\n                var b = data.breakdown || {};\n                if (b.correct) {\n                    el('lp360-correct-total').textContent = b.correct.total || 0;\n                    el('lp360-correct-single').textContent = b.correct.single || 0;\n                    el('lp360-correct-multiple').textContent = b.correct.multiple || 0;\n                    el('lp360-correct-reviewed').textContent = b.correct.reviewed || 0;\n                    el('lp360-correct-skipped').textContent = b.correct.skipped || 0;\n                }\n                if (b.incorrect) {\n                    el('lp360-incorrect-total').textContent = b.incorrect.total || 0;\n                    el('lp360-incorrect-single').textContent = b.incorrect.single || 0;\n                    el('lp360-incorrect-multiple').textContent = b.incorrect.multiple || 0;\n                    el('lp360-incorrect-reviewed').textContent = b.incorrect.reviewed || 0;\n                    el('lp360-incorrect-skipped').textContent = b.incorrect.skipped || 0;\n                }\n                if (b.unattempted) {\n                    el('lp360-unattempted-total').textContent = b.unattempted.total || 0;\n                    el('lp360-unattempted-skipped').textContent = b.unattempted.skipped || 0;\n                    el('lp360-unattempted-reviewed').textContent = b.unattempted.reviewed || 0;\n                    el('lp360-unattempted-notviewed').textContent = b.unattempted.notViewed || 0;\n                }\n            }\n\n            \/\/ ---- DECISION MARKER: always use 10\u2011minute intervals & aggregate data ----\n            function renderDecisionMarker(data) {\n                if (!data) { return; }\n                var theadRow = document.getElementById('lp360-dm-thead-row');\n                var tbody = document.getElementById('lp360-dm-tbody');\n                var summaryWrap = document.getElementById('lp360-dm-summary');\n                var inferenceEl = document.getElementById('lp360-dm-inference');\n                if (!theadRow) { return; }\n                if (!tbody) { return; }\n                if (!summaryWrap) { return; }\n\n                var intervals = data.timeIntervals || [];\n                var headerHtml = '<th class=\"lp360-dm-row-head-col\"> Categories count \/ Time-intervals in minutes <\/th>';\n                for (var i = 0; i < intervals.length; i++) {\n                    headerHtml += '<th>' + intervals[i] + ' min<\/th>';\n                }\n                theadRow.innerHTML = headerHtml;\n\n                var rowKeys = ['correct', 'incorrect'];\n                var rowLabels = {\n                    'attempt': 'Attempt',\n                    'correct': 'Correct',\n                    'incorrect': 'Incorrect'\n                };\n                var rowColors = {\n                    'attempt': 'blue',\n                    'correct': 'green',\n                    'incorrect': 'red'\n                };\n                var rowIcons = {\n                    'attempt': 'attempt',\n                    'correct': 'check',\n                    'incorrect': 'cross'\n                };\n\n                var tbodyHtml = '';\n                for (var r = 0; r < rowKeys.length; r++) {\n                    var key = rowKeys[r];\n                    var cells = [];\n                    if (data.cells) {\n                        cells = data.cells[key] || [];\n                    }\n                    var color = rowColors[key] || 'gray';\n                    var label = rowLabels[key] || key;\n                    var cellsHtml = '';\n                    for (var c = 0; c < intervals.length; c++) {\n                        var qList = [];\n                        if (c < cells.length) {\n                            qList = cells[c] || [];\n                        }\n                        var chipsHtml = '';\n                        for (var q = 0; q < qList.length; q++) {\n                            chipsHtml += '<span class=\"lp360-dm-chip lp360-dm-chip--' + color + '\" data-qnum=\"' + qList[q] +\n                                '\">Q' + qList[q] + '<\/span>';\n                        }\n                        cellsHtml += '<td><div class=\"lp360-dm-chip-cell\">' + chipsHtml + '<\/div><\/td>';\n                    }\n                    tbodyHtml += '<tr class=\"lp360-dm-row--' + color + '\">' +\n                        '<td><div class=\"lp360-dm-row-label\">' +\n                        '<span class=\"lp360-dm-row-icon lp360-dm-row-icon--' + color + '\">' +\n                        iconSvg(rowIcons[key]) + '<\/span>' +\n                        label +\n                        '<\/div><\/td>' + cellsHtml +\n                        '<\/tr>';\n                }\n                tbody.innerHTML = tbodyHtml;\n\n                var summary = data.summary || [];\n                var summaryHtml = '';\n                for (var s = 0; s < summary.length; s++) {\n                    var item = summary[s];\n                    var scolor = rowColors[item.key] || 'gray';\n                    summaryHtml += '<div class=\"lp360-dm-summary-card lp360-dm-summary-card--' + scolor + '\">' +\n                        '<span class=\"lp360-dm-summary-icon\">' + iconSvg(rowIcons[item.key]) + '<\/span>' +\n                        '<span class=\"lp360-dm-summary-value\">' + item.value + '<\/span>' +\n                        '<span class=\"lp360-dm-summary-label\">' + item.label + '<\/span>' +\n                        '<\/div>';\n                }\n                summaryWrap.innerHTML = summaryHtml;\n\n                if (inferenceEl) {\n                    if (data.inference) {\n                        inferenceEl.textContent = data.inference;\n                        inferenceEl.style.display = 'block';\n                    } else {\n                        inferenceEl.textContent = '';\n                        inferenceEl.style.display = 'none';\n                    }\n                }\n\n                var scrollEl = document.getElementById('lp360-dm-table-scroll');\n                if (scrollEl) {\n                    function checkScroll() {\n                        if (scrollEl.scrollWidth > scrollEl.clientWidth) {\n                            scrollEl.classList.add('is-scrollable');\n                        } else {\n                            scrollEl.classList.remove('is-scrollable');\n                        }\n                    }\n                    scrollEl.addEventListener('scroll', checkScroll);\n                    window.addEventListener('resize', checkScroll);\n                    setTimeout(checkScroll, 100);\n                }\n            }\n\n            \/\/ ---- Tracker: Score & Accuracy (full rendering) ----\n            var __scoreTrackerData = null;\n            var __scoreTrackerPoints = null;\n\n            function renderTracker(data, hoverIndex) {\n                if (data) { __scoreTrackerData = data; } else { data = __scoreTrackerData; }\n                if (!data) { return; }\n                var attempts = data.attempts || [];\n                var scores = data.scores || [];\n                if (attempts.length === 0 || scores.length === 0) { return; }\n\n                var canvas = document.getElementById('lp360-tracker-canvas');\n                if (!canvas) { return; }\n                var rect = canvas.parentElement.getBoundingClientRect();\n                var dpr = window.devicePixelRatio || 1;\n                var cssWidth = Math.max(rect.width - 12, 600);\n                var cssHeight = Math.min(480, Math.max(300, cssWidth * 0.7));\n                canvas.style.width = cssWidth + 'px';\n                canvas.style.height = cssHeight + 'px';\n                canvas.width = cssWidth * dpr;\n                canvas.height = cssHeight * dpr;\n                var ctx = canvas.getContext('2d');\n                ctx.scale(dpr, dpr);\n\n                var margin = { top: 40, bottom: 60, left: 60, right: 30 };\n                if (cssWidth < 500) { margin.left = 50; }\n                var chartWidth = cssWidth - margin.left - margin.right;\n                var chartHeight = cssHeight - margin.top - margin.bottom;\n\n                var minScore = Math.min(0, Math.min.apply(null, scores));\n                var maxScore = Math.max(0, Math.max.apply(null, scores));\n                var yMin = Math.floor(minScore \/ 20) * 20 - 20;\n                var yMax = Math.ceil(maxScore \/ 20) * 20 + 20;\n                if (yMin > -20) { yMin = -20; }\n                if (yMax < 20) { yMax = 20; }\n                yMin = Math.min(yMin, -20);\n                yMax = Math.max(yMax, 100);\n\n                var xMin = 0;\n                var xMax = Math.max.apply(null, attempts);\n                if (xMax < 2) { xMax = 2; }\n                var xRange = xMax - xMin;\n\n                function xToCanvas(x) { return margin.left + (x - xMin) \/ xRange * chartWidth; }\n\n                function yToCanvas(y) { return margin.top + chartHeight - (y - yMin) \/ (yMax - yMin) * chartHeight; }\n\n                ctx.clearRect(0, 0, cssWidth, cssHeight);\n\n                var yTickStep = 20;\n                if (cssHeight < 350) { yTickStep = 40; }\n                for (var y = yMin; y <= yMax; y += yTickStep) {\n                    var yPos = yToCanvas(y);\n                    ctx.beginPath();\n                    ctx.moveTo(margin.left, yPos);\n                    ctx.lineTo(margin.left + chartWidth, yPos);\n                    ctx.strokeStyle = '#e5e7eb';\n                    ctx.setLineDash([4, 4]);\n                    ctx.lineWidth = 1;\n                    ctx.stroke();\n                    ctx.setLineDash([]);\n                    ctx.textAlign = 'right';\n                    ctx.textBaseline = 'middle';\n                    ctx.font = (cssWidth < 500 ? 10 : 12) + 'px Inter, sans-serif';\n                    ctx.fillStyle = (y === 0) ? '#1f2937' : (y > 0 ? '#22c55e' : '#f87171');\n                    ctx.fillText(y, margin.left - 6, yPos);\n                }\n\n                var xTickStep = cssWidth < 500 ? 4 : 2;\n                for (var x = 0; x <= xMax; x += xTickStep) {\n                    var xPos = xToCanvas(x);\n                    ctx.beginPath();\n                    ctx.moveTo(xPos, margin.top);\n                    ctx.lineTo(xPos, margin.top + chartHeight);\n                    ctx.strokeStyle = '#e5e7eb';\n                    ctx.setLineDash([4, 4]);\n                    ctx.lineWidth = 1;\n                    ctx.stroke();\n                    ctx.setLineDash([]);\n                    ctx.textAlign = 'center';\n                    ctx.textBaseline = 'top';\n                    ctx.font = (cssWidth < 500 ? 10 : 12) + 'px Inter, sans-serif';\n                    ctx.fillStyle = '#4b5563';\n                    ctx.fillText(x, xPos, margin.top + chartHeight + 6);\n                }\n\n                ctx.save();\n                ctx.textAlign = 'center';\n                ctx.textBaseline = 'middle';\n                ctx.font = (cssWidth < 500 ? 11 : 13) + 'px Inter, sans-serif';\n                ctx.fillStyle = '#1e293b';\n                ctx.translate(14, margin.top + chartHeight \/ 2);\n                ctx.rotate(-Math.PI \/ 2);\n                ctx.fillText('Score Obtained', 0, 0);\n                ctx.restore();\n\n                ctx.textAlign = 'center';\n                ctx.textBaseline = 'top';\n                ctx.font = (cssWidth < 500 ? 11 : 13) + 'px Inter, sans-serif';\n                ctx.fillStyle = '#1e293b';\n\n                ctx.fillText('Attempt (Attempt Number)', margin.left + chartWidth \/ 2, cssHeight - 16);\n                var zeroY = yToCanvas(0);\n                ctx.beginPath();\n                ctx.moveTo(margin.left, zeroY);\n                ctx.lineTo(margin.left + chartWidth, zeroY);\n                ctx.strokeStyle = '#1f2937';\n                ctx.lineWidth = 1.5;\n                ctx.stroke();\n\n                var points = [];\n                for (var i = 0; i < attempts.length; i++) {\n                    var yVal = scores[i];\n                    if (yVal !== undefined) {\n                        if (!isNaN(yVal)) {\n                            points.push({ x: attempts[i], y: yVal });\n                        }\n                    }\n                }\n                var hasInference = false;\n                if (data.inference) {\n                    hasInference = true;\n                }\n\n                var chartWrap = canvas ? canvas.parentElement : null;\n                if (chartWrap) {\n                    var existingOverlay = chartWrap.querySelector('.lp360-tracker-overlay');\n                    if (existingOverlay) {\n                        existingOverlay.remove();\n                    }\n                    if (hasInference) {\n                        chartWrap.classList.add('has-inference');\n                        var overlay = document.createElement('div');\n                        overlay.className = 'lp360-tracker-overlay';\n                        overlay.innerHTML =\n                            '<div class=\"lp360-tracker-overlay__card\">' +\n                            '<div class=\"lp360-tracker-overlay__icon\">' +\n                            '<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><circle cx=\"12\" cy=\"12\" r=\"10\"\/><path d=\"M12 16v-4M12 8h.01\"\/><\/svg>' +\n                            '<\/div>' +\n                            '<h3>Score Tracker<\/h3>' +\n                            '<p>' + data.inference + '<\/p>' +\n                            '<\/div>';\n                        chartWrap.appendChild(overlay);\n                    } else {\n                        chartWrap.classList.remove('has-inference');\n                    }\n                }\n                if (points.length === 1) {\n                    var onlyPoint = points[0];\n                    var onlyX = xToCanvas(onlyPoint.x);\n                    var onlyY = yToCanvas(onlyPoint.y);\n                    ctx.beginPath();\n                    ctx.setLineDash([5, 5]);\n                    ctx.moveTo(margin.left, onlyY);\n                    ctx.lineTo(margin.left + chartWidth, onlyY);\n                    ctx.strokeStyle = '#FF7A3D';\n                    ctx.lineWidth = 1.5;\n                    ctx.stroke();\n                    ctx.setLineDash([]);\n                    ctx.beginPath();\n                    ctx.arc(onlyX, onlyY, 6, 0, 2 * Math.PI);\n                    ctx.fillStyle = '#FF7A3D';\n                    ctx.shadowColor = 'rgba(255,122,61,0.3)';\n                    ctx.shadowBlur = 6;\n                    ctx.fill();\n                    ctx.shadowBlur = 0;\n                    ctx.font = 'bold ' + (cssWidth < 500 ? 11 : 13) + 'px Inter, sans-serif';\n                    ctx.textAlign = 'center';\n                    ctx.fillStyle = (onlyPoint.y >= 0) ? '#22c55e' : '#ef4444';\n                    ctx.fillText(onlyPoint.y, onlyX, (onlyPoint.y >= 0) ? onlyY - 18 : onlyY + 18);\n                }\n                \n\n                function catmullRom(pts, seg) {\n                    if (pts.length < 2) { return []; }\n                    var result = [];\n                    for (var i = 0; i < pts.length - 1; i++) {\n                        var p0 = (i === 0) ? pts[i] : pts[i - 1];\n                        var p1 = pts[i];\n                        var p2 = pts[i + 1];\n                        var p3 = (i === pts.length - 2) ? pts[i + 1] : pts[i + 2];\n                        for (var t = 0; t <= 1; t += 1 \/ seg) {\n                            var t2 = t * t,\n                                t3 = t2 * t;\n                            var x = 0.5 * ((2 * p1.x) + (-p0.x + p2.x) * t + (2 * p0.x - 5 * p1.x + 4 * p2.x - p3.x) * t2 +\n                                (-p0.x + 3 * p1.x - 3 * p2.x + p3.x) * t3);\n                            var y = 0.5 * ((2 * p1.y) + (-p0.y + p2.y) * t + (2 * p0.y - 5 * p1.y + 4 * p2.y - p3.y) * t2 +\n                                (-p0.y + 3 * p1.y - 3 * p2.y + p3.y) * t3);\n                            result.push({ x: x, y: y });\n                        }\n                    }\n                    result.push(pts[pts.length - 1]);\n                    return result;\n                }\n\n                var smoothPoints = catmullRom(points, 20);\n\n                ctx.beginPath();\n                var first = smoothPoints[0];\n                ctx.moveTo(xToCanvas(first.x), yToCanvas(first.y));\n                for (var n = 1; n < smoothPoints.length; n++) {\n                    var pt = smoothPoints[n];\n                    ctx.lineTo(xToCanvas(pt.x), yToCanvas(pt.y));\n                }\n                var last = smoothPoints[smoothPoints.length - 1];\n                ctx.lineTo(xToCanvas(last.x), yToCanvas(0));\n                ctx.lineTo(xToCanvas(first.x), yToCanvas(0));\n                ctx.closePath();\n                var grad = ctx.createLinearGradient(0, margin.top, 0, margin.top + chartHeight);\n                grad.addColorStop(0, 'rgba(255,122,61,0.2)');\n                grad.addColorStop(1, 'rgba(255,122,61,0.02)');\n                ctx.fillStyle = grad;\n                ctx.fill();\n\n                ctx.beginPath();\n                ctx.moveTo(xToCanvas(first.x), yToCanvas(first.y));\n                for (var n2 = 1; n2 < smoothPoints.length; n2++) {\n                    var pt2 = smoothPoints[n2];\n                    ctx.lineTo(xToCanvas(pt2.x), yToCanvas(pt2.y));\n                }\n                ctx.strokeStyle = '#FF7A3D';\n                ctx.lineWidth = 3;\n                ctx.shadowColor = 'rgba(255,122,61,0.3)';\n                ctx.shadowBlur = 8;\n                ctx.stroke();\n                ctx.shadowBlur = 0;\n\n                var pointRadius = cssWidth < 500 ? 4 : 5;\n                for (var p = 0; p < points.length; p++) {\n                    var pt3 = points[p];\n                    var xp = xToCanvas(pt3.x);\n                    var yp = yToCanvas(pt3.y);\n                    ctx.beginPath();\n                    ctx.arc(xp, yp, pointRadius, 0, 2 * Math.PI);\n                    ctx.fillStyle = '#FF7A3D';\n                    ctx.shadowColor = 'rgba(255,122,61,0.3)';\n                    ctx.shadowBlur = 6;\n                    ctx.fill();\n                    ctx.shadowBlur = 0;\n                    ctx.font = 'bold ' + (cssWidth < 500 ? 11 : 13) + 'px Inter, sans-serif';\n                    ctx.textAlign = 'center';\n                    ctx.fillStyle = (pt3.y >= 0) ? '#22c55e' : '#ef4444';\n                    ctx.fillText(pt3.y, xp, (pt3.y >= 0) ? yp - 18 : yp + 18);\n                }\n\n                var activeIndex = hoverIndex;\n                if (activeIndex === undefined) { activeIndex = points.length - 1; }\n                if (activeIndex >= 0) {\n                    if (activeIndex < points.length) {\n                        var hp = points[activeIndex];\n                        var hx = xToCanvas(hp.x);\n                        var hy = yToCanvas(hp.y);\n                        ctx.save();\n                        ctx.setLineDash([4, 4]);\n                        ctx.strokeStyle = '#FF7A3D';\n                        ctx.lineWidth = 1.2;\n                        ctx.beginPath();\n                        ctx.moveTo(hx, margin.top);\n                        ctx.lineTo(hx, margin.top + chartHeight);\n                        ctx.stroke();\n                        ctx.beginPath();\n                        ctx.moveTo(margin.left, hy);\n                        ctx.lineTo(margin.left + chartWidth, hy);\n                        ctx.stroke();\n                        ctx.restore();\n\n                        ctx.beginPath();\n                        ctx.arc(hx, hy, 8, 0, 2 * Math.PI);\n                        ctx.strokeStyle = '#FF7A3D';\n                        ctx.lineWidth = 2.5;\n                        ctx.fillStyle = '#fff';\n                        ctx.fill();\n                        ctx.stroke();\n\n                        var tipText = 'Attempt: ' + hp.x + ' | Score: ' + hp.y;\n                        ctx.font = 'bold ' + (cssWidth < 500 ? 11 : 12.5) + 'px Inter, sans-serif';\n                        var tipPad = 12;\n                        var tipTextWidth = ctx.measureText(tipText).width;\n                        var tipW = tipTextWidth + tipPad * 2;\n                        var tipH = 30;\n                        var tipX = hx - tipW \/ 2;\n                        if (tipX < margin.left) { tipX = margin.left; }\n                        if (tipX + tipW > margin.left + chartWidth) { tipX = margin.left + chartWidth - tipW; }\n                        var tipY = hy - tipH - 16;\n                        if (tipY < margin.top) { tipY = hy + 16; }\n                        ctx.beginPath();\n                        if (ctx.roundRect) { ctx.roundRect(tipX, tipY, tipW, tipH, 8); } else { ctx.rect(tipX, tipY, tipW,\n                            tipH); }\n                        ctx.fillStyle = '#fff';\n                        ctx.shadowColor = 'rgba(0,0,0,0.12)';\n                        ctx.shadowBlur = 10;\n                        ctx.fill();\n                        ctx.shadowBlur = 0;\n                        ctx.lineWidth = 1.8;\n                        ctx.strokeStyle = '#FF7A3D';\n                        ctx.stroke();\n                        ctx.fillStyle = '#1f2937';\n                        ctx.textAlign = 'center';\n                        ctx.textBaseline = 'middle';\n                        ctx.fillText(tipText, tipX + tipW \/ 2, tipY + tipH \/ 2);\n                    }\n                }\n\n                if (!canvas._lp360HoverBound) {\n                    canvas._lp360HoverBound = true;\n                    canvas.addEventListener('mousemove', function(evt) {\n                        if (!__scoreTrackerPoints) { return; }\n                        var br = canvas.getBoundingClientRect();\n                        var mouseX = evt.clientX - br.left;\n                        var currentCssWidth = parseFloat(canvas.style.width);\n                        var currentMarginL = currentCssWidth < 500 ? 50 : 60;\n                        var cw = currentCssWidth - currentMarginL - 30;\n                        var xMax = Math.max.apply(null, __scoreTrackerPoints.map(function(p) { return p.x; }));\n                        if (xMax < 2) { xMax = 2; }\n                        var dataX = (mouseX - currentMarginL) \/ cw * xMax;\n                        var nearestIdx = 0,\n                            nearestDist = Infinity;\n                        for (var pi = 0; pi < __scoreTrackerPoints.length; pi++) {\n                            var d = Math.abs(__scoreTrackerPoints[pi].x - dataX);\n                            if (d < nearestDist) { nearestDist = d;\n                                nearestIdx = pi; }\n                        }\n                        renderTracker(null, nearestIdx);\n                    });\n                    canvas.addEventListener('mouseleave', function() {\n                        renderTracker(null, undefined);\n                    });\n                }\n\n            }\n\n            \/\/ ---- Accuracy Tracker (full) ----\n            var __accuracyTrackerData = null;\n            var __accuracyTrackerPoints = null;\nfunction renderAccuracyTracker(data, hoverIndex) {\n    if (data) { __accuracyTrackerData = data; } else { data = __accuracyTrackerData; }\n    if (!data) { return; }\n    var timePoints = data.timePoints || [];\n    var accuracyValues = data.accuracyValues || [];\n    if (timePoints.length === 0 || accuracyValues.length === 0) { return; }\n\n    var canvas = document.getElementById('lp360-accuracy-canvas');\n    if (!canvas) { return; }\n    var rect = canvas.parentElement.getBoundingClientRect();\n    var dpr = window.devicePixelRatio || 1;\n    var cssWidth = Math.max(rect.width - 12, 600);\n    var cssHeight = Math.min(480, Math.max(300, cssWidth * 0.7));\n    canvas.style.width = cssWidth + 'px';\n    canvas.style.height = cssHeight + 'px';\n    canvas.width = cssWidth * dpr;\n    canvas.height = cssHeight * dpr;\n    var ctx = canvas.getContext('2d');\n    ctx.scale(dpr, dpr);\n\n    var margin = { top: 40, bottom: 60, left: 55, right: 30 };\n    if (cssWidth < 500) { margin.left = 48; }\n    var chartWidth = cssWidth - margin.left - margin.right;\n    var chartHeight = cssHeight - margin.top - margin.bottom;\n\n    var yMin = 0, yMax = 100;\n    var xTicksForDomain = data.xTicks || [];\n    if (xTicksForDomain.length === 0) {\n        xTicksForDomain = timePoints.slice();\n    }\n    var xMin = 0, xMax = Math.max.apply(null, xTicksForDomain);\n    if (xMax < 2) { xMax = 2; }\n    __accuracyDomainXMax = xMax;\n    var xRange = xMax - xMin;\n\n    function xToCanvas(x) { return margin.left + (x - xMin) \/ xRange * chartWidth; }\n    function yToCanvas(y) { return margin.top + chartHeight - (y - yMin) \/ (yMax - yMin) * chartHeight; }\n\n    ctx.clearRect(0, 0, cssWidth, cssHeight);\n\n    var yTickStep = 20;\n    for (var y = 0; y <= 100; y += yTickStep) {\n        var yPos = yToCanvas(y);\n        ctx.beginPath();\n        ctx.moveTo(margin.left, yPos);\n        ctx.lineTo(margin.left + chartWidth, yPos);\n        ctx.strokeStyle = '#e5e7eb';\n        ctx.setLineDash([4, 4]);\n        ctx.lineWidth = 1;\n        ctx.stroke();\n        ctx.setLineDash([]);\n        ctx.textAlign = 'right';\n        ctx.textBaseline = 'middle';\n        ctx.font = (cssWidth < 500 ? 10 : 12) + 'px Inter, sans-serif';\n        ctx.fillStyle = '#1f2937';\n        ctx.fillText(y, margin.left - 6, yPos);\n    }\n\n    var xTicks = data.xTicks || [];\n    if (xTicks.length === 0) {\n        xTicks = timePoints.slice();\n    }\n    var xTicksText = data.xTicksText || [];\n    for (var i = 0; i < xTicks.length; i++) {\n        var xVal = xTicks[i];\n        var xPos = xToCanvas(xVal);\n        ctx.beginPath();\n        ctx.moveTo(xPos, margin.top);\n        ctx.lineTo(xPos, margin.top + chartHeight);\n        ctx.strokeStyle = '#e5e7eb';\n        ctx.setLineDash([4, 4]);\n        ctx.lineWidth = 1;\n        ctx.stroke();\n        ctx.setLineDash([]);\n        ctx.textAlign = 'center';\n        ctx.textBaseline = 'top';\n        ctx.font = (cssWidth < 500 ? 10 : 12) + 'px Inter, sans-serif';\n        ctx.fillStyle = '#4b5563';\n        var tickLabel = xVal;\n        if (xTicksText[i] !== undefined) {\n            tickLabel = xTicksText[i];\n        }\n        ctx.fillText(tickLabel, xPos, margin.top + chartHeight + 6);\n    }\n\n    ctx.save();\n    ctx.textAlign = 'center';\n    ctx.textBaseline = 'middle';\n    ctx.font = (cssWidth < 500 ? 11 : 13) + 'px Inter, sans-serif';\n    ctx.fillStyle = '#1e293b';\n    ctx.translate(14, margin.top + chartHeight \/ 2);\n    ctx.rotate(-Math.PI \/ 2);\n    ctx.fillText('Accuracy (%)', 0, 0);\n    ctx.restore();\n\n    ctx.textAlign = 'center';\n    ctx.textBaseline = 'top';\n    ctx.font = (cssWidth < 500 ? 11 : 13) + 'px Inter, sans-serif';\n    ctx.fillStyle = '#1e293b';\n    ctx.fillText('Time (minutes)', margin.left + chartWidth \/ 2, cssHeight - 16);\n\n    var labelsTextArr = data.labelsText || [];\n    var points = [];\n    for (var i = 0; i < timePoints.length; i++) {\n        var yVal = accuracyValues[i];\n        if (yVal !== undefined) {\n            if (!isNaN(yVal)) {\n                points.push({ x: timePoints[i], y: yVal, idx: i });\n            }\n        }\n    }\n\n    if (points.length === 0) { return; }\n\n    __accuracyTrackerPoints = points;\n\n    \/\/ ---- SINGLE POINT: draw dashed horizontal line + circle ----\n    if (points.length === 1) {\n        var onlyPoint = points[0];\n        var onlyX = xToCanvas(onlyPoint.x);\n        var onlyY = yToCanvas(onlyPoint.y);\n\n        \/\/ dashed horizontal line\n        ctx.beginPath();\n        ctx.setLineDash([6, 6]);\n        ctx.moveTo(margin.left, onlyY);\n        ctx.lineTo(margin.left + chartWidth, onlyY);\n        ctx.strokeStyle = '#FF7A3D';\n        ctx.lineWidth = 1.8;\n        ctx.shadowColor = 'rgba(255,122,61,0.2)';\n        ctx.shadowBlur = 4;\n        ctx.stroke();\n        ctx.setLineDash([]);\n        ctx.shadowBlur = 0;\n\n        \/\/ circle\n        ctx.beginPath();\n        ctx.arc(onlyX, onlyY, 8, 0, 2 * Math.PI);\n        ctx.fillStyle = '#FF7A3D';\n        ctx.shadowColor = 'rgba(255,122,61,0.3)';\n        ctx.shadowBlur = 10;\n        ctx.fill();\n        ctx.shadowBlur = 0;\n        ctx.beginPath();\n        ctx.arc(onlyX, onlyY, 3.5, 0, 2 * Math.PI);\n        ctx.fillStyle = '#fff';\n        ctx.fill();\n\n        \/\/ percentage label\n        ctx.font = 'bold ' + (cssWidth < 500 ? 11 : 13) + 'px Inter, sans-serif';\n        ctx.textAlign = 'center';\n        ctx.fillStyle = '#1f2937';\n        ctx.fillText(onlyPoint.y + '%', onlyX, onlyY - 18);\n\n        \/\/ ---- Hover for single point ----\n        if (!canvas._lp360AccHoverBound) {\n            canvas._lp360AccHoverBound = true;\n            canvas.addEventListener('mousemove', function(evt) {\n                var br = canvas.getBoundingClientRect();\n                var mouseX = evt.clientX - br.left;\n                var cssWidthNow = parseFloat(canvas.style.width) || br.width - 12;\n                var marginLeftNow = cssWidthNow < 500 ? 48 : 55;\n                var chartWidthNow = cssWidthNow - marginLeftNow - 30;\n                var domainXMax = __accuracyDomainXMax || 2;\n                var dataX = (mouseX - marginLeftNow) \/ chartWidthNow * domainXMax;\n                var nearestIdx = 0;\n                var nearestDist = Infinity;\n                for (var pi = 0; pi < __accuracyTrackerPoints.length; pi++) {\n                    var d = Math.abs(__accuracyTrackerPoints[pi].x - dataX);\n                    if (d < nearestDist) { nearestDist = d; nearestIdx = pi; }\n                }\n                renderAccuracyTracker(null, nearestIdx);\n            });\n            canvas.addEventListener('mouseleave', function() {\n                renderAccuracyTracker(null, undefined);\n            });\n        }\n\n        var activeIndexSingle = hoverIndex;\n        if (activeIndexSingle === undefined) { activeIndexSingle = 0; }\n        if (activeIndexSingle >= 0 && activeIndexSingle < points.length) {\n            var hp = points[activeIndexSingle];\n            var hx = xToCanvas(hp.x);\n            var hy = yToCanvas(hp.y);\n            ctx.save();\n            ctx.setLineDash([4, 4]);\n            ctx.strokeStyle = '#FF7A3D';\n            ctx.lineWidth = 1.2;\n            ctx.beginPath();\n            ctx.moveTo(hx, margin.top);\n            ctx.lineTo(hx, margin.top + chartHeight);\n            ctx.stroke();\n            ctx.beginPath();\n            ctx.moveTo(margin.left, hy);\n            ctx.lineTo(margin.left + chartWidth, hy);\n            ctx.stroke();\n            ctx.restore();\n\n            ctx.beginPath();\n            ctx.arc(hx, hy, 10, 0, 2 * Math.PI);\n            ctx.strokeStyle = '#FF7A3D';\n            ctx.lineWidth = 2.5;\n            ctx.fillStyle = '#fff';\n            ctx.fill();\n            ctx.stroke();\n\n            var tipTextSingle = 'Time: ' + (labelsTextArr[hp.idx] || hp.x + ' min') + ' | Accuracy: ' + hp.y + '%';\n            ctx.font = 'bold ' + (cssWidth < 500 ? 11 : 12.5) + 'px Inter, sans-serif';\n            var tipPad = 12;\n            var tipTextWidth = ctx.measureText(tipTextSingle).width;\n            var tipW = tipTextWidth + tipPad * 2;\n            var tipH = 30;\n            var tipX = hx - tipW \/ 2;\n            if (tipX < margin.left) { tipX = margin.left; }\n            if (tipX + tipW > margin.left + chartWidth) { tipX = margin.left + chartWidth - tipW; }\n            var tipY = hy - tipH - 16;\n            if (tipY < margin.top) { tipY = hy + 16; }\n            ctx.beginPath();\n            if (ctx.roundRect) { ctx.roundRect(tipX, tipY, tipW, tipH, 8); } else { ctx.rect(tipX, tipY, tipW, tipH); }\n            ctx.fillStyle = '#fff';\n            ctx.shadowColor = 'rgba(0,0,0,0.12)';\n            ctx.shadowBlur = 10;\n            ctx.fill();\n            ctx.shadowBlur = 0;\n            ctx.lineWidth = 1.8;\n            ctx.strokeStyle = '#FF7A3D';\n            ctx.stroke();\n            ctx.fillStyle = '#1f2937';\n            ctx.textAlign = 'center';\n            ctx.textBaseline = 'middle';\n            ctx.fillText(tipTextSingle, tipX + tipW \/ 2, tipY + tipH \/ 2);\n        }\n        return;\n    }\n\n    \/\/ ---- MULTIPLE POINTS: original logic ----\n    var first = points[0];\n    ctx.beginPath();\n    ctx.moveTo(xToCanvas(first.x), yToCanvas(first.y));\n    for (var n = 1; n < points.length; n++) {\n        var pt = points[n];\n        ctx.lineTo(xToCanvas(pt.x), yToCanvas(pt.y));\n    }\n    var last = points[points.length - 1];\n    ctx.lineTo(xToCanvas(last.x), yToCanvas(0));\n    ctx.lineTo(xToCanvas(first.x), yToCanvas(0));\n    ctx.closePath();\n    var grad = ctx.createLinearGradient(0, margin.top, 0, margin.top + chartHeight);\n    grad.addColorStop(0, 'rgba(255,122,61,0.2)');\n    grad.addColorStop(1, 'rgba(255,122,61,0.02)');\n    ctx.fillStyle = grad;\n    ctx.fill();\n\n    ctx.beginPath();\n    ctx.moveTo(xToCanvas(first.x), yToCanvas(first.y));\n    for (var n2 = 1; n2 < points.length; n2++) {\n        var pt2 = points[n2];\n        ctx.lineTo(xToCanvas(pt2.x), yToCanvas(pt2.y));\n    }\n    ctx.strokeStyle = '#FF7A3D';\n    ctx.lineWidth = 3;\n    ctx.shadowColor = 'rgba(255,122,61,0.3)';\n    ctx.shadowBlur = 8;\n    ctx.stroke();\n    ctx.shadowBlur = 0;\n\n    var pointRadius = cssWidth < 500 ? 4 : 6;\n    for (var p = 0; p < points.length; p++) {\n        var pt3 = points[p];\n        var xp = xToCanvas(pt3.x);\n        var yp = yToCanvas(pt3.y);\n        ctx.beginPath();\n        ctx.arc(xp, yp, pointRadius, 0, 2 * Math.PI);\n        ctx.fillStyle = '#FF7A3D';\n        ctx.shadowColor = 'rgba(255,122,61,0.3)';\n        ctx.shadowBlur = 6;\n        ctx.fill();\n        ctx.shadowBlur = 0;\n        ctx.beginPath();\n        ctx.arc(xp, yp, 3, 0, 2 * Math.PI);\n        ctx.fillStyle = '#fff';\n        ctx.fill();\n        ctx.font = 'bold ' + (cssWidth < 500 ? 11 : 13) + 'px Inter, sans-serif';\n        ctx.textAlign = 'center';\n        ctx.fillStyle = '#1f2937';\n        ctx.fillText(pt3.y + '%', xp, yp - 16);\n    }\n\n    var activeIndex = hoverIndex;\n    if (activeIndex === undefined) { activeIndex = points.length - 1; }\n    if (activeIndex >= 0 && activeIndex < points.length) {\n        var hp = points[activeIndex];\n        var hx = xToCanvas(hp.x);\n        var hy = yToCanvas(hp.y);\n        ctx.save();\n        ctx.setLineDash([4, 4]);\n        ctx.strokeStyle = '#FF7A3D';\n        ctx.lineWidth = 1.2;\n        ctx.beginPath();\n        ctx.moveTo(hx, margin.top);\n        ctx.lineTo(hx, margin.top + chartHeight);\n        ctx.stroke();\n        ctx.beginPath();\n        ctx.moveTo(margin.left, hy);\n        ctx.lineTo(margin.left + chartWidth, hy);\n        ctx.stroke();\n        ctx.restore();\n\n        ctx.beginPath();\n        ctx.arc(hx, hy, 8, 0, 2 * Math.PI);\n        ctx.strokeStyle = '#FF7A3D';\n        ctx.lineWidth = 2.5;\n        ctx.fillStyle = '#fff';\n        ctx.fill();\n        ctx.stroke();\n\n        var hoverTimeLabel = labelsTextArr[hp.idx] || hp.x + ' min';\n        var tipText = 'Time: ' + hoverTimeLabel + ' | Accuracy: ' + hp.y + '%';\n        ctx.font = 'bold ' + (cssWidth < 500 ? 11 : 12.5) + 'px Inter, sans-serif';\n        var tipPad = 12;\n        var tipTextWidth = ctx.measureText(tipText).width;\n        var tipW = tipTextWidth + tipPad * 2;\n        var tipH = 30;\n        var tipX = hx - tipW \/ 2;\n        if (tipX < margin.left) { tipX = margin.left; }\n        if (tipX + tipW > margin.left + chartWidth) { tipX = margin.left + chartWidth - tipW; }\n        var tipY = hy - tipH - 16;\n        if (tipY < margin.top) { tipY = hy + 16; }\n        ctx.beginPath();\n        if (ctx.roundRect) { ctx.roundRect(tipX, tipY, tipW, tipH, 8); } else { ctx.rect(tipX, tipY, tipW, tipH); }\n        ctx.fillStyle = '#fff';\n        ctx.shadowColor = 'rgba(0,0,0,0.12)';\n        ctx.shadowBlur = 10;\n        ctx.fill();\n        ctx.shadowBlur = 0;\n        ctx.lineWidth = 1.8;\n        ctx.strokeStyle = '#FF7A3D';\n        ctx.stroke();\n        ctx.fillStyle = '#1f2937';\n        ctx.textAlign = 'center';\n        ctx.textBaseline = 'middle';\n        ctx.fillText(tipText, tipX + tipW \/ 2, tipY + tipH \/ 2);\n    }\n\n    \/\/ ---- Hover interaction (bound once) ----\n    if (!canvas._lp360AccHoverBound) {\n        canvas._lp360AccHoverBound = true;\n        var accHoverPending = false;\n        var accPendingIdx = null;\n        canvas.addEventListener('mousemove', function(evt) {\n            if (!__accuracyTrackerPoints) { return; }\n            var br = canvas.getBoundingClientRect();\n            var mouseX = evt.clientX - br.left;\n            var cssWidthNow = parseFloat(canvas.style.width) || br.width - 12;\n            var marginLeftNow = cssWidthNow < 500 ? 48 : 55;\n            var chartWidthNow = cssWidthNow - marginLeftNow - 30;\n            var domainXMax = __accuracyDomainXMax || 2;\n            var dataX = (mouseX - marginLeftNow) \/ chartWidthNow * domainXMax;\n            var nearestIdx = 0, nearestDist = Infinity;\n            for (var pi = 0; pi < __accuracyTrackerPoints.length; pi++) {\n                var d = Math.abs(__accuracyTrackerPoints[pi].x - dataX);\n                if (d < nearestDist) { nearestDist = d; nearestIdx = pi; }\n            }\n            accPendingIdx = nearestIdx;\n            if (!accHoverPending) {\n                accHoverPending = true;\n                requestAnimationFrame(function() {\n                    accHoverPending = false;\n                    renderAccuracyTracker(null, accPendingIdx);\n                });\n            }\n        });\n        canvas.addEventListener('mouseleave', function() {\n            renderAccuracyTracker(null, undefined);\n        });\n    }\n}\n           \n            \/\/ ---- Time Tracker Gauges ----\n            function renderTimeGauges() {\n                var gauges = document.querySelectorAll('.lp360-gauge-canvas');\n                for (var i = 0; i < gauges.length; i++) {\n                    var canvas = gauges[i];\n                    var value = parseFloat(canvas.dataset.value) || 0;\n                    var maxVal = parseFloat(canvas.dataset.max) || 20;\n                    var color = canvas.dataset.color || '#FF7A3D';\n                    var rect = canvas.parentElement.getBoundingClientRect();\n                    var dpr = window.devicePixelRatio || 1;\n                    var cssWidth = rect.width || 220;\n                    if (cssWidth < 88) { cssWidth = 88; }\n                    if (cssWidth > 132) { cssWidth = 132; }\n                    var cssHeight = cssWidth * 1.2;\n                    canvas.style.width = cssWidth + 'px';\n                    canvas.style.height = cssHeight + 'px';\n                    canvas.width = cssWidth * dpr;\n                    canvas.height = cssHeight * dpr;\n                    var ctx = canvas.getContext('2d');\n                    ctx.scale(dpr, dpr);\n\n                    var cx = cssWidth \/ 2;\n                    var cy = cssHeight * 0.55;\n                    var radius = Math.min(cssWidth, cssHeight * 1.2) \/ 2.9;\n                    var startAngle = Math.PI * 0.75;\n                    var endAngle = Math.PI * 2.25;\n                    var totalAngle = endAngle - startAngle;\n                    var fraction = Math.min(value \/ maxVal, 1);\n                    var currentAngle = startAngle + fraction * totalAngle;\n\n                    ctx.clearRect(0, 0, cssWidth, cssHeight);\n\n                    ctx.beginPath();\n                    ctx.arc(cx, cy, radius, startAngle, endAngle);\n                    ctx.strokeStyle = '#e9ecf0';\n                    ctx.lineWidth = 14;\n                    ctx.lineCap = 'round';\n                    ctx.stroke();\n\n                    var grad = ctx.createLinearGradient(0, 0, cssWidth, 0);\n                    grad.addColorStop(0, color);\n                    grad.addColorStop(0.6, color);\n                    grad.addColorStop(1, color + 'cc');\n                    ctx.beginPath();\n                    ctx.arc(cx, cy, radius, startAngle, currentAngle);\n                    ctx.strokeStyle = grad;\n                    ctx.lineWidth = 14;\n                    ctx.lineCap = 'round';\n                    ctx.shadowColor = color + '50';\n                    ctx.shadowBlur = 6;\n                    ctx.stroke();\n                    ctx.shadowBlur = 0;\n\n                    var numTicks;\n                    var tickStep;\n                    if (maxVal === 20) {\n                        numTicks = 6;\n                        tickStep = 4;\n                    } else if (maxVal === 50) {\n                        numTicks = 6;\n                        tickStep = 10;\n                    } else {\n                        numTicks = 7;\n                        tickStep = maxVal \/ (numTicks - 1);\n                    }\n                    ctx.font = (cssWidth < 110 ? 8 : 9) + 'px Inter, sans-serif';\n                    ctx.fillStyle = '#6b7280';\n                    ctx.textAlign = 'center';\n                    ctx.textBaseline = 'middle';\n                    for (var t = 0; t < numTicks; t++) {\n                        var tickVal = t * tickStep;\n                        var angle = startAngle + (tickVal \/ maxVal) * totalAngle;\n                        var tx = cx + (radius + 16) * Math.cos(angle);\n                        var ty = cy + (radius + 16) * Math.sin(angle);\n                        ctx.fillText(Math.round(tickVal), tx, ty);\n                    }\n                    var needleLen = radius * 0.6;\n                    var needleX = cx + needleLen * Math.cos(currentAngle);\n                    var needleY = cy + needleLen * Math.sin(currentAngle);\n                    ctx.beginPath();\n                    ctx.moveTo(cx, cy);\n                    ctx.lineTo(needleX, needleY);\n                    ctx.strokeStyle = '#1a1a2e';\n                    ctx.lineWidth = 3;\n                    ctx.shadowColor = 'rgba(0,0,0,0.15)';\n                    ctx.shadowBlur = 6;\n                    ctx.stroke();\n                    ctx.shadowBlur = 0;\n\n                    ctx.beginPath();\n                    ctx.arc(cx, cy, 8, 0, 2 * Math.PI);\n                    ctx.fillStyle = color;\n                    ctx.shadowColor = color + '60';\n                    ctx.shadowBlur = 8;\n                    ctx.fill();\n                    ctx.shadowBlur = 0;\n                    ctx.beginPath();\n                    ctx.arc(cx, cy, 3.5, 0, 2 * Math.PI);\n                    ctx.fillStyle = '#fff';\n                    ctx.fill();\n                }\n            }\n\n            \/\/ ---- Time Tracker Tabs ----\n            function initTimeTabs(timeData) {\n                var tabs = document.querySelectorAll('.lp360-time-tab');\n                for (var i = 0; i < tabs.length; i++) {\n                    var tab = tabs[i];\n                    tab.addEventListener('click', function() {\n                        var currentTabs = document.querySelectorAll('.lp360-time-tab');\n                        for (var j = 0; j < currentTabs.length; j++) {\n                            currentTabs[j].classList.remove('active');\n                        }\n                        this.classList.add('active');\n                        var range = this.dataset.range;\n\n                        var attemptVal = timeData.attemptRateByRange[range] || 0;\n                        var correctVal = timeData.correctRateByRange[range] || 0;\n                        var timeVal = timeData.timeUsedByRange[range] || 0;\n\n                        var attemptCanvas = document.getElementById('lp360-gauge-attempt');\n                        var correctCanvas = document.getElementById('lp360-gauge-correct');\n                        var timeCanvas = document.getElementById('lp360-gauge-time');\n                        if (attemptCanvas) { attemptCanvas.dataset.value = attemptVal; }\n                        if (correctCanvas) { correctCanvas.dataset.value = correctVal; }\n                        var timeGaugeConfig = getTimeGaugeConfig(timeVal, range);\n                        if (timeCanvas) {\n                            timeCanvas.dataset.value = timeGaugeConfig.value;\n                            timeCanvas.dataset.max = timeGaugeConfig.max;\n                        }\n                        var attemptValEl = attemptCanvas ? attemptCanvas.parentElement.parentElement.querySelector(\n                            '.lp360-gauge-column-value') : null;\n                        var correctValEl = correctCanvas ? correctCanvas.parentElement.parentElement.querySelector(\n                            '.lp360-gauge-column-value') : null;\n                        var timeValEl = timeCanvas ? timeCanvas.parentElement.parentElement.querySelector(\n                            '.lp360-gauge-column-value') : null;\n                        if (attemptValEl) { attemptValEl.innerHTML = attemptVal; }\n                        if (correctValEl) { correctValEl.innerHTML = correctVal; }\n                        if (timeValEl) { timeValEl.innerHTML = formatTimeDisplayGauge(timeVal); }\n\n                        var inf1 = document.getElementById('lp360-time-inf1');\n                        var inf2 = document.getElementById('lp360-time-inf2');\n                        if (inf1) {\n                            if (timeData.inferences) {\n                                inf1.textContent = timeData.inferences.attempt;\n                            }\n                        }\n                        if (inf2) {\n                            if (timeData.inferences) {\n                                inf2.textContent = timeData.inferences.correct;\n                            }\n                        }\n                        renderTimeGauges();\n                    });\n                }\n            }\n\n            function formatTimeDisplayGauge(minutes) {\n                var seconds = minutes * 60;\n                if (seconds < 60) {\n                    var roundedSec = Math.round(seconds);\n                    return roundedSec + ' <span>SEC<\/span>';\n                } else {\n                    var roundedMin = (Math.round(minutes * 10) \/ 10).toFixed(1);\n                    return roundedMin + ' <span>MIN<\/span>';\n                }\n            }\n            \/\/ ---- Dual-mode dial config: seconds dial (0-60) when value < 60s, minutes dial (0-30) otherwise ----\n            function getTimeGaugeConfig(minutes, range) {\n                if (range === '60-90' || range === '90+') {\n                    return { value: minutes, max: 60 };\n                }\n                var seconds = minutes * 60;\n                if (seconds < 60) {\n                    return { value: seconds, max: 60 };\n                }\n                return { value: minutes, max: 30 };\n            }\n\n\n            \/\/ ---- Info Popups ----\n            var infoDescriptions = {\n                'decision_marker': 'Shows your answer history (for every 10 minutes of the test).',\n                'score_tracker': 'Track your progress over time. Each attempt shows how you\\'re improving and getting closer to your best score!',\n                'accuracy_tracker': 'Displays the accuracy trend over time in minutes.',\n                'time_tracker': 'This tracker shows how much time you spend answering questions and compares your attempts and correct answers across different time ranges. It helps you identify whether you perform your answering quickly, moderately, or after taking more time, allowing you to develop an effective exam strategy.'\n            };\n\n            function showInfoPopup(key) {\n                var desc = infoDescriptions[key] || '[Add description for this section here]';\n                var existing = document.querySelector('.lp360-info-popover');\n                if (existing) {\n                    document.body.removeChild(existing);\n                }\n                var popup = document.createElement('div');\n                popup.className = 'lp360-info-popover';\n                popup.setAttribute('role', 'dialog');\n                popup.setAttribute('aria-modal', 'true');\n                var label = key.replace(\/_\/g, ' ').replace(\/\\b\\w\/g, function(l) { return l.toUpperCase(); });\n                popup.innerHTML = '<div class=\"lp360-info-popover__content\">' +\n                    '<button class=\"lp360-info-popover__close\" aria-label=\"Close info\">&times;<\/button>' +\n                    '<div class=\"lp360-info-popover__icon\">' +\n                    '<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">' +\n                    '<circle cx=\"12\" cy=\"12\" r=\"10\"\/><path d=\"M12 16v-4M12 8h.01\"\/>' +\n                    '<\/svg>' +\n                    '<\/div>' +\n                    '<div class=\"lp360-info-popover__title\">' + label + '<\/div>' +\n                    '<div class=\"lp360-info-popover__desc\">' + desc.replace(\/\\n\/g, '<br>') + '<\/div>' +\n                    '<span class=\"lp360-info-popover__badge\">Info<\/span>' +\n                    '<\/div>';\n                document.body.appendChild(popup);\n                var closeBtn = popup.querySelector('.lp360-info-popover__close');\n                closeBtn.addEventListener('click', function() {\n                    document.body.removeChild(popup);\n                });\n                popup.addEventListener('click', function(e) {\n                    if (e.target === popup) {\n                        document.body.removeChild(popup);\n                    }\n                });\n                document.addEventListener('keydown', function handler(e) {\n                    if (e.key === 'Escape') {\n                        var p = document.querySelector('.lp360-info-popover');\n                        if (p) {\n                            document.body.removeChild(p);\n                        }\n                        document.removeEventListener('keydown', handler);\n                    }\n                });\n            }\n            \/\/ ---- Show no-attempts overlay ----\n           \nfunction showNoAttemptsOverlay(message) {\n    \/\/ Remove any existing overlay\n    var existing = document.querySelector('.lp360-no-attempts-overlay');\n    if (existing) {\n        document.body.removeChild(existing);\n    }\n\n    \/\/ Get the URL to go back to (the page the student came from)\n    var retakeUrl = document.referrer;\n\n    \/\/ If no referrer or referrer is from a different site, build a fallback URL\n    if (!retakeUrl || retakeUrl.indexOf(window.location.origin) === -1) {\n        retakeUrl = window.location.origin + window.location.pathname;\n        var queryParts = [];\n        if (attemptId) { queryParts.push('attempt_id=' + attemptId); }\n        if (queryParts.length > 0) {\n            retakeUrl = retakeUrl + '?' + queryParts.join('&');\n        }\n        if (!attemptId) {\n            retakeUrl = window.location.origin + '\/';\n        }\n    }\n\n    var overlay = document.createElement('div');\n    overlay.className = 'lp360-no-attempts-overlay';\n    overlay.innerHTML =\n        '<div class=\"lp360-no-attempts-card lp360-no-attempts-card--red\">' +\n        '<div class=\"lp360-no-attempts-icon lp360-no-attempts-icon--red\">' +\n        '<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">' +\n        '<path d=\"M12 2L2 20h20L12 2z\"\/>' +\n        '<line x1=\"12\" y1=\"9\" x2=\"12\" y2=\"13\"\/>' +\n        '<circle cx=\"12\" cy=\"17\" r=\"1\" fill=\"currentColor\"\/>' +\n        '<\/svg>' +\n        '<\/div>' +\n        '<h2 class=\"lp360-no-attempts-title lp360-no-attempts-title--red\">No Questions Attempted<\/h2>' +\n        '<p class=\"lp360-no-attempts-message\">' + message + '<\/p>' +\n        '<a href=\"' + retakeUrl + '\" class=\"lp360-no-attempts-badge lp360-no-attempts-badge--red\">Please Try Again<\/a>' +\n        '<\/div>';\n\n    document.body.appendChild(overlay);\n\n    \/\/ NOTE: We deliberately do NOT add click or keydown listeners to close the overlay.\n    \/\/ The only way to dismiss it is to click the \"Please Try Again\" link.\n}\n            \/\/ ---- Main render from API ----\n            function renderFullPage(apiResponse) {\n                var analytics = apiResponse.analytics_json;\n                var result = apiResponse.result || {};\n\n                var basic = analytics.basic_info || {};\n                var basicInfoData = {\n                    score: {\n                        obtained: basic.total_score || 0,\n                        total: result.max_score || 100\n                    },\n                    timeUsedSeconds: basic.total_time || 0,\n                    totalAttempts: basic.total_attempts || 0,\n                    timePerQuestion: {\n                        max: { value: basic.max_time_q ? basic.max_time_q.time : 0, questionTag: basic.max_time_q ?\n                                'Q' + basic.max_time_q.question : '' },\n                        min: { value: basic.min_time_q ? basic.min_time_q.time : 0, questionTag: basic.min_time_q ?\n                                'Q' + basic.min_time_q.question : '' },\n                        avg: { value: basic.avg_time_per_q || 0 }\n                    },\n                    breakdown: {\n                        correct: {\n                            total: (basic.correct_counts ? basic.correct_counts.single + basic.correct_counts\n                                .multiple + basic.correct_counts.reviewed + basic.correct_counts.skipped : 0),\n                            single: basic.correct_counts ? basic.correct_counts.single : 0,\n                            multiple: basic.correct_counts ? basic.correct_counts.multiple : 0,\n                            reviewed: basic.correct_counts ? basic.correct_counts.reviewed : 0,\n                            skipped: basic.correct_counts ? basic.correct_counts.skipped : 0\n                        },\n                        incorrect: {\n                            total: (basic.incorrect_counts ? basic.incorrect_counts.single + basic.incorrect_counts\n                                .multiple + basic.incorrect_counts.reviewed + basic.incorrect_counts.skipped : 0),\n                            single: basic.incorrect_counts ? basic.incorrect_counts.single : 0,\n                            multiple: basic.incorrect_counts ? basic.incorrect_counts.multiple : 0,\n                            reviewed: basic.incorrect_counts ? basic.incorrect_counts.reviewed : 0,\n                            skipped: basic.incorrect_counts ? basic.incorrect_counts.skipped : 0\n                        },\n                        unattempted: {\n                            total: (basic.unattempted_counts ? basic.unattempted_counts.skipped + basic\n                                .unattempted_counts.reviewed_unattempted + basic.unattempted_counts.not_viewed : 0),\n                            skipped: basic.unattempted_counts ? basic.unattempted_counts.skipped : 0,\n                            reviewed: basic.unattempted_counts ? basic.unattempted_counts.reviewed_unattempted : 0,\n                            notViewed: basic.unattempted_counts ? basic.unattempted_counts.not_viewed : 0\n                        }\n                    }\n                };\n                renderBasicInfo(basicInfoData);\n\n                \/\/ ---- DECISION MARKER: always 10\u2011minute intervals & aggregate data ----\n                var dm = analytics.decision_marker || {};\n                var intervalKeys = [];\n                for (var key in dm) {\n                    if (key !== 'inference') {\n                        if (key !== 'totals') {\n                            if (!isNaN(key)) {\n                                intervalKeys.push(Number(key));\n                            }\n                        }\n                    }\n                }\n                intervalKeys.sort(function(a, b) { return a - b; });\n                var maxKey = 0;\n                if (intervalKeys.length) {\n                    maxKey = Math.max.apply(null, intervalKeys);\n                }\n                \/\/ Always use 10\u2011minute step, round up to nearest 10\n                var step = 10;\n                var displayMax = Math.ceil(maxKey \/ step) * step;\n                if (displayMax === 0) displayMax = step;\n                var intervals = [];\n                for (var start = 0; start < displayMax; start += step) {\n                    intervals.push(start + '-' + (start + step));\n                }\n\n                var rowData = {\n                    'correct': [],\n                    'incorrect': []\n                };\n                \/\/ Initialize empty arrays for each interval\n                for (var i = 0; i < intervals.length; i++) {\n                    rowData['correct'].push([]);\n                    rowData['incorrect'].push([]);\n                }\n\n                \/\/ Distribute backend data into the 10-minute buckets\n                for (var key in dm) {\n                    if (key === 'inference' || key === 'totals') continue;\n                    var numKey = parseInt(key, 10);\n                    if (isNaN(numKey)) continue;\n\n                    \/\/ Find the interval bucket for this key\n                    for (var i = 0; i < intervals.length; i++) {\n                        var parts = intervals[i].split('-');\n                        var endVal = parseInt(parts[1], 10);\n                        if (numKey <= endVal) {\n                            var bucket = dm[key] || { correct: [], incorrect: [] };\n                            var correctArr = bucket.correct || [];\n                            var incorrectArr = bucket.incorrect || [];\n                            for (var c = 0; c < correctArr.length; c++) {\n                                rowData['correct'][i].push(correctArr[c]);\n                            }\n                            for (var c = 0; c < incorrectArr.length; c++) {\n                                rowData['incorrect'][i].push(incorrectArr[c]);\n                            }\n                            break; \/\/ Move to the next key\n                        }\n                    }\n                }\n\n                var totals = dm.totals || { attempt: 0, correct: 0, incorrect: 0 };\n                var summary = [];\n                summary.push({ key: 'attempt', label: 'Total Attempt', value: totals.attempt || 0 });\n                summary.push({ key: 'correct', label: 'Total Correct', value: totals.correct || 0 });\n                summary.push({ key: 'incorrect', label: 'Total Incorrect', value: totals.incorrect || 0 });\n\n                var decisionData = {\n                    timeIntervals: intervals,\n                    cells: rowData,\n                    summary: summary,\n                    inference: dm.inference || ''\n                };\n                renderDecisionMarker(decisionData);\n\n                \/\/ ---- Tracker ----\n                var tracker = analytics.tracker || {};\n                var scoreTracker = tracker.score_tracker || {};\n                var accuracyTracker = tracker.accuracy_tracker || {};\n                var perf = analytics.performance_analytics || {};\n                var timeTracker = perf.time_analytics || {};\n\n                var scoreData = {\n                    attempts: scoreTracker.labels || [],\n                    scores: scoreTracker.scores || [],\n                    inference: scoreTracker.inference || ''\n                };\n                renderTracker(scoreData);\n                var accLabels = accuracyTracker.labels || [];\n                var accLabelsText = accuracyTracker.labels_text || [];\n                var accValues = accuracyTracker.accuracies || [];\n                var xTicks = accuracyTracker.x_ticks || [];\n                var xTicksText = accuracyTracker.x_ticks_text || [];\n\n                var timePoints = accLabels.slice();\n                var accuracyValues = [];\n                for (var accIdx = 0; accIdx < accValues.length; accIdx++) {\n                    accuracyValues.push(Math.round(accValues[accIdx] * 100));\n                }\n\n                var accData = {\n                    timePoints: timePoints,\n                    accuracyValues: accuracyValues,\n                    labelsText: accLabelsText,\n                    xTicks: xTicks,\n                    xTicksText: xTicksText\n                };\n                renderAccuracyTracker(accData);\n\n                \/\/ ---- Time tracker ----\n                var frontendRanges = ['0-30', '30-60', '60-90', '90+'];\n                var backendRangeMap = {\n                    '0-30': '0-30',\n                    '30-60': '30-60',\n                    '60-90': '60-90',\n                    '90+': '>90'\n                };\n                var attemptRateByRange = {};\n                var correctRateByRange = {};\n                var timeUsedByRange = {};\n                for (var tr = 0; tr < frontendRanges.length; tr++) {\n                    var range = frontendRanges[tr];\n                    var backendKey = backendRangeMap[range];\n                    var data = timeTracker[backendKey] || { attempts: 0, correct: 0, time_used: 0 };\n                    attemptRateByRange[range] = data.attempts || 0;\n                    correctRateByRange[range] = data.correct || 0;\n                    timeUsedByRange[range] = (data.time_used || 0) \/ 60;\n                }\n\n                var timeTrackerData = {\n                    attemptRateByRange: attemptRateByRange,\n                    correctRateByRange: correctRateByRange,\n                    timeUsedByRange: timeUsedByRange,\n                    inferences: {\n                        attempt: 'Highest attempt activity was observed during the ' + (Object.keys(\n                            attemptRateByRange).reduce(function(a, b) { return attemptRateByRange[a] >\n                                attemptRateByRange[b] ? a : b; })) + ' time interval.',\n                        correct: 'The highest number of correct answers was recorded during the ' + (Object.keys(\n                            correctRateByRange).reduce(function(a, b) { return correctRateByRange[a] >\n                                correctRateByRange[b] ? a : b; })) + ' time interval.'\n                    }\n                };\n\n                var defaultRange = '0-30';\n                var attemptCanvas = document.getElementById('lp360-gauge-attempt');\n                var correctCanvas = document.getElementById('lp360-gauge-correct');\n                var timeCanvas = document.getElementById('lp360-gauge-time');\n                if (attemptCanvas) { attemptCanvas.dataset.value = attemptRateByRange[defaultRange] || 0; }\n                if (correctCanvas) { correctCanvas.dataset.value = correctRateByRange[defaultRange] || 0; }\n                var defaultTimeGaugeConfig = getTimeGaugeConfig(timeUsedByRange[defaultRange] || 0);\n                if (timeCanvas) {\n                    timeCanvas.dataset.value = defaultTimeGaugeConfig.value;\n                    timeCanvas.dataset.max = defaultTimeGaugeConfig.max;\n                }\n                var attemptValEl = attemptCanvas ? attemptCanvas.parentElement.parentElement.querySelector(\n                    '.lp360-gauge-column-value') : null;\n                var correctValEl = correctCanvas ? correctCanvas.parentElement.parentElement.querySelector(\n                    '.lp360-gauge-column-value') : null;\n                var timeValEl = timeCanvas ? timeCanvas.parentElement.parentElement.querySelector(\n                    '.lp360-gauge-column-value') : null;\n                if (attemptValEl) { attemptValEl.innerHTML = attemptRateByRange[defaultRange] || 0; }\n                if (correctValEl) { correctValEl.innerHTML = correctRateByRange[defaultRange] || 0; }\n                if (timeValEl) {\n                    var minutes = timeUsedByRange[defaultRange] || 0;\n                    timeValEl.innerHTML = formatTimeDisplayGauge(minutes);\n                }\n\n                var inf1 = document.getElementById('lp360-time-inf1');\n                var inf2 = document.getElementById('lp360-time-inf2');\n                if (inf1) { inf1.textContent = timeTrackerData.inferences.attempt; }\n                if (inf2) { inf2.textContent = timeTrackerData.inferences.correct; }\n\n                initTimeTabs(timeTrackerData);\n                renderTimeGauges();\n            }\n\n            \/\/ ---- Fetch and render ----\n            var API_BASE = 'https:\/\/launchpad-api-770009272949.asia-south1.run.app';\n            var params = new URLSearchParams(window.location.search);\n            var attemptId = params.get('attempt_id');\nvar examTypeParam = params.get('exam_type');\nvar tokenParam = params.get('token');\nvar expiresParam = params.get('expires');\n\nif (attemptId) {\n    var AMP = String.fromCharCode(38);\n    var url = API_BASE + '\/api\/analytics-by-attempt\/' + attemptId;\n    var urlParams = [];\n    if (examTypeParam) {\n        urlParams.push('exam_type=' + encodeURIComponent(examTypeParam));\n    }\n    if (tokenParam) {\n        urlParams.push('token=' + encodeURIComponent(tokenParam));\n    }\n    if (expiresParam) {\n        urlParams.push('expires=' + encodeURIComponent(expiresParam));\n    }\n    if (urlParams.length) {\n        url = url + '?' + urlParams.join(AMP);\n    }\n    fetch(url)\n        .then(function(response) {\n                        if (!response.ok) {\n                            throw new Error('Network response was not ok: ' + response.status);\n                        }\n                        return response.json();\n                    })\n                    .then(function(data) {\n    var isInsufficient = false;\n    if (data.analytics_json) {\n        if (data.analytics_json.insufficient_data) {\n            isInsufficient = true;\n        }\n        \/\/ Also check if total_attempts is 0\n        if (data.analytics_json.basic_info && data.analytics_json.basic_info.total_attempts === 0) {\n            isInsufficient = true;\n        }\n    }\n    if (isInsufficient) {\n        var noAttemptsMsg = data.analytics_json.insufficient_data_message || 'You have not attempted enough questions so that the algorithm is unable to properly analyse your capabilities. Please retake the exam with consistent answering.';\n        showNoAttemptsOverlay(noAttemptsMsg);\n        return; \/\/ stop rendering the dashboard\n    }\n    renderFullPage(data);\n})\n                    .catch(function(error) {\n                        console.error('Error fetching analytics:', error);\n                        var shell = document.querySelector('.lp360-shell');\n                        if (shell) {\n                            shell.innerHTML =\n                                '<div style=\"text-align:center;padding:40px;color:#EF4444;\"><h2>\u26a0\ufe0f Unable to load analytics<\/h2><p>' +\n                                error.message + '<\/p><p>Please check your attempt ID or try again later.<\/p><\/div>';\n                        }\n                    });\n            } else {\n                var shell = document.querySelector('.lp360-shell');\n                if (shell) {\n                    shell.innerHTML =\n                        '<div style=\"text-align:center;padding:40px;\"><h2>Missing Attempt ID<\/h2><p>Please provide a valid attempt_id in the URL.<\/p><\/div>';\n                }\n            }\n            \/\/ ---- Tab switching ----\n            var tabs = document.querySelectorAll('#lp360-root .lp360-tab');\n            var tabOrder = ['basicinfo', 'tracker', 'answerkey'];\n\n            var isProgrammaticScroll = false;\n\n            function activateTab(tabId) {\n                var allTabs = document.querySelectorAll('#lp360-root .lp360-tab');\n                for (var at = 0; at < allTabs.length; at++) {\n                    allTabs[at].classList.remove('active');\n                    allTabs[at].setAttribute('aria-selected', 'false');\n                }\n                var targetTab = document.querySelector('#lp360-root .lp360-tab[data-tab=\"' + tabId + '\"]');\n                if (targetTab) {\n                    targetTab.classList.add('active');\n                    targetTab.setAttribute('aria-selected', 'true');\n                }\n                var panels = document.querySelectorAll('#lp360-root .lp360-tab-panel');\n                for (var ap = 0; ap < panels.length; ap++) {\n                    panels[ap].classList.remove('active');\n                }\n                var targetPanel = document.getElementById('lp360-panel-' + tabId);\n                if (targetPanel) {\n                    targetPanel.classList.add('active');\n                    var stickyOffset = 0;\n                    var tabsBar = document.querySelector('#lp360-root .lp360-tabs');\n                    if (tabsBar) {\n                        stickyOffset = tabsBar.getBoundingClientRect().height + 16;\n                    }\n                    var targetTop = targetPanel.getBoundingClientRect().top + window.pageYOffset - stickyOffset;\n                    isProgrammaticScroll = true;\n                    window.scrollTo({\n                        top: targetTop,\n                        behavior: 'smooth'\n                    });\n                    setTimeout(function() {\n                        isProgrammaticScroll = false;\n                    }, 700);\n                }\n                if (tabId === 'tracker') {\n                    setTimeout(function() {\n                        renderTracker(null);\n                        renderAccuracyTracker(null);\n                        renderTimeGauges();\n                    }, 50);\n                }\n            }\n\n            for (var ti = 0; ti < tabs.length; ti++) {\n                var tab = tabs[ti];\n                tab.addEventListener('click', function() {\n                    var tabId = this.getAttribute('data-tab');\n                    activateTab(tabId);\n                });\n            }\n\n            \/\/ ---- Scroll-position tab highlighting ----\n            function updateActiveTabOnScroll() {\n                if (isProgrammaticScroll) { return; }\n                var tabsBar = document.querySelector('#lp360-root .lp360-tabs');\n                var stickyOffset = 24;\n                if (tabsBar) {\n                    stickyOffset = tabsBar.getBoundingClientRect().height + 24;\n                }\n                var panels = document.querySelectorAll('#lp360-root .lp360-tab-panel');\n                var currentTabId = tabOrder[0];\n                for (var i = 0; i < panels.length; i++) {\n                    var panel = panels[i];\n                    var rect = panel.getBoundingClientRect();\n                    if (rect.top - stickyOffset <= 0) {\n                        currentTabId = panel.id.replace('lp360-panel-', '');\n                    }\n                }\n                var allTabs = document.querySelectorAll('#lp360-root .lp360-tab');\n                for (var at = 0; at < allTabs.length; at++) {\n                    allTabs[at].classList.remove('active');\n                    allTabs[at].setAttribute('aria-selected', 'false');\n                }\n                var activeTabBtn = document.querySelector('#lp360-root .lp360-tab[data-tab=\"' + currentTabId + '\"]');\n                if (activeTabBtn) {\n                    activeTabBtn.classList.add('active');\n                    activeTabBtn.setAttribute('aria-selected', 'true');\n                }\n                var allPanels = document.querySelectorAll('#lp360-root .lp360-tab-panel');\n                for (var ap = 0; ap < allPanels.length; ap++) {\n                    allPanels[ap].classList.remove('active');\n                }\n                var activePanelEl = document.getElementById('lp360-panel-' + currentTabId);\n                if (activePanelEl) { activePanelEl.classList.add('active'); }\n            }\n            var scrollSpyTimeout;\n            window.addEventListener('scroll', function() {\n                clearTimeout(scrollSpyTimeout);\n                scrollSpyTimeout = setTimeout(updateActiveTabOnScroll, 60);\n            });\n            updateActiveTabOnScroll();\n\n            \/\/ ---- Resize handler ----\n            var resizeTimer;\n            window.addEventListener('resize', function() {\n                clearTimeout(resizeTimer);\n                resizeTimer = setTimeout(function() {\n                    var trackerPanel = document.getElementById('lp360-panel-tracker');\n                    if (trackerPanel) {\n                        if (trackerPanel.classList.contains('active')) {\n                            renderTracker(null);\n                            renderAccuracyTracker(null);\n                            renderTimeGauges();\n                        }\n                    }\n                }, 200);\n            });\n            \/\/ ---- Info button delegation ----\n            document.addEventListener('click', function(e) {\n                var btn = e.target.closest('.lp360-info-btn');\n                if (btn) {\n                    var key = btn.getAttribute('data-info-key');\n                    if (key) {\n                        e.preventDefault();\n                        showInfoPopup(key);\n                    }\n                }\n            });\n\n            document.addEventListener('click', function(e) {\n                var qEl = e.target.closest('.lp360-dm-chip, .lp360-time-card-badge');\n                if (qEl) {\n                    var qNum = qEl.getAttribute('data-qnum');\n                    if (qNum) {\n                        e.preventDefault();\n                        if (typeof window.lp360JumpToAnswerKeyQuestion === 'function') {\n                            window.lp360JumpToAnswerKeyQuestion(qNum);\n                        } else {\n                            var tabBtn = document.querySelector('#lp360-root .lp360-tab[data-tab=\"answerkey\"]');\n                            if (tabBtn) { tabBtn.click(); }\n                        }\n                    }\n                }\n            });\n\n        })();\n    <\/script>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>CUET PREVIOUSYEAR Questions Launchpad 360 CUET Launchpad 360 Basic Info Tracker Answer Key Basic Info YOUR SCORE 0\/100 TIME USED [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"full-width-container","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"class_list":["post-242","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/massgraduates.com\/index.php\/wp-json\/wp\/v2\/pages\/242","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/massgraduates.com\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/massgraduates.com\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/massgraduates.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/massgraduates.com\/index.php\/wp-json\/wp\/v2\/comments?post=242"}],"version-history":[{"count":2,"href":"https:\/\/massgraduates.com\/index.php\/wp-json\/wp\/v2\/pages\/242\/revisions"}],"predecessor-version":[{"id":329,"href":"https:\/\/massgraduates.com\/index.php\/wp-json\/wp\/v2\/pages\/242\/revisions\/329"}],"wp:attachment":[{"href":"https:\/\/massgraduates.com\/index.php\/wp-json\/wp\/v2\/media?parent=242"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}