UNPKG

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 31.2 kB
<!DOCTYPE html><!--gAPx24YKMbNgAuh29LGbZ--><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/98f13066444f98b0.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/4aba24f188aab88f.js"/><script src="/_next/static/chunks/ec55f44e251b8481.js" async=""></script><script src="/_next/static/chunks/5cedbe3d28acc407.js" async=""></script><script src="/_next/static/chunks/d4b4a1ad90e2acdb.js" async=""></script><script src="/_next/static/chunks/c9bfc6dc89d94445.js" async=""></script><script src="/_next/static/chunks/turbopack-4063ae190c9edad5.js" async=""></script><script src="/_next/static/chunks/ff1a16fafef87110.js" async=""></script><script src="/_next/static/chunks/cdad36853a3d0cf6.js" async=""></script><script src="/_next/static/chunks/bb0500a106848313.js" async=""></script><script src="/_next/static/chunks/7ed4bd6bf5216809.js" async=""></script><script src="/_next/static/chunks/fc9b3392d13f74a4.js" async=""></script><script src="/_next/static/chunks/3d164e8e73f04f19.js" async=""></script><script src="/_next/static/chunks/952cc6d18d6c0e81.js" async=""></script><script src="/_next/static/chunks/834bfcac2eca2924.js" async=""></script><link rel="preload" href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&amp;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://i.postimg.cc/v817w4sg/logo.png" sizes="48x48" type="image/x-icon"/><link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&amp;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/a6dad97d9634a72d.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%2Fi.postimg.cc%2Fv817w4sg%2Flogo.png&amp;w=128&amp;q=75 1x, /_next/image?url=https%3A%2F%2Fi.postimg.cc%2Fv817w4sg%2Flogo.png&amp;w=256&amp;q=75 2x" src="/_next/image?url=https%3A%2F%2Fi.postimg.cc%2Fv817w4sg%2Flogo.png&amp;w=256&amp;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-md 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 [&amp;_svg]:pointer-events-none [&amp;_svg]:size-4 [&amp;_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"><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]:[&amp;&gt;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"><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]:[&amp;&gt;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"><path d="m3 17 2 2 4-4"></path><path d="m3 7 2 2 4-4"></path><path d="M13 6h8"></path><path d="M13 12h8"></path><path d="M13 18h8"></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]:[&amp;&gt;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"><polyline points="22 7 13.5 15.5 8.5 10.5 2 17"></polyline><polyline points="16 7 22 7 22 13"></polyline></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]:[&amp;&gt;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"><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]:[&amp;&gt;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"><path d="M11 12H3"></path><path d="M16 6H3"></path><path d="M16 18H3"></path><path d="m19 10-4 4"></path><path d="m15 10 4 4"></path></svg><span style="color:hsl(var(--sidebar-tab-failures-color-hsl))">Failure Categorization</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]:[&amp;&gt;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"><path d="M12.22 2h-.44a2 2 0 0 0-2 2v.18a2 2 0 0 1-1 1.73l-.43.25a2 2 0 0 1-2 0l-.15-.08a2 2 0 0 0-2.73.73l-.22.38a2 2 0 0 0 .73 2.73l.15.1a2 2 0 0 1 1 1.72v.51a2 2 0 0 1-1 1.74l-.15.09a2 2 0 0 0-.73 2.73l.22.38a2 2 0 0 0 2.73.73l.15-.08a2 2 0 0 1 2 0l.43.25a2 2 0 0 1 1 1.73V20a2 2 0 0 0 2 2h.44a2 2 0 0 0 2-2v-.18a2 2 0 0 1 1-1.73l.43-.25a2 2 0 0 1 2 0l.15.08a2 2 0 0 0 2.73-.73l.22-.39a2 2 0 0 0-.73-2.73l-.15-.08a2 2 0 0 1-1-1.74v-.5a2 2 0 0 1 1-1.74l.15-.09a2 2 0 0 0 .73-2.73l-.22-.38a2 2 0 0 0-2.73-.73l-.15.08a2 2 0 0 1-2 0l-.43-.25a2 2 0 0 1-1-1.73V4a2 2 0 0 0-2-2z"></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"><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-xl 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 &amp; 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-md"></div><div class="animate-pulse bg-muted h-4 w-1/2 mt-1 rounded-md"></div></div><div class="p-6 pt-0"><div class="animate-pulse bg-muted h-48 w-full rounded-lg"></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-md"></div><div class="animate-pulse bg-muted h-4 w-1/2 mt-1 rounded-md"></div></div><div class="p-6 pt-0"><div class="animate-pulse bg-muted h-48 w-full rounded-lg"></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-md"></div><div class="animate-pulse bg-muted h-4 w-1/2 mt-1 rounded-md"></div></div><div class="p-6 pt-0"><div class="animate-pulse bg-muted h-48 w-full rounded-lg"></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-md"></div><div class="animate-pulse bg-muted h-4 w-1/2 mt-1 rounded-md"></div></div><div class="p-6 pt-0"><div class="animate-pulse bg-muted h-48 w-full rounded-lg"></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-md"></div><div class="animate-pulse bg-muted h-4 w-1/2 mt-1 rounded-md"></div></div><div class="p-6 pt-0"><div class="animate-pulse bg-muted h-48 w-full rounded-lg"></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-md"></div><div class="animate-pulse bg-muted h-4 w-1/2 mt-1 rounded-md"></div></div><div class="p-6 pt-0"><div class="animate-pulse bg-muted h-48 w-full rounded-lg"></div></div></div></div></main><footer style="padding:0.5rem;box-shadow:0 -2px 10px rgba(0, 0, 0, 0.05);text-align:center;font-family:&#x27;Segoe UI&#x27;, 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/4aba24f188aab88f.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/ff1a16fafef87110.js\",\"/_next/static/chunks/cdad36853a3d0cf6.js\"],\"default\"]\n3:I[37457,[\"/_next/static/chunks/ff1a16fafef87110.js\",\"/_next/static/chunks/cdad36853a3d0cf6.js\"],\"default\"]\n4:I[77855,[\"/_next/static/chunks/bb0500a106848313.js\",\"/_next/static/chunks/7ed4bd6bf5216809.js\"],\"Toaster\"]\n5:I[95923,[\"/_next/static/chunks/bb0500a106848313.js\",\"/_next/static/chunks/7ed4bd6bf5216809.js\",\"/_next/static/chunks/fc9b3392d13f74a4.js\",\"/_next/static/chunks/3d164e8e73f04f19.js\",\"/_next/static/chunks/952cc6d18d6c0e81.js\",\"/_next/static/chunks/834bfcac2eca2924.js\"],\"PulseDashboard\"]\n6:I[97367,[\"/_next/static/chunks/ff1a16fafef87110.js\",\"/_next/static/chunks/cdad36853a3d0cf6.js\"],\"OutletBoundary\"]\n7:\"$Sreact.suspense\"\n9:I[97367,[\"/_next/static/chunks/ff1a16fafef87110.js\",\"/_next/static/chunks/cdad36853a3d0cf6.js\"],\"ViewportBoundary\"]\nb:I[97367,[\"/_next/static/chunks/ff1a16fafef87110.js\",\"/_next/static/chunks/cdad36853a3d0cf6.js\"],\"MetadataBoundary\"]\nd:I[68027,[\"/_next/static/chunks/ff1a16fafef87110.js\",\"/_next/static/chunks/cdad36853a3d0cf6.js\"],\"default\"]\n:HL[\"/_next/static/chunks/98f13066444f98b0.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,\"b\":\"gAPx24YKMbNgAuh29LGbZ\",\"c\":[\"\",\"\"],\"q\":\"\",\"i\":false,\"f\":[[[\"\",{\"children\":[\"__PAGE__\",{}]},\"$undefined\",\"$undefined\",true],[[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/chunks/98f13066444f98b0.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-0\",{\"src\":\"/_next/static/chunks/bb0500a106848313.js\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-1\",{\"src\":\"/_next/static/chunks/7ed4bd6bf5216809.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/fc9b3392d13f74a4.js\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-1\",{\"src\":\"/_next/static/chunks/3d164e8e73f04f19.js\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-2\",{\"src\":\"/_next/static/chunks/952cc6d18d6c0e81.js\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-3\",{\"src\":\"/_next/static/chunks/834bfcac2eca2924.js\",\"async\":true,\"nonce\":\"$undefined\"}]],[\"$\",\"$L6\",null,{\"children\":[\"$\",\"$7\",null,{\"name\":\"Next.MetadataOutlet\",\"children\":\"$@8\"}]}]]}],{},null,false,false]},null,false,false],[\"$\",\"$1\",\"h\",{\"children\":[null,[\"$\",\"$L9\",null,{\"children\":\"$La\"}],[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$Lb\",null,{\"children\":[\"$\",\"$7\",null,{\"name\":\"Next.Metadata\",\"children\":\"$Lc\"}]}]}],null]}],false]],\"m\":\"$undefined\",\"G\":[\"$d\",[]],\"S\":true}\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,"e:I[27201,[\"/_next/static/chunks/ff1a16fafef87110.js\",\"/_next/static/chunks/cdad36853a3d0cf6.js\"],\"IconMark\"]\n8:null\nc:[[\"$\",\"title\",\"0\",{\"children\":\"Pulse Dashboard\"}],[\"$\",\"meta\",\"1\",{\"name\":\"description\",\"content\":\"Real-time Playwright test execution dashboard\"}],[\"$\",\"link\",\"2\",{\"rel\":\"icon\",\"href\":\"https://i.postimg.cc/v817w4sg/logo.png\",\"sizes\":\"48x48\",\"type\":\"image/x-icon\"}],[\"$\",\"$Le\",\"3\",{}]]\n"])</script></body></html>