1async function getData(n){const e=document.querySelector('meta[name="csrf-token"]').getAttribute("content");return await fetch(n,{method:"GET",headers:{"X-CSRF-TOKEN":e,"Content-Type":"application/json"}})}!function(){const n=document.createElement("style");if(n.innerText="\n :root {\n --pm-primary-color: #6366f1;\n --pm-primary-hover: #4f46e5;\n --pm-bg-glass: rgba(255, 255, 255, 0.8);\n --pm-sidebar-bg: rgba(255, 255, 255, 0.95);\n --pm-text-color: #1f2937;\n --pm-text-muted: #6b7280;\n --pm-shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05);\n --pm-shadow-xl: 0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04);\n --pm-transition-speed: 0.3s;\n }\n\n /* Menu Button Styles */\n .pm-menu-btn-container {\n position: fixed;\n bottom: 30px;\n left: 30px;\n z-index: 1000;\n font-family: 'Inter', sans-serif;\n }\n\n .pm-menu-btn {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 12px 24px;\n background: white;\n border: none;\n border-radius: 50px !important;\n box-shadow: var(--pm-shadow-lg);\n cursor: pointer !important;\n transition: all var(--pm-transition-speed) ease;\n color: var(--pm-text-color);\n font-weight: 600;\n font-size: 16px;\n backdrop-filter: blur(10px);\n -webkit-backdrop-filter: blur(10px);\n overflow: hidden;\n position: relative;\n }\n\n .pm-menu-btn::before {\n content: '';\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n opacity: 0;\n transition: opacity var(--pm-transition-speed);\n z-index: -1;\n }\n\n .pm-menu-btn:hover {\n transform: translateY(-2px);\n box-shadow: var(--pm-shadow-xl);\n }\n\n .pm-menu-btn:hover::before {\n opacity: 1;\n }\n\n .pm-menu-btn i {\n font-size: 24px;\n transition: transform var(--pm-transition-speed);\n }\n\n .pm-menu-btn:hover i {\n transform: rotate(180deg);\n }\n\n /* Sidebar Styles */\n .pm-sidebar {\n position: fixed;\n bottom: 90px;\n left: 30px;\n width: 280px;\n height: auto;\n max-height: calc(100vh - 120px);\n background: var(--pm-sidebar-bg);\n box-shadow: var(--pm-shadow-xl);\n z-index: 999;\n /* Start hidden: scaled down and transparent */\n transform: scale(0.9) translateY(20px);\n opacity: 0;\n visibility: hidden;\n transition: all var(--pm-transition-speed) cubic-bezier(0.16, 1, 0.3, 1);\n display: flex;\n flex-direction: column;\n backdrop-filter: blur(20px);\n -webkit-backdrop-filter: blur(20px);\n border-radius: 20px;\n border: 1px solid rgba(255, 255, 255, 0.5);\n font-family: 'Inter', sans-serif;\n }\n\n .pm-sidebar.active {\n transform: scale(1) translateY(0);\n opacity: 1;\n visibility: visible;\n }\n\n .pm-sidebar-header {\n padding: 20px 24px;\n display: flex;\n align-items: center;\n justify-content: space-between;\n border-bottom: 1px solid rgba(0, 0, 0, 0.05);\n }\n\n .pm-brand {\n font-size: 15px;\n font-weight: 700;\n color: var(--pm-primary-color);\n display: flex;\n flex-direction: column;\n }\n\n .pm-menu-list {\n list-style: none;\n padding: 12px;\n margin: 0;\n flex-grow: 0;\n overflow-y: auto;\n }\n\n .pm-menu-item {\n margin-bottom: 4px;\n position: relative !important;\n top: auto !important;\n opacity: 1 !important;\n }\n\n .pm-menu-link {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 12px 16px;\n text-decoration: none;\n color: var(--pm-text-color) !important;\n border-radius: 12px;\n transition: all 0.2s;\n font-weight: 500;\n font-size: 14px;\n }\n\n .pm-menu-link:hover {\n background: rgba(99, 102, 241, 0.08);\n color: var(--pm-primary-color);\n }\n\n .pm-menu-link img {\n width: 32px;\n }\n\n .pm-menu-link.active {\n background: var(--pm-primary-color);\n color: white;\n box-shadow: 0 4px 12px rgba(99, 102, 241, 0.3);\n }\n\n .pm-sidebar-footer {\n padding: 12px;\n border-top: 1px solid rgba(0, 0, 0, 0.05);\n display: flex;\n flex-direction: column;\n gap: 10px;\n }\n\n .pm-user-profile {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 12px;\n background: rgba(0, 0, 0, 0.02);\n border-radius: 12px;\n }\n\n .pm-avatar {\n width: 36px;\n height: 36px;\n border-radius: 50%;\n background: linear-gradient(135deg, #FF6B6B, #4ECDC4);\n display: flex;\n align-items: center;\n justify-content: center;\n color: white;\n font-weight: 600;\n font-size: 14px;\n }\n\n .pm-user-info h4 {\n margin: 0;\n font-size: 14px;\n color: var(--pm-text-color);\n }\n\n .pm-user-info p {\n margin: 2px 0 0;\n font-size: 11px;\n color: var(--pm-text-muted);\n }\n\n .pm-close-menu-btn {\n width: 100%;\n padding: 12px;\n background-color: #f3f4f6;\n border: none;\n border-radius: 12px;\n color: var(--pm-text-muted);\n font-weight: 600;\n cursor: pointer;\n transition: all 0.2s;\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 8px;\n font-family: 'Inter', sans-serif;\n }\n\n .pm-close-menu-btn:hover {\n background-color: #e5e7eb;\n color: var(--pm-text-color);\n }\n\n /* Overlay/Backdrop */\n .pm-backdrop {\n position: fixed;\n top: 0;\n left: 0;\n width: 100%;\n height: 100vh;\n background: rgba(0, 0, 0, 0.2);\n backdrop-filter: blur(2px);\n z-index: 998;\n opacity: 0;\n pointer-events: none;\n transition: opacity var(--pm-transition-speed);\n }\n\n .pm-backdrop.active {\n opacity: 1;\n pointer-events: auto;\n }\n\n .container-item-label .label-item {\n margin: 0;\n }\n\n #pmCloseMenuBtn {\n border-radius: 20px;\n width: 60%;\n font-size: smaller;\n }\n \n .pm-sidebar-footer {\n align-items: center;\n }\n \n i.ph.ph-x {\n font-weight: bolder;\n font-size: large;\n }\n \n .pm-menu-item {\n border-radius: 30px;\n }\n\n @media (max-width: 480px) {\n .pm-sidebar {\n width: calc(100% - 40px);\n left: 20px;\n bottom: 150px;\n }\n\n .pm-menu-btn-container {\n bottom: 80px;\n left: 20px;\n }\n }\n ",document.head.appendChild(n),!document.getElementById("pm-fonts")){const n=document.createElement("link");n.id="pm-fonts",n.href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600&display=swap",n.rel="stylesheet",document.head.appendChild(n)}if(!document.querySelector('script[src*="phosphor-icons"]')){const n=document.createElement("script");n.src="https://unpkg.com/@phosphor-icons/web",document.head.appendChild(n)}const e=document.createElement("div");e.innerHTML='\n \x3c!-- Toggle Button --\x3e\n <div class="pm-menu
1-btn-container">\n <button class="pm-menu-btn" id="pmMenuToggle">\n <i class="ph ph-list"></i>\n <span>Menu</span>\n </button>\n </div>\n\n \x3c!-- Sidebar --\x3e\n <div class="pm-backdrop" id="pmBackdrop"></div>\n <aside class="pm-sidebar" id="pmSidebar">\n <div class="pm-sidebar-header">\n <div class="pm-brand">\n <p>Menu Cepat</p>\n <small id=\'header-label\'>Akses Menu Cepat</small>\n </div>\n </div>\n\n <ul class="pm-menu-list" id="pmMenuList">\n \x3c!-- Items will be injected via JS --\x3e\n <li style="padding: 20px; text-align: center; color: #9ca3af;">Loading...</li>\n </ul>\n\n <div class="pm-sidebar-footer">\n <button class="pm-close-menu-btn" id="pmCloseMenuBtn">\n <i class="ph ph-x"></i>\n Close Menu\n </button>\n </div>\n </aside>\n ',document.body.appendChild(e);const t=document.getElementById("pmMenuToggle"),i=document.getElementById("pmSidebar"),o=document.getElementById("pmBackdrop"),a=document.getElementById("pmCloseMenuBtn");function r(){i.classList.remove("active"),o.classList.remove("active")}t&&t.addEventListener("click",(function(){i.classList.toggle("active"),o.classList.toggle("active")})),o&&o.addEventListener("click",r),a&&a.addEventListener("click",r),document.addEventListener("keydown",(function(n){"Escape"===n.key&&r()})),async function(){const n=document.getElementById("pmMenuList"),e=document.getElementById("header-label"),t=document.querySelector(".pm-menu-btn-container");try{const i="/json/quick_menus",o=await getData(i),a=await o.json(),r=a.data.items||[];if(r.length>0){if(a.custom_css){const n=document.createElement("style");n.innerText=a.custom_css,document.head.appendChild(n)}t&&(t.style.display="block"),n.innerHTML=r.map((n=>
1`\n <li class="pm-menu-item">\n <a href="${n.url}" class="pm-menu-link">\n <img src="${n.icon}" alt="${n.label}">\n <div class='container-item-label'>\n <p class='label-item'>${n.label}</p>\n <small class='desc-item'>${n.description}</small>\n </div>\n </a>\n </li>\n `)).join("");const i=window.location.pathname;n.querySelectorAll(".pm-menu-link").forEach((n=>{n.getAttribute("href")===i&&n.classList.add("active")})),e.innerText=a.header}else t&&(t.style.display="none"),n.innerHTML='<li style="padding: 15px; text-align: center; color: #6b7280;">No items found.</li>'}catch(e){n.innerHTML='<li style="padding: 15px; text-align: center; color: #ef4444;">Error loading menu.</li>'}}()}();
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.