feat: Introduce full-screen navigation menu, refresh overall UI styling, and simplify the home page content.

This commit is contained in:
Ho Ngoc Hai
2026-01-19 10:50:58 +07:00
parent b022eb1071
commit caf1a06dc8
3 changed files with 461 additions and 619 deletions

View File

@@ -5,40 +5,60 @@
<MudDialogProvider />
<MudSnackbarProvider />
<!-- Full Screen Navigation Overlay -->
<div class="nav-overlay @(_menuOpen ? "open" : "")">
<div class="d-flex flex-column align-center">
<a href="/" class="nav-overlay-link" @onclick="CloseMenu">Home</a>
<a href="/solutions" class="nav-overlay-link" @onclick="CloseMenu">Solutions</a>
<a href="/enterprise" class="nav-overlay-link" @onclick="CloseMenu">Enterprise</a>
<a href="/company" class="nav-overlay-link" @onclick="CloseMenu">Company</a>
<div class="mt-8">
<button class="btn-enterprise-primary" @onclick="CloseMenu">Get in Touch</button>
</div>
</div>
<!-- Close Button Absolute -->
<MudIconButton Icon="@Icons.Material.Rounded.Close"
Color="Color.Inherit"
Size="Size.Large"
OnClick="@ToggleMenu"
Style="position: absolute; top: 24px; right: 24px;"
Class="z-50" />
</div>
<MudLayout>
<MudAppBar Elevation="0" Class="border-b border-solid mud-border-lines-default" Fixed="true" Color="Color.Default" Style="backdrop-filter: blur(12px);">
<MudIconButton Icon="@Icons.Material.Rounded.Menu" Color="Color.Inherit" Edge="Edge.Start" OnClick="@ToggleDrawer" Class="d-md-none" />
<MudText Typo="Typo.h6" Class="ml-3 font-weight-bold" Style="font-family: 'Inter', sans-serif;">GoodGo</MudText>
<MudAppBar Elevation="0" Fixed="true" Color="Color.Transparent" Style="backdrop-filter: blur(12px); border-bottom: 1px solid var(--border-subtle);">
<!-- Logo -->
<MudText Typo="Typo.h6" Class="font-weight-bold" Style="font-family: var(--font-heading); color: var(--text-primary);">
GOODGO
</MudText>
<MudSpacer />
<!-- Desktop Navigation -->
<!-- Desktop Navigation & Actions (Hidden on Mobile) -->
<div class="d-none d-md-flex align-center gap-4">
<MudStack Row="true" Spacing="4" Class="mr-4">
<MudLink Href="/" Color="Color.Inherit" Underline="Underline.None" Class="mud-nav-link px-3 py-2">Home</MudLink>
<MudLink Href="/features" Color="Color.Inherit" Underline="Underline.None" Class="mud-nav-link px-3 py-2">Features</MudLink>
<MudLink Href="/enterprise" Color="Color.Inherit" Underline="Underline.None" Class="mud-nav-link px-3 py-2">Enterprise</MudLink>
<MudLink Href="/pricing" Color="Color.Inherit" Underline="Underline.None" Class="mud-nav-link px-3 py-2">Pricing</MudLink>
</MudStack>
<!-- Action Group (Theme + Menu) -->
<MudStack Row="true" Spacing="1" AlignItems="AlignItems.Center">
<!-- Theme Toggle -->
<button class="theme-toggle mr-2" @onclick="ToggleDarkMode" aria-label="Toggle theme">
@if (_isDarkMode)
{
<MudIcon Icon="@Icons.Material.Rounded.LightMode" Size="Size.Small" />
}
else
{
<MudIcon Icon="@Icons.Material.Rounded.DarkMode" Size="Size.Small" />
}
</button>
<MudStack Row="true" Spacing="2">
<MudButton Variant="Variant.Outlined" Color="Color.Inherit" Class="rounded-lg">Sign in</MudButton>
<MudButton Variant="Variant.Filled" Color="Color.Primary" Class="rounded-lg">Download</MudButton>
</MudStack>
</div>
<MudIconButton Icon="@(_isDarkMode ? Icons.Material.Rounded.LightMode : Icons.Material.Rounded.DarkMode)"
Color="Color.Inherit"
Class="ml-2"
OnClick="@ToggleDarkMode" />
<!-- Hamburger Menu (Unified) -->
<MudIconButton Icon="@Icons.Material.Rounded.Menu"
Color="Color.Default"
Edge="Edge.End"
OnClick="@ToggleMenu"
Style="color: var(--text-primary);" />
</MudStack>
</MudAppBar>
<MudDrawer @bind-Open="_drawerOpen" Variant="@DrawerVariant.Temporary" Elevation="1">
<MudDrawerHeader>
<MudText Typo="Typo.h6">GoodGo</MudText>
</MudDrawerHeader>
<NavMenu />
</MudDrawer>
<MudMainContent Class="pt-16">
@Body
</MudMainContent>
@@ -47,57 +67,46 @@
@code {
[Inject] private IJSRuntime JSRuntime { get; set; } = default!;
private bool _drawerOpen = false;
private bool _menuOpen = false;
private bool _isDarkMode = false;
private MudTheme _theme = new()
{
PaletteLight = new PaletteLight()
{
Primary = "#18181b", // Zinc-900 (almost black)
AppbarBackground = "#f7f7f4",
// Mapping to Enterprise Primitives
Primary = "#18181b",
AppbarBackground = "rgba(255,255,255,0.0)", // Transparent for glass effect
AppbarText = "#18181b",
Background = "#f7f7f4",
Background = "#fafafa", // Neutral-50
Surface = "#ffffff",
DrawerBackground = "#f7f7f4",
DrawerText = "#52525b", // Zinc-600
TextPrimary = "#18181b",
TextSecondary = "#52525b",
ActionDefault = "#52525b",
Divider = "#e4e4e7", // Zinc-200
LinesDefault = "#e4e4e7"
ActionDefault = "#18181b",
LinesDefault = "#e4e4e7" // Neutral-200
},
PaletteDark = new PaletteDark()
{
Primary = "#fafafa", // Zinc-50
PrimaryContrastText = "#18181b", // Zinc-900 (Black text on White Primary)
AppbarBackground = "#09090b", // Zinc-950
Primary = "#fafafa",
PrimaryContrastText = "#18181b",
AppbarBackground = "rgba(9,9,11,0.0)", // Transparent for glass effect
AppbarText = "#fafafa",
Background = "#09090b",
Surface = "#18181b", // Zinc-900
DrawerBackground = "#09090b", // Zinc-950 (Match Body Background)
DrawerText = "#fafafa", // Zinc-50 (Ligher text for better contrast)
Background = "#09090b", // Neutral-950
Surface = "#18181b", // Neutral-900
TextPrimary = "#fafafa",
TextSecondary = "#a1a1aa",
ActionDefault = "#a1a1aa",
Divider = "#27272a", // Zinc-800
LinesDefault = "#27272a"
ActionDefault = "#fafafa",
LinesDefault = "#27272a" // Neutral-800
},
LayoutProperties = new LayoutProperties()
{
DefaultBorderRadius = "6px",
AppbarHeight = "64px"
}
};
protected override void OnInitialized()
private void ToggleMenu()
{
_theme.Typography.Default.FontFamily = new[] { "Inter", "Helvetica", "Arial", "sans-serif" };
_menuOpen = !_menuOpen;
}
private void ToggleDrawer()
private void CloseMenu()
{
_drawerOpen = !_drawerOpen;
_menuOpen = false;
}
private async Task ToggleDarkMode()