diff --git a/public/android-chrome-192x192.png b/public/android-chrome-192x192.png new file mode 100644 index 0000000..ec70e2b Binary files /dev/null and b/public/android-chrome-192x192.png differ diff --git a/public/android-chrome-512x512.png b/public/android-chrome-512x512.png new file mode 100644 index 0000000..7ea8548 Binary files /dev/null and b/public/android-chrome-512x512.png differ diff --git a/public/apple-touch-icon.png b/public/apple-touch-icon.png index c2efef6..0c5e76a 100644 Binary files a/public/apple-touch-icon.png and b/public/apple-touch-icon.png differ diff --git a/public/favicon-16x16.png b/public/favicon-16x16.png new file mode 100644 index 0000000..a82fe84 Binary files /dev/null and b/public/favicon-16x16.png differ diff --git a/public/favicon-32x32.png b/public/favicon-32x32.png new file mode 100644 index 0000000..acef459 Binary files /dev/null and b/public/favicon-32x32.png differ diff --git a/public/favicon-96x96.png b/public/favicon-96x96.png new file mode 100644 index 0000000..e40a86d Binary files /dev/null and b/public/favicon-96x96.png differ diff --git a/public/favicon.ico b/public/favicon.ico index 236fadb..0be1078 100644 Binary files a/public/favicon.ico and b/public/favicon.ico differ diff --git a/public/site-icon-128.png b/public/site-icon-128.png new file mode 100644 index 0000000..db61280 Binary files /dev/null and b/public/site-icon-128.png differ diff --git a/public/site-icon-64.png b/public/site-icon-64.png new file mode 100644 index 0000000..62eace3 Binary files /dev/null and b/public/site-icon-64.png differ diff --git a/public/site.webmanifest b/public/site.webmanifest new file mode 100644 index 0000000..612ab80 --- /dev/null +++ b/public/site.webmanifest @@ -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" +} diff --git a/resources/themes/backend/assets/css/helpdesk.css b/resources/themes/backend/assets/css/helpdesk.css index b260d4b..9d32aaa 100644 --- a/resources/themes/backend/assets/css/helpdesk.css +++ b/resources/themes/backend/assets/css/helpdesk.css @@ -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; + } +} diff --git a/resources/themes/backend/views/components/helpdesk/layouts/app.blade.php b/resources/themes/backend/views/components/helpdesk/layouts/app.blade.php index 2ee2e24..ad2c8d0 100644 --- a/resources/themes/backend/views/components/helpdesk/layouts/app.blade.php +++ b/resources/themes/backend/views/components/helpdesk/layouts/app.blade.php @@ -23,6 +23,16 @@
+ + + + + {{ config('app.name', 'Laravel') }}
@@ -118,7 +128,7 @@
Platform
@@ -128,20 +138,20 @@
Helpdesk
- @if(Route::has('helpdesk.tickets.index'))
Tickets@endif - @if(Route::has('helpdesk.kanban'))Kanban@endif - @if(Route::has('helpdesk.settings'))Settings@endif + @if(Route::has('helpdesk.tickets.index'))Tickets@endif + @if(Route::has('helpdesk.kanban'))Kanban@endif + @if(Route::has('helpdesk.settings'))Settings@endif
@if(Route::has('documentation.index') || Route::has('documentation.documents.index'))
Documentation
- Documents - @if(Route::has('documentation.categories.index'))Categories@endif + Documents + @if(Route::has('documentation.categories.index'))Categories@endif
@endif @if($isAdmin && Route::has('user-management.index'))
Users
- Users - Roles & Permissions + Users + Roles & Permissions
@endif diff --git a/resources/themes/backend/views/components/layouts/app.blade.php b/resources/themes/backend/views/components/layouts/app.blade.php index 2ee2e24..ad2c8d0 100644 --- a/resources/themes/backend/views/components/layouts/app.blade.php +++ b/resources/themes/backend/views/components/layouts/app.blade.php @@ -23,6 +23,16 @@
@@ -118,7 +128,7 @@
Platform
@@ -128,20 +138,20 @@
Helpdesk
- @if(Route::has('helpdesk.tickets.index'))
Tickets@endif - @if(Route::has('helpdesk.kanban'))Kanban@endif - @if(Route::has('helpdesk.settings'))Settings@endif + @if(Route::has('helpdesk.tickets.index'))Tickets@endif + @if(Route::has('helpdesk.kanban'))Kanban@endif + @if(Route::has('helpdesk.settings'))Settings@endif
@if(Route::has('documentation.index') || Route::has('documentation.documents.index'))
Documentation
- Documents - @if(Route::has('documentation.categories.index'))Categories@endif + Documents + @if(Route::has('documentation.categories.index'))Categories@endif
@endif @if($isAdmin && Route::has('user-management.index')) @endif diff --git a/resources/themes/backend/views/layouts/app.blade.php b/resources/themes/backend/views/layouts/app.blade.php index 5bde94f..b2e53cf 100644 --- a/resources/themes/backend/views/layouts/app.blade.php +++ b/resources/themes/backend/views/layouts/app.blade.php @@ -23,6 +23,16 @@
@@ -118,7 +128,7 @@
Platform
@@ -128,20 +138,20 @@
Helpdesk
- @if(Route::has('helpdesk.tickets.index'))
Tickets@endif - @if(Route::has('helpdesk.kanban'))Kanban@endif - @if(Route::has('helpdesk.settings'))Settings@endif + @if(Route::has('helpdesk.tickets.index'))Tickets@endif + @if(Route::has('helpdesk.kanban'))Kanban@endif + @if(Route::has('helpdesk.settings'))Settings@endif
@if(Route::has('documentation.index') || Route::has('documentation.documents.index'))
Documentation
- Documents - @if(Route::has('documentation.categories.index'))Categories@endif + Documents + @if(Route::has('documentation.categories.index'))Categories@endif
@endif @if($isAdmin && Route::has('user-management.index')) @endif diff --git a/resources/themes/backend/views/partials/head.blade.php b/resources/themes/backend/views/partials/head.blade.php index 9931115..6b9330a 100644 --- a/resources/themes/backend/views/partials/head.blade.php +++ b/resources/themes/backend/views/partials/head.blade.php @@ -1,7 +1,14 @@ +{{-- Systems Helpdesk site icons --}} + + + + + + + {{ filled($title ?? null) ? $title.' - '.config('app.name', 'Laravel') : config('app.name', 'Laravel') }} - @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 \ No newline at end of file diff --git a/routes/web.php b/routes/web.php index 12e932e..410cc29 100644 --- a/routes/web.php +++ b/routes/web.php @@ -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');