dark mode supoport and new design

This commit is contained in:
Mark Gregory
2026-08-27 16:01:39 +01:00
parent a3ef18384b
commit 6de15d1398
16 changed files with 338 additions and 27 deletions
Binary file not shown.

After

Width:  |  Height:  |  Size: 40 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 156 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.6 KiB

After

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 858 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.2 KiB

After

Width:  |  Height:  |  Size: 104 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.9 KiB

+19
View File
@@ -0,0 +1,19 @@
{
"name": "Systems Helpdesk",
"short_name": "Helpdesk",
"icons": [
{
"src": "/android-chrome-192x192.png",
"sizes": "192x192",
"type": "image/png"
},
{
"src": "/android-chrome-512x512.png",
"sizes": "512x512",
"type": "image/png"
}
],
"theme_color": "#0b1220",
"background_color": "#0b1220",
"display": "standalone"
}
@@ -1935,3 +1935,254 @@ html.dark .hd-auth-surface a:hover {
flex-direction: column !important;
}
}
/* ============================================================
Site mark + coloured sidebar navigation
============================================================ */
.hd-brand-mark {
width: 38px;
height: 38px;
flex: 0 0 38px;
display: inline-flex;
align-items: center;
justify-content: center;
overflow: hidden;
border: 1px solid #394251;
border-radius: 11px;
background: linear-gradient(145deg, #222934, #151a22);
box-shadow:
inset 0 1px 0 rgba(255,255,255,.055),
0 6px 14px rgba(0,0,0,.18);
transition:
transform .15s ease,
border-color .15s ease,
background-color .15s ease;
}
.hd-brand-mark:hover {
transform: translateY(-1px);
border-color: #596579;
background: #252d38;
}
.hd-brand-icon {
display: block;
width: 24px;
height: 24px;
object-fit: contain;
}
/* Individual sidebar accents. */
.hd-nav-link {
--hd-nav-accent: #64748b;
--hd-nav-accent-rgb: 100, 116, 139;
}
.hd-nav-link--dashboard {
--hd-nav-accent: #3b82f6;
--hd-nav-accent-rgb: 59, 130, 246;
}
.hd-nav-link--tickets {
--hd-nav-accent: #06b6d4;
--hd-nav-accent-rgb: 6, 182, 212;
}
.hd-nav-link--kanban {
--hd-nav-accent: #f59e0b;
--hd-nav-accent-rgb: 245, 158, 11;
}
.hd-nav-link--settings {
--hd-nav-accent: #8b5cf6;
--hd-nav-accent-rgb: 139, 92, 246;
}
.hd-nav-link--documents {
--hd-nav-accent: #10b981;
--hd-nav-accent-rgb: 16, 185, 129;
}
.hd-nav-link--categories {
--hd-nav-accent: #0ea5e9;
--hd-nav-accent-rgb: 14, 165, 233;
}
.hd-nav-link--users {
--hd-nav-accent: #6366f1;
--hd-nav-accent-rgb: 99, 102, 241;
}
.hd-nav-link--roles {
--hd-nav-accent: #f43f5e;
--hd-nav-accent-rgb: 244, 63, 94;
}
.hd-nav-link i {
width: 30px !important;
height: 30px;
flex: 0 0 30px;
display: inline-flex;
align-items: center;
justify-content: center;
border: 1px solid rgba(var(--hd-nav-accent-rgb), .24);
border-radius: 8px;
background: rgba(var(--hd-nav-accent-rgb), .10);
color: var(--hd-nav-accent) !important;
transition:
background-color .15s ease,
border-color .15s ease,
color .15s ease,
transform .15s ease;
}
.hd-nav-link:hover {
background:
linear-gradient(
90deg,
rgba(var(--hd-nav-accent-rgb), .10),
rgba(var(--hd-nav-accent-rgb), .035)
) !important;
color: #fff !important;
}
.hd-nav-link:hover i {
transform: translateX(1px);
border-color: rgba(var(--hd-nav-accent-rgb), .45);
background: rgba(var(--hd-nav-accent-rgb), .18);
color: #fff !important;
}
.hd-nav-link.is-active {
background:
linear-gradient(
90deg,
rgba(var(--hd-nav-accent-rgb), .20),
rgba(var(--hd-nav-accent-rgb), .07)
) !important;
color: #fff !important;
box-shadow:
inset 3px 0 var(--hd-nav-accent),
inset 0 1px 0 rgba(255,255,255,.025) !important;
}
.hd-nav-link.is-active i {
border-color: rgba(var(--hd-nav-accent-rgb), .58);
background: var(--hd-nav-accent);
color: #fff !important;
box-shadow: 0 4px 12px rgba(var(--hd-nav-accent-rgb), .22);
}
/* Light-mode counterparts. */
html:not(.dark) .hd-brand-mark {
border-color: #d6dde7;
background: linear-gradient(145deg, #ffffff, #eef2f7);
box-shadow:
inset 0 1px 0 rgba(255,255,255,.8),
0 5px 12px rgba(15,23,42,.08);
}
html:not(.dark) .hd-brand-mark:hover {
border-color: #b9c3d0;
background: #f8fafc;
}
html:not(.dark) .hd-nav-link i {
border-color: rgba(var(--hd-nav-accent-rgb), .22);
background: rgba(var(--hd-nav-accent-rgb), .08);
color: var(--hd-nav-accent) !important;
}
html:not(.dark) .hd-nav-link:hover {
background:
linear-gradient(
90deg,
rgba(var(--hd-nav-accent-rgb), .10),
rgba(var(--hd-nav-accent-rgb), .025)
) !important;
color: #111827 !important;
}
html:not(.dark) .hd-nav-link:hover i {
color: var(--hd-nav-accent) !important;
background: rgba(var(--hd-nav-accent-rgb), .14);
}
html:not(.dark) .hd-nav-link.is-active {
background:
linear-gradient(
90deg,
rgba(var(--hd-nav-accent-rgb), .15),
rgba(var(--hd-nav-accent-rgb), .045)
) !important;
color: #111827 !important;
box-shadow: inset 3px 0 var(--hd-nav-accent) !important;
}
html:not(.dark) .hd-nav-link.is-active i {
color: #fff !important;
background: var(--hd-nav-accent);
}
/* Keep the top-left area compact on smaller screens. */
@media (max-width: 700px) {
.hd-brand-mark {
width: 34px;
height: 34px;
flex-basis: 34px;
border-radius: 9px;
}
.hd-brand-icon {
width: 21px;
height: 21px;
}
}
/* Brand favicon: force a compact header-sized mark. */
.hd-brand-mark {
width: 42px !important;
height: 42px !important;
min-width: 42px !important;
max-width: 42px !important;
flex: 0 0 42px !important;
padding: 7px !important;
overflow: hidden !important;
box-sizing: border-box !important;
}
.hd-brand-mark .hd-brand-icon,
.hd-brand-icon {
display: block !important;
width: 28px !important;
height: 28px !important;
min-width: 0 !important;
min-height: 0 !important;
max-width: 28px !important;
max-height: 28px !important;
object-fit: contain !important;
object-position: center !important;
flex: none !important;
}
@media (max-width: 700px) {
.hd-brand-mark {
width: 38px !important;
height: 38px !important;
min-width: 38px !important;
max-width: 38px !important;
flex: 0 0 38px !important;
padding: 7px !important;
}
.hd-brand-mark .hd-brand-icon,
.hd-brand-icon {
width: 24px !important;
height: 24px !important;
max-width: 24px !important;
max-height: 24px !important;
}
}
@@ -23,6 +23,16 @@
<header class="hd-topbar">
<div class="hd-topbar-brand">
<button class="hd-icon-button hd-mobile-menu-button" type="button" data-hd-sidebar-toggle aria-label="Toggle navigation"><i class="fa-solid fa-bars"></i></button>
<a href="{{ route('dashboard') }}" wire:navigate class="hd-brand-mark" aria-label="{{ config('app.name', 'Laravel') }}">
<img
src="{{ asset('site-icon-64.png') }}"
alt=""
class="hd-brand-icon"
onerror="this.onerror=null;this.src='{{ asset('favicon.ico') }}';"
>
</a>
<a href="{{ route('dashboard') }}" wire:navigate class="hd-brand-name">{{ config('app.name', 'Laravel') }}</a>
</div>
<div class="hd-topbar-main">
@@ -118,7 +128,7 @@
<div class="hd-nav-heading">Platform</div>
<a
class="hd-nav-link {{ request()->routeIs('dashboard') ? 'is-active' : '' }}"
class="hd-nav-link hd-nav-link--dashboard {{ request()->routeIs('dashboard') ? 'is-active' : '' }}"
href="{{ route('dashboard') }}"
wire:navigate
>
@@ -128,20 +138,20 @@
</div>
<div class="hd-nav-section"><div class="hd-nav-heading">Helpdesk</div>
@if(Route::has('helpdesk.tickets.index'))<a class="hd-nav-link {{ request()->routeIs('helpdesk.tickets.*') ? 'is-active' : '' }}" href="{{ route('helpdesk.tickets.index') }}" wire:navigate><i class="fa-solid fa-ticket"></i><span>Tickets</span></a>@endif
@if(Route::has('helpdesk.kanban'))<a class="hd-nav-link {{ request()->routeIs('helpdesk.kanban') ? 'is-active' : '' }}" href="{{ route('helpdesk.kanban') }}" wire:navigate><i class="fa-solid fa-table-columns"></i><span>Kanban</span></a>@endif
@if(Route::has('helpdesk.settings'))<a class="hd-nav-link {{ request()->routeIs('helpdesk.settings*') ? 'is-active' : '' }}" href="{{ route('helpdesk.settings') }}" wire:navigate><i class="fa-solid fa-gear"></i><span>Settings</span></a>@endif
@if(Route::has('helpdesk.tickets.index'))<a class="hd-nav-link hd-nav-link--tickets {{ request()->routeIs('helpdesk.tickets.*') ? 'is-active' : '' }}" href="{{ route('helpdesk.tickets.index') }}" wire:navigate><i class="fa-solid fa-ticket"></i><span>Tickets</span></a>@endif
@if(Route::has('helpdesk.kanban'))<a class="hd-nav-link hd-nav-link--kanban {{ request()->routeIs('helpdesk.kanban') ? 'is-active' : '' }}" href="{{ route('helpdesk.kanban') }}" wire:navigate><i class="fa-solid fa-table-columns"></i><span>Kanban</span></a>@endif
@if(Route::has('helpdesk.settings'))<a class="hd-nav-link hd-nav-link--settings {{ request()->routeIs('helpdesk.settings*') ? 'is-active' : '' }}" href="{{ route('helpdesk.settings') }}" wire:navigate><i class="fa-solid fa-gear"></i><span>Settings</span></a>@endif
</div>
@if(Route::has('documentation.index') || Route::has('documentation.documents.index'))
<div class="hd-nav-section"><div class="hd-nav-heading">Documentation</div>
<a class="hd-nav-link {{ request()->routeIs('documentation.documents.*') || request()->routeIs('documentation.index') ? 'is-active' : '' }}" href="{{ Route::has('documentation.documents.index') ? route('documentation.documents.index') : route('documentation.index') }}" wire:navigate><i class="fa-regular fa-file-lines"></i><span>Documents</span></a>
@if(Route::has('documentation.categories.index'))<a class="hd-nav-link {{ request()->routeIs('documentation.categories.*') ? 'is-active' : '' }}" href="{{ route('documentation.categories.index') }}" wire:navigate><i class="fa-regular fa-folder"></i><span>Categories</span></a>@endif
<a class="hd-nav-link hd-nav-link--documents {{ request()->routeIs('documentation.documents.*') || request()->routeIs('documentation.index') ? 'is-active' : '' }}" href="{{ Route::has('documentation.documents.index') ? route('documentation.documents.index') : route('documentation.index') }}" wire:navigate><i class="fa-regular fa-file-lines"></i><span>Documents</span></a>
@if(Route::has('documentation.categories.index'))<a class="hd-nav-link hd-nav-link--categories {{ request()->routeIs('documentation.categories.*') ? 'is-active' : '' }}" href="{{ route('documentation.categories.index') }}" wire:navigate><i class="fa-regular fa-folder"></i><span>Categories</span></a>@endif
</div>
@endif
@if($isAdmin && Route::has('user-management.index'))
<div class="hd-nav-section"><div class="hd-nav-heading">Users</div>
<a class="hd-nav-link {{ request()->routeIs('user-management.index') || request()->routeIs('user-management.create') || request()->routeIs('user-management.edit') ? 'is-active' : '' }}" href="{{ route('user-management.index') }}" wire:navigate><i class="fa-solid fa-users"></i><span>Users</span></a>
<a class="hd-nav-link {{ request()->routeIs('user-management.roles') ? 'is-active' : '' }}" href="{{ route('user-management.roles') }}" wire:navigate><i class="fa-solid fa-shield-halved"></i><span>Roles & Permissions</span></a>
<a class="hd-nav-link hd-nav-link--users {{ request()->routeIs('user-management.index') || request()->routeIs('user-management.create') || request()->routeIs('user-management.edit') ? 'is-active' : '' }}" href="{{ route('user-management.index') }}" wire:navigate><i class="fa-solid fa-users"></i><span>Users</span></a>
<a class="hd-nav-link hd-nav-link--roles {{ request()->routeIs('user-management.roles') ? 'is-active' : '' }}" href="{{ route('user-management.roles') }}" wire:navigate><i class="fa-solid fa-shield-halved"></i><span>Roles & Permissions</span></a>
</div>
@endif
</nav>
@@ -23,6 +23,16 @@
<header class="hd-topbar">
<div class="hd-topbar-brand">
<button class="hd-icon-button hd-mobile-menu-button" type="button" data-hd-sidebar-toggle aria-label="Toggle navigation"><i class="fa-solid fa-bars"></i></button>
<a href="{{ route('dashboard') }}" wire:navigate class="hd-brand-mark" aria-label="{{ config('app.name', 'Laravel') }}">
<img
src="{{ asset('site-icon-64.png') }}"
alt=""
class="hd-brand-icon"
onerror="this.onerror=null;this.src='{{ asset('favicon.ico') }}';"
>
</a>
<a href="{{ route('dashboard') }}" wire:navigate class="hd-brand-name">{{ config('app.name', 'Laravel') }}</a>
</div>
<div class="hd-topbar-main">
@@ -118,7 +128,7 @@
<div class="hd-nav-heading">Platform</div>
<a
class="hd-nav-link {{ request()->routeIs('dashboard') ? 'is-active' : '' }}"
class="hd-nav-link hd-nav-link--dashboard {{ request()->routeIs('dashboard') ? 'is-active' : '' }}"
href="{{ route('dashboard') }}"
wire:navigate
>
@@ -128,20 +138,20 @@
</div>
<div class="hd-nav-section"><div class="hd-nav-heading">Helpdesk</div>
@if(Route::has('helpdesk.tickets.index'))<a class="hd-nav-link {{ request()->routeIs('helpdesk.tickets.*') ? 'is-active' : '' }}" href="{{ route('helpdesk.tickets.index') }}" wire:navigate><i class="fa-solid fa-ticket"></i><span>Tickets</span></a>@endif
@if(Route::has('helpdesk.kanban'))<a class="hd-nav-link {{ request()->routeIs('helpdesk.kanban') ? 'is-active' : '' }}" href="{{ route('helpdesk.kanban') }}" wire:navigate><i class="fa-solid fa-table-columns"></i><span>Kanban</span></a>@endif
@if(Route::has('helpdesk.settings'))<a class="hd-nav-link {{ request()->routeIs('helpdesk.settings*') ? 'is-active' : '' }}" href="{{ route('helpdesk.settings') }}" wire:navigate><i class="fa-solid fa-gear"></i><span>Settings</span></a>@endif
@if(Route::has('helpdesk.tickets.index'))<a class="hd-nav-link hd-nav-link--tickets {{ request()->routeIs('helpdesk.tickets.*') ? 'is-active' : '' }}" href="{{ route('helpdesk.tickets.index') }}" wire:navigate><i class="fa-solid fa-ticket"></i><span>Tickets</span></a>@endif
@if(Route::has('helpdesk.kanban'))<a class="hd-nav-link hd-nav-link--kanban {{ request()->routeIs('helpdesk.kanban') ? 'is-active' : '' }}" href="{{ route('helpdesk.kanban') }}" wire:navigate><i class="fa-solid fa-table-columns"></i><span>Kanban</span></a>@endif
@if(Route::has('helpdesk.settings'))<a class="hd-nav-link hd-nav-link--settings {{ request()->routeIs('helpdesk.settings*') ? 'is-active' : '' }}" href="{{ route('helpdesk.settings') }}" wire:navigate><i class="fa-solid fa-gear"></i><span>Settings</span></a>@endif
</div>
@if(Route::has('documentation.index') || Route::has('documentation.documents.index'))
<div class="hd-nav-section"><div class="hd-nav-heading">Documentation</div>
<a class="hd-nav-link {{ request()->routeIs('documentation.documents.*') || request()->routeIs('documentation.index') ? 'is-active' : '' }}" href="{{ Route::has('documentation.documents.index') ? route('documentation.documents.index') : route('documentation.index') }}" wire:navigate><i class="fa-regular fa-file-lines"></i><span>Documents</span></a>
@if(Route::has('documentation.categories.index'))<a class="hd-nav-link {{ request()->routeIs('documentation.categories.*') ? 'is-active' : '' }}" href="{{ route('documentation.categories.index') }}" wire:navigate><i class="fa-regular fa-folder"></i><span>Categories</span></a>@endif
<a class="hd-nav-link hd-nav-link--documents {{ request()->routeIs('documentation.documents.*') || request()->routeIs('documentation.index') ? 'is-active' : '' }}" href="{{ Route::has('documentation.documents.index') ? route('documentation.documents.index') : route('documentation.index') }}" wire:navigate><i class="fa-regular fa-file-lines"></i><span>Documents</span></a>
@if(Route::has('documentation.categories.index'))<a class="hd-nav-link hd-nav-link--categories {{ request()->routeIs('documentation.categories.*') ? 'is-active' : '' }}" href="{{ route('documentation.categories.index') }}" wire:navigate><i class="fa-regular fa-folder"></i><span>Categories</span></a>@endif
</div>
@endif
@if($isAdmin && Route::has('user-management.index'))
<div class="hd-nav-section"><div class="hd-nav-heading">Users</div>
<a class="hd-nav-link {{ request()->routeIs('user-management.index') || request()->routeIs('user-management.create') || request()->routeIs('user-management.edit') ? 'is-active' : '' }}" href="{{ route('user-management.index') }}" wire:navigate><i class="fa-solid fa-users"></i><span>Users</span></a>
<a class="hd-nav-link {{ request()->routeIs('user-management.roles') ? 'is-active' : '' }}" href="{{ route('user-management.roles') }}" wire:navigate><i class="fa-solid fa-shield-halved"></i><span>Roles & Permissions</span></a>
<a class="hd-nav-link hd-nav-link--users {{ request()->routeIs('user-management.index') || request()->routeIs('user-management.create') || request()->routeIs('user-management.edit') ? 'is-active' : '' }}" href="{{ route('user-management.index') }}" wire:navigate><i class="fa-solid fa-users"></i><span>Users</span></a>
<a class="hd-nav-link hd-nav-link--roles {{ request()->routeIs('user-management.roles') ? 'is-active' : '' }}" href="{{ route('user-management.roles') }}" wire:navigate><i class="fa-solid fa-shield-halved"></i><span>Roles & Permissions</span></a>
</div>
@endif
</nav>
@@ -23,6 +23,16 @@
<header class="hd-topbar">
<div class="hd-topbar-brand">
<button class="hd-icon-button hd-mobile-menu-button" type="button" data-hd-sidebar-toggle aria-label="Toggle navigation"><i class="fa-solid fa-bars"></i></button>
<a href="{{ route('dashboard') }}" wire:navigate class="hd-brand-mark" aria-label="{{ config('app.name', 'Laravel') }}">
<img
src="{{ asset('site-icon-64.png') }}"
alt=""
class="hd-brand-icon"
onerror="this.onerror=null;this.src='{{ asset('favicon.ico') }}';"
>
</a>
<a href="{{ route('dashboard') }}" wire:navigate class="hd-brand-name">{{ config('app.name', 'Laravel') }}</a>
</div>
<div class="hd-topbar-main">
@@ -118,7 +128,7 @@
<div class="hd-nav-heading">Platform</div>
<a
class="hd-nav-link {{ request()->routeIs('dashboard') ? 'is-active' : '' }}"
class="hd-nav-link hd-nav-link--dashboard {{ request()->routeIs('dashboard') ? 'is-active' : '' }}"
href="{{ route('dashboard') }}"
wire:navigate
>
@@ -128,20 +138,20 @@
</div>
<div class="hd-nav-section"><div class="hd-nav-heading">Helpdesk</div>
@if(Route::has('helpdesk.tickets.index'))<a class="hd-nav-link {{ request()->routeIs('helpdesk.tickets.*') ? 'is-active' : '' }}" href="{{ route('helpdesk.tickets.index') }}" wire:navigate><i class="fa-solid fa-ticket"></i><span>Tickets</span></a>@endif
@if(Route::has('helpdesk.kanban'))<a class="hd-nav-link {{ request()->routeIs('helpdesk.kanban') ? 'is-active' : '' }}" href="{{ route('helpdesk.kanban') }}" wire:navigate><i class="fa-solid fa-table-columns"></i><span>Kanban</span></a>@endif
@if(Route::has('helpdesk.settings'))<a class="hd-nav-link {{ request()->routeIs('helpdesk.settings*') ? 'is-active' : '' }}" href="{{ route('helpdesk.settings') }}" wire:navigate><i class="fa-solid fa-gear"></i><span>Settings</span></a>@endif
@if(Route::has('helpdesk.tickets.index'))<a class="hd-nav-link hd-nav-link--tickets {{ request()->routeIs('helpdesk.tickets.*') ? 'is-active' : '' }}" href="{{ route('helpdesk.tickets.index') }}" wire:navigate><i class="fa-solid fa-ticket"></i><span>Tickets</span></a>@endif
@if(Route::has('helpdesk.kanban'))<a class="hd-nav-link hd-nav-link--kanban {{ request()->routeIs('helpdesk.kanban') ? 'is-active' : '' }}" href="{{ route('helpdesk.kanban') }}" wire:navigate><i class="fa-solid fa-table-columns"></i><span>Kanban</span></a>@endif
@if(Route::has('helpdesk.settings'))<a class="hd-nav-link hd-nav-link--settings {{ request()->routeIs('helpdesk.settings*') ? 'is-active' : '' }}" href="{{ route('helpdesk.settings') }}" wire:navigate><i class="fa-solid fa-gear"></i><span>Settings</span></a>@endif
</div>
@if(Route::has('documentation.index') || Route::has('documentation.documents.index'))
<div class="hd-nav-section"><div class="hd-nav-heading">Documentation</div>
<a class="hd-nav-link {{ request()->routeIs('documentation.documents.*') || request()->routeIs('documentation.index') ? 'is-active' : '' }}" href="{{ Route::has('documentation.documents.index') ? route('documentation.documents.index') : route('documentation.index') }}" wire:navigate><i class="fa-regular fa-file-lines"></i><span>Documents</span></a>
@if(Route::has('documentation.categories.index'))<a class="hd-nav-link {{ request()->routeIs('documentation.categories.*') ? 'is-active' : '' }}" href="{{ route('documentation.categories.index') }}" wire:navigate><i class="fa-regular fa-folder"></i><span>Categories</span></a>@endif
<a class="hd-nav-link hd-nav-link--documents {{ request()->routeIs('documentation.documents.*') || request()->routeIs('documentation.index') ? 'is-active' : '' }}" href="{{ Route::has('documentation.documents.index') ? route('documentation.documents.index') : route('documentation.index') }}" wire:navigate><i class="fa-regular fa-file-lines"></i><span>Documents</span></a>
@if(Route::has('documentation.categories.index'))<a class="hd-nav-link hd-nav-link--categories {{ request()->routeIs('documentation.categories.*') ? 'is-active' : '' }}" href="{{ route('documentation.categories.index') }}" wire:navigate><i class="fa-regular fa-folder"></i><span>Categories</span></a>@endif
</div>
@endif
@if($isAdmin && Route::has('user-management.index'))
<div class="hd-nav-section"><div class="hd-nav-heading">Users</div>
<a class="hd-nav-link {{ request()->routeIs('user-management.index') || request()->routeIs('user-management.create') || request()->routeIs('user-management.edit') ? 'is-active' : '' }}" href="{{ route('user-management.index') }}" wire:navigate><i class="fa-solid fa-users"></i><span>Users</span></a>
<a class="hd-nav-link {{ request()->routeIs('user-management.roles') ? 'is-active' : '' }}" href="{{ route('user-management.roles') }}" wire:navigate><i class="fa-solid fa-shield-halved"></i><span>Roles & Permissions</span></a>
<a class="hd-nav-link hd-nav-link--users {{ request()->routeIs('user-management.index') || request()->routeIs('user-management.create') || request()->routeIs('user-management.edit') ? 'is-active' : '' }}" href="{{ route('user-management.index') }}" wire:navigate><i class="fa-solid fa-users"></i><span>Users</span></a>
<a class="hd-nav-link hd-nav-link--roles {{ request()->routeIs('user-management.roles') ? 'is-active' : '' }}" href="{{ route('user-management.roles') }}" wire:navigate><i class="fa-solid fa-shield-halved"></i><span>Roles & Permissions</span></a>
</div>
@endif
</nav>
@@ -1,7 +1,14 @@
{{-- Systems Helpdesk site icons --}}
<link rel="icon" type="image/png" sizes="32x32" href="{{ asset('favicon-32x32.png') }}">
<link rel="icon" type="image/png" sizes="16x16" href="{{ asset('favicon-16x16.png') }}">
<link rel="icon" type="image/png" sizes="96x96" href="{{ asset('favicon-96x96.png') }}">
<link rel="shortcut icon" href="{{ asset('favicon.ico') }}">
<link rel="apple-touch-icon" sizes="180x180" href="{{ asset('apple-touch-icon.png') }}">
<link rel="manifest" href="{{ asset('site.webmanifest') }}">
<meta name="theme-color" content="#0b1220">
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>{{ filled($title ?? null) ? $title.' - '.config('app.name', 'Laravel') : config('app.name', 'Laravel') }}</title>
<link rel="icon" href="/favicon.ico" sizes="any"><link rel="icon" href="/favicon.svg" type="image/svg+xml"><link rel="apple-touch-icon" href="/apple-touch-icon.png">
@fonts
@php
$backendCssEntry = is_file(resource_path('themes/backend/assets/css/app.css'))
@@ -40,4 +47,4 @@
$viteAssets = array_values(array_unique($viteAssets));
@endphp
@vite($viteAssets)
@fluxAppearance
@fluxAppearance
+5 -1
View File
@@ -2,7 +2,11 @@
use Illuminate\Support\Facades\Route;
Route::view('/', 'welcome')->name('home');
Route::get('/', function () {
return auth()->check()
? redirect()->route('dashboard')
: redirect()->route('login');
})->name('home');
Route::middleware(['auth', 'verified'])->group(function () {
Route::view('dashboard', 'dashboard')->name('dashboard');