@vite(['resources/css/app.css', 'resources/js/app.js']) {{-- Anti-FOUC: apply dark class before first paint --}}
{{-- ===== SIDEBAR ===== --}} {{-- END SIDEBAR --}} {{-- Mobile backdrop: closes drawer when tapped --}}
{{-- ===== MAIN CONTENT ===== --}}
{{-- Top Header --}}
{{-- Sidebar toggle --}}

@yield('page_title', 'Dashboard')

{{-- Dark mode toggle --}}
{{ auth()->user()->initials() }}
{{-- Page Content --}}
@if(auth()->check() && !auth()->user()->isAdmin() && !$activeShift)

No active shift. You can view records but cannot make any changes until your shift is started. Start shift →

@endif @yield('content')
{{-- Footer --}}
{{-- ===== GLOBAL CONFIRM DIALOG ===== --}} {{-- ===== ONBOARDING TOUR ===== --}} @php // Show if not permanently dismissed AND not already shown this login session $showTour = auth()->check() && !auth()->user()->tutorial_completed_at && !session('pms_tour_shown'); if ($showTour) { // Mark as shown for the rest of this session — won't re-pop on page navigation session(['pms_tour_shown' => true]); $tu = auth()->user(); $tourSteps = [ ['target' => null, 'title' => 'Welcome to NXT-ePMS!', 'desc' => 'This short tour runs each time you log in. Close it anytime — it will come back on your next login. Click "Don\'t show again" when you no longer need it.'], ['target' => '#tour-dashboard', 'title' => 'Dashboard', 'desc' => 'Your daily command center — today\'s occupancy, arrivals, revenue, and a summary of all recent activity at a glance.'], ]; if ($tu->can('reservations.view')) $tourSteps[] = ['target' => '#tour-reservations', 'title' => 'Reservations', 'desc' => 'Manage all bookings here. Create and confirm reservations, collect payments, process check-ins and check-outs, and view guest folios.']; if ($tu->can('front_desk.view')) $tourSteps[] = ['target' => '#tour-checkin', 'title' => 'Check-in Queue', 'desc' => 'See all guests arriving today. Overdue arrivals are highlighted in amber. Click the Check In button to begin the check-in process.']; if ($tu->can('front_desk.view')) $tourSteps[] = ['target' => '#tour-roomrack', 'title' => 'Room Rack', 'desc' => 'A live visual grid of all 63 rooms. Filter by status to see which rooms are occupied, clean, dirty, or under maintenance.']; if ($tu->can('housekeeping.view')) $tourSteps[] = ['target' => '#tour-housekeeping', 'title' => 'Housekeeping', 'desc' => 'Track room cleanliness across all floors. Rooms with arriving guests today are shown as priority. Mark rooms clean when ready.']; if ($tu->can('maintenance.view')) $tourSteps[] = ['target' => '#tour-maintenance', 'title' => 'Maintenance', 'desc' => 'Log work orders for rooms and common areas. Set priority and category, then resolve work orders when the job is done.']; if ($tu->can('pos.view')) $tourSteps[] = ['target' => '#tour-pos', 'title' => 'Point of Sale', 'desc' => 'Process food, beverage, and service charges directly from this screen. Sales are linked to the current shift for reporting.']; if ($tu->can('shifts.view')) $tourSteps[] = ['target' => '#tour-shifts', 'title' => 'Shift Log', 'desc' => 'Clock in when your shift starts and clock out when it ends. Always submit a handover report before you leave.']; if ($tu->hasPermission('reports.occupancy') || $tu->hasPermission('reports.revenue')) $tourSteps[] = ['target' => '#tour-reports', 'title' => 'Reports', 'desc' => 'View occupancy trends, revenue breakdowns by room type and booking source, and nightly audit summaries with date range filters.']; $tourSteps[] = ['target' => '#tour-profile', 'title' => 'Your Profile', 'desc' => 'Update your name, email, phone, and password here. The Start Shift and Sign Out options are also in this menu.']; } @endphp @if($showTour)
{{-- Dim backdrop --}}
{{-- Highlight ring --}} {{-- Popover --}}
{{-- Left-pointing arrow for sidebar steps --}} {{-- Header: progress + X close --}}

{{-- Navigation --}}
{{-- Permanent dismiss --}}
@endif