ℹ️ [WEBSITE] INFO: [RouteGuard] Auth page detected
  Timestamp: 2026-01-17T15:51:02.368Z
  Source: website
[SESSION] Using server component cookies, length: 0
[SESSION] Cookie string: 
[SESSION] No cookies found, returning null
ℹ️ [WEBSITE] INFO: [RouteGuard] No session, allowing access to auth page
  Timestamp: 2026-01-17T15:51:02.377Z
  Source: website
 GET /auth/login?returnTo=%2Fdashboard 200 in 90ms
ℹ️ [WEBSITE] INFO: [MIDDLEWARE] ========== REQUEST START ==========
%cTimestamp: color: #666; font-weight: bold; 2026-01-17T15:51:07.491Z
%cSource: color: #666; font-weight: bold; website
ℹ️ [WEBSITE] INFO: [MIDDLEWARE] Request details
%cTimestamp: color: #666; font-weight: bold; 2026-01-17T15:51:07.491Z
%cSource: color: #666; font-weight: bold; website
%cContext: color: #666; font-weight: bold;
{
  pathname: [32m'/'[39m,
  method: [32m'GET'[39m,
  url: [32m'http://localhost:3000/'[39m,
  cookieHeaderLength: [33m0[39m,
  cookiePreview: [32m''[39m
}
ℹ️ [WEBSITE] INFO: [MIDDLEWARE] Fetching session...
%cTimestamp: color: #666; font-weight: bold; 2026-01-17T15:51:07.491Z
%cSource: color: #666; font-weight: bold; website
[SESSION] NextRequest cookie header length: 0
[SESSION] NextRequest cookie header: 
[SESSION] Using provided cookie header, length: 0
[SESSION] Cookie string: 
[SESSION] No cookies found, returning null
ℹ️ [WEBSITE] INFO: [MIDDLEWARE] Session fetched
%cTimestamp: color: #666; font-weight: bold; 2026-01-17T15:51:07.491Z
%cSource: color: #666; font-weight: bold; website
%cContext: color: #666; font-weight: bold;
{
  hasSession: [33mfalse[39m,
  userId: [90mundefined[39m,
  role: [90mundefined[39m,
  sessionData: [32m'null'[39m
}
ℹ️ [WEBSITE] INFO: [MIDDLEWARE] Auth session converted
%cTimestamp: color: #666; font-weight: bold; 2026-01-17T15:51:07.491Z
%cSource: color: #666; font-weight: bold; website
%cContext: color: #666; font-weight: bold;
{ authSession: [32m'null'[39m }
ℹ️ [WEBSITE] INFO: [RouteConfig] isPublic check
%cTimestamp: color: #666; font-weight: bold; 2026-01-17T15:51:07.491Z
%cSource: color: #666; font-weight: bold; website
%cContext: color: #666; font-weight: bold;
{ path: [32m'/'[39m }
ℹ️ [WEBSITE] INFO: [RouteConfig] Path is public (exact match)
%cTimestamp: color: #666; font-weight: bold; 2026-01-17T15:51:07.492Z
%cSource: color: #666; font-weight: bold; website
%cContext: color: #666; font-weight: bold;
{ path: [32m'/'[39m }
ℹ️ [WEBSITE] INFO: [RouteConfig] requiresRole check
%cTimestamp: color: #666; font-weight: bold; 2026-01-17T15:51:07.492Z
%cSource: color: #666; font-weight: bold; website
%cContext: color: #666; font-weight: bold;
{ path: [32m'/'[39m }
ℹ️ [WEBSITE] INFO: [RouteConfig] Path requires no specific role
%cTimestamp: color: #666; font-weight: bold; 2026-01-17T15:51:07.492Z
%cSource: color: #666; font-weight: bold; website
%cContext: color: #666; font-weight: bold;
{ path: [32m'/'[39m }
ℹ️ [WEBSITE] INFO: [MIDDLEWARE] Route classification
%cTimestamp: color: #666; font-weight: bold; 2026-01-17T15:51:07.492Z
%cSource: color: #666; font-weight: bold; website
%cContext: color: #666; font-weight: bold;
{ path: [32m'/'[39m, isPublic: [33mtrue[39m, requiresRole: [1mnull[22m }
ℹ️ [WEBSITE] INFO: [MIDDLEWARE] Calling handleAuthFlow...
%cTimestamp: color: #666; font-weight: bold; 2026-01-17T15:51:07.492Z
%cSource: color: #666; font-weight: bold; website
ℹ️ [WEBSITE] INFO: [handleAuthFlow] Called
%cTimestamp: color: #666; font-weight: bold; 2026-01-17T15:51:07.492Z
%cSource: color: #666; font-weight: bold; website
%cContext: color: #666; font-weight: bold;
{ hasSession: [33mfalse[39m, sessionRole: [90mundefined[39m, requestedPath: [32m'/'[39m }
ℹ️ [WEBSITE] INFO: [RouteConfig] isPublic check
%cTimestamp: color: #666; font-weight: bold; 2026-01-17T15:51:07.492Z
%cSource: color: #666; font-weight: bold; website
%cContext: color: #666; font-weight: bold;
{ path: [32m'/'[39m }
ℹ️ [WEBSITE] INFO: [RouteConfig] Path is public (exact match)
%cTimestamp: color: #666; font-weight: bold; 2026-01-17T15:51:07.492Z
%cSource: color: #666; font-weight: bold; website
%cContext: color: #666; font-weight: bold;
{ path: [32m'/'[39m }
ℹ️ [WEBSITE] INFO: [RouteConfig] requiresRole check
%cTimestamp: color: #666; font-weight: bold; 2026-01-17T15:51:07.492Z
%cSource: color: #666; font-weight: bold; website
%cContext: color: #666; font-weight: bold;
{ path: [32m'/'[39m }
ℹ️ [WEBSITE] INFO: [RouteConfig] Path requires no specific role
%cTimestamp: color: #666; font-weight: bold; 2026-01-17T15:51:07.492Z
%cSource: color: #666; font-weight: bold; website
%cContext: color: #666; font-weight: bold;
{ path: [32m'/'[39m }
ℹ️ [WEBSITE] INFO: [AuthFlowRouter] getAction called
%cTimestamp: color: #666; font-weight: bold; 2026-01-17T15:51:07.492Z
%cSource: color: #666; font-weight: bold; website
%cContext: color: #666; font-weight: bold;
{
  requestedPath: [32m'/'[39m,
  isPublic: [33mtrue[39m,
  hasSession: [33mfalse[39m,
  requiredRoles: [1mnull[22m
}
ℹ️ [WEBSITE] INFO: [AuthFlowRouter] Public route, showing page
%cTimestamp: color: #666; font-weight: bold; 2026-01-17T15:51:07.492Z
%cSource: color: #666; font-weight: bold; website
ℹ️ [WEBSITE] INFO: [handleAuthFlow] Action determined
%cTimestamp: color: #666; font-weight: bold; 2026-01-17T15:51:07.492Z
%cSource: color: #666; font-weight: bold; website
%cContext: color: #666; font-weight: bold;
{ actionType: [32m'SHOW_PAGE'[39m, action: [32m'{\n  "type": "SHOW_PAGE"\n}'[39m }
ℹ️ [WEBSITE] INFO: [handleAuthFlow] Returning SHOW_PAGE
%cTimestamp: color: #666; font-weight: bold; 2026-01-17T15:51:07.492Z
%cSource: color: #666; font-weight: bold; website
ℹ️ [WEBSITE] INFO: [MIDDLEWARE] handleAuthFlow result
%cTimestamp: color: #666; font-weight: bold; 2026-01-17T15:51:07.492Z
%cSource: color: #666; font-weight: bold; website
%cContext: color: #666; font-weight: bold;
{
  result: [32m'{\n  "shouldRedirect": false,\n  "shouldShowPage": true\n}'[39m
}
ℹ️ [WEBSITE] INFO: [MIDDLEWARE] Decision summary
%cTimestamp: color: #666; font-weight: bold; 2026-01-17T15:51:07.492Z
%cSource: color: #666; font-weight: bold; website
%cContext: color: #666; font-weight: bold;
{
  pathname: [32m'/'[39m,
  hasSession: [33mfalse[39m,
  role: [90mundefined[39m,
  shouldRedirect: [33mfalse[39m,
  redirectUrl: [90mundefined[39m
}
ℹ️ [WEBSITE] INFO: [MIDDLEWARE] ALLOWING ACCESS
%cTimestamp: color: #666; font-weight: bold; 2026-01-17T15:51:07.492Z
%cSource: color: #666; font-weight: bold; website
%cContext: color: #666; font-weight: bold;
{ pathname: [32m'/'[39m }
ℹ️ [WEBSITE] INFO: [MIDDLEWARE] ========== REQUEST END (ALLOW) ==========
%cTimestamp: color: #666; font-weight: bold; 2026-01-17T15:51:07.492Z
%cSource: color: #666; font-weight: bold; website
ℹ️ [WEBSITE] INFO: Global error handler skipped (server-side)
  Timestamp: 2026-01-17T15:51:07.517Z
  Source: website
🐛 [WEBSITE] DEBUG: API Request: GET http://api:3000/auth/session
  Timestamp: 2026-01-17T15:51:07.519Z
  Source: website
  Context:
  {
    requestId: [32m'req_1768665067519_1'[39m,
    timestamp: [32m'2026-01-17T15:51:07.519Z'[39m,
    headers: { [32m'Content-Type'[39m: [32m'application/json'[39m },
    body: [90mundefined[39m
  }
ℹ️ [WEBSITE] INFO: API Response: GET http://api:3000/auth/session
  Timestamp: 2026-01-17T15:51:07.559Z
  Source: website
  Context:
  {
    requestId: [32m'req_1768665067519_1'[39m,
    duration: [32m'39.00ms'[39m,
    status: [32m'200 OK'[39m,
    body: [1mnull[22m
  }
ℹ️ [WEBSITE] INFO: [MIDDLEWARE] ========== REQUEST START ==========
%cTimestamp: color: #666; font-weight: bold; 2026-01-17T15:51:07.596Z
%cSource: color: #666; font-weight: bold; website
ℹ️ [WEBSITE] INFO: [MIDDLEWARE] Request details
%cTimestamp: color: #666; font-weight: bold; 2026-01-17T15:51:07.596Z
%cSource: color: #666; font-weight: bold; website
%cContext: color: #666; font-weight: bold;
{
  pathname: [32m'/dashboard'[39m,
  method: [32m'GET'[39m,
  url: [32m'http://localhost:3000/dashboard'[39m,
  cookieHeaderLength: [33m0[39m,
  cookiePreview: [32m''[39m
}
ℹ️ [WEBSITE] INFO: [MIDDLEWARE] Fetching session...
%cTimestamp: color: #666; font-weight: bold; 2026-01-17T15:51:07.596Z
%cSource: color: #666; font-weight: bold; website
[SESSION] NextRequest cookie header length: 0
[SESSION] NextRequest cookie header: 
[SESSION] Using provided cookie header, length: 0
[SESSION] Cookie string: 
[SESSION] No cookies found, returning null
ℹ️ [WEBSITE] INFO: [MIDDLEWARE] Session fetched
%cTimestamp: color: #666; font-weight: bold; 2026-01-17T15:51:07.596Z
%cSource: color: #666; font-weight: bold; website
%cContext: color: #666; font-weight: bold;
{
  hasSession: [33mfalse[39m,
  userId: [90mundefined[39m,
  role: [90mundefined[39m,
  sessionData: [32m'null'[39m
}
ℹ️ [WEBSITE] INFO: [MIDDLEWARE] Auth session converted
%cTimestamp: color: #666; font-weight: bold; 2026-01-17T15:51:07.596Z
%cSource: color: #666; font-weight: bold; website
%cContext: color: #666; font-weight: bold;
{ authSession: [32m'null'[39m }
ℹ️ [WEBSITE] INFO: [RouteConfig] isPublic check
%cTimestamp: color: #666; font-weight: bold; 2026-01-17T15:51:07.596Z
%cSource: color: #666; font-weight: bold; website
%cContext: color: #666; font-weight: bold;
{ path: [32m'/dashboard'[39m }
ℹ️ [WEBSITE] INFO: [RouteConfig] Path is NOT public
%cTimestamp: color: #666; font-weight: bold; 2026-01-17T15:51:07.596Z
%cSource: color: #666; font-weight: bold; website
%cContext: color: #666; font-weight: bold;
{ path: [32m'/dashboard'[39m }
ℹ️ [WEBSITE] INFO: [RouteConfig] requiresRole check
%cTimestamp: color: #666; font-weight: bold; 2026-01-17T15:51:07.596Z
%cSource: color: #666; font-weight: bold; website
%cContext: color: #666; font-weight: bold;
{ path: [32m'/dashboard'[39m }
ℹ️ [WEBSITE] INFO: [RouteConfig] Path requires no specific role
%cTimestamp: color: #666; font-weight: bold; 2026-01-17T15:51:07.596Z
%cSource: color: #666; font-weight: bold; website
%cContext: color: #666; font-weight: bold;
{ path: [32m'/dashboard'[39m }
ℹ️ [WEBSITE] INFO: [MIDDLEWARE] Route classification
%cTimestamp: color: #666; font-weight: bold; 2026-01-17T15:51:07.596Z
%cSource: color: #666; font-weight: bold; website
%cContext: color: #666; font-weight: bold;
{ path: [32m'/dashboard'[39m, isPublic: [33mfalse[39m, requiresRole: [1mnull[22m }
ℹ️ [WEBSITE] INFO: [MIDDLEWARE] Calling handleAuthFlow...
%cTimestamp: color: #666; font-weight: bold; 2026-01-17T15:51:07.596Z
%cSource: color: #666; font-weight: bold; website
ℹ️ [WEBSITE] INFO: [handleAuthFlow] Called
%cTimestamp: color: #666; font-weight: bold; 2026-01-17T15:51:07.596Z
%cSource: color: #666; font-weight: bold; website
%cContext: color: #666; font-weight: bold;
{
  hasSession: [33mfalse[39m,
  sessionRole: [90mundefined[39m,
  requestedPath: [32m'/dashboard'[39m
}
ℹ️ [WEBSITE] INFO: [RouteConfig] isPublic check
%cTimestamp: color: #666; font-weight: bold; 2026-01-17T15:51:07.596Z
%cSource: color: #666; font-weight: bold; website
%cContext: color: #666; font-weight: bold;
{ path: [32m'/dashboard'[39m }
ℹ️ [WEBSITE] INFO: [RouteConfig] Path is NOT public
%cTimestamp: color: #666; font-weight: bold; 2026-01-17T15:51:07.596Z
%cSource: color: #666; font-weight: bold; website
%cContext: color: #666; font-weight: bold;
{ path: [32m'/dashboard'[39m }
ℹ️ [WEBSITE] INFO: [RouteConfig] requiresRole check
%cTimestamp: color: #666; font-weight: bold; 2026-01-17T15:51:07.596Z
%cSource: color: #666; font-weight: bold; website
%cContext: color: #666; font-weight: bold;
{ path: [32m'/dashboard'[39m }
ℹ️ [WEBSITE] INFO: [RouteConfig] Path requires no specific role
%cTimestamp: color: #666; font-weight: bold; 2026-01-17T15:51:07.596Z
%cSource: color: #666; font-weight: bold; website
%cContext: color: #666; font-weight: bold;
{ path: [32m'/dashboard'[39m }
ℹ️ [WEBSITE] INFO: [AuthFlowRouter] getAction called
%cTimestamp: color: #666; font-weight: bold; 2026-01-17T15:51:07.596Z
%cSource: color: #666; font-weight: bold; website
%cContext: color: #666; font-weight: bold;
{
  requestedPath: [32m'/dashboard'[39m,
  isPublic: [33mfalse[39m,
  hasSession: [33mfalse[39m,
  requiredRoles: [1mnull[22m
}
ℹ️ [WEBSITE] INFO: [AuthFlowRouter] No session, redirecting to login
%cTimestamp: color: #666; font-weight: bold; 2026-01-17T15:51:07.596Z
%cSource: color: #666; font-weight: bold; website
ℹ️ [WEBSITE] INFO: [handleAuthFlow] Action determined
%cTimestamp: color: #666; font-weight: bold; 2026-01-17T15:51:07.596Z
%cSource: color: #666; font-weight: bold; website
%cContext: color: #666; font-weight: bold;
{
  actionType: [32m'REDIRECT_TO_LOGIN'[39m,
  action: [32m'{\n  "type": "REDIRECT_TO_LOGIN",\n  "returnTo": "/dashboard"\n}'[39m
}
ℹ️ [WEBSITE] INFO: [AuthFlowRouter] getAction called
%cTimestamp: color: #666; font-weight: bold; 2026-01-17T15:51:07.596Z
%cSource: color: #666; font-weight: bold; website
%cContext: color: #666; font-weight: bold;
{
  requestedPath: [32m'/dashboard'[39m,
  isPublic: [33mfalse[39m,
  hasSession: [33mfalse[39m,
  requiredRoles: [1mnull[22m
}
ℹ️ [WEBSITE] INFO: [AuthFlowRouter] No session, redirecting to login
%cTimestamp: color: #666; font-weight: bold; 2026-01-17T15:51:07.596Z
%cSource: color: #666; font-weight: bold; website
ℹ️ [WEBSITE] INFO: [handleAuthFlow] Returning REDIRECT_TO_LOGIN
%cTimestamp: color: #666; font-weight: bold; 2026-01-17T15:51:07.596Z
%cSource: color: #666; font-weight: bold; website
%cContext: color: #666; font-weight: bold;
{ loginUrl: [32m'/auth/login?returnTo=%2Fdashboard'[39m }
ℹ️ [WEBSITE] INFO: [MIDDLEWARE] handleAuthFlow result
%cTimestamp: color: #666; font-weight: bold; 2026-01-17T15:51:07.596Z
%cSource: color: #666; font-weight: bold; website
%cContext: color: #666; font-weight: bold;
{
  result: [32m'{\n'[39m +
    [32m'  "shouldRedirect": true,\n'[39m +
    [32m'  "redirectUrl": "/auth/login?returnTo=%2Fdashboard"\n'[39m +
    [32m'}'[39m
}
ℹ️ [WEBSITE] INFO: [MIDDLEWARE] Decision summary
%cTimestamp: color: #666; font-weight: bold; 2026-01-17T15:51:07.596Z
%cSource: color: #666; font-weight: bold; website
%cContext: color: #666; font-weight: bold;
{
  pathname: [32m'/dashboard'[39m,
  hasSession: [33mfalse[39m,
  role: [90mundefined[39m,
  shouldRedirect: [33mtrue[39m,
  redirectUrl: [32m'/auth/login?returnTo=%2Fdashboard'[39m
}
ℹ️ [WEBSITE] INFO: [MIDDLEWARE] REDIRECTING
%cTimestamp: color: #666; font-weight: bold; 2026-01-17T15:51:07.596Z
%cSource: color: #666; font-weight: bold; website
%cContext: color: #666; font-weight: bold;
{
  from: [32m'/dashboard'[39m,
  to: [32m'http://localhost:3000/auth/login?returnTo=%2Fdashboard'[39m
}
ℹ️ [WEBSITE] INFO: [MIDDLEWARE] ========== REQUEST END (REDIRECT) ==========
%cTimestamp: color: #666; font-weight: bold; 2026-01-17T15:51:07.597Z
%cSource: color: #666; font-weight: bold; website
 GET / 307 in 106ms
ℹ️ [WEBSITE] INFO: [MIDDLEWARE] ========== REQUEST START ==========
%cTimestamp: color: #666; font-weight: bold; 2026-01-17T15:51:07.608Z
%cSource: color: #666; font-weight: bold; website
ℹ️ [WEBSITE] INFO: [MIDDLEWARE] Request details
%cTimestamp: color: #666; font-weight: bold; 2026-01-17T15:51:07.608Z
%cSource: color: #666; font-weight: bold; website
%cContext: color: #666; font-weight: bold;
{
  pathname: [32m'/auth/login'[39m,
  method: [32m'GET'[39m,
  url: [32m'http://localhost:3000/auth/login?returnTo=%2Fdashboard'[39m,
  cookieHeaderLength: [33m0[39m,
  cookiePreview: [32m''[39m
}
ℹ️ [WEBSITE] INFO: [MIDDLEWARE] Fetching session...
%cTimestamp: color: #666; font-weight: bold; 2026-01-17T15:51:07.608Z
%cSource: color: #666; font-weight: bold; website
[SESSION] NextRequest cookie header length: 0
[SESSION] NextRequest cookie header: 
[SESSION] Using provided cookie header, length: 0
[SESSION] Cookie string: 
[SESSION] No cookies found, returning null
ℹ️ [WEBSITE] INFO: [MIDDLEWARE] Session fetched
%cTimestamp: color: #666; font-weight: bold; 2026-01-17T15:51:07.608Z
%cSource: color: #666; font-weight: bold; website
%cContext: color: #666; font-weight: bold;
{
  hasSession: [33mfalse[39m,
  userId: [90mundefined[39m,
  role: [90mundefined[39m,
  sessionData: [32m'null'[39m
}
ℹ️ [WEBSITE] INFO: [MIDDLEWARE] Auth session converted
%cTimestamp: color: #666; font-weight: bold; 2026-01-17T15:51:07.608Z
%cSource: color: #666; font-weight: bold; website
%cContext: color: #666; font-weight: bold;
{ authSession: [32m'null'[39m }
ℹ️ [WEBSITE] INFO: [RouteConfig] isPublic check
%cTimestamp: color: #666; font-weight: bold; 2026-01-17T15:51:07.608Z
%cSource: color: #666; font-weight: bold; website
%cContext: color: #666; font-weight: bold;
{ path: [32m'/auth/login'[39m }
ℹ️ [WEBSITE] INFO: [RouteConfig] Path is public (exact match)
%cTimestamp: color: #666; font-weight: bold; 2026-01-17T15:51:07.608Z
%cSource: color: #666; font-weight: bold; website
%cContext: color: #666; font-weight: bold;
{ path: [32m'/auth/login'[39m }
ℹ️ [WEBSITE] INFO: [RouteConfig] requiresRole check
%cTimestamp: color: #666; font-weight: bold; 2026-01-17T15:51:07.608Z
%cSource: color: #666; font-weight: bold; website
%cContext: color: #666; font-weight: bold;
{ path: [32m'/auth/login'[39m }
ℹ️ [WEBSITE] INFO: [RouteConfig] Path requires no specific role
%cTimestamp: color: #666; font-weight: bold; 2026-01-17T15:51:07.608Z
%cSource: color: #666; font-weight: bold; website
%cContext: color: #666; font-weight: bold;
{ path: [32m'/auth/login'[39m }
ℹ️ [WEBSITE] INFO: [MIDDLEWARE] Route classification
%cTimestamp: color: #666; font-weight: bold; 2026-01-17T15:51:07.608Z
%cSource: color: #666; font-weight: bold; website
%cContext: color: #666; font-weight: bold;
{ path: [32m'/auth/login'[39m, isPublic: [33mtrue[39m, requiresRole: [1mnull[22m }
ℹ️ [WEBSITE] INFO: [MIDDLEWARE] Calling handleAuthFlow...
%cTimestamp: color: #666; font-weight: bold; 2026-01-17T15:51:07.608Z
%cSource: color: #666; font-weight: bold; website
ℹ️ [WEBSITE] INFO: [handleAuthFlow] Called
%cTimestamp: color: #666; font-weight: bold; 2026-01-17T15:51:07.608Z
%cSource: color: #666; font-weight: bold; website
%cContext: color: #666; font-weight: bold;
{
  hasSession: [33mfalse[39m,
  sessionRole: [90mundefined[39m,
  requestedPath: [32m'/auth/login'[39m
}
ℹ️ [WEBSITE] INFO: [RouteConfig] isPublic check
%cTimestamp: color: #666; font-weight: bold; 2026-01-17T15:51:07.608Z
%cSource: color: #666; font-weight: bold; website
%cContext: color: #666; font-weight: bold;
{ path: [32m'/auth/login'[39m }
ℹ️ [WEBSITE] INFO: [RouteConfig] Path is public (exact match)
%cTimestamp: color: #666; font-weight: bold; 2026-01-17T15:51:07.608Z
%cSource: color: #666; font-weight: bold; website
%cContext: color: #666; font-weight: bold;
{ path: [32m'/auth/login'[39m }
ℹ️ [WEBSITE] INFO: [RouteConfig] requiresRole check
%cTimestamp: color: #666; font-weight: bold; 2026-01-17T15:51:07.608Z
%cSource: color: #666; font-weight: bold; website
%cContext: color: #666; font-weight: bold;
{ path: [32m'/auth/login'[39m }
ℹ️ [WEBSITE] INFO: [RouteConfig] Path requires no specific role
%cTimestamp: color: #666; font-weight: bold; 2026-01-17T15:51:07.609Z
%cSource: color: #666; font-weight: bold; website
%cContext: color: #666; font-weight: bold;
{ path: [32m'/auth/login'[39m }
ℹ️ [WEBSITE] INFO: [AuthFlowRouter] getAction called
%cTimestamp: color: #666; font-weight: bold; 2026-01-17T15:51:07.609Z
%cSource: color: #666; font-weight: bold; website
%cContext: color: #666; font-weight: bold;
{
  requestedPath: [32m'/auth/login'[39m,
  isPublic: [33mtrue[39m,
  hasSession: [33mfalse[39m,
  requiredRoles: [1mnull[22m
}
ℹ️ [WEBSITE] INFO: [AuthFlowRouter] Public route, showing page
%cTimestamp: color: #666; font-weight: bold; 2026-01-17T15:51:07.609Z
%cSource: color: #666; font-weight: bold; website
ℹ️ [WEBSITE] INFO: [handleAuthFlow] Action determined
%cTimestamp: color: #666; font-weight: bold; 2026-01-17T15:51:07.609Z
%cSource: color: #666; font-weight: bold; website
%cContext: color: #666; font-weight: bold;
{ actionType: [32m'SHOW_PAGE'[39m, action: [32m'{\n  "type": "SHOW_PAGE"\n}'[39m }
ℹ️ [WEBSITE] INFO: [handleAuthFlow] Returning SHOW_PAGE
%cTimestamp: color: #666; font-weight: bold; 2026-01-17T15:51:07.609Z
%cSource: color: #666; font-weight: bold; website
ℹ️ [WEBSITE] INFO: [MIDDLEWARE] handleAuthFlow result
%cTimestamp: color: #666; font-weight: bold; 2026-01-17T15:51:07.609Z
%cSource: color: #666; font-weight: bold; website
%cContext: color: #666; font-weight: bold;
{
  result: [32m'{\n  "shouldRedirect": false,\n  "shouldShowPage": true\n}'[39m
}
ℹ️ [WEBSITE] INFO: [MIDDLEWARE] Decision summary
%cTimestamp: color: #666; font-weight: bold; 2026-01-17T15:51:07.609Z
%cSource: color: #666; font-weight: bold; website
%cContext: color: #666; font-weight: bold;
{
  pathname: [32m'/auth/login'[39m,
  hasSession: [33mfalse[39m,
  role: [90mundefined[39m,
  shouldRedirect: [33mfalse[39m,
  redirectUrl: [90mundefined[39m
}
ℹ️ [WEBSITE] INFO: [MIDDLEWARE] ALLOWING ACCESS
%cTimestamp: color: #666; font-weight: bold; 2026-01-17T15:51:07.609Z
%cSource: color: #666; font-weight: bold; website
%cContext: color: #666; font-weight: bold;
{ pathname: [32m'/auth/login'[39m }
ℹ️ [WEBSITE] INFO: [MIDDLEWARE] ========== REQUEST END (ALLOW) ==========
%cTimestamp: color: #666; font-weight: bold; 2026-01-17T15:51:07.609Z
%cSource: color: #666; font-weight: bold; website
ℹ️ [WEBSITE] INFO: Global error handler skipped (server-side)
  Timestamp: 2026-01-17T15:51:07.652Z
  Source: website
ℹ️ [WEBSITE] INFO: [RouteGuard] enforce called
  Timestamp: 2026-01-17T15:51:07.668Z
  Source: website
  Context:
  { pathname: [32m'/auth/login'[39m }
ℹ️ [WEBSITE] INFO: [RouteGuard] logicalPathname
  Timestamp: 2026-01-17T15:51:07.668Z
  Source: website
  Context:
  { logicalPathname: [32m'/auth/login'[39m }
ℹ️ [WEBSITE] INFO: [RouteGuard] Auth page detected
  Timestamp: 2026-01-17T15:51:07.669Z
  Source: website
[SESSION] Using server component cookies, length: 0
[SESSION] Cookie string: 
[SESSION] No cookies found, returning null
ℹ️ [WEBSITE] INFO: [RouteGuard] No session, allowing access to auth page
  Timestamp: 2026-01-17T15:51:07.737Z
  Source: website
 GET /auth/login?returnTo=%2Fdashboard 200 in 203ms
