pulse-dashboard
Version:
A Next.js Dashboard application for real-time monitoring and historical analysis of Playwright test executions, based on playwright-pulse-report. This component provides the UI for visualizing Playwright test results and can be run as a standalone CLI too
21 lines • 34.4 kB
HTML
<html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="/_next/static/chunks/14rqub-mhf1rm.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/0imfvrlr~2q89.js"/><script src="/_next/static/chunks/0m5-x6u~hwh1m.js" async=""></script><script src="/_next/static/chunks/0h4bq73pogmtb.js" async=""></script><script src="/_next/static/chunks/0fwam_-pec8pg.js" async=""></script><script src="/_next/static/chunks/07uz2g0_38qia.js" async=""></script><script src="/_next/static/chunks/turbopack-11rw6yhug.je0.js" async=""></script><script src="/_next/static/chunks/04j4.hz_cv-pf.js" async=""></script><script src="/_next/static/chunks/0~ariudu4in54.js" async=""></script><script src="/_next/static/chunks/1860zsbcg5z1o.js" async=""></script><script src="/_next/static/chunks/13mqc.b~s2gjo.js" async=""></script><script src="/_next/static/chunks/00g8rbqi0h8lk.js" async=""></script><script src="/_next/static/chunks/17~ltcjkf11xe.js" async=""></script><script src="/_next/static/chunks/0w0gkm45qpujx.js" async=""></script><script src="/_next/static/chunks/16navnbzwbp36.js" async=""></script><script src="/_next/static/chunks/0gsquco4lyvb4.js" async=""></script><link rel="preload" href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap" as="style"/><link rel="preconnect" href="https://fonts.googleapis.com"/><link rel="preconnect" href="https://fonts.gstatic.com" crossorigin="anonymous"/><title>Pulse Dashboard</title><meta name="description" content="Real-time Playwright test execution dashboard"/><link rel="icon" href="https://ocpaxmghzmfbuhxzxzae.supabase.co/storage/v1/object/public/images/pulse-report/playwright_pulse_icon.png" sizes="48x48" type="image/x-icon"/><link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap" rel="stylesheet"/><script>
(function() {
function getInitialColorMode() {
const persistedColorPreference = window.localStorage.getItem('pulse-theme');
const hasPersistedPreference = typeof persistedColorPreference === 'string';
if (hasPersistedPreference) {
return persistedColorPreference;
}
const mql = window.matchMedia('(prefers-color-scheme: dark)');
const hasMediaQueryPreference = typeof mql.matches === 'boolean';
if (hasMediaQueryPreference) {
return mql.matches ? 'dark' : 'light';
}
return 'light';
}
const colorMode = getInitialColorMode();
if (colorMode === 'dark') {
document.documentElement.classList.add('dark');
}
})();
</script><script src="/_next/static/chunks/03~yq9q893hmn.js" noModule=""></script></head><body class="font-body antialiased"><div hidden=""><!--$--><!--/$--></div><main class="min-h-screen flex flex-col"><div style="--sidebar-width:320px;--sidebar-width-icon:3.5rem" class="group/sidebar-wrapper flex min-h-svh w-full"><aside data-sidebar="sidebar" data-state="expanded" data-collapsible="icon" data-side="left" class="group hidden h-[100dvh] flex-shrink-0 flex-col md:flex sticky top-0 bg-[--glass-bg] backdrop-blur-[20px] saturate-180 transition-all duration-300 ease-in-out w-[var(--sidebar-width)] border-r border-sidebar-border shadow-lg"><div class="flex h-full w-full flex-col"><div data-sidebar="header" class="flex-col gap-4 p-4 group-data-[collapsible=icon]:p-2 flex items-center justify-between group-data-[collapsible=icon]:justify-center border-b border-sidebar-border"><a class="flex items-center" href="/"><img alt="Pulse Dashboard Logo" data-ai-hint="pulse logo" loading="lazy" width="120" height="30" decoding="async" data-nimg="1" class="transition-all duration-200" style="color:transparent;object-fit:fill" srcSet="/_next/image?url=https%3A%2F%2Focpaxmghzmfbuhxzxzae.supabase.co%2Fstorage%2Fv1%2Fobject%2Fpublic%2Fimages%2Fpulse-report%2Fplaywright_pulse_icon.png&w=128&q=75 1x, /_next/image?url=https%3A%2F%2Focpaxmghzmfbuhxzxzae.supabase.co%2Fstorage%2Fv1%2Fobject%2Fpublic%2Fimages%2Fpulse-report%2Fplaywright_pulse_icon.png&w=256&q=75 2x" src="/_next/image?url=https%3A%2F%2Focpaxmghzmfbuhxzxzae.supabase.co%2Fstorage%2Fv1%2Fobject%2Fpublic%2Fimages%2Fpulse-report%2Fplaywright_pulse_icon.png&w=256&q=75"/><span style="margin-left:10px;color:#489ef9;font-weight:900">PULSE DASHBOARD</span></a><button class="inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-xl text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0 hover:bg-accent hover:text-accent-foreground h-7 w-7 md:hidden" data-sidebar="trigger"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-panel-left" aria-hidden="true"><rect width="18" height="18" x="3" y="3" rx="2"></rect><path d="M9 3v18"></path></svg><span class="sr-only">Toggle Sidebar</span></button></div><div data-sidebar="content" class="flex min-h-0 flex-1 flex-col gap-2 overflow-auto p-6 group-data-[collapsible=icon][data-state=collapsed]:p-2 group-data-[collapsible=icon][data-state=collapsed]:overflow-hidden"><ul data-sidebar="menu" class="flex w-full min-w-0 flex-col gap-1"><li data-sidebar="menu-item" class="group/menu-item relative"><button data-sidebar="menu-button" data-active="true" class="peer/menu-button relative flex w-full items-center gap-4 overflow-hidden rounded-xl p-4 text-left text-[0.95rem] font-medium outline-none transition-all duration-300 ease-in-out disabled:pointer-events-none disabled:opacity-50 text-[--color-text-secondary] hover:text-[--color-primary] hover:bg-[--color-hover] hover:translate-x-1 hover:shadow-md data-[active=true]:bg-primary/10 data-[active=true]:text-primary data-[active=true]:font-semibold data-[active=true]:shadow-lg group-data-[collapsible=icon][data-state=collapsed]:size-12 group-data-[collapsible=icon][data-state=collapsed]:justify-center group-data-[collapsible=icon][data-state=collapsed]:p-0 group-data-[collapsible=icon][data-state=collapsed]:[&>span:last-child]:hidden" data-state="closed"><div class="absolute top-0 left-[-100%] w-full h-full bg-gradient-to-r from-primary/10 to-transparent opacity-50 transition-all duration-400 ease-in-out peer-hover/menu-button:left-0 peer-data-[active=true]/menu-button:left-0"></div><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-layout-dashboard h-5 w-5" aria-hidden="true"><rect width="7" height="9" x="3" y="3" rx="1"></rect><rect width="7" height="5" x="14" y="3" rx="1"></rect><rect width="7" height="9" x="14" y="12" rx="1"></rect><rect width="7" height="5" x="3" y="16" rx="1"></rect></svg><span>Dashboard</span></button></li><li data-sidebar="menu-item" class="group/menu-item relative"><button data-sidebar="menu-button" data-active="false" class="peer/menu-button relative flex w-full items-center gap-4 overflow-hidden rounded-xl p-4 text-left text-[0.95rem] font-medium outline-none transition-all duration-300 ease-in-out disabled:pointer-events-none disabled:opacity-50 text-[--color-text-secondary] hover:text-[--color-primary] hover:bg-[--color-hover] hover:translate-x-1 hover:shadow-md data-[active=true]:bg-primary/10 data-[active=true]:text-primary data-[active=true]:font-semibold data-[active=true]:shadow-lg group-data-[collapsible=icon][data-state=collapsed]:size-12 group-data-[collapsible=icon][data-state=collapsed]:justify-center group-data-[collapsible=icon][data-state=collapsed]:p-0 group-data-[collapsible=icon][data-state=collapsed]:[&>span:last-child]:hidden" data-state="closed"><div class="absolute top-0 left-[-100%] w-full h-full bg-gradient-to-r from-primary/10 to-transparent opacity-50 transition-all duration-400 ease-in-out peer-hover/menu-button:left-0 peer-data-[active=true]/menu-button:left-0"></div><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-list-checks h-5 w-5" aria-hidden="true"><path d="M13 5h8"></path><path d="M13 12h8"></path><path d="M13 19h8"></path><path d="m3 17 2 2 4-4"></path><path d="m3 7 2 2 4-4"></path></svg><span style="color:hsl(var(--sidebar-tab-results-color-hsl))">Test Results</span></button></li><li data-sidebar="menu-item" class="group/menu-item relative"><button data-sidebar="menu-button" data-active="false" class="peer/menu-button relative flex w-full items-center gap-4 overflow-hidden rounded-xl p-4 text-left text-[0.95rem] font-medium outline-none transition-all duration-300 ease-in-out disabled:pointer-events-none disabled:opacity-50 text-[--color-text-secondary] hover:text-[--color-primary] hover:bg-[--color-hover] hover:translate-x-1 hover:shadow-md data-[active=true]:bg-primary/10 data-[active=true]:text-primary data-[active=true]:font-semibold data-[active=true]:shadow-lg group-data-[collapsible=icon][data-state=collapsed]:size-12 group-data-[collapsible=icon][data-state=collapsed]:justify-center group-data-[collapsible=icon][data-state=collapsed]:p-0 group-data-[collapsible=icon][data-state=collapsed]:[&>span:last-child]:hidden" data-state="closed"><div class="absolute top-0 left-[-100%] w-full h-full bg-gradient-to-r from-primary/10 to-transparent opacity-50 transition-all duration-400 ease-in-out peer-hover/menu-button:left-0 peer-data-[active=true]/menu-button:left-0"></div><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-trending-up h-5 w-5" aria-hidden="true"><path d="M16 7h6v6"></path><path d="m22 7-8.5 8.5-5-5L2 17"></path></svg><span style="color:hsl(var(--sidebar-tab-trends-color-hsl))">Trend Analysis</span></button></li><li data-sidebar="menu-item" class="group/menu-item relative"><button data-sidebar="menu-button" data-active="false" class="peer/menu-button relative flex w-full items-center gap-4 overflow-hidden rounded-xl p-4 text-left text-[0.95rem] font-medium outline-none transition-all duration-300 ease-in-out disabled:pointer-events-none disabled:opacity-50 text-[--color-text-secondary] hover:text-[--color-primary] hover:bg-[--color-hover] hover:translate-x-1 hover:shadow-md data-[active=true]:bg-primary/10 data-[active=true]:text-primary data-[active=true]:font-semibold data-[active=true]:shadow-lg group-data-[collapsible=icon][data-state=collapsed]:size-12 group-data-[collapsible=icon][data-state=collapsed]:justify-center group-data-[collapsible=icon][data-state=collapsed]:p-0 group-data-[collapsible=icon][data-state=collapsed]:[&>span:last-child]:hidden" data-state="closed"><div class="absolute top-0 left-[-100%] w-full h-full bg-gradient-to-r from-primary/10 to-transparent opacity-50 transition-all duration-400 ease-in-out peer-hover/menu-button:left-0 peer-data-[active=true]/menu-button:left-0"></div><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-repeat h-5 w-5" aria-hidden="true"><path d="m17 2 4 4-4 4"></path><path d="M3 11v-1a4 4 0 0 1 4-4h14"></path><path d="m7 22-4-4 4-4"></path><path d="M21 13v1a4 4 0 0 1-4 4H3"></path></svg><span style="color:hsl(var(--sidebar-tab-flaky-color-hsl))">Flaky Tests</span></button></li><li data-sidebar="menu-item" class="group/menu-item relative"><button data-sidebar="menu-button" data-active="false" class="peer/menu-button relative flex w-full items-center gap-4 overflow-hidden rounded-xl p-4 text-left text-[0.95rem] font-medium outline-none transition-all duration-300 ease-in-out disabled:pointer-events-none disabled:opacity-50 text-[--color-text-secondary] hover:text-[--color-primary] hover:bg-[--color-hover] hover:translate-x-1 hover:shadow-md data-[active=true]:bg-primary/10 data-[active=true]:text-primary data-[active=true]:font-semibold data-[active=true]:shadow-lg group-data-[collapsible=icon][data-state=collapsed]:size-12 group-data-[collapsible=icon][data-state=collapsed]:justify-center group-data-[collapsible=icon][data-state=collapsed]:p-0 group-data-[collapsible=icon][data-state=collapsed]:[&>span:last-child]:hidden" data-state="closed"><div class="absolute top-0 left-[-100%] w-full h-full bg-gradient-to-r from-primary/10 to-transparent opacity-50 transition-all duration-400 ease-in-out peer-hover/menu-button:left-0 peer-data-[active=true]/menu-button:left-0"></div><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-list-x h-5 w-5" aria-hidden="true"><path d="M16 5H3"></path><path d="M11 12H3"></path><path d="M16 19H3"></path><path d="m15.5 9.5 5 5"></path><path d="m20.5 9.5-5 5"></path></svg><span style="color:hsl(var(--sidebar-tab-failures-color-hsl))">Failure Categorization</span></button></li><li data-sidebar="menu-item" class="group/menu-item relative"><button data-sidebar="menu-button" data-active="false" class="peer/menu-button relative flex w-full items-center gap-4 overflow-hidden rounded-xl p-4 text-left text-[0.95rem] font-medium outline-none transition-all duration-300 ease-in-out disabled:pointer-events-none disabled:opacity-50 text-[--color-text-secondary] hover:text-[--color-primary] hover:bg-[--color-hover] hover:translate-x-1 hover:shadow-md data-[active=true]:bg-primary/10 data-[active=true]:text-primary data-[active=true]:font-semibold data-[active=true]:shadow-lg group-data-[collapsible=icon][data-state=collapsed]:size-12 group-data-[collapsible=icon][data-state=collapsed]:justify-center group-data-[collapsible=icon][data-state=collapsed]:p-0 group-data-[collapsible=icon][data-state=collapsed]:[&>span:last-child]:hidden" data-state="closed"><div class="absolute top-0 left-[-100%] w-full h-full bg-gradient-to-r from-primary/10 to-transparent opacity-50 transition-all duration-400 ease-in-out peer-hover/menu-button:left-0 peer-data-[active=true]/menu-button:left-0"></div><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-terminal h-5 w-5" aria-hidden="true"><path d="M12 19h8"></path><path d="m4 17 6-6-6-6"></path></svg><span style="color:hsl(var(--sidebar-tab-command-color-hsl))">Pulse Command</span></button></li></ul></div><div data-sidebar="footer" class="flex flex-col gap-2 p-2 mt-auto border-t border-sidebar-border"><ul data-sidebar="menu" class="flex w-full min-w-0 flex-col gap-1 group-data-[collapsible=icon]:py-2"><li data-sidebar="menu-item" class="group/menu-item relative"><button data-sidebar="menu-button" data-active="false" class="peer/menu-button relative flex w-full items-center gap-4 overflow-hidden rounded-xl p-4 text-left text-[0.95rem] font-medium outline-none transition-all duration-300 ease-in-out disabled:pointer-events-none disabled:opacity-50 text-[--color-text-secondary] hover:text-[--color-primary] hover:bg-[--color-hover] hover:translate-x-1 hover:shadow-md data-[active=true]:bg-primary/10 data-[active=true]:text-primary data-[active=true]:font-semibold data-[active=true]:shadow-lg group-data-[collapsible=icon][data-state=collapsed]:size-12 group-data-[collapsible=icon][data-state=collapsed]:justify-center group-data-[collapsible=icon][data-state=collapsed]:p-0 group-data-[collapsible=icon][data-state=collapsed]:[&>span:last-child]:hidden" data-state="closed"><div class="absolute top-0 left-[-100%] w-full h-full bg-gradient-to-r from-primary/10 to-transparent opacity-50 transition-all duration-400 ease-in-out peer-hover/menu-button:left-0 peer-data-[active=true]/menu-button:left-0"></div><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-settings h-5 w-5" aria-hidden="true"><path d="M9.671 4.136a2.34 2.34 0 0 1 4.659 0 2.34 2.34 0 0 0 3.319 1.915 2.34 2.34 0 0 1 2.33 4.033 2.34 2.34 0 0 0 0 3.831 2.34 2.34 0 0 1-2.33 4.033 2.34 2.34 0 0 0-3.319 1.915 2.34 2.34 0 0 1-4.659 0 2.34 2.34 0 0 0-3.32-1.915 2.34 2.34 0 0 1-2.33-4.033 2.34 2.34 0 0 0 0-3.831A2.34 2.34 0 0 1 6.35 6.051a2.34 2.34 0 0 0 3.319-1.915"></path><circle cx="12" cy="12" r="3"></circle></svg><span class="group-data-[collapsible=icon]:hidden" style="color:hsl(var(--sidebar-tab-settings-color-hsl))">Settings</span></button></li></ul><div class="pt-2 group-data-[collapsible=icon]:hidden"><div data-orientation="horizontal" role="none" class="shrink-0 h-[1px] mx-2 w-auto bg-[--color-border] group-data-[state=collapsed]:mx-auto group-data-[state=collapsed]:my-2 group-data-[state=collapsed]:h-auto group-data-[state=collapsed]:w-8/12 my-1 group-data-[collapsible=icon]:hidden" data-sidebar="separator"></div><div class="flex items-center justify-center gap-1.5 text-xs p-2"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-shield-check h-3.5 w-3.5 text-sidebar-foreground/70" aria-hidden="true"><path d="M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z"></path><path d="m9 12 2 2 4-4"></path></svg><span class="font-medium text-sidebar-foreground">Pulse</span><span class="text-muted-foreground/80">v1.1.0</span></div></div></div></div></aside><main class="relative flex min-h-svh flex-1 flex-col bg-background"><div class="container mx-auto p-6 md:p-8 space-y-6 min-h-screen flex flex-col rounded-[2rem] shadow-lg bg-background"><header class="mb-0"><h1 class="text-3xl font-bold font-headline text-primary tracking-tight">Dashboard</h1><p class="text-md text-muted-foreground mt-1">Real-time Playwright Test Execution Monitoring & Analysis Overview</p><p class="text-sm text-muted-foreground mt-2">Latest Run Date:<!-- --> <span class="text-muted-foreground">Loading...</span></p></header><main class="flex-grow mt-6"><div class="grid gap-4 md:grid-cols-2 lg:grid-cols-5"><div class="border bg-card text-card-foreground shadow-lg rounded-xl"><div class="p-6 flex flex-row items-center justify-between space-y-0 pb-2"><div class="animate-pulse rounded-md bg-muted h-5 w-24"></div><div class="animate-pulse rounded-md bg-muted h-6 w-6"></div></div><div class="p-6 pt-0"><div class="animate-pulse rounded-md bg-muted h-8 w-16"></div><div class="animate-pulse rounded-md bg-muted h-4 w-32 mt-1"></div></div></div><div class="border bg-card text-card-foreground shadow-lg rounded-xl"><div class="p-6 flex flex-row items-center justify-between space-y-0 pb-2"><div class="animate-pulse rounded-md bg-muted h-5 w-24"></div><div class="animate-pulse rounded-md bg-muted h-6 w-6"></div></div><div class="p-6 pt-0"><div class="animate-pulse rounded-md bg-muted h-8 w-16"></div><div class="animate-pulse rounded-md bg-muted h-4 w-32 mt-1"></div></div></div><div class="border bg-card text-card-foreground shadow-lg rounded-xl"><div class="p-6 flex flex-row items-center justify-between space-y-0 pb-2"><div class="animate-pulse rounded-md bg-muted h-5 w-24"></div><div class="animate-pulse rounded-md bg-muted h-6 w-6"></div></div><div class="p-6 pt-0"><div class="animate-pulse rounded-md bg-muted h-8 w-16"></div><div class="animate-pulse rounded-md bg-muted h-4 w-32 mt-1"></div></div></div><div class="border bg-card text-card-foreground shadow-lg rounded-xl"><div class="p-6 flex flex-row items-center justify-between space-y-0 pb-2"><div class="animate-pulse rounded-md bg-muted h-5 w-24"></div><div class="animate-pulse rounded-md bg-muted h-6 w-6"></div></div><div class="p-6 pt-0"><div class="animate-pulse rounded-md bg-muted h-8 w-16"></div><div class="animate-pulse rounded-md bg-muted h-4 w-32 mt-1"></div></div></div><div class="border bg-card text-card-foreground shadow-lg rounded-xl"><div class="p-6 flex flex-row items-center justify-between space-y-0 pb-2"><div class="animate-pulse rounded-md bg-muted h-5 w-24"></div><div class="animate-pulse rounded-md bg-muted h-6 w-6"></div></div><div class="p-6 pt-0"><div class="animate-pulse rounded-md bg-muted h-8 w-16"></div><div class="animate-pulse rounded-md bg-muted h-4 w-32 mt-1"></div></div></div></div><div class="border bg-card text-card-foreground shadow-lg rounded-xl mt-6"><div class="flex flex-col space-y-1.5 p-6"><div class="animate-pulse rounded-md bg-muted h-6 w-48 mb-1"></div><div class="animate-pulse rounded-md bg-muted h-4 w-3/4"></div></div><div class="p-6 pt-0 space-y-3"><div class="flex items-center space-x-3"><div class="animate-pulse bg-muted h-5 w-5 rounded-full"></div><div class="animate-pulse rounded-md bg-muted h-4 w-1/4"></div><div class="animate-pulse rounded-md bg-muted h-4 w-1/2"></div></div><div class="flex items-center space-x-3"><div class="animate-pulse bg-muted h-5 w-5 rounded-full"></div><div class="animate-pulse rounded-md bg-muted h-4 w-1/4"></div><div class="animate-pulse rounded-md bg-muted h-4 w-1/2"></div></div><div class="flex items-center space-x-3"><div class="animate-pulse bg-muted h-5 w-5 rounded-full"></div><div class="animate-pulse rounded-md bg-muted h-4 w-1/4"></div><div class="animate-pulse rounded-md bg-muted h-4 w-1/2"></div></div><div class="flex items-center space-x-3"><div class="animate-pulse bg-muted h-5 w-5 rounded-full"></div><div class="animate-pulse rounded-md bg-muted h-4 w-1/4"></div><div class="animate-pulse rounded-md bg-muted h-4 w-1/2"></div></div></div></div><div class="grid gap-6 md:grid-cols-1 lg:grid-cols-2 mt-6"><div class="border bg-card text-card-foreground shadow-lg rounded-xl"><div class="flex flex-col space-y-1.5 p-6"><div class="animate-pulse bg-muted h-5 w-3/4 rounded-xl"></div><div class="animate-pulse bg-muted h-4 w-1/2 mt-1 rounded-xl"></div></div><div class="p-6 pt-0"><div class="animate-pulse bg-muted h-48 w-full rounded-2xl"></div></div></div><div class="border bg-card text-card-foreground shadow-lg rounded-xl"><div class="flex flex-col space-y-1.5 p-6"><div class="animate-pulse bg-muted h-5 w-3/4 rounded-xl"></div><div class="animate-pulse bg-muted h-4 w-1/2 mt-1 rounded-xl"></div></div><div class="p-6 pt-0"><div class="animate-pulse bg-muted h-48 w-full rounded-2xl"></div></div></div><div class="border bg-card text-card-foreground shadow-lg rounded-xl"><div class="flex flex-col space-y-1.5 p-6"><div class="animate-pulse bg-muted h-5 w-3/4 rounded-xl"></div><div class="animate-pulse bg-muted h-4 w-1/2 mt-1 rounded-xl"></div></div><div class="p-6 pt-0"><div class="animate-pulse bg-muted h-48 w-full rounded-2xl"></div></div></div><div class="border bg-card text-card-foreground shadow-lg rounded-xl"><div class="flex flex-col space-y-1.5 p-6"><div class="animate-pulse bg-muted h-5 w-3/4 rounded-xl"></div><div class="animate-pulse bg-muted h-4 w-1/2 mt-1 rounded-xl"></div></div><div class="p-6 pt-0"><div class="animate-pulse bg-muted h-48 w-full rounded-2xl"></div></div></div><div class="border bg-card text-card-foreground shadow-lg rounded-xl"><div class="flex flex-col space-y-1.5 p-6"><div class="animate-pulse bg-muted h-5 w-3/4 rounded-xl"></div><div class="animate-pulse bg-muted h-4 w-1/2 mt-1 rounded-xl"></div></div><div class="p-6 pt-0"><div class="animate-pulse bg-muted h-48 w-full rounded-2xl"></div></div></div><div class="border bg-card text-card-foreground shadow-lg rounded-xl"><div class="flex flex-col space-y-1.5 p-6"><div class="animate-pulse bg-muted h-5 w-3/4 rounded-xl"></div><div class="animate-pulse bg-muted h-4 w-1/2 mt-1 rounded-xl"></div></div><div class="p-6 pt-0"><div class="animate-pulse bg-muted h-48 w-full rounded-2xl"></div></div></div></div></main><footer style="padding:0.5rem;text-align:center;font-family:'Segoe UI', system-ui, sans-serif;margin-top:auto" class="text-foreground"><div style="display:inline-flex;align-items:center;gap:0.5rem;font-size:0.9rem;font-weight:600;letter-spacing:0.5px"><span>Created by</span><a href="https://github.com/Arghajit47" target="_blank" rel="noopener noreferrer" style="color:#7737BF;font-weight:700;font-style:italic;text-decoration:none;transition:all 0.2s ease">Arghajit Singha</a></div><div style="margin-top:0.5rem;font-size:0.75rem" class="text-muted-foreground">Crafted with precision</div></footer></div></main></div></main><!--$--><!--/$--><div role="region" aria-label="Notifications (F8)" tabindex="-1" style="pointer-events:none"><ol tabindex="-1" class="fixed top-0 z-[100] flex max-h-screen w-full flex-col-reverse p-4 sm:bottom-0 sm:right-0 sm:top-auto sm:flex-col md:max-w-[420px]"></ol></div><script src="/_next/static/chunks/0imfvrlr~2q89.js" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[39756,[\"/_next/static/chunks/04j4.hz_cv-pf.js\",\"/_next/static/chunks/0~ariudu4in54.js\",\"/_next/static/chunks/1860zsbcg5z1o.js\",\"/_next/static/chunks/13mqc.b~s2gjo.js\"],\"default\"]\n3:I[37457,[\"/_next/static/chunks/04j4.hz_cv-pf.js\",\"/_next/static/chunks/0~ariudu4in54.js\",\"/_next/static/chunks/1860zsbcg5z1o.js\",\"/_next/static/chunks/13mqc.b~s2gjo.js\"],\"default\"]\n4:I[77855,[\"/_next/static/chunks/04j4.hz_cv-pf.js\",\"/_next/static/chunks/0~ariudu4in54.js\",\"/_next/static/chunks/1860zsbcg5z1o.js\",\"/_next/static/chunks/13mqc.b~s2gjo.js\"],\"Toaster\"]\n5:I[95923,[\"/_next/static/chunks/04j4.hz_cv-pf.js\",\"/_next/static/chunks/0~ariudu4in54.js\",\"/_next/static/chunks/1860zsbcg5z1o.js\",\"/_next/static/chunks/13mqc.b~s2gjo.js\",\"/_next/static/chunks/00g8rbqi0h8lk.js\",\"/_next/static/chunks/17~ltcjkf11xe.js\",\"/_next/static/chunks/0w0gkm45qpujx.js\",\"/_next/static/chunks/16navnbzwbp36.js\",\"/_next/static/chunks/0gsquco4lyvb4.js\"],\"PulseDashboard\"]\n6:I[97367,[\"/_next/static/chunks/04j4.hz_cv-pf.js\",\"/_next/static/chunks/0~ariudu4in54.js\",\"/_next/static/chunks/1860zsbcg5z1o.js\",\"/_next/static/chunks/13mqc.b~s2gjo.js\"],\"OutletBoundary\"]\n7:\"$Sreact.suspense\"\n9:I[97367,[\"/_next/static/chunks/04j4.hz_cv-pf.js\",\"/_next/static/chunks/0~ariudu4in54.js\",\"/_next/static/chunks/1860zsbcg5z1o.js\",\"/_next/static/chunks/13mqc.b~s2gjo.js\"],\"ViewportBoundary\"]\nc:I[68027,[\"/_next/static/chunks/04j4.hz_cv-pf.js\",\"/_next/static/chunks/0~ariudu4in54.js\",\"/_next/static/chunks/1860zsbcg5z1o.js\",\"/_next/static/chunks/13mqc.b~s2gjo.js\"],\"default\",1]\n:HL[\"/_next/static/chunks/14rqub-mhf1rm.css\",\"style\"]\n:HL[\"https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700\u0026display=swap\",\"style\"]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"c\":[\"\",\"\"],\"q\":\"\",\"i\":false,\"f\":[[[\"\",{\"children\":[\"__PAGE__\",{}]},\"$undefined\",\"$undefined\",16],[[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/chunks/14rqub-mhf1rm.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-0\",{\"src\":\"/_next/static/chunks/04j4.hz_cv-pf.js\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-1\",{\"src\":\"/_next/static/chunks/0~ariudu4in54.js\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-2\",{\"src\":\"/_next/static/chunks/1860zsbcg5z1o.js\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-3\",{\"src\":\"/_next/static/chunks/13mqc.b~s2gjo.js\",\"async\":true,\"nonce\":\"$undefined\"}]],[\"$\",\"html\",null,{\"lang\":\"en\",\"suppressHydrationWarning\":true,\"children\":[[\"$\",\"head\",null,{\"children\":[[\"$\",\"link\",null,{\"rel\":\"preconnect\",\"href\":\"https://fonts.googleapis.com\"}],[\"$\",\"link\",null,{\"rel\":\"preconnect\",\"href\":\"https://fonts.gstatic.com\",\"crossOrigin\":\"anonymous\"}],[\"$\",\"link\",null,{\"href\":\"https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700\u0026display=swap\",\"rel\":\"stylesheet\"}],[\"$\",\"script\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"\\n (function() {\\n function getInitialColorMode() {\\n const persistedColorPreference = window.localStorage.getItem('pulse-theme');\\n const hasPersistedPreference = typeof persistedColorPreference === 'string';\\n if (hasPersistedPreference) {\\n return persistedColorPreference;\\n }\\n const mql = window.matchMedia('(prefers-color-scheme: dark)');\\n const hasMediaQueryPreference = typeof mql.matches === 'boolean';\\n if (hasMediaQueryPreference) {\\n return mql.matches ? 'dark' : 'light';\\n }\\n return 'light';\\n }\\n const colorMode = getInitialColorMode();\\n if (colorMode === 'dark') {\\n document.documentElement.classList.add('dark');\\n }\\n })();\\n \"}}]]}],[\"$\",\"body\",null,{\"className\":\"font-body antialiased\",\"children\":[[\"$\",\"$L2\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L3\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":[[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"padding\":\"0 23px 0 0\",\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\",\"lineHeight\":\"49px\"},\"children\":404}],[\"$\",\"div\",null,{\"style\":{\"display\":\"inline-block\"},\"children\":[\"$\",\"h2\",null,{\"style\":{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"49px\",\"margin\":0},\"children\":\"This page could not be found.\"}]}]]}]}]],[]],\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}],[\"$\",\"$L4\",null,{}]]}]]}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[[\"$\",\"main\",null,{\"className\":\"min-h-screen flex flex-col\",\"children\":[\"$\",\"$L5\",null,{}]}],[[\"$\",\"script\",\"script-0\",{\"src\":\"/_next/static/chunks/00g8rbqi0h8lk.js\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-1\",{\"src\":\"/_next/static/chunks/17~ltcjkf11xe.js\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-2\",{\"src\":\"/_next/static/chunks/0w0gkm45qpujx.js\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-3\",{\"src\":\"/_next/static/chunks/16navnbzwbp36.js\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-4\",{\"src\":\"/_next/static/chunks/0gsquco4lyvb4.js\",\"async\":true,\"nonce\":\"$undefined\"}]],[\"$\",\"$L6\",null,{\"children\":[\"$\",\"$7\",null,{\"name\":\"Next.MetadataOutlet\",\"children\":\"$@8\"}]}]]}],{},null,false,null]},null,false,null],[\"$\",\"$1\",\"h\",{\"children\":[null,[\"$\",\"$L9\",null,{\"children\":\"$La\"}],\"$Lb\",null]}],false]],\"m\":\"$undefined\",\"G\":[\"$c\",[\"$Ld\"]],\"S\":true,\"h\":null,\"s\":\"$undefined\",\"l\":\"$undefined\",\"p\":\"$undefined\",\"d\":\"$undefined\",\"b\":\"RgESZIprcZznm98mxUv-O\"}\n"])</script><script>self.__next_f.push([1,"e:I[97367,[\"/_next/static/chunks/04j4.hz_cv-pf.js\",\"/_next/static/chunks/0~ariudu4in54.js\",\"/_next/static/chunks/1860zsbcg5z1o.js\",\"/_next/static/chunks/13mqc.b~s2gjo.js\"],\"MetadataBoundary\"]\nb:[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$Le\",null,{\"children\":[\"$\",\"$7\",null,{\"name\":\"Next.Metadata\",\"children\":\"$Lf\"}]}]}]\nd:[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/chunks/14rqub-mhf1rm.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]\n"])</script><script>self.__next_f.push([1,"a:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}]]\n"])</script><script>self.__next_f.push([1,"10:I[27201,[\"/_next/static/chunks/04j4.hz_cv-pf.js\",\"/_next/static/chunks/0~ariudu4in54.js\",\"/_next/static/chunks/1860zsbcg5z1o.js\",\"/_next/static/chunks/13mqc.b~s2gjo.js\"],\"IconMark\"]\n8:null\nf:[[\"$\",\"title\",\"0\",{\"children\":\"Pulse Dashboard\"}],[\"$\",\"meta\",\"1\",{\"name\":\"description\",\"content\":\"Real-time Playwright test execution dashboard\"}],[\"$\",\"link\",\"2\",{\"rel\":\"icon\",\"href\":\"https://ocpaxmghzmfbuhxzxzae.supabase.co/storage/v1/object/public/images/pulse-report/playwright_pulse_icon.png\",\"sizes\":\"48x48\",\"type\":\"image/x-icon\"}],[\"$\",\"$L10\",\"3\",{}]]\n"])</script></body></html>