From 4eb9684291937e64625c4d2e5fb00608eaa3bf56 Mon Sep 17 00:00:00 2001 From: "Leivur R. Djurhuus" Date: Sat, 28 Feb 2026 22:34:23 -0600 Subject: [PATCH] Refactor login page layout and styles for improved branding and accessibility --- src/app/(auth)/login/page.tsx | 150 ++++++++++++++++---------- src/app/globals.css | 114 +++++++++++--------- src/components/layout/breadcrumbs.tsx | 13 ++- src/components/layout/sidebar.tsx | 57 ++++++---- src/components/layout/topbar.tsx | 6 +- src/components/ui/badge.tsx | 2 +- src/components/ui/card.tsx | 2 +- 7 files changed, 205 insertions(+), 139 deletions(-) diff --git a/src/app/(auth)/login/page.tsx b/src/app/(auth)/login/page.tsx index 9e74013..9dfd060 100644 --- a/src/app/(auth)/login/page.tsx +++ b/src/app/(auth)/login/page.tsx @@ -1,13 +1,6 @@ import { auth, signIn } from "@/lib/auth"; import { redirect } from "next/navigation"; import { Button } from "@/components/ui/button"; -import { - Card, - CardContent, - CardDescription, - CardHeader, - CardTitle, -} from "@/components/ui/card"; export default async function LoginPage() { const session = await auth(); @@ -17,69 +10,110 @@ export default async function LoginPage() { } return ( -
- - - - HP CG Production Tracker - - Sign in to manage your production pipeline - - -
{ - "use server"; - await signIn("google", { redirectTo: "/dashboard" }); - }} - > - -
-
{ - "use server"; - await signIn("microsoft-entra-id", { redirectTo: "/dashboard" }); - }} - > - -
-
-
+
+ {/* Left panel — green brand block */} +
+
+

+ Oliver Agency +

+
+
+

+ HP CG
Production
Tracker +

+

+ Pipeline management for CG production +

+
+
+

+ Brandtech Group +

+
+
+ + {/* Right panel — sign in */} +
+
+ {/* Mobile wordmark */} +
+

+ HP CG Production Tracker +

+

+ Oliver Agency +

+
+ +
+

+ Sign in +

+

+ Use your Oliver or HP work account to continue. +

+
+ +
+
{ + "use server"; + await signIn("google", { redirectTo: "/dashboard" }); + }} + > + +
+ +
{ + "use server"; + await signIn("microsoft-entra-id", { redirectTo: "/dashboard" }); + }} + > + +
+
+ +
+

+ © {new Date().getFullYear()} Oliver Agency · Brandtech Group +

+
+
+
); } function GoogleIcon() { return ( - - - - - + + + + + ); } function MicrosoftIcon() { return ( - + diff --git a/src/app/globals.css b/src/app/globals.css index 8a1fed2..cd0f6fd 100644 --- a/src/app/globals.css +++ b/src/app/globals.css @@ -6,100 +6,103 @@ --font-sans: "Inter", ui-sans-serif, system-ui, sans-serif; --font-mono: "JetBrains Mono", ui-monospace, monospace; - /* Border radius */ - --radius-sm: 0.25rem; - --radius-md: 0.375rem; - --radius-lg: 0.5rem; - --radius-xl: 0.75rem; + /* Border radius — Oliver Agency uses 0px (sharp corners throughout) */ + --radius-sm: 0px; + --radius-md: 0px; + --radius-lg: 0px; + --radius-xl: 0px; + --radius-2xl: 0px; + --radius-full: 2px; /* Sidebar */ - --sidebar-width: 256px; - --sidebar-width-collapsed: 64px; + --sidebar-width: 240px; + --sidebar-width-collapsed: 56px; } /* - * Light mode (default) - * Oliver Agency / Brandtech Group inspired palette + * Light mode — Oliver Agency palette + * Pure white + pure black + forest green (#08402c) + * Confirmed from oliver.agency source */ :root { --background: #ffffff; - --foreground: #0a0a0a; - --muted: #f5f5f5; - --muted-foreground: #6b7280; - --border: #e5e7eb; - --input: #e5e7eb; + --foreground: #000000; + --muted: #f5f5f4; + --muted-foreground: #6b6b6b; + --border: #d4d4d4; + --input: #d4d4d4; --ring: #08402c; --primary: #08402c; --primary-foreground: #ffffff; - --secondary: #f5f5f5; - --secondary-foreground: #0a0a0a; + --secondary: #f5f5f4; + --secondary-foreground: #000000; --accent: #ee5540; --accent-foreground: #ffffff; - --destructive: #dc2626; + --destructive: #cc2200; --destructive-foreground: #ffffff; --card: #ffffff; - --card-foreground: #0a0a0a; + --card-foreground: #000000; --popover: #ffffff; - --popover-foreground: #0a0a0a; + --popover-foreground: #000000; - /* Status colors */ - --status-blocked: #dc2626; - --status-not-started: #6b7280; - --status-in-progress: #2563eb; - --status-in-review: #d97706; - --status-approved: #16a34a; - --status-skipped: #9ca3af; + /* Status colors — calibrated for Oliver's precision palette */ + --status-blocked: #cc2200; + --status-not-started: #8c8c8c; + --status-in-progress: #1a56db; + --status-in-review: #b45309; + --status-approved: #08402c; + --status-skipped: #b3b3b3; /* Chart colors */ --chart-1: #08402c; - --chart-2: #2563eb; - --chart-3: #d97706; + --chart-2: #1a56db; + --chart-3: #b45309; --chart-4: #ee5540; - --chart-5: #6b7280; + --chart-5: #8c8c8c; } /* - * Dark mode + * Dark mode — deep charcoal + bright green accent */ .dark { --background: #0a0a0a; - --foreground: #f5f5f5; - --muted: #171717; - --muted-foreground: #9ca3af; + --foreground: #fafafa; + --muted: #141414; + --muted-foreground: #a3a3a3; --border: #262626; --input: #262626; - --ring: #0fa968; + --ring: #22c55e; --primary: #0fa968; - --primary-foreground: #ffffff; - --secondary: #171717; - --secondary-foreground: #f5f5f5; + --primary-foreground: #000000; + --secondary: #1a1a1a; + --secondary-foreground: #fafafa; --accent: #f2725e; --accent-foreground: #ffffff; --destructive: #ef4444; --destructive-foreground: #ffffff; - --card: #141414; - --card-foreground: #f5f5f5; - --popover: #141414; - --popover-foreground: #f5f5f5; + --card: #111111; + --card-foreground: #fafafa; + --popover: #111111; + --popover-foreground: #fafafa; /* Status colors */ - --status-blocked: #ef4444; - --status-not-started: #9ca3af; + --status-blocked: #f87171; + --status-not-started: #a3a3a3; --status-in-progress: #60a5fa; --status-in-review: #fbbf24; --status-approved: #4ade80; - --status-skipped: #6b7280; + --status-skipped: #525252; /* Chart colors */ --chart-1: #0fa968; --chart-2: #60a5fa; --chart-3: #fbbf24; --chart-4: #f2725e; - --chart-5: #9ca3af; + --chart-5: #a3a3a3; } @layer base { @@ -109,23 +112,26 @@ body { @apply bg-[var(--background)] text-[var(--foreground)] font-sans antialiased; + font-feature-settings: "kern" 1, "liga" 1; + -webkit-font-smoothing: antialiased; } h1, h2, h3, h4, h5, h6 { font-family: var(--font-heading); + letter-spacing: -0.02em; + font-weight: 700; } - /* Focus-visible ring for keyboard navigation */ + /* Focus-visible ring */ :focus-visible { @apply outline-2 outline-offset-2 outline-[var(--ring)]; } - /* Remove default focus outlines for mouse users */ :focus:not(:focus-visible) { outline: none; } - /* Screen-reader only utility */ + /* Screen-reader only */ .sr-only { position: absolute; width: 1px; @@ -137,4 +143,16 @@ white-space: nowrap; border-width: 0; } + + /* + * Oliver Agency typographic signature: + * uppercase + wide tracking for labels, nav, section headers + */ + .label-upper { + font-size: 10px; + font-weight: 600; + letter-spacing: 0.1em; + text-transform: uppercase; + color: var(--muted-foreground); + } } diff --git a/src/components/layout/breadcrumbs.tsx b/src/components/layout/breadcrumbs.tsx index 05125e5..48c89b5 100644 --- a/src/components/layout/breadcrumbs.tsx +++ b/src/components/layout/breadcrumbs.tsx @@ -32,25 +32,28 @@ export function Breadcrumbs() { }); return ( - + {crumb.label} ) : ( {crumb.label} diff --git a/src/components/layout/sidebar.tsx b/src/components/layout/sidebar.tsx index e670edc..b52a64e 100644 --- a/src/components/layout/sidebar.tsx +++ b/src/components/layout/sidebar.tsx @@ -41,7 +41,7 @@ function NavLinks({ return ( <> -