{"id":164,"date":"2026-03-31T07:28:36","date_gmt":"2026-03-31T07:28:36","guid":{"rendered":"https:\/\/ph-taskportal.zyneventures.com\/?page_id=164"},"modified":"2026-07-09T09:23:52","modified_gmt":"2026-07-09T09:23:52","slug":"revert-error-logs","status":"publish","type":"page","link":"https:\/\/ph-portal-v2.zyneventures.com\/index.php\/revert-error-logs\/","title":{"rendered":"Revert Error Logs"},"content":{"rendered":"<style>.kadence-column164_e2b00f-a7 > .kt-inside-inner-col,.kadence-column164_e2b00f-a7 > .kt-inside-inner-col:before{border-top-left-radius:0px;border-top-right-radius:0px;border-bottom-right-radius:0px;border-bottom-left-radius:0px;}.kadence-column164_e2b00f-a7 > .kt-inside-inner-col{column-gap:var(--global-kb-gap-sm, 1rem);}.kadence-column164_e2b00f-a7 > .kt-inside-inner-col{flex-direction:column;}.kadence-column164_e2b00f-a7 > .kt-inside-inner-col > .aligncenter{width:100%;}.kadence-column164_e2b00f-a7 > .kt-inside-inner-col:before{opacity:0.3;}.kadence-column164_e2b00f-a7{position:relative;}@media all and (max-width: 1024px){.kadence-column164_e2b00f-a7 > .kt-inside-inner-col{flex-direction:column;justify-content:center;}}@media all and (max-width: 767px){.kadence-column164_e2b00f-a7 > .kt-inside-inner-col{flex-direction:column;justify-content:center;}}<\/style>\n<div class=\"wp-block-kadence-column kadence-column164_e2b00f-a7\"><div class=\"kt-inside-inner-col\"><style>.kb-row-layout-id164_ad2a66-f3 > .kt-row-column-wrap{align-content:start;}:where(.kb-row-layout-id164_ad2a66-f3 > .kt-row-column-wrap) > .wp-block-kadence-column{justify-content:start;}.kb-row-layout-id164_ad2a66-f3 > .kt-row-column-wrap{column-gap:var(--global-kb-gap-md, 2rem);row-gap:var(--global-kb-gap-md, 2rem);padding-top:0px;padding-right:0px;padding-bottom:0px;padding-left:0px;grid-template-columns:minmax(0, 1fr);}.kb-row-layout-id164_ad2a66-f3 > .kt-row-layout-overlay{opacity:0.30;}@media all and (max-width: 1024px){.kb-row-layout-id164_ad2a66-f3 > .kt-row-column-wrap{grid-template-columns:minmax(0, 1fr);}}@media all and (max-width: 767px){.kb-row-layout-id164_ad2a66-f3 > .kt-row-column-wrap{grid-template-columns:minmax(0, 1fr);}}<\/style><div class=\"kb-row-layout-wrap kb-row-layout-id164_ad2a66-f3 alignnone wp-block-kadence-rowlayout\"><div class=\"kt-row-column-wrap kt-has-1-columns kt-row-layout-equal kt-tab-layout-inherit kt-mobile-layout-row kt-row-valign-top\">\n<style>.kadence-column164_ef6b9e-f2 > .kt-inside-inner-col,.kadence-column164_ef6b9e-f2 > .kt-inside-inner-col:before{border-top-left-radius:0px;border-top-right-radius:0px;border-bottom-right-radius:0px;border-bottom-left-radius:0px;}.kadence-column164_ef6b9e-f2 > .kt-inside-inner-col{column-gap:var(--global-kb-gap-sm, 1rem);}.kadence-column164_ef6b9e-f2 > .kt-inside-inner-col{flex-direction:column;}.kadence-column164_ef6b9e-f2 > .kt-inside-inner-col > .aligncenter{width:100%;}.kadence-column164_ef6b9e-f2 > .kt-inside-inner-col:before{opacity:0.3;}.kadence-column164_ef6b9e-f2{position:relative;}@media all and (max-width: 1024px){.kadence-column164_ef6b9e-f2 > .kt-inside-inner-col{flex-direction:column;justify-content:center;}}@media all and (max-width: 767px){.kadence-column164_ef6b9e-f2 > .kt-inside-inner-col{flex-direction:column;justify-content:center;}}<\/style>\n<div class=\"wp-block-kadence-column kadence-column164_ef6b9e-f2\"><div class=\"kt-inside-inner-col\">\n<style>\n    :root {\n        --primary-blue: #0180FF;\n        --hover-blue: #3499FF;\n        --text-dark: #212529;\n        --text-muted: #8D8C9C;\n        --border-color: #EFEFEF;\n        --success-green: #1E8E3E;\n        --error-red: #D93025;\n        --bg-light: #F8F9FA;\n    }\n\n    * { box-sizing: border-box; }\n\n    body {\n        font-family: 'Sora', sans-serif;\n        color: var(--text-dark);\n        line-height: 1.5;\n        background: #fff;\n    }\n\n    \/* \u2500\u2500 Header \u2500\u2500 *\/\n    .header-container {\n        display: flex;\n        justify-content: space-between;\n        align-items: center;\n        margin-bottom: 25px;\n        flex-wrap: wrap;\n        gap: 12px;\n    }\n    .title-group { display: flex; align-items: center; gap: 10px; }\n    .title-group h2 {\n        margin: 0;\n        font-size: 21px;\n        font-weight: 500;\n        text-transform: uppercase;\n        letter-spacing: 0.3px;\n    }\n    .count { color: var(--text-muted); font-size: 16px; font-weight: 400; }\n\n    \/* \u2500\u2500 Filter Bar \u2500\u2500 *\/\n    .filter-bar {\n        display: flex;\n        align-items: center;\n        gap: 12px;\n        margin-bottom: 20px;\n        flex-wrap: wrap;\n    }\n\n    .btn {\n        padding: 9px 22px;\n        border-radius: 6px;\n        font-size: 12px;\n        font-weight: 500;\n        cursor: pointer;\n        border: none;\n        transition: background 0.2s;\n        font-family: 'Sora', sans-serif;\n        white-space: nowrap;\n    }\n    .btn-filter   { background: var(--primary-blue); color: #fff; }\n    .btn-filter:hover  { background: var(--hover-blue); }\n    .btn-download { background: var(--primary-blue); color: #fff; }\n    .btn-download:hover { background: var(--hover-blue); }\n\n    \/* \u2500\u2500 Clear Filter Button \u2500\u2500 *\/\n    .btn-clear-filter {\n        background: #D9DDEF;\n        color: #212529;\n        border: none;\n    }\n    .btn-clear-filter:hover {\n        background: #c8ccdf;\n    }\n   \n\n    \/* \u2500\u2500 Custom Date Picker \u2500\u2500 *\/\n    .date-wrapper {\n        position: relative;\n    }\n    .date-wrapper input[type=\"text\"] {\n        width: 100%;\n        padding: 10px 36px 10px 14px;\n        border: 1px solid #E0E0E0;\n        border-radius: 6px;\n        font-family: 'Sora', sans-serif;\n        font-size: 12px;\n        color: var(--text-dark);\n        outline: none;\n        cursor: pointer;\n        background: #fff;\n        transition: border-color 0.2s;\n        user-select: none;\n        height: 38px;\n        box-sizing: border-box;\n    }\n    .date-wrapper input[type=\"text\"]:focus { border-color: var(--primary-blue); }\n    .date-wrapper input[type=\"text\"]::placeholder { color: #aaa; }\n    .date-wrapper .cal-icon {\n        position: absolute;\n        right: 12px;\n        top: 50%;\n        transform: translateY(-50%);\n        pointer-events: none;\n        color: #8D8C9C;\n    }\n\n    \/* Custom Date Picker Dropdown *\/\n    .dp-dropdown {\n        display: none;\n        position: absolute;\n        top: calc(100% + 6px);\n        left: 0;\n        z-index: 2000;\n        background: #fff;\n        border: 1px solid #E0E0E0;\n        border-radius: 10px;\n        box-shadow: 0 8px 28px rgba(0,0,0,0.13);\n        flex-direction: row;\n        width: 680px;\n        max-width: calc(100vw - 24px);\n        overflow: hidden;\n    }\n    .dp-dropdown.open { display: flex; }\n    .dp-dropdown.align-right { left: auto; right: 0; }\n\n    .dp-backdrop {\n        display: none;\n        position: fixed;\n        inset: 0;\n        z-index: 1999;\n    }\n    .dp-backdrop.show { display: block; }\n\n    .dp-presets {\n        width: 140px;\n        border-right: 1px solid #EFEFEF;\n        display: flex;\n        flex-direction: column;\n        background: #fff;\n        padding: 8px 0;\n        flex-shrink: 0;\n    }\n    .dp-preset-item {\n        padding: 10px 16px;\n        font-size: 13px;\n        color: #3c4043;\n        cursor: pointer;\n        transition: all 0.2s;\n        white-space: nowrap;\n    }\n    .dp-preset-item:hover { background: #F1F3F4; }\n    .dp-preset-item.active {\n        background: var(--primary-blue);\n        color: #fff;\n        font-weight: 500;\n    }\n\n    \/* Two-month panel container *\/\n    .dp-calendars-wrap {\n        flex: 1;\n        display: flex;\n        flex-direction: column;\n        padding: 8px 10px 8px;\n        min-width: 0;\n    }\n    .dp-months-row {\n        display: flex;\n        gap: 0;\n        flex: 1;\n    }\n    .dp-calendar {\n        flex: 1;\n        padding: 0 6px;\n        min-width: 0;\n    }\n    .dp-calendar + .dp-calendar {\n        border-left: 1px solid #EFEFEF;\n    }\n    .dp-cal-header {\n        display: flex;\n        justify-content: space-between;\n        align-items: center;\n        margin-bottom: 6px;\n    }\n    .dp-cal-title {\n        font-size: 14px;\n        font-weight: 600;\n        color: #3c4043;\n        margin: 0;\n        text-align: center;\n        flex: 1;\n    }\n    .dp-nav-btn {\n        background: none;\n        border: none;\n        cursor: pointer;\n        padding: 6px;\n        color: #5f6368;\n        display: flex;\n        align-items: center;\n        justify-content: center;\n        border-radius: 50%;\n        transition: background 0.2s;\n    }\n    .dp-nav-btn:hover { background: #F1F3F4; }\n    .dp-nav-btn.dp-nav-hidden { visibility: hidden; pointer-events: none; }\n    .dp-weekdays {\n        display: grid;\n        grid-template-columns: repeat(7, 1fr);\n        margin-bottom: 2px;\n    }\n    .dp-weekday {\n        text-align: center;\n        font-size: 11px;\n        font-weight: 500;\n        color: #8D8C9C;\n        padding: 2px 0;\n    }\n    .dp-days {\n        display: grid;\n        grid-template-columns: repeat(7, 1fr);\n        gap: 1px;\n    }\n    .dp-day {\n        text-align: center;\n        padding: 2px 0;\n        font-size: 11px;\n        border-radius: 50%;\n        cursor: pointer;\n        color: var(--text-dark);\n        transition: background 0.15s, color 0.15s;\n        aspect-ratio: 1;\n        display: flex;\n        align-items: center;\n        justify-content: center;\n    }\n    .dp-day:hover { background: #e8f1ff; color: var(--primary-blue); }\n    .dp-day.today {\n        background: #F1F3F4;\n        border-radius: 50% !important;\n        font-weight: 600;\n    }\n    .dp-day.selected {\n        background: var(--primary-blue) !important;\n        color: #fff !important;\n        font-weight: 600;\n        border-radius: 4px !important;\n        z-index: 2;\n    }\n    .dp-day.in-range, .dp-day.hover-range {\n        background: #E8F0FE !important;\n        color: #3c4043;\n        border-radius: 0;\n    }\n    .dp-day.selected-start, .dp-day.row-start, .dp-day.hover-start {\n        border-top-left-radius: 4px !important;\n        border-bottom-left-radius: 4px !important;\n    }\n    .dp-day.selected-end, .dp-day.row-end, .dp-day.hover-end {\n        border-top-right-radius: 4px !important;\n        border-bottom-right-radius: 4px !important;\n    }\n    .dp-day.selected-start.selected-end {\n        border-radius: 4px !important;\n    }\n    .dp-day.other-month { color: #ccc; }\n    .dp-day.other-month:hover { background: #f5f5f5; color: #aaa; }\n    .dp-footer {\n        display: flex;\n        justify-content: space-between;\n        align-items: center;\n        gap: 12px;\n        margin-top: 10px;\n        padding: 12px 16px;\n        border-top: 1px solid #EFEFEF;\n    }\n    .dp-range-display {\n        font-size: 12px;\n        color: #333;\n        font-weight: 500;\n    }\n    .dp-footer-btns {\n        display: flex;\n        gap: 8px;\n    }\n    .dp-btn-clear {\n        padding: 8px 16px;\n        border-radius: 8px;\n        font-size: 12px;\n        font-family: 'Sora', sans-serif;\n        background: #F1F3F4;\n        color: #3c4043;\n        border: none;\n        cursor: pointer;\n        font-weight: 500;\n        transition: background 0.2s;\n    }\n    .dp-btn-clear:hover { background: #E8EAED; }\n    .dp-btn-apply {\n        padding: 8px 24px;\n        border-radius: 8px;\n        font-size: 12px;\n        font-family: 'Sora', sans-serif;\n        background: var(--primary-blue);\n        color: #fff;\n        border: none;\n        cursor: pointer;\n        font-weight: 500;\n        transition: background 0.2s;\n    }\n    .dp-btn-apply:hover { background: var(--hover-blue); }\n\n    @media (max-width: 750px) {\n        .dp-dropdown {\n            flex-direction: column;\n            min-width: 0;\n            width: calc(100vw - 32px);\n            left: 50%;\n            transform: translateX(-50%);\n            max-height: 85vh;\n            overflow-y: auto;\n        }\n        .dp-presets {\n            width: 100%;\n            border-right: none;\n            border-bottom: 1px solid #EFEFEF;\n            padding: 4px 0;\n            display: flex;\n            flex-wrap: wrap;\n        }\n        .dp-preset-item {\n            padding: 6px 10px;\n            font-size: 11px;\n            flex: 1 1 auto;\n            text-align: center;\n            min-width: 80px;\n        }\n        .dp-months-row { flex-direction: column; gap: 10px; }\n        .dp-calendar + .dp-calendar { border-left: none; border-top: 1px solid #EFEFEF; padding-top: 8px; }\n        .dp-calendars-wrap { padding: 6px 8px 8px; }\n        .dp-cal-header { margin-bottom: 6px; }\n        .dp-day { padding: 5px 0; font-size: 11px; }\n        .dp-footer { margin-top: 8px; padding-top: 8px; }\n    }\n    @media (max-width: 480px) {\n        .dp-dropdown {\n            position: fixed;\n            top: 50%;\n            left: 50% !important;\n            transform: translate(-50%, -50%) !important;\n            width: calc(100vw - 24px);\n            max-width: 400px;\n            max-height: 92vh;\n            overflow-y: auto;\n            z-index: 3000;\n        }\n        .dp-calendars-wrap { padding: 6px 6px 6px; }\n        .dp-day { font-size: 11px; padding: 4px 0; }\n        .dp-cal-title { font-size: 12px; }\n        .dp-footer { margin-top: 6px; padding-top: 6px; }\n        .dp-btn-clear, .dp-btn-apply { padding: 5px 10px; font-size: 11px; }\n    }\n\n    \/* \u2500\u2500 Table \u2500\u2500 *\/\n    .table-wrapper {\n        overflow-x: auto;\n        -webkit-overflow-scrolling: touch;\n        border: 1px solid var(--border-color);\n        border-radius: 6px;\n        margin-top: 10px;\n        max-width: 100%;\n    }\n    table {\n        width: 100%;\n        border-collapse: collapse;\n        table-layout: fixed;\n        font-size: 10px;\n        text-align: left;\n        min-width: 1020px;\n        max-width: 100%;\n    }\n    thead th {\n        background: #f5f5f5;\n        color: var(--text-dark);\n        font-weight: 500;\n        padding: 8px 5px;\n        border-bottom: 1px solid var(--border-color);\n        text-transform: uppercase;\n        white-space: normal;\n        word-break: normal;\n        overflow-wrap: anywhere;\n        letter-spacing: 0.2px;\n        font-size: 9px;\n        line-height: 1.25;\n        vertical-align: middle;\n    }\n    tbody td {\n        padding: 8px 5px;\n        border-bottom: 1px solid var(--border-color);\n        color: var(--text-muted);\n        font-size: 9px;\n        font-weight: 400;\n        vertical-align: middle;\n        line-height: 1.25;\n        white-space: normal;\n        word-break: break-word;\n        overflow-wrap: anywhere;\n    }\n    tbody tr:last-child td { border-bottom: none; }\n    tbody tr:hover { background: #fafafa; }\n\n    thead th:nth-child(2),\n    tbody td:nth-child(2) {\n        text-align: center;\n        padding-left: 3px;\n        padding-right: 3px;\n    }\n\n    thead th:nth-child(5),\n    tbody td:nth-child(5),\n    thead th:nth-child(8),\n    tbody td:nth-child(8),\n    thead th:nth-child(11),\n    tbody td:nth-child(11) {\n        white-space: nowrap;\n        word-break: normal;\n        overflow-wrap: normal;\n    }\n\n    \/* Status badges *\/\n    .badge {\n        display: inline-block;\n        padding: 3px 10px;\n        border-radius: 20px;\n        font-size: 12px;\n        font-weight: 400;\n        white-space: nowrap;\n    }\n    .badge-accept  { background: transparent; color: var(--text-muted);}\n    .badge-pending { background: transparent; color: var(--text-muted); }\n    .badge-reject  { background: transparent; color: var(--text-muted); }\n    .badge-void    { background: transparent; color: var(--text-muted); }\n\n    \/* Error type pills *\/\n    .pill {\n        display: inline-block;\n        padding: 2px 8px;\n        border-radius: 4px;\n        font-size: 12px;\n        font-weight: 400;\n        white-space: nowrap;\n    }\n    .pill-critical { background: transparent; color: var(--text-muted); }\n    .pill-minor    { background: transparent; color: var(--text-muted); }\n    .pill-zero     { background: transparent; color: var(--text-muted); }\n\n    \/* No data row *\/\n    .no-data { text-align: center; color: var(--text-muted); padding: 40px; }\n\n    \/* \u2500\u2500 Action column buttons \u2500\u2500 *\/\n    .action-btn-group {\n        display: flex;\n        flex-direction: column;\n        gap: 2px;\n        align-items: flex-start;\n    }\n    .action-link {\n        font-size: 12px;\n        font-weight: 500;\n        text-decoration: underline;\n        cursor: pointer;\n        line-height: 1.6;\n        transition: opacity 0.15s;\n    }\n    .action-link:hover { opacity: 0.75; }\n    .accept-link { color: var(--primary-blue); }\n    .reject-link { color: var(--primary-blue); }\n    .void-link   { color: var(--primary-blue); }\n    .action-applied-text {\n        font-size: 12px;\n        color: var(--text-muted);\n        font-weight: 400;\n        white-space: nowrap;\n    }\n\n    \/* Skeleton loader *\/\n    .skeleton {\n        background: linear-gradient(90deg, #f0f0f0 25%, #e8e8e8 50%, #f0f0f0 75%);\n        background-size: 200% 100%;\n        animation: shimmer 1.2s infinite;\n        border-radius: 4px;\n        height: 14px;\n        display: inline-block;\n        width: 80%;\n    }\n    @keyframes shimmer { 0%{background-position:200% 0} 100%{background-position:-200% 0} }\n\n    \/* \u2500\u2500 Toast \u2500\u2500 *\/\n    #toast {\n        position: fixed;\n        bottom: 30px; right: 30px;\n        background: #333; color: #fff;\n        padding: 12px 20px;\n        border-radius: 8px;\n        font-size: 13px;\n        opacity: 0;\n        pointer-events: none;\n        transition: opacity 0.3s;\n        z-index: 9999;\n    }\n    #toast.show { opacity: 1; }\n\n    \/* \u2500\u2500 Responsive \u2500\u2500 *\/\n    @media (max-width: 768px) {\n        body { padding: 16px; }\n        .filter-bar { flex-direction: column; align-items: flex-start; }\n        .header-container { flex-direction: column; align-items: flex-start; }\n        .btn { width: 100%; text-align: center; }\n        .btn-clear-filter { width: 100%; text-align: center; }\n    }\n<\/style>\n\n<div id=\"toast\"><\/div>\n\n<div class=\"header-container\">\n<div class=\"title-group\">\n    <h2>List View All Revert Error<\/h2>\n    <span class=\"count\" id=\"totalCount\">(0)<\/span>\n<\/div>\n<\/div>\n\n<div class=\"filter-bar\">\n<div class=\"date-wrapper\" id=\"dpWrapperRevert\">\n    <input type=\"text\" id=\"filterRevertDate\" placeholder=\"Select Date\" readonly=\"\" onclick=\"toggleDatePicker(event,'revert')\">\n    <svg class=\"cal-icon\" width=\"16\" height=\"16\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" viewBox=\"0 0 24 24\">\n        <rect x=\"3\" y=\"4\" width=\"18\" height=\"18\" rx=\"2\" ry=\"2\"><\/rect>\n        <line x1=\"16\" y1=\"2\" x2=\"16\" y2=\"6\"><\/line>\n        <line x1=\"8\" y1=\"2\" x2=\"8\" y2=\"6\"><\/line>\n        <line x1=\"3\" y1=\"10\" x2=\"21\" y2=\"10\"><\/line>\n    <\/svg>\n    <div class=\"dp-backdrop\" id=\"dpBackdropRevert\" onclick=\"closeDatePicker('revert')\"><\/div>\n    <div class=\"dp-dropdown\" id=\"dpDropdownRevert\">\n        <div class=\"dp-presets\">\n            <div class=\"dp-preset-item active\" data-preset=\"today\" onclick=\"selectPreset(event,'today','revert')\">Today<\/div>\n            <div class=\"dp-preset-item\" data-preset=\"yesterday\" onclick=\"selectPreset(event,'yesterday','revert')\">Yesterday<\/div>\n            <div class=\"dp-preset-item\" data-preset=\"last7\" onclick=\"selectPreset(event,'last7','revert')\">Last 7 Days<\/div>\n            <div class=\"dp-preset-item\" data-preset=\"last30\" onclick=\"selectPreset(event,'last30','revert')\">Last 30 Days<\/div>\n            <div class=\"dp-preset-item\" data-preset=\"thisMonth\" onclick=\"selectPreset(event,'thisMonth','revert')\">This Month<\/div>\n            <div class=\"dp-preset-item\" data-preset=\"lastMonth\" onclick=\"selectPreset(event,'lastMonth','revert')\">Last Month<\/div>\n        <\/div>\n        <div class=\"dp-calendars-wrap\">\n            <div class=\"dp-months-row\">\n                <div class=\"dp-calendar\">\n                    <div class=\"dp-cal-header\">\n                        <button class=\"dp-nav-btn\" onclick=\"dpChangeMonth(event,-1,'revert')\">\u2039<\/button>\n                        <span class=\"dp-cal-title\" id=\"dpCalTitleRevert\"><\/span>\n                        <button class=\"dp-nav-btn dp-nav-hidden\">\u203a<\/button>\n                    <\/div>\n                    <div class=\"dp-weekdays\">\n                        <div class=\"dp-weekday\">Su<\/div><div class=\"dp-weekday\">Mo<\/div>\n                        <div class=\"dp-weekday\">Tu<\/div><div class=\"dp-weekday\">We<\/div>\n                        <div class=\"dp-weekday\">Th<\/div><div class=\"dp-weekday\">Fr<\/div>\n                        <div class=\"dp-weekday\">Sa<\/div>\n                    <\/div>\n                    <div class=\"dp-days\" id=\"dpDaysRevert\"><\/div>\n                <\/div>\n                <div class=\"dp-calendar\">\n                    <div class=\"dp-cal-header\">\n                        <button class=\"dp-nav-btn dp-nav-hidden\">\u2039<\/button>\n                        <span class=\"dp-cal-title\" id=\"dpCalTitleRevert2\"><\/span>\n                        <button class=\"dp-nav-btn\" onclick=\"dpChangeMonth(event,1,'revert')\">\u203a<\/button>\n                    <\/div>\n                    <div class=\"dp-weekdays\">\n                        <div class=\"dp-weekday\">Su<\/div><div class=\"dp-weekday\">Mo<\/div>\n                        <div class=\"dp-weekday\">Tu<\/div><div class=\"dp-weekday\">We<\/div>\n                        <div class=\"dp-weekday\">Th<\/div><div class=\"dp-weekday\">Fr<\/div>\n                        <div class=\"dp-weekday\">Sa<\/div>\n                    <\/div>\n                    <div class=\"dp-days\" id=\"dpDaysRevert2\"><\/div>\n                <\/div>\n            <\/div>\n            <div class=\"dp-footer\">\n                <div class=\"dp-range-display\" id=\"dpRangeDisplayRevert\">Select Date Range<\/div>\n                <div class=\"dp-footer-btns\">\n                    <button class=\"dp-btn-clear\" onclick=\"dpClear(event,'revert')\">Cancel<\/button>\n                    <button class=\"dp-btn-apply\" onclick=\"dpApply(event,'revert')\">Apply<\/button>\n                <\/div>\n            <\/div>\n        <\/div>\n    <\/div>\n<\/div>\n<button class=\"btn btn-filter\" onclick=\"applyFilter()\">Filter<\/button>\n<button class=\"btn btn-download\" onclick=\"downloadCSV()\">+ CSV Download<\/button>\n<button class=\"btn btn-clear-filter\" id=\"clearFilterBtn\" onclick=\"clearFilter()\">Clear<\/button>\n<\/div><br>\n\n<div class=\"table-wrapper\">\n<table>\n    <thead>\n        <tr>\n            <th>Error Category<\/th>\n            <th>Error Count<\/th>\n            <th>Reversal Description<\/th>\n            <th>Account<\/th>\n            <th>Error Date<\/th>\n            <th>Assign To<\/th>\n            <th>QC By<\/th>\n            <th>Reversal Status<\/th>\n            <th>Submit By<\/th>\n            <th>Action By<\/th>\n            <th id=\"thAction\" style=\"display:none;\">Action<\/th>\n        <\/tr>\n    <\/thead>\n    <tbody id=\"tableBody\">\n        <tr><td colspan=\"10\" class=\"no-data\">Loading\u2026<\/td><\/tr>\n    <\/tbody>\n<\/table>\n<\/div>\n\n<script>\n\/\/ \u2500\u2500 API ENDPOINT CONSTANTS \u2500\u2500\nconst BASE_URL            = 'https:\/\/api-ph-portal.zyneventures.com\/api\/v1';\nconst API_REVERT_ACTION   = `${BASE_URL}\/qc-error-reverse-hit\/revert-action`;\nconst API_GET_ALL_REVERSE = `${BASE_URL}\/work_assignment_error_reverse\/all`;\n\nconst ENDPOINTS = {\n    REVERT_ERRORS: API_GET_ALL_REVERSE,\n    REVERT_EXPORT: `${BASE_URL}\/work_assignment_error_reverse\/export`\n};\n\n\/\/ \u2500\u2500 Role-based visibility (PHP revert.blade.php parity) \u2500\u2500\nfunction getRevertUserContext() {\n    let user = {};\n    try { user = JSON.parse(localStorage.getItem('USER_DATA') || '{}'); } catch (e) { user = {}; }\n    const roleRaw = user.role || localStorage.getItem('USER_ROLE') || '';\n    const role = (typeof roleRaw === 'object' ? (roleRaw.name || roleRaw.role || '') : roleRaw)\n        .toString().toLowerCase().trim();\n    const department = (\n        user.department_name || user.department ||\n        localStorage.getItem('DEPARTMENT_NAME') || ''\n    ).toString().toLowerCase().trim();\n    return { role, department };\n}\n\nconst revertUserCtx = getRevertUserContext();\nconst permissionTier = (localStorage.getItem('PERMISSION_TIER') || '').trim().toLowerCase();\nconst userRole       = revertUserCtx.role || (localStorage.getItem('USER_ROLE') || '').trim().toLowerCase();\n\/\/ PHP: @if (userRole(...) != 'administrator') \u2192 show Action column + Accept\/Reject\/Void\n\/\/ Assistant Manager must remain view-only on this screen.\nconst isAdministrator = userRole === 'administrator' || userRole === 'admin' || permissionTier === 'admin';\nconst isAssistantManager = userRole === 'assistant manager';\nconst canTakeAction   = !isAdministrator && !isAssistantManager;\n\n\/* \u2500\u2500 Auth helper \u2500\u2500 *\/\nconst getHeaders = () => ({\n    'Content-Type': 'application\/json',\n    'Authorization': `Bearer ${localStorage.getItem(\"TOKEN\")}`\n});\n\n\/* \u2500\u2500 State \u2500\u2500 *\/\nlet allData = [];\n\n\/* \u2500\u2500 Format display date as DD-MM-YYYY \u2500\u2500 *\/\nfunction fmtDate(str) {\n    if (!str) return '-';\n    const d = new Date(str);\n    if (isNaN(d)) return str;\n    const dd   = String(d.getDate()).padStart(2, '0');\n    const mm   = String(d.getMonth() + 1).padStart(2, '0');\n    const yyyy = d.getFullYear();\n    return `${dd}-${mm}-${yyyy}`;\n}\n\nfunction formatDate(d) {\n    return d.toISOString().split('T')[0];\n}\n\n\/* \u2500\u2500 Error type pill \u2500\u2500 *\/\nfunction errorPill(type) {\n    if (!type) return '-';\n    const cls = type === 'Critical'       ? 'pill-critical'\n              : type === 'Minor'          ? 'pill-minor'\n              : type === 'Zero_Tolerence' ? 'pill-zero'\n              : '';\n    const label = type === 'Zero_Tolerence' ? 'ZERO TOLERANCE' : type.toUpperCase();\n    return `<span class=\"pill ${cls}\">${label}<\/span>`;\n}\n\n\/* \u2500\u2500 Reversal status badge \u2500\u2500 *\/\nfunction statusBadge(status) {\n    if (!status) return '-';\n    const cls = status === 'accept'  ? 'badge-accept'\n              : status === 'pending' ? 'badge-pending'\n              : status === 'reject'  ? 'badge-reject'\n              : status === 'void'    ? 'badge-void'\n              : '';\n    return `<span class=\"badge ${cls}\">${status.charAt(0).toUpperCase()+status.slice(1)}<\/span>`;\n}\n\nfunction formatDatesParam(value) {\n    if (!value) return '';\n    return value;\n}\n\nfunction appendRevertFilters(params) {\n    const dateVal = document.getElementById('filterRevertDate').value;\n    if (dateVal) {\n        const datesParam = formatDatesParam(dateVal);\n        if (datesParam) params.set('dates', datesParam);\n    } else {\n        params.set('dates', `2023-01-01 - ${formatDate(new Date())}`);\n    }\n}\n\nfunction buildRevertExportUrl() {\n    const params = new URLSearchParams();\n    appendRevertFilters(params);\n    return ENDPOINTS.REVERT_EXPORT + '?' + params.toString();\n}\n\n\/* \u2500\u2500 Fetch data \u2500\u2500 *\/\nasync function fetchRevertErrors() {\n    const url = new URL(ENDPOINTS.REVERT_ERRORS);\n    appendRevertFilters(url.searchParams);\n\n    renderSkeleton();\n\n    try {\n        const res = await fetch(url.toString(), { headers: getHeaders() });\n\n        if (res.status === 401) {\n            showToast('Session expired. Please log in again.');\n            setTimeout(() => { window.location.href = '\/login'; }, 1500);\n            return;\n        }\n\n        const result = await res.json();\n\n        if (result.code === 200) {\n            const meta = result.data;\n            allData    = meta.data || [];\n            renderTable(allData);\n            document.getElementById('totalCount').textContent =\n                `(${meta.total ?? allData.length})`;\n        } else {\n            renderEmpty(result.messages?.[0] || 'No data found.');\n        }\n    } catch (err) {\n        console.error('Fetch Error:', err);\n        renderEmpty('Network error. Please check your connection.');\n    }\n}\n\n\/* \u2500\u2500 Render skeleton rows \u2500\u2500 *\/\nfunction renderSkeleton() {\n    const tbody = document.getElementById('tableBody');\n    const cols  = canTakeAction ? 11 : 10;\n    let html = '';\n    for (let i = 0; i < 8; i++) {\n        html += `<tr>${Array(cols).fill('<td><span class=\"skeleton\"><\/span><\/td>').join('')}<\/tr>`;\n    }\n    tbody.innerHTML = html;\n}\n\n\/* \u2500\u2500 Render table rows \u2500\u2500 *\/\nfunction renderTable(data) {\n    const tbody = document.getElementById('tableBody');\n    if (!data || data.length === 0) {\n        renderEmpty('No records found for the selected date range.');\n        return;\n    }\n\n    tbody.innerHTML = data.map(item => {\n        const rowKey = item.work_assignment_id || item.id;\n        const reverses = (Array.isArray(item.reverses) && item.reverses.length)\n            ? item.reverses\n            : [{ errot_type: item.errot_type, reverse_error_count: item.reverse_error_count }];\n        const typesCell = reverses.map(r => errorPill(r.errot_type)).join('<br>');\n        const countsCell = reverses\n            .map(r => `<span>${r.reverse_error_count ?? '-'}<\/span>`)\n            .join('<br>');\n        const actionCell = canTakeAction\n            ? `<td class=\"action-cell\" id=\"action-${rowKey}\">${buildActionButtons(item)}<\/td>`\n            : '';\n        return `\n        <tr>\n            <td>${typesCell}<\/td>\n            <td style=\"text-align:center;font-weight:500;\">${countsCell}<\/td>\n            <td style=\"max-width:260px;white-space:normal;word-break:break-word;overflow-wrap:anywhere;\">${item.remarks || '-'}<\/td>\n            <td>${item.account_name || '-'}<\/td>\n            <td style=\"white-space:nowrap;\">${fmtDate(item.first_revert_created_at || item.created_at)}<\/td>\n            <td>${item.assigned_to_pseudo || '-'}<\/td>\n            <td>${item.qc_assigned_pseudo || '-'}<\/td>\n            <td>${statusBadge(item.status)}<\/td>\n            <td>${item.submit_by_pseudo || '-'}<\/td>\n            <td>${item.action_by_pseudo || '-'}<\/td>\n            ${actionCell}\n        <\/tr>`;\n    }).join('');\n}\n\n\/* \u2500\u2500 Build action buttons based on status \u2500\u2500 *\/\nfunction buildActionButtons(item) {\n    if ((item.status || '').toLowerCase() === 'pending') {\n        const waId = item.work_assignment_id;\n        return `\n            <div class=\"action-btn-group\">\n                <a class=\"action-link accept-link\"  href=\"javascript:void(0)\" onclick=\"revertAction(${waId},'accept')\">Accept<\/a>\n                <a class=\"action-link reject-link\"  href=\"javascript:void(0)\" onclick=\"revertAction(${waId},'reject')\">Reject<\/a>\n                <a class=\"action-link void-link\"    href=\"javascript:void(0)\" onclick=\"revertAction(${waId},'void')\">Void<\/a>\n            <\/div>`;\n    }\n    return '<span class=\"action-applied-text\">Action Applied<\/span>';\n}\n\nasync function revertAction(workAssignmentId, type) {\n    if (!workAssignmentId || !type) return;\n    if (!canTakeAction) {\n        showToast('Access denied: you do not have permission to perform this action.');\n        return;\n    }\n    if (!confirm(`Apply ${type} on this reversal request?`)) return;\n\n    const rowKey = workAssignmentId;\n    const cell = document.getElementById(`action-${rowKey}`);\n    if (cell) {\n        cell.innerHTML = '<span class=\"action-applied-text\">Processing\u2026<\/span>';\n    }\n\n    try {\n        const res = await fetch(\n            `${API_REVERT_ACTION}\/${workAssignmentId}\/${type}`,\n            { headers: getHeaders() }\n        );\n\n        if (res.status === 401) {\n            showToast('Session expired. Please log in again.');\n            setTimeout(() => { window.location.href = '\/login'; }, 1500);\n            return;\n        }\n\n        const json = await res.json();\n        if (json.code === 200 || json.status === 'success') {\n            showToast(json.messages?.[0] || 'Action applied successfully.');\n            fetchRevertErrors();\n        } else {\n            showToast(json.messages?.[0] || json.errors || 'Action failed.');\n            if (cell) cell.innerHTML = buildActionButtons({ work_assignment_id: workAssignmentId, status: 'pending' });\n        }\n    } catch (err) {\n        console.error('Revert action error:', err);\n        showToast('Network error. Please try again.');\n        if (cell) cell.innerHTML = buildActionButtons({ work_assignment_id: workAssignmentId, status: 'pending' });\n    }\n}\n\nfunction renderEmpty(msg) {\n    const cols = canTakeAction ? 11 : 10;\n    document.getElementById('tableBody').innerHTML =\n        `<tr><td colspan=\"${cols}\" class=\"no-data\">${msg}<\/td><\/tr>`;\n}\n\n\/* \u2500\u2500 Filter action \u2500\u2500 *\/\nfunction applyFilter() {\n    fetchRevertErrors();\n}\n\n\/* \u2500\u2500 Clear Filter \u2500\u2500 *\/\nfunction clearFilter() {\n    \/\/ Reset the date picker state and input\n    dpClear(null, 'revert');\n\n    \/\/ Reload data without any date filter\n    fetchRevertErrors();\n}\n\n\/* \u2500\u2500 CSV Download \u2500\u2500 *\/\nasync function downloadCSV() {\n    const downloadBtn = document.querySelector('.btn-download[onclick=\"downloadCSV()\"]');\n    const originalText = downloadBtn ? downloadBtn.textContent : '+ CSV Download';\n    if (downloadBtn) {\n        downloadBtn.disabled = true;\n        downloadBtn.textContent = 'Downloading...';\n    }\n\n    try {\n        const token = localStorage.getItem('TOKEN');\n        if (!token) {\n            showToast('You are not logged in. Please login again.');\n            return;\n        }\n\n        const res = await fetch(buildRevertExportUrl(), {\n            method: 'GET',\n            headers: { Authorization: 'Bearer ' + token }\n        });\n\n        if (!res.ok) {\n            let message = 'Failed to download CSV.';\n            try {\n                const errJson = await res.json();\n                message = errJson.message || (errJson.messages && errJson.messages[0]) || message;\n            } catch (_) {\n                message = message + ' (HTTP ' + res.status + ')';\n            }\n            showToast(message);\n            return;\n        }\n\n        const blob = await res.blob();\n        if (!blob || blob.size === 0) {\n            showToast('No data available to export for the selected filters.');\n            return;\n        }\n\n        let filename = 'error-log-revert-' + Date.now() + '.csv';\n        const disposition = res.headers.get('Content-Disposition');\n        if (disposition) {\n            const match = disposition.match(\/filename=\"?([^\";\\n]+)\"?\/i);\n            if (match && match[1]) filename = match[1].trim();\n        }\n\n        const objectUrl = URL.createObjectURL(blob);\n        const a = document.createElement('a');\n        a.href = objectUrl;\n        a.download = filename;\n        document.body.appendChild(a);\n        a.click();\n        document.body.removeChild(a);\n        URL.revokeObjectURL(objectUrl);\n    } catch (error) {\n        console.error('Revert error export download error', error);\n        showToast('Failed to download CSV. Please try again.');\n    } finally {\n        if (downloadBtn) {\n            downloadBtn.disabled = false;\n            downloadBtn.textContent = originalText;\n        }\n    }\n}\n\n\/* \u2500\u2500 Toast \u2500\u2500 *\/\nfunction showToast(msg) {\n    const t = document.getElementById('toast');\n    t.textContent = msg;\n    t.classList.add('show');\n    setTimeout(() => t.classList.remove('show'), 3000);\n}\n\n\/\/ \u2500\u2500 DATE PICKER \u2500\u2500\nconst dpState = {\n    revert: { viewYear: null, viewMonth: null, startDate: null, endDate: null, hoverDate: null, activePreset: 'today' }\n};\n\nconst DP_IDS = {\n    revert: {\n        dropdown: 'dpDropdownRevert',\n        backdrop: 'dpBackdropRevert',\n        title:    'dpCalTitleRevert',\n        days:     'dpDaysRevert',\n        title2:   'dpCalTitleRevert2',\n        days2:    'dpDaysRevert2',\n        display:  'filterRevertDate'\n    }\n};\n\nconst DP_MONTHS = ['January','February','March','April','May','June',\n                   'July','August','September','October','November','December'];\n\nfunction dpToday() { const d = new Date(); d.setHours(0,0,0,0); return d; }\n\nfunction dpSameDay(a, b) {\n    if (!a || !b) return false;\n    return a.getFullYear() === b.getFullYear() && a.getMonth() === b.getMonth() && a.getDate() === b.getDate();\n}\n\nfunction dpFmtISO(d) {\n    if (!d) return '';\n    return `${d.getFullYear()}-${String(d.getMonth()+1).padStart(2,'0')}-${String(d.getDate()).padStart(2,'0')}`;\n}\n\nfunction dpRenderCalendar(inst) {\n    const s = dpState[inst];\n    const ids = DP_IDS[inst];\n\n    let y2 = s.viewYear, m2 = s.viewMonth + 1;\n    if (m2 > 11) { m2 = 0; y2++; }\n\n    document.getElementById(ids.title).textContent  = `${DP_MONTHS[s.viewMonth]} ${s.viewYear}`;\n    document.getElementById(ids.title2).textContent = `${DP_MONTHS[m2]} ${y2}`;\n\n    document.getElementById(ids.days).innerHTML  = dpBuildDays(s.viewYear, s.viewMonth, s, inst);\n    document.getElementById(ids.days2).innerHTML = dpBuildDays(y2, m2, s, inst);\n}\n\nfunction dpBuildDays(year, month, s, inst) {\n    const today = dpToday();\n    const startDay = new Date(year, month, 1).getDay();\n    const daysInMonth = new Date(year, month + 1, 0).getDate();\n    let html = '';\n\n    for (let i = 0; i < startDay; i++) html += `<div class=\"dp-day other-month\"><\/div>`;\n\n    for (let d = 1; d <= daysInMonth; d++) {\n        const cur = new Date(year, month, d);\n        let cls = 'dp-day';\n        if (dpSameDay(cur, today)) cls += ' today';\n        const dayOfWeek = cur.getDay();\n\n        if (s.startDate) {\n            if (s.endDate) {\n                if (dpSameDay(cur, s.startDate)) {\n                    cls += ' selected selected-start';\n                } else if (dpSameDay(cur, s.endDate)) {\n                    cls += ' selected selected-end';\n                } else if (cur > s.startDate && cur < s.endDate) {\n                    cls += ' in-range';\n                    if (dayOfWeek === 0) cls += ' row-start';\n                    if (dayOfWeek === 6) cls += ' row-end';\n                }\n            } else if (dpSameDay(cur, s.startDate)) {\n                cls += ' selected selected-start selected-end';\n            } else if (s.hoverDate) {\n                let rS = s.startDate, rE = s.hoverDate;\n                if (rE < rS) { const t = rS; rS = rE; rE = t; }\n                if (dpSameDay(cur, s.hoverDate)) {\n                    cls += (s.hoverDate < s.startDate) ? ' hover-start hover-range' : ' hover-end hover-range';\n                } else if (cur > rS && cur < rE) {\n                    cls += ' hover-range';\n                    if (dayOfWeek === 0) cls += ' row-start';\n                    if (dayOfWeek === 6) cls += ' row-end';\n                }\n            }\n        }\n\n        html += `<div class=\"${cls}\" onclick=\"dpPickDay(event,${year},${month},${d},'${inst}')\" onmouseover=\"dpHoverDay('${inst}',${year},${month},${d})\">${d}<\/div>`;\n    }\n    return html;\n}\n\nfunction dpPickDay(e, y, m, d, inst) {\n    e.stopPropagation();\n    const s = dpState[inst];\n    const chosen = new Date(y, m, d);\n    if (!s.startDate) {\n        s.startDate = chosen; s.endDate = null;\n    } else if (s.endDate) {\n        s.startDate = chosen; s.endDate = null;\n    } else {\n        if (chosen < s.startDate) { s.endDate = s.startDate; s.startDate = chosen; }\n        else { s.endDate = chosen; }\n    }\n    s.hoverDate = null;\n    document.querySelectorAll(`#${DP_IDS[inst].dropdown} .dp-preset-item`).forEach(el => el.classList.remove('active'));\n    dpRenderCalendar(inst);\n    dpUpdateFooterRange(inst);\n}\n\nfunction dpHoverDay(inst, y, m, d) {\n    const s = dpState[inst];\n    if (s.startDate && !s.endDate) {\n        const h = new Date(y, m, d);\n        if (!dpSameDay(h, s.hoverDate)) {\n            s.hoverDate = h; dpRenderCalendar(inst);\n        }\n    }\n}\n\nfunction dpUpdateFooterRange(inst) {\n    const s = dpState[inst];\n    const el = document.getElementById('dpRangeDisplayRevert');\n    if (!el) return;\n    if (s.startDate) {\n        if (s.endDate) el.textContent = `${dpFmtISO(s.startDate)} - ${dpFmtISO(s.endDate)}`;\n        else el.textContent = `${dpFmtISO(s.startDate)} - Select end date`;\n    } else {\n        el.textContent = 'Select Date Range';\n    }\n}\n\nfunction dpChangeMonth(e, dir, inst) {\n    e.stopPropagation();\n    const s = dpState[inst];\n    s.viewMonth += dir;\n    if (s.viewMonth > 11) { s.viewMonth = 0; s.viewYear++; }\n    if (s.viewMonth < 0)  { s.viewMonth = 11; s.viewYear--; }\n    dpRenderCalendar(inst);\n}\n\nfunction selectPreset(e, preset, inst) {\n    if (e) e.stopPropagation();\n    const s = dpState[inst];\n    const today = dpToday();\n    document.querySelectorAll(`#${DP_IDS[inst].dropdown} .dp-preset-item`).forEach(el =>\n        el.classList.toggle('active', el.dataset.preset === preset));\n\n    switch (preset) {\n        case 'today':     s.startDate = new Date(today); s.endDate = new Date(today); break;\n        case 'yesterday': { const y = new Date(today); y.setDate(y.getDate()-1); s.startDate = y; s.endDate = new Date(y); break; }\n        case 'last7':     { const y = new Date(today); y.setDate(y.getDate()-6); s.startDate = y; s.endDate = new Date(today); break; }\n        case 'last30':    { const y = new Date(today); y.setDate(y.getDate()-29); s.startDate = y; s.endDate = new Date(today); break; }\n        case 'thisMonth': s.startDate = new Date(today.getFullYear(), today.getMonth(), 1); s.endDate = new Date(today); break;\n        case 'lastMonth': s.startDate = new Date(today.getFullYear(), today.getMonth()-1, 1); s.endDate = new Date(today.getFullYear(), today.getMonth(), 0); break;\n    }\n    s.hoverDate = null;\n    s.viewYear  = s.startDate.getFullYear();\n    s.viewMonth = s.startDate.getMonth();\n    dpRenderCalendar(inst);\n    dpUpdateFooterRange(inst);\n    dpApply(e, inst);\n}\n\nfunction dpApply(e, inst) {\n    if (e) e.stopPropagation();\n    const s = dpState[inst];\n    const display = document.getElementById(DP_IDS[inst].display);\n    if (s.startDate) {\n        if (s.endDate) {\n            display.value = dpSameDay(s.startDate, s.endDate)\n                ? dpFmtISO(s.startDate)\n                : `${dpFmtISO(s.startDate)} - ${dpFmtISO(s.endDate)}`;\n        } else {\n            display.value = '';\n        }\n    } else {\n        display.value = '';\n    }\n    closeDatePicker(inst);\n}\n\nfunction dpClear(e, inst) {\n    if (e) e.stopPropagation();\n    const s = dpState[inst];\n    s.startDate = null;\n    s.endDate   = null;\n    s.hoverDate = null;\n    document.getElementById(DP_IDS[inst].display).value = '';\n    const dropId = DP_IDS[inst].dropdown;\n    document.querySelectorAll(`#${dropId} .dp-preset-item`).forEach(el => el.classList.remove('active'));\n    dpRenderCalendar(inst);\n    dpUpdateFooterRange(inst);\n    closeDatePicker(inst);\n}\n\nfunction toggleDatePicker(e, inst) {\n    e.stopPropagation();\n    const ids = DP_IDS[inst];\n    const dd = document.getElementById(ids.dropdown);\n    if (dd.classList.contains('open')) {\n        closeDatePicker(inst);\n    } else {\n        const s = dpState[inst];\n        const ref = s.startDate || dpToday();\n        s.viewYear  = ref.getFullYear();\n        s.viewMonth = ref.getMonth();\n        dpRenderCalendar(inst);\n        dpUpdateFooterRange(inst);\n        dd.classList.add('open');\n        document.getElementById(ids.backdrop).classList.add('show');\n\n        requestAnimationFrame(() => {\n            const rect = dd.getBoundingClientRect();\n            if (rect.right > window.innerWidth - 8) {\n                dd.classList.add('align-right');\n            } else {\n                dd.classList.remove('align-right');\n            }\n        });\n    }\n}\n\nfunction closeDatePicker(inst) {\n    const ids = DP_IDS[inst];\n    const dd = document.getElementById(ids.dropdown);\n    const bd = document.getElementById(ids.backdrop);\n    if (dd) dd.classList.remove('open');\n    if (bd) bd.classList.remove('show');\n}\n\ndocument.addEventListener('click', function(e) {\n    const wrapEl = document.getElementById('dpWrapperRevert');\n    if (wrapEl && !wrapEl.contains(e.target)) {\n        closeDatePicker('revert');\n    }\n});\n\n\/* \u2500\u2500 Init \u2500\u2500 *\/\nif (canTakeAction) {\n    const th = document.getElementById('thAction');\n    if (th) th.style.display = '';\n    const tbl = document.querySelector('.table-wrapper table');\n    if (tbl) tbl.style.minWidth = '1080px';\n}\nfetchRevertErrors();\n<\/script>\n<\/div><\/div>\n\n<\/div><\/div><\/div><\/div>\n","protected":false},"excerpt":{"rendered":"<p>List View All Revert Error (0) Today Yesterday Last 7 Days Last 30 Days This Month Last Month \u2039 \u203a Su Mo Tu We Th Fr Sa \u2039 \u203a Su Mo Tu We Th Fr Sa Select Date Range Cancel Apply Filter + CSV Download Clear Error Category Error Count Reversal Description Account Error Date&#8230;<\/p>\n","protected":false},"author":2,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_kad_post_transparent":"disable","_kad_post_title":"hide","_kad_post_layout":"fullwidth","_kad_post_sidebar_id":"","_kad_post_content_style":"unboxed","_kad_post_vertical_padding":"hide","_kad_post_feature":"hide","_kad_post_feature_position":"","_kad_post_header":false,"_kad_post_footer":false,"_kad_post_classname":"","footnotes":""},"class_list":["post-164","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/ph-portal-v2.zyneventures.com\/index.php\/wp-json\/wp\/v2\/pages\/164","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/ph-portal-v2.zyneventures.com\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/ph-portal-v2.zyneventures.com\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/ph-portal-v2.zyneventures.com\/index.php\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/ph-portal-v2.zyneventures.com\/index.php\/wp-json\/wp\/v2\/comments?post=164"}],"version-history":[{"count":43,"href":"https:\/\/ph-portal-v2.zyneventures.com\/index.php\/wp-json\/wp\/v2\/pages\/164\/revisions"}],"predecessor-version":[{"id":1235,"href":"https:\/\/ph-portal-v2.zyneventures.com\/index.php\/wp-json\/wp\/v2\/pages\/164\/revisions\/1235"}],"wp:attachment":[{"href":"https:\/\/ph-portal-v2.zyneventures.com\/index.php\/wp-json\/wp\/v2\/media?parent=164"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}