diff --git a/bootstrap/cache/.gitignore b/bootstrap/cache/.gitignore
old mode 100644
new mode 100755
diff --git a/database/migrations/2025_08_14_170933_add_two_factor_columns_to_users_table.php b/database/migrations/2025_08_14_170933_add_two_factor_columns_to_users_table.php
index 187d974d..2dc045a5 100644
--- a/database/migrations/2025_08_14_170933_add_two_factor_columns_to_users_table.php
+++ b/database/migrations/2025_08_14_170933_add_two_factor_columns_to_users_table.php
@@ -11,10 +11,22 @@ return new class extends Migration
*/
public function up(): void
{
- Schema::table('users', function (Blueprint $table) {
- $table->text('two_factor_secret')->after('password')->nullable();
- $table->text('two_factor_recovery_codes')->after('two_factor_secret')->nullable();
- $table->timestamp('two_factor_confirmed_at')->after('two_factor_recovery_codes')->nullable();
+ if (! Schema::hasTable('users')) {
+ return;
+ }
+
+ Schema::table('users', function (Blueprint $table): void {
+ if (! Schema::hasColumn('users', 'two_factor_secret')) {
+ $table->text('two_factor_secret')->nullable()->after('password');
+ }
+
+ if (! Schema::hasColumn('users', 'two_factor_recovery_codes')) {
+ $table->text('two_factor_recovery_codes')->nullable()->after('two_factor_secret');
+ }
+
+ if (! Schema::hasColumn('users', 'two_factor_confirmed_at')) {
+ $table->timestamp('two_factor_confirmed_at')->nullable()->after('two_factor_recovery_codes');
+ }
});
}
@@ -23,12 +35,16 @@ return new class extends Migration
*/
public function down(): void
{
- Schema::table('users', function (Blueprint $table) {
- $table->dropColumn([
- 'two_factor_secret',
- 'two_factor_recovery_codes',
- 'two_factor_confirmed_at',
- ]);
+ if (! Schema::hasTable('users')) {
+ return;
+ }
+
+ Schema::table('users', function (Blueprint $table): void {
+ foreach (['two_factor_confirmed_at', 'two_factor_recovery_codes', 'two_factor_secret'] as $column) {
+ if (Schema::hasColumn('users', $column)) {
+ $table->dropColumn($column);
+ }
+ }
});
}
};
diff --git a/database/migrations/2026_06_10_123344_add_two_factor_columns_to_users_table.php b/database/migrations/2026_06_10_123344_add_two_factor_columns_to_users_table.php
index 45739efa..2dc045a5 100644
--- a/database/migrations/2026_06_10_123344_add_two_factor_columns_to_users_table.php
+++ b/database/migrations/2026_06_10_123344_add_two_factor_columns_to_users_table.php
@@ -11,18 +11,22 @@ return new class extends Migration
*/
public function up(): void
{
- Schema::table('users', function (Blueprint $table) {
- $table->text('two_factor_secret')
- ->after('password')
- ->nullable();
+ if (! Schema::hasTable('users')) {
+ return;
+ }
- $table->text('two_factor_recovery_codes')
- ->after('two_factor_secret')
- ->nullable();
+ Schema::table('users', function (Blueprint $table): void {
+ if (! Schema::hasColumn('users', 'two_factor_secret')) {
+ $table->text('two_factor_secret')->nullable()->after('password');
+ }
- $table->timestamp('two_factor_confirmed_at')
- ->after('two_factor_recovery_codes')
- ->nullable();
+ if (! Schema::hasColumn('users', 'two_factor_recovery_codes')) {
+ $table->text('two_factor_recovery_codes')->nullable()->after('two_factor_secret');
+ }
+
+ if (! Schema::hasColumn('users', 'two_factor_confirmed_at')) {
+ $table->timestamp('two_factor_confirmed_at')->nullable()->after('two_factor_recovery_codes');
+ }
});
}
@@ -31,12 +35,16 @@ return new class extends Migration
*/
public function down(): void
{
- Schema::table('users', function (Blueprint $table) {
- $table->dropColumn([
- 'two_factor_secret',
- 'two_factor_recovery_codes',
- 'two_factor_confirmed_at',
- ]);
+ if (! Schema::hasTable('users')) {
+ return;
+ }
+
+ Schema::table('users', function (Blueprint $table): void {
+ foreach (['two_factor_confirmed_at', 'two_factor_recovery_codes', 'two_factor_secret'] as $column) {
+ if (Schema::hasColumn('users', $column)) {
+ $table->dropColumn($column);
+ }
+ }
});
}
};
diff --git a/package.json b/package.json
index b84d5df6..b5f3c39c 100644
--- a/package.json
+++ b/package.json
@@ -13,7 +13,7 @@
"laravel-vite-plugin": "^3.1",
"tailwindcss": "^4.0.7",
"vite": "^8.0.0",
- "@fortawesome/fontawesome-free": "^6.7.2"
+ "@fortawesome/fontawesome-free": "^7.1.0"
},
"optionalDependencies": {
"@rollup/rollup-linux-x64-gnu": "4.9.5",
diff --git a/public/apple-touch-icon.png b/public/apple-touch-icon.png
index 724f901b..c2efef6d 100644
Binary files a/public/apple-touch-icon.png and b/public/apple-touch-icon.png differ
diff --git a/public/favicon.ico b/public/favicon.ico
index 94fdc1e4..236fadb9 100644
Binary files a/public/favicon.ico and b/public/favicon.ico differ
diff --git a/public/favicon.svg b/public/favicon.svg
index 2ee8818e..e4e710e0 100644
--- a/public/favicon.svg
+++ b/public/favicon.svg
@@ -1,21 +1,3 @@
-
\ No newline at end of file
+
diff --git a/public/favicons/android-chrome-192x192.png b/public/favicons/android-chrome-192x192.png
index e1642525..aeae5ec8 100644
Binary files a/public/favicons/android-chrome-192x192.png and b/public/favicons/android-chrome-192x192.png differ
diff --git a/public/favicons/android-chrome-512x512.png b/public/favicons/android-chrome-512x512.png
index 8a7b7102..3af80f3c 100644
Binary files a/public/favicons/android-chrome-512x512.png and b/public/favicons/android-chrome-512x512.png differ
diff --git a/public/favicons/apple-touch-icon.png b/public/favicons/apple-touch-icon.png
index 724f901b..3cfeeedb 100644
Binary files a/public/favicons/apple-touch-icon.png and b/public/favicons/apple-touch-icon.png differ
diff --git a/public/favicons/browserconfig.xml b/public/favicons/browserconfig.xml
index a985d474..df4d2767 100644
--- a/public/favicons/browserconfig.xml
+++ b/public/favicons/browserconfig.xml
@@ -1,2 +1,10 @@
-#08142a
+
+
+
+
+
+ #0f172a
+
+
+
diff --git a/public/favicons/favicon-128x128.png b/public/favicons/favicon-128x128.png
index 6bc0d10a..6355c487 100644
Binary files a/public/favicons/favicon-128x128.png and b/public/favicons/favicon-128x128.png differ
diff --git a/public/favicons/favicon-150x150.png b/public/favicons/favicon-150x150.png
index 713cdfbe..e2d85f6e 100644
Binary files a/public/favicons/favicon-150x150.png and b/public/favicons/favicon-150x150.png differ
diff --git a/public/favicons/favicon-16x16.png b/public/favicons/favicon-16x16.png
index 4c354064..5259924b 100644
Binary files a/public/favicons/favicon-16x16.png and b/public/favicons/favicon-16x16.png differ
diff --git a/public/favicons/favicon-180x180.png b/public/favicons/favicon-180x180.png
index 724f901b..fac03024 100644
Binary files a/public/favicons/favicon-180x180.png and b/public/favicons/favicon-180x180.png differ
diff --git a/public/favicons/favicon-192x192.png b/public/favicons/favicon-192x192.png
index e1642525..aeae5ec8 100644
Binary files a/public/favicons/favicon-192x192.png and b/public/favicons/favicon-192x192.png differ
diff --git a/public/favicons/favicon-256x256.png b/public/favicons/favicon-256x256.png
index 57110dd2..4951b6e4 100644
Binary files a/public/favicons/favicon-256x256.png and b/public/favicons/favicon-256x256.png differ
diff --git a/public/favicons/favicon-310x310.png b/public/favicons/favicon-310x310.png
index f868158f..1f187f37 100644
Binary files a/public/favicons/favicon-310x310.png and b/public/favicons/favicon-310x310.png differ
diff --git a/public/favicons/favicon-32x32.png b/public/favicons/favicon-32x32.png
index 4e80ddd6..7663e588 100644
Binary files a/public/favicons/favicon-32x32.png and b/public/favicons/favicon-32x32.png differ
diff --git a/public/favicons/favicon-384x384.png b/public/favicons/favicon-384x384.png
index 01c2857e..9c9e4437 100644
Binary files a/public/favicons/favicon-384x384.png and b/public/favicons/favicon-384x384.png differ
diff --git a/public/favicons/favicon-48x48.png b/public/favicons/favicon-48x48.png
index 28d96de7..33d1baff 100644
Binary files a/public/favicons/favicon-48x48.png and b/public/favicons/favicon-48x48.png differ
diff --git a/public/favicons/favicon-512x512.png b/public/favicons/favicon-512x512.png
index 8a7b7102..3af80f3c 100644
Binary files a/public/favicons/favicon-512x512.png and b/public/favicons/favicon-512x512.png differ
diff --git a/public/favicons/favicon-64x64.png b/public/favicons/favicon-64x64.png
index 9886eb1c..406765e1 100644
Binary files a/public/favicons/favicon-64x64.png and b/public/favicons/favicon-64x64.png differ
diff --git a/public/favicons/favicon-96x96.png b/public/favicons/favicon-96x96.png
index da11b57f..7b8e4e7f 100644
Binary files a/public/favicons/favicon-96x96.png and b/public/favicons/favicon-96x96.png differ
diff --git a/public/favicons/favicon.ico b/public/favicons/favicon.ico
index 94fdc1e4..7b8117a6 100644
Binary files a/public/favicons/favicon.ico and b/public/favicons/favicon.ico differ
diff --git a/public/favicons/favicon.svg b/public/favicons/favicon.svg
index 2ee8818e..a0cffce7 100644
--- a/public/favicons/favicon.svg
+++ b/public/favicons/favicon.svg
@@ -1,21 +1,26 @@
\ No newline at end of file
+
+
+
+
diff --git a/public/favicons/mstile-150x150.png b/public/favicons/mstile-150x150.png
index 0170a68b..86ec4717 100644
Binary files a/public/favicons/mstile-150x150.png and b/public/favicons/mstile-150x150.png differ
diff --git a/public/favicons/mstile-310x310.png b/public/favicons/mstile-310x310.png
index 067145d5..e3dfc31b 100644
Binary files a/public/favicons/mstile-310x310.png and b/public/favicons/mstile-310x310.png differ
diff --git a/public/favicons/site.webmanifest b/public/favicons/site.webmanifest
index 493c411a..62262872 100644
--- a/public/favicons/site.webmanifest
+++ b/public/favicons/site.webmanifest
@@ -1,11 +1,11 @@
{
- "name": "Warehouse Management System",
+ "name": "WMS Platform",
"short_name": "WMS",
- "description": "MPBA Warehouse Management System",
+ "description": "High performance warehouse management platform",
"start_url": "/dashboard",
"display": "standalone",
- "background_color": "#08142a",
- "theme_color": "#0d2a4a",
+ "background_color": "#0f172a",
+ "theme_color": "#0e7490",
"orientation": "portrait-primary",
"icons": [
{
diff --git a/resources/css/app.css b/resources/css/app.css
index 268f69c3..d4e35559 100644
--- a/resources/css/app.css
+++ b/resources/css/app.css
@@ -1,4 +1,3 @@
-@import '@fortawesome/fontawesome-free/css/all.min.css';
@import 'tailwindcss';
@import '../../vendor/livewire/flux/dist/flux.css';
@@ -66,10 +65,422 @@ select:focus[data-flux-control] {
@apply size-4;
} */
-
@layer components {
+ .wms-app-shell {
+ min-height: 100vh;
+ display: flex;
+ background: rgb(250 250 250);
+ }
+
+ .dark .wms-app-shell {
+ background: rgb(9 9 11);
+ }
+
+ .wms-sidebar {
+ position: sticky;
+ top: 0;
+ z-index: 40;
+ display: flex;
+ width: 20rem;
+ min-width: 20rem;
+ height: 100vh;
+ flex-direction: column;
+ border-right: 1px solid rgb(228 228 231);
+ background: rgb(250 250 250);
+ transition: width 180ms ease, min-width 180ms ease, transform 180ms ease;
+ }
+
+ .dark .wms-sidebar {
+ border-right-color: rgb(63 63 70);
+ background: rgb(24 24 27);
+ }
+
+ .wms-sidebar-header {
+ display: flex;
+ align-items: center;
+ gap: 0.75rem;
+ min-height: 4.5rem;
+ padding: 0.875rem;
+ border-bottom: 1px solid rgb(228 228 231);
+ }
+
+ .dark .wms-sidebar-header {
+ border-bottom-color: rgb(63 63 70);
+ }
+
+ .wms-brand {
+ display: flex;
+ align-items: center;
+ gap: 0.75rem;
+ min-width: 0;
+ flex: 1;
+ color: inherit;
+ text-decoration: none;
+ }
+
.wms-brand-mark {
- background: linear-gradient(135deg, #08142a 0%, #0d2a4a 56%, #0f766e 100%);
- box-shadow: inset 0 1px 0 rgb(255 255 255 / 18%), 0 10px 24px rgb(8 20 42 / 22%);
+ display: grid;
+ width: 2.35rem;
+ height: 2.35rem;
+ flex: 0 0 auto;
+ place-items: center;
+ border-radius: 0.75rem;
+ background: linear-gradient(135deg, rgb(15 23 42), rgb(14 116 144));
+ color: white;
+ box-shadow: 0 12px 24px rgb(15 23 42 / 0.22);
+ }
+
+ .wms-brand-mark-inner {
+ font-size: 1rem;
+ font-weight: 800;
+ letter-spacing: -0.04em;
+ }
+
+ .wms-brand-copy {
+ min-width: 0;
+ display: grid;
+ line-height: 1.1;
+ }
+
+ .wms-brand-title {
+ max-width: 14rem;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+ font-size: 0.94rem;
+ font-weight: 750;
+ color: rgb(24 24 27);
+ }
+
+ .dark .wms-brand-title {
+ color: rgb(244 244 245);
+ }
+
+ .wms-brand-subtitle {
+ margin-top: 0.15rem;
+ font-size: 0.72rem;
+ font-weight: 700;
+ letter-spacing: 0.14em;
+ color: rgb(8 145 178);
+ }
+
+ .wms-sidebar-toggle,
+ .wms-mobile-close,
+ .wms-mobile-menu {
+ display: inline-grid;
+ place-items: center;
+ border-radius: 0.65rem;
+ border: 1px solid rgb(228 228 231);
+ background: white;
+ color: rgb(63 63 70);
+ transition: background 120ms ease, color 120ms ease, border-color 120ms ease;
+ }
+
+ .wms-sidebar-toggle {
+ width: 2rem;
+ height: 2rem;
+ font-size: 1.35rem;
+ font-weight: 800;
+ line-height: 1;
+ }
+
+ .wms-sidebar-toggle:hover,
+ .wms-mobile-close:hover,
+ .wms-mobile-menu:hover {
+ border-color: rgb(14 116 144);
+ color: rgb(14 116 144);
+ }
+
+ .dark .wms-sidebar-toggle,
+ .dark .wms-mobile-close,
+ .dark .wms-mobile-menu {
+ border-color: rgb(63 63 70);
+ background: rgb(39 39 42);
+ color: rgb(228 228 231);
+ }
+
+ .wms-toggle-collapsed {
+ display: none;
+ }
+
+ .wms-mobile-close {
+ display: none;
+ width: 2rem;
+ height: 2rem;
+ font-size: 1.4rem;
+ line-height: 1;
+ }
+
+ .wms-sidebar-nav {
+ flex: 1;
+ overflow-y: auto;
+ padding: 0.85rem;
+ }
+
+ .wms-sidebar-group + .wms-sidebar-group {
+ margin-top: 1.1rem;
+ }
+
+ .wms-sidebar-heading {
+ padding: 0 0.625rem 0.45rem;
+ font-size: 0.69rem;
+ font-weight: 800;
+ letter-spacing: 0.11em;
+ text-transform: uppercase;
+ color: rgb(113 113 122);
+ }
+
+ .wms-sidebar-link {
+ position: relative;
+ display: flex;
+ min-height: 2.55rem;
+ align-items: center;
+ gap: 0.75rem;
+ border-radius: 0.75rem;
+ padding: 0.625rem 0.7rem;
+ color: rgb(63 63 70);
+ font-size: 0.9rem;
+ font-weight: 650;
+ text-decoration: none;
+ transition: background 120ms ease, color 120ms ease;
+ }
+
+ .wms-sidebar-link:hover {
+ background: rgb(244 244 245);
+ color: rgb(14 116 144);
+ }
+
+ .wms-sidebar-link.is-active {
+ background: rgb(236 254 255);
+ color: rgb(14 116 144);
+ }
+
+ .dark .wms-sidebar-link {
+ color: rgb(212 212 216);
+ }
+
+ .dark .wms-sidebar-link:hover {
+ background: rgb(39 39 42);
+ color: rgb(103 232 249);
+ }
+
+ .dark .wms-sidebar-link.is-active {
+ background: rgb(8 47 73 / 0.55);
+ color: rgb(103 232 249);
+ }
+
+ .wms-sidebar-icon {
+ width: 1.2rem;
+ min-width: 1.2rem;
+ text-align: center;
+ font-size: 1rem;
+ }
+
+ .wms-sidebar-footer {
+ display: grid;
+ gap: 0.25rem;
+ border-top: 1px solid rgb(228 228 231);
+ padding: 0.85rem;
+ }
+
+ .dark .wms-sidebar-footer {
+ border-top-color: rgb(63 63 70);
+ }
+
+ .wms-user-card {
+ margin-top: 0.5rem;
+ display: flex;
+ min-width: 0;
+ align-items: center;
+ gap: 0.65rem;
+ border-radius: 0.85rem;
+ border: 1px solid rgb(228 228 231);
+ background: white;
+ padding: 0.65rem;
+ }
+
+ .dark .wms-user-card {
+ border-color: rgb(63 63 70);
+ background: rgb(39 39 42);
+ }
+
+ .wms-user-avatar {
+ display: grid;
+ width: 2rem;
+ height: 2rem;
+ flex: 0 0 auto;
+ place-items: center;
+ border-radius: 999px;
+ background: rgb(15 23 42);
+ color: white;
+ font-size: 0.75rem;
+ font-weight: 800;
+ }
+
+ .wms-user-copy {
+ min-width: 0;
+ }
+
+ .wms-user-name,
+ .wms-user-email {
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+ }
+
+ .wms-user-name {
+ font-size: 0.82rem;
+ font-weight: 750;
+ }
+
+ .wms-user-email {
+ font-size: 0.72rem;
+ color: rgb(113 113 122);
+ }
+
+ .wms-main-column {
+ min-width: 0;
+ flex: 1;
+ }
+
+ .wms-mobile-header {
+ display: none;
+ }
+
+ .wms-mobile-overlay {
+ display: none;
+ }
+
+ html[data-wms-sidebar='collapsed'] .wms-sidebar {
+ width: 5.25rem;
+ min-width: 5.25rem;
+ }
+
+ html[data-wms-sidebar='collapsed'] [data-wms-sidebar-label] {
+ display: none !important;
+ }
+
+ html[data-wms-sidebar='collapsed'] .wms-sidebar-header,
+ html[data-wms-sidebar='collapsed'] .wms-sidebar-footer,
+ html[data-wms-sidebar='collapsed'] .wms-sidebar-nav {
+ align-items: center;
+ padding-left: 0.65rem;
+ padding-right: 0.65rem;
+ }
+
+ html[data-wms-sidebar='collapsed'] .wms-brand {
+ flex: 0 0 auto;
+ }
+
+ html[data-wms-sidebar='collapsed'] .wms-sidebar-header {
+ justify-content: center;
+ flex-wrap: wrap;
+ }
+
+ html[data-wms-sidebar='collapsed'] .wms-sidebar-link {
+ justify-content: center;
+ padding-left: 0.65rem;
+ padding-right: 0.65rem;
+ }
+
+ html[data-wms-sidebar='collapsed'] .wms-toggle-expanded {
+ display: none;
+ }
+
+ html[data-wms-sidebar='collapsed'] .wms-toggle-collapsed {
+ display: inline;
+ }
+
+ @media (max-width: 1023px) {
+ .wms-app-shell {
+ display: block;
+ }
+
+ .wms-sidebar {
+ position: fixed;
+ inset: 0 auto 0 0;
+ width: min(21rem, calc(100vw - 2.5rem));
+ min-width: min(21rem, calc(100vw - 2.5rem));
+ transform: translateX(-105%);
+ box-shadow: 22px 0 60px rgb(0 0 0 / 0.24);
+ }
+
+ html[data-wms-mobile-sidebar='open'] .wms-sidebar {
+ transform: translateX(0);
+ }
+
+ html[data-wms-mobile-sidebar='open'] .wms-mobile-overlay {
+ position: fixed;
+ inset: 0;
+ z-index: 35;
+ display: block;
+ background: rgb(0 0 0 / 0.48);
+ backdrop-filter: blur(2px);
+ }
+
+ html[data-wms-sidebar='collapsed'] .wms-sidebar {
+ width: min(21rem, calc(100vw - 2.5rem));
+ min-width: min(21rem, calc(100vw - 2.5rem));
+ }
+
+ html[data-wms-sidebar='collapsed'] [data-wms-sidebar-label] {
+ display: initial !important;
+ }
+
+ html[data-wms-sidebar='collapsed'] .wms-brand-copy,
+ html[data-wms-sidebar='collapsed'] .wms-sidebar-heading,
+ html[data-wms-sidebar='collapsed'] .wms-user-card span,
+ html[data-wms-sidebar='collapsed'] .wms-sidebar-link span {
+ display: block !important;
+ }
+
+ html[data-wms-sidebar='collapsed'] .wms-sidebar-link {
+ justify-content: flex-start;
+ }
+
+ .wms-sidebar-toggle {
+ display: none;
+ }
+
+ .wms-mobile-close {
+ display: inline-grid;
+ }
+
+ .wms-mobile-header {
+ position: sticky;
+ top: 0;
+ z-index: 30;
+ display: flex;
+ min-height: 4rem;
+ align-items: center;
+ gap: 0.75rem;
+ border-bottom: 1px solid rgb(228 228 231);
+ background: rgb(255 255 255 / 0.86);
+ padding: 0.75rem 1rem;
+ backdrop-filter: blur(14px);
+ }
+
+ .dark .wms-mobile-header {
+ border-bottom-color: rgb(63 63 70);
+ background: rgb(24 24 27 / 0.86);
+ }
+
+ .wms-mobile-menu {
+ width: 2.35rem;
+ height: 2.35rem;
+ flex: 0 0 auto;
+ }
+
+ .wms-mobile-title {
+ min-width: 0;
+ flex: 1;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+ color: inherit;
+ font-size: 0.96rem;
+ font-weight: 800;
+ text-decoration: none;
+ }
}
}
diff --git a/resources/js/app.js b/resources/js/app.js
index e69de29b..be6fdaea 100644
--- a/resources/js/app.js
+++ b/resources/js/app.js
@@ -0,0 +1 @@
+import '@fortawesome/fontawesome-free/css/all.min.css';
diff --git a/resources/views/components/app-logo-icon.blade.php b/resources/views/components/app-logo-icon.blade.php
index b7218c0a..0adc3a2a 100644
--- a/resources/views/components/app-logo-icon.blade.php
+++ b/resources/views/components/app-logo-icon.blade.php
@@ -1,17 +1,8 @@
-