oceanhelm 0.0.13 → 0.0.14
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/oceanhelm.es.js +146 -101
- package/dist/oceanhelm.es.js.map +1 -1
- package/dist/oceanhelm.umd.js +4 -4
- package/dist/oceanhelm.umd.js.map +1 -1
- package/package.json +1 -1
- package/src/components/ConfigurableSidebar.vue +44 -34
- package/src/utils/sidebarConfig.js +58 -27
package/dist/oceanhelm.es.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"oceanhelm.es.js","sources":["../src/components/ConfigurableSidebar.vue","../src/components/VesselList.vue","../src/components/DashHead.vue","../src/components/Reports.vue","../src/components/OceanHelmMaintenance.vue","../src/components/ActivityLogs.vue","../src/components/CrewManagement.vue","../src/components/RequisitionSystem.vue","../src/utils/sidebarConfig.js","../src/utils/permissions.js","../src/index.js"],"sourcesContent":["<template>\n <nav id=\"sidebar\" :class=\"sidebarClasses\">\n <!-- Logo Section -->\n <div class=\"logo d-flex align-items-center left\" v-if=\"showLogo\">\n <span style=\"margin-left: 45px;\">{{ brandName }}</span>\n </div>\n\n <!-- Navigation Items -->\n <ul class=\"list-unstyled components mt-4\">\n <li v-for=\"(item, index) in filteredMenuItems\" :key=\"index\"\n :class=\"{ 'active': item.active, 'dropdown': item.type === 'dropdown' }\" @click=\"handleItemClick(item)\">\n <!-- Regular Link -->\n <a v-if=\"item.type === 'link'\" :href=\"item.href || '#'\" @click.prevent=\"handleNavigation(item)\">\n <i :class=\"item.icon\" v-if=\"item.icon\"></i>\n {{ item.label }}\n </a>\n\n <!-- Button/Action -->\n <a v-else-if=\"item.type === 'button'\" @click.prevent=\"handleAction(item)\" style=\"cursor: pointer;\">\n <i :class=\"item.icon\" v-if=\"item.icon\"></i>\n {{ item.label }}\n </a>\n\n <!-- Dropdown -->\n <template v-else-if=\"item.type === 'dropdown'\">\n <a class=\"dropdown-toggle\" @click.prevent=\"toggleDropdown(item)\" style=\"cursor: pointer;\">\n <i :class=\"item.icon\" v-if=\"item.icon\"></i>\n {{ item.label }}\n <i class=\"\" :class=\"{ open: item.open }\"></i>\n </a>\n\n <ul v-show=\"item.open\" class=\"sidebar-dropdown\">\n <li v-for=\"(subItem, subIndex) in getFilteredChildren(item)\" :key=\"subIndex\">\n <a class=\"dropdown-item\" @click.prevent=\"handleAction(subItem)\">\n {{ subItem.label }}\n </a>\n </li>\n </ul>\n </template>\n\n <!-- Separator -->\n <div v-else-if=\"item.type === 'separator'\" class=\"dropdown-divider\"></div>\n\n <!-- Static Text -->\n <a v-else-if=\"item.type === 'text'\">\n {{ item.label }}\n </a>\n </li>\n </ul>\n\n <!-- Custom Slot for Additional Content -->\n <slot name=\"footer\"></slot>\n </nav>\n</template>\n\n<script>\nexport default {\n name: 'ConfigurableSidebar',\n\n props: {\n // Brand configuration\n brandName: {\n type: String,\n default: 'OceanHelm'\n },\n logoIcon: {\n type: String,\n default: 'bi bi-water'\n },\n showLogo: {\n type: Boolean,\n default: true\n },\n\n // Menu items configuration\n menuItems: {\n type: Array,\n required: true,\n default: () => []\n },\n\n // User profile for role-based filtering\n userProfile: {\n type: Object,\n default: () => ({})\n },\n\n // Sidebar behavior\n responsive: {\n type: Boolean,\n default: true\n },\n\n // Custom classes\n customClasses: {\n type: String,\n default: ''\n },\n\n // Permission checker function\n permissionChecker: {\n type: Function,\n default: null\n }\n },\n\n computed: {\n sidebarClasses() {\n return this.customClasses;\n },\n\n filteredMenuItems() {\n return this.menuItems.filter(item => {\n // Check if the item itself has permission\n if (!this.hasPermission(item)) {\n return false;\n }\n\n // For dropdown items, check if any children have permission\n if (item.type === 'dropdown' && item.children) {\n return item.children.some(child => this.hasPermission(child));\n }\n\n return true;\n });\n }\n },\n\n mounted() {\n if (this.responsive) {\n this.initializeResponsiveBehavior();\n }\n },\n\n methods: {\n toggleDropdown(item) {\n // Close others if you want accordion behavior\n this.filteredMenuItems.forEach(i => {\n if (i !== item && i.type === 'dropdown') {\n i.open = false;\n }\n });\n\n item.open = !item.open;\n },\n // Get filtered children for dropdown items\n getFilteredChildren(item) {\n if (!item.children) return [];\n return item.children.filter(child => this.hasPermission(child));\n },\n\n // Permission checking\n hasPermission(item) {\n // Use custom permission checker if provided\n if (this.permissionChecker) {\n return this.permissionChecker(item, this.userProfile);\n }\n\n // Default role-based checking\n if (!item.roles || item.roles.length === 0) {\n return true; // No role restriction\n }\n\n return item.roles.includes(this.userProfile.role);\n },\n\n // Navigation handling\n handleNavigation(item) {\n this.$emit('navigate', item);\n\n // Default behavior if no custom handler\n if (item.href && !item.preventDefault) {\n if (item.external) {\n window.open(item.href, '_blank');\n } else {\n this.$router?.push(item.href);\n }\n }\n },\n\n // Action handling\n handleAction(item) {\n this.$emit('action', item);\n },\n\n // Item click handling\n handleItemClick(item) {\n this.$emit('item-click', item);\n\n if (item.type === 'dropdown') {\n // Handle dropdown specific logic if needed\n }\n },\n\n // Responsive behavior\n initializeResponsiveBehavior() {\n const sidebarToggle = document.getElementById('sidebarToggle');\n const sidebar = document.getElementById('sidebar');\n const content = document.getElementById('content');\n\n if (!sidebarToggle || !sidebar || !content) return;\n\n // Initial state for desktop\n if (window.innerWidth >= 768) {\n sidebar.classList.toggle('active');\n content.classList.toggle('active');\n }\n\n // Toggle functionality\n sidebarToggle.addEventListener('click', () => {\n sidebar.classList.toggle('active');\n content.classList.toggle('active');\n });\n\n // Close sidebar on outside click (mobile)\n document.addEventListener('click', (event) => {\n const isClickInsideSidebar = sidebar.contains(event.target);\n const isClickOnToggleBtn = sidebarToggle.contains(event.target);\n\n if (!isClickInsideSidebar && !isClickOnToggleBtn &&\n window.innerWidth < 768 &&\n sidebar.classList.contains('active')) {\n sidebar.classList.remove('active');\n content.classList.remove('active');\n }\n });\n }\n },\n\n emits: ['navigate', 'action', 'item-click']\n}\n</script>\n\n<style>\n/* Dropdown container */\n.sidebar-dropdown {\n list-style: none;\n padding-left: 20px;\n margin: 5px 0 10px 0;\n}\n\n/* Dropdown items */\n.sidebar-dropdown li a {\n display: block;\n padding: 8px 15px;\n font-size: 14px;\n color: #ddd;\n border-radius: 4px;\n transition: background 0.2s ease;\n}\n\n.sidebar-dropdown li a:hover {\n background: rgba(255, 255, 255, 0.1);\n}\n\n/* Dropdown arrow */\n.dropdown-arrow {\n float: right;\n transition: transform 0.2s ease;\n}\n\n.dropdown-arrow.open {\n transform: rotate(180deg);\n}\n\n</style>","<template>\n <!-- Fleet Summary -->\n <div class=\"row mb-3\">\n <div class=\"col-md-4\">\n <div class=\"card border-0 shadow-sm\" \n @click=\"filterVessels('Active')\"\n :class=\"{ 'border-primary border-2': activeFilter === 'Active' }\"\n style=\"cursor: pointer;\">\n <div class=\"card-body d-flex align-items-center\">\n <div class=\"rounded-circle bg-primary bg-opacity-10 p-3 me-3\">\n <i class=\"bi bi-check-circle-fill text-primary fs-4\"></i>\n </div>\n <div>\n <h6 class=\"mb-0\">Active Vessels</h6>\n <h3 class=\"mt-2 mb-0\">{{ activeVesselsCount }}</h3>\n </div>\n </div>\n </div>\n </div>\n <div class=\"col-md-4\">\n <div class=\"card border-0 shadow-sm\"\n @click=\"filterVessels('Inactive')\"\n :class=\"{ 'border-secondary border-2': activeFilter === 'Inactive' }\"\n style=\"cursor: pointer;\">\n <div class=\"card-body d-flex align-items-center\">\n <div class=\"rounded-circle bg-secondary bg-opacity-10 p-3 me-3\">\n <i class=\"bi bi-pause-circle-fill text-secondary fs-4\"></i>\n </div>\n <div>\n <h6 class=\"mb-0\">Inactive</h6>\n <h3 class=\"mt-2 mb-0\">{{ inactiveVesselsCount }}</h3>\n </div>\n </div>\n </div>\n </div>\n <!-- Register New Fleet -->\n <div class=\"col-md-4\" v-if=\"canAddVessel\">\n <div class=\"card border-0 shadow-sm\" @click=\"handleAddVessel\" style=\"cursor: pointer;\">\n <div class=\"card-body d-flex align-items-center\">\n <div class=\"rounded-circle bg-success bg-opacity-10 p-3 me-3\">\n <i class=\"bi bi-patch-plus-fill text-success fs-4\"></i>\n </div>\n <div>\n <h6 class=\"mb-0\">Add New Vessel</h6>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <div class=\"d-flex justify-content-between align-items-center mb-4\">\n <h4 class=\"mb-0\"><i class=\"bi bi-ship me-2\"></i>Registered Vessels</h4>\n <button \n v-if=\"activeFilter !== 'All'\" \n class=\"btn btn-sm btn-outline-secondary\"\n @click=\"clearFilter\">\n <i class=\"bi bi-x-circle me-1\"></i>Clear Filter\n </button>\n </div>\n\n <!-- Filter indicator -->\n <div v-if=\"activeFilter !== 'All'\" class=\"alert alert-info mb-3\" role=\"alert\">\n Showing <strong>{{ activeFilter }}</strong> vessels ({{ filteredVessels.length }})\n </div>\n\n <!-- Loading State -->\n <div v-if=\"loading\" class=\"text-center py-4\">\n <div class=\"spinner-border text-primary\" role=\"status\">\n <span class=\"visually-hidden\">Loading...</span>\n </div>\n <p class=\"mt-2\">Loading vessels...</p>\n </div>\n\n <!-- Empty State -->\n <div v-else-if=\"!filteredVessels.length && activeFilter === 'All'\" class=\"alert alert-primary\" role=\"alert\">\n <h4 class=\"alert-heading\">Empty Fleet!</h4>\n <p>You have an empty fleet, you have not added any vessel yet.</p>\n <hr>\n <p class=\"mb-0\">Click on the add vessel button above, to start adding vessels to your fleet</p>\n </div>\n\n <!-- No results for filter -->\n <div v-else-if=\"!filteredVessels.length && activeFilter !== 'All'\" class=\"alert alert-warning\" role=\"alert\">\n <h4 class=\"alert-heading\">No {{ activeFilter }} Vessels</h4>\n <p class=\"mb-0\">There are no {{ activeFilter.toLowerCase() }} vessels in your fleet.</p>\n </div>\n\n <!-- Vessel Cards -->\n <div v-else class=\"row\">\n <div class=\"col-lg-6\" v-for=\"vessel in filteredVessels\" :key=\"vessel.registrationNumber || vessel.id\">\n <div class=\"vessel-card\" @click=\"handleVesselClick(vessel)\">\n <div class=\"card-body d-flex align-items-center\">\n <div class=\"vessel-icon v-left\">\n <i class=\"fas fa-ship\"></i>\n </div>\n <div class=\"flex-grow-1\">\n <div class=\"d-flex justify-content-between align-items-center mb-2\">\n <h5 class=\"card-title mb-0\">{{ vessel.name }}</h5>\n <span :class=\"['vessel-status', statusClass(vessel.status)]\">{{ vessel.status }}</span>\n </div>\n <div class=\"row\">\n <div class=\"col-6\">\n <small class=\"text-muted\">Registration #:</small>\n <p class=\"mb-0\">{{ vessel.registrationNumber }}</p>\n </div>\n\n <div class=\"col-6\" v-if=\"vessel.date\">\n <template v-if=\"vessel.status === 'Active'\">\n <small class=\"text-muted\">Active Duration:</small>\n <p class=\"mb-0\">{{ getDuration(vessel.date, vessel.registrationNumber) }}</p>\n </template>\n <template v-else>\n <small class=\"text-muted\">Inactive Duration:</small>\n <p class=\"mb-0\">{{ getDuration(vessel.date, vessel.registrationNumber) }}</p>\n </template>\n </div>\n\n <div class=\"col-6\" v-else>\n <small class=\"text-muted\">{{ vessel.status }} Duration:</small>\n <button type=\"button\" class=\"btn btn-outline-primary btn-sm mt-1\"\n @click.stop=\"setVesselDate(vessel.registrationNumber)\">\n Set Date\n </button>\n </div>\n </div>\n </div>\n </div>\n <div class=\"action-icon v-left delete\">\n <i class=\"bi bi-trash\" @click.stop=\"handleDeleteVessel(vessel)\"></i>\n </div>\n <button class=\"btn btn-primary\" @click.stop=\"handleToggleStatus(vessel)\">\n {{ vessel.status === 'Active' ? 'Mark Inactive' : 'Mark Active' }}\n </button>\n </div>\n </div>\n </div>\n</template>\n\n<script>\nexport default {\n name: 'VesselList',\n\n props: {\n // Required props\n vessels: {\n type: Array,\n required: true,\n default: () => []\n },\n userProfile: {\n type: Object,\n required: true,\n default: () => ({ role: 'viewer', vessel: null })\n },\n\n // Optional props\n loading: {\n type: Boolean,\n default: false\n },\n currentRoute: {\n type: String,\n default: 'dashboard' // 'dashboard', 'maintenanceroute', 'crewroute'\n },\n\n // Configuration props\n config: {\n type: Object,\n default: () => ({\n enableAdd: true,\n enableEdit: true,\n enableDelete: true,\n enableStatusToggle: true,\n showCertifications: true\n })\n }\n },\n\n data() {\n return {\n activeFilter: 'All' // 'All', 'Active', or 'Inactive'\n };\n },\n\n emits: [\n 'vessel-add',\n 'vessel-click',\n 'vessel-edit',\n 'vessel-delete',\n 'vessel-toggle-status',\n 'vessel-navigate',\n 'access-denied',\n 'date-change'\n ],\n\n computed: {\n activeVesselsCount() {\n return this.vessels.filter(vessel => vessel.status === \"Active\").length;\n },\n\n inactiveVesselsCount() {\n return this.vessels.filter(vessel => vessel.status === \"Inactive\").length;\n },\n\n filteredVessels() {\n if (this.activeFilter === 'All') {\n return this.vessels;\n }\n return this.vessels.filter(vessel => vessel.status === this.activeFilter);\n },\n\n canAddVessel() {\n return this.config.enableAdd &&\n (this.userProfile.role === 'owner' || this.userProfile.role === 'staff');\n }\n },\n\n methods: {\n // Filter methods\n filterVessels(status) {\n this.activeFilter = status;\n },\n\n clearFilter() {\n this.activeFilter = 'All';\n },\n\n // Event handlers that emit to parent\n handleAddVessel() {\n if (!this.canAddVessel) {\n this.handleAccessDenied('add vessel');\n return;\n }\n this.$emit('vessel-add');\n },\n\n handleVesselClick(vessel) {\n const navigationData = {\n vessel,\n route: this.currentRoute,\n id: vessel.registrationNumber,\n name: vessel.name\n };\n\n if (this.grantAccess(vessel)) {\n if (this.currentRoute === 'dashboard') {\n this.$emit('vessel-click', vessel);\n } else {\n this.$emit('vessel-navigate', navigationData);\n }\n } else {\n this.handleAccessDenied('this protected route');\n }\n },\n\n handleDeleteVessel(vessel) {\n if (!this.grantAccess(vessel)) {\n this.handleAccessDenied('delete vessel');\n return;\n }\n\n if (!this.config.enableDelete) {\n return;\n }\n\n this.$emit('vessel-delete', vessel);\n },\n\n handleToggleStatus(vessel) {\n if (!this.grantAccess(vessel)) {\n this.handleAccessDenied('change vessel status');\n return;\n }\n\n if (!this.config.enableStatusToggle) {\n return;\n }\n\n this.$emit('vessel-toggle-status', vessel);\n },\n\n handleEditVessel(vessel) {\n if (!this.grantAccess(vessel)) {\n this.handleAccessDenied('edit vessel');\n return;\n }\n\n if (!this.config.enableEdit) {\n return;\n }\n\n this.$emit('vessel-edit', vessel);\n },\n\n handleAccessDenied(action) {\n this.$emit('access-denied', { action, userProfile: this.userProfile });\n },\n\n // Utility methods (keep these in component as they're UI-related)\n statusClass(status) {\n const normalized = status?.toLowerCase() || '';\n return `status-${normalized}`;\n },\n\n getDuration(date, registrationNumber) {\n const now = new Date();\n const inputDate = new Date(date);\n\n // difference in milliseconds\n const diffMs = now - inputDate;\n\n if (diffMs < 0) return \"Invalid (future date)\";\n\n // convert to hours\n const diffHours = Math.floor(diffMs / (1000 * 60 * 60));\n\n const days = Math.floor(diffHours / 24);\n const hours = diffHours % 24;\n\n let result = \"\";\n\n if (days > 0) {\n result += `${days} day${days > 1 ? \"s\" : \"\"}`;\n }\n if (hours > 0) {\n result += (result ? \" \" : \"\") + `${hours} hr${hours > 1 ? \"s\" : \"\"}`;\n }\n\n return result || '0 hr'\n },\n\n setVesselDate(registrationNumber) {\n this.$emit('date-change', registrationNumber);\n },\n\n grantAccess(vessel) {\n const { role, vessel: userVessel } = this.userProfile;\n\n return role === 'owner' ||\n role === 'staff' ||\n (role === 'captain' && userVessel === vessel.name);\n },\n\n getDaysToExpiry(expiry_date) {\n if (!expiry_date) return null;\n\n const today = new Date();\n const expiry = new Date(expiry_date);\n const diffTime = expiry - today;\n const diffDays = Math.ceil(diffTime / (1000 * 60 * 60 * 24));\n return diffDays;\n },\n\n getExpiryClass(expiry_date) {\n const days = this.getDaysToExpiry(expiry_date);\n if (days === null) return '';\n if (days < 30) return 'cert-critical';\n if (days < 90) return 'cert-warning';\n return '';\n }\n }\n}\n</script>\n\n<style>\n.v-left {\n margin-left: 20px;\n}\n\n.vessel-card {\n background: white;\n border-radius: 10px;\n box-shadow: 0 8px 16px rgba(0, 105, 192, 0.15);\n transition: all 0.3s ease;\n margin-bottom: 20px;\n overflow: hidden;\n border-left: 4px solid var(--accent-color);\n}\n\n.vessel-card:hover {\n transform: translateY(-5px);\n box-shadow: 0 12px 20px rgba(0, 105, 192, 0.2);\n}\n\n.vessel-icon {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 50px;\n height: 50px;\n background-color: #e3f2fd;\n border-radius: 10px;\n color: var(--accent-color);\n font-size: 24px;\n margin-right: 15px;\n}\n\n.black {\n color: black !important;\n}\n\n.action-icon {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 30px;\n height: 30px;\n border-radius: 20px;\n color: var(--accent-color);\n font-size: 16px;\n margin-right: 15px;\n margin-top: 20px;\n margin-bottom: 10px;\n}\n\n.delete {\n background-color: var(--danger);\n}\n\n.edit {\n background-color: var(--success);\n}\n\n.vessel-status {\n display: inline-block;\n padding: 5px 12px;\n border-radius: 20px;\n font-size: 12px;\n font-weight: 600;\n}\n\n.status-active {\n background-color: #e8f5e9;\n color: #2e7d32;\n}\n\n.status-maintenance {\n background-color: #fff8e1;\n color: #f57f17;\n}\n\n.status-inactive {\n background-color: #f5f5f5;\n color: #757575;\n}\n</style>","<template>\n <div class=\"page-header d-flex justify-content-between align-items-center\">\n <h4 style=\"margin-left: 20px;\">{{ name }}</h4>\n <div class=\"d-flex\">\n <button class=\"btn btn-outline-primary me-2\" @click=\"addUser()\" v-if=\"this.userProfile.role == 'owner'\">\n <i class=\"bi bi-bell\"></i>\n <span class=\"badge bg-danger\">1</span>\n </button>\n <button class=\"btn btn-outline-primary\" @click=\"loggedIn()\">\n <i class=\"bi bi-person-circle\"></i>\n </button>\n </div>\n </div>\n</template>\n\n<script>\nexport default {\n name: 'DashHead',\n \n props: {\n name: {\n type: String,\n required: true\n },\n userProfile: {\n type: Object,\n required: true,\n default: () => ({ role: 'viewer', vessel: null })\n }\n },\n\n emits: [\n 'add-user',\n 'logged-in'\n ],\n\n methods: {\n addUser() {\n this.$emit('add-user');\n },\n loggedIn() {\n this.$emit('logged-in');\n }\n }\n}\n</script>\n\n<style>\n.page-header {\n margin-bottom: 30px;\n border-bottom: 1px solid #e0e0e0;\n padding-bottom: 15px;\n}\n\n.btn-outline-primary {\n border: 1px solid #0d6efd !important;\n}\n\n.btn-outline-primary:hover {\n background-color: #0d6efd !important;\n border-color: #0d6efd !important;\n color: white !important;\n}\n</style>","<template>\n <div class=\"reports-container\">\n\n <!-- ── Missing Reports Alert Banner ── -->\n <transition name=\"slide-down\">\n <div class=\"missing-banner\" v-if=\"!bannerDismissed && (pendingContext || missingReports.length > 0)\">\n <div class=\"missing-banner-inner\">\n <div class=\"missing-icon\"><i class=\"bi bi-exclamation-triangle-fill\"></i></div>\n <div class=\"missing-content\">\n <strong v-if=\"pendingContext\">\n Action Required — Report for\n <span class=\"ref-chip\">{{ pendingContext.entity_ref }}</span> must be submitted\n </strong>\n <strong v-else>\n {{ missingReports.length }} report{{ missingReports.length > 1 ? 's' : '' }} awaiting\n submission\n </strong>\n <p v-if=\"pendingContext\">{{ pendingContext.title }}</p>\n </div>\n <button class=\"btn btn-warning btn-sm fw-bold\" @click=\"openReportForm('qhse')\">\n <i class=\"bi bi-pencil-square me-1\"></i> Submit Report\n </button>\n <button class=\"btn-dismiss\" @click=\"dismissBanner\" title=\"Dismiss\">\n <i class=\"bi bi-x-lg\"></i>\n </button>\n </div>\n </div>\n </transition>\n\n <!-- ── Page Header ── -->\n <div class=\"page-header d-flex justify-content-between align-items-center\">\n <div>\n <h4 class=\"page-title\">Reports</h4>\n <p class=\"page-subtitle\">Document Management & QHSE Reports</p>\n </div>\n <div class=\"header-actions\">\n <div class=\"btn-group-split\">\n <button class=\"btn btn-outline-primary\" @click=\"openReportForm('qhse')\">\n <i class=\"bi bi-shield-check\"></i> QHSE Report\n </button>\n <button class=\"btn btn-outline-secondary\" @click=\"openReportForm('manual')\">\n <i class=\"bi bi-file-earmark-plus\"></i> Manual Report\n </button>\n <button class=\"btn btn-primary\" @click=\"showNewFolderModal = true\">\n <i class=\"bi bi-folder-plus\"></i> New Folder\n </button>\n </div>\n </div>\n </div>\n\n <!-- ── Tab Navigation ── -->\n <div class=\"tab-nav\">\n <button :class=\"['tab-btn', { active: activeTab === 'all' }]\" @click=\"activeTab = 'all'\">\n All Reports <span class=\"tab-count\">{{ reports.length }}</span>\n </button>\n <button :class=\"['tab-btn', { active: activeTab === 'drill' }]\" @click=\"activeTab = 'drill'\">\n <i class=\"bi bi-people-fill me-1\"></i>Drills\n <span class=\"tab-count drill\">{{ drillReports.length }}</span>\n </button>\n <button :class=\"['tab-btn', { active: activeTab === 'incident' }]\" @click=\"activeTab = 'incident'\">\n <i class=\"bi bi-exclamation-octagon-fill me-1\"></i>Incidents\n <span class=\"tab-count incident\">{{ incidentReports.length }}</span>\n </button>\n <button :class=\"['tab-btn', { active: activeTab === 'manual' }]\" @click=\"activeTab = 'manual'\">\n <i class=\"bi bi-file-earmark-text me-1\"></i>Manual\n <span class=\"tab-count manual\">{{ manualReports.length }}</span>\n </button>\n <button :class=\"['tab-btn', { active: activeTab === 'folders' }]\" @click=\"activeTab = 'folders'\">\n <i class=\"bi bi-folder-fill me-1\"></i>Folders\n <span class=\"tab-count\">{{ reports.length + folders.length }}</span>\n </button>\n </div>\n\n <!-- ── Loading ── -->\n <div v-if=\"isLoading\" class=\"loading-container\">\n <div class=\"spinner\"></div>\n <p>Loading reports…</p>\n </div>\n\n <!-- ════════════════════════════════════════\n REPORTS LIST TABS (all/drill/incident/manual)\n ════════════════════════════════════════ -->\n <div v-if=\"activeTab !== 'folders' && !isLoading\">\n <div class=\"report-cards\" v-if=\"filteredReports.length > 0\">\n <div v-for=\"report in filteredReports\" :key=\"report.id\" :ref=\"'report-' + report.entityRef\"\n :class=\"['report-card', { 'report-card--highlighted': highlightedRef === report.entityRef }]\">\n <div class=\"rc-type-bar\" :class=\"reportTypeClass(report)\"></div>\n <div class=\"rc-badge\" :class=\"reportTypeClass(report)\">{{ reportTypeLabel(report) }}</div>\n\n <div class=\"rc-body\" @click=\"viewReport(report)\">\n <strong class=\"rc-ref\">{{ report.entityRef || report.id?.slice(0, 8).toUpperCase() }}</strong>\n <span class=\"rc-title\">{{ report.title }}</span>\n <span class=\"rc-meta\">\n <i class=\"bi bi-person-fill me-1\"></i>{{ report.submittedBy }}\n · \n <i class=\"bi bi-calendar3 me-1\"></i>{{ formatDate(report.submittedAt) }}\n </span>\n </div>\n\n <div class=\"rc-files\" v-if=\"getFilesForReport(report.id).length > 0\">\n <i class=\"bi bi-paperclip\"></i> {{ getFilesForReport(report.id).length }}\n </div>\n\n <!-- Folder pill: click jumps to the auto-folder -->\n <button class=\"rc-folder-pill\" :class=\"reportTypeClass(report)\" @click.stop=\"jumpToFolder(report)\"\n title=\"View folder\">\n <i class=\"bi bi-folder-fill me-1\"></i>\n {{ report.entityRef || report.title }}\n </button>\n\n <div class=\"rc-actions\">\n <button class=\"rc-btn rc-btn--view\" @click=\"viewReport(report)\" title=\"View\">\n <i class=\"bi bi-eye\"></i>\n </button>\n <button class=\"rc-btn rc-btn--download\" @click=\"downloadReport(report)\"\n :disabled=\"generatingPdf === report.id\" title=\"Download ZIP\">\n <span v-if=\"generatingPdf === report.id\" class=\"spinner-xs\"></span>\n <i v-else class=\"bi bi-file-zip\"></i>\n </button>\n </div>\n </div>\n </div>\n\n <div class=\"empty-state text-center\" v-if=\"filteredReports.length === 0\">\n <i class=\"bi bi-file-earmark-x\" style=\"font-size:3.5rem;color:#ccc;\"></i>\n <h5 class=\"mt-3 text-muted\">No {{ activeTab === 'all' ? '' : activeTab }} reports yet</h5>\n <p class=\"text-muted\">\n <span v-if=\"activeTab === 'manual'\">Create a manual report using the button above</span>\n <span v-else-if=\"activeTab === 'drill'\">Submit a report after logging a drill</span>\n <span v-else-if=\"activeTab === 'incident'\">Submit a report after logging an incident</span>\n <span v-else>Submit a report or create a folder to get started</span>\n </p>\n </div>\n </div>\n\n <!-- ════════════════════════════════════════\n FOLDERS TAB\n ════════════════════════════════════════ -->\n <div v-if=\"activeTab === 'folders' && !isLoading\">\n\n <!-- ─ Auto-folders ─ -->\n <div v-if=\"reports.length > 0\">\n <div class=\"section-heading\">\n <i class=\"bi bi-folder-symlink-fill text-primary me-1\"></i>\n Report Folders\n <span class=\"section-count\">{{ reports.length }}</span>\n <span class=\"section-hint\">Auto-generated · one per submitted report</span>\n </div>\n\n <div class=\"folders-list\">\n <div v-for=\"report in reports\" :key=\"'af-' + report.id\"\n :ref=\"'folder-' + (report.entityRef || report.id)\"\n :class=\"['auto-folder-card', reportTypeClass(report), { 'is-open': expandedFolders.includes('auto-' + report.id) }]\">\n <div class=\"af-header\" @click=\"toggleFolder('auto-' + report.id)\">\n <div class=\"af-icon-wrap\">\n <i class=\"bi bi-folder-fill af-folder-icon\"\n :class=\"'color--' + reportTypeClass(report)\"></i>\n <span class=\"af-count-badge\">{{ 1 + getFilesForReport(report.id).length }}</span>\n </div>\n <div class=\"af-meta\">\n <span class=\"af-ref\">{{ report.entityRef || report.id?.slice(0, 8).toUpperCase()\n }}</span>\n <span class=\"af-title\">{{ report.title }}</span>\n <div class=\"af-sub\">\n <span class=\"mini-badge\" :class=\"reportTypeClass(report)\">{{ reportTypeLabel(report)\n }}</span>\n <span class=\"text-muted\">{{ formatDate(report.submittedAt) }}</span>\n <span class=\"text-muted\" v-if=\"getFilesForReport(report.id).length\">\n · {{ getFilesForReport(report.id).length }} attachment{{\n getFilesForReport(report.id).length !== 1 ? 's' : '' }}\n </span>\n </div>\n </div>\n <div class=\"af-actions\">\n <button class=\"rc-btn rc-btn--download\" @click.stop=\"downloadReport(report)\"\n :disabled=\"generatingPdf === report.id\" title=\"Download ZIP\">\n <span v-if=\"generatingPdf === report.id\" class=\"spinner-xs\"></span>\n <i v-else class=\"bi bi-file-zip\"></i>\n </button>\n <i class=\"bi chevron-icon\"\n :class=\"expandedFolders.includes('auto-' + report.id) ? 'bi-chevron-up' : 'bi-chevron-down'\"></i>\n </div>\n </div>\n\n <transition name=\"folder-expand\">\n <div class=\"af-contents\" v-if=\"expandedFolders.includes('auto-' + report.id)\">\n\n <div class=\"ffi ffi--report\" @click=\"viewReport(report)\">\n <div class=\"ffi-icon ffi-icon--pdf\"><i class=\"bi bi-file-earmark-pdf-fill\"></i>\n </div>\n <div class=\"ffi-meta\">\n <span class=\"ffi-name\">{{ safeRef(report) }}_report.pdf</span>\n <span class=\"ffi-sub\">Generated report sheet · click to preview</span>\n </div>\n <div class=\"ffi-acts\">\n <button class=\"rc-btn rc-btn--view\" @click.stop=\"viewReport(report)\"\n title=\"Preview\"><i class=\"bi bi-eye\"></i></button>\n <button class=\"rc-btn rc-btn--download\"\n @click.stop=\"downloadReportPdfOnly(report)\"\n :disabled=\"generatingPdf === report.id + '-pdf'\" title=\"Download PDF only\">\n <span v-if=\"generatingPdf === report.id + '-pdf'\" class=\"spinner-xs\"></span>\n <i v-else class=\"bi bi-download\"></i>\n </button>\n </div>\n </div>\n\n <div v-for=\"f in getFilesForReport(report.id)\" :key=\"f.id\" class=\"ffi\">\n <div class=\"ffi-icon\" :class=\"ffiIconClass(f)\">\n <i class=\"bi\" :class=\"fileIcon(f.type)\"></i>\n </div>\n <div class=\"ffi-meta\">\n <span class=\"ffi-name\">{{ f.name }}</span>\n <span class=\"ffi-sub\">{{ formatFileSize(f.size) }}</span>\n </div>\n <div class=\"ffi-acts\">\n <a v-if=\"f.publicUrl\" :href=\"f.publicUrl\" target=\"_blank\" rel=\"noopener\"\n class=\"rc-btn rc-btn--view\" title=\"Open\"><i\n class=\"bi bi-box-arrow-up-right\"></i></a>\n </div>\n </div>\n\n <div class=\"ffi-empty\" v-if=\"getFilesForReport(report.id).length === 0\">\n <i class=\"bi bi-paperclip me-1\"></i>No attachments — ZIP will contain the report PDF\n only\n </div>\n\n <div class=\"af-zip-row\">\n <button class=\"btn btn-sm btn-outline-primary\" @click=\"downloadReport(report)\"\n :disabled=\"generatingPdf === report.id\">\n <span v-if=\"generatingPdf === report.id\">\n <span class=\"spinner-xs me-1\"></span>Building ZIP…\n </span>\n <span v-else>\n <i class=\"bi bi-file-zip me-1\"></i>Download all as ZIP\n </span>\n </button>\n <span class=\"af-zip-hint\">\n {{ safeRef(report) }}.zip\n · report PDF{{ getFilesForReport(report.id).length ? ' + ' +\n getFilesForReport(report.id).length + ' file(s)' : '' }}\n </span>\n </div>\n\n </div>\n </transition>\n </div>\n </div>\n </div>\n\n <!-- ─ User folders ─ -->\n <div :class=\"{ 'mt-4': reports.length > 0 }\" v-if=\"folders.length > 0\">\n <div class=\"section-heading\">\n <i class=\"bi bi-folder-plus text-warning me-1\"></i>\n Custom Folders\n <span class=\"section-count\">{{ folders.length }}</span>\n </div>\n\n <div class=\"folders-list\">\n <div v-for=\"folder in folders\" :key=\"'uf-' + folder.id\"\n :class=\"['user-folder-card', { 'is-open': expandedFolders.includes('user-' + folder.id) }]\">\n <div class=\"af-header\" @click=\"toggleFolder('user-' + folder.id)\">\n <div class=\"af-icon-wrap\">\n <i class=\"bi bi-folder-fill af-folder-icon color--user\"></i>\n <span class=\"af-count-badge\" style=\"background:#f0ad4e;color:#664d03;\">{{\n folder.files.length }}</span>\n </div>\n <div class=\"af-meta\">\n <span class=\"af-ref\">{{ folder.name }}</span>\n <span class=\"af-sub\">\n <span class=\"text-muted\">{{ folder.files.length }} file{{ folder.files.length !== 1\n ? 's' : '' }}</span>\n </span>\n </div>\n <div class=\"af-actions\">\n <button class=\"rc-btn\" style=\"color:#6f42c1;\" @click.stop=\"selectFolder(folder)\"\n title=\"Add Files\">\n <i class=\"bi bi-file-earmark-plus\"></i>\n </button>\n <button class=\"rc-btn rc-btn--danger\"\n @click.stop=\"$emit('folder-delete-requested', folder.id)\" title=\"Delete\">\n <i class=\"bi bi-trash\"></i>\n </button>\n <i class=\"bi chevron-icon\"\n :class=\"expandedFolders.includes('user-' + folder.id) ? 'bi-chevron-up' : 'bi-chevron-down'\"></i>\n </div>\n </div>\n\n <transition name=\"folder-expand\">\n <div class=\"af-contents\" v-if=\"expandedFolders.includes('user-' + folder.id)\">\n <div v-for=\"file in folder.files\" :key=\"file.id\" class=\"ffi\">\n <div class=\"ffi-icon\" :class=\"ffiIconClass(file)\">\n <i class=\"bi\" :class=\"fileIcon(file.type)\"></i>\n </div>\n <div class=\"ffi-meta\">\n <span class=\"ffi-name\">{{ file.name }}</span>\n <span class=\"ffi-sub\">{{ formatFileSize(file.size) }}</span>\n </div>\n <div class=\"ffi-acts\">\n <button class=\"rc-btn rc-btn--danger\"\n @click=\"$emit('file-remove-requested', { folderId: folder.id, fileId: file.id })\"\n title=\"Remove\"><i class=\"bi bi-x-circle\"></i></button>\n </div>\n </div>\n\n <div class=\"ffi-empty\" v-if=\"folder.files.length === 0\">\n <i class=\"bi bi-inbox me-1\"></i>Empty folder\n <button class=\"btn btn-sm btn-outline-secondary ms-2\" @click=\"selectFolder(folder)\">\n <i class=\"bi bi-file-earmark-plus me-1\"></i>Add Files\n </button>\n </div>\n </div>\n </transition>\n </div>\n </div>\n </div>\n\n <!-- All empty -->\n <div class=\"empty-state text-center\" v-if=\"reports.length === 0 && folders.length === 0\">\n <i class=\"bi bi-folder2-open\" style=\"font-size:3.5rem;color:#ccc;\"></i>\n <h5 class=\"mt-3 text-muted\">No folders yet</h5>\n <p class=\"text-muted\">Each submitted report auto-creates a folder here. You can also create custom\n folders.</p>\n <button class=\"btn btn-primary mt-2\" @click=\"showNewFolderModal = true\">\n <i class=\"bi bi-folder-plus me-1\"></i> New Folder\n </button>\n </div>\n </div>\n\n <!-- ════════════════════════════════════════\n MODALS\n ════════════════════════════════════════ -->\n\n <!-- New Folder -->\n <div class=\"modal\" :class=\"{ 'show': showNewFolderModal }\" @click.self=\"showNewFolderModal = false\">\n <div class=\"modal-dialog modal-dialog-centered\">\n <div class=\"modal-content\">\n <div class=\"modal-header\">\n <h5 class=\"modal-title\"><i class=\"bi bi-folder-plus me-2\"></i>Create New Folder</h5>\n <button type=\"button\" class=\"btn-close\" @click=\"showNewFolderModal = false\"></button>\n </div>\n <div class=\"modal-body\">\n <label class=\"form-label\">Folder Name</label>\n <input type=\"text\" class=\"form-control\" v-model=\"newFolderName\"\n @keyup.enter=\"requestCreateFolder\" placeholder=\"e.g., Q1 2025 Drills\" />\n </div>\n <div class=\"modal-footer\">\n <button type=\"button\" class=\"btn btn-secondary\"\n @click=\"showNewFolderModal = false\">Cancel</button>\n <button type=\"button\" class=\"btn btn-primary\" @click=\"requestCreateFolder\"\n :disabled=\"!newFolderName.trim()\">Create Folder</button>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Submit Report -->\n <div class=\"modal\" :class=\"{ 'show': showReportModal }\" @click.self=\"closeReportForm\">\n <div class=\"modal-dialog modal-dialog-centered modal-lg\">\n <div class=\"modal-content\">\n <div class=\"modal-header rpt-modal-header\">\n <h5 class=\"modal-title\">\n <i\n :class=\"reportForm.report_type === 'manual' ? 'bi bi-file-earmark-text me-2' : 'bi bi-shield-check me-2'\"></i>\n {{ reportForm.report_type === 'manual' ? 'New Manual Report' : 'Submit QHSE Report' }}\n </h5>\n <div class=\"modal-type-toggle\" v-if=\"!pendingContext\">\n <button :class=\"['type-toggle-btn', { active: reportForm.report_type === 'qhse' }]\"\n @click=\"reportForm.report_type = 'qhse'\">\n <i class=\"bi bi-shield-check me-1\"></i>QHSE\n </button>\n <button :class=\"['type-toggle-btn', { active: reportForm.report_type === 'manual' }]\"\n @click=\"reportForm.report_type = 'manual'\">\n <i class=\"bi bi-file-earmark-text me-1\"></i>Manual\n </button>\n </div>\n <button type=\"button\" class=\"btn-close btn-close-white\" @click=\"closeReportForm\"></button>\n </div>\n <div class=\"modal-body\">\n\n <!-- QHSE: entity link -->\n <div class=\"rpt-entity-box\" v-if=\"reportForm.report_type === 'qhse'\">\n <label class=\"form-label fw-semibold\"><i class=\"bi bi-link-45deg me-1\"></i>Link to Drill /\n Incident</label>\n <div class=\"prefilled-entity\" v-if=\"reportForm.entity_ref && reportForm.entity_type\">\n <span class=\"entity-chip\" :class=\"reportForm.entity_type\">\n {{ reportForm.entity_type === 'drill' ? 'DRILL' : 'INCIDENT' }}\n </span>\n <strong>{{ reportForm.entity_ref }}</strong>\n <span class=\"text-muted ms-2\">{{ reportForm.entity_label }}</span>\n <button class=\"btn btn-link btn-sm text-danger ms-auto\" @click=\"clearEntityLink\"><i\n class=\"bi bi-x-circle\"></i> Clear</button>\n </div>\n <div v-else>\n <select class=\"form-control\" v-model=\"reportForm.selectedMissing\"\n @change=\"applyMissingSelection\">\n <option value=\"\">— Select a missing report (optional) —</option>\n <optgroup label=\"Missing Drill Reports\">\n <option v-for=\"r in missingReports.filter(x => x.entity_type === 'drill')\"\n :key=\"r.entity_id\" :value=\"JSON.stringify(r)\">\n {{ r.entity_ref }} — {{ r.label }}\n </option>\n </optgroup>\n <optgroup label=\"Missing Incident Reports\">\n <option v-for=\"r in missingReports.filter(x => x.entity_type === 'incident')\"\n :key=\"r.entity_id\" :value=\"JSON.stringify(r)\">\n {{ r.entity_ref }} — {{ r.label }}\n </option>\n </optgroup>\n </select>\n <small class=\"text-muted\">Linking will mark the drill / incident as reported.</small>\n </div>\n </div>\n\n <!-- Manual: category + ref -->\n <div class=\"input-row\" v-if=\"reportForm.report_type === 'manual'\">\n <div class=\"form-group\">\n <label class=\"form-label fw-semibold\">Report Category</label>\n <select class=\"form-control\" v-model=\"reportForm.manual_category\">\n <option>General</option>\n <option>Maintenance</option>\n <option>Safety Observation</option>\n <option>Environmental</option>\n <option>Audit</option>\n <option>Training</option>\n <option>Other</option>\n </select>\n </div>\n <div class=\"form-group\">\n <label class=\"form-label fw-semibold\">Reference Number</label>\n <input type=\"text\" class=\"form-control\" v-model=\"reportForm.manual_ref\"\n placeholder=\"e.g. RPT-2025-001\" />\n </div>\n </div>\n\n <!-- Drill-specific hint -->\n <div class=\"crew-hint\" v-if=\"reportForm.entity_type === 'drill'\">\n <i class=\"bi bi-info-circle-fill me-1\"></i>\n <span>\n <strong>Crew list tip:</strong> Start your Findings with\n <code>CREW: Name (Rank), Name (Rank), …</code>\n to generate a named crew participation table in the PDF.\n Otherwise the PDF will show the total count ({{ reportForm.entity_participants || 0 }}\n members) with a note to attach the signed list.\n </span>\n </div>\n\n <!-- Drill checklist — only shown when linked to a drill -->\n <div class=\"drill-checklist-box\" v-if=\"reportForm.entity_type === 'drill'\">\n <div class=\"drill-checklist-title\">\n <i class=\"bi bi-clipboard2-check me-1\"></i>\n Comments Checklist\n <span class=\"checklist-hint\">Tick = YES · unticked = NO in the PDF</span>\n </div>\n <div class=\"checklist-grid\">\n <label v-for=\"(q, idx) in drillChecklistQuestions\" :key=\"idx\"\n :class=\"['checklist-item', { checked: reportForm.drillChecklist[idx] }]\">\n <div class=\"checklist-checkbox\">\n <input type=\"checkbox\" :checked=\"reportForm.drillChecklist[idx]\"\n @change=\"reportForm.drillChecklist[idx] = $event.target.checked\" />\n <span class=\"custom-check\">\n <i class=\"bi\"\n :class=\"reportForm.drillChecklist[idx] ? 'bi-check-lg' : 'bi-x-lg'\"></i>\n </span>\n </div>\n <span class=\"checklist-q\">{{ q }}</span>\n <span class=\"checklist-answer\"\n :class=\"reportForm.drillChecklist[idx] ? 'answer-yes' : 'answer-no'\">\n {{ reportForm.drillChecklist[idx] ? 'YES' : 'NO' }}\n </span>\n </label>\n </div>\n </div>\n\n <!-- Common fields -->\n <div class=\"input-row mt-3\">\n <div class=\"form-group\">\n <label class=\"form-label fw-semibold\">Report Title *</label>\n <input type=\"text\" class=\"form-control\" v-model=\"reportForm.title\"\n :placeholder=\"reportForm.entity_ref ? `Report — ${reportForm.entity_ref}` : 'Enter report title'\" />\n </div>\n <div class=\"form-group\">\n <label class=\"form-label fw-semibold\">Submitted By *</label>\n <input type=\"text\" class=\"form-control\" v-model=\"reportForm.submittedBy\"\n placeholder=\"Your name\" />\n </div>\n </div>\n <div class=\"input-row\">\n <div class=\"form-group\">\n <label class=\"form-label fw-semibold\">Date</label>\n <input type=\"date\" class=\"form-control\" v-model=\"reportForm.date\" />\n </div>\n </div>\n <div class=\"form-group\">\n <label class=\"form-label fw-semibold\">\n {{ reportForm.entity_type === 'incident' ? 'Description of Event (Findings) *' :\n 'Findings / Summary *' }}\n <span class=\"form-hint\" v-if=\"reportForm.entity_type === 'incident'\">Pre-filled from\n incident objective — edit as needed</span>\n </label>\n <textarea class=\"form-control\" rows=\"4\" v-model=\"reportForm.findings\" :placeholder=\"reportForm.entity_type === 'drill'\n ? 'CREW: John Smith (Master), Jane Doe (Chief Officer), …\\n\\nThen describe the drill scenario and findings…'\n : reportForm.entity_type === 'incident'\n ? 'Describe what happened, when, and where…'\n : 'Describe findings, observations, and outcomes…'\">\n </textarea>\n </div>\n\n <!-- Incident-specific structured fields -->\n <template v-if=\"reportForm.entity_type === 'incident'\">\n <div class=\"incident-fields-box\">\n <div class=\"incident-fields-title\">\n <i class=\"bi bi-layout-text-window-reverse me-1\"></i>\n Incident Report Fields\n <span class=\"checklist-hint\">These map directly to the PDF sections</span>\n </div>\n <div class=\"form-group\">\n <label class=\"form-label fw-semibold\">Possible Consequences</label>\n <div class=\"field-hint\">e.g. Personal injury, damage, collision, grounding, fire,\n pollution</div>\n <textarea class=\"form-control\" rows=\"2\" v-model=\"reportForm.inc_consequences\"\n placeholder=\"Describe possible consequences…\"></textarea>\n </div>\n <div class=\"form-group\">\n <label class=\"form-label fw-semibold\">Relevant Factors / Conditions Surrounding the\n Event</label>\n <div class=\"field-hint\">e.g. weather, lighting, fatigue, time pressure</div>\n <textarea class=\"form-control\" rows=\"2\" v-model=\"reportForm.inc_factors\"\n placeholder=\"Describe relevant factors and conditions…\"></textarea>\n </div>\n <div class=\"form-group\">\n <label class=\"form-label fw-semibold\">Immediate Action Taken</label>\n <textarea class=\"form-control\" rows=\"2\" v-model=\"reportForm.inc_immediate_action\"\n placeholder=\"What was done immediately after the event?\"></textarea>\n </div>\n <div class=\"input-row\" style=\"margin-bottom:0;\">\n <div class=\"form-group\">\n <label class=\"form-label fw-semibold\">Direct Cause</label>\n <div class=\"field-hint\">e.g. failure to follow procedures, defective equipment\n </div>\n <textarea class=\"form-control\" rows=\"3\" v-model=\"reportForm.inc_direct_cause\"\n placeholder=\"Direct cause of the event…\"></textarea>\n </div>\n <div class=\"form-group\">\n <label class=\"form-label fw-semibold\">Root Cause</label>\n <div class=\"field-hint\">e.g. lack of training, management factors</div>\n <textarea class=\"form-control\" rows=\"3\" v-model=\"reportForm.inc_root_cause\"\n placeholder=\"Root / underlying cause…\"></textarea>\n </div>\n </div>\n <div class=\"form-group\">\n <label class=\"form-label fw-semibold\">Action Taken to Avoid Re-occurrence</label>\n <textarea class=\"form-control\" rows=\"2\" v-model=\"reportForm.correctiveActions\"\n placeholder=\"Corrective actions and preventive measures…\"></textarea>\n </div>\n <div class=\"form-group\" style=\"margin-bottom:0;\">\n <label class=\"form-label fw-semibold\">Any Other Remarks</label>\n <textarea class=\"form-control\" rows=\"2\" v-model=\"reportForm.inc_remarks\"\n placeholder=\"Additional remarks…\"></textarea>\n </div>\n </div>\n </template>\n\n <!-- Non-incident: standard corrective actions -->\n <template v-else>\n <div class=\"form-group\">\n <label class=\"form-label fw-semibold\">Corrective Actions</label>\n <textarea class=\"form-control\" rows=\"3\" v-model=\"reportForm.correctiveActions\"\n placeholder=\"List any corrective actions required or taken…\"></textarea>\n </div>\n </template>\n\n <!-- Attachments -->\n <div class=\"form-group\">\n <label class=\"form-label fw-semibold\">\n Attach Files\n <span class=\"form-hint\">Images embed in PDF · all files go into the ZIP</span>\n </label>\n <div class=\"file-drop-zone\" @click=\"$refs.reportFileInput.click()\" @dragover.prevent\n @drop.prevent=\"handleReportFileDrop\">\n <i class=\"bi bi-cloud-upload\" style=\"font-size:2rem;color:#6c757d;\"></i>\n <p class=\"mb-0 mt-2 text-muted\">Click or drag files here (PNG, JPG, PDF…)</p>\n <div class=\"attached-files\" v-if=\"reportForm.files.length > 0\">\n <span class=\"attached-chip\" v-for=\"(f, i) in reportForm.files\" :key=\"i\">\n <i class=\"bi me-1\" :class=\"fileIcon(f.type)\"></i>{{ f.name }}\n <button @click.stop=\"removeReportFile(i)\"><i class=\"bi bi-x\"></i></button>\n </span>\n </div>\n </div>\n <input ref=\"reportFileInput\" type=\"file\" multiple style=\"display:none\"\n @change=\"handleReportFileAttach\" />\n </div>\n\n <!-- ZIP preview -->\n <div class=\"zip-hint\" v-if=\"reportForm.title || reportForm.files.length > 0\">\n <i class=\"bi bi-file-zip me-1\"></i>\n Download will produce <strong>{{ zipName }}.zip</strong>\n containing the report PDF\n <span v-if=\"reportForm.files.length\"> + {{ reportForm.files.length }} attachment{{\n reportForm.files.length !== 1 ?\n 's' : '' }}</span>\n </div>\n </div>\n <div class=\"modal-footer\">\n <button type=\"button\" class=\"btn btn-secondary\" @click=\"closeReportForm\">Cancel</button>\n <button type=\"button\" class=\"btn btn-success\" @click=\"requestSubmitReport\"\n :disabled=\"isSubmitting || !reportForm.title || !reportForm.submittedBy || !reportForm.findings\">\n <span v-if=\"isSubmitting\"><span class=\"spinner-sm\"></span> Submitting…</span>\n <span v-else><i class=\"bi bi-check-circle me-1\"></i>Submit Report</span>\n </button>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Report Viewer -->\n <div class=\"modal\" :class=\"{ 'show': showViewModal }\" @click.self=\"closeViewer\">\n <div class=\"modal-dialog modal-dialog-centered modal-lg\">\n <div class=\"modal-content\" v-if=\"viewingReport\">\n <div class=\"modal-header rpt-modal-header\">\n <div class=\"d-flex align-items-center gap-2\">\n <span class=\"entity-chip me-2\" :class=\"reportTypeClass(viewingReport)\">{{\n reportTypeLabel(viewingReport) }}</span>\n <strong style=\"color:#fff\">{{ viewingReport.title }}</strong>\n </div>\n <button type=\"button\" class=\"btn-close btn-close-white\" @click=\"closeViewer\"></button>\n </div>\n <div class=\"modal-body\">\n <div class=\"view-grid\">\n <div class=\"view-item\"><label>Reference</label><span class=\"ref-mono\">{{\n viewingReport.entityRef ||\n '—' }}</span></div>\n <div class=\"view-item\"><label>Type</label><span>{{ reportTypeLabel(viewingReport) }}</span>\n </div>\n <div class=\"view-item\" v-if=\"viewingReport.manualCategory\"><label>Category</label><span>{{\n viewingReport.manualCategory }}</span></div>\n <div class=\"view-item\"><label>Submitted By</label><span>{{ viewingReport.submittedBy\n }}</span></div>\n <div class=\"view-item\"><label>Date</label><span>{{ viewingReport.date }}</span></div>\n <div class=\"view-item\" v-if=\"viewingReport.vessel\"><label>Vessel / Location</label><span>{{\n viewingReport.vessel }}</span></div>\n <div class=\"view-item\"><label>Submitted At</label><span>{{\n formatDate(viewingReport.submittedAt)\n }}</span></div>\n <!-- Drill-specific meta -->\n <div class=\"view-item\" v-if=\"viewingReport.entity_subtype\"><label>Drill Type</label><span>{{\n viewingReport.entity_subtype }}</span></div>\n <div class=\"view-item\" v-if=\"viewingReport.entity_creator\"><label>Drill\n Master</label><span>{{\n viewingReport.entity_creator }}</span></div>\n <div class=\"view-item\" v-if=\"viewingReport.entity_duration\"><label>Duration</label><span>{{\n viewingReport.entity_duration }}</span></div>\n <div class=\"view-item\" v-if=\"viewingReport.entity_participants\">\n <label>Participants</label><span>{{\n viewingReport.entity_participants }}</span></div>\n </div>\n <div class=\"view-section\">\n <label>Findings / Summary</label>\n <div class=\"view-text\">{{ viewingReport.findings }}</div>\n </div>\n <div class=\"view-section\" v-if=\"viewingReport.correctiveActions\">\n <label>Corrective Actions</label>\n <div class=\"view-text\">{{ viewingReport.correctiveActions }}</div>\n </div>\n <div class=\"view-section\" v-if=\"getFilesForReport(viewingReport.id).length > 0\">\n <label>Attachments</label>\n <div class=\"attached-files mt-1\">\n <a v-for=\"f in getFilesForReport(viewingReport.id)\" :key=\"f.id\" :href=\"f.publicUrl\"\n target=\"_blank\" rel=\"noopener\" class=\"attached-chip attached-chip--link\">\n <i class=\"bi me-1\" :class=\"fileIcon(f.type)\"></i>{{ f.name }}\n <small class=\"text-muted ms-1\">({{ formatFileSize(f.size) }})</small>\n <i class=\"bi bi-box-arrow-up-right ms-1\" style=\"font-size:10px;\"></i>\n </a>\n </div>\n </div>\n </div>\n <div class=\"modal-footer\">\n <button class=\"btn btn-danger btn-sm me-auto\" @click=\"requestDeleteReport(viewingReport.id)\">\n <i class=\"bi bi-trash\"></i> Delete\n </button>\n <button class=\"btn btn-secondary\" @click=\"closeViewer\">Close</button>\n <button class=\"btn btn-primary\" @click=\"downloadReport(viewingReport)\"\n :disabled=\"generatingPdf === viewingReport.id\">\n <span v-if=\"generatingPdf === viewingReport.id\"><span class=\"spinner-sm\"></span> Building\n ZIP…</span>\n <span v-else><i class=\"bi bi-file-zip me-1\"></i>Download ZIP</span>\n </button>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Hidden file input for user folders -->\n <input ref=\"fileInput\" type=\"file\" multiple style=\"display:none;\" @change=\"handleFileSelection\" />\n </div>\n</template>\n\n<script>\nexport default {\n name: 'Reports',\n\n props: {\n reports: { type: Array, default: () => [] },\n reportFiles: { type: Array, default: () => [] },\n folders: { type: Array, default: () => [] },\n isLoading: { type: Boolean, default: false },\n isSubmitting: { type: Boolean, default: false },\n pendingContext: { type: Object, default: null },\n missingReports: { type: Array, default: () => [] },\n highlightRef: { type: String, default: null },\n },\n\n emits: [\n 'report-submit-requested',\n 'report-delete-requested',\n 'folder-create-requested',\n 'files-add-requested',\n 'file-remove-requested',\n 'folder-delete-requested',\n 'report-viewed',\n ],\n\n data() {\n return {\n activeTab: 'all',\n showNewFolderModal: false,\n newFolderName: '',\n selectedFolder: null,\n expandedFolders: [],\n\n showReportModal: false,\n showViewModal: false,\n viewingReport: null,\n highlightedRef: null,\n bannerDismissed: false,\n generatingPdf: null,\n\n drillChecklistQuestions: [\n 'Is the reaction of crew members satisfactory?',\n 'Is the equipment functioning properly?',\n 'Is the crew properly trained and ready?',\n 'Was debriefing conducted on completion of drill?',\n 'Is time log of various activities marked on checklist?',\n ],\n\n reportForm: this.emptyForm(),\n };\n },\n\n computed: {\n drillReports() { return this.reports.filter(r => r.entityType === 'drill'); },\n incidentReports() { return this.reports.filter(r => r.entityType === 'incident'); },\n manualReports() {\n return this.reports.filter(r =>\n r.entityType === 'manual' ||\n (!r.entityType && !r.entityRef?.startsWith('DRILL') && !r.entityRef?.startsWith('INC'))\n );\n },\n filteredReports() {\n switch (this.activeTab) {\n case 'drill': return this.drillReports;\n case 'incident': return this.incidentReports;\n case 'manual': return this.manualReports;\n default: return this.reports;\n }\n },\n zipName() {\n const ref = this.reportForm.entity_ref || this.reportForm.manual_ref || this.reportForm.title;\n return (ref || 'report').replace(/[^a-zA-Z0-9_-]/g, '_').slice(0, 50);\n },\n },\n\n watch: {\n pendingContext: {\n immediate: true,\n handler(ctx) {\n if (ctx) {\n this.reportForm.entity_type = ctx.entity_type;\n this.reportForm.entity_id = ctx.entity_id;\n this.reportForm.entity_ref = ctx.entity_ref;\n this.reportForm.entity_label = ctx.title;\n this.reportForm.title = ctx.title || `Report — ${ctx.entity_ref}`;\n this.reportForm.report_type = 'qhse';\n this.reportForm.entity_creator = ctx.entity_creator;\n this.reportForm.entity_objectives = ctx.entity_objectives;\n this.reportForm.entity_subtype = ctx.entity_subtype;\n this.reportForm.entity_duration = ctx.entity_duration;\n this.reportForm.entity_participants = ctx.entity_participants;\n // Pre-fill findings with the entity objective for incidents\n if (ctx.entity_type === 'incident' && ctx.entity_objectives) {\n this.reportForm.findings = ctx.entity_objectives;\n }\n }\n },\n },\n highlightRef: {\n immediate: true,\n handler(ref) {\n if (ref) {\n this.highlightedRef = ref;\n this.$nextTick(() => this.scrollToReport(ref));\n }\n },\n },\n isSubmitting(val, prev) {\n if (prev === true && val === false) {\n this.showReportModal = false;\n this.resetForm();\n }\n },\n },\n\n methods: {\n\n // ─── Helpers ────────────────────────────────────────────────────────────\n\n emptyForm() {\n return {\n report_type: 'qhse', manual_category: 'General', manual_ref: '',\n title: '', submittedBy: '', vessel: '', folderId: '',\n date: new Date().toISOString().split('T')[0],\n findings: '', correctiveActions: '', files: [],\n entity_type: '', entity_id: '', entity_ref: '', entity_label: '',\n entity_creator: '', entity_objectives: '', entity_subtype: '',\n entity_duration: '', entity_participants: null,\n selectedMissing: '',\n drillChecklist: [true, true, true, true, true],\n // incident-specific structured fields\n inc_consequences: '',\n inc_factors: '',\n inc_immediate_action: '',\n inc_direct_cause: '',\n inc_root_cause: '',\n inc_remarks: '',\n };\n },\n\n getFilesForReport(reportId) {\n return this.reportFiles.filter(f => f.report_id === reportId || f.reportId === reportId);\n },\n\n safeRef(report) {\n return (report.entityRef || report.title || 'report').replace(/[^a-zA-Z0-9_-]/g, '_').slice(0, 60);\n },\n\n reportTypeClass(report) {\n const t = report?.entityType || report?.entity_type;\n if (t === 'drill') return 'drill';\n if (t === 'incident') return 'incident';\n return 'manual';\n },\n\n reportTypeLabel(report) {\n const t = report?.entityType || report?.entity_type;\n if (t === 'drill') return 'DRILL';\n if (t === 'incident') return 'INCIDENT';\n const cat = report?.manualCategory || report?.manual_category;\n return cat ? cat.toUpperCase() : 'MANUAL';\n },\n\n fileIcon(type) {\n if (!type) return 'bi-file-earmark';\n if (type.startsWith('image/')) return 'bi-file-earmark-image';\n if (type === 'application/pdf') return 'bi-file-earmark-pdf-fill';\n if (type.includes('word')) return 'bi-file-earmark-word';\n if (type.includes('sheet') || type.includes('excel')) return 'bi-file-earmark-excel';\n return 'bi-file-earmark';\n },\n\n ffiIconClass(file) {\n const t = file?.type || '';\n if (t.startsWith('image/')) return 'ffi-icon--img';\n if (t === 'application/pdf') return 'ffi-icon--pdf';\n return 'ffi-icon--generic';\n },\n\n // ─── Banner ─────────────────────────────────────────────────────────────\n dismissBanner() { this.bannerDismissed = true; },\n\n // ─── Report form ─────────────────────────────────────────────────────────\n\n openReportForm(type = 'qhse') {\n this.reportForm = this.emptyForm();\n this.reportForm.report_type = type;\n if (type === 'qhse' && this.pendingContext) {\n this.reportForm.entity_creator = this.pendingContext.entity_creator;\n this.reportForm.entity_objectives = this.pendingContext.entity_objectives;\n this.reportForm.entity_subtype = this.pendingContext.entity_subtype;\n this.reportForm.entity_duration = this.pendingContext.entity_duration;\n this.reportForm.entity_participants = this.pendingContext.entity_participants;\n this.reportForm.entity_type = this.pendingContext.entity_type;\n this.reportForm.entity_id = this.pendingContext.entity_id;\n this.reportForm.entity_ref = this.pendingContext.entity_ref;\n this.reportForm.entity_label = this.pendingContext.title;\n this.reportForm.title = this.pendingContext.title || `Report — ${this.pendingContext.entity_ref}`;\n if (this.pendingContext.entity_type === 'incident' && this.pendingContext.entity_objectives) {\n this.reportForm.findings = this.pendingContext.entity_objectives;\n }\n }\n this.showReportModal = true;\n },\n\n closeReportForm() { this.showReportModal = false; },\n\n clearEntityLink() {\n Object.assign(this.reportForm, {\n entity_type: '', entity_id: '', entity_ref: '', entity_label: '',\n entity_creator: '', entity_objectives: '', entity_subtype: '',\n entity_duration: '', entity_participants: null, selectedMissing: '',\n });\n },\n\n applyMissingSelection() {\n if (!this.reportForm.selectedMissing) return;\n const r = JSON.parse(this.reportForm.selectedMissing);\n this.reportForm.entity_type = r.entity_type;\n this.reportForm.entity_id = r.entity_id;\n this.reportForm.entity_ref = r.entity_ref;\n this.reportForm.entity_label = r.label;\n this.reportForm.entity_creator = r.entity_creator || '';\n this.reportForm.entity_objectives = r.entity_objectives || '';\n this.reportForm.entity_subtype = r.entity_subtype || '';\n this.reportForm.entity_duration = r.entity_duration || '';\n this.reportForm.entity_participants = r.entity_participants || null;\n if (!this.reportForm.title) this.reportForm.title = `Report — ${r.entity_ref}`;\n if (r.entity_type === 'incident' && r.entity_objectives && !this.reportForm.findings) {\n this.reportForm.findings = r.entity_objectives;\n }\n },\n\n requestSubmitReport() {\n if (!this.reportForm.title || !this.reportForm.submittedBy || !this.reportForm.findings) return;\n this.$emit('report-submit-requested', {\n entity_type: this.reportForm.report_type === 'manual' ? 'manual' : this.reportForm.entity_type,\n entity_id: this.reportForm.entity_id || null,\n entity_ref: this.reportForm.report_type === 'manual'\n ? (this.reportForm.manual_ref || null)\n : this.reportForm.entity_ref,\n title: this.reportForm.title,\n submittedBy: this.reportForm.submittedBy,\n vessel: this.reportForm.vessel || null,\n date: this.reportForm.date,\n findings: this.reportForm.findings,\n correctiveActions: this.reportForm.correctiveActions || null,\n folderId: null,\n folderName: null,\n manual_category: this.reportForm.report_type === 'manual' ? this.reportForm.manual_category : null,\n files: this.reportForm.files,\n // drill / incident enrichment fields\n entity_subtype: this.reportForm.entity_subtype || null,\n entity_creator: this.reportForm.entity_creator || null,\n entity_objectives: this.reportForm.entity_objectives || null,\n entity_duration: this.reportForm.entity_duration || null,\n entity_participants: this.reportForm.entity_participants || null,\n drill_checklist: [...this.reportForm.drillChecklist],\n // incident structured fields\n inc_consequences: this.reportForm.inc_consequences || null,\n inc_factors: this.reportForm.inc_factors || null,\n inc_immediate_action: this.reportForm.inc_immediate_action || null,\n inc_direct_cause: this.reportForm.inc_direct_cause || null,\n inc_root_cause: this.reportForm.inc_root_cause || null,\n inc_remarks: this.reportForm.inc_remarks || null,\n });\n },\n\n resetForm() { this.reportForm = this.emptyForm(); },\n\n highlightReport(entityRef) {\n this.highlightedRef = entityRef;\n this.$nextTick(() => this.scrollToReport(entityRef));\n setTimeout(() => { this.highlightedRef = null; }, 3000);\n },\n\n // ─── View ────────────────────────────────────────────────────────────────\n\n viewReport(report) {\n this.viewingReport = report;\n this.showViewModal = true;\n this.$emit('report-viewed', report);\n },\n\n closeViewer() {\n this.showViewModal = false;\n this.viewingReport = null;\n },\n\n // Closes the modal immediately, then emits so ReportsView can confirm + delete\n requestDeleteReport(reportId) {\n this.closeViewer();\n this.$emit('report-delete-requested', reportId);\n },\n\n scrollToReport(ref) {\n this.$nextTick(() => {\n const el = this.$refs['report-' + ref];\n if (el) (Array.isArray(el) ? el[0] : el)?.scrollIntoView({ behavior: 'smooth', block: 'center' });\n });\n },\n\n jumpToFolder(report) {\n this.activeTab = 'folders';\n const key = 'auto-' + report.id;\n if (!this.expandedFolders.includes(key)) this.expandedFolders.push(key);\n this.$nextTick(() => {\n const ref = report.entityRef || report.id;\n const el = this.$refs['folder-' + ref];\n if (el) (Array.isArray(el) ? el[0] : el)?.scrollIntoView({ behavior: 'smooth', block: 'center' });\n });\n },\n\n // ─── Download ────────────────────────────────────────────────────────────\n\n async downloadReport(report) {\n this.generatingPdf = report.id;\n try {\n await this._loadLibraries();\n const attachments = this.getFilesForReport(report.id);\n const imageFiles = attachments.filter(f => f.type?.startsWith('image/'));\n const reportPdfBytes = await this._buildReportPdf(report, imageFiles);\n await this._buildAndDownloadZip(report, reportPdfBytes, attachments);\n } catch (err) {\n console.error('ZIP generation failed:', err);\n alert('Failed to generate download: ' + err.message);\n } finally {\n this.generatingPdf = null;\n }\n },\n\n async downloadReportPdfOnly(report) {\n this.generatingPdf = report.id + '-pdf';\n try {\n await this._loadLibraries();\n const imageFiles = this.getFilesForReport(report.id).filter(f => f.type?.startsWith('image/'));\n const reportPdfBytes = await this._buildReportPdf(report, imageFiles);\n const blob = new Blob([reportPdfBytes], { type: 'application/pdf' });\n this._triggerDownload(blob, `${this.safeRef(report)}_report.pdf`);\n } catch (err) {\n alert('Failed to generate PDF: ' + err.message);\n } finally {\n this.generatingPdf = null;\n }\n },\n\n async _loadLibraries() {\n if (!window.jspdf) await this._loadScript('https://cdnjs.cloudflare.com/ajax/libs/jspdf/2.5.1/jspdf.umd.min.js');\n if (!window.JSZip) await this._loadScript('https://cdnjs.cloudflare.com/ajax/libs/jszip/3.10.1/jszip.min.js');\n },\n\n _loadScript(src) {\n return new Promise((resolve, reject) => {\n if (document.querySelector(`script[src=\"${src}\"]`)) { resolve(); return; }\n const s = document.createElement('script');\n s.src = src; s.onload = resolve; s.onerror = reject;\n document.head.appendChild(s);\n });\n },\n\n // ─── PDF router ──────────────────────────────────────────────────────────\n\n async _buildReportPdf(report, imageFiles = []) {\n const type = report.entityType || report.entity_type;\n if (type === 'drill') return this._buildDrillPdf(report, imageFiles);\n if (type === 'incident') return this._buildIncidentPdf(report, imageFiles);\n return this._buildManualPdf(report, imageFiles);\n },\n\n // ─── DRILL PDF ───────────────────────────────────────────────────────────\n\n async _buildDrillPdf(report, imageFiles = []) {\n const { jsPDF } = window.jspdf;\n const doc = new jsPDF({ orientation: 'portrait', unit: 'mm', format: 'a4' });\n const pageW = 210, margin = 15, contentW = pageW - margin * 2;\n let y = 0;\n\n const checkPage = (needed = 10) => {\n if (y + needed > 275) { doc.addPage(); y = 20; }\n };\n\n const sectionHeading = (text) => {\n checkPage(12);\n doc.setFillColor(26, 54, 107);\n doc.rect(margin, y, contentW, 7, 'F');\n doc.setTextColor(255, 255, 255);\n doc.setFontSize(8.5);\n doc.setFont('helvetica', 'bold');\n doc.text(text.toUpperCase(), margin + 3, y + 5);\n y += 10;\n doc.setTextColor(30, 30, 30);\n };\n\n const fieldRow = (label, value, labelWidth = 68) => {\n checkPage(7);\n doc.setFontSize(9);\n doc.setFont('helvetica', 'bold');\n doc.setTextColor(80, 90, 110);\n doc.text(label, margin + 2, y);\n doc.setFont('helvetica', 'normal');\n doc.setTextColor(20, 20, 20);\n doc.text(':', margin + labelWidth - 6, y);\n const valLines = doc.splitTextToSize(String(value || '—'), contentW - labelWidth - 4);\n doc.text(valLines, margin + labelWidth, y);\n y += Math.max(valLines.length * 5, 5) + 2;\n };\n\n // ── Header band ──────────────────────────────────────────────────────\n doc.setFillColor(26, 54, 107);\n doc.rect(0, 0, pageW, 24, 'F');\n doc.setDrawColor(255, 200, 50);\n doc.setLineWidth(1.2);\n doc.line(margin, 23.4, pageW - margin, 23.4);\n doc.setTextColor(255, 255, 255);\n doc.setFontSize(14);\n doc.setFont('helvetica', 'bold');\n doc.text('EMERGENCY DRILL REPORT', pageW / 2, 10, { align: 'center' });\n doc.setFontSize(8);\n doc.setFont('helvetica', 'normal');\n doc.setTextColor(200, 215, 240);\n doc.text('Quality, Health, Safety & Environment Management System', pageW / 2, 17, { align: 'center' });\n y = 30;\n\n // Ref badge\n if (report.entityRef) {\n doc.setFillColor(240, 245, 255);\n doc.roundedRect(pageW - margin - 44, 26, 44, 8, 2, 2, 'F');\n doc.setTextColor(26, 54, 107);\n doc.setFontSize(8);\n doc.setFont('helvetica', 'bold');\n doc.text(report.entityRef, pageW - margin - 2, 31, { align: 'right' });\n doc.setTextColor(30, 30, 30);\n }\n\n // ── Vessel / Drill kind grid ──────────────────────────────────────────\n doc.setDrawColor(180, 190, 210);\n doc.setLineWidth(0.4);\n doc.rect(margin, y, contentW, 28, 'S');\n doc.line(margin + contentW / 2, y, margin + contentW / 2, y + 28);\n doc.line(margin, y + 14, margin + contentW / 2, y + 14);\n\n // Vessel name\n doc.setFontSize(8); doc.setFont('helvetica', 'bold'); doc.setTextColor(80, 90, 110);\n doc.text('VESSEL:', margin + 3, y + 6);\n doc.setFont('helvetica', 'bold'); doc.setTextColor(20, 20, 20); doc.setFontSize(10);\n doc.text(String(report.vessel || '—').toUpperCase(), margin + 22, y + 6);\n\n // Date / place\n doc.setFontSize(8); doc.setFont('helvetica', 'bold'); doc.setTextColor(80, 90, 110);\n doc.text('DATE / PLACE:', margin + 3, y + 20);\n doc.setFont('helvetica', 'normal'); doc.setTextColor(20, 20, 20);\n doc.text(`${report.date || '—'} / ${report.vessel || '—'}`, margin + 33, y + 20);\n\n // Kind of drill\n const hx = margin + contentW / 2 + 3;\n doc.setFontSize(8); doc.setFont('helvetica', 'bold'); doc.setTextColor(80, 90, 110);\n doc.text('KIND OF DRILL:', hx, y + 6);\n doc.setFontSize(11); doc.setFont('helvetica', 'bold'); doc.setTextColor(26, 54, 107);\n doc.text(String(report.entity_subtype || '—').toUpperCase(), hx, y + 16);\n doc.setFontSize(7.5); doc.setFont('helvetica', 'italic'); doc.setTextColor(120, 120, 120);\n doc.text('RELEVANT IMAGES/NOTES ARE ATTACHED', hx, y + 23);\n\n y += 32;\n\n // ── Drill details ─────────────────────────────────────────────────────\n sectionHeading('Drill Details');\n fieldRow('Drill Master / Conducted By', report.entity_creator);\n fieldRow('Duration', report.entity_duration);\n fieldRow('Objectives', report.entity_objectives);\n fieldRow('Submitted By', report.submittedBy);\n fieldRow('Submitted At', this.formatDate(report.submittedAt));\n y += 2;\n\n // ── Crew participation table ──────────────────────────────────────────\n const participantCount = report.entity_participants || 0;\n sectionHeading(`Crew Participation — ${participantCount} member${participantCount !== 1 ? 's' : ''} participated`);\n\n // Parse crew from findings if prefixed with CREW:\n const crewLines = (() => {\n const raw = (report.findings || '').trim();\n if (/^CREW:/i.test(raw)) {\n // Everything up to first blank line after CREW: is the crew list\n const crewSection = raw.replace(/^CREW:\\s*/i, '').split(/\\n\\n/)[0];\n return crewSection.split(/[\\n,]+/).map(s => s.trim()).filter(Boolean);\n }\n // Fallback: show drill master + submitter\n const list = [];\n if (report.entity_creator) list.push(`${report.entity_creator} (Drill Master)`);\n if (report.submittedBy && report.submittedBy !== report.entity_creator)\n list.push(`${report.submittedBy} (Reporter)`);\n return list;\n })();\n\n // Table header\n checkPage(14);\n const colNr = margin, wNr = 12;\n const colName = margin + wNr, wName = contentW - wNr;\n\n doc.setFillColor(235, 240, 250);\n doc.rect(colNr, y, contentW, 7, 'F');\n doc.setFontSize(8); doc.setFont('helvetica', 'bold'); doc.setTextColor(26, 54, 107);\n doc.text('NO.', colNr + 2, y + 5);\n doc.text('NAME / RANK', colName + 2, y + 5);\n y += 8;\n\n if (crewLines.length > 0) {\n crewLines.forEach((name, idx) => {\n checkPage(7);\n if (idx % 2 === 0) {\n doc.setFillColor(249, 250, 252);\n doc.rect(colNr, y - 1, contentW, 7, 'F');\n }\n doc.setFontSize(8.5); doc.setFont('helvetica', 'normal'); doc.setTextColor(30, 30, 30);\n doc.text(String(idx + 1), colNr + 2, y + 4);\n doc.text(doc.splitTextToSize(name, wName - 4)[0], colName + 2, y + 4);\n y += 7;\n });\n } else {\n checkPage(8);\n doc.setFontSize(8.5); doc.setFont('helvetica', 'italic'); doc.setTextColor(150, 150, 150);\n doc.text(\n `${participantCount} crew members participated — attach signed crew list with participants' signatures`,\n colName + 2, y + 4\n );\n y += 8;\n }\n y += 4;\n\n // ── Comments checklist — driven by report.drill_checklist ─────────────\n sectionHeading('Comments');\n const checkQuestions = [\n 'Is the reaction of crew members satisfactory?',\n 'Is the equipment functioning properly?',\n 'Is the crew properly trained and ready?',\n 'Was debriefing conducted on completion of drill?',\n 'Is time log of various activities marked on checklist?',\n ];\n // Parse stored answers (array of booleans). Fall back to all-true if absent.\n const checkAnswers = (() => {\n const raw = report.drill_checklist || report.drillChecklist;\n if (Array.isArray(raw)) return raw;\n try { return JSON.parse(raw); } catch { return [true, true, true, true, true]; }\n })();\n checkQuestions.forEach((q, idx) => {\n checkPage(9);\n const yes = checkAnswers[idx] !== false; // undefined → true\n doc.setFontSize(8.5); doc.setFont('helvetica', 'normal'); doc.setTextColor(30, 30, 30);\n doc.text(`${idx + 1}. ${q}`, margin + 3, y + 5);\n if (yes) {\n doc.setFillColor(212, 237, 218);\n doc.roundedRect(pageW - margin - 18, y + 1, 18, 6, 2, 2, 'F');\n doc.setTextColor(21, 87, 36); doc.setFont('helvetica', 'bold'); doc.setFontSize(7.5);\n doc.text('YES', pageW - margin - 9, y + 5.5, { align: 'center' });\n } else {\n doc.setFillColor(248, 215, 218);\n doc.roundedRect(pageW - margin - 18, y + 1, 18, 6, 2, 2, 'F');\n doc.setTextColor(114, 28, 36); doc.setFont('helvetica', 'bold'); doc.setFontSize(7.5);\n doc.text('NO', pageW - margin - 9, y + 5.5, { align: 'center' });\n }\n y += 9;\n });\n y += 3;\n\n // ── Drill scenario / findings ─────────────────────────────────────────\n // Strip the CREW: block from findings before printing\n const scenarioText = (() => {\n const raw = (report.findings || '').trim();\n if (/^CREW:/i.test(raw)) {\n // Remove everything up to the first blank line\n const parts = raw.split(/\\n\\n+/);\n return parts.slice(1).join('\\n\\n').trim();\n }\n return raw;\n })();\n\n if (scenarioText) {\n sectionHeading('Drill Scenario & Findings');\n checkPage(10);\n doc.setFontSize(9); doc.setFont('helvetica', 'normal'); doc.setTextColor(30, 30, 30);\n const lines = doc.splitTextToSize(scenarioText, contentW - 6);\n lines.forEach(line => {\n checkPage(6);\n doc.text(line, margin + 3, y);\n y += 5.5;\n });\n y += 4;\n }\n\n // ── Suggestions / corrective actions ─────────────────────────────────\n if (report.correctiveActions) {\n sectionHeading('Suggestions for Improvement & Corrective Actions');\n checkPage(10);\n doc.setFontSize(9); doc.setFont('helvetica', 'normal'); doc.setTextColor(30, 30, 30);\n const lines = doc.splitTextToSize(report.correctiveActions, contentW - 6);\n lines.forEach(line => {\n checkPage(6);\n doc.text(line, margin + 3, y);\n y += 5.5;\n });\n y += 4;\n }\n\n // ── Remarks box ───────────────────────────────────────────────────────\n checkPage(22);\n sectionHeading('Remarks');\n doc.setDrawColor(180, 190, 210); doc.setLineWidth(0.3);\n doc.rect(margin, y, contentW, 16, 'S');\n doc.setFontSize(8.5); doc.setFont('helvetica', 'italic'); doc.setTextColor(140, 140, 140);\n doc.text('Drill carried out satisfactorily.', margin + 3, y + 8);\n y += 20;\n\n // ── Embedded images ───────────────────────────────────────────────────\n for (const imgFile of imageFiles) {\n try {\n let dataUrl;\n if (imgFile.file instanceof File) dataUrl = await this._fileToDataUrl(imgFile.file);\n else if (imgFile.publicUrl) dataUrl = await this._fetchImageAsDataUrl(imgFile.publicUrl);\n if (!dataUrl) continue;\n checkPage(30);\n sectionHeading('Attachment: ' + imgFile.name);\n const props = doc.getImageProperties(dataUrl);\n const ratio = Math.min(contentW / props.width, 80 / props.height);\n const iw = props.width * ratio, ih = props.height * ratio;\n checkPage(ih + 5);\n doc.addImage(dataUrl, imgFile.type?.split('/')[1]?.toUpperCase() || 'JPEG', margin, y, iw, ih);\n y += ih + 8;\n } catch (e) { console.warn('Could not embed image', imgFile.name, e); }\n }\n\n // ── Signature block ───────────────────────────────────────────────────\n \n\n // ── Footer ────────────────────────────────────────────────────────────\n const totalPages = doc.getNumberOfPages();\n for (let p = 1; p <= totalPages; p++) {\n doc.setPage(p);\n doc.setFillColor(26, 54, 107);\n doc.rect(0, 287, pageW, 10, 'F');\n doc.setTextColor(180, 200, 240); doc.setFontSize(7.5); doc.setFont('helvetica', 'normal');\n doc.text(`Emergency Drill Report · Generated ${new Date().toLocaleDateString('en-GB')} · Page ${p} of ${totalPages}`, margin, 293);\n if (report.entityRef) doc.text(report.entityRef, pageW - margin, 293, { align: 'right' });\n }\n\n return doc.output('arraybuffer');\n },\n\n // ─── INCIDENT PDF ────────────────────────────────────────────────────────\n\n async _buildIncidentPdf(report, imageFiles = []) {\n const { jsPDF } = window.jspdf;\n const doc = new jsPDF({ orientation: 'portrait', unit: 'mm', format: 'a4' });\n const pageW = 210, margin = 15, contentW = pageW - margin * 2;\n let y = 0;\n\n const checkPage = (needed = 10) => {\n if (y + needed > 275) { doc.addPage(); y = 20; }\n };\n\n /**\n * Bordered labelled box — mirrors the Near Miss Report form style.\n * label — small-caps field label shown inside the top of the box\n * text — content (may be null/empty — leaves a blank writable area)\n * minHeight — minimum box height in mm\n */\n const labelledBox = (label, text, minHeight = 18) => {\n const bodyText = text ? doc.splitTextToSize(String(text), contentW - 6) : [];\n const textH = bodyText.length * 5.5;\n const boxH = Math.max(minHeight, textH + 14);\n checkPage(boxH + 4);\n\n doc.setDrawColor(140, 150, 165);\n doc.setLineWidth(0.35);\n doc.rect(margin, y, contentW, boxH, 'S');\n\n // Label\n doc.setFontSize(7.5); doc.setFont('helvetica', 'bold'); doc.setTextColor(70, 80, 100);\n const labelLines = doc.splitTextToSize(label.toUpperCase(), contentW - 6);\n labelLines.forEach((ll, i) => doc.text(ll, margin + 3, y + 5 + i * 4));\n const labelH = labelLines.length * 4 + 2;\n\n // Thin rule under label\n doc.setDrawColor(200, 208, 220); doc.setLineWidth(0.2);\n doc.line(margin + 1, y + labelH + 2, margin + contentW - 1, y + labelH + 2);\n\n if (bodyText.length > 0) {\n doc.setFontSize(9.5); doc.setFont('helvetica', 'normal'); doc.setTextColor(20, 20, 20);\n let ty = y + labelH + 7;\n bodyText.forEach(line => { doc.text(line, margin + 3, ty); ty += 5.5; });\n }\n\n y += boxH + 3;\n };\n\n // ── Header ────────────────────────────────────────────────────────────\n doc.setFillColor(26, 54, 107);\n doc.rect(0, 0, pageW, 16, 'F');\n doc.setTextColor(255, 255, 255);\n doc.setFontSize(12); doc.setFont('helvetica', 'bold');\n const incLabel = (report.entity_subtype || report.entityType || 'INCIDENT').toUpperCase() + ' REPORT';\n doc.text(incLabel, margin, 10);\n doc.setFontSize(7.5); doc.setFont('helvetica', 'normal'); doc.setTextColor(200, 215, 240);\n doc.text(`Ref: ${report.entityRef || '—'}`, pageW - margin, 8, { align: 'right' });\n doc.text(`Date: ${report.date || '—'}`, pageW - margin, 13, { align: 'right' });\n y = 20;\n\n // Form number + submitted by row\n doc.setFontSize(8); doc.setFont('helvetica', 'bold'); doc.setTextColor(80, 90, 110);\n doc.text('FORM NUMBER:', margin, y + 4);\n doc.setFont('helvetica', 'normal'); doc.setTextColor(20, 20, 20);\n doc.text(report.entityRef || '—', margin + 30, y + 4);\n doc.setFont('helvetica', 'bold'); doc.setTextColor(80, 90, 110);\n doc.text('SUBMITTED BY:', pageW / 2, y + 4);\n doc.setFont('helvetica', 'normal'); doc.setTextColor(20, 20, 20);\n doc.text(report.submittedBy || '—', pageW / 2 + 28, y + 4);\n y += 10;\n\n // ── 2-col meta: vessel | severity/type ───────────────────────────────\n const halfW = (contentW - 2) / 2;\n doc.setDrawColor(140, 150, 165); doc.setLineWidth(0.35);\n doc.rect(margin, y, halfW, 14, 'S');\n doc.rect(margin + halfW + 2, y, halfW, 14, 'S');\n\n doc.setFontSize(7.5); doc.setFont('helvetica', 'bold'); doc.setTextColor(80, 90, 110);\n doc.text('VESSEL NAME', margin + 3, y + 5);\n doc.text('SEVERITY / TYPE', margin + halfW + 5, y + 5);\n doc.setFontSize(10); doc.setFont('helvetica', 'bold'); doc.setTextColor(20, 20, 20);\n doc.text(String(report.vessel || '—'), margin + 3, y + 12);\n doc.text(\n `${report.entity_subtype || '—'} · ${report.severity || report.entity_subtype || '—'}`,\n margin + halfW + 5, y + 12\n );\n y += 18;\n\n // Management office + date\n doc.setDrawColor(140, 150, 165); doc.setLineWidth(0.35);\n doc.rect(margin, y, halfW, 10, 'S');\n doc.rect(margin + halfW + 2, y, halfW, 10, 'S');\n doc.setFontSize(7.5); doc.setFont('helvetica', 'bold'); doc.setTextColor(80, 90, 110);\n doc.text('MANAGEMENT OFFICE', margin + 3, y + 4);\n doc.text('DATE', margin + halfW + 5, y + 4);\n doc.setFontSize(9); doc.setFont('helvetica', 'normal'); doc.setTextColor(20, 20, 20);\n doc.text('—', margin + 3, y + 9);\n doc.text(report.date || '—', margin + halfW + 5, y + 9);\n y += 14;\n\n // ── Labelled content boxes ────────────────────────────────────────────\n\n labelledBox('Description of Event', report.findings, 24);\n\n labelledBox(\n 'Possible Consequences\\n(e.g. Personal injury, damage, collision, grounding, fire, pollution etc.)',\n report.inc_consequences || null,\n 18\n );\n\n labelledBox(\n 'Relevant Factors / Conditions Surrounding the Event\\n(e.g. weather, lighting etc.)',\n report.inc_factors || null,\n 18\n );\n\n labelledBox('Immediate Action Taken', report.inc_immediate_action || null, 16);\n\n labelledBox(\n 'Direct Cause\\n(e.g. failure to follow procedures, inadequate or defective equipment etc.)',\n report.inc_direct_cause || null,\n 18\n );\n\n labelledBox(\n 'Root Cause\\n(e.g. lack of training, personal factors, job factors, control management factors, instructions not clear etc.)',\n report.inc_root_cause || null,\n 18\n );\n\n labelledBox('Action Taken on Board to Avoid Re-occurrence', report.correctiveActions || null, 18);\n\n labelledBox('Any Other Remarks', report.inc_remarks || null, 16);\n\n // ── Embedded images ───────────────────────────────────────────────────\n for (const imgFile of imageFiles) {\n try {\n let dataUrl;\n if (imgFile.file instanceof File) dataUrl = await this._fileToDataUrl(imgFile.file);\n else if (imgFile.publicUrl) dataUrl = await this._fetchImageAsDataUrl(imgFile.publicUrl);\n if (!dataUrl) continue;\n checkPage(30);\n doc.setFillColor(235, 240, 250);\n doc.rect(margin, y, contentW, 7, 'F');\n doc.setFontSize(8); doc.setFont('helvetica', 'bold'); doc.setTextColor(26, 54, 107);\n doc.text('ATTACHMENT: ' + imgFile.name, margin + 3, y + 5);\n y += 10;\n const props = doc.getImageProperties(dataUrl);\n const ratio = Math.min(contentW / props.width, 80 / props.height);\n const iw = props.width * ratio, ih = props.height * ratio;\n checkPage(ih + 5);\n doc.addImage(dataUrl, imgFile.type?.split('/')[1]?.toUpperCase() || 'JPEG', margin, y, iw, ih);\n y += ih + 8;\n } catch (e) { console.warn('Could not embed image', imgFile.name, e); }\n }\n\n // ── Closed-out note ───────────────────────────────────────────────────\n checkPage(14);\n y += 4;\n doc.setFontSize(8.5); doc.setFont('helvetica', 'italic'); doc.setTextColor(100, 110, 130);\n doc.text('Closed out on board / Office support required (delete as applicable)', margin, y);\n y += 8;\n\n // ── Footer ────────────────────────────────────────────────────────────\n const totalPages = doc.getNumberOfPages();\n for (let p = 1; p <= totalPages; p++) {\n doc.setPage(p);\n doc.setFillColor(26, 54, 107);\n doc.rect(0, 287, pageW, 10, 'F');\n doc.setTextColor(180, 200, 240); doc.setFontSize(7.5); doc.setFont('helvetica', 'normal');\n doc.text(`Incident Report · Generated ${new Date().toLocaleDateString('en-GB')} · Page ${p} of ${totalPages}`, margin, 293);\n if (report.entityRef) doc.text(report.entityRef, pageW - margin, 293, { align: 'right' });\n }\n\n return doc.output('arraybuffer');\n },\n\n // ─── MANUAL PDF ──────────────────────────────────────────────────────────\n\n async _buildManualPdf(report, imageFiles = []) {\n const { jsPDF } = window.jspdf;\n const doc = new jsPDF({ orientation: 'portrait', unit: 'mm', format: 'a4' });\n const margin = 18, pageW = 210, contentW = pageW - margin * 2;\n let y = 0;\n\n doc.setFillColor(30, 60, 114);\n doc.rect(0, 0, pageW, 28, 'F');\n doc.setTextColor(255, 255, 255);\n doc.setFontSize(16); doc.setFont('helvetica', 'bold');\n doc.text('QHSE REPORT', margin, 11);\n doc.setFontSize(9); doc.setFont('helvetica', 'normal');\n doc.text(this.reportTypeLabel(report), margin, 18);\n if (report.entityRef) {\n doc.setFontSize(10); doc.setFont('helvetica', 'bold');\n doc.text(report.entityRef, pageW - margin, 18, { align: 'right' });\n }\n y = 36;\n\n doc.setTextColor(30, 60, 114); doc.setFontSize(13); doc.setFont('helvetica', 'bold');\n const titleLines = doc.splitTextToSize(report.title, contentW);\n doc.text(titleLines, margin, y);\n y += titleLines.length * 6 + 4;\n\n doc.setDrawColor(200, 210, 230); doc.line(margin, y, pageW - margin, y); y += 6;\n\n const meta = [\n ['Submitted By', report.submittedBy || '—'],\n ['Date', report.date || '—'],\n ['Vessel / Location', report.vessel || '—'],\n ['Submitted At', this.formatDate(report.submittedAt)],\n ];\n if (report.manualCategory) meta.splice(2, 0, ['Category', report.manualCategory]);\n\n const colW = contentW / 2;\n meta.forEach((item, idx) => {\n const col = idx % 2, row = Math.floor(idx / 2);\n const xo = margin + col * colW, yo = y + row * 10;\n doc.setFontSize(9); doc.setFont('helvetica', 'bold'); doc.setTextColor(100, 120, 160);\n doc.text(item[0].toUpperCase(), xo, yo);\n doc.setFont('helvetica', 'normal'); doc.setTextColor(40, 40, 40);\n doc.text(String(item[1]), xo, yo + 4.5);\n });\n y += Math.ceil(meta.length / 2) * 10 + 6;\n\n const addSection = (heading, text) => {\n if (!text) return;\n if (y > 250) { doc.addPage(); y = 20; }\n doc.setFillColor(240, 245, 255);\n doc.roundedRect(margin, y, contentW, 7, 1, 1, 'F');\n doc.setFont('helvetica', 'bold'); doc.setFontSize(9); doc.setTextColor(30, 60, 114);\n doc.text(heading.toUpperCase(), margin + 3, y + 5); y += 10;\n doc.setFont('helvetica', 'normal'); doc.setFontSize(10); doc.setTextColor(40, 40, 40);\n doc.splitTextToSize(text, contentW).forEach(line => {\n if (y > 272) { doc.addPage(); y = 20; }\n doc.text(line, margin, y); y += 5.5;\n });\n y += 4;\n };\n addSection('Findings / Summary', report.findings);\n addSection('Corrective Actions', report.correctiveActions);\n\n for (const imgFile of imageFiles) {\n try {\n let dataUrl;\n if (imgFile.file instanceof File) dataUrl = await this._fileToDataUrl(imgFile.file);\n else if (imgFile.publicUrl) dataUrl = await this._fetchImageAsDataUrl(imgFile.publicUrl);\n if (!dataUrl) continue;\n if (y > 220) { doc.addPage(); y = 20; }\n doc.setFillColor(240, 245, 255);\n doc.roundedRect(margin, y, contentW, 7, 1, 1, 'F');\n doc.setFont('helvetica', 'bold'); doc.setFontSize(9); doc.setTextColor(30, 60, 114);\n doc.text('ATTACHMENT: ' + imgFile.name, margin + 3, y + 5); y += 10;\n const props = doc.getImageProperties(dataUrl);\n const ratio = Math.min(contentW / props.width, 80 / props.height);\n const iw = props.width * ratio, ih = props.height * ratio;\n if (y + ih > 272) { doc.addPage(); y = 20; }\n doc.addImage(dataUrl, imgFile.type?.split('/')[1]?.toUpperCase() || 'JPEG', margin, y, iw, ih);\n y += ih + 8;\n } catch (e) { console.warn('Could not embed image', imgFile.name, e); }\n }\n\n const totalPages = doc.getNumberOfPages();\n for (let p = 1; p <= totalPages; p++) {\n doc.setPage(p);\n doc.setFillColor(30, 60, 114); doc.rect(0, 287, pageW, 10, 'F');\n doc.setTextColor(180, 200, 240); doc.setFontSize(8); doc.setFont('helvetica', 'normal');\n doc.text(`Generated ${new Date().toLocaleDateString('en-GB')} · Page ${p} of ${totalPages}`, margin, 293);\n if (report.entityRef) doc.text(report.entityRef, pageW - margin, 293, { align: 'right' });\n }\n\n return doc.output('arraybuffer');\n },\n\n // ─── ZIP builder ─────────────────────────────────────────────────────────\n\n async _buildAndDownloadZip(report, reportPdfBytes, allAttachments) {\n const zip = new window.JSZip();\n const safeName = this.safeRef(report);\n const folder = zip.folder(safeName);\n\n folder.file(`${safeName}_report.pdf`, reportPdfBytes);\n\n for (const att of allAttachments) {\n try {\n let bytes;\n if (att.file instanceof File) {\n bytes = await att.file.arrayBuffer();\n } else if (att.publicUrl) {\n const resp = await fetch(att.publicUrl);\n if (!resp.ok) throw new Error(`HTTP ${resp.status}`);\n bytes = await resp.arrayBuffer();\n }\n if (bytes) folder.file(att.name, bytes);\n } catch (e) {\n console.warn(`Could not add ${att.name} to ZIP:`, e);\n }\n }\n\n const blob = await zip.generateAsync({\n type: 'blob',\n compression: 'DEFLATE',\n compressionOptions: { level: 6 },\n });\n this._triggerDownload(blob, `${safeName}.zip`);\n },\n\n _triggerDownload(blob, filename) {\n const url = URL.createObjectURL(blob);\n const a = document.createElement('a');\n a.href = url; a.download = filename;\n document.body.appendChild(a); a.click(); document.body.removeChild(a);\n setTimeout(() => URL.revokeObjectURL(url), 5000);\n },\n\n _fileToDataUrl(file) {\n return new Promise((resolve, reject) => {\n const r = new FileReader();\n r.onload = () => resolve(r.result); r.onerror = reject;\n r.readAsDataURL(file);\n });\n },\n\n async _fetchImageAsDataUrl(url) {\n try {\n const resp = await fetch(url);\n return this._fileToDataUrl(await resp.blob());\n } catch { return null; }\n },\n\n // ─── File input (report form) ─────────────────────────────────────────────\n handleReportFileAttach(e) { this.reportForm.files.push(...Array.from(e.target.files)); e.target.value = ''; },\n handleReportFileDrop(e) { this.reportForm.files.push(...Array.from(e.dataTransfer.files)); },\n removeReportFile(i) { this.reportForm.files.splice(i, 1); },\n\n // ─── User-folder UI ───────────────────────────────────────────────────────\n requestCreateFolder() {\n if (!this.newFolderName.trim()) return;\n this.$emit('folder-create-requested', this.newFolderName.trim());\n this.newFolderName = '';\n this.showNewFolderModal = false;\n this.activeTab = 'folders';\n },\n\n selectFolder(folder) { this.selectedFolder = folder; this.$refs.fileInput.click(); },\n\n handleFileSelection(event) {\n const files = Array.from(event.target.files);\n if (!this.selectedFolder || files.length === 0) return;\n this.$emit('files-add-requested', {\n folderId: this.selectedFolder.id,\n files: files.map(file => ({\n id: Date.now() + Math.random(),\n name: file.name,\n size: file.size,\n type: file.type,\n file,\n addedAt: new Date(),\n })),\n });\n event.target.value = ''; this.selectedFolder = null;\n },\n\n toggleFolder(key) {\n const i = this.expandedFolders.indexOf(key);\n if (i > -1) this.expandedFolders.splice(i, 1); else this.expandedFolders.push(key);\n },\n\n // ─── Formatters ───────────────────────────────────────────────────────────\n formatFileSize(bytes) {\n if (!bytes) return '0 B';\n const k = 1024, sizes = ['B', 'KB', 'MB', 'GB'];\n const i = Math.floor(Math.log(bytes) / Math.log(k));\n return Math.round(bytes / Math.pow(k, i) * 100) / 100 + ' ' + sizes[i];\n },\n formatDate(d) {\n return d ? new Date(d).toLocaleDateString('en-GB', { day: '2-digit', month: 'short', year: 'numeric' }) : '—';\n },\n },\n};\n</script>\n\n<style scoped>\n/* ─── Base ─── */\n.reports-container {\n padding: 24px;\n}\n\n/* ─── Banner ─── */\n.missing-banner {\n background: linear-gradient(135deg, #fff3cd, #ffe8a1);\n border: 1.5px solid #f0ad4e;\n border-radius: 10px;\n margin-bottom: 22px;\n overflow: hidden;\n}\n\n.missing-banner-inner {\n display: flex;\n align-items: center;\n gap: 14px;\n padding: 14px 18px;\n flex-wrap: wrap;\n}\n\n.missing-icon {\n font-size: 22px;\n color: #856404;\n flex-shrink: 0;\n}\n\n.missing-content {\n flex: 1;\n min-width: 0;\n}\n\n.missing-content strong {\n font-size: 14px;\n color: #664d03;\n display: block;\n}\n\n.missing-content p {\n margin: 2px 0 0;\n font-size: 12px;\n color: #856404;\n}\n\n.ref-chip {\n background: #856404;\n color: #fff;\n border-radius: 4px;\n padding: 1px 8px;\n font-family: monospace;\n font-size: 12px;\n font-weight: 700;\n}\n\n.btn-dismiss {\n background: none;\n border: none;\n color: #856404;\n cursor: pointer;\n font-size: 15px;\n padding: 4px 6px;\n border-radius: 4px;\n transition: background .15s;\n}\n\n.btn-dismiss:hover {\n background: rgba(0, 0, 0, .08);\n}\n\n.slide-down-enter-active,\n.slide-down-leave-active {\n transition: all .25s;\n}\n\n.slide-down-enter-from,\n.slide-down-leave-to {\n opacity: 0;\n transform: translateY(-12px);\n}\n\n/* ─── Page Header ─── */\n.page-header {\n margin-bottom: 18px;\n border-bottom: 1px solid #e0e0e0;\n padding-bottom: 16px;\n}\n\n.page-title {\n font-size: 22px;\n font-weight: 700;\n color: #1e3c72;\n margin: 0;\n}\n\n.page-subtitle {\n font-size: 13px;\n color: #6c757d;\n margin: 2px 0 0;\n}\n\n.btn-group-split {\n display: flex;\n gap: 8px;\n flex-wrap: wrap;\n}\n\n/* ─── Tabs ─── */\n.tab-nav {\n display: flex;\n gap: 4px;\n margin-bottom: 20px;\n border-bottom: 2px solid #e9ecef;\n overflow-x: auto;\n}\n\n.tab-btn {\n background: none;\n border: none;\n border-bottom: 3px solid transparent;\n padding: 9px 16px;\n font-size: 13px;\n font-weight: 600;\n color: #6c757d;\n cursor: pointer;\n white-space: nowrap;\n margin-bottom: -2px;\n transition: all .2s;\n display: flex;\n align-items: center;\n gap: 5px;\n}\n\n.tab-btn:hover {\n color: #2a5298;\n}\n\n.tab-btn.active {\n color: #2a5298;\n border-bottom-color: #2a5298;\n}\n\n.tab-count {\n font-size: 10px;\n background: #e9ecef;\n color: #495057;\n border-radius: 10px;\n padding: 1px 7px;\n font-weight: 700;\n}\n\n.tab-count.drill {\n background: #d1ecf1;\n color: #0c5460;\n}\n\n.tab-count.incident {\n background: #f8d7da;\n color: #721c24;\n}\n\n.tab-count.manual {\n background: #e2e3f0;\n color: #383d72;\n}\n\n/* ─── Report Cards ─── */\n.report-cards {\n display: flex;\n flex-direction: column;\n gap: 10px;\n margin-bottom: 24px;\n}\n\n.report-card {\n display: flex;\n align-items: center;\n gap: 12px;\n background: #fff;\n border: 1.5px solid #e9ecef;\n border-radius: 10px;\n padding: 12px 16px;\n transition: all .2s;\n position: relative;\n overflow: hidden;\n}\n\n.report-card:hover {\n border-color: #2a5298;\n box-shadow: 0 2px 10px rgba(42, 82, 152, .1);\n}\n\n.report-card--highlighted {\n border-color: #f0ad4e !important;\n background: #fffbf0 !important;\n box-shadow: 0 0 0 3px rgba(240, 173, 78, .25) !important;\n animation: flash-highlight 1.5s ease;\n}\n\n@keyframes flash-highlight {\n\n 0%,\n 100% {\n background: #fffbf0\n }\n\n 50% {\n background: #fff3cd\n }\n}\n\n.rc-type-bar {\n position: absolute;\n left: 0;\n top: 0;\n bottom: 0;\n width: 4px;\n}\n\n.rc-type-bar.drill {\n background: #17a2b8;\n}\n\n.rc-type-bar.incident {\n background: #dc3545;\n}\n\n.rc-type-bar.manual {\n background: #6f42c1;\n}\n\n.rc-badge {\n font-size: 9px;\n font-weight: 700;\n padding: 2px 7px;\n border-radius: 4px;\n text-transform: uppercase;\n white-space: nowrap;\n flex-shrink: 0;\n}\n\n.rc-badge.drill {\n background: #d1ecf1;\n color: #0c5460;\n}\n\n.rc-badge.incident {\n background: #f8d7da;\n color: #721c24;\n}\n\n.rc-badge.manual {\n background: #ede9f6;\n color: #383d72;\n}\n\n.rc-body {\n display: flex;\n flex-direction: column;\n flex: 1;\n min-width: 0;\n cursor: pointer;\n}\n\n.rc-ref {\n font-family: monospace;\n font-size: 12px;\n color: #2a5298;\n font-weight: 700;\n}\n\n.rc-title {\n font-size: 14px;\n color: #212529;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.rc-meta {\n font-size: 11px;\n color: #6c757d;\n margin-top: 2px;\n}\n\n.rc-files {\n font-size: 11px;\n color: #6c757d;\n display: flex;\n align-items: center;\n gap: 4px;\n flex-shrink: 0;\n}\n\n.rc-folder-pill {\n display: inline-flex;\n align-items: center;\n font-size: 10px;\n font-weight: 700;\n padding: 3px 10px;\n border-radius: 12px;\n cursor: pointer;\n border: 1.5px solid;\n transition: all .18s;\n white-space: nowrap;\n flex-shrink: 0;\n max-width: 170px;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.rc-folder-pill.drill {\n background: #e8f7fa;\n border-color: #17a2b8;\n color: #0c5460;\n}\n\n.rc-folder-pill.incident {\n background: #fce8ea;\n border-color: #dc3545;\n color: #721c24;\n}\n\n.rc-folder-pill.manual {\n background: #f0ebfa;\n border-color: #6f42c1;\n color: #383d72;\n}\n\n.rc-folder-pill:hover {\n filter: brightness(.92);\n}\n\n.rc-actions {\n display: flex;\n gap: 5px;\n flex-shrink: 0;\n}\n\n.rc-btn {\n width: 30px;\n height: 30px;\n border: 1.5px solid #dee2e6;\n border-radius: 6px;\n background: #fff;\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 13px;\n transition: all .18s;\n text-decoration: none;\n color: #495057;\n}\n\n.rc-btn:disabled {\n opacity: .5;\n cursor: not-allowed;\n}\n\n.rc-btn--view:hover:not(:disabled) {\n background: #2a5298;\n color: #fff;\n border-color: #2a5298;\n}\n\n.rc-btn--download {\n color: #28a745;\n}\n\n.rc-btn--download:hover:not(:disabled) {\n background: #28a745;\n color: #fff;\n border-color: #28a745;\n}\n\n.rc-btn--danger {\n color: #dc3545;\n}\n\n.rc-btn--danger:hover:not(:disabled) {\n background: #dc3545;\n color: #fff;\n border-color: #dc3545;\n}\n\n/* ─── Crew hint ─── */\n.crew-hint {\n background: #eef7ff;\n border: 1px solid #b8deff;\n border-radius: 7px;\n padding: 10px 14px;\n font-size: 12px;\n color: #0c5460;\n display: flex;\n align-items: flex-start;\n gap: 8px;\n margin-bottom: 4px;\n}\n\n.crew-hint code {\n background: #d1ecf1;\n border-radius: 3px;\n padding: 1px 5px;\n font-size: 11px;\n color: #0c5460;\n}\n\n/* ─── Section Heading ─── */\n.section-heading {\n display: flex;\n align-items: center;\n font-size: 13px;\n font-weight: 700;\n color: #495057;\n margin-bottom: 12px;\n gap: 5px;\n}\n\n.section-count {\n background: #e9ecef;\n color: #495057;\n font-size: 10px;\n font-weight: 700;\n border-radius: 10px;\n padding: 1px 8px;\n}\n\n.section-hint {\n font-size: 11px;\n font-weight: 400;\n color: #adb5bd;\n margin-left: 2px;\n}\n\n/* ─── Folders list ─── */\n.folders-list {\n display: flex;\n flex-direction: column;\n gap: 10px;\n}\n\n.auto-folder-card {\n border: 1.5px solid #e9ecef;\n border-radius: 12px;\n background: #fff;\n overflow: hidden;\n transition: border-color .18s;\n}\n\n.auto-folder-card.drill {\n border-left: 4px solid #17a2b8;\n}\n\n.auto-folder-card.incident {\n border-left: 4px solid #dc3545;\n}\n\n.auto-folder-card.manual {\n border-left: 4px solid #6f42c1;\n}\n\n.auto-folder-card:hover,\n.auto-folder-card.is-open {\n border-color: #adb5bd;\n}\n\n.user-folder-card {\n border: 1.5px solid #e9ecef;\n border-left: 4px solid #f0ad4e;\n border-radius: 12px;\n background: #fff;\n overflow: hidden;\n transition: border-color .18s;\n}\n\n.user-folder-card:hover,\n.user-folder-card.is-open {\n border-color: #adb5bd;\n}\n\n.af-header {\n display: flex;\n align-items: center;\n gap: 14px;\n padding: 14px 18px;\n cursor: pointer;\n user-select: none;\n transition: background .15s;\n}\n\n.af-header:hover {\n background: #f8f9fa;\n}\n\n.af-icon-wrap {\n position: relative;\n flex-shrink: 0;\n}\n\n.af-folder-icon {\n font-size: 2.1rem;\n}\n\n.color--drill {\n color: #17a2b8;\n}\n\n.color--incident {\n color: #dc3545;\n}\n\n.color--manual {\n color: #6f42c1;\n}\n\n.color--user {\n color: #f0ad4e;\n}\n\n.af-count-badge {\n position: absolute;\n top: -5px;\n right: -8px;\n background: #2a5298;\n color: #fff;\n font-size: 9px;\n font-weight: 700;\n border-radius: 10px;\n padding: 1px 6px;\n min-width: 18px;\n text-align: center;\n line-height: 16px;\n}\n\n.af-meta {\n flex: 1;\n min-width: 0;\n display: flex;\n flex-direction: column;\n gap: 2px;\n}\n\n.af-ref {\n font-family: monospace;\n font-size: 13px;\n font-weight: 700;\n color: #2a5298;\n}\n\n.af-title {\n font-size: 13px;\n color: #212529;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.af-sub {\n display: flex;\n align-items: center;\n gap: 8px;\n flex-wrap: wrap;\n margin-top: 1px;\n}\n\n.af-actions {\n display: flex;\n align-items: center;\n gap: 8px;\n flex-shrink: 0;\n}\n\n.chevron-icon {\n font-size: .85rem;\n color: #6c757d;\n}\n\n.af-contents {\n border-top: 1px solid #e9ecef;\n padding: 12px 16px;\n background: #fafbff;\n display: flex;\n flex-direction: column;\n gap: 6px;\n}\n\n.folder-expand-enter-active,\n.folder-expand-leave-active {\n transition: all .2s ease;\n overflow: hidden;\n}\n\n.folder-expand-enter-from,\n.folder-expand-leave-to {\n opacity: 0;\n max-height: 0 !important;\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n}\n\n.ffi {\n display: flex;\n align-items: center;\n gap: 10px;\n padding: 9px 12px;\n background: #fff;\n border: 1px solid #e9ecef;\n border-radius: 8px;\n transition: border-color .15s;\n}\n\n.ffi:hover {\n border-color: #adb5bd;\n}\n\n.ffi--report {\n border-color: #c5d0ee;\n background: #f5f7ff;\n cursor: pointer;\n}\n\n.ffi--report:hover {\n border-color: #2a5298;\n}\n\n.ffi-icon {\n width: 34px;\n height: 34px;\n border-radius: 7px;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 1.2rem;\n flex-shrink: 0;\n}\n\n.ffi-icon--pdf {\n background: #ffeaea;\n color: #dc3545;\n}\n\n.ffi-icon--img {\n background: #e8f5e9;\n color: #28a745;\n}\n\n.ffi-icon--generic {\n background: #e9ecef;\n color: #6c757d;\n}\n\n.ffi-meta {\n flex: 1;\n min-width: 0;\n display: flex;\n flex-direction: column;\n gap: 1px;\n}\n\n.ffi-name {\n font-size: 13px;\n font-weight: 600;\n color: #212529;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.ffi-sub {\n font-size: 11px;\n color: #6c757d;\n}\n\n.ffi-acts {\n display: flex;\n gap: 5px;\n flex-shrink: 0;\n}\n\n.ffi-empty {\n padding: 8px 2px;\n font-size: 12px;\n color: #6c757d;\n display: flex;\n align-items: center;\n}\n\n.af-zip-row {\n display: flex;\n align-items: center;\n gap: 12px;\n padding-top: 8px;\n border-top: 1px dashed #dee2e6;\n margin-top: 2px;\n}\n\n.af-zip-hint {\n font-size: 11px;\n color: #6c757d;\n font-family: monospace;\n}\n\n.mini-badge {\n font-size: 9px;\n font-weight: 700;\n padding: 2px 7px;\n border-radius: 4px;\n text-transform: uppercase;\n flex-shrink: 0;\n}\n\n.mini-badge.drill {\n background: #d1ecf1;\n color: #0c5460;\n}\n\n.mini-badge.incident {\n background: #f8d7da;\n color: #721c24;\n}\n\n.mini-badge.manual {\n background: #ede9f6;\n color: #383d72;\n}\n\n/* ─── Modals ─── */\n.modal {\n display: none;\n position: fixed;\n z-index: 1050;\n inset: 0;\n background: rgba(0, 0, 0, .5);\n align-items: center;\n justify-content: center;\n}\n\n.modal.show {\n display: flex;\n}\n\n.modal-dialog {\n max-width: 500px;\n width: 95%;\n margin: 1.5rem auto;\n}\n\n.modal-dialog.modal-lg {\n max-width: 780px;\n}\n\n.modal-content {\n background: #fff;\n border-radius: 12px;\n box-shadow: 0 10px 40px rgba(0, 0, 0, .25);\n overflow: hidden;\n}\n\n.modal-header {\n padding: 16px 22px;\n border-bottom: 1px solid #dee2e6;\n display: flex;\n justify-content: space-between;\n align-items: center;\n gap: 10px;\n}\n\n.modal-body {\n padding: 22px;\n max-height: 70vh;\n overflow-y: auto;\n}\n\n.modal-footer {\n padding: 14px 22px;\n border-top: 1px solid #dee2e6;\n display: flex;\n justify-content: flex-end;\n gap: 10px;\n align-items: center;\n}\n\n.rpt-modal-header {\n background: linear-gradient(135deg, #1e3c72, #2a5298);\n color: #fff;\n}\n\n.modal-type-toggle {\n display: flex;\n background: rgba(255, 255, 255, .15);\n border-radius: 6px;\n padding: 3px;\n gap: 2px;\n margin-left: auto;\n margin-right: 10px;\n}\n\n.type-toggle-btn {\n background: transparent;\n border: none;\n color: rgba(255, 255, 255, .7);\n font-size: 12px;\n font-weight: 600;\n padding: 4px 12px;\n border-radius: 4px;\n cursor: pointer;\n transition: all .2s;\n}\n\n.type-toggle-btn.active {\n background: #fff;\n color: #2a5298;\n}\n\n.type-toggle-btn:hover:not(.active) {\n color: #fff;\n background: rgba(255, 255, 255, .2);\n}\n\n.btn-close {\n background: transparent;\n border: none;\n font-size: 1.4rem;\n cursor: pointer;\n opacity: .6;\n color: inherit;\n}\n\n.btn-close:hover {\n opacity: 1;\n}\n\n/* ─── Report Form ─── */\n.rpt-entity-box {\n background: #f8f9fa;\n border: 1px solid #e0e0e0;\n border-radius: 8px;\n padding: 14px 16px;\n margin-bottom: 4px;\n}\n\n.prefilled-entity {\n display: flex;\n align-items: center;\n gap: 10px;\n flex-wrap: wrap;\n}\n\n.entity-chip {\n font-size: 9px;\n font-weight: 700;\n padding: 2px 7px;\n border-radius: 4px;\n text-transform: uppercase;\n flex-shrink: 0;\n}\n\n.entity-chip.drill {\n background: #d1ecf1;\n color: #0c5460;\n}\n\n.entity-chip.incident {\n background: #f8d7da;\n color: #721c24;\n}\n\n.entity-chip.manual {\n background: #ede9f6;\n color: #383d72;\n}\n\n.input-row {\n display: grid;\n grid-template-columns: 1fr 1fr;\n gap: 14px;\n margin-bottom: 14px;\n}\n\n.form-group {\n display: flex;\n flex-direction: column;\n margin-bottom: 14px;\n}\n\n.form-label {\n font-size: 13px;\n margin-bottom: 5px;\n color: #495057;\n}\n\n.form-hint {\n font-size: 10px;\n font-weight: 400;\n color: #adb5bd;\n margin-left: 8px;\n}\n\n.form-control {\n padding: 9px 12px;\n border: 1px solid #ced4da;\n border-radius: 6px;\n font-size: 14px;\n transition: border-color .2s;\n width: 100%;\n box-sizing: border-box;\n}\n\n.form-control:focus {\n outline: none;\n border-color: #2a5298;\n box-shadow: 0 0 0 3px rgba(42, 82, 152, .1);\n}\n\ntextarea.form-control {\n resize: vertical;\n min-height: 80px;\n}\n\nselect.form-control {\n cursor: pointer;\n}\n\n.file-drop-zone {\n border: 2px dashed #ced4da;\n border-radius: 8px;\n padding: 18px;\n text-align: center;\n cursor: pointer;\n transition: border-color .2s;\n min-height: 80px;\n}\n\n.file-drop-zone:hover {\n border-color: #2a5298;\n}\n\n.attached-files {\n display: flex;\n flex-wrap: wrap;\n gap: 6px;\n margin-top: 10px;\n justify-content: center;\n}\n\n.attached-chip {\n background: #e9ecef;\n border-radius: 5px;\n padding: 3px 10px;\n font-size: 12px;\n display: inline-flex;\n align-items: center;\n gap: 5px;\n}\n\n.attached-chip--link {\n text-decoration: none;\n color: #2a5298;\n background: #eef2ff;\n border: 1px solid #c5d0ee;\n transition: background .15s;\n}\n\n.attached-chip--link:hover {\n background: #dce4f8;\n}\n\n.attached-chip button {\n background: none;\n border: none;\n cursor: pointer;\n color: #dc3545;\n padding: 0;\n font-size: 11px;\n}\n\n.zip-hint {\n background: #eef2ff;\n border: 1px solid #c5d0ee;\n border-radius: 7px;\n padding: 8px 14px;\n font-size: 12px;\n color: #2a5298;\n display: flex;\n align-items: center;\n margin-top: -6px;\n}\n\n/* ─── Report Viewer ─── */\n.view-grid {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(160px, 1fr));\n gap: 14px;\n margin-bottom: 20px;\n}\n\n.view-item {\n display: flex;\n flex-direction: column;\n gap: 3px;\n}\n\n.view-item label {\n font-size: 11px;\n font-weight: 700;\n text-transform: uppercase;\n letter-spacing: .05em;\n color: #6c757d;\n}\n\n.view-item span {\n font-size: 14px;\n color: #212529;\n}\n\n.ref-mono {\n font-family: monospace;\n font-size: 13px;\n color: #2a5298;\n font-weight: 700;\n}\n\n.view-section {\n margin-bottom: 18px;\n}\n\n.view-section label {\n font-size: 12px;\n font-weight: 700;\n text-transform: uppercase;\n letter-spacing: .05em;\n color: #6c757d;\n display: block;\n margin-bottom: 6px;\n}\n\n.view-text {\n background: #f8f9fa;\n border-radius: 6px;\n padding: 12px 14px;\n font-size: 14px;\n line-height: 1.6;\n color: #212529;\n white-space: pre-wrap;\n}\n\n/* ─── Buttons ─── */\n.btn {\n padding: 9px 18px;\n border: none;\n border-radius: 8px;\n font-size: 13px;\n font-weight: 600;\n cursor: pointer;\n transition: all .2s;\n display: inline-flex;\n align-items: center;\n gap: 6px;\n}\n\n.btn:disabled {\n opacity: .6;\n cursor: not-allowed;\n}\n\n.btn-primary {\n background: #2a5298;\n color: #fff;\n}\n\n.btn-primary:hover:not(:disabled) {\n background: #1e3c72;\n}\n\n.btn-success {\n background: #28a745;\n color: #fff;\n}\n\n.btn-success:hover:not(:disabled) {\n background: #218838;\n}\n\n.btn-secondary {\n background: #6c757d;\n color: #fff;\n}\n\n.btn-secondary:hover:not(:disabled) {\n background: #5a6268;\n}\n\n.btn-danger {\n background: #dc3545;\n color: #fff;\n}\n\n.btn-danger:hover:not(:disabled) {\n background: #c82333;\n}\n\n.btn-warning {\n background: #f0ad4e;\n color: #664d03;\n}\n\n.btn-warning:hover {\n background: #e0972e;\n}\n\n.btn-outline-primary {\n background: transparent;\n border: 1.5px solid #2a5298;\n color: #2a5298;\n}\n\n.btn-outline-primary:hover:not(:disabled) {\n background: #2a5298;\n color: #fff;\n}\n\n.btn-outline-secondary {\n background: transparent;\n border: 1.5px solid #6c757d;\n color: #6c757d;\n}\n\n.btn-outline-secondary:hover:not(:disabled) {\n background: #6c757d;\n color: #fff;\n}\n\n.btn-link {\n background: none;\n border: none;\n padding: 0;\n font-size: 13px;\n text-decoration: none;\n cursor: pointer;\n}\n\n.btn-sm {\n padding: 5px 12px;\n font-size: 12px;\n}\n\n/* ─── Loading / Spinners ─── */\n.loading-container {\n display: flex;\n flex-direction: column;\n align-items: center;\n padding: 40px 20px;\n}\n\n.spinner {\n border: 4px solid #f3f3f3;\n border-top: 4px solid #2a5298;\n border-radius: 50%;\n width: 40px;\n height: 40px;\n animation: spin 1s linear infinite;\n margin-bottom: 14px;\n}\n\n.spinner-sm {\n display: inline-block;\n width: 14px;\n height: 14px;\n border: 2px solid rgba(255, 255, 255, .4);\n border-top-color: #fff;\n border-radius: 50%;\n animation: spin .7s linear infinite;\n}\n\n.spinner-xs {\n display: inline-block;\n width: 11px;\n height: 11px;\n border: 2px solid rgba(0, 0, 0, .15);\n border-top-color: #333;\n border-radius: 50%;\n animation: spin .7s linear infinite;\n}\n\n@keyframes spin {\n to {\n transform: rotate(360deg);\n }\n}\n\n/* ─── Utilities ─── */\n.fw-bold {\n font-weight: 700;\n}\n\n.fw-semibold {\n font-weight: 600;\n}\n\n.me-1 {\n margin-right: 4px;\n}\n\n.me-2 {\n margin-right: 8px;\n}\n\n.me-auto {\n margin-right: auto;\n}\n\n.ms-1 {\n margin-left: 4px;\n}\n\n.ms-2 {\n margin-left: 8px;\n}\n\n.mt-2 {\n margin-top: 8px;\n}\n\n.mt-3 {\n margin-top: 16px;\n}\n\n.mt-4 {\n margin-top: 24px;\n}\n\n.mb-0 {\n margin-bottom: 0;\n}\n\n.text-muted {\n color: #6c757d !important;\n}\n\n.text-danger {\n color: #dc3545 !important;\n}\n\n.text-success {\n color: #28a745 !important;\n}\n\n.text-primary {\n color: #2a5298 !important;\n}\n\n.text-warning {\n color: #f0ad4e !important;\n}\n\n.d-flex {\n display: flex;\n}\n\n.gap-2 {\n gap: 8px;\n}\n\n.justify-content-between {\n justify-content: space-between;\n}\n\n.text-center {\n text-align: center;\n}\n\n.empty-state {\n padding: 60px 20px;\n}\n\n/* ─── Incident Fields Box ─── */\n.incident-fields-box {\n background: #fff8f5;\n border: 1.5px solid #f5d0c0;\n border-radius: 10px;\n padding: 14px 16px;\n margin-bottom: 14px;\n display: flex;\n flex-direction: column;\n gap: 0;\n}\n\n.incident-fields-title {\n font-size: 13px;\n font-weight: 700;\n color: #7b2d1a;\n margin-bottom: 14px;\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.field-hint {\n font-size: 11px;\n color: #adb5bd;\n margin-bottom: 4px;\n margin-top: -2px;\n}\n\n/* ─── Drill Checklist ─── */\n.drill-checklist-box {\n background: #f8faff;\n border: 1.5px solid #d0daf0;\n border-radius: 10px;\n padding: 14px 16px;\n margin-bottom: 14px;\n}\n\n.drill-checklist-title {\n font-size: 13px;\n font-weight: 700;\n color: #1e3c72;\n margin-bottom: 10px;\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.checklist-hint {\n font-size: 11px;\n font-weight: 400;\n color: #adb5bd;\n margin-left: 4px;\n}\n\n.checklist-grid {\n display: flex;\n flex-direction: column;\n gap: 6px;\n}\n\n.checklist-item {\n display: flex;\n align-items: center;\n gap: 10px;\n padding: 8px 12px;\n border-radius: 7px;\n border: 1.5px solid #e2e8f0;\n background: #fff;\n cursor: pointer;\n transition: all .18s;\n user-select: none;\n}\n\n.checklist-item:hover {\n border-color: #2a5298;\n background: #f5f8ff;\n}\n\n.checklist-item.checked {\n border-color: #28a745;\n background: #f0fff4;\n}\n\n.checklist-checkbox input[type=\"checkbox\"] {\n display: none;\n}\n\n.custom-check {\n width: 22px;\n height: 22px;\n border-radius: 5px;\n border: 2px solid #ced4da;\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n font-size: 12px;\n transition: all .18s;\n}\n\n.checklist-item.checked .custom-check {\n background: #28a745;\n border-color: #28a745;\n color: #fff;\n}\n\n.checklist-item:not(.checked) .custom-check {\n background: #fff8f8;\n border-color: #dc3545;\n color: #dc3545;\n}\n\n.checklist-q {\n flex: 1;\n font-size: 13px;\n color: #212529;\n}\n\n.checklist-answer {\n font-size: 10px;\n font-weight: 700;\n padding: 2px 8px;\n border-radius: 4px;\n flex-shrink: 0;\n}\n\n.answer-yes {\n background: #d4edda;\n color: #155724;\n}\n\n.answer-no {\n background: #f8d7da;\n color: #721c24;\n}\n\n@media (max-width: 640px) {\n .input-row {\n grid-template-columns: 1fr;\n }\n\n .btn-group-split {\n gap: 5px;\n }\n\n .btn {\n padding: 8px 12px;\n font-size: 12px;\n }\n\n .tab-btn {\n padding: 8px 10px;\n font-size: 12px;\n }\n\n .modal-type-toggle {\n display: none;\n }\n\n .rc-folder-pill {\n display: none;\n }\n\n .af-header {\n padding: 12px 14px;\n gap: 10px;\n }\n}\n</style>","<template>\n <div v-if=\"ready\">\n <div>\n <nav v-show=\"!showReport\">\n <button v-for=\"section in sections\" :key=\"section.id\" class=\"nav-btn\"\n :class=\"{ active: activeSection === section.id }\" @click=\"handleSectionClick(section)\">\n {{ section.icon }} {{ section.name }}\n </button>\n </nav>\n \n <div class=\"content\" v-show=\"!showReport\">\n <!-- Maintenance Tasks Form -->\n <section :class=\"['form-section', { active: activeSection === 'maintenance' }]\"\n v-show=\"activeSection === 'maintenance'\">\n <h2>🛠️ Maintenance Tasks</h2>\n <!-- Loading indicator -->\n <div class=\"loading-container\" v-if=\"isLoading\">\n <div class=\"loading-spinner\"></div>\n <p>Loading checklist...</p>\n </div>\n <form v-if=\"!isLoading\">\n <div class=\"container\">\n <div class=\"d-flex justify-content-between align-items-center\">\n <h1>Maintenance Checklist</h1>\n <button v-if=\"showAddTaskButton\" class=\"btn btn-outline-custom\" @click.prevent=\"addTask()\">\n Manually Add Task\n <i class=\"fas fa-plus\"></i>\n </button>\n </div>\n\n <div class=\"progress-container\">\n <div class=\"progress-info\">\n Progress: {{ progress }}% ({{ completedCount.length }}/{{ checklists.length }})\n </div>\n <div class=\"progress-bar\">\n <div class=\"progress-fill\" :style=\"{ width: progress + '%' }\"></div>\n </div>\n </div>\n\n <ul class=\"checklist\">\n <li v-for=\"checklist in checklists\" :key=\"checklist.id\" class=\"checklist-item\">\n <div class=\"checkbox\" :class=\"{ 'checked': checklist.completed }\"\n @click=\"toggleTask(checklist)\">\n <span v-if=\"checklist.completed\">✓</span>\n </div>\n <span class=\"task-text\" :class=\"{ 'completed': checklist.completed }\"\n @click=\"toggleTask(checklist)\">\n {{ checklist.text }}\n </span>\n <button v-if=\"showAddTaskButton\" class=\"delete-btn\" @click=\"deleteTask(checklist.id)\"\n title=\"Delete task\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\"\n stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <polyline points=\"3,6 5,6 21,6\"></polyline>\n <path\n d=\"m19,6v14a2,2 0 0,1 -2,2H7a2,2 0 0,1 -2,-2V6m3,0V4a2,2 0 0,1 2,-2h4a2,2 0 0,1 2,2v2\">\n </path>\n <line x1=\"10\" y1=\"11\" x2=\"10\" y2=\"17\"></line>\n <line x1=\"14\" y1=\"11\" x2=\"14\" y2=\"17\"></line>\n </svg>\n </button>\n </li>\n </ul>\n\n <div v-if=\"after\">\n <label>Upload Image Evidence</label>\n <ul class=\"checklist\">\n <li class=\"checklist-item\">\n <span class=\"task-text\">\n Image Evidence Already Uploaded\n </span>\n <button type=\"button\" class=\"delete-btn\" @click=\"deleteEvidence()\"\n title=\"Delete Image\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\"\n stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\">\n <polyline points=\"3,6 5,6 21,6\"></polyline>\n <path\n d=\"m19,6v14a2,2 0 0,1 -2,2H7a2,2 0 0,1 -2,-2V6m3,0V4a2,2 0 0,1 2,-2h4a2,2 0 0,1 2,2v2\">\n </path>\n <line x1=\"10\" y1=\"11\" x2=\"10\" y2=\"17\"></line>\n <line x1=\"14\" y1=\"11\" x2=\"14\" y2=\"17\"></line>\n </svg>\n </button>\n </li>\n </ul>\n </div>\n\n <div class=\"form-group\" v-else :key=\"refreshKey || 'default'\">\n <label>Upload Image Evidence</label>\n <p>You can only upload one image evidence here.</p>\n <div class=\"attachment-area\">\n <p>{{ fileText }}</p>\n <input type=\"file\" id=\"evidence-files\" class=\"file-input\" @change=\"handleImg\">\n <label for=\"evidence-files\" class=\"file-label\">Browse Files</label>\n </div>\n </div>\n\n <div class=\"status\" v-if=\"completedCount === checklists.length\">\n All tasks completed! ✅\n </div>\n\n <button class=\"reset-button\" @click.prevent=\"resetTasks\">{{ checklistButtonLabel }}</button>\n </div>\n </form>\n </section>\n\n <!-- Maintenance Schedule Form -->\n <section :class=\"['form-section', { active: activeSection === 'schedule' }]\"\n v-show=\"activeSection === 'schedule'\">\n <h2>📅 Maintenance Schedule</h2>\n <form>\n <div class=\"form-group\">\n <label for=\"task-name\">Task Name</label>\n <input type=\"text\" id=\"task-name\" v-model=\"form.taskName\" required>\n </div>\n\n <div class=\"form-group\">\n <label for=\"task-description\">Description</label>\n <textarea id=\"task-description\" v-model=\"form.description\" required></textarea>\n </div>\n\n <div class=\"input-group\">\n <div class=\"form-group\">\n <label for=\"maintenance-type\">Maintenance Type</label>\n <select id=\"maintenance-type\" v-model=\"form.maintenanceType\" required>\n <option value=\"\">-- Select Type --</option>\n <option value=\"preventive\">Preventive</option>\n <option value=\"corrective\">Corrective</option>\n <option value=\"predictive\">Predictive</option>\n <option value=\"condition\">Condition-Based</option>\n </select>\n </div>\n\n <div class=\"form-group\">\n <label for=\"component\">Component/System</label>\n <select id=\"component\" v-model=\"form.component\" required>\n <option value=\"\">-- Select Component --</option>\n <option value=\"engine\">Engine</option>\n <option value=\"hull\">Hull</option>\n <option value=\"electronics\">Electronics</option>\n <option value=\"deck\">Deck Machinery</option>\n <option value=\"plumbing\">Plumbing</option>\n <option value=\"electrical\">Electrical</option>\n <option value=\"hvac\">HVAC</option>\n <option value=\"safety\">Safety Systems</option>\n <option value=\"Other\">Other</option>\n </select>\n <input v-if=\"form.component === 'Other'\" type=\"text\"\n placeholder=\"Enter custom component/system\" v-model=\"form.customComponent\"\n style=\"margin-top: 8px;\">\n </div>\n </div>\n\n <div class=\"input-group\">\n <div class=\"form-group\">\n <label for=\"priority\">Priority</label>\n <select id=\"priority\" v-model=\"form.priority\" required>\n <option value=\"low\">Low</option>\n <option value=\"medium\">Medium</option>\n <option value=\"high\">High</option>\n <option value=\"critical\">Critical</option>\n </select>\n </div>\n <div class=\"form-group\">\n <label for=\"status\">Status</label>\n <input type=\"text\" id=\"status\" v-model=\"form.status\" readonly>\n </div>\n </div>\n\n <div class=\"input-group\">\n <div class=\"form-group\">\n <label for=\"estimated-hours\">Estimated Hours</label>\n <input type=\"number\" id=\"estimated-hours\" v-model=\"form.estimatedHours\" min=\"0\" step=\"0.5\">\n </div>\n </div>\n\n <div class=\"form-group\">\n <label for=\"assigned-to\">Assigned To</label>\n <select id=\"assigned-to\" v-model=\"form.assignedTo\">\n <option value=\"\">-- Select Personnel --</option>\n <option v-for=\"member in vesselCrew\" :key=\"member.id\"\n :value=\"`${member.name} - ${member.role}`\">\n {{ member.name }} - {{ member.role }}\n </option>\n </select>\n </div>\n\n <div class=\"input-group\">\n <div class=\"form-group\">\n <label for=\"recurrence-type\">Recurrence</label>\n <select id=\"recurrence-type\" v-model=\"form.recurrence\" required>\n <option value=\"once\">One-time</option>\n <option value=\"daily\">Daily</option>\n <option value=\"weekly\">Weekly</option>\n <option value=\"monthly\">Monthly</option>\n <option value=\"quarterly\">Quarterly</option>\n <option value=\"semi-annual\">Semi-annually</option>\n <option value=\"annual\">Annually</option>\n <option value=\"custom\">Custom Interval</option>\n </select>\n </div>\n </div>\n\n <div class=\"input-group\">\n <div class=\"form-group\">\n <label for=\"last-performed\">Last Performed Date</label>\n <input type=\"date\" id=\"last-performed\" v-model=\"form.lastPerformed\">\n </div>\n\n <div class=\"form-group\">\n <label for=\"next-due\">Due Date</label>\n <input type=\"date\" id=\"next-due\" v-model=\"form.nextDue\" required>\n </div>\n </div>\n\n <div class=\"form-group\">\n <label>Notifications</label>\n <div class=\"checkbox-group\">\n <div class=\"checkbox-item\">\n <input type=\"checkbox\" id=\"notify-email\" v-model=\"form.notifyEmail\">\n <label for=\"notify-email\">Email Notification</label>\n </div>\n <div class=\"checkbox-item\">\n <input type=\"checkbox\" id=\"notify-sms\" v-model=\"form.notifySms\">\n <label for=\"notify-sms\">SMS Notification</label>\n </div>\n </div>\n </div>\n\n <div class=\"input-group\">\n <div class=\"form-group\">\n <label for=\"reminder-days\">Reminder (Days Before)</label>\n <select id=\"reminder-days\" v-model=\"form.reminderDays\">\n <option value=\"1\">1 day</option>\n <option value=\"3\">3 days</option>\n <option value=\"7\">1 week</option>\n <option value=\"14\">2 weeks</option>\n <option value=\"30\">1 month</option>\n </select>\n </div>\n </div>\n\n <div class=\"form-group\">\n <label for=\"schedule-notes\">Notes</label>\n <textarea id=\"schedule-notes\" v-model=\"form.notes\"></textarea>\n </div>\n\n <div class=\"form-group\">\n <label>Attachments</label>\n <div class=\"attachment-area\">\n <p>{{ imgText }}</p>\n <input type=\"file\" id=\"maintenance-files\" class=\"file-input\" @change=\"handleFiles\" multiple>\n <label for=\"maintenance-files\" class=\"file-label\">Browse Files</label>\n </div>\n </div>\n\n <div class=\"action-buttons\">\n <button type=\"button\" class=\"btn btn-primary\" @click.prevent=\"saveSchedule\"\n :disabled=\"isSaving\">\n {{ isSaving ? 'Saving...' : 'Save Schedule' }}\n </button>\n </div>\n </form>\n </section>\n\n <!-- Inventory Form -->\n <section :class=\"['form-section', { active: activeSection === 'inventory' }]\"\n v-show=\"activeSection === 'inventory'\">\n <h2>All Maintenance</h2>\n <div class=\"task-table-wrapper\">\n <!-- Filters and Controls -->\n <div class=\"table-controls\">\n <div class=\"filters\">\n <button :class=\"{ active: activeFilter === 'due' }\" @click=\"setFilter('due')\">Due</button>\n <button :class=\"{ active: activeFilter === 'all' }\" @click=\"setFilter('all')\">All</button>\n <button :class=\"{ active: activeFilter === 'completed' }\"\n @click=\"setFilter('completed')\">Completed</button>\n <input type=\"text\" v-model=\"searchQuery\" placeholder=\"Search...\" />\n </div>\n </div>\n\n <!-- Task Table -->\n <table class=\"task-table\">\n <thead>\n <tr>\n <th>Equipment</th>\n <th>Task Name</th>\n <th>Assigned To</th>\n <th>Intervals</th>\n <th>Remaining</th>\n <th>Next Due</th>\n <th>Status</th>\n <th>Action</th>\n </tr>\n </thead>\n <tbody>\n <tr v-for=\"task in filteredTasks\" :key=\"task.id\">\n <td>{{ task.component }}</td>\n <td>{{ task.taskName }}</td>\n <td>{{ task.assignedTo }}</td>\n <td>{{ task.recurrence }}</td>\n <td>{{ task.remainingDays }}</td>\n <td>{{ task.nextDue }}</td>\n <td>\n <span :class=\"['status-badge', task.status.toLowerCase().replace(' ', '-')]\">\n {{ task.status }}\n </span>\n </td>\n <td>\n <button @click=\"printMaintenance(task.component)\" v-if=\"task.status === 'Completed'\"\n class=\"status-action\">Print</button>\n <button @click=\"showMaintenance(task.component)\" v-else\n class=\"status-action\">Start</button>\n </td>\n </tr>\n </tbody>\n </table>\n\n <!-- Empty schedule -->\n <div v-if=\"!tasks.length\">\n <div class=\"alert alert-primary\" role=\"alert\">\n <h4 class=\"alert-heading\">Such Empty!!!</h4>\n <p>You have no maintenance, because you have not scheduled any for this ship.</p>\n <hr>\n <p class=\"mb-0\">Navigate to the schedule tab, to start scheduling. Or click on this button\n to\n <button type=\"button\" class=\"btn btn-primary\"\n @click=\"switchSchedule()\">Schedule</button>\n </p>\n </div>\n </div>\n </div>\n </section>\n </div>\n\n <div class=\"report-container\" ref=\"reportContainer\" v-show=\"showReport\">\n <div class=\"header\">\n <div class=\"report-title\">MAINTENANCE TASK REPORT</div>\n </div>\n\n <div class=\"report-info\">\n <div class=\"info-box\">\n <div class=\"info-label\">Report Generated:</div>\n <div>{{ reportDate }}</div>\n </div>\n <div class=\"info-box\">\n <div class=\"info-label\">Report ID:</div>\n <div>{{ reportId }}</div>\n </div>\n <div class=\"info-box\">\n <div class=\"info-label\">Total Tasks:</div>\n <div>{{ maintenanceTasks.length }}</div>\n </div>\n <div class=\"info-box\">\n <div class=\"info-label\">Generated By:</div>\n <div>OceanHelm System</div>\n </div>\n </div>\n\n <div class=\"section\">\n <div class=\"section-title\">📊 Task Summary</div>\n <div class=\"summary-grid\">\n <div class=\"summary-card\">\n <div class=\"summary-number\">1</div>\n <div class=\"summary-label\">Completed</div>\n </div>\n <div class=\"summary-card\">\n <div class=\"summary-number\">0</div>\n <div class=\"summary-label\">Pending</div>\n </div>\n <div class=\"summary-card\">\n <div class=\"summary-number\">0</div>\n <div class=\"summary-label\">Overdue</div>\n </div>\n <div class=\"summary-card\">\n <div class=\"summary-number\">{{ totalEstimatedHours }}</div>\n <div class=\"summary-label\">Total Hours</div>\n </div>\n </div>\n </div>\n\n <div class=\"section\">\n <div class=\"section-title\">🔧 Maintenance Tasks</div>\n <div v-for=\"task in maintenanceTasks\" :key=\"task.taskName\"\n :class=\"['task-item', getTaskStatusClass(task)]\">\n\n <div class=\"task-header\">\n <div>\n <div class=\"task-title\">\n {{ task.taskName }}\n <span :class=\"['maintenance-type', 'type-' + task.maintenanceType]\">\n {{ task.maintenanceType }}\n </span>\n </div>\n <div class=\"task-component\">Component: {{ task.component }}</div>\n </div>\n <span :class=\"['status-badge', 'status-' + task.status.toLowerCase().replace(' ', '-')]\">\n {{ task.status }}\n </span>\n </div>\n\n <div class=\"task-details\">\n <div class=\"detail-item\">\n <div class=\"detail-label\">Assigned To</div>\n <div class=\"detail-value\">{{ task.assignedTo }}</div>\n </div>\n <div class=\"detail-item\">\n <div class=\"detail-label\">Estimated Hours</div>\n <div class=\"detail-value\">{{ task.estimatedHours }} hours</div>\n </div>\n <div class=\"detail-item\">\n <div class=\"detail-label\">Last Performed</div>\n <div class=\"detail-value\">{{ formatDate(task.lastPerformed) }}</div>\n </div>\n <div class=\"detail-item\">\n <div class=\"detail-label\">Next Due</div>\n <div class=\"detail-value\">{{ formatDate(task.nextDue) }}</div>\n </div>\n <div class=\"detail-item\">\n <div class=\"detail-label\">Recurrence</div>\n <div class=\"detail-value\">{{ task.recurrence }}</div>\n </div>\n <div class=\"detail-item\">\n <div class=\"detail-label\">Remaining Days</div>\n <div class=\"detail-value\">{{ task.remainingDays }} days</div>\n </div>\n </div>\n\n <div v-if=\"task.description\"\n style=\"margin: 15px 0; padding: 10px; background: white; border-radius: 5px;\">\n <div class=\"detail-label\">Description</div>\n <div class=\"detail-value\">{{ task.description }}</div>\n </div>\n\n <div v-if=\"task.notes\"\n style=\"margin: 15px 0; padding: 10px; background: white; border-radius: 5px;\">\n <div class=\"detail-label\">Notes</div>\n <div class=\"detail-value\">{{ task.notes }}</div>\n </div>\n\n <div v-if=\"task.checklistProgress && task.checklistProgress.length > 0\" class=\"checklist-progress\">\n <div class=\"detail-label\">Checklist Progress</div>\n <div class=\"progress-bar\">\n <div class=\"progress-fill\" :style=\"{ width: getChecklistProgress(task) + '%' }\"></div>\n </div>\n <div style=\"font-size: 0.9em; color: #666; margin-top: 5px;\">\n {{ getCompletedChecklistItems(task) }} of {{ task.checklistProgress.length }} items\n completed\n ({{ getChecklistProgress(task) }}%)\n </div>\n <div class=\"checklist-items\">\n <div v-for=\"(item, index) in task.checklistProgress\" :key=\"index\" class=\"checklist-item\">\n <span class=\"checklist-icon\">{{ item.completed ? '✅' : '⭕' }}</span>\n <span>{{ item.text || 'Checklist Item ' + (index + 1) }}</span>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <div class=\"section\">\n <div class=\"section-title\">📋 Recommendations</div>\n <div class=\"info-box\">\n <ul>\n <li v-for=\"recommendation in generateRecommendations()\" :key=\"recommendation\">\n {{ recommendation }}\n </li>\n </ul>\n </div>\n </div>\n\n <div class=\"signature-section\">\n <div class=\"signature-box\">\n <div><strong>Report Generated By</strong></div>\n <div style=\"margin-top: 10px; color: #666;\">OceanHelm Maintenance System</div>\n </div>\n <div class=\"signature-box\">\n <div><strong>Date</strong></div>\n <div style=\"margin-top: 10px; color: #666;\">{{ reportDate }}</div>\n </div>\n </div>\n </div>\n </div>\n </div>\n</template>\n\n<script>\nexport default {\n name: 'OceanHelmMaintenance',\n props: {\n vesselInfo: {\n type: Object,\n required: true\n },\n tasks: {\n type: Array,\n default: () => []\n },\n vesselCrew: {\n type: Array,\n default: () => []\n },\n companyInfo: {\n type: Object,\n default: () => ({})\n },\n userProfile: {\n type: Object,\n required: true\n }\n },\n emits: [\n 'dashboard-navigate',\n 'load-checklist',\n 'save-schedule',\n 'update-task',\n 'upload-file',\n 'delete-evidence',\n 'access-denied',\n 'show-message',\n 'generate-checklist'\n ],\n data() {\n return {\n ready: true,\n isSaving: false,\n after: null,\n lastSection: '',\n currentTask: '',\n imgText: 'Choose file to upload',\n fileText: 'Drag and drop files here or',\n fileattachments: {},\n refreshKey: 0,\n activeSection: 'inventory',\n sections: [\n { id: 'schedule', name: 'Schedule', icon: '📅' },\n { id: 'inventory', name: 'All Maintenance', icon: '♻️' },\n {\n id: 'dashboard', \n name: 'Dashboard', \n icon: '☰', \n onClick: () => this.$emit('dashboard-navigate')\n }\n ],\n activeFilter: 'all',\n searchQuery: '',\n checklists: [],\n isLoading: false,\n form: {\n taskName: '',\n description: '',\n maintenanceType: '',\n component: '',\n priority: '',\n dueDate: '',\n estimatedHours: null,\n assignedTo: '',\n recurrence: '',\n lastPerformed: '',\n nextDue: '',\n notifyEmail: true,\n notifySms: true,\n reminderDays: '1',\n estimatedDuration: null,\n notes: '',\n status: 'Soon',\n email: '',\n remainingDays: null,\n attachments: {}\n },\n maintenanceTasks: [],\n showReport: false,\n reportDate: new Date().toLocaleDateString('en-US', {\n year: 'numeric',\n month: 'long',\n day: 'numeric'\n }),\n reportId: 'MT-' + Math.random().toString(36).substr(2, 9).toUpperCase(),\n };\n },\n watch: {\n 'form.lastPerformed': 'calculateNextDue',\n 'form.recurrence': 'calculateNextDue',\n 'form.nextDue': function (newDate) {\n this.calculateRemainingDays();\n }\n },\n computed: {\n filteredTasks() {\n let result = [...this.tasks];\n if (this.activeFilter === 'all') {\n result = result.filter(task => task.status === 'Overdue' || task.status === 'Soon' || task.status === 'Completed');\n }\n else if (this.activeFilter === 'due') {\n result = result.filter(task => task.status === 'Overdue' || task.status === 'Soon');\n } else if (this.activeFilter === 'completed') {\n result = result.filter(task => task.status === 'Completed');\n }\n\n if (this.searchQuery) {\n const query = this.searchQuery.toLowerCase();\n result = result.filter(task =>\n task.component.toLowerCase().includes(query) ||\n task.taskName.toLowerCase().includes(query) ||\n task.assignedTo.toLowerCase().includes(query)\n );\n }\n\n return result;\n },\n completedCount() {\n return this.checklists.filter(item => item.completed);\n },\n progress() {\n return Math.round((this.completedCount.length / this.checklists.length) * 100);\n },\n checklistButtonLabel() {\n return this.lastSection === 'schedule' ? 'Approve Maintenance' : 'Save Checklist';\n },\n showAddTaskButton() {\n return this.checklistButtonLabel !== 'Save Checklist';\n },\n totalEstimatedHours() {\n return this.maintenanceTasks.reduce((total, task) => total + (task.estimatedHours || 0), 0);\n },\n },\n methods: {\n grantAccess(vessel) {\n const profile = this.userProfile;\n return profile.role === 'owner' || \n profile.role === 'staff' || \n (profile.role === 'captain' && profile.vessel === vessel);\n },\n deepAccess() {\n const profile = this.userProfile;\n if (profile.role === 'owner' || profile.role === 'captain') {\n return true;\n } else {\n this.$emit('access-denied', 'You do not have access to do this');\n return false;\n }\n },\n deleteTask(taskId) {\n this.checklists = this.checklists.filter(checklist => checklist.id !== taskId);\n },\n addTask(event) {\n if (event) event.preventDefault();\n \n this.$emit('show-message', {\n type: 'prompt',\n title: 'Add New Task',\n message: 'Enter the task details',\n callback: (result) => {\n if (result) {\n const newTask = {\n id: Date.now(),\n text: result,\n completed: false\n };\n this.checklists.push(newTask);\n }\n }\n });\n },\n setFilter(filter) {\n this.activeFilter = filter;\n },\n loadChecklist(taskComponent) {\n this.isLoading = true;\n this.$emit('generate-checklist', {\n component: taskComponent,\n callback: (checklist) => {\n this.checklists = checklist.map(item => ({\n ...item,\n completed: false\n }));\n this.isLoading = false;\n }\n });\n },\n showMaintenance(taskComponent) {\n if (this.deepAccess()) {\n const task = this.tasks.find(t => t.component === taskComponent);\n\n if (task && task.checklistProgress) {\n this.checklists = [...task.checklistProgress];\n } else {\n this.loadChecklist(taskComponent);\n }\n\n this.after = task?.after;\n this.currentTask = taskComponent;\n this.lastSection = 'inventory';\n this.activeSection = 'maintenance';\n }\n },\n printMaintenance(taskComponent) {\n const task = this.tasks.find(t => t.component === taskComponent);\n this.maintenanceTasks = [task];\n this.loadMaintenanceData();\n\n this.showReport = true;\n\n this.$nextTick(() => {\n setTimeout(() => {\n window.print();\n this.showReport = false;\n }, 100);\n });\n },\n switchSchedule() {\n if (this.deepAccess()) {\n this.activeSection = 'schedule';\n }\n },\n handleFiles(event) {\n this.imgText = event.target.files[0].name;\n this.form.attachments = {\n file: event.target.files[0]\n };\n },\n handleImg(event) {\n this.fileText = event.target.files[0].name;\n this.fileattachments = {\n file: event.target.files[0]\n };\n },\n validateForm() {\n const requiredFields = [\n 'taskName',\n 'description',\n 'maintenanceType',\n 'component',\n 'priority',\n 'estimatedHours',\n 'recurrence',\n 'lastPerformed',\n 'assignedTo'\n ];\n\n for (const field of requiredFields) {\n if (!this.form[field]) {\n this.$emit('show-message', {\n type: 'error',\n title: 'Missing info',\n message: `Please fill in the required field: ${field}`\n });\n return false;\n }\n }\n\n return true;\n },\n handleSectionClick(section) {\n this.activeSection = section.id;\n if (typeof section.onClick === 'function') {\n section.onClick();\n }\n },\n calculateNextDue() {\n const date = this.form.lastPerformed ? new Date(this.form.lastPerformed) : null;\n const recurrence = this.form.recurrence;\n\n if (!date || !recurrence) return;\n\n let nextDate = new Date(date);\n\n switch (recurrence) {\n case 'daily':\n nextDate.setDate(nextDate.getDate() + 1);\n break;\n case 'weekly':\n nextDate.setDate(nextDate.getDate() + 7);\n break;\n case 'monthly':\n nextDate.setMonth(nextDate.getMonth() + 1);\n break;\n case 'quarterly':\n nextDate.setMonth(nextDate.getMonth() + 3);\n break;\n case 'semi-annual':\n nextDate.setMonth(nextDate.getMonth() + 6);\n break;\n case 'annual':\n nextDate.setFullYear(nextDate.getFullYear() + 1);\n break;\n case 'once':\n case 'custom':\n return;\n }\n\n this.form.nextDue = nextDate.toISOString().split('T')[0];\n },\n calculateRemainingDays() {\n if (!this.form.nextDue) {\n this.form.remainingDays = null;\n return;\n }\n\n const today = new Date();\n const nextDueDate = new Date(this.form.nextDue);\n\n today.setHours(0, 0, 0, 0);\n nextDueDate.setHours(0, 0, 0, 0);\n\n const diffTime = nextDueDate - today;\n const diffDays = Math.ceil(diffTime / (1000 * 60 * 60 * 24));\n\n this.form.remainingDays = `${diffDays} Days`;\n },\n async saveSchedule() {\n this.isSaving = true;\n \n if (!this.validateForm()) {\n this.isSaving = false;\n return;\n }\n\n const taskData = { ...this.form };\n\n if (this.form.component === 'Other' && this.form.customComponent) {\n taskData.component = this.form.customComponent;\n }\n\n taskData.email = this.companyInfo.email;\n\n // Check for duplicate component\n const hasDuplicateComponent = this.tasks.some(task => task.component === taskData.component);\n\n if (hasDuplicateComponent) {\n this.$emit('show-message', {\n type: 'error',\n title: 'Duplicate Component',\n message: `A task with the component \"${taskData.component}\" already exists in maintenance`\n });\n this.isSaving = false;\n return;\n }\n\n delete taskData.customComponent;\n\n this.$emit('save-schedule', {\n taskData,\n file: taskData.attachments.file,\n callback: (success) => {\n this.isSaving = false;\n if (success) {\n this.loadChecklist(taskData.component);\n this.lastSection = 'schedule';\n this.currentTask = taskData.component;\n this.resetForm();\n this.activeSection = 'maintenance';\n }\n }\n });\n },\n resetForm() {\n this.form = {\n taskName: '',\n description: '',\n maintenanceType: '',\n component: '',\n priority: '',\n dueDate: '',\n estimatedHours: null,\n assignedTo: '',\n recurrence: '',\n lastPerformed: '',\n nextDue: '',\n notifyEmail: true,\n notifySms: true,\n reminderDays: '1',\n estimatedDuration: null,\n notes: '',\n status: 'Soon',\n remainingDays: null,\n attachments: {}\n };\n },\n toggleTask(task) {\n task.completed = !task.completed;\n },\n async resetTasks() {\n const allCompleted = this.checklists.every(item => item.completed);\n const status = allCompleted ? 'Completed' : 'Soon';\n const updateData = {\n checklistProgress: [...this.checklists],\n status,\n component: this.currentTask,\n after: this.after\n };\n\n this.$emit('update-task', {\n updateData,\n file: this.fileattachments.file,\n tasks: this.tasks,\n callback: (success, updatedAfter) => {\n if (success) {\n if (updatedAfter) {\n this.after = updatedAfter;\n }\n this.fileattachments = {};\n this.fileText = 'Drag and drop files here or';\n this.refreshKey += 1;\n this.activeSection = 'inventory';\n }\n }\n });\n },\n loadMaintenanceData() {\n this.reportId = 'MT-' + Math.random().toString(36).substr(2, 9).toUpperCase();\n this.reportDate = new Date().toLocaleDateString('en-US', {\n year: 'numeric',\n month: 'long',\n day: 'numeric'\n });\n },\n formatDate(dateString) {\n if (!dateString) return 'N/A';\n return new Date(dateString).toLocaleDateString('en-US', {\n year: 'numeric',\n month: 'short',\n day: 'numeric'\n });\n },\n getTaskStatusClass(task) {\n if (task.status === 'Completed') return 'completed';\n if (task.status === 'Overdue') return 'overdue';\n if (task.status === 'In Progress') return 'in-progress';\n return 'pending';\n },\n getChecklistProgress(task) {\n if (!task.checklistProgress || task.checklistProgress.length === 0) return 0;\n const completed = task.checklistProgress.filter(item => item.completed).length;\n return Math.round((completed / task.checklistProgress.length) * 100);\n },\n getCompletedChecklistItems(task) {\n if (!task.checklistProgress) return 0;\n return task.checklistProgress.filter(item => item.completed).length;\n },\n generateRecommendations() {\n return [\n 'Maintain regular communication with assigned technicians',\n 'Ensure all safety protocols are followed during maintenance activities',\n 'Update task progress and notes in real-time for accurate reporting'\n ];\n },\n deleteEvidence() {\n this.$emit('delete-evidence', {\n currentTask: this.currentTask,\n callback: (success) => {\n if (success) {\n this.after = null;\n this.fileText = 'Drag and drop files here or';\n this.fileattachments = {};\n this.refreshKey += 1;\n }\n }\n });\n }\n }\n};\n</script>\n<!--\n<style>\n.progress-container {\n margin-bottom: 20px;\n}\n\n.progress-bar {\n background-color: #e9ecef;\n border-radius: 4px;\n height: 10px;\n margin-top: 8px;\n}\n\n.progress-fill {\n background-color: #00a8e8;\n height: 100%;\n border-radius: 4px;\n transition: width 0.3s ease;\n}\n\n.checklist {\n list-style-type: none;\n padding: 0;\n}\n\n.checklist-item {\n display: flex;\n align-items: center;\n padding: 10px 0;\n border-bottom: 1px solid #eee;\n cursor: pointer;\n}\n\n.checkbox {\n margin-right: 15px;\n width: 20px;\n height: 20px;\n border: 2px solid #00a8e8;\n border-radius: 50%;\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n}\n\n.checkbox.checked {\n background-color: #00a8e8;\n color: white;\n}\n\n.task-text {\n flex-grow: 1;\n}\n\n.task-text.completed {\n text-decoration: line-through;\n color: #6c757d;\n}\n\n.status {\n margin-top: 20px;\n font-weight: bold;\n text-align: center;\n}\n\n.reset-button {\n background-color: #005792;\n color: white;\n border: none;\n padding: 8px 16px;\n border-radius: 4px;\n cursor: pointer;\n margin-top: 20px;\n font-weight: bold;\n}\n\n.btn-outline-custom {\n color: #005792;\n /* your custom text color */\n border: 2px solid #005792;\n /* your custom border color */\n background-color: transparent;\n padding: 8px 16px;\n border-radius: 4px;\n font-weight: 500;\n cursor: pointer;\n transition: background-color 0.3s, color 0.3s;\n}\n\n.btn-outline-custom:hover {\n background-color: #005792;\n /* custom hover background */\n color: white;\n /* text color on hover */\n}\n\n.reset-button:hover {\n background-color: #003d5b;\n}\n\nheader {\n background-color: var(--maitprimary);\n color: white;\n padding: 1rem;\n text-align: center;\n border-radius: 5px 5px 0 0;\n}\n\n/* \n*/\n\n.content {\n background-color: white;\n padding: 20px;\n border-radius: 0 0 5px 5px;\n box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);\n}\n\n.form-section {\n display: none;\n animation: fadeIn 0.5s;\n}\n\n.form-section.active {\n display: block;\n}\n\n.form-row {\n margin-bottom: 15px;\n}\n\n.form-group {\n margin-bottom: 20px;\n}\n\nlabel {\n display: block;\n margin-bottom: 5px;\n font-weight: bold;\n color: var(--dark);\n}\n\ninput,\nselect,\ntextarea {\n width: 100%;\n padding: 10px;\n border: 1px solid #ddd;\n border-radius: 4px;\n font-size: 16px;\n}\n\n.input-group {\n display: flex;\n gap: 10px;\n}\n\n.input-group>div {\n flex: 1;\n}\n\ntextarea {\n height: 120px;\n resize: vertical;\n}\n\n/* \n.btn {\n padding: 10px 20px;\n border-radius: 4px;\n cursor: pointer;\n font-size: 16px;\n font-weight: bold;\n transition: background-color 0.3s;\n}*/\n\n.btn-primary {\n background-color: var(--maitprimary);\n color: white;\n}\n\n.btn-primary:hover {\n background-color: var(--dark);\n}\n\n.btn-success {\n background-color: var(--success);\n color: white;\n}\n\n.btn-success:hover {\n background-color: #219653;\n}\n\n.action-buttons {\n display: flex;\n justify-content: flex-end;\n gap: 10px;\n margin-top: 20px;\n}\n\n.status-badge {\n display: inline-block;\n padding: 5px 10px;\n border-radius: 15px;\n font-size: 14px;\n font-weight: bold;\n color: white;\n}\n\n.status-pending {\n background-color: var(--warning);\n}\n\n.status-progress {\n background-color: var(--accent);\n}\n\n.status-completed {\n background-color: var(--success);\n}\n\n.attachment-area {\n border: 2px dashed #ddd;\n padding: 20px;\n text-align: center;\n border-radius: 5px;\n margin-bottom: 20px;\n}\n\n.file-input {\n display: none;\n}\n\n.file-label {\n display: inline-block;\n padding: 10px 20px;\n background-color: var(--accent);\n color: white;\n border-radius: 4px;\n cursor: pointer;\n transition: background-color 0.3s;\n}\n\n.file-label:hover {\n background-color: var(--maitsecondary);\n}\n\n@keyframes fadeIn {\n from {\n opacity: 0;\n }\n\n to {\n opacity: 1;\n }\n}\n\n.form-section h3 {\n margin-top: 30px;\n margin-bottom: 15px;\n color: var(--maitsecondary);\n}\n\n.checkbox-group {\n display: flex;\n flex-wrap: wrap;\n gap: 15px;\n margin-top: 10px;\n}\n\n.checkbox-item {\n display: flex;\n align-items: center;\n gap: 5px;\n}\n\n.checkbox-item input {\n width: auto;\n}\n\n.status-badge {\n padding: 0.3em 0.6em;\n border-radius: 4px;\n color: white;\n font-weight: bold;\n font-size: 0.85rem;\n}\n\n.status-action {\n padding: 0.3em 0.6em;\n border-radius: 4px;\n color: white;\n font-weight: bold;\n font-size: 0.85rem;\n background-color: var(--maitprimary);\n}\n\n.status-badge.overdue {\n background-color: red;\n}\n\n.status-badge.soon {\n background-color: orange;\n}\n\n/* Wrapper layout */\n.task-table-wrapper {\n font-family: 'Inter', sans-serif;\n padding: 1rem;\n}\n\n/* Controls section */\n.table-controls {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 1rem;\n flex-wrap: wrap;\n gap: 1rem;\n}\n\n.filters {\n display: flex;\n gap: 0.5rem;\n flex-wrap: wrap;\n}\n\n.filters button,\n.filters input {\n padding: 0.5rem 1rem;\n border-radius: 6px;\n border: 1px solid #ccc;\n background-color: #f5f5f5;\n font-weight: 500;\n cursor: pointer;\n}\n\n.filters button.active {\n background-color: #002f6c;\n color: white;\n}\n\n.filters input {\n border: 1px solid #bbb;\n}\n\n.filter-badge {\n background-color: #eee;\n color: #333;\n}\n\n/* Print and Add buttons */\n.table-controls>div:last-child button {\n padding: 0.5rem 1rem;\n border: 1px solid var(--maitprimary);\n border-radius: 6px;\n background-color: white;\n color: var(--maitprimary);\n ;\n font-weight: 600;\n cursor: pointer;\n transition: background 0.2s;\n}\n\n.table-controls>div:last-child button:last-child {\n background-color: var(--maitprimary);\n ;\n color: white;\n}\n\n/* Table */\n.task-table {\n width: 100%;\n border-collapse: collapse;\n box-shadow: 0 0 0 1px #ccc;\n}\n\n.task-table thead {\n background-color: var(--maitprimary);\n ;\n color: white;\n}\n\n.task-table th,\n.task-table td {\n padding: 0.75rem;\n text-align: left;\n border-bottom: 1px solid #eee;\n white-space: pre-line;\n /* so \\n works */\n}\n\n.task-table tbody tr:hover {\n background-color: #f9f9f9;\n}\n\n/* Status badges */\n.status-badge {\n padding: 0.3em 0.6em;\n border-radius: 6px;\n font-weight: bold;\n font-size: 0.85rem;\n color: white;\n display: inline-block;\n text-align: center;\n min-width: 90px;\n}\n\n.status-badge.complete {\n background-color: #4dffd0;\n}\n\n.status-badge.soon {\n background-color: #ffa500;\n}\n\n.status-badge.completed {\n background-color: #4caf50;\n}\n\n.delete-btn {\n background: none;\n border: none;\n color: #dc3545;\n cursor: pointer;\n padding: 6px;\n border-radius: 4px;\n display: flex;\n align-items: center;\n justify-content: center;\n transition: all 0.2s ease;\n opacity: 1;\n margin-left: 8px;\n flex-shrink: 0;\n transform: scale(1.1);\n}\n\n.checklist-item:hover .delete-btn {\n opacity: 1;\n}\n\n.delete-btn:hover {\n background-color: #dc3545;\n color: white;\n transform: scale(1.1);\n}\n\n.delete-btn:active {\n transform: scale(0.95);\n}\n\n.print-only-container {\n text-align: center;\n}\n\n.initial-print-btn {\n background: linear-gradient(135deg, #0066cc, #004499);\n color: white;\n border: none;\n padding: 20px 40px;\n font-size: 1.3em;\n border-radius: 12px;\n cursor: pointer;\n transition: all 0.3s ease;\n box-shadow: 0 6px 20px rgba(0, 102, 204, 0.3);\n display: flex;\n align-items: center;\n gap: 15px;\n margin: 0 auto;\n}\n\n.initial-print-btn:hover {\n background: linear-gradient(135deg, #004499, #003366);\n transform: translateY(-3px);\n box-shadow: 0 8px 25px rgba(0, 102, 204, 0.4);\n}\n\n.initial-print-btn:active {\n transform: translateY(0);\n}\n\n.company-branding {\n margin-bottom: 30px;\n}\n\n.company-logo {\n font-size: 3em;\n font-weight: bold;\n color: #0066cc;\n margin-bottom: 10px;\n}\n\n.company-tagline {\n font-size: 1.1em;\n color: #666;\n}\n\n/* Report Styles - Hidden Initially */\n.report-container {\n display: none;\n max-width: 900px;\n margin: 0 auto;\n background: white;\n padding: 30px;\n border-radius: 10px;\n box-shadow: 0 4px 15px rgba(0, 0, 0, 0.1);\n}\n\n.header {\n text-align: center;\n border-bottom: 3px solid #0066cc;\n padding-bottom: 20px;\n margin-bottom: 30px;\n}\n\n.report-logo {\n font-size: 2.5em;\n font-weight: bold;\n color: #0066cc;\n margin-bottom: 10px;\n}\n\n.report-title {\n font-size: 1.8em;\n color: #333;\n margin: 10px 0;\n}\n\n.report-info {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));\n gap: 20px;\n margin-bottom: 30px;\n}\n\n.info-box {\n background: #f8f9fa;\n padding: 15px;\n border-radius: 8px;\n border-left: 4px solid #0066cc;\n}\n\n.info-box ul li {\n margin-left: 15px;\n}\n\n.info-label {\n font-weight: bold;\n color: #0066cc;\n margin-bottom: 5px;\n}\n\n.section {\n margin-bottom: 30px;\n}\n\n.section-title {\n font-size: 1.3em;\n font-weight: bold;\n color: #0066cc;\n border-bottom: 2px solid #e9ecef;\n padding-bottom: 10px;\n margin-bottom: 15px;\n}\n\n.task-item {\n background: #f8f9fa;\n margin: 15px 0;\n padding: 20px;\n border-radius: 8px;\n border-left: 4px solid #28a745;\n box-shadow: 0 2px 5px rgba(0, 0, 0, 0.1);\n}\n\n.task-item.pending {\n border-left-color: #ffc107;\n}\n\n.task-item.overdue {\n border-left-color: #dc3545;\n}\n\n.task-item.in-progress {\n border-left-color: #17a2b8;\n}\n\n.task-header {\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n margin-bottom: 15px;\n flex-wrap: wrap;\n gap: 10px;\n}\n\n.task-title {\n font-size: 1.2em;\n font-weight: bold;\n color: #333;\n}\n\n.task-component {\n font-size: 0.9em;\n color: #666;\n margin-top: 5px;\n}\n\n.status-badge {\n display: inline-block;\n padding: 6px 12px;\n border-radius: 20px;\n font-size: 0.8em;\n font-weight: bold;\n text-transform: uppercase;\n}\n\n.status-completed {\n background: #d4edda;\n color: #155724;\n}\n\n.status-pending {\n background: #fff3cd;\n color: #856404;\n}\n\n.status-overdue {\n background: #f8d7da;\n color: #721c24;\n}\n\n.status-in-progress {\n background: #d1ecf1;\n color: #0c5460;\n}\n\n.task-details {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));\n gap: 15px;\n margin: 15px 0;\n}\n\n.detail-item {\n display: flex;\n flex-direction: column;\n}\n\n.detail-label {\n font-weight: bold;\n font-size: 0.85em;\n color: #0066cc;\n margin-bottom: 3px;\n}\n\n.detail-value {\n font-size: 0.95em;\n color: #333;\n}\n\n.checklist-progress {\n margin-top: 15px;\n}\n\n.progress-bar {\n width: 100%;\n height: 20px;\n background: #e9ecef;\n border-radius: 10px;\n overflow: hidden;\n margin: 10px 0;\n}\n\n.progress-fill {\n height: 100%;\n background: linear-gradient(90deg, #28a745, #20c997);\n transition: width 0.3s ease;\n}\n\n.checklist-items {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));\n gap: 10px;\n margin-top: 10px;\n}\n\n.checklist-item {\n display: flex;\n align-items: center;\n padding: 8px;\n background: white;\n border-radius: 5px;\n font-size: 0.9em;\n}\n\n.checklist-icon {\n margin-right: 8px;\n font-size: 1.1em;\n}\n\n.summary-grid {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(150px, 1fr));\n gap: 15px;\n margin: 20px 0;\n}\n\n.summary-card {\n background: white;\n padding: 20px;\n border-radius: 8px;\n text-align: center;\n border: 2px solid #e9ecef;\n}\n\n.summary-number {\n font-size: 2em;\n font-weight: bold;\n color: #0066cc;\n}\n\n.summary-label {\n font-size: 0.9em;\n color: #666;\n margin-top: 5px;\n}\n\n.signature-section {\n margin-top: 40px;\n display: grid;\n grid-template-columns: 1fr 1fr;\n gap: 40px;\n}\n\n.signature-box {\n padding-top: 10px;\n text-align: center;\n}\n\n.maintenance-type {\n display: inline-block;\n padding: 4px 8px;\n border-radius: 12px;\n font-size: 0.75em;\n font-weight: bold;\n text-transform: uppercase;\n margin-left: 10px;\n}\n\n.type-corrective {\n background: #fff3cd;\n color: #856404;\n}\n\n.type-preventive {\n background: #d4edda;\n color: #155724;\n}\n\n.type-predictive {\n background: #d1ecf1;\n color: #0c5460;\n}\n\n/* Print Styles */\n@media print {\n body {\n background: white;\n padding: 0;\n display: block;\n }\n\n .print-only-container {\n display: none !important;\n }\n\n .report-container {\n display: block !important;\n box-shadow: none;\n padding: 0;\n margin: 0;\n max-width: none;\n }\n}\n\nnav button {\n background-color: var(--maitsecondary);\n color: white;\n border: none;\n padding: 10px 20px;\n margin: 5px;\n cursor: pointer;\n font-weight: bold;\n border-radius: 3px;\n transition: background-color 0.3s;\n}\n\nnav button:hover,\nnav button.active {\n background-color: var(--maitprimary);\n}\n</style>\n-->","<template>\n <div class=\"activity-logs\">\n <!-- Controls -->\n <div class=\"a-controls\">\n <div class=\"a-search-box\">\n <input type=\"text\" placeholder=\"Search activities, users, or actions...\" :value=\"searchTerm\"\n @input=\"$emit('update:searchTerm', $event.target.value)\" />\n </div>\n <select class=\"filter-select\" :value=\"selectedFilter\"\n @change=\"$emit('update:selectedFilter', $event.target.value)\">\n <option value=\"all\">All Activities</option>\n <option value=\"login\">Login</option>\n <option value=\"logout\">Logout</option>\n <option value=\"create\">Create</option>\n <option value=\"update\">Update</option>\n <option value=\"delete\">Delete</option>\n <option value=\"view\">View</option>\n </select>\n <button class=\"btn btn-primary\" @click=\"$emit('refresh')\">🔄 Refresh</button>\n <button class=\"btn btn-secondary\" @click=\"$emit('download')\">📥 Download Report</button>\n </div>\n\n <!-- Stats -->\n <div class=\"stats-grid\">\n <div class=\"stat-card\">\n <h3>Total Activities</h3>\n <div class=\"value\">{{ totalActivities }}</div>\n </div>\n <div class=\"stat-card\">\n <h3>Today's Activities</h3>\n <div class=\"value\">{{ todayActivities }}</div>\n </div>\n <div class=\"stat-card\">\n <h3>Active Users</h3>\n <div class=\"value\">{{ activeUsers }}</div>\n </div>\n <div class=\"stat-card\">\n <h3>Important</h3>\n <div class=\"badge-danger\">\n Logs are deleted at the end of every month, please download a copy\n </div>\n </div>\n </div>\n\n <!-- Logs Table -->\n <div class=\"logs-container\">\n <div v-if=\"loading\" class=\"loading\">\n <div class=\"spinner\"></div>\n <p>Loading activity logs...</p>\n </div>\n\n <div v-else-if=\"logs.length === 0\" class=\"no-logs\">\n <h3>No activities found</h3>\n <p>Try adjusting your search or filter criteria</p>\n </div>\n\n <div v-else>\n <table class=\"logs-table\">\n <thead>\n <tr>\n <th>Timestamp</th>\n <th>User Name</th>\n <th>Action</th>\n <th>Details</th>\n <th>Section</th>\n </tr>\n </thead>\n <tbody>\n <tr v-for=\"log in paginatedLogs\" :key=\"log.id\">\n <td>{{ formatDate(log.timestamp) }}</td>\n <td>\n <div>{{ log.user_name }}</div>\n <small style=\"color: gray\">{{ log.email }}</small>\n </td>\n <td>\n <span class=\"activity-badge\" :class=\"getBadgeClass(log.action)\">\n {{ log.action }}\n </span>\n </td>\n <td>\n {{ log.details.status }}\n <div v-for=\"(change, key) in log.details.information\" :key=\"key\">\n <strong>{{ key }}: </strong>\n <small style=\"color: gray\">\n {{ change?.from ?? \"\" }} → {{ change?.to ?? change ?? \"\" }}\n </small>\n </div>\n </td>\n <td>{{ log.table_name }}</td>\n </tr>\n </tbody>\n </table>\n\n <!-- Pagination -->\n <div class=\"pagination\">\n <button @click=\"$emit('change-page', currentPage - 1)\" :disabled=\"currentPage === 1\">\n Previous\n </button>\n <button v-for=\"page in totalPages\" :key=\"page\" @click=\"$emit('change-page', page)\"\n :class=\"{ active: currentPage === page }\">\n {{ page }}\n </button>\n <button @click=\"$emit('change-page', currentPage + 1)\" :disabled=\"currentPage === totalPages\">\n Next\n </button>\n </div>\n </div>\n </div>\n </div>\n</template>\n\n<script>\nexport default {\n name: \"ActivityLogs\",\n props: {\n loading: Boolean,\n searchTerm: String,\n selectedFilter: String,\n logs: Array,\n paginatedLogs: Array,\n totalActivities: Number,\n todayActivities: Number,\n activeUsers: Number,\n totalPages: Number,\n currentPage: Number,\n },\n emits: [\"update:searchTerm\", \"update:selectedFilter\", \"refresh\", \"download\", \"change-page\"],\n methods: {\n formatDate(timestamp) {\n return new Date(timestamp).toLocaleString();\n },\n getBadgeClass(action) {\n const classes = {\n login: \"badge-login\",\n logout: \"badge-logout\",\n create: \"badge-create\",\n update: \"badge-update\",\n delete: \"badge-delete\",\n view: \"badge-view\",\n };\n return classes[action] || \"badge-view\";\n },\n },\n};\n</script>\n\n<style>\n.a-header {\n background: linear-gradient(135deg, var(--dashprimary-color), var(--dashsecondary-color));\n color: white;\n padding: 2rem 0;\n margin-bottom: 2rem;\n border-radius: 12px;\n box-shadow: 0 10px 30px rgba(52, 153, 64, 0.3);\n}\n\n.a-header h1 {\n font-size: 2.5rem;\n font-weight: 700;\n margin-bottom: 0.5rem;\n text-align: center;\n}\n\n.a-header p {\n text-align: center;\n opacity: 0.9;\n font-size: 1.1rem;\n}\n\n.a-controls {\n display: flex;\n gap: 1rem;\n margin-bottom: 2rem;\n flex-wrap: wrap;\n align-items: center;\n}\n\n.a-search-box {\n flex: 1;\n min-width: 250px;\n position: relative;\n}\n\n.a-search-box input {\n width: 100%;\n padding: 12px 16px;\n border: 2px solid #e0e0e0;\n border-radius: 8px;\n font-size: 1rem;\n transition: all 0.3s ease;\n}\n\n.a-search-box input:focus {\n outline: none;\n border-color: var(--dashsecondary-color);\n box-shadow: 0 0 0 3px rgba(52, 153, 64, 0.1);\n}\n\n.filter-select {\n padding: 12px 16px;\n border: 2px solid #e0e0e0;\n border-radius: 8px;\n font-size: 1rem;\n background: white;\n cursor: pointer;\n transition: all 0.3s ease;\n}\n\n.filter-select:focus {\n outline: none;\n border-color: var(--dashsecondary-color);\n box-shadow: 0 0 0 3px rgba(52, 153, 64, 0.1);\n}\n\n.btn {\n padding: 12px 24px;\n border-radius: 8px;\n font-size: 1rem;\n font-weight: 600;\n cursor: pointer;\n transition: all 0.3s ease;\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.btn-primary {\n background: var(--primary);\n color: white;\n}\n\n.btn-primary:hover {\n background: var(--primary-dark);\n transform: translateY(-1px);\n box-shadow: 0 4px 12px rgba(52, 153, 64, 0.3);\n}\n\n.btn-secondary {\n background: var(--secondary);\n color: var(--dark);\n}\n\n.btn-secondary:hover {\n background: #e6a200;\n transform: translateY(-1px);\n box-shadow: 0 4px 12px rgba(244, 180, 0, 0.3);\n}\n\n.stats-grid {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));\n gap: 1.5rem;\n margin-bottom: 2rem;\n}\n\n.stat-card {\n background: white;\n padding: 1.5rem;\n border-radius: 12px;\n box-shadow: 0 4px 20px rgba(0, 0, 0, 0.05);\n transition: transform 0.3s ease;\n}\n\n.stat-card:hover {\n transform: translateY(-2px);\n}\n\n.stat-card h3 {\n color: var(--gray);\n font-size: 0.9rem;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n margin-bottom: 0.5rem;\n}\n\n.stat-card .value {\n font-size: 2rem;\n font-weight: 700;\n color: var(--dashsecondary-color);\n}\n\n.logs-container {\n background: white;\n border-radius: 12px;\n box-shadow: 0 4px 20px rgba(0, 0, 0, 0.05);\n overflow: hidden;\n}\n\n.logs-header {\n background: var(--light);\n padding: 1.5rem;\n border-bottom: 1px solid #e0e0e0;\n}\n\n.logs-header h2 {\n color: var(--dark);\n font-size: 1.3rem;\n font-weight: 600;\n}\n\n.logs-table {\n width: 100%;\n border-collapse: collapse;\n}\n\n.logs-table th,\n.logs-table td {\n padding: 1rem;\n text-align: left;\n border-bottom: 1px solid #f0f0f0;\n}\n\n.logs-table th {\n background: var(--light);\n font-weight: 600;\n color: var(--dark);\n font-size: 0.9rem;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.logs-table tr:hover {\n background: #f8f9fa;\n}\n\n.activity-badge {\n padding: 4px 12px;\n border-radius: 20px;\n font-size: 0.8rem;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.badge-login {\n background: var(--success);\n color: white;\n}\n\n.badge-logout {\n background: var(--gray);\n color: white;\n}\n\n.badge-create {\n background: var(--dashprimary-color);\n color: white;\n}\n\n.badge-update {\n background: var(--warning);\n color: white;\n}\n\n.badge-delete {\n background: var(--danger);\n color: white;\n}\n\n.badge-danger {\n color: var(--danger);\n}\n\n.badge-view {\n background: var(--maitsecondary);\n color: white;\n}\n\n.pagination {\n display: flex;\n justify-content: center;\n align-items: center;\n gap: 0.5rem;\n padding: 1.5rem;\n background: var(--light);\n}\n\n.pagination button {\n padding: 8px 12px;\n border: 1px solid #e0e0e0;\n background: white;\n border-radius: 6px;\n cursor: pointer;\n transition: all 0.3s ease;\n}\n\n.pagination button:hover {\n background: var(--primary);\n color: white;\n border-color: var(--primary);\n}\n\n.pagination button.active {\n background: var(--primary);\n color: white;\n border-color: var(--primary);\n}\n\n.pagination button:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n.no-logs {\n text-align: center;\n padding: 3rem;\n color: var(--gray);\n}\n\n.no-logs h3 {\n font-size: 1.5rem;\n margin-bottom: 1rem;\n}\n\n.loading {\n text-align: center;\n padding: 3rem;\n color: var(--gray);\n}\n\n.spinner {\n border: 3px solid #f3f3f3;\n border-top: 3px solid var(--primary);\n border-radius: 50%;\n width: 40px;\n height: 40px;\n animation: spin 1s linear infinite;\n margin: 0 auto 1rem;\n}\n\n@keyframes spin {\n 0% {\n transform: rotate(0deg);\n }\n\n 100% {\n transform: rotate(360deg);\n }\n}\n\n@media (max-width: 768px) {\n .a-controls {\n flex-direction: column;\n align-items: stretch;\n }\n\n .a-search-box {\n min-width: 100%;\n }\n\n .stats-grid {\n grid-template-columns: 1fr;\n }\n\n .logs-table {\n font-size: 0.9rem;\n }\n\n .logs-table th,\n .logs-table td {\n padding: 0.5rem;\n }\n}\n</style>","<template>\n <div class=\"crew-management\">\n <!-- Wave background -->\n <div class=\"wave-bg\" v-if=\"config.showWaveBackground\"></div>\n\n <div class=\"crew-section\">\n <div class=\"crew-section-header\">\n <h4 class=\"crew-subhead\">{{ sectionTitle }}</h4>\n <div class=\"header-actions\">\n <button class=\"btn btn-secondary\" @click=\"handleToggleGuestForm\" v-if=\"canAddCrew\">\n {{ showGuestForm ? 'Cancel' : '+ Check-in Guest' }}\n </button>\n <button class=\"btn btn-primary\" @click=\"handleToggleAddForm\" v-if=\"canAddCrew\">\n {{ showAddForm ? 'Cancel' : '+ Add Crew Member' }}\n </button>\n </div>\n </div>\n\n <!-- Personnel Onboard Summary -->\n <div class=\"personnel-summary\" v-if=\"!showAddForm && !showGuestForm && !showTimesheet\">\n <div class=\"summary-header\">\n <h3><i class=\"bi bi-people-fill\"></i> Personnel Onboard Summary</h3>\n <div class=\"summary-date\">{{ currentDate }}</div>\n </div>\n\n <div class=\"summary-cards\">\n <!-- Total Onboard -->\n <div class=\"summary-card total-card\">\n <div class=\"card-icon\">\n <i class=\"bi bi-people\"></i>\n </div>\n <div class=\"card-content\">\n <div class=\"card-value\">{{ totalOnboard }}</div>\n <div class=\"card-label\">Total Onboard</div>\n </div>\n </div>\n\n <!-- Crew Onboard -->\n <div class=\"summary-card crew-card\">\n <div class=\"card-icon\">\n <i class=\"bi bi-person-badge\"></i>\n </div>\n <div class=\"card-content\">\n <div class=\"card-value\">{{ crewOnboard }}</div>\n <div class=\"card-label\">Crew Onboard</div>\n </div>\n </div>\n\n <!-- Guests Onboard -->\n <div class=\"summary-card guest-card-summary\">\n <div class=\"card-icon\">\n <i class=\"bi bi-person-check\"></i>\n </div>\n <div class=\"card-content\">\n <div class=\"card-value\">{{ guestsOnboard }}</div>\n <div class=\"card-label\">Guests Onboard</div>\n </div>\n </div>\n </div>\n\n <!-- Breakdown by Vessel -->\n <div class=\"vessel-breakdown\" v-if=\"Object.keys(personnelByVessel).length > 0\">\n <h4>Breakdown by Vessel</h4>\n <div class=\"vessel-cards\">\n <div v-for=\"(data, vessel) in personnelByVessel\" :key=\"vessel\" class=\"vessel-card\">\n <div class=\"vessel-name\">{{ vessel }}</div>\n <div class=\"vessel-stats\">\n <div class=\"stat-item\">\n <span class=\"stat-label\">Crew:</span>\n <span class=\"stat-value\">{{ data.crew }}</span>\n </div>\n <div class=\"stat-item\">\n <span class=\"stat-label\">Guests:</span>\n <span class=\"stat-value\">{{ data.guests }}</span>\n </div>\n <div class=\"stat-item total-stat\">\n <span class=\"stat-label\">Total:</span>\n <span class=\"stat-value\">{{ data.total }}</span>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Search and Filter - Hide when form is shown -->\n <div class=\"search-filter\" v-if=\"!showAddForm && !showGuestForm\">\n <input type=\"text\" placeholder=\"Search crew by name or role...\" v-model=\"searchQuery\" @input=\"handleSearch\">\n <select v-model=\"filterStatus\" @change=\"handleFilter\">\n <option value=\"all\">All Statuses</option>\n <option value=\"available\">Available</option>\n <option value=\"onduty\">On Duty</option>\n <option value=\"onboard\">On Board</option>\n <option value=\"assigned\">Assigned</option>\n <option value=\"unavailable\">Unavailable</option>\n </select>\n <button class=\"btn btn-secondary\" @click=\"showTimesheet = !showTimesheet\">\n <i :class=\"showTimesheet ? 'bi bi-grid-3x3-gap' : 'bi bi-table'\"></i>\n {{ showTimesheet ? 'Show Crew Cards' : 'Show Timesheet' }}\n </button>\n </div>\n\n <!-- Loading State - Hide when form is shown -->\n <div v-if=\"loading && !showAddForm && !showGuestForm\" class=\"loading-state\">\n <div class=\"spinner-border text-primary\" role=\"status\">\n <span class=\"visually-hidden\">Loading crew...</span>\n </div>\n <p>Loading crew members...</p>\n </div>\n\n <!-- Consolidated Timesheet View - Hide when form is shown -->\n <div v-else-if=\"showTimesheet && !showAddForm && !showGuestForm\" class=\"timesheet-view\">\n <div class=\"timesheet-header\">\n <h3><i class=\"bi bi-table\"></i> Crew Activity Timesheet</h3>\n <div class=\"timesheet-controls\">\n <select v-model=\"timesheetFilter\" @change=\"filterTimesheet\">\n <option value=\"all\">All Activities</option>\n <option value=\"Embarked\">Embarked Only</option>\n <option value=\"Deboarded\">Deboarded Only</option>\n <option value=\"Assigned\">Assigned Only</option>\n <option value=\"Status Changed\">Status Changes Only</option>\n </select>\n <input type=\"text\" v-model=\"timesheetSearch\" placeholder=\"Search timesheet...\"\n class=\"timesheet-search\">\n </div>\n </div>\n\n <div class=\"timesheet-summary\">\n <div class=\"summary-card\">\n <span class=\"summary-label\">Total Entries:</span>\n <span class=\"summary-value\">{{ filteredTimesheetEntries.length }}</span>\n </div>\n <div class=\"summary-card\">\n <span class=\"summary-label\">Crew Members:</span>\n <span class=\"summary-value\">{{ uniqueCrewCount }}</span>\n </div>\n <div class=\"summary-card\">\n <span class=\"summary-label\">Date Range:</span>\n <span class=\"summary-value\">{{ timesheetDateRange }}</span>\n </div>\n </div>\n\n <div v-if=\"filteredTimesheetEntries.length === 0\" class=\"no-results\">\n No timesheet entries found.\n </div>\n\n <div v-else class=\"timesheet-table-container\">\n <table class=\"timesheet-table\">\n <thead>\n <tr>\n <th @click=\"sortTimesheet('timestamp')\">\n Date/Time\n <i class=\"bi bi-arrow-down-up\"></i>\n </th>\n <th @click=\"sortTimesheet('crewName')\">\n Crew Member\n <i class=\"bi bi-arrow-down-up\"></i>\n </th>\n <th @click=\"sortTimesheet('role')\">\n Role\n <i class=\"bi bi-arrow-down-up\"></i>\n </th>\n <th @click=\"sortTimesheet('action')\">\n Action\n <i class=\"bi bi-arrow-down-up\"></i>\n </th>\n <th>Vessel</th>\n <th>Duration</th>\n <th>Notes</th>\n </tr>\n </thead>\n <tbody>\n <tr v-for=\"entry in filteredTimesheetEntries\" :key=\"entry.uniqueId\"\n :class=\"getTimesheetRowClass(entry.action)\">\n <td class=\"timestamp-cell\">{{ formatLogDate(entry.timestamp) }}</td>\n <td class=\"crew-name-cell\">\n <strong>{{ entry.crewName }}</strong>\n </td>\n <td class=\"role-cell\">{{ entry.role }}</td>\n <td class=\"action-cell\">\n <span :class=\"['action-badge', getLogActionClass(entry.action)]\">\n <i :class=\"getLogIcon(entry.action)\"></i>\n {{ entry.action }}\n </span>\n </td>\n <td class=\"vessel-cell\">{{ entry.vessel || 'N/A' }}</td>\n <td class=\"duration-cell\">{{ entry.duration ? entry.duration + ' days' : 'N/A' }}</td>\n <td class=\"notes-cell\">{{ entry.notes || '-' }}</td>\n </tr>\n </tbody>\n </table>\n </div>\n </div>\n\n <!-- Crew Grid - Hide when form is shown -->\n <div class=\"crew-grid\" v-else-if=\"filteredCrew.length > 0 && !showAddForm && !showGuestForm\">\n <div v-for=\"member in filteredCrew\" :key=\"member.id\" class=\"crew-card\"\n :class=\"{ 'unavailable': member.status === 'unavailable', 'guest-card': member.role === 'guest' }\">\n <div :class=\"['crew-status-badge', getStatusClass(member.status)]\">\n {{ formatStatus(member.status) }}\n </div>\n\n <div class=\"crew-name\">{{ member.name }}</div>\n <div class=\"crew-role\">{{ member.role === 'guest' ? 'Guest' : member.role }}</div>\n\n <!-- Certifications - Only show for non-guests -->\n <div class=\"crew-certifications\" v-if=\"member.role !== 'guest'\">\n <div v-for=\"cert in getApprovedCertifications(member)\" :key=\"cert.name\" class=\"certification-tag\"\n :class=\"getCertificationClass(cert.expiryDate)\" @click=\"handleViewCertification(cert, member)\">\n {{ cert.name }}\n </div>\n <!-- Optional: Show pending certifications count -->\n <div v-if=\"getPendingCertificationsCount(member) > 0\" class=\"certification-tag text-muted\">\n <i class=\"bi bi-clock-history\"></i> {{ getPendingCertificationsCount(member) }} pending\n </div>\n <i class=\"bi bi-patch-plus-fill icon\" @click=\"handleAddCertification(member)\"\n v-if=\"canEditCrew\"></i>\n </div>\n\n <!-- Crew Details - Different for guests -->\n <div v-if=\"member.role === 'guest'\">\n <div class=\"crew-availability\">\n <strong>Arrival Date:</strong> {{ member.nextShift || 'Not Recorded' }}\n </div>\n <div class=\"crew-availability\">\n <strong>Expected Days Onboard:</strong> {{ member.onBoard || 'Not Specified' }}\n </div>\n <div class=\"crew-availability\">\n <strong>Days Onboard:</strong> {{ getGuestDaysOnboard(member) }}\n </div>\n </div>\n <div v-else>\n <div class=\"crew-availability\">\n <strong>Embarkation Date:</strong> {{ getEmbarkationDate(member) }}\n </div>\n <div class=\"crew-availability\">\n <strong>Expected Days Onboard:</strong> {{ member.onBoard || 'Not Scheduled' }}\n </div>\n <div class=\"crew-availability\">\n <strong>Days Onboard:</strong> {{ getDaysOnboard(member) }}\n </div>\n </div>\n\n <!-- Action Buttons -->\n <div class=\"action-buttons\">\n <div v-if=\"member.vessel\" class=\"status-available crew-availability vcard\">\n Vessel: {{ member.vessel }}\n </div>\n <div v-else class=\"status-unavailable crew-availability vcard\">\n Vessel: Unassigned\n </div>\n\n <!-- Guest-specific actions -->\n <button class=\"btn btn-warning\" @click=\"handleCheckoutGuest(member)\"\n v-if=\"member.role === 'guest' && member.status === 'onboard'\">\n Check Out\n </button>\n\n <!-- Crew-specific actions -->\n <template v-if=\"member.role !== 'guest'\">\n <!-- Available: Show Assign Shift button -->\n <button class=\"btn btn-primary\" @click=\"handleAssignShift(member)\"\n v-if=\"canAssignShift && member.status === 'available'\">\n Assign Shift\n </button>\n <!-- On Duty: Show Check In button -->\n <button class=\"btn btn-success\" @click=\"handleCheckinCrew(member)\"\n v-if=\"canDeboardCrew && member.status === 'onduty'\">\n Check In\n </button>\n <!-- Onboard: Show Deboard button -->\n <button class=\"btn btn-warning\" @click=\"handleDeboardCrew(member)\"\n v-if=\"canDeboardCrew && member.status === 'onboard'\">\n Deboard\n </button>\n </template>\n <!-- Unavailable & Assigned: No buttons -->\n </div>\n\n <!-- Crew Log Button and Delete Icon -->\n <div class=\"crew-footer\">\n <div class=\"crew-log-toggle\" v-if=\"member.log && member.log.length > 0\">\n <button class=\"btn btn-link btn-sm log-toggle-btn\" @click=\"toggleCrewLog(member.id)\">\n <i class=\"bi bi-clock-history\"></i> View Log ({{ member.log.length }})\n </button>\n </div>\n <i class=\"bi bi-trash icon delete-icon\" @click=\"handleDeleteCrew(member)\" v-if=\"canDeleteCrew\"></i>\n </div>\n\n <!-- Crew Log Display -->\n <div v-if=\"expandedLogs.includes(member.id)\" class=\"crew-log\">\n <h4>Crew Activity Log</h4>\n <div v-for=\"(entry, index) in member.log\" :key=\"index\" class=\"log-entry\">\n <div class=\"log-date\">{{ formatLogDate(entry.timestamp) }}</div>\n <div class=\"log-action\" :class=\"getLogActionClass(entry.action)\">\n <i :class=\"getLogIcon(entry.action)\"></i>\n {{ entry.action }}\n </div>\n <div class=\"log-details\">\n <span v-if=\"entry.vessel\">Vessel: {{ entry.vessel }}</span>\n <span v-if=\"entry.duration\"> | Duration: {{ entry.duration }} days</span>\n </div>\n <div v-if=\"entry.notes\" class=\"log-notes\">{{ entry.notes }}</div>\n </div>\n </div>\n\n </div>\n </div>\n\n <!-- No Results - Hide when form is shown -->\n <div v-else-if=\"!loading && !showTimesheet && !showAddForm && !showGuestForm\" class=\"no-results\">\n {{ crew.length === 0 ? 'No crew members found.' : 'No crew members found matching your search criteria.' }}\n </div>\n\n <!-- Add Crew Form -->\n <div class=\"add-crew-form\" v-if=\"showAddForm\">\n <h2>Add New Crew Member</h2>\n\n <!-- Basic Information -->\n <div class=\"form-row\">\n <div class=\"form-group\">\n <label for=\"crew-name\">Full Name *</label>\n <input type=\"text\" id=\"crew-name\" v-model=\"newCrew.name\" :class=\"{ 'error': formErrors.name }\">\n <div v-if=\"formErrors.name\" class=\"error-message\">{{ formErrors.name }}</div>\n </div>\n <div class=\"form-group\">\n <label for=\"crew-role\">Role/Position *</label>\n <select id=\"crew-role\" v-model=\"newCrew.role\">\n <option v-for=\"role in availableRoles\" :key=\"role\" :value=\"role\">\n {{ role }}\n </option>\n <option value=\"Other\">Other</option>\n </select>\n <input v-if=\"newCrew.role === 'Other'\" type=\"text\" placeholder=\"Enter custom role\"\n v-model=\"newCrew.customRole\" style=\"margin-top: 8px;\">\n </div>\n </div>\n\n <div class=\"form-row\">\n <div class=\"form-group\">\n <label for=\"crew-email\">Email Address *</label>\n <input type=\"email\" id=\"crew-email\" v-model=\"newCrew.email\" :class=\"{ 'error': formErrors.email }\">\n <div v-if=\"formErrors.email\" class=\"error-message\">{{ formErrors.email }}</div>\n </div>\n </div>\n\n <!-- Certifications Section \n <div class=\"certification-section\">\n <h3>Certifications</h3>\n <div v-for=\"(cert, index) in newCrew.certifications\" :key=\"index\" class=\"certification-entry\">\n <div class=\"form-row\">\n <div class=\"form-group\">\n <label>Certification Name *</label>\n <input type=\"text\" v-model=\"cert.name\" placeholder=\"Enter certification name\">\n </div>\n <div class=\"form-group\">\n <label>Expiry Date *</label>\n <input type=\"date\" v-model=\"cert.expiryDate\">\n </div>\n <div class=\"form-group\">\n <label>Certificate Image *</label>\n <div class=\"image-upload-wrapper\">\n <input type=\"file\" :id=\"'cert-image-' + index\"\n @change=\"handleCertImageUpload($event, index)\" accept=\"image/*,.pdf\"\n class=\"file-input\">\n <label :for=\"'cert-image-' + index\" class=\"file-input-label\">\n <i class=\"bi bi-cloud-upload\"></i>\n {{ cert.imagePreview ? 'Change File' : 'Upload File' }}\n </label>\n <div v-if=\"cert.imagePreview\" class=\"image-preview\">\n <img v-if=\"cert.imageType !== 'pdf'\" :src=\"cert.imagePreview\"\n alt=\"Certificate preview\">\n <div v-else class=\"pdf-preview\">\n <i class=\"bi bi-file-pdf\"></i>\n <span>{{ cert.imageName }}</span>\n </div>\n <button type=\"button\" class=\"btn-remove-image\" @click=\"removeCertImage(index)\">\n <i class=\"bi bi-x-circle\"></i>\n </button>\n </div>\n <small v-if=\"cert.imageName\" class=\"file-name\">{{ cert.imageName }}</small>\n </div>\n </div>\n <div class=\"form-group\" style=\"display: flex; align-items: flex-end;\">\n <button type=\"button\" class=\"btn btn-danger btn-sm\" @click=\"removeCertification(index)\"\n v-if=\"newCrew.certifications.length > 1\">\n Remove\n </button>\n </div>\n </div>\n </div>\n\n <button type=\"button\" class=\"btn btn-secondary btn-sm\" @click=\"addCertificationEntry\">\n + Add More Certification\n </button>\n </div>\n -->\n\n <!-- Notes -->\n <div class=\"form-row\">\n <div class=\"form-group\">\n <label for=\"crew-notes\">Notes</label>\n <textarea id=\"crew-notes\" rows=\"3\" v-model=\"newCrew.notes\"></textarea>\n </div>\n </div>\n\n <!-- Form Actions -->\n <div class=\"form-actions\">\n <button class=\"btn btn-secondary\" @click=\"handleCancelForm\">Cancel</button>\n <button class=\"btn btn-primary\" @click=\"handleAddCrewMember\">Add Crew Member</button>\n </div>\n </div>\n\n <!-- Guest Check-in Form -->\n <div class=\"add-crew-form\" v-if=\"showGuestForm\">\n <h2>Check-in Guest</h2>\n\n <!-- Basic Information -->\n <div class=\"form-row\">\n <div class=\"form-group\">\n <label for=\"guest-name\">Full Name *</label>\n <input type=\"text\" id=\"guest-name\" v-model=\"newGuest.name\"\n :class=\"{ 'error': guestFormErrors.name }\">\n <div v-if=\"guestFormErrors.name\" class=\"error-message\">{{ guestFormErrors.name }}</div>\n </div>\n <div class=\"form-group\">\n <label for=\"guest-email\">Email Address</label>\n <input type=\"email\" id=\"guest-email\" v-model=\"newGuest.email\">\n </div>\n </div>\n\n <!-- Vessel Selection - Only show when not on a specific vessel page -->\n <div class=\"form-row\" v-if=\"!vesselName\">\n <div class=\"form-group\">\n <label for=\"guest-vessel\">Vessel *</label>\n <select id=\"guest-vessel\" v-model=\"newGuest.vessel\" :class=\"{ 'error': guestFormErrors.vessel }\">\n <option value=\"\">Select a vessel</option>\n <option v-for=\"vessel in availableVessels\" :key=\"vessel\" :value=\"vessel\">\n {{ vessel }}\n </option>\n </select>\n <div v-if=\"guestFormErrors.vessel\" class=\"error-message\">{{ guestFormErrors.vessel }}</div>\n </div>\n </div>\n\n <div class=\"form-row\">\n <div class=\"form-group\">\n <label for=\"guest-arrival\">Arrival Date *</label>\n <input type=\"date\" id=\"guest-arrival\" v-model=\"newGuest.arrivalDate\"\n :class=\"{ 'error': guestFormErrors.arrivalDate }\">\n <div v-if=\"guestFormErrors.arrivalDate\" class=\"error-message\">{{ guestFormErrors.arrivalDate }}\n </div>\n </div>\n <div class=\"form-group\">\n <label for=\"guest-expected-days\">Expected Days Onboard *</label>\n <input type=\"number\" id=\"guest-expected-days\" v-model=\"newGuest.expectedDays\" min=\"1\"\n :class=\"{ 'error': guestFormErrors.expectedDays }\">\n <div v-if=\"guestFormErrors.expectedDays\" class=\"error-message\">{{ guestFormErrors.expectedDays }}\n </div>\n </div>\n </div>\n\n <!-- Notes -->\n <div class=\"form-row\">\n <div class=\"form-group\">\n <label for=\"guest-notes\">Notes</label>\n <textarea id=\"guest-notes\" rows=\"3\" v-model=\"newGuest.notes\"\n placeholder=\"Purpose of visit, company affiliation, etc.\"></textarea>\n </div>\n </div>\n\n <!-- Form Actions -->\n <div class=\"form-actions\">\n <button class=\"btn btn-secondary\" @click=\"handleCancelGuestForm\">Cancel</button>\n <button class=\"btn btn-primary\" @click=\"handleCheckinGuest\">Check-in Guest</button>\n </div>\n </div>\n </div>\n </div>\n</template>\n\n<script>\nexport default {\n name: 'CrewManagement',\n\n props: {\n crew: {\n type: Array,\n required: true,\n default: () => []\n },\n vesselName: {\n type: String,\n default: ''\n },\n currentCompanyId: {\n type: String,\n required: true,\n default: ''\n },\n userProfile: {\n type: Object,\n default: () => ({ role: 'viewer' })\n },\n loading: {\n type: Boolean,\n default: false\n },\n availableRoles: {\n type: Array,\n default: () => ['Captain', 'First Officer', 'Engineer', 'Deckhand', 'Mechanic', 'Cook']\n },\n config: {\n type: Object,\n default: () => ({\n showWaveBackground: true,\n enableAdd: true,\n enableEdit: true,\n enableDelete: true,\n enableAssignShift: true,\n enableCertificationManagement: true\n })\n }\n },\n\n emits: [\n 'crew-add',\n 'crew-edit',\n 'crew-delete',\n 'view-pending-certifications',\n 'crew-assign-shift',\n 'crew-deboard',\n 'crew-checkin',\n 'crew-add-certification',\n 'crew-view-certification',\n 'search-changed',\n 'filter-changed',\n 'access-denied',\n 'upload-cert-image',\n 'guest-checkin',\n 'guest-checkout'\n ],\n\n data() {\n return {\n searchQuery: '',\n filterStatus: 'all',\n showAddForm: false,\n showGuestForm: false,\n formErrors: {},\n guestFormErrors: {},\n expandedLogs: [],\n showTimesheet: false,\n timesheetFilter: 'all',\n timesheetSearch: '',\n timesheetSortKey: 'timestamp',\n timesheetSortOrder: 'desc',\n newCrew: {\n name: '',\n role: 'Deckhand',\n customRole: '',\n status: 'available',\n nextShift: '',\n certifications: [{\n name: '',\n expiryDate: '',\n imageFile: null,\n imagePreview: null,\n imageName: '',\n imageType: ''\n }],\n notes: '',\n email: '',\n onBoard: ''\n },\n newGuest: {\n name: '',\n email: '',\n vessel: '',\n arrivalDate: '',\n expectedDays: '',\n notes: ''\n }\n }\n },\n\n computed: {\n sectionTitle() {\n return this.vesselName ? `Current Crew for ${this.vesselName}` : 'All Fleet Crew'\n },\n\n getApprovedCertifications() {\n return (member) => {\n if (!member.certifications || member.certifications.length === 0) {\n return []\n }\n\n return member.certifications.filter(cert => {\n // If no verifications exist, certificate is not approved by anyone\n if (!cert.verifications || cert.verifications.length === 0) {\n return false\n }\n\n // Find verification for current company\n const companyVerification = cert.verifications.find(\n v => v.companyId === this.currentCompanyId\n )\n\n // Only show if approved by this company\n return companyVerification && companyVerification.status === 'approved'\n })\n }\n },\n\n filteredCrew() {\n return this.crew.filter(member => {\n const matchesSearch = this.searchQuery === '' ||\n member.name.toLowerCase().includes(this.searchQuery.toLowerCase()) ||\n member.role.toLowerCase().includes(this.searchQuery.toLowerCase()) ||\n (member.vessel && member.vessel.toLowerCase().includes(this.searchQuery.toLowerCase()))\n\n const matchesStatus = this.filterStatus === 'all' || member.status === this.filterStatus\n\n return matchesSearch && matchesStatus\n })\n },\n\n allTimesheetEntries() {\n const entries = []\n\n this.crew.forEach(member => {\n if (member.log && member.log.length > 0) {\n member.log.forEach((logEntry, index) => {\n entries.push({\n ...logEntry,\n crewName: member.name,\n role: member.role,\n crewId: member.id,\n uniqueId: `${member.id}-${index}`\n })\n })\n }\n })\n\n return entries.sort((a, b) => {\n const dateA = new Date(a.timestamp)\n const dateB = new Date(b.timestamp)\n return this.timesheetSortOrder === 'desc' ? dateB - dateA : dateA - dateB\n })\n },\n\n filteredTimesheetEntries() {\n let filtered = this.allTimesheetEntries\n\n if (this.timesheetFilter !== 'all') {\n filtered = filtered.filter(entry => entry.action === this.timesheetFilter)\n }\n\n if (this.timesheetSearch) {\n const search = this.timesheetSearch.toLowerCase()\n filtered = filtered.filter(entry =>\n entry.crewName.toLowerCase().includes(search) ||\n entry.role.toLowerCase().includes(search) ||\n entry.action.toLowerCase().includes(search) ||\n (entry.vessel && entry.vessel.toLowerCase().includes(search)) ||\n (entry.notes && entry.notes.toLowerCase().includes(search))\n )\n }\n\n return this.sortTimesheetEntries(filtered)\n },\n\n uniqueCrewCount() {\n const uniqueCrewIds = new Set(this.filteredTimesheetEntries.map(e => e.crewId))\n return uniqueCrewIds.size\n },\n\n timesheetDateRange() {\n if (this.filteredTimesheetEntries.length === 0) return 'N/A'\n\n const dates = this.filteredTimesheetEntries.map(e => new Date(e.timestamp))\n const minDate = new Date(Math.min(...dates))\n const maxDate = new Date(Math.max(...dates))\n\n const formatDate = (date) => date.toLocaleDateString('en-US', { month: 'short', day: 'numeric', year: 'numeric' })\n\n return `${formatDate(minDate)} - ${formatDate(maxDate)}`\n },\n\n canAddCrew() {\n return this.config.enableAdd && this.hasPermission('add')\n },\n\n canEditCrew() {\n return this.config.enableEdit && this.hasPermission('edit')\n },\n\n canDeleteCrew() {\n return this.config.enableDelete && this.hasPermission('delete')\n },\n\n canAssignShift() {\n return this.config.enableAssignShift && this.hasPermission('assign')\n },\n\n canDeboardCrew() {\n return this.config.enableAssignShift && this.hasPermission('assign')\n },\n\n // Current date for display\n currentDate() {\n return new Date().toLocaleDateString('en-US', {\n weekday: 'long',\n year: 'numeric',\n month: 'long',\n day: 'numeric'\n })\n },\n\n // Total personnel onboard\n totalOnboard() {\n return this.crew.filter(member => member.status === 'onboard').length\n },\n\n // Crew members onboard (excluding guests)\n crewOnboard() {\n return this.crew.filter(member =>\n member.status === 'onboard' && member.role !== 'guest'\n ).length\n },\n\n // Guests onboard\n guestsOnboard() {\n return this.crew.filter(member =>\n member.status === 'onboard' && member.role === 'guest'\n ).length\n },\n\n // Personnel breakdown by vessel\n personnelByVessel() {\n const breakdown = {}\n\n this.crew.forEach(member => {\n if (member.status === 'onboard' && member.vessel) {\n if (!breakdown[member.vessel]) {\n breakdown[member.vessel] = {\n crew: 0,\n guests: 0,\n total: 0\n }\n }\n\n if (member.role === 'guest') {\n breakdown[member.vessel].guests++\n } else {\n breakdown[member.vessel].crew++\n }\n breakdown[member.vessel].total++\n }\n })\n\n return breakdown\n },\n\n // Get unique vessels from crew data for vessel selector\n availableVessels() {\n const vessels = new Set()\n this.crew.forEach(member => {\n if (member.vessel && member.vessel.trim() !== '') {\n vessels.add(member.vessel)\n }\n })\n return Array.from(vessels).sort()\n }\n },\n\n methods: {\n hasPermission(action) {\n const { role, vessel } = this.userProfile\n const isVessel = vessel === this.vesselName\n\n const permissions = {\n 'owner': ['add', 'edit', 'delete', 'assign', 'view'],\n 'staff': ['add', 'edit', 'assign', 'view'],\n 'captain': ['assign', 'view'],\n 'viewer': ['view']\n }\n\n let rolePermissions = permissions[role] || []\n\n if (role === 'captain' && isVessel) {\n rolePermissions = [...rolePermissions, 'add']\n }\n\n return rolePermissions.includes(action)\n },\n\n /**\n * Get embarkation date based on crew member status\n * Returns N/A if status is not onboard, onduty, or assigned\n * @param {Object} member - The crew member\n * @returns {String} - Embarkation date or 'N/A'\n */\n getEmbarkationDate(member) {\n const validStatuses = ['onboard', 'onduty', 'assigned']\n if (!validStatuses.includes(member.status)) {\n return 'N/A'\n }\n return member.nextShift || 'Not Scheduled'\n },\n\n /**\n * Calculate days onboard from logs\n * Finds the most recent \"Onboard\" action and counts days from that timestamp\n * @param {Object} member - The crew member\n * @returns {String|Number} - Days onboard or 'N/A'\n */\n getDaysOnboard(member) {\n // Only calculate if member is currently onboard\n if (member.status !== 'onboard') {\n return 'N/A'\n }\n\n // Check if logs exist\n if (!member.log || member.log.length === 0) {\n return 'N/A'\n }\n\n // Find the most recent \"Onboard\" action\n // Logs are typically sorted by timestamp, but we'll search from the end to be safe\n let mostRecentOnboard = null\n\n for (let i = member.log.length - 1; i >= 0; i--) {\n if (member.log[i].action === 'Onboard') {\n mostRecentOnboard = member.log[i]\n break\n }\n }\n\n // If no \"Onboard\" action found, return N/A\n if (!mostRecentOnboard || !mostRecentOnboard.timestamp) {\n return 'N/A'\n }\n\n // Calculate days between onboard timestamp and now\n const onboardDate = new Date(mostRecentOnboard.timestamp)\n const today = new Date()\n const diffTime = Math.abs(today - onboardDate)\n const diffDays = Math.floor(diffTime / (1000 * 60 * 60 * 24))\n\n return diffDays\n },\n\n /**\n * Calculate days onboard for guests from arrival date\n * @param {Object} member - The guest member\n * @returns {String|Number} - Days onboard or 'N/A'\n */\n getGuestDaysOnboard(member) {\n // Check if arrival date (nextShift) exists\n if (!member.nextShift) {\n return 'N/A'\n }\n\n // Only calculate if guest is currently onboard\n if (member.status !== 'onboard') {\n return 'N/A'\n }\n\n // Calculate days between arrival date and now\n const arrivalDate = new Date(member.nextShift)\n const today = new Date()\n const diffTime = Math.abs(today - arrivalDate)\n const diffDays = Math.floor(diffTime / (1000 * 60 * 60 * 24))\n\n return diffDays\n },\n\n /**\n * Get count of pending certifications for a member\n * @param {Object} member - The crew member\n * @returns {Number} - Count of pending certifications\n */\n getPendingCertificationsCount(member) {\n if (!member.certifications || member.certifications.length === 0) {\n return 0\n }\n\n return member.certifications.filter(cert => {\n if (!cert.verifications || cert.verifications.length === 0) {\n return true // No verifications = pending\n }\n\n const companyVerification = cert.verifications.find(\n v => v.companyId === this.currentCompanyId\n )\n\n // Pending if: no verification OR verification is pending/rejected\n return !companyVerification ||\n companyVerification.status === 'pending'\n }).length\n },\n\n /**\n * Emit event when user clicks on pending certifications\n * This allows parent component to navigate to verification page\n */\n handleViewPendingCertifications(member) {\n this.$emit('view-pending-certifications', {\n memberId: member.id,\n memberName: member.name,\n companyId: this.currentCompanyId\n })\n },\n\n handleToggleAddForm() {\n if (!this.canAddCrew) {\n this.$emit('access-denied', { action: 'add crew', userProfile: this.userProfile })\n return\n }\n this.showAddForm = !this.showAddForm\n if (!this.showAddForm) {\n this.resetForm()\n }\n },\n\n handleToggleGuestForm() {\n if (!this.canAddCrew) {\n this.$emit('access-denied', { action: 'check-in guest', userProfile: this.userProfile })\n return\n }\n this.showGuestForm = !this.showGuestForm\n if (!this.showGuestForm) {\n this.resetGuestForm()\n }\n },\n\n handleCheckinGuest() {\n if (!this.validateGuestForm()) {\n return\n }\n\n const newGuest = {\n name: this.newGuest.name,\n role: 'guest',\n status: 'onboard',\n nextShift: this.newGuest.arrivalDate, // Store arrival date in nextShift\n onBoard: this.newGuest.expectedDays,\n email: this.newGuest.email || '',\n notes: this.newGuest.notes,\n vessel: this.vesselName || this.newGuest.vessel,\n certifications: []\n }\n\n this.$emit('guest-checkin', newGuest)\n this.resetGuestForm()\n this.showGuestForm = false\n },\n\n handleCheckoutGuest(member) {\n if (!this.canDeboardCrew) {\n this.$emit('access-denied', { action: 'check out guest', userProfile: this.userProfile })\n return\n }\n\n let duration = null\n if (member.nextShift) {\n const arrivalDate = new Date(member.nextShift)\n const today = new Date()\n const diffTime = Math.abs(today - arrivalDate)\n duration = Math.ceil(diffTime / (1000 * 60 * 60 * 24))\n }\n\n this.$emit('guest-checkout', { member, duration })\n },\n\n handleCancelGuestForm() {\n this.showGuestForm = false\n this.resetGuestForm()\n },\n\n resetGuestForm() {\n this.newGuest = {\n name: '',\n email: '',\n vessel: '',\n arrivalDate: '',\n expectedDays: '',\n notes: ''\n }\n this.guestFormErrors = {}\n },\n\n validateGuestForm() {\n this.guestFormErrors = {}\n\n if (!this.newGuest.name || this.newGuest.name.trim() === '') {\n this.guestFormErrors.name = 'Guest name is required'\n }\n\n // Require vessel selection if not on a specific vessel page\n if (!this.vesselName && (!this.newGuest.vessel || this.newGuest.vessel.trim() === '')) {\n this.guestFormErrors.vessel = 'Please select a vessel'\n }\n\n if (!this.newGuest.arrivalDate) {\n this.guestFormErrors.arrivalDate = 'Arrival date is required'\n }\n\n if (!this.newGuest.expectedDays || this.newGuest.expectedDays <= 0) {\n this.guestFormErrors.expectedDays = 'Expected days onboard must be at least 1'\n }\n\n if (Object.keys(this.guestFormErrors).length > 0) {\n this.$emit('validation-error', this.guestFormErrors)\n return false\n }\n\n return true\n },\n\n handleSearch() {\n this.$emit('search-changed', this.searchQuery)\n },\n\n handleFilter() {\n this.$emit('filter-changed', this.filterStatus)\n },\n\n filterTimesheet() {\n // Trigger re-computation of filtered entries\n },\n\n sortTimesheet(key) {\n if (this.timesheetSortKey === key) {\n this.timesheetSortOrder = this.timesheetSortOrder === 'asc' ? 'desc' : 'asc'\n } else {\n this.timesheetSortKey = key\n this.timesheetSortOrder = 'asc'\n }\n },\n\n sortTimesheetEntries(entries) {\n const sorted = [...entries]\n\n sorted.sort((a, b) => {\n let valA, valB\n\n switch (this.timesheetSortKey) {\n case 'timestamp':\n valA = new Date(a.timestamp)\n valB = new Date(b.timestamp)\n break\n case 'crewName':\n valA = a.crewName.toLowerCase()\n valB = b.crewName.toLowerCase()\n break\n case 'role':\n valA = a.role.toLowerCase()\n valB = b.role.toLowerCase()\n break\n case 'action':\n valA = a.action.toLowerCase()\n valB = b.action.toLowerCase()\n break\n default:\n return 0\n }\n\n if (valA < valB) return this.timesheetSortOrder === 'asc' ? -1 : 1\n if (valA > valB) return this.timesheetSortOrder === 'asc' ? 1 : -1\n return 0\n })\n\n return sorted\n },\n\n getTimesheetRowClass(action) {\n return `timesheet-row-${action.toLowerCase().replace(/\\s+/g, '-')}`\n },\n\n async handleAddCrewMember() {\n if (!this.validateForm()) {\n return\n }\n\n // Check for incomplete certifications\n const hasIncompleteCert = this.newCrew.certifications.some(cert => {\n const hasName = cert.name.trim() !== ''\n const hasDate = cert.expiryDate !== ''\n const hasImage = cert.imageFile !== null\n\n // If any field is filled but not all, it's incomplete\n return (hasName || hasDate || hasImage) && !(hasName && hasDate && hasImage)\n })\n\n if (hasIncompleteCert) {\n this.$emit('incomplete-certification')\n return\n }\n\n // Filter only complete certifications (all three fields filled)\n const validCertifications = this.newCrew.certifications.filter(cert => {\n return cert.name.trim() !== '' && cert.expiryDate !== '' && cert.imageFile !== null\n })\n\n const finalRole = this.newCrew.role === 'Other' ? this.newCrew.customRole : this.newCrew.role\n\n // Upload all certification images first and get their URLs\n const certificationsWithUrls = await Promise.all(\n validCertifications.map(async (cert, index) => {\n // Emit and wait for the upload to complete\n const uploadResult = await this.uploadCertificationImage(cert.imageFile, this.newCrew.email)\n\n return {\n name: cert.name,\n expiryDate: cert.expiryDate,\n imageName: cert.imageName,\n imageType: cert.imageType,\n imageUrl: uploadResult.publicUrl // Add the public URL here\n }\n })\n )\n\n const newMember = {\n name: this.newCrew.name,\n role: finalRole,\n status: 'unavailable',\n certifications: certificationsWithUrls,\n notes: this.newCrew.notes,\n vessel: this.vesselName,\n email: this.newCrew.email,\n onBoard: this.newCrew.onBoard,\n nextShift: this.newCrew.nextShift\n }\n\n this.$emit('crew-add', newMember)\n this.resetForm()\n this.showAddForm = false\n },\n\n // Add this helper method to handle the upload:\n async uploadCertificationImage(file, email) {\n // Return a promise that resolves when upload completes\n return new Promise((resolve, reject) => {\n this.$emit('upload-cert-image', {\n file,\n email,\n callback: (result) => {\n if (result.error) {\n reject(result.error)\n } else {\n resolve(result)\n }\n }\n })\n })\n },\n\n handleCancelForm() {\n this.showAddForm = false\n this.resetForm()\n },\n\n handleDeleteCrew(member) {\n if (!this.canDeleteCrew) {\n this.$emit('access-denied', { action: 'delete crew', userProfile: this.userProfile })\n return\n }\n\n this.$emit('crew-delete', member)\n },\n\n handleAssignShift(member) {\n if (!this.canAssignShift) {\n this.$emit('access-denied', { action: 'assign shift', userProfile: this.userProfile })\n return\n }\n\n this.$emit('crew-assign-shift', member)\n },\n\n handleDeboardCrew(member) {\n if (!this.canDeboardCrew) {\n this.$emit('access-denied', { action: 'deboard crew', userProfile: this.userProfile })\n return\n }\n\n let duration = null\n if (member.nextShift) {\n const embarkDate = new Date(member.nextShift)\n const today = new Date()\n const diffTime = Math.abs(today - embarkDate)\n duration = Math.ceil(diffTime / (1000 * 60 * 60 * 24))\n }\n\n this.$emit('crew-deboard', { member, duration })\n },\n\n handleCheckinCrew(member) {\n if (!this.canDeboardCrew) {\n this.$emit('access-denied', { action: 'check in crew', userProfile: this.userProfile })\n return\n }\n\n this.$emit('crew-checkin', member)\n },\n\n toggleCrewLog(memberId) {\n const index = this.expandedLogs.indexOf(memberId)\n if (index > -1) {\n this.expandedLogs.splice(index, 1)\n } else {\n this.expandedLogs.push(memberId)\n }\n },\n\n handleAddCertification(member) {\n if (!this.canEditCrew) {\n this.$emit('access-denied', { action: 'add certification', userProfile: this.userProfile })\n return\n }\n\n this.$emit('crew-add-certification', member)\n },\n\n handleViewCertification(certification, member) {\n this.$emit('crew-view-certification', { certification, member })\n },\n\n resetForm() {\n this.newCrew = {\n name: '',\n role: 'Deckhand',\n customRole: '',\n status: 'Unavailable',\n nextShift: '',\n certifications: [{\n name: '',\n expiryDate: '',\n imageFile: null,\n imagePreview: null,\n imageName: '',\n imageType: ''\n }],\n notes: '',\n email: '',\n onBoard: ''\n }\n this.formErrors = {}\n },\n\n validateForm() {\n this.formErrors = {}\n\n const requiredFields = {\n name: 'Full Name',\n email: 'Email Address'\n }\n\n Object.keys(requiredFields).forEach(field => {\n if (!this.newCrew[field] || this.newCrew[field].trim() === '') {\n this.formErrors[field] = `${requiredFields[field]} is required`\n }\n })\n\n if (this.newCrew.email && !this.isValidEmail(this.newCrew.email)) {\n this.formErrors.email = 'Please enter a valid email address'\n }\n\n if (this.newCrew.role === 'Other' && (!this.newCrew.customRole || this.newCrew.customRole.trim() === '')) {\n this.formErrors.customRole = 'Custom role is required when \"Other\" is selected'\n }\n\n // Emit validation errors if any exist\n if (Object.keys(this.formErrors).length > 0) {\n this.$emit('validation-error', this.formErrors)\n return false\n }\n\n return true\n },\n\n isValidEmail(email) {\n const emailRegex = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/\n return emailRegex.test(email)\n },\n\n addCertificationEntry() {\n this.newCrew.certifications.push({\n name: '',\n expiryDate: '',\n imageFile: null,\n imagePreview: null,\n imageName: '',\n imageType: ''\n })\n },\n\n removeCertification(index) {\n this.newCrew.certifications.splice(index, 1)\n },\n\n handleCertImageUpload(event, index) {\n const file = event.target.files[0]\n if (!file) return\n\n const cert = this.newCrew.certifications[index]\n cert.imageFile = file\n cert.imageName = file.name\n cert.imageType = file.type.includes('pdf') ? 'pdf' : 'image'\n\n // Create preview for images\n if (cert.imageType === 'image') {\n const reader = new FileReader()\n reader.onload = (e) => {\n cert.imagePreview = e.target.result\n }\n reader.readAsDataURL(file)\n } else {\n cert.imagePreview = 'pdf'\n }\n },\n\n removeCertImage(index) {\n const cert = this.newCrew.certifications[index]\n cert.imageFile = null\n cert.imagePreview = null\n cert.imageName = ''\n cert.imageType = ''\n\n // Clear the file input\n const fileInput = document.getElementById('cert-image-' + index)\n if (fileInput) {\n fileInput.value = ''\n }\n },\n\n formatStatus(status) {\n return status ? status.charAt(0).toUpperCase() + status.slice(1) : ''\n },\n\n getStatusClass(status) {\n const statusMap = {\n 'available': 'status-available',\n 'onduty': 'status-onduty',\n 'onboard': 'status-onboard',\n 'unavailable': 'status-unavailable',\n 'assigned': 'status-assigned'\n }\n return statusMap[status] || ''\n },\n\n getCertificationClass(expiryDate) {\n const status = this.getExpiryStatus(expiryDate)\n const classMap = {\n 'expired': 'text-danger',\n 'expiringSoon': 'text-warning',\n 'valid': 'text-success'\n }\n return classMap[status] || ''\n },\n\n getExpiryStatus(dateStr) {\n if (!dateStr) return 'none'\n\n const expiry = new Date(dateStr)\n const today = new Date()\n const oneMonthFromNow = new Date()\n oneMonthFromNow.setMonth(today.getMonth() + 1)\n\n if (expiry <= today) return 'expired'\n if (expiry <= oneMonthFromNow) return 'expiringSoon'\n return 'valid'\n },\n\n formatLogDate(timestamp) {\n if (!timestamp) return ''\n const date = new Date(timestamp)\n return date.toLocaleDateString('en-US', {\n year: 'numeric',\n month: 'short',\n day: 'numeric',\n hour: '2-digit',\n minute: '2-digit'\n })\n },\n\n getLogActionClass(action) {\n const actionMap = {\n 'Embarked': 'log-action-embark',\n 'Deboarded': 'log-action-deboard',\n 'Assigned': 'log-action-assign',\n 'Status Changed': 'log-action-status'\n }\n return actionMap[action] || ''\n },\n\n getLogIcon(action) {\n const iconMap = {\n 'Embarked': 'bi bi-box-arrow-in-right',\n 'Deboarded': 'bi bi-box-arrow-left',\n 'Assigned': 'bi bi-calendar-check',\n 'Status Changed': 'bi bi-arrow-repeat'\n }\n return iconMap[action] || 'bi bi-circle-fill'\n }\n }\n}\n</script>\n\n<style>\n.add-crew-form h2 {\n color: #005792;\n}\n\n.crew-section {\n margin-bottom: 30px;\n}\n\n/* Personnel Summary Styles */\n.personnel-summary {\n background: linear-gradient(135deg, #005792 0%, #00a8e8 100%);\n border-radius: 8px;\n padding: 20px;\n margin-bottom: 25px;\n color: white;\n box-shadow: 0 4px 12px rgba(0, 87, 146, 0.2);\n}\n\n.summary-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 20px;\n padding-bottom: 15px;\n border-bottom: 2px solid rgba(255, 255, 255, 0.3);\n}\n\n.summary-header h3 {\n margin: 0;\n font-size: 1.4em;\n display: flex;\n align-items: center;\n gap: 10px;\n}\n\n.summary-date {\n font-size: 0.9em;\n opacity: 0.9;\n}\n\n.summary-cards {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));\n gap: 15px;\n margin-bottom: 25px;\n}\n\n.summary-card {\n background: linear-gradient(135deg, #005792 0%, #00a8e8 100%);\n backdrop-filter: blur(10px);\n border-radius: 8px;\n padding: 20px;\n display: flex;\n align-items: center;\n gap: 15px;\n transition: transform 0.2s, background 0.2s;\n}\n\n.summary-card:hover {\n transform: translateY(-3px);\n background: rgba(255, 255, 255, 0.2);\n}\n\n.card-icon {\n font-size: 2.5em;\n opacity: 0.9;\n}\n\n.card-content {\n flex: 1;\n}\n\n.card-value {\n font-size: 2.5em;\n font-weight: bold;\n line-height: 1;\n margin-bottom: 5px;\n}\n\n.card-label {\n font-size: 0.9em;\n opacity: 0.9;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.total-card {\n background: linear-gradient(135deg, #005792 0%, #00a8e8 100%);\n}\n\n.vessel-breakdown {\n margin-top: 20px;\n}\n\n.vessel-breakdown h4 {\n margin: 0 0 15px 0;\n font-size: 1.1em;\n opacity: 0.95;\n}\n\n.vessel-cards {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(250px, 1fr));\n gap: 12px;\n}\n\n.vessel-card {\n background: rgba(255, 255, 255, 0.15);\n backdrop-filter: blur(10px);\n border-radius: 6px;\n padding: 15px;\n border-left: 4px solid rgba(255, 255, 255, 0.5);\n}\n\n.vessel-name {\n font-weight: bold;\n font-size: 1.1em;\n margin-bottom: 10px;\n padding-bottom: 8px;\n border-bottom: 1px solid rgba(255, 255, 255, 0.2);\n}\n\n.vessel-stats {\n display: flex;\n justify-content: space-between;\n gap: 10px;\n}\n\n.stat-item {\n display: flex;\n flex-direction: column;\n gap: 3px;\n}\n\n.stat-label {\n font-size: 0.8em;\n opacity: 0.8;\n}\n\n.stat-value {\n font-size: 1.5em;\n font-weight: bold;\n}\n\n.total-stat {\n border-left: 1px solid rgba(255, 255, 255, 0.3);\n padding-left: 10px;\n}\n\n.total-stat .stat-value {\n color: #ffd700;\n}\n\n\n.crew-grid {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(250px, 1fr));\n gap: 20px;\n margin-bottom: 30px;\n align-items: start;\n}\n\n.crew-card {\n background-color: #f8f9fa;\n border-radius: 6px;\n padding: 15px;\n box-shadow: 0 1px 5px rgba(0, 0, 0, 0.08);\n border-left: 4px solid #00a8e8;\n position: relative;\n}\n\n.crew-card.unavailable {\n border-left-color: #dc3545;\n opacity: 0.8;\n}\n\n.crew-name {\n font-weight: bold;\n font-size: 1.1em;\n margin-bottom: 5px;\n color: #005792;\n}\n\n.crew-role {\n color: #6c757d;\n font-size: 0.9em;\n margin-bottom: 10px;\n}\n\n.crew-certifications,\n.crew-availability {\n font-size: 0.85em;\n margin: 5px 0;\n}\n\n.certification-tag {\n display: inline-block;\n background-color: #e6f7ff;\n color: #005792;\n border-radius: 4px;\n padding: 2px 8px;\n margin-right: 5px;\n margin-bottom: 5px;\n font-size: 0.85em;\n cursor: pointer;\n}\n\n.certification-tag:hover {\n background-color: #d1f0ff;\n}\n\n.crew-status-badge {\n position: absolute;\n top: 15px;\n right: 15px;\n font-size: 0.75em;\n padding: 3px 8px;\n border-radius: 12px;\n font-weight: bold;\n}\n\n.status-available {\n background-color: #d4edda;\n color: #155724;\n}\n\n.status-unavailable {\n background-color: #f8d7da;\n color: #721c24;\n}\n\n.status-assigned {\n background-color: #ffc107;\n color: #212529;\n}\n\n.status-onduty {\n background-color: #cce5ff;\n color: #004085;\n}\n\n.status-onboard {\n background-color: #d1ecf1;\n color: #0c5460;\n}\n\n.action-buttons {\n display: flex;\n justify-content: space-between;\n margin-top: 15px;\n gap: 5px;\n flex-wrap: wrap;\n}\n\n.btn {\n padding: 6px 12px;\n border-radius: 4px;\n cursor: pointer;\n font-size: 0.9em;\n transition: background-color 0.2s;\n border: none;\n}\n\n.btn-primary {\n background-color: #005792;\n color: white;\n}\n\n.btn-primary:hover {\n background-color: #004675;\n}\n\n.btn-secondary {\n background-color: #e9ecef;\n color: #495057;\n}\n\n.btn-secondary:hover {\n background-color: #dde2e6;\n}\n\n.btn-warning {\n background-color: #ffc107;\n color: #212529;\n}\n\n.btn-warning:hover {\n background-color: #e0a800;\n}\n\n.btn-success {\n background-color: #28a745;\n color: white;\n}\n\n.btn-success:hover {\n background-color: #218838;\n}\n\n.btn-danger {\n background-color: #dc3545;\n color: white;\n}\n\n.btn-danger:hover {\n background-color: #c82333;\n}\n\n.btn-link {\n background: none;\n border: none;\n color: #005792;\n text-decoration: none;\n padding: 4px 8px;\n}\n\n.btn-link:hover {\n text-decoration: underline;\n}\n\n.btn-sm {\n font-size: 0.8em;\n padding: 4px 8px;\n}\n\n.crew-footer {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-top: 10px;\n padding-top: 10px;\n border-top: 1px solid #e9ecef;\n}\n\n.crew-log-toggle {\n flex: 1;\n}\n\n.log-toggle-btn {\n text-align: left;\n padding: 0;\n display: flex;\n align-items: center;\n gap: 5px;\n}\n\n.crew-log {\n margin-top: 15px;\n padding: 10px;\n background-color: #ffffff;\n border-radius: 4px;\n border: 1px solid #dee2e6;\n max-height: 300px;\n overflow-y: auto;\n}\n\n.crew-log h4 {\n margin: 0 0 10px 0;\n font-size: 0.9em;\n color: #005792;\n border-bottom: 1px solid #dee2e6;\n padding-bottom: 5px;\n}\n\n.log-entry {\n padding: 8px;\n margin-bottom: 8px;\n border-left: 3px solid #005792;\n background-color: #f8f9fa;\n border-radius: 3px;\n}\n\n.log-entry:last-child {\n margin-bottom: 0;\n}\n\n.log-date {\n font-size: 0.75em;\n color: #6c757d;\n margin-bottom: 3px;\n}\n\n.log-action {\n font-weight: bold;\n font-size: 0.85em;\n margin-bottom: 3px;\n display: flex;\n align-items: center;\n gap: 5px;\n}\n\n.log-action-embark {\n color: #28a745;\n}\n\n.log-action-deboard {\n color: #dc3545;\n}\n\n.log-action-assign {\n color: #007bff;\n}\n\n.log-action-status {\n color: #ffc107;\n}\n\n.log-details {\n font-size: 0.8em;\n color: #495057;\n}\n\n.log-notes {\n font-size: 0.8em;\n color: #6c757d;\n font-style: italic;\n margin-top: 3px;\n}\n\n.search-filter {\n display: flex;\n margin-bottom: 20px;\n gap: 10px;\n align-items: center;\n}\n\n.search-filter input,\n.search-filter select {\n padding: 8px 12px;\n border: 1px solid #ced4da;\n border-radius: 4px;\n}\n\n.search-filter input {\n flex-grow: 1;\n}\n\n.search-filter select {\n min-width: 150px;\n}\n\n.add-crew-form {\n background-color: #f8f9fa;\n padding: 20px;\n border-radius: 6px;\n margin-top: 30px;\n}\n\n.form-row {\n display: flex;\n flex-wrap: wrap;\n gap: 15px;\n margin-bottom: 15px;\n}\n\n.form-group {\n flex: 1;\n min-width: 200px;\n}\n\n.form-group label {\n display: block;\n margin-bottom: 5px;\n font-weight: bold;\n color: #495057;\n}\n\n.text-danger {\n color: red;\n font-weight: bolder;\n}\n\n.text-warning {\n color: orange;\n font-weight: bolder;\n}\n\n.text-success {\n color: green;\n font-weight: bolder;\n}\n\n.icon {\n font-size: 20px;\n cursor: pointer;\n color: #005792;\n}\n\n.icon:hover {\n color: #003d5c;\n}\n\n.delete-icon {\n font-size: 20px;\n cursor: pointer;\n color: #dc3545;\n position: static;\n margin: 0;\n}\n\n.delete-icon:hover {\n color: #c82333;\n}\n\n.form-group input,\n.form-group select,\n.form-group textarea {\n width: 100%;\n padding: 8px;\n border: 1px solid #ced4da;\n border-radius: 4px;\n}\n\n.form-group input.error {\n border-color: #dc3545;\n}\n\n.error-message {\n color: #dc3545;\n font-size: 0.85em;\n margin-top: 5px;\n}\n\n.form-actions {\n display: flex;\n justify-content: flex-end;\n gap: 10px;\n margin-top: 20px;\n}\n\n.no-results {\n text-align: center;\n padding: 40px 20px;\n color: #6c757d;\n font-size: 1.1em;\n}\n\n.crew-section-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 15px;\n}\n\n.crew-section-header h2 {\n color: #005792;\n margin: 0;\n}\n\n.header-actions {\n display: flex;\n gap: 10px;\n}\n\n.guest-card {\n border-left-color: #ffc107 !important;\n background: linear-gradient(135deg, #f8f9fa 0%, #e3f2fd 100%);\n}\n\n.guest-card .crew-role {\n color: #17a2b8;\n font-weight: 600;\n text-transform: uppercase;\n font-size: 0.85em;\n}\n\n.vcard {\n border-radius: 6px;\n padding: 5px;\n}\n\n.loading-state {\n text-align: center;\n padding: 40px 20px;\n}\n\n.spinner-border {\n width: 3rem;\n height: 3rem;\n border: 0.25em solid currentColor;\n border-right-color: transparent;\n border-radius: 50%;\n display: inline-block;\n animation: spinner-border 0.75s linear infinite;\n}\n\n@keyframes spinner-border {\n to {\n transform: rotate(360deg);\n }\n}\n\n.text-primary {\n color: #005792;\n}\n\n.visually-hidden {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n border: 0;\n}\n\n.certification-section {\n margin: 20px 0;\n padding: 15px;\n background-color: #ffffff;\n border-radius: 4px;\n border: 1px solid #dee2e6;\n}\n\n.certification-section h3 {\n color: #005792;\n margin-top: 0;\n margin-bottom: 15px;\n font-size: 1.1em;\n}\n\n.certification-entry {\n margin-bottom: 10px;\n}\n\n/* Image Upload Styles */\n.image-upload-wrapper {\n position: relative;\n}\n\n.file-input {\n display: none;\n}\n\n.file-input-label {\n display: inline-flex;\n align-items: center;\n gap: 8px;\n padding: 8px 16px;\n background-color: #005792;\n color: white !important;\n border-radius: 4px;\n cursor: pointer;\n font-size: 0.9em;\n transition: background-color 0.2s;\n}\n\n.file-input-label:hover {\n background-color: #004675;\n}\n\n.file-input-label i {\n font-size: 1.1em;\n}\n\n.file-name {\n display: block;\n margin-top: 5px;\n color: #6c757d;\n font-size: 0.85em;\n}\n\n.image-preview {\n margin-top: 10px;\n position: relative;\n display: inline-block;\n}\n\n.image-preview img {\n max-width: 200px;\n max-height: 150px;\n border-radius: 4px;\n border: 2px solid #dee2e6;\n}\n\n.pdf-preview {\n display: flex;\n align-items: center;\n gap: 10px;\n padding: 15px;\n background-color: #f8f9fa;\n border: 2px solid #dee2e6;\n border-radius: 4px;\n max-width: 200px;\n}\n\n.pdf-preview i {\n font-size: 2em;\n color: #dc3545;\n}\n\n.pdf-preview span {\n font-size: 0.85em;\n color: #495057;\n word-break: break-word;\n}\n\n.btn-remove-image {\n position: absolute;\n top: -8px;\n right: -8px;\n background-color: #dc3545;\n color: white;\n border: none;\n border-radius: 50%;\n width: 24px;\n height: 24px;\n display: flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n padding: 0;\n transition: background-color 0.2s;\n}\n\n.btn-remove-image:hover {\n background-color: #c82333;\n}\n\n.btn-remove-image i {\n font-size: 1em;\n}\n\n/* Timesheet Styles */\n.timesheet-view {\n background-color: #ffffff;\n border-radius: 6px;\n padding: 20px;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);\n}\n\n.timesheet-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 20px;\n padding-bottom: 15px;\n border-bottom: 2px solid #005792;\n}\n\n.timesheet-header h3 {\n color: #005792;\n margin: 0;\n display: flex;\n align-items: center;\n gap: 10px;\n}\n\n.timesheet-controls {\n display: flex;\n gap: 10px;\n}\n\n.timesheet-controls select,\n.timesheet-search {\n padding: 8px 12px;\n border: 1px solid #ced4da;\n border-radius: 4px;\n font-size: 0.9em;\n}\n\n.timesheet-search {\n min-width: 250px;\n}\n\n.timesheet-summary {\n display: flex;\n gap: 20px;\n margin-bottom: 20px;\n flex-wrap: wrap;\n}\n\n.summary-card {\n flex: 1;\n min-width: 150px;\n background-color: #f8f9fa;\n padding: 15px;\n border-radius: 6px;\n border-left: 4px solid #005792;\n}\n\n.summary-label {\n display: block;\n font-size: 0.85em;\n color: #6c757d;\n margin-bottom: 5px;\n}\n\n.summary-value {\n display: block;\n font-size: 1.5em;\n font-weight: bold;\n color: #005792;\n}\n\n.timesheet-table-container {\n overflow-x: auto;\n margin-top: 20px;\n}\n\n.timesheet-table {\n width: 100%;\n border-collapse: collapse;\n font-size: 0.9em;\n}\n\n.timesheet-table thead {\n background-color: #005792;\n color: white;\n}\n\n.timesheet-table th {\n padding: 12px 8px;\n text-align: left;\n font-weight: bold;\n cursor: pointer;\n user-select: none;\n}\n\n.timesheet-table th:hover {\n background-color: #004675;\n}\n\n.timesheet-table th i {\n font-size: 0.8em;\n margin-left: 5px;\n}\n\n.timesheet-table tbody tr {\n border-bottom: 1px solid #dee2e6;\n}\n\n.timesheet-table tbody tr:hover {\n background-color: #f8f9fa;\n}\n\n.timesheet-table td {\n padding: 10px 8px;\n}\n\n.timestamp-cell {\n white-space: nowrap;\n color: #495057;\n font-size: 0.85em;\n}\n\n.crew-name-cell strong {\n color: #005792;\n}\n\n.role-cell {\n color: #6c757d;\n}\n\n.action-cell {\n white-space: nowrap;\n}\n\n.action-badge {\n display: inline-flex;\n align-items: center;\n gap: 5px;\n padding: 4px 10px;\n border-radius: 12px;\n font-size: 0.85em;\n font-weight: bold;\n}\n\n.vessel-cell {\n color: #495057;\n}\n\n.duration-cell {\n color: #495057;\n font-weight: 500;\n}\n\n.notes-cell {\n color: #6c757d;\n font-style: italic;\n max-width: 200px;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.timesheet-row-embarked {\n background-color: #d4edda;\n}\n\n.timesheet-row-deboarded {\n background-color: #f8d7da;\n}\n\n.timesheet-row-assigned {\n background-color: #d1ecf1;\n}\n\n.timesheet-row-status-changed {\n background-color: #fff3cd;\n}\n\n@media (max-width: 768px) {\n .crew-grid {\n grid-template-columns: 1fr;\n }\n\n .search-filter {\n flex-direction: column;\n }\n\n .search-filter input,\n .search-filter select {\n width: 100%;\n }\n\n .timesheet-header {\n flex-direction: column;\n align-items: flex-start;\n gap: 15px;\n }\n\n .timesheet-controls {\n flex-direction: column;\n width: 100%;\n }\n\n .timesheet-controls select,\n .timesheet-search {\n width: 100%;\n }\n\n .timesheet-summary {\n flex-direction: column;\n }\n\n .timesheet-table {\n font-size: 0.8em;\n }\n\n .timesheet-table th,\n .timesheet-table td {\n padding: 8px 4px;\n }\n}\n\n.crew-subhead {\n color: #000;\n}</style>","<template>\n <div class=\"s-container container\">\n <div class=\"header\">\n <h1>OceanHelm Requisition System</h1>\n <p>Streamlined Material Request & Ordering Process</p>\n </div>\n\n <!-- Navigation Tabs -->\n <div class=\"nav-tabs\">\n <button v-for=\"tab in visibleTabs\" :key=\"tab.name\" :class=\"['nav-tab', { active: activeTab === tab.name }]\"\n @click=\"setActiveTab(tab.name)\">\n {{ tab.label }}\n </button>\n </div>\n\n <!-- New Requisition Tab -->\n <div v-if=\"activeTab === 'new-requisition'\" class=\"tab-content active\">\n <form @submit.prevent=\"handleSubmitRequisition\">\n <div class=\"form-grid\">\n <div class=\"form-group\">\n <label>Requestor Name *</label>\n <input type=\"text\" :value=\"userProfile?.full_name\" readonly required class=\"form-control\" />\n </div>\n <div class=\"form-group\">\n <label>Department *</label>\n <select v-model=\"form.department\" required>\n <option value=\"\">Select Department</option>\n <option v-for=\"dept in departments\" :key=\"dept\" :value=\"dept\">{{ dept }}</option>\n </select>\n </div>\n <div class=\"form-group\">\n <label>Vessel *</label>\n <select v-model=\"form.project\" class=\"form-control\" required>\n <option disabled value=\"\">Select a vessel</option>\n <option v-for=\"v in vessels\" :key=\"v.id\" :value=\"v.name\">\n {{ v.name }}\n </option>\n </select>\n </div>\n <div class=\"form-group\">\n <label>Date Needed *</label>\n <input type=\"date\" v-model=\"form.neededDate\" :min=\"today\" required />\n </div>\n </div>\n\n <div class=\"form-group\">\n <label>Business Justification *</label>\n <textarea v-model=\"form.justification\" placeholder=\"Explain why these materials are needed...\"\n required></textarea>\n </div>\n\n <div class=\"items-section\">\n <div class=\"items-header\">\n <h3>Requested Items</h3>\n <button type=\"button\" class=\"add-item-btn\" @click=\"addItem\">+ Add Item</button>\n </div>\n <div>\n <div v-for=\"(item, index) in form.items\" :key=\"index\" class=\"item-row\">\n <div class=\"form-group\">\n <label>Item Code *</label>\n <input type=\"text\" v-model=\"item.id\" required />\n </div>\n <div class=\"form-group\">\n <label>Item Description *</label>\n <input type=\"text\" v-model=\"item.desc\" required />\n </div>\n <div class=\"form-group\">\n <label>Quantity *</label>\n <input type=\"number\" v-model.number=\"item.qty\" min=\"1\" required />\n </div>\n <div class=\"form-group\">\n <label>Unit *</label>\n <select v-model=\"item.unit\" required>\n <option v-for=\"unit in units\" :key=\"unit\" :value=\"unit\">{{ unit }}</option>\n </select>\n </div>\n <div class=\"form-group\">\n <label>Est. Unit Cost *</label>\n <input type=\"number\" v-model.number=\"item.cost\" step=\"0.01\" min=\"0\" placeholder=\"0.00\" required />\n </div>\n <button type=\"button\" class=\"remove-item-btn\" @click=\"removeItem(index)\">Remove</button>\n </div>\n </div>\n </div>\n\n <div class=\"action-buttons\">\n <button type=\"submit\" class=\"btn btn-primary-req\" :disabled=\"isSubmitting\">\n {{ isSubmitting ? 'Submitting...' : 'Submit Requisition' }}\n </button>\n </div>\n </form>\n </div>\n\n <!-- All Requisitions Tab -->\n <div v-if=\"activeTab === 'all-requisitions'\" class=\"tab-content active\">\n <div class=\"requisition-list\">\n <div v-for=\"req in requisitions\" :key=\"req.id\" class=\"requisition-card\">\n <div class=\"requisition-header\">\n <div class=\"requisition-id\">{{ req.id }}</div>\n <div :class=\"['status-badge', `status-${req.status}`]\">{{ req.status }}</div>\n </div>\n <div class=\"requisition-details\">\n <div class=\"detail-item\" v-for=\"field in getRequisitionFields(req)\" :key=\"field.label\">\n <div class=\"detail-label\">{{ field.label }}</div>\n <div class=\"detail-value\">{{ field.value(req) }}</div>\n </div>\n </div>\n <div v-if=\"req.status === 'po-created' || req.status === 'delivered'\"\n class=\"form-group comments-section\">\n <button @click=\"handleOpenPO(req.id)\" class=\"add-item-btn comments-section\">\n Print PO\n </button>\n </div>\n </div>\n </div>\n </div>\n\n <!-- My Requisitions Tab -->\n <div v-if=\"activeTab === 'my-requisitions'\" class=\"tab-content active\">\n <div class=\"requisition-list\">\n <div v-for=\"req in myRequisitions\" :key=\"req.id\" class=\"requisition-card\">\n <div class=\"requisition-header\">\n <div class=\"requisition-id\">{{ req.id }}</div>\n <div :class=\"['status-badge', `status-${req.status}`]\">{{ req.status }}</div>\n </div>\n <div class=\"requisition-details\">\n <div class=\"detail-item\" v-for=\"field in getRequisitionFields(req)\" :key=\"field.label\">\n <div class=\"detail-label\">{{ field.label }}</div>\n <div class=\"detail-value\">{{ field.value(req) }}</div>\n </div>\n </div>\n <div v-if=\"req.status === 'info-requested'\" class=\"form-group comments-section\">\n <label class=\"detail-label\">Your Response</label>\n <textarea v-model=\"infoResponse\" class=\"response-textarea\"\n placeholder=\"Submit more info...\"></textarea>\n <button @click=\"handleSubmitInfoResponse(req)\" class=\"add-item-btn comments-section\">\n Submit Info\n </button>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Pending Approval Tab -->\n <div v-if=\"activeTab === 'approvals'\" class=\"tab-content active\">\n <div style=\"margin-bottom: 20px;\">\n <h3 style=\"color: #1e40af; margin-bottom: 15px;\">Department Supervisor Dashboard</h3>\n <div style=\"background: #fef3c7; padding: 15px; border-radius: 10px; border-left: 4px solid #f59e0b;\">\n <strong>Role:</strong> Department Supervisor - Review requests for accuracy, necessity, and budget\n compliance\n </div>\n </div>\n <div class=\"requisition-list\" id=\"approvalsQueue\">\n <div v-for=\"req in reviewRequisitions\" :key=\"req.id\" class=\"requisition-card\">\n <div class=\"requisition-header\">\n <div class=\"requisition-id\">{{ req.id }}</div>\n </div>\n <div class=\"requisition-details\">\n <div class=\"detail-item\" v-for=\"field in requisitionFields\" :key=\"field.label\">\n <div class=\"detail-label\">{{ field.label }}</div>\n <div class=\"detail-value\">{{ field.value(req) }}</div>\n </div>\n </div>\n <!-- Justification -->\n <div class=\"detail-item\">\n <div class=\"detail-label\">Justification</div>\n <div class=\"detail-value\">{{ req.justification || 'N/A' }}</div>\n </div>\n\n <!-- Item list -->\n <div class=\"detail-item\">\n <div class=\"detail-label\">Items</div>\n <ul class=\"item-list\">\n <li v-for=\"(item, index) in req.items\" :key=\"index\">\n {{ item.desc }} - {{ item.qty }} {{ item.unit }} @ ₦{{ item.cost.toFixed(2) }} each\n </li>\n </ul>\n </div>\n <button type=\"button\" class=\"add-item-btn\" @click=\"handleApproveRequisition(req.id)\">Approve</button>\n <button type=\"button\" class=\"marginbox btn-reject\"\n @click=\"handleDeclineRequisition(req.id)\">Decline</button>\n <button type=\"button\" class=\"marginbox btn-request\" @click=\"handleInfoRequisition(req.id)\">Request\n Info</button>\n </div>\n </div>\n </div>\n\n <!-- Purchasing Queue Tab -->\n <div v-if=\"activeTab === 'purchasing'\" class=\"tab-content active\">\n <div style=\"margin-bottom: 20px;\">\n <h3 style=\"color: #1e40af; margin-bottom: 15px;\">Purchasing Department Dashboard</h3>\n <div style=\"background: #dbeafe; padding: 15px; border-radius: 10px; border-left: 4px solid #3b82f6;\">\n <strong>Role:</strong> Purchasing Team - Convert approved requisitions to Purchase Orders\n </div>\n </div>\n <div class=\"requisition-list\" id=\"purchasingQueue\">\n <div v-for=\"req in poRequisitions\" :key=\"req.id\" class=\"requisition-card\">\n <div class=\"requisition-header\">\n <div class=\"requisition-id\">{{ req.id }}</div>\n </div>\n <div class=\"requisition-details\">\n <div class=\"detail-item\" v-for=\"field in requisitionFields\" :key=\"field.label\">\n <div class=\"detail-label\">{{ field.label }}</div>\n <div class=\"detail-value\">{{ field.value(req) }}</div>\n </div>\n </div>\n <!-- Justification -->\n <div class=\"detail-item\">\n <div class=\"detail-label\">Justification</div>\n <div class=\"detail-value\">{{ req.justification || 'N/A' }}</div>\n </div>\n\n <!-- Item list -->\n <div class=\"detail-item\">\n <div class=\"detail-label\">Items</div>\n <ul class=\"item-list\">\n <li v-for=\"(item, index) in req.items\" :key=\"index\">\n {{ item.desc }} - {{ item.qty }} {{ item.unit }} @ ₦{{ item.cost.toFixed(2) }} each\n </li>\n </ul>\n </div>\n <button type=\"button\" class=\"add-item-btn\" @click=\"handleCreatePO(req.id)\">Create PO</button>\n </div>\n </div>\n </div>\n\n <!-- Receiving Tab -->\n <div v-if=\"activeTab === 'receiving'\" class=\"tab-content active\">\n <div style=\"margin-bottom: 20px;\">\n <h3 style=\"color: #1e40af; margin-bottom: 15px;\">Receiving & Inventory Dashboard</h3>\n <div style=\"background: #dcfce7; padding: 15px; border-radius: 10px; border-left: 4px solid #10b981;\">\n <strong>Role:</strong> Warehouse Team - Process incoming deliveries and update inventory\n </div>\n </div>\n <div class=\"requisition-list\" id=\"receivingQueue\">\n <div v-for=\"req in awaitingDelivery\" :key=\"req.id\" class=\"requisition-card\">\n <div class=\"requisition-header\">\n <div class=\"requisition-id\">{{ req.id }}</div>\n </div>\n <div class=\"requisition-details\">\n <div class=\"detail-item\" v-for=\"field in requisitionFields\" :key=\"field.label\">\n <div class=\"detail-label\">{{ field.label }}</div>\n <div class=\"detail-value\">{{ field.value(req) }}</div>\n </div>\n </div>\n <!-- Justification -->\n <div class=\"detail-item\">\n <div class=\"detail-label\">Justification</div>\n <div class=\"detail-value\">{{ req.justification || 'N/A' }}</div>\n </div>\n\n <!-- Item list -->\n <div class=\"detail-item\">\n <div class=\"detail-label\">Items</div>\n <ul class=\"item-list\">\n <li v-for=\"(item, index) in req.items\" :key=\"index\">\n {{ item.desc }} - {{ item.qty }} {{ item.unit }} @ ₦{{ item.cost.toFixed(2) }} each\n </li>\n </ul>\n </div>\n <button type=\"button\" class=\"add-item-btn\" @click=\"handleAcceptDelivery(req.id)\">Accept\n Delivery</button>\n </div>\n </div>\n </div>\n\n <!-- PO Tab -->\n <div v-if=\"activeTab === 'po'\" class=\"tab-content active\">\n <div class=\"po-content\" id=\"po-content\">\n <div class=\"po-header\">\n <div class=\"company-info\">\n <h3>Vendor Information</h3>\n <div class=\"info-row\">\n <span class=\"info-label\">Company:</span>\n <span class=\"info-value\">{{ vendorInfo.company || poDetails.vendorInfo?.company || 'N/A' }} </span>\n </div>\n <div class=\"info-row\">\n <span class=\"info-label\">Contact:</span>\n <span class=\"info-value\">{{ vendorInfo.contact || poDetails.vendorInfo?.contact || 'N/A' }}</span>\n </div>\n <div class=\"info-row\">\n <span class=\"info-label\">Email:</span>\n <span class=\"info-value\">{{ vendorInfo.email || poDetails.vendorInfo?.email || 'N/A' }}</span>\n </div>\n <div class=\"info-row\">\n <span class=\"info-label\">Phone:</span>\n <span class=\"info-label\">{{ vendorInfo.phone || poDetails.vendorInfo?.phone || 'N/A' }}</span>\n </div>\n <div class=\"info-row\">\n <span class=\"info-label\">Address:</span>\n <span class=\"info-value\">{{ vendorInfo.address || poDetails.vendorInfo?.address || 'N/A' }}</span>\n </div>\n </div>\n\n <div class=\"company-info\">\n <h3>Purchase Order Details</h3>\n <div class=\"info-row\">\n <span class=\"info-label\">PO Number:</span>\n <span class=\"info-value\">{{ poDetails.id }}</span>\n </div>\n <div class=\"info-row\">\n <span class=\"info-label\">Date:</span>\n <span class=\"info-value\">{{ vendorInfo.poDate || poDetails.vendorInfo?.poDate || formatDate(new Date()) }}</span>\n </div>\n <div class=\"info-row\">\n <span class=\"info-label\">Requested By:</span>\n <span class=\"info-value\">{{ vendorInfo.poApproved || poDetails.vendorInfo?.poApproved || 'N/A' }}</span>\n </div>\n <div class=\"info-row\">\n <span class=\"info-label\">Department:</span>\n <span class=\"info-value\">PO-{{ poDetails.department || 'N/A' }}</span>\n </div>\n <div class=\"info-row\">\n <span class=\"info-label\">Delivery Date:</span>\n <span class=\"info-value\">{{ poDetails.neededDate || 'N/A' }}</span>\n </div>\n </div>\n </div>\n\n <div class=\"items-section\">\n <h2 class=\"section-title\">Order Items</h2>\n <table class=\"items-table\">\n <thead>\n <tr>\n <th>Item #</th>\n <th>Description</th>\n <th>Quantity</th>\n <th>Unit Price</th>\n <th>Total</th>\n <th v-if=\"!isPrinting\">Actions</th>\n </tr>\n </thead>\n <tbody>\n <tr v-for=\"(item, index) in poDetails.items || []\" :key=\"index\">\n <td>{{ item.itemNumber || (index + 1) }}</td>\n <td>{{ item.desc }}</td>\n <td>{{ item.qty }}</td>\n <td>\n <span v-if=\"!item.editing\">\n ${{ (item.unitPrice || item.cost || 0).toFixed(2) }}\n <span v-if=\"item.cost !== item.unitPrice && item.unitPrice\" class=\"price-change-indicator\">!</span>\n </span>\n <input v-else v-model.number=\"item.tempPrice\" type=\"number\" step=\"0.01\" min=\"0\"\n class=\"price-input\" :class=\"{ 'price-changed': item.cost !== item.tempPrice }\">\n </td>\n <td>${{ ((item.unitPrice || item.cost || 0) * (item.qty || 0)).toFixed(2) }}</td>\n <td v-if=\"!isPrinting\">\n <button v-if=\"!item.editing\" @click=\"startEdit(index)\" class=\"edit-btn\">\n Edit Price\n </button>\n <div v-else>\n <button @click=\"savePrice(index)\" class=\"save-btn\">Save</button>\n <button @click=\"cancelEdit(index)\" class=\"cancel-btn\">Cancel</button>\n </div>\n </td>\n </tr>\n </tbody>\n </table>\n\n <div v-for=\"(item, index) in poDetails.items || []\" :key=\"'note-' + index\">\n <div v-if=\"item.justification\" class=\"justification-note\">\n <strong>Price Change Justification (Item {{ item.itemNumber || (index + 1) }}):</strong> {{ item.justification\n }}\n </div>\n </div>\n\n <div class=\"totals\">\n <div class=\"total-row\">\n <span>Subtotal:</span>\n <span>${{ subTotal.toFixed(2) }}</span>\n </div>\n <div class=\"total-row\">\n <span>Tax ({{ vendorInfo.tax || poDetails.vendorInfo?.tax || 0 }}%):</span>\n <span>${{ calculateTax().toFixed(2) }}</span>\n </div>\n <div class=\"total-row\">\n <span>Shipping:</span>\n <span>${{ getOptional(vendorInfo.shipping) }}</span>\n </div>\n <div class=\"total-row grand-total\">\n <span>Grand Total:</span>\n <span>${{ grandTotal.toFixed(2) }}</span>\n </div>\n </div>\n </div>\n </div>\n <!-- Justification Modal -->\n <div v-if=\"showJustificationModal\" class=\"justification-modal\" @click.self=\"closeJustificationModal\">\n <div class=\"modal-content\">\n <h3>Price Change Justification Required</h3>\n <p style=\"margin-bottom: 15px; color: #666;\">\n Please provide a justification for changing the price from\n <strong>${{ currentItem?.cost?.toFixed(2) }}</strong> to\n <strong>${{ currentItem?.tempPrice?.toFixed(2) }}</strong>\n </p>\n <textarea v-model=\"justificationText\" class=\"justification-textarea\"\n placeholder=\"Enter justification for price change...\" required></textarea>\n <div class=\"modal-buttons\">\n <button @click=\"closeJustificationModal\" class=\"cancel-btn\">Cancel</button>\n <button @click=\"confirmPriceChange\" class=\"save-btn\" :disabled=\"!justificationText.trim()\">\n Confirm Change\n </button>\n </div>\n </div>\n </div>\n <button v-if=\"!isPrinting\" type=\"button\" class=\"add-item-btn\" @click=\"handleFinishPO(poDetails.id)\">Approve\n PO</button>\n </div>\n\n <!-- Workflow Guide Tab -->\n <div v-if=\"activeTab === 'workflow'\" class=\"tab-content active\">\n <div class=\"workflow-steps\">\n <div class=\"workflow-step\">\n <div class=\"step-icon completed\">1</div>\n <div class=\"step-title\">Request Submitted</div>\n </div>\n <div class=\"workflow-step\">\n <div class=\"step-icon active\">2</div>\n <div class=\"step-title\">Department Review</div>\n </div>\n <div class=\"workflow-step\">\n <div class=\"step-icon\">3</div>\n <div class=\"step-title\">Management Approval</div>\n </div>\n <div class=\"workflow-step\">\n <div class=\"step-icon\">4</div>\n <div class=\"step-title\">Purchase Order Created</div>\n </div>\n <div class=\"workflow-step\">\n <div class=\"step-icon\">5</div>\n <div class=\"step-title\">Order Fulfilled</div>\n </div>\n </div>\n\n <div style=\"background: white; padding: 30px; border-radius: 15px; margin-top: 20px;\">\n <h3 style=\"color: #1e40af; margin-bottom: 20px;\">Requisition Workflow Process</h3>\n <div style=\"line-height: 1.8; color: #374151;\">\n <p><strong>Step 1: Request Identification</strong><br>\n Department or individual identifies need for materials, equipment, or services.</p>\n\n <p><strong>Step 2: Requisition Creation</strong><br>\n Complete requisition form with detailed specifications, quantities, and business justification.</p>\n\n <p><strong>Step 3: Department Review</strong><br>\n Department supervisor reviews request for accuracy, necessity, and budget compliance.</p>\n\n <p><strong>Step 4: Management Approval</strong><br>\n Based on cost thresholds, appropriate management level provides approval.</p>\n\n <p><strong>Step 5: Purchase Order Generation</strong><br>\n Purchasing team converts approved requisition into formal Purchase Order (PO).</p>\n\n <p><strong>Step 6: Vendor Processing</strong><br>\n PO sent to vendor, order processed, and delivery scheduled.</p>\n\n <p><strong>Step 7: Receipt & Inventory</strong><br>\n Goods received, inspected, and entered into inventory system.</p>\n </div>\n </div>\n </div>\n </div>\n</template>\n \n<script>\nexport default {\n name: 'RequisitionSystem',\n props: {\n userProfile: {\n type: Object,\n required: true\n },\n userRole: {\n type: String,\n required: true\n },\n requisitions: {\n type: Array,\n default: () => []\n },\n vessels: {\n type: Array,\n default: () => []\n }\n },\n\n emits: [\n 'submit-requisition',\n 'submit-info-response',\n 'approve-requisition',\n 'decline-requisition',\n 'info-requisition',\n 'create-po',\n 'open-po',\n 'finish-po',\n 'accept-delivery'\n ],\n\n data() {\n return {\n activeTab: 'workflow',\n isPrinting: false,\n infoResponse: '',\n isSubmitting: false,\n\n // Tabs with visibility rules\n tabs: [\n { name: 'new-requisition', label: 'New Requisition', roles: ['requisitor'] },\n { name: 'my-requisitions', label: 'My Requisitions', roles: ['requisitor'] },\n { name: 'all-requisitions', label: 'All Requisitions', roles: ['requisitor', 'supervisor', 'captain', 'owner', 'purchaser'] },\n { name: 'approvals', label: 'Pending Approvals', roles: ['owner', 'supervisor'] },\n { name: 'purchasing', label: 'Purchasing Queue', roles: ['purchaser'] },\n { name: 'receiving', label: 'Receiving', roles: ['requisitor'] },\n { name: 'workflow', label: 'Workflow Guide', roles: ['requisitor', 'supervisor', 'owner', 'purchaser', 'captain'] }\n ],\n\n // Form State\n form: {\n requestor: '',\n department: '',\n project: '',\n neededDate: '',\n justification: '',\n items: []\n },\n\n poDetails: {\n editing: false,\n items: []\n },\n vendorInfo: {},\n justificationText: '',\n currentItemIndex: null,\n showJustificationModal: false,\n\n // common fields\n requisitionFields: [\n { label: 'Requestor', value: req => req.requestor },\n { label: 'Department', value: req => req.department },\n { label: 'Project', value: req => req.project || 'N/A' },\n { label: 'Submitted', value: req => req.submittedDate },\n { label: 'Items', value: req => `${req.items?.length || 0} item(s)` }\n ],\n\n // Fields for My Requisitions display\n requisitionFieldsMap: {\n approved: [\n { label: 'Approved By', value: req => req.approvedBy },\n ],\n declined: [\n { label: 'Declined By', value: req => req.declinedBy },\n { label: 'Rejection Reason', value: req => req.rejectionReason },\n ],\n 'info-requested': [\n { label: 'Info Requester', value: req => req.infoRequestedBy },\n { label: 'Requested Info', value: req => req.requestedInfo }\n ]\n },\n\n // Options\n departments: [\n 'Marine Operations', 'Engineering', 'Maintenance',\n 'Safety & Compliance', 'Logistics', 'Administration',\n 'Engine Room'\n ],\n\n priorities: [\n 'Urgent - Same Day',\n 'High - Within 3 Days',\n 'Normal - Within 1 Week',\n 'Low - Within 2 Weeks'\n ],\n\n units: ['Pieces', 'Kilograms', 'Liters', 'Meters', 'Sets', 'Boxes']\n }\n },\n\n computed: {\n today() {\n return new Date().toISOString().split('T')[0];\n },\n\n visibleTabs() {\n return this.tabs.filter(tab => tab.roles.includes(this.userRole));\n },\n\n subTotal() {\n return (this.poDetails.items || []).reduce((sum, item) => {\n const unitPrice = item.unitPrice || item.cost || 0;\n return sum + (unitPrice * (item.qty || 0));\n }, 0);\n },\n\n grandTotal() {\n return this.subTotal + this.calculateTax() + parseFloat(this.getOptional(this.vendorInfo.shipping));\n },\n\n reviewRequisitions() {\n return (this.requisitions || []).filter(r => r.status === 'under-review');\n },\n\n poRequisitions() {\n return (this.requisitions || []).filter(r => r.status === 'approved');\n },\n\n awaitingDelivery() {\n return (this.requisitions || []).filter(r => r.status === 'po-created');\n },\n\n currentItem() {\n return this.currentItemIndex !== null ? this.poDetails.items[this.currentItemIndex] : null;\n },\n\n myRequisitions() {\n const userId = this.userProfile?.id || this.userProfile?.profile_id;\n return (this.requisitions || []).filter(req => req.profile_id == userId);\n }\n },\n\n methods: {\n setActiveTab(tabName) {\n this.activeTab = tabName;\n },\n\n formatDate(dateString) {\n if (!dateString) return 'N/A';\n const date = new Date(dateString);\n return date.toLocaleDateString();\n },\n\n calculateTax() {\n const taxRate = parseFloat(this.vendorInfo.tax || this.poDetails.vendorInfo?.tax || 0);\n return (this.subTotal * taxRate) / 100;\n },\n\n getOptional(value) {\n return typeof value === 'number' ? value.toFixed(2) : (parseFloat(value) || 0).toFixed(2);\n },\n\n getRequisitionFields(req) {\n const statusFields = this.requisitionFieldsMap[req.status] || [];\n return [...(this.requisitionFields || []), ...statusFields];\n },\n\n addItem() {\n this.form.items.push({\n id: '',\n desc: '',\n qty: 1,\n unit: 'Pieces',\n cost: 0\n });\n },\n\n removeItem(index) {\n this.form.items.splice(index, 1);\n },\n\n startEdit(index) {\n this.poDetails.items[index].editing = true;\n this.poDetails.items[index].tempPrice = this.poDetails.items[index].unitPrice || this.poDetails.items[index].cost;\n },\n\n cancelEdit(index) {\n this.poDetails.items[index].editing = false;\n this.poDetails.items[index].tempPrice = this.poDetails.items[index].unitPrice || this.poDetails.items[index].cost;\n },\n\n savePrice(index) {\n const item = this.poDetails.items[index];\n if (item.tempPrice !== item.cost) {\n // Price changed, require justification\n this.currentItemIndex = index;\n this.showJustificationModal = true;\n } else {\n // No change, just save\n item.unitPrice = item.tempPrice;\n item.editing = false;\n }\n },\n\n confirmPriceChange() {\n if (!this.justificationText.trim()) {\n alert('Please provide a justification for the price change.');\n return;\n }\n\n const item = this.poDetails.items[this.currentItemIndex];\n item.unitPrice = item.tempPrice;\n item.cost = item.tempPrice;\n item.justification = this.justificationText.trim();\n item.editing = false;\n\n this.closeJustificationModal();\n },\n\n closeJustificationModal() {\n this.showJustificationModal = false;\n this.currentItemIndex = null;\n this.justificationText = '';\n },\n\n // Event handlers that emit to parent\n handleSubmitRequisition() {\n if (this.form.items.length === 0) {\n alert('Please add at least one item to the requisition.');\n return;\n }\n\n this.isSubmitting = true;\n const requisition = this.collectFormData('under-review');\n this.$emit('submit-requisition', requisition);\n \n setTimeout(() => {\n this.resetForm();\n this.isSubmitting = false;\n }, 1000);\n },\n\n handleSubmitInfoResponse(req) {\n if (!this.infoResponse || this.infoResponse.trim() === '') {\n alert('Please enter a response before submitting.');\n return;\n }\n this.$emit('submit-info-response', { req, response: this.infoResponse });\n this.infoResponse = '';\n },\n\n handleApproveRequisition(id) {\n this.$emit('approve-requisition', id);\n },\n\n handleDeclineRequisition(id) {\n this.$emit('decline-requisition', id);\n },\n\n handleInfoRequisition(id) {\n this.$emit('info-requisition', id);\n },\n\n handleCreatePO(id) {\n this.$emit('create-po', id);\n },\n\n handleOpenPO(id) {\n this.$emit('open-po', id);\n },\n\n handleFinishPO(id) {\n this.$emit('finish-po', id);\n },\n\n handleAcceptDelivery(id) {\n this.$emit('accept-delivery', id);\n },\n\n collectFormData(status) {\n return {\n id: 'REQ-' + Date.now(),\n requestor: this.userProfile?.full_name || 'Unknown',\n department: this.form.department,\n project: this.form.project,\n neededDate: this.form.neededDate,\n justification: this.form.justification,\n items: this.form.items.map(item => ({ ...item })),\n status,\n submittedDate: new Date().toLocaleDateString(),\n profile_id: this.userProfile?.id || this.userProfile?.profile_id\n };\n },\n\n resetForm() {\n this.form = {\n requestor: '',\n department: '',\n project: '',\n neededDate: '',\n justification: '',\n items: []\n };\n // Add initial item row again\n this.addItem();\n },\n\n // Methods for updating PO details from parent\n updatePODetails(details) {\n this.poDetails = { ...details };\n this.getNumber();\n for (let item of this.poDetails.items || []) {\n item.tempPrice = item.cost || 0;\n item.unitPrice = item.unitPrice || item.cost || 0;\n item.subTotal = item.unitPrice * (item.qty || 0);\n }\n },\n\n updateVendorInfo(info) {\n this.vendorInfo = { ...info };\n },\n\n setPrintingMode(isPrinting) {\n this.isPrinting = isPrinting;\n },\n\n getNumber() {\n return (this.poDetails.items || []).map((item, index) => {\n return item.itemNumber = index + 1;\n });\n }\n },\n\n created() {\n // Initialize form with one item row\n this.addItem();\n }\n}\n</script>\n\n<style>\n.s-container {\n max-width: 1200px;\n margin: 0 auto;\n background: rgba(255, 255, 255, 0.95);\n border-radius: 20px;\n box-shadow: 0 25px 50px rgba(0, 0, 0, 0.25);\n overflow: hidden;\n backdrop-filter: blur(10px);\n font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;\n padding: 20px;\n}\n\n.header h1 {\n font-size: 2.5rem;\n margin-bottom: 10px;\n position: relative;\n z-index: 1;\n}\n\n.header p {\n font-size: 1.1rem;\n opacity: 0.9;\n position: relative;\n z-index: 1;\n}\n\n.nav-tabs {\n display: flex;\n background: #f8fafc;\n border-bottom: 2px solid #e2e8f0;\n overflow-x: auto;\n white-space: nowrap;\n -webkit-overflow-scrolling: touch;\n scrollbar-width: thin;\n}\n\n.nav-tabs::-webkit-scrollbar {\n height: 6px;\n}\n\n.nav-tabs::-webkit-scrollbar-thumb {\n background: #cbd5e1;\n border-radius: 3px;\n}\n\n.nav-tabs::-webkit-scrollbar-track {\n background: transparent;\n}\n\n\n.nav-tab {\n flex: 1;\n padding: 15px 20px;\n background: none;\n border: none;\n cursor: pointer;\n font-size: 1rem;\n font-weight: 600;\n color: #64748b;\n transition: all 0.3s ease;\n position: relative;\n}\n\n.nav-tab:hover {\n background: #e2e8f0;\n color: #1e40af;\n}\n\n.nav-tab.active {\n color: #1e40af;\n background: white;\n}\n\n.nav-tab.active::after {\n content: '';\n position: absolute;\n bottom: -2px;\n left: 0;\n right: 0;\n height: 3px;\n background: #1e40af;\n}\n\n.tab-content {\n display: none;\n padding: 30px;\n animation: fadeIn 0.5s ease-in;\n}\n\n.tab-content.active {\n display: block;\n}\n\n@keyframes fadeIn {\n from {\n opacity: 0;\n transform: translateY(20px);\n }\n\n to {\n opacity: 1;\n transform: translateY(0);\n }\n}\n\n.form-grid {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));\n gap: 25px;\n margin-bottom: 30px;\n}\n\n.form-group {\n display: flex;\n flex-direction: column;\n}\n\n.form-group label {\n font-weight: 600;\n margin-bottom: 8px;\n color: #374151;\n font-size: 0.95rem;\n}\n\n.form-group input,\n.form-group select,\n.form-group textarea {\n padding: 12px 15px;\n border: 2px solid #e5e7eb;\n border-radius: 10px;\n font-size: 1rem;\n transition: all 0.3s ease;\n background: white;\n}\n\n.form-group input:focus,\n.form-group select:focus,\n.form-group textarea:focus {\n outline: none;\n border-color: #3b82f6;\n box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.1);\n}\n\n.form-group textarea {\n min-height: 100px;\n resize: vertical;\n}\n\n.items-section {\n background: #f8fafc;\n border-radius: 15px;\n padding: 25px;\n margin: 25px 0;\n border: 2px solid #e2e8f0;\n}\n\n.items-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 20px;\n}\n\n.items-header h3 {\n color: #1e40af;\n font-size: 1.3rem;\n}\n\n.add-item-btn {\n background: linear-gradient(135deg, #10b981 0%, #059669 100%);\n color: white;\n border: none;\n padding: 10px 20px;\n border-radius: 8px;\n cursor: pointer;\n font-weight: 600;\n transition: all 0.3s ease;\n box-shadow: 0 4px 15px rgba(16, 185, 129, 0.3);\n}\n\n.add-item-btn:hover {\n transform: translateY(-2px);\n box-shadow: 0 6px 20px rgba(16, 185, 129, 0.4);\n}\n\n.item-row {\n display: grid;\n grid-template-columns: 2fr 1fr 1fr 1fr auto;\n gap: 15px;\n align-items: end;\n margin-bottom: 15px;\n padding: 15px;\n background: white;\n border-radius: 10px;\n border: 1px solid #e5e7eb;\n transition: all 0.3s ease;\n}\n\n.item-row:hover {\n box-shadow: 0 4px 15px rgba(0, 0, 0, 0.1);\n}\n\n.marginbox {\n margin: 10px\n}\n\n.item-list {\n list-style: none;\n padding: 0;\n margin: 0.5rem 0;\n}\n\n.item-list li {\n background: #f1f5f9;\n margin-bottom: 0.5rem;\n padding: 0.5rem 0.75rem;\n border-radius: 0.375rem;\n font-size: 0.95rem;\n color: #1e293b;\n display: flex;\n justify-content: space-between;\n align-items: center;\n content: '•';\n color: #3b82f6;\n}\n\n\n.remove-item-btn {\n background: #ef4444;\n color: white;\n border: none;\n padding: 8px 12px;\n border-radius: 6px;\n cursor: pointer;\n font-size: 0.9rem;\n transition: all 0.3s ease;\n}\n\n.remove-item-btn:hover {\n background: #dc2626;\n transform: scale(1.05);\n}\n\n.approval-actions {\n display: flex;\n gap: 10px;\n margin-top: 15px;\n}\n\n.btn-approve {\n background: linear-gradient(135deg, #10b981 0%, #059669 100%);\n color: white;\n border: none;\n padding: 8px 16px;\n border-radius: 6px;\n cursor: pointer;\n font-size: 0.9rem;\n font-weight: 600;\n transition: all 0.3s ease;\n}\n\n.btn-approve:hover {\n transform: translateY(-1px);\n box-shadow: 0 4px 12px rgba(16, 185, 129, 0.3);\n}\n\n.btn-reject {\n background: linear-gradient(135deg, #ef4444 0%, #dc2626 100%);\n color: white;\n border: none;\n padding: 8px 16px;\n border-radius: 6px;\n cursor: pointer;\n font-size: 0.9rem;\n font-weight: 600;\n transition: all 0.3s ease;\n}\n\n.btn-reject:hover {\n transform: translateY(-1px);\n box-shadow: 0 4px 12px rgba(239, 68, 68, 0.3);\n}\n\n.btn-request {\n background: linear-gradient(135deg, #ef9a44 0%, #fa920a 100%);\n color: white;\n border: none;\n padding: 8px 16px;\n border-radius: 6px;\n cursor: pointer;\n font-size: 0.9rem;\n font-weight: 600;\n transition: all 0.3s ease;\n}\n\n.btn-request:hover {\n transform: translateY(-1px);\n box-shadow: 0 4px 12px rgba(240, 162, 52, 0.3);\n}\n\n\n.btn-create-po {\n background: linear-gradient(135deg, #8b5cf6 0%, #7c3aed 100%);\n color: white;\n border: none;\n padding: 8px 16px;\n border-radius: 6px;\n cursor: pointer;\n font-size: 0.9rem;\n font-weight: 600;\n transition: all 0.3s ease;\n}\n\n.btn-create-po:hover {\n transform: translateY(-1px);\n box-shadow: 0 4px 12px rgba(139, 92, 246, 0.3);\n}\n\n.btn-mark-delivered {\n background: linear-gradient(135deg, #06b6d4 0%, #0891b2 100%);\n color: white;\n border: none;\n padding: 8px 16px;\n border-radius: 6px;\n cursor: pointer;\n font-size: 0.9rem;\n font-weight: 600;\n transition: all 0.3s ease;\n}\n\n.btn-mark-delivered:hover {\n transform: translateY(-1px);\n box-shadow: 0 4px 12px rgba(6, 182, 212, 0.3);\n}\n\n.po-info {\n background: #f8fafc;\n padding: 15px;\n border-radius: 8px;\n margin: 10px 0;\n border: 1px solid #e2e8f0;\n}\n\n.po-info h4 {\n color: #1e40af;\n margin-bottom: 10px;\n font-size: 1rem;\n}\n\n.po-details {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(150px, 1fr));\n gap: 10px;\n font-size: 0.9rem;\n}\n\n.items-list {\n background: #f8fafc;\n padding: 15px;\n border-radius: 8px;\n margin: 15px 0;\n border: 1px solid #e2e8f0;\n}\n\n.items-list h4 {\n color: #374151;\n margin-bottom: 10px;\n font-size: 1rem;\n}\n\n.item-detail {\n display: flex;\n justify-content: space-between;\n padding: 8px 0;\n border-bottom: 1px solid #e5e7eb;\n}\n\n.item-detail:last-child {\n border-bottom: none;\n}\n\n.comments-section {\n margin-top: 15px;\n}\n\n.comments-section textarea {\n width: 100%;\n min-height: 80px;\n padding: 10px;\n border: 1px solid #d1d5db;\n border-radius: 6px;\n font-size: 0.9rem;\n resize: vertical;\n}\n\n.role-badge {\n display: inline-block;\n padding: 4px 8px;\n border-radius: 12px;\n font-size: 0.75rem;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n margin-left: 10px;\n}\n\n.role-supervisor {\n background: #fef3c7;\n color: #92400e;\n}\n\n.role-purchasing {\n background: #dbeafe;\n color: #1e40af;\n}\n\n.role-receiving {\n background: #dcfce7;\n color: #166534;\n}\n\n.status-badge {\n display: inline-block;\n padding: 6px 12px;\n border-radius: 20px;\n font-size: 0.85rem;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.status-draft {\n background: #fef3c7;\n color: #92400e;\n}\n\n.status-under-review {\n background: #dbeafe;\n color: #1e40af;\n}\n\n.status-approved {\n background: #dcfce7;\n color: #166534;\n}\n\n.status-declined {\n background: #fee2e2;\n color: #dc2626;\n}\n\n.status-info-requested {\n background: #e8cf12;\n color: #da7212;\n}\n\n.status-po-created {\n background: #e0e7ff;\n color: #4bca38;\n}\n\n.status-pending-supply {\n background: #113fd8;\n color: #4bca38;\n}\n\n.status-delivered {\n background: #f3e8ff;\n color: #7c3aed;\n}\n\n.status-received {\n background: #ecfdf5;\n color: #065f46;\n}\n\n.action-buttons {\n display: flex;\n gap: 15px;\n justify-content: flex-end;\n margin-top: 30px;\n padding-top: 25px;\n border-top: 2px solid #e5e7eb;\n}\n\n.btn-primary-req {\n background: linear-gradient(135deg, #1e40af 0%, #3b82f6 100%);\n color: white;\n box-shadow: 0 4px 15px rgba(30, 64, 175, 0.3);\n padding: 12px 25px;\n border: none;\n border-radius: 10px;\n font-size: 1rem;\n font-weight: 600;\n cursor: pointer;\n transition: all 0.3s ease;\n}\n\n.btn-primary-req:hover:not(:disabled) {\n transform: translateY(-2px);\n box-shadow: 0 6px 20px rgba(30, 64, 175, 0.4);\n}\n\n.btn-primary-req:disabled {\n opacity: 0.6;\n cursor: not-allowed;\n}\n\n.btn-secondary {\n background: #6b7280;\n color: white;\n}\n\n.btn-secondary:hover {\n background: #4b5563;\n transform: translateY(-2px);\n}\n\n.requisition-list {\n display: grid;\n gap: 20px;\n}\n\n.requisition-card {\n background: white;\n border-radius: 15px;\n padding: 25px;\n box-shadow: 0 4px 15px rgba(0, 0, 0, 0.1);\n border: 1px solid #e5e7eb;\n transition: all 0.3s ease;\n}\n\n.requisition-card:hover {\n transform: translateY(-5px);\n box-shadow: 0 8px 25px rgba(0, 0, 0, 0.15);\n}\n\n.requisition-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 15px;\n}\n\n.requisition-id {\n font-size: 1.2rem;\n font-weight: 700;\n color: #1e40af;\n}\n\n.requisition-details {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));\n gap: 15px;\n margin-top: 15px;\n}\n\n.detail-item {\n display: flex;\n flex-direction: column;\n}\n\n.detail-label {\n font-size: 0.85rem;\n font-weight: 600;\n color: #6b7280;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n margin-bottom: 4px;\n}\n\n.detail-value {\n font-size: 1rem;\n color: #374151;\n font-weight: 500;\n}\n\n.workflow-steps {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin: 30px 0;\n padding: 20px;\n background: #f8fafc;\n border-radius: 15px;\n border: 2px solid #e2e8f0;\n}\n\n.workflow-step {\n display: flex;\n flex-direction: column;\n align-items: center;\n flex: 1;\n position: relative;\n}\n\n.workflow-step:not(:last-child)::after {\n content: '';\n position: absolute;\n top: 20px;\n right: -50%;\n width: 100%;\n height: 2px;\n background: #e5e7eb;\n z-index: 1;\n}\n\n.step-icon {\n width: 40px;\n height: 40px;\n border-radius: 50%;\n background: #e5e7eb;\n display: flex;\n align-items: center;\n justify-content: center;\n font-weight: bold;\n color: #6b7280;\n margin-bottom: 10px;\n position: relative;\n z-index: 2;\n}\n\n.step-icon.active {\n background: #3b82f6;\n color: white;\n}\n\n.step-icon.completed {\n background: #10b981;\n color: white;\n}\n\n.step-title {\n font-size: 0.9rem;\n font-weight: 600;\n color: #374151;\n text-align: center;\n}\n\n@media (max-width: 768px) {\n .form-grid {\n grid-template-columns: 1fr;\n }\n\n .item-row {\n grid-template-columns: 1fr;\n gap: 10px;\n }\n\n .action-buttons {\n flex-direction: column;\n }\n\n .workflow-steps {\n flex-direction: column;\n gap: 20px;\n }\n\n .workflow-step::after {\n display: none;\n }\n}\n\n#content {\n width: 100%;\n min-height: 100vh;\n transition: all 0.3s;\n position: absolute;\n padding: 20px;\n padding-left: 40px;\n}\n\n#content.active {\n margin-left: var(--sidebar-width);\n width: calc(100% - var(--sidebar-width));\n}\n\n.po-content {\n padding: 40px;\n}\n\n.po-header {\n display: grid;\n grid-template-columns: 1fr 1fr;\n gap: 40px;\n margin-bottom: 40px;\n}\n\n.company-info,\n.po-details {\n background: #f8f9fa;\n padding: 25px;\n border-radius: 15px;\n border-left: 5px solid #3498db;\n}\n\n.company-info h3,\n.po-details h3 {\n color: #2c3e50;\n margin-bottom: 15px;\n font-size: 1.3rem;\n}\n\n.info-row {\n margin-bottom: 8px;\n display: flex;\n justify-content: space-between;\n}\n\n.info-label {\n font-weight: 600;\n color: #555;\n}\n\n.info-value {\n color: #2c3e50;\n}\n\n.items-section {\n margin-top: 30px;\n}\n\n.section-title {\n color: #2c3e50;\n font-size: 1.5rem;\n margin-bottom: 20px;\n border-bottom: 2px solid #3498db;\n padding-bottom: 10px;\n}\n\n.items-table {\n width: 100%;\n border-collapse: collapse;\n margin-bottom: 30px;\n background: white;\n border-radius: 10px;\n overflow: hidden;\n box-shadow: 0 5px 15px rgba(0, 0, 0, 0.1);\n}\n\n.items-table th {\n background: linear-gradient(135deg, #34495e 0%, #2c3e50 100%);\n color: white;\n padding: 15px;\n text-align: left;\n font-weight: 600;\n}\n\n.items-table td {\n padding: 15px;\n border-bottom: 1px solid #eee;\n vertical-align: middle;\n}\n\n.items-table tr:hover {\n background: #f8f9fa;\n transform: translateY(-1px);\n transition: all 0.3s ease;\n}\n\n.price-input {\n padding: 8px 12px;\n border: 2px solid #ddd;\n border-radius: 8px;\n font-size: 14px;\n width: 100px;\n transition: all 0.3s ease;\n}\n\n.price-input:focus {\n outline: none;\n border-color: #3498db;\n box-shadow: 0 0 0 3px rgba(52, 152, 219, 0.1);\n}\n\n.price-changed {\n background: #fff3cd;\n border-color: #ffc107;\n}\n\n.edit-btn {\n background: #3498db;\n color: white;\n border: none;\n padding: 8px 16px;\n border-radius: 6px;\n cursor: pointer;\n font-size: 12px;\n transition: all 0.3s ease;\n}\n\n.edit-btn:hover {\n background: #2980b9;\n transform: translateY(-2px);\n}\n\n.save-btn {\n background: #27ae60;\n color: white;\n border: none;\n padding: 8px 16px;\n border-radius: 6px;\n cursor: pointer;\n font-size: 12px;\n margin-right: 5px;\n}\n\n.save-btn:disabled {\n background: #95a5a6;\n cursor: not-allowed;\n}\n\n.cancel-btn {\n background: #e74c3c;\n color: white;\n border: none;\n padding: 8px 16px;\n border-radius: 6px;\n cursor: pointer;\n font-size: 12px;\n}\n\n.justification-modal {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background: rgba(0, 0, 0, 0.7);\n display: flex;\n align-items: center;\n justify-content: center;\n z-index: 1000;\n}\n\n.modal-content {\n background: white;\n padding: 30px;\n border-radius: 15px;\n max-width: 500px;\n width: 90%;\n box-shadow: 0 20px 40px rgba(0, 0, 0, 0.3);\n}\n\n.modal-content h3 {\n color: #2c3e50;\n margin-bottom: 20px;\n font-size: 1.3rem;\n}\n\n.justification-textarea {\n width: 100%;\n padding: 15px;\n border: 2px solid #ddd;\n border-radius: 8px;\n font-family: inherit;\n font-size: 14px;\n resize: vertical;\n min-height: 100px;\n}\n\n.justification-textarea:focus {\n outline: none;\n border-color: #3498db;\n box-shadow: 0 0 0 3px rgba(52, 152, 219, 0.1);\n}\n\n.modal-buttons {\n margin-top: 20px;\n display: flex;\n gap: 10px;\n justify-content: flex-end;\n}\n\n.totals {\n background: linear-gradient(135deg, #f8f9fa 0%, #e9ecef 100%);\n padding: 25px;\n border-radius: 15px;\n margin-top: 20px;\n}\n\n.total-row {\n display: flex;\n justify-content: space-between;\n margin-bottom: 10px;\n font-size: 1.1rem;\n}\n\n.total-row.grand-total {\n border-top: 2px solid #3498db;\n padding-top: 15px;\n margin-top: 15px;\n font-weight: bold;\n font-size: 1.3rem;\n color: #2c3e50;\n}\n\n.justification-note {\n background: #fff3cd;\n border: 1px solid #ffc107;\n border-radius: 8px;\n padding: 10px;\n margin-top: 10px;\n font-size: 12px;\n color: #856404;\n}\n\n.price-change-indicator {\n background: #dc3545;\n color: white;\n border-radius: 50%;\n width: 20px;\n height: 20px;\n font-size: 12px;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n margin-left: 5px;\n}\n\n@media (max-width: 768px) {\n .po-header {\n grid-template-columns: 1fr;\n gap: 20px;\n }\n\n .items-table {\n font-size: 14px;\n }\n\n .items-table th,\n .items-table td {\n padding: 10px 8px;\n }\n\n .price-input {\n width: 80px;\n }\n}\n</style>","// ===== src/utils/sidebarConfig.js =====\nexport const createSidebarConfig = (options = {}) => {\n return {\n brandName: options.brandName || 'OceanHelm',\n logoIcon: options.logoIcon || 'bi bi-water',\n showLogo: options.showLogo !== false,\n responsive: options.responsive !== false,\n ...options\n }\n}\n\nexport const defaultMenuItems = [\n {\n type: 'link',\n label: 'Home',\n icon: 'bi bi-house',\n roles: ['owner', 'staff', 'captain'],\n href: '/app/dashboard',\n active: true\n },\n {\n type: 'button',\n label: 'Guide',\n icon: 'bi bi-compass',\n action: 'guide',\n roles: ['crew']\n },\n {\n type: 'link',\n label: 'Activity Log',\n icon: 'bi bi-activity',\n href: '/activity-log',\n roles: ['owner']\n },\n {\n type: 'link',\n label: 'People Manager',\n icon: 'bi bi-person-plus',\n href: '/app/people-manager',\n roles: ['owner']\n },\n {\n type: 'text',\n label: 'Modules'\n },\n {\n type: 'dropdown',\n label: 'Compliance',\n roles: ['owner', 'staff', 'captain'],\n icon: 'bi bi-list-ul',\n children: [\n { label: 'Vessel Certification', action: 'vessel-cert' },\n { label: 'Reports', action: 'reports' },\n { label: 'Crew Certification', action: 'crew-cert' },\n { label: 'QHSE Compliance', action: 'qhse' },\n { label: 'Track Garbage', action: 'garbage' },\n ]\n },\n {\n // ── HR MODULE ──────────────────────────────────────────────────────────\n // Clock-in/out is office-only (owner + staff roles).\n // Payroll and appraisal will also cover crew in a later release.\n type: 'dropdown',\n label: 'HR',\n icon: 'bi bi-people-fill',\n roles: ['owner', 'staff'], \n children: [\n {\n label: 'Attendance', \n action: 'hr-attendance',\n roles: ['owner', 'staff'],\n },\n {\n label: 'Payroll', \n action: 'hr-payroll',\n roles: ['owner', 'staff'],\n },\n {\n label: 'Appraisals', \n action: 'hr-appraisals',\n roles: ['owner', 'staff'],\n },\n {\n label: 'Leave Management',\n action: 'hr-leave',\n roles: ['owner', 'staff'],\n },\n {\n label: 'Disciplinary Log', // Coming next\n action: 'hr-disciplinary',\n roles: ['owner'],\n },\n ]\n },\n /* ── end HR MODULE ── */\n {\n type: 'button',\n label: 'Maintenance',\n icon: 'bi bi-tools',\n action: 'maintenance',\n roles: ['owner', 'staff', 'captain']\n },\n {\n type: 'dropdown',\n label: 'Crew Management',\n icon: 'bi bi-people',\n roles: ['owner', 'staff', 'captain'],\n children: [\n { label: 'All Crew', action: 'crew-all', roles: ['owner', 'staff'] },\n { label: 'Get Crew by Vessel', action: 'crew-by-vessel' },\n { label: 'Schedule', action: 'schedule' },\n ]\n },\n {\n type: 'dropdown',\n label: 'Inventory Management',\n icon: 'bi bi-clipboard-data',\n roles: ['owner', 'staff', 'captain'],\n children: [\n { label: 'Parts Inventory', action: 'inventory', roles: ['owner', 'staff', 'captain'] },\n { label: 'Bunkering', action: 'fuel', roles: ['owner', 'staff', 'captain'] },\n ]\n },\n {\n type: 'link',\n label: 'Requisition Processing',\n icon: 'bi bi-calendar-check',\n href: '/app/requisition',\n roles: ['owner', 'staff', 'captain']\n },\n {\n type: 'button',\n label: 'Voyage Manager',\n icon: 'fas fa-ship',\n action: 'coming-soon',\n roles: ['owner', 'staff', 'captain']\n },\n {\n type: 'button',\n label: 'Vessel Log',\n icon: 'bi bi-file-ruled',\n action: 'coming-soon',\n roles: ['owner', 'staff', 'captain']\n },\n {\n type: 'button',\n label: 'Profile',\n icon: 'bi bi-people',\n action: 'crew-profile',\n roles: ['crew']\n },\n {\n type: 'button',\n label: 'Training',\n icon: 'bi bi-book',\n action: 'crew-training',\n roles: ['crew']\n },\n {\n type: 'button',\n label: 'Settings',\n icon: 'bi bi-gear',\n action: 'settings',\n roles: ['owner', 'staff']\n },\n {\n type: 'button',\n label: 'Help & Support',\n icon: 'bi bi-question-circle',\n action: 'help',\n }\n]","// ===== src/utils/permissions.js =====\nexport const defaultPermissionChecker = (item, userProfile) => {\n // No role restrictions\n if (!item.roles || item.roles.length === 0) {\n return true\n }\n\n // Check if user role is in allowed roles\n return item.roles.includes(userProfile?.role)\n}","// src/index.js - Library entry point\nimport ConfigurableSidebar from './components/ConfigurableSidebar.vue'\nimport VesselList from './components/VesselList.vue'\nimport DashHead from './components/DashHead.vue' \nimport Reports from './components/Reports.vue' \nimport OceanHelmMaintenance from './components/OceanHelmMaintenance.vue'\nimport ActivityLogs from './components/ActivityLogs.vue'\nimport CrewManagement from './components/CrewManagement.vue'\nimport RequisitionSystem from './components/RequisitionSystem.vue'\n\nimport { createSidebarConfig, defaultMenuItems } from './utils/sidebarConfig'\nimport { defaultPermissionChecker } from './utils/permissions'\n\n// Export main components\nexport { ConfigurableSidebar, VesselList, DashHead, Reports, CrewManagement, ActivityLogs, OceanHelmMaintenance, RequisitionSystem }\n\n// Export utilities\nexport { createSidebarConfig, defaultMenuItems, defaultPermissionChecker }\n\n// Export types for TypeScript users\nexport * from './types'\n\n// Default export for plugin-style usage\nexport default {\n install(app, options = {}) {\n app.component('ConfigurableSidebar', ConfigurableSidebar)\n app.component('VesselLists', VesselList)\n app.component('DashHead', DashHead)\n app.component('Reports', Reports)\n app.component('ActivityLogs', ActivityLogs)\n app.component('CrewManagement', CrewManagement)\n app.component('RequisitionSystem', RequisitionSystem)\n app.component('OceanHelmMaintenance', OceanHelmMaintenance)\n\n // Provide global configuration\n app.provide('sidebarConfig', options)\n }\n}"],"names":["_sfc_main","item","child","i","_a","sidebarToggle","sidebar","content","event","isClickInsideSidebar","isClickOnToggleBtn","_hoisted_2","_hoisted_3","_hoisted_8","_createElementBlock","$options","$props","_openBlock","_hoisted_1","_createElementVNode","_toDisplayString","_Fragment","_renderList","index","$event","_withModifiers","_normalizeClass","_createTextVNode","_withDirectives","subItem","subIndex","_hoisted_9","_vShow","_hoisted_10","_hoisted_11","_renderSlot","_ctx","vessel","status","navigationData","action","date","registrationNumber","now","inputDate","diffMs","diffHours","days","hours","result","role","userVessel","expiry_date","today","diffTime","_hoisted_4","_hoisted_5","_hoisted_6","_hoisted_7","_hoisted_14","_hoisted_15","_hoisted_18","_hoisted_19","_hoisted_20","_hoisted_21","_hoisted_22","_hoisted_23","_hoisted_24","_hoisted_26","_hoisted_27","_hoisted_29","_hoisted_31","$data","_cache","args","_hoisted_12","_hoisted_13","_hoisted_16","_hoisted_25","_hoisted_28","_hoisted_30","_hoisted_33","r","_b","ctx","ref","val","prev","reportId","f","report","t","cat","type","file","entityRef","el","key","attachments","imageFiles","reportPdfBytes","err","blob","src","resolve","reject","s","jsPDF","doc","pageW","margin","contentW","y","checkPage","needed","sectionHeading","text","fieldRow","label","value","labelWidth","valLines","hx","participantCount","crewLines","raw","list","colNr","wNr","colName","wName","name","idx","checkQuestions","checkAnswers","q","yes","scenarioText","line","imgFile","dataUrl","props","ratio","iw","ih","e","totalPages","p","labelledBox","minHeight","bodyText","textH","boxH","labelLines","ll","labelH","ty","incLabel","halfW","titleLines","meta","colW","col","row","xo","yo","addSection","heading","allAttachments","zip","safeName","folder","att","bytes","resp","filename","url","a","files","k","sizes","d","_hoisted_17","_hoisted_34","_hoisted_41","_hoisted_42","_hoisted_43","_hoisted_45","_hoisted_46","_hoisted_47","_hoisted_48","_hoisted_49","_hoisted_50","_hoisted_51","_hoisted_53","_hoisted_59","_hoisted_60","_hoisted_61","_hoisted_66","_hoisted_67","_hoisted_68","_hoisted_69","_hoisted_72","_hoisted_76","_hoisted_77","_hoisted_78","_hoisted_79","_hoisted_81","_hoisted_83","_hoisted_84","_hoisted_85","_hoisted_86","_hoisted_87","_hoisted_91","_hoisted_92","_hoisted_93","_hoisted_94","_hoisted_99","_hoisted_100","_hoisted_101","_hoisted_102","_hoisted_103","_hoisted_105","_hoisted_106","_hoisted_107","_hoisted_108","_hoisted_110","_hoisted_113","_hoisted_115","_hoisted_117","_hoisted_120","_hoisted_121","_hoisted_124","_hoisted_125","_hoisted_127","_hoisted_128","_hoisted_129","_hoisted_130","_hoisted_132","_hoisted_133","_hoisted_134","_hoisted_135","_hoisted_136","_hoisted_140","_hoisted_141","_hoisted_142","_hoisted_144","_hoisted_145","_hoisted_146","_hoisted_149","_hoisted_154","_hoisted_158","_hoisted_160","_hoisted_161","_hoisted_162","_hoisted_163","_hoisted_164","_hoisted_165","_hoisted_166","_hoisted_167","_hoisted_169","_hoisted_170","_hoisted_172","_hoisted_177","_hoisted_178","_hoisted_180","_hoisted_182","_hoisted_184","_hoisted_185","_createVNode","_Transition","_hoisted_32","_hoisted_39","_hoisted_40","_hoisted_52","_hoisted_55","_hoisted_56","_hoisted_57","_hoisted_64","_hoisted_65","_hoisted_71","_hoisted_74","_hoisted_75","_hoisted_82","_hoisted_90","_hoisted_96","_hoisted_98","_hoisted_104","_hoisted_109","_hoisted_111","_hoisted_112","_hoisted_114","x","_hoisted_116","_hoisted_118","_vModelSelect","_hoisted_119","_vModelText","_hoisted_122","_hoisted_123","_hoisted_137","_hoisted_138","_hoisted_139","_hoisted_143","_hoisted_147","_hoisted_148","_hoisted_150","_hoisted_152","_hoisted_153","_hoisted_156","_hoisted_157","_hoisted_159","_hoisted_168","_hoisted_171","_hoisted_173","_hoisted_174","_hoisted_175","_hoisted_176","_hoisted_179","_hoisted_181","_hoisted_187","_hoisted_188","newDate","task","query","total","profile","taskId","checklist","newTask","filter","taskComponent","requiredFields","field","section","recurrence","nextDate","nextDueDate","diffDays","taskData","success","updateData","updatedAfter","dateString","completed","_hoisted_35","_hoisted_36","_hoisted_37","_hoisted_38","_hoisted_44","_hoisted_62","_hoisted_63","_hoisted_70","_hoisted_73","_hoisted_80","_hoisted_89","_hoisted_95","_hoisted_97","member","_vModelCheckbox","_hoisted_54","_hoisted_58","_hoisted_88","_normalizeStyle","recommendation","timestamp","log","change","page","cert","companyVerification","v","matchesSearch","matchesStatus","entries","logEntry","b","dateA","dateB","filtered","entry","search","dates","minDate","maxDate","formatDate","breakdown","vessels","isVessel","rolePermissions","mostRecentOnboard","onboardDate","arrivalDate","newGuest","duration","sorted","valA","valB","hasName","hasDate","hasImage","validCertifications","finalRole","certificationsWithUrls","uploadResult","newMember","email","embarkDate","memberId","certification","reader","fileInput","expiryDate","dateStr","expiry","oneMonthFromNow","data","req","tab","sum","unitPrice","userId","tabName","taxRate","statusFields","requisition","id","_c","details","info","isPrinting","_hoisted_126","_hoisted_131","dept","unit","_d","_e","_f","_g","_h","_i","_k","_j","_m","_l","createSidebarConfig","options","defaultMenuItems","defaultPermissionChecker","userProfile","app","ConfigurableSidebar","VesselList","DashHead","Reports","ActivityLogs","CrewManagement","RequisitionSystem","OceanHelmMaintenance"],"mappings":";;;;;;GAwDKA,IAAU;AAAA,EACb,MAAM;AAAA,EAEN,OAAO;AAAA;AAAA,IAEL,WAAW;AAAA,MACT,MAAM;AAAA,MACN,SAAS;AAAA,IACV;AAAA,IACD,UAAU;AAAA,MACR,MAAM;AAAA,MACN,SAAS;AAAA,IACV;AAAA,IACD,UAAU;AAAA,MACR,MAAM;AAAA,MACN,SAAS;AAAA,IACV;AAAA;AAAA,IAGD,WAAW;AAAA,MACT,MAAM;AAAA,MACN,UAAU;AAAA,MACV,SAAS,MAAM,CAAC;AAAA,IACjB;AAAA;AAAA,IAGD,aAAa;AAAA,MACX,MAAM;AAAA,MACN,SAAS,OAAO,CAAA;AAAA,IACjB;AAAA;AAAA,IAGD,YAAY;AAAA,MACV,MAAM;AAAA,MACN,SAAS;AAAA,IACV;AAAA;AAAA,IAGD,eAAe;AAAA,MACb,MAAM;AAAA,MACN,SAAS;AAAA,IACV;AAAA;AAAA,IAGD,mBAAmB;AAAA,MACjB,MAAM;AAAA,MACN,SAAS;AAAA,IACX;AAAA,EACD;AAAA,EAED,UAAU;AAAA,IACR,iBAAiB;AACf,aAAO,KAAK;AAAA,IACb;AAAA,IAED,oBAAoB;AAClB,aAAO,KAAK,UAAU,OAAO,CAAAC,MAEtB,KAAK,cAAcA,CAAI,IAKxBA,EAAK,SAAS,cAAcA,EAAK,WAC5BA,EAAK,SAAS,KAAK,CAAAC,MAAS,KAAK,cAAcA,CAAK,CAAC,IAGvD,KARE,EASV;AAAA,IACH;AAAA,EACD;AAAA,EAED,UAAU;AACR,IAAI,KAAK,cACP,KAAK,6BAA4B;AAAA,EAEpC;AAAA,EAED,SAAS;AAAA,IACP,eAAeD,GAAM;AAErB,WAAK,kBAAkB,QAAQ,CAAAE,MAAK;AAClC,QAAIA,MAAMF,KAAQE,EAAE,SAAS,eAC3BA,EAAE,OAAO;AAAA,MAEb,CAAC,GAEDF,EAAK,OAAO,CAACA,EAAK;AAAA,IACnB;AAAA;AAAA,IAEC,oBAAoBA,GAAM;AACxB,aAAKA,EAAK,WACHA,EAAK,SAAS,OAAO,CAAAC,MAAS,KAAK,cAAcA,CAAK,CAAC,IADnC;IAE5B;AAAA;AAAA,IAGD,cAAcD,GAAM;AAElB,aAAI,KAAK,oBACA,KAAK,kBAAkBA,GAAM,KAAK,WAAW,IAIlD,CAACA,EAAK,SAASA,EAAK,MAAM,WAAW,IAChC,KAGFA,EAAK,MAAM,SAAS,KAAK,YAAY,IAAI;AAAA,IACjD;AAAA;AAAA,IAGD,iBAAiBA,GAAM;;AACrB,WAAK,MAAM,YAAYA,CAAI,GAGvBA,EAAK,QAAQ,CAACA,EAAK,mBACjBA,EAAK,WACP,OAAO,KAAKA,EAAK,MAAM,QAAQ,KAE/BG,IAAA,KAAK,YAAL,QAAAA,EAAc,KAAKH,EAAK;AAAA,IAG7B;AAAA;AAAA,IAGD,aAAaA,GAAM;AACjB,WAAK,MAAM,UAAUA,CAAI;AAAA,IAC1B;AAAA;AAAA,IAGD,gBAAgBA,GAAM;AACpB,WAAK,MAAM,cAAcA,CAAI,GAEzBA,EAAK;AAAA,IAGV;AAAA;AAAA,IAGD,+BAA+B;AAC7B,YAAMI,IAAgB,SAAS,eAAe,eAAe,GACvDC,IAAU,SAAS,eAAe,SAAS,GAC3CC,IAAU,SAAS,eAAe,SAAS;AAEjD,MAAI,CAACF,KAAiB,CAACC,KAAW,CAACC,MAG/B,OAAO,cAAc,QACvBD,EAAQ,UAAU,OAAO,QAAQ,GACjCC,EAAQ,UAAU,OAAO,QAAQ,IAInCF,EAAc,iBAAiB,SAAS,MAAM;AAC5C,QAAAC,EAAQ,UAAU,OAAO,QAAQ,GACjCC,EAAQ,UAAU,OAAO,QAAQ;AAAA,MACnC,CAAC,GAGD,SAAS,iBAAiB,SAAS,CAACC,MAAU;AAC5C,cAAMC,IAAuBH,EAAQ,SAASE,EAAM,MAAM,GACpDE,IAAqBL,EAAc,SAASG,EAAM,MAAM;AAE9D,QAAI,CAACC,KAAwB,CAACC,KAC5B,OAAO,aAAa,OACpBJ,EAAQ,UAAU,SAAS,QAAQ,MACnCA,EAAQ,UAAU,OAAO,QAAQ,GACjCC,EAAQ,UAAU,OAAO,QAAQ;AAAA,MAErC,CAAC;AAAA,IACH;AAAA,EACD;AAAA,EAED,OAAO,CAAC,YAAY,UAAU,YAAY;AAC5C;;EAnOS,OAAM;GACHI,KAAA,EAAA,OAAA,EAA0B,eAAA,OAAA,EAAA,GAI9BC,KAAA,EAAA,OAAM,gCAA+B,mFAuBZC,KAAA,EAAA,OAAM,mBAAkB;;EAUN,OAAM;;;cAxCvDC,EAmDM,OAAA;AAAA,IAnDD,IAAG;AAAA,IAAW,SAAOC,EAAc,cAAA;AAAA;IAEiBC,EAAQ,YAA/DC,KAAAH,EAEM,OAFNI,IAEM;AAAA,MADJC,EAAuD,QAAvDR,IAAuDS,EAAnBJ,EAAS,SAAA,GAAA,CAAA;AAAA;IAI/CG,EAwCK,MAxCLP,IAwCK;AAAA,OAvCHK,EAAA,EAAA,GAAAH,EAsCKO,GAtCuB,MAAAC,EAAAP,EAAA,mBAAhB,CAAAd,GAAMsB,YAAlBT,EAsCK,MAAA;AAAA,QAtC2C,KAAKS;AAAA,QAClD,mBAAmBtB,EAAK,QAAoB,UAAAA,EAAK,SAAI,YAAA;AAAA,QAAoB,SAAK,CAAAuB,MAAET,EAAe,gBAACd,CAAI;AAAA;QAE5FA,EAAK,SAAI,eAAlBa,EAGI,KAAA;AAAA;UAH4B,MAAMb,EAAK,QAAI;AAAA,UAAU,SAAKwB,EAAA,CAAAD,MAAUT,EAAgB,iBAACd,CAAI,GAAA,CAAA,SAAA,CAAA;AAAA;UAC/DA,EAAK,aAAjCa,EAA2C,KAAA;AAAA;YAAvC,OAAKY,EAAEzB,EAAK,IAAI;AAAA;YAAuB,MAC3CmB,EAAGnB,EAAK,KAAK,GAAA,CAAA;AAAA,qBAIDA,EAAK,SAAI,iBAAvBa,EAGI,KAAA;AAAA;UAHmC,SAAKW,EAAA,CAAAD,MAAUT,EAAY,aAACd,CAAI,GAAA,CAAA,SAAA,CAAA;AAAA,UAAG,OAAA,EAAwB,QAAA,UAAA;AAAA;UACpEA,EAAK,aAAjCa,EAA2C,KAAA;AAAA;YAAvC,OAAKY,EAAEzB,EAAK,IAAI;AAAA;YAAuB,MAC3CmB,EAAGnB,EAAK,KAAK,GAAA,CAAA;AAAA,qBAIMA,EAAK,SAAI,mBAA9Ba,EAcWO,GAAA,EAAA,KAAA,EAAA,GAAA;AAAA,UAbTF,EAII,KAAA;AAAA,YAJD,OAAM;AAAA,YAAmB,SAAKM,EAAA,CAAAD,MAAUT,EAAc,eAACd,CAAI,GAAA,CAAA,SAAA,CAAA;AAAA,YAAG,OAAA,EAAwB,QAAA,UAAA;AAAA;YAC3DA,EAAK,aAAjCa,EAA2C,KAAA;AAAA;cAAvC,OAAKY,EAAEzB,EAAK,IAAI;AAAA;YAAuB0B,EAAA,MACxCP,EAAAnB,EAAK,KAAK,IAAG,KAChB,CAAA;AAAA,YAAAkB,EAA6C,KAAA;AAAA,cAA1C,OAAMO,EAAA,CAAA,IAAmB,EAAA,MAAAzB,EAAK,KAAI,CAAA,CAAA;AAAA;;UAGvC2B,EAAAT,EAMK,MANLN,IAMK;AAAA,aALHI,EAAA,EAAA,GAAAH,EAIKO,WAJ6BN,EAAmB,oBAACd,CAAI,GAA9C,CAAA4B,GAASC,YAArBhB,EAIK,MAAA,EAJyD,KAAKgB,KAAQ;AAAA,cACzEX,EAEI,KAAA;AAAA,gBAFD,OAAM;AAAA,gBAAiB,SAAKM,EAAA,CAAAD,MAAUT,EAAY,aAACc,CAAO,GAAA,CAAA,SAAA,CAAA;AAAA,cACxD,GAAAT,EAAAS,EAAQ,KAAK,GAAA,GAAAE,EAAA;AAAA;;YAHV,CAAAC,GAAA/B,EAAK,IAAI;AAAA;kBAUPA,EAAK,SAAI,eAAzBgB,KAAAH,EAA0E,OAA1EmB,EAA0E,KAG5DhC,EAAK,SAAI,eAAvBa,EAEI,KAAAoB,IAAAd,EADCnB,EAAK,KAAK,GAAA,CAAA;;;IAMnBkC,EAA2BC,EAAA,QAAA,QAAA;AAAA;;;ACwF/B,MAAKpC,KAAU;AAAA,EACX,MAAM;AAAA,EAEN,OAAO;AAAA;AAAA,IAEH,SAAS;AAAA,MACL,MAAM;AAAA,MACN,UAAU;AAAA,MACV,SAAS,MAAM,CAAC;AAAA,IACnB;AAAA,IACD,aAAa;AAAA,MACT,MAAM;AAAA,MACN,UAAU;AAAA,MACV,SAAS,OAAO,EAAE,MAAM,UAAU,QAAQ;IAC7C;AAAA;AAAA,IAGD,SAAS;AAAA,MACL,MAAM;AAAA,MACN,SAAS;AAAA,IACZ;AAAA,IACD,cAAc;AAAA,MACV,MAAM;AAAA,MACN,SAAS;AAAA;AAAA,IACZ;AAAA;AAAA,IAGD,QAAQ;AAAA,MACJ,MAAM;AAAA,MACN,SAAS,OAAO;AAAA,QACZ,WAAW;AAAA,QACX,YAAY;AAAA,QACZ,cAAc;AAAA,QACd,oBAAoB;AAAA,QACpB,oBAAoB;AAAA;IAE5B;AAAA,EACH;AAAA,EAED,OAAO;AACH,WAAO;AAAA,MACH,cAAc;AAAA;AAAA;EAErB;AAAA,EAED,OAAO;AAAA,IACH;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACH;AAAA,EAED,UAAU;AAAA,IACN,qBAAqB;AACjB,aAAO,KAAK,QAAQ,OAAO,CAAAqC,MAAUA,EAAO,WAAW,QAAQ,EAAE;AAAA,IACpE;AAAA,IAED,uBAAuB;AACnB,aAAO,KAAK,QAAQ,OAAO,CAAAA,MAAUA,EAAO,WAAW,UAAU,EAAE;AAAA,IACtE;AAAA,IAED,kBAAkB;AACd,aAAI,KAAK,iBAAiB,QACf,KAAK,UAET,KAAK,QAAQ,OAAO,CAAAA,MAAUA,EAAO,WAAW,KAAK,YAAY;AAAA,IAC3E;AAAA,IAED,eAAe;AACX,aAAO,KAAK,OAAO,cACd,KAAK,YAAY,SAAS,WAAW,KAAK,YAAY,SAAS;AAAA,IACxE;AAAA,EACH;AAAA,EAED,SAAS;AAAA;AAAA,IAEL,cAAcC,GAAQ;AAClB,WAAK,eAAeA;AAAA,IACvB;AAAA,IAED,cAAc;AACV,WAAK,eAAe;AAAA,IACvB;AAAA;AAAA,IAGD,kBAAkB;AACd,UAAI,CAAC,KAAK,cAAc;AACpB,aAAK,mBAAmB,YAAY;AACpC;AAAA,MACJ;AACA,WAAK,MAAM,YAAY;AAAA,IAC1B;AAAA,IAED,kBAAkBD,GAAQ;AACtB,YAAME,IAAiB;AAAA,QACnB,QAAAF;AAAA,QACA,OAAO,KAAK;AAAA,QACZ,IAAIA,EAAO;AAAA,QACX,MAAMA,EAAO;AAAA;AAGjB,MAAI,KAAK,YAAYA,CAAM,IACnB,KAAK,iBAAiB,cACtB,KAAK,MAAM,gBAAgBA,CAAM,IAEjC,KAAK,MAAM,mBAAmBE,CAAc,IAGhD,KAAK,mBAAmB,sBAAsB;AAAA,IAErD;AAAA,IAED,mBAAmBF,GAAQ;AACvB,UAAI,CAAC,KAAK,YAAYA,CAAM,GAAG;AAC3B,aAAK,mBAAmB,eAAe;AACvC;AAAA,MACJ;AAEA,MAAK,KAAK,OAAO,gBAIjB,KAAK,MAAM,iBAAiBA,CAAM;AAAA,IACrC;AAAA,IAED,mBAAmBA,GAAQ;AACvB,UAAI,CAAC,KAAK,YAAYA,CAAM,GAAG;AAC3B,aAAK,mBAAmB,sBAAsB;AAC9C;AAAA,MACJ;AAEA,MAAK,KAAK,OAAO,sBAIjB,KAAK,MAAM,wBAAwBA,CAAM;AAAA,IAC5C;AAAA,IAED,iBAAiBA,GAAQ;AACrB,UAAI,CAAC,KAAK,YAAYA,CAAM,GAAG;AAC3B,aAAK,mBAAmB,aAAa;AACrC;AAAA,MACJ;AAEA,MAAK,KAAK,OAAO,cAIjB,KAAK,MAAM,eAAeA,CAAM;AAAA,IACnC;AAAA,IAED,mBAAmBG,GAAQ;AACvB,WAAK,MAAM,iBAAiB,EAAE,QAAAA,GAAQ,aAAa,KAAK,YAAU,CAAG;AAAA,IACxE;AAAA;AAAA,IAGD,YAAYF,GAAQ;AAEhB,aAAO,WADYA,KAAA,gBAAAA,EAAQ,kBAAiB,EACjB;AAAA,IAC9B;AAAA,IAED,YAAYG,GAAMC,GAAoB;AAClC,YAAMC,IAAM,oBAAI,QACVC,IAAY,IAAI,KAAKH,CAAI,GAGzBI,IAASF,IAAMC;AAErB,UAAIC,IAAS;AAAG,eAAO;AAGvB,YAAMC,IAAY,KAAK,MAAMD,KAAU,MAAO,KAAK,GAAG,GAEhDE,IAAO,KAAK,MAAMD,IAAY,EAAE,GAChCE,IAAQF,IAAY;AAE1B,UAAIG,IAAS;AAEb,aAAIF,IAAO,MACPE,KAAU,GAAGF,CAAI,OAAOA,IAAO,IAAI,MAAM,EAAE,KAE3CC,IAAQ,MACRC,MAAWA,IAAS,MAAM,MAAM,GAAGD,CAAK,MAAMA,IAAQ,IAAI,MAAM,EAAE,KAG/DC,KAAU;AAAA,IACpB;AAAA,IAED,cAAcP,GAAoB;AAC9B,WAAK,MAAM,eAAeA,CAAkB;AAAA,IAC/C;AAAA,IAED,YAAYL,GAAQ;AAChB,YAAM,EAAE,MAAAa,GAAM,QAAQC,EAAW,IAAI,KAAK;AAE1C,aAAOD,MAAS,WACZA,MAAS,WACRA,MAAS,aAAaC,MAAed,EAAO;AAAA,IACpD;AAAA,IAED,gBAAgBe,GAAa;AACzB,UAAI,CAACA;AAAa,eAAO;AAEzB,YAAMC,IAAQ,oBAAI,QAEZC,IADS,IAAI,KAAKF,CAAW,IACTC;AAE1B,aADiB,KAAK,KAAKC,KAAY,MAAO,KAAK,KAAK,GAAG;AAAA,IAE9D;AAAA,IAED,eAAeF,GAAa;AACxB,YAAML,IAAO,KAAK,gBAAgBK,CAAW;AAC7C,aAAIL,MAAS,OAAa,KACtBA,IAAO,KAAW,kBAClBA,IAAO,KAAW,iBACf;AAAA,IACX;AAAA,EACJ;AACJ,GAvWS7B,KAAA,EAAA,OAAM,WAAU,GACZP,KAAA,EAAA,OAAM,WAAU,GAKRC,KAAA,EAAA,OAAM,sCAAqC,GAMpC2C,KAAA,EAAA,OAAM,YAAW,GAKhCC,KAAA,EAAA,OAAM,WAAU,GAKRC,KAAA,EAAA,OAAM,sCAAqC,GAMpCC,KAAA,EAAA,OAAM,YAAW;;EAMhC,OAAM;GAcV3B,KAAA,EAAA,OAAM,yDAAwD;;EAWhC,OAAM;AAAA,EAAwB,MAAK;;;EAKlD,OAAM;;;EAQyC,OAAM;AAAA,EAAsB,MAAK;;;EAQjC,OAAM;AAAA,EAAsB,MAAK;GAC5F4B,KAAA,EAAA,OAAM,gBAAe,GACtBC,KAAA,EAAA,OAAM,OAAM;;EAIP,OAAM;qBAGDC,KAAA,EAAA,OAAM,sCAAqC,GAIvCC,KAAA,EAAA,OAAM,cAAa,GACfC,KAAA,EAAA,OAAM,yDAAwD,GAC3DC,KAAA,EAAA,OAAM,kBAAiB,GAG1BC,KAAA,EAAA,OAAM,MAAK,GACPC,KAAA,EAAA,OAAM,QAAO,GAEXC,KAAA,EAAA,OAAM,OAAM;;EAGd,OAAM;GAGAC,KAAA,EAAA,OAAM,OAAM,GAIZC,KAAA,EAAA,OAAM,OAAM;;EAIlB,OAAM;GACAC,KAAA,EAAA,OAAM,aAAY,qBASpCC,KAAA,EAAA,OAAM,4BAA2B;;;IA7HlDpD,EA8CM,OA9CND,IA8CM;AAAA,MA7CFC,EAeM,OAfNR,IAeM;AAAA,QAdFQ,EAaM,OAAA;AAAA,UAbD,OAAKO,EAAA,CAAC,2BAAyB,EAAA,2BAEM8C,EAAY,iBAAA,SAAA,CAAA,CAAA;AAAA,UADhD,gCAAOzD,EAAa,cAAA,QAAA;AAAA,UAErB,OAAA,EAAwB,QAAA,UAAA;AAAA;UACzBI,EAQM,OARNP,IAQM;AAAA,4BAPFO,EAEM,OAAA,EAFD,OAAM,sDAAkD;AAAA,cACzDA,EAAyD,KAAA,EAAtD,OAAM,4CAA2C,CAAA;AAAA;YAExDA,EAGM,OAAA,MAAA;AAAA,cAFFsD,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAAtD,EAAoC,MAAhC,EAAA,OAAM,OAAM,GAAC,kBAAc,EAAA;AAAA,cAC/BA,EAAmD,MAAnDoC,IAAmDnC,EAA1BL,EAAkB,kBAAA,GAAA,CAAA;AAAA;;;;MAK3DI,EAeM,OAfNqC,IAeM;AAAA,QAdFrC,EAaM,OAAA;AAAA,UAbD,OAAKO,EAAA,CAAC,2BAAyB,EAAA,6BAEQ8C,EAAY,iBAAA,WAAA,CAAA,CAAA;AAAA,UADlD,gCAAOzD,EAAa,cAAA,UAAA;AAAA,UAErB,OAAA,EAAwB,QAAA,UAAA;AAAA;UACzBI,EAQM,OARNsC,IAQM;AAAA,4BAPFtC,EAEM,OAAA,EAFD,OAAM,wDAAoD;AAAA,cAC3DA,EAA2D,KAAA,EAAxD,OAAM,8CAA6C,CAAA;AAAA;YAE1DA,EAGM,OAAA,MAAA;AAAA,cAFFsD,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAAtD,EAA8B,MAA1B,EAAA,OAAM,OAAM,GAAC,YAAQ,EAAA;AAAA,cACzBA,EAAqD,MAArDuC,IAAqDtC,EAA5BL,EAAoB,oBAAA,GAAA,CAAA;AAAA;;;;MAMjCA,EAAY,gBAAxCE,KAAAH,EAWM,OAXND,IAWM;AAAA,QAVFM,EASM,OAAA;AAAA,UATD,OAAM;AAAA,UAA2B,mCAAOJ,EAAe,mBAAAA,EAAA,gBAAA,GAAA2D,CAAA;AAAA,UAAE,OAAA,EAAwB,QAAA,UAAA;AAAA;UAClFvD,EAOM,OAAA,EAPD,OAAM,sCAAqC,GAAA;AAAA,YAC5CA,EAEM,OAAA,EAFD,OAAM,mDAAkD,GAAA;AAAA,cACzDA,EAAuD,KAAA,EAApD,OAAM,0CAAyC,CAAA;AAAA;YAEtDA,EAEM,OAAA,MAAA;AAAA,cADFA,EAAoC,MAAhC,EAAA,OAAM,OAAM,GAAC,gBAAc;AAAA;;;;;IAOnDA,EAQM,OARNY,IAQM;AAAA,wBAPFZ,EAAuE,MAAA,EAAnE,OAAM,UAAM;AAAA,QAACA,EAA+B,KAAA,EAA5B,OAAM,kBAAiB,CAAA;AAAA,UAAK,oBAAkB;AAAA;MAExDqD,EAAY,iBAAA,cADtB1D,EAKS,UAAA;AAAA;QAHL,OAAM;AAAA,QACL,mCAAOC,EAAW,eAAAA,EAAA,YAAA,GAAA2D,CAAA;AAAA;QACnBvD,EAAmC,KAAA,EAAhC,OAAM,sBAAqB,GAAA,MAAA,EAAA;AAAA,UAAK,iBACvC,EAAA;AAAA;;IAIOqD,EAAY,iBAAA,SAAvBvD,KAAAH,EAEM,OAFNmB,IAEM;AAAA,0BAFwE,aAClE,EAAA;AAAA,MAAAd,EAAmC,kBAAxBqD,EAAY,YAAA,GAAA,CAAA;AAAA,MAAY7C,EAAA,eAAaP,EAAAL,EAAA,gBAAgB,MAAM,IAAG,MACrF,CAAA;AAAA;IAGWC,EAAO,WAAlBC,EAAA,GAAAH,EAKM,OALNoB,IAKMuC,EAAA,EAAA,MAAAA,EAAA,EAAA,IAAA;AAAA,MAJFtD,EAEM,OAAA;AAAA,QAFD,OAAM;AAAA,QAA8B,MAAK;AAAA;QAC1CA,EAA+C,QAAzC,EAAA,OAAM,kBAAiB,GAAC,YAAU;AAAA;MAE5CA,EAAsC,KAAnC,EAAA,OAAM,OAAM,GAAC,sBAAkB,EAAA;AAAA,YAIrBJ,EAAe,gBAAC,UAAUyD,EAAY,iBAAA,SAAvDvD,EAAA,GAAAH,EAKM,OALN6D,IAKMF,EAAA,EAAA,MAAAA,EAAA,EAAA,IAAA;AAAA,MAJFtD,EAA2C,MAAvC,EAAA,OAAM,gBAAe,GAAC,gBAAY,EAAA;AAAA,MACtCA,EAAkE,WAA/D,+DAA2D,EAAA;AAAA,MAC9DA,EAAI,MAAA,MAAA,MAAA,EAAA;AAAA,MACJA,EAA+F,KAA5F,EAAA,OAAM,OAAM,GAAC,+EAA2E,EAAA;AAAA,YAI9EJ,EAAe,gBAAC,UAAUyD,EAAY,iBAAA,SAAvDvD,KAAAH,EAGM,OAHN8D,IAGM;AAAA,MAFFzD,EAA4D,MAA5DwC,IAA0B,QAAMvC,EAAAoD,EAAA,YAAY,IAAG,YAAQ,CAAA;AAAA,MACvDrD,EAAwF,KAAxFyC,IAAgB,oBAAgBY,EAAY,aAAC,YAAW,CAAA,IAAK,2BAAuB,CAAA;AAAA,WAIxFvD,KAAAH,EA+CM,OA/CN+D,IA+CM;AAAA,cA9CF/D,EA6CMO,GAAA,MAAAC,EA7CiCP,EAAe,iBAAA,CAAzBsB,YAA7BvB,EA6CM,OAAA;AAAA,QA7CD,OAAM;AAAA,QAA8C,KAAKuB,EAAO,sBAAsBA,EAAO;AAAA;QAC9FlB,EA2CM,OAAA;AAAA,UA3CD,OAAM;AAAA,UAAe,SAAK,CAAAK,MAAET,EAAiB,kBAACsB,CAAM;AAAA;UACrDlB,EAmCM,OAnCN0C,IAmCM;AAAA,8BAlCF1C,EAEM,OAAA,EAFD,OAAM,wBAAoB;AAAA,cAC3BA,EAA2B,KAAA,EAAxB,OAAM,cAAa,CAAA;AAAA;YAE1BA,EA8BM,OA9BN2C,IA8BM;AAAA,cA7BF3C,EAGM,OAHN4C,IAGM;AAAA,gBAFF5C,EAAkD,MAAlD6C,IAA+B5C,EAAAiB,EAAO,IAAI,GAAA,CAAA;AAAA,gBAC1ClB,EAAuF,QAAA;AAAA,kBAAhF,OAAyBO,EAAA,CAAA,iBAAAX,EAAA,YAAYsB,EAAO,MAAM,CAAA,CAAA;AAAA,gBAAO,GAAAjB,EAAAiB,EAAO,MAAM,GAAA,CAAA;AAAA;cAEjFlB,EAwBM,OAxBN8C,IAwBM;AAAA,gBAvBF9C,EAGM,OAHN+C,IAGM;AAAA,kBAFFO,EAAA,EAAA,MAAAA,EAAA,EAAA,IAAAtD,EAAiD,SAA1C,EAAA,OAAM,aAAY,GAAC,mBAAe,EAAA;AAAA,kBACzCA,EAAmD,KAAnDgD,IAAmB/C,EAAAiB,EAAO,kBAAkB,GAAA,CAAA;AAAA;gBAGvBA,EAAO,QAAhCpB,KAAAH,EASM,OATNgE,IASM;AAAA,kBARczC,EAAO,WAAM,iBAA7BvB,EAGWO,GAAA,EAAA,KAAA,EAAA,GAAA;AAAA,oBAFPoD,EAAA,EAAA,MAAAA,EAAA,EAAA,IAAAtD,EAAkD,SAA3C,EAAA,OAAM,aAAY,GAAC,oBAAgB,EAAA;AAAA,oBAC1CA,EAA6E,KAA7EiD,IAA6EhD,EAA1DL,EAAW,YAACsB,EAAO,MAAMA,EAAO,kBAAkB,CAAA,GAAA,CAAA;AAAA,kCAEzEvB,EAGWO,GAAA,EAAA,KAAA,EAAA,GAAA;AAAA,oBAFPoD,EAAA,EAAA,MAAAA,EAAA,EAAA,IAAAtD,EAAoD,SAA7C,EAAA,OAAM,aAAY,GAAC,sBAAkB,EAAA;AAAA,oBAC5CA,EAA6E,KAA7EkD,IAA6EjD,EAA1DL,EAAW,YAACsB,EAAO,MAAMA,EAAO,kBAAkB,CAAA,GAAA,CAAA;AAAA;uBAI7EpB,KAAAH,EAMM,OANNiE,IAMM;AAAA,kBALF5D,EAA+D,SAA/DmD,IAA+DlD,EAAlCiB,EAAO,MAAM,IAAG,cAAU,CAAA;AAAA,kBACvDlB,EAGS,UAAA;AAAA,oBAHD,MAAK;AAAA,oBAAS,OAAM;AAAA,oBACvB,SAAYM,EAAA,CAAAD,MAAAT,EAAA,cAAcsB,EAAO,kBAAkB,GAAA,CAAA,MAAA,CAAA;AAAA,qBAAG,cAE3D,GAAA2C,EAAA;AAAA;;;;UAKhB7D,EAEM,OAFNoD,IAEM;AAAA,YADFpD,EAAoE,KAAA;AAAA,cAAjE,OAAM;AAAA,cAAe,SAAKM,EAAA,CAAAD,MAAOT,EAAkB,mBAACsB,CAAM,GAAA,CAAA,MAAA,CAAA;AAAA;;UAEjElB,EAES,UAAA;AAAA,YAFD,OAAM;AAAA,YAAmB,SAAKM,EAAA,CAAAD,MAAOT,EAAkB,mBAACsB,CAAM,GAAA,CAAA,MAAA,CAAA;AAAA,UAC/D,GAAAjB,EAAAiB,EAAO,WAAM,WAAA,kBAAA,aAAA,GAAA,GAAA4C,EAAA;AAAA;;;;;;ACnHpC,MAAKjF,KAAU;AAAA,EACX,MAAM;AAAA,EAEN,OAAO;AAAA,IACH,MAAM;AAAA,MACF,MAAM;AAAA,MACN,UAAU;AAAA,IACb;AAAA,IACD,aAAa;AAAA,MACT,MAAM;AAAA,MACN,UAAU;AAAA,MACV,SAAS,OAAO,EAAE,MAAM,UAAU,QAAQ;IAC9C;AAAA,EACH;AAAA,EAED,OAAO;AAAA,IACH;AAAA,IACA;AAAA,EACH;AAAA,EAED,SAAS;AAAA,IACL,UAAU;AACN,WAAK,MAAM,UAAU;AAAA,IACxB;AAAA,IACD,WAAW;AACP,WAAK,MAAM,WAAW;AAAA,IAC1B;AAAA,EACJ;AACJ,GA3CSkB,KAAA,EAAA,OAAM,gEAA+D,GAClEP,KAAA,EAAA,OAAA,EAA0B,eAAA,OAAA,EAAA,GACzBC,KAAA,EAAA,OAAM,SAAQ;;AAFvB,SAAAK,EAAA,GAAAH,EAWM,OAXNI,IAWM;AAAA,IAVFC,EAA8C,MAA9CR,IAA8CS,EAAZJ,EAAI,IAAA,GAAA,CAAA;AAAA,IACtCG,EAQM,OARNP,IAQM;AAAA,MAPyE,KAAA,YAAY,QAAI,gBAA3FE,EAGS,UAAA;AAAA;QAHD,OAAM;AAAA,QAAgC,gCAAOC,EAAO,QAAA;AAAA;QACxDI,EAA0B,KAAA,EAAvB,OAAM,aAAY,GAAA,MAAA,EAAA;AAAA,QACrBA,EAAsC,QAAhC,EAAA,OAAM,kBAAiB,GAAC,KAAC,EAAA;AAAA;MAEnCA,EAES,UAAA;AAAA,QAFD,OAAM;AAAA,QAA2B,gCAAOJ,EAAQ,SAAA;AAAA;QACpDI,EAAmC,KAAA,EAAhC,OAAM,sBAAqB,GAAA,MAAA,EAAA;AAAA;;;;;ACgrB9C,MAAKnB,KAAU;AAAA,EACX,MAAM;AAAA,EAEN,OAAO;AAAA,IACH,SAAS,EAAE,MAAM,OAAO,SAAS,MAAM,CAAA,EAAI;AAAA,IAC3C,aAAa,EAAE,MAAM,OAAO,SAAS,MAAM,CAAA,EAAI;AAAA,IAC/C,SAAS,EAAE,MAAM,OAAO,SAAS,MAAM,CAAA,EAAI;AAAA,IAC3C,WAAW,EAAE,MAAM,SAAS,SAAS,GAAO;AAAA,IAC5C,cAAc,EAAE,MAAM,SAAS,SAAS,GAAO;AAAA,IAC/C,gBAAgB,EAAE,MAAM,QAAQ,SAAS,KAAM;AAAA,IAC/C,gBAAgB,EAAE,MAAM,OAAO,SAAS,MAAM,CAAA,EAAI;AAAA,IAClD,cAAc,EAAE,MAAM,QAAQ,SAAS,KAAM;AAAA,EAChD;AAAA,EAED,OAAO;AAAA,IACH;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACH;AAAA,EAED,OAAO;AACH,WAAO;AAAA,MACH,WAAW;AAAA,MACX,oBAAoB;AAAA,MACpB,eAAe;AAAA,MACf,gBAAgB;AAAA,MAChB,iBAAiB,CAAE;AAAA,MAEnB,iBAAiB;AAAA,MACjB,eAAe;AAAA,MACf,eAAe;AAAA,MACf,gBAAgB;AAAA,MAChB,iBAAiB;AAAA,MACjB,eAAe;AAAA,MAEf,yBAAyB;AAAA,QACrB;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACH;AAAA,MAED,YAAY,KAAK,UAAW;AAAA;EAEnC;AAAA,EAED,UAAU;AAAA,IACN,eAAe;AAAE,aAAO,KAAK,QAAQ,OAAO,CAAAkF,MAAKA,EAAE,eAAe,OAAO;AAAA,IAAI;AAAA,IAC7E,kBAAkB;AAAE,aAAO,KAAK,QAAQ,OAAO,CAAAA,MAAKA,EAAE,eAAe,UAAU;AAAA,IAAI;AAAA,IACnF,gBAAgB;AACZ,aAAO,KAAK,QAAQ;AAAA,QAAO,CAAAA,MAAA;;AACvB,iBAAAA,EAAE,eAAe,YAChB,CAACA,EAAE,cAAc,GAAC9E,IAAA8E,EAAE,cAAF,QAAA9E,EAAa,WAAW,aAAY,GAAC+E,IAAAD,EAAE,cAAF,QAAAC,EAAa,WAAW;AAAA;AAAA;IAEvF;AAAA,IACD,kBAAkB;AACd,cAAQ,KAAK,WAAS;AAAA,QAClB,KAAK;AAAS,iBAAO,KAAK;AAAA,QAC1B,KAAK;AAAY,iBAAO,KAAK;AAAA,QAC7B,KAAK;AAAU,iBAAO,KAAK;AAAA,QAC3B;AAAS,iBAAO,KAAK;AAAA,MACzB;AAAA,IACH;AAAA,IACD,UAAU;AAEN,cADY,KAAK,WAAW,cAAc,KAAK,WAAW,cAAc,KAAK,WAAW,SACzE,UAAU,QAAQ,mBAAmB,GAAG,EAAE,MAAM,GAAG,EAAE;AAAA,IACvE;AAAA,EACJ;AAAA,EAED,OAAO;AAAA,IACH,gBAAgB;AAAA,MACZ,WAAW;AAAA,MACX,QAAQC,GAAK;AACT,QAAIA,MACA,KAAK,WAAW,cAAcA,EAAI,aAClC,KAAK,WAAW,YAAYA,EAAI,WAChC,KAAK,WAAW,aAAaA,EAAI,YACjC,KAAK,WAAW,eAAeA,EAAI,OACnC,KAAK,WAAW,QAAQA,EAAI,SAAS,YAAYA,EAAI,UAAU,IAC/D,KAAK,WAAW,cAAc,QAC9B,KAAK,WAAW,iBAAiBA,EAAI,gBACrC,KAAK,WAAW,oBAAoBA,EAAI,mBACxC,KAAK,WAAW,iBAAiBA,EAAI,gBACrC,KAAK,WAAW,kBAAkBA,EAAI,iBACtC,KAAK,WAAW,sBAAsBA,EAAI,qBAEtCA,EAAI,gBAAgB,cAAcA,EAAI,sBACtC,KAAK,WAAW,WAAWA,EAAI;AAAA,MAG1C;AAAA,IACJ;AAAA,IACD,cAAc;AAAA,MACV,WAAW;AAAA,MACX,QAAQC,GAAK;AACT,QAAIA,MACA,KAAK,iBAAiBA,GACtB,KAAK,UAAU,MAAM,KAAK,eAAeA,CAAG,CAAC;AAAA,MAEpD;AAAA,IACJ;AAAA,IACD,aAAaC,GAAKC,GAAM;AACpB,MAAIA,MAAS,MAAQD,MAAQ,OACzB,KAAK,kBAAkB,IACvB,KAAK,UAAS;AAAA,IAErB;AAAA,EACJ;AAAA,EAED,SAAS;AAAA;AAAA,IAIL,YAAY;AACR,aAAO;AAAA,QACH,aAAa;AAAA,QAAQ,iBAAiB;AAAA,QAAW,YAAY;AAAA,QAC7D,OAAO;AAAA,QAAI,aAAa;AAAA,QAAI,QAAQ;AAAA,QAAI,UAAU;AAAA,QAClD,OAAM,oBAAI,QAAO,YAAa,EAAC,MAAM,GAAG,EAAE,CAAC;AAAA,QAC3C,UAAU;AAAA,QAAI,mBAAmB;AAAA,QAAI,OAAO,CAAE;AAAA,QAC9C,aAAa;AAAA,QAAI,WAAW;AAAA,QAAI,YAAY;AAAA,QAAI,cAAc;AAAA,QAC9D,gBAAgB;AAAA,QAAI,mBAAmB;AAAA,QAAI,gBAAgB;AAAA,QAC3D,iBAAiB;AAAA,QAAI,qBAAqB;AAAA,QAC1C,iBAAiB;AAAA,QACjB,gBAAgB,CAAC,IAAM,IAAM,IAAM,IAAM,EAAI;AAAA;AAAA,QAE7C,kBAAkB;AAAA,QAClB,aAAa;AAAA,QACb,sBAAsB;AAAA,QACtB,kBAAkB;AAAA,QAClB,gBAAgB;AAAA,QAChB,aAAa;AAAA;IAEpB;AAAA,IAED,kBAAkBE,GAAU;AACxB,aAAO,KAAK,YAAY,OAAO,CAAAC,MAAKA,EAAE,cAAcD,KAAYC,EAAE,aAAaD,CAAQ;AAAA,IAC1F;AAAA,IAED,QAAQE,GAAQ;AACZ,cAAQA,EAAO,aAAaA,EAAO,SAAS,UAAU,QAAQ,mBAAmB,GAAG,EAAE,MAAM,GAAG,EAAE;AAAA,IACpG;AAAA,IAED,gBAAgBA,GAAQ;AACpB,YAAMC,KAAID,KAAA,gBAAAA,EAAQ,gBAAcA,KAAA,gBAAAA,EAAQ;AACxC,aAAIC,MAAM,UAAgB,UACtBA,MAAM,aAAmB,aACtB;AAAA,IACV;AAAA,IAED,gBAAgBD,GAAQ;AACpB,YAAMC,KAAID,KAAA,gBAAAA,EAAQ,gBAAcA,KAAA,gBAAAA,EAAQ;AACxC,UAAIC,MAAM;AAAS,eAAO;AAC1B,UAAIA,MAAM;AAAY,eAAO;AAC7B,YAAMC,KAAMF,KAAA,gBAAAA,EAAQ,oBAAkBA,KAAA,gBAAAA,EAAQ;AAC9C,aAAOE,IAAMA,EAAI,YAAW,IAAK;AAAA,IACpC;AAAA,IAED,SAASC,GAAM;AACX,aAAKA,IACDA,EAAK,WAAW,QAAQ,IAAU,0BAClCA,MAAS,oBAA0B,6BACnCA,EAAK,SAAS,MAAM,IAAU,yBAC9BA,EAAK,SAAS,OAAO,KAAKA,EAAK,SAAS,OAAO,IAAU,0BACtD,oBALW;AAAA,IAMrB;AAAA,IAED,aAAaC,GAAM;AACf,YAAMH,KAAIG,KAAA,gBAAAA,EAAM,SAAQ;AACxB,aAAIH,EAAE,WAAW,QAAQ,IAAU,kBAC/BA,MAAM,oBAA0B,kBAC7B;AAAA,IACV;AAAA;AAAA,IAGD,gBAAgB;AAAE,WAAK,kBAAkB;AAAA,IAAO;AAAA;AAAA,IAIhD,eAAeE,IAAO,QAAQ;AAC1B,WAAK,aAAa,KAAK,aACvB,KAAK,WAAW,cAAcA,GAC1BA,MAAS,UAAU,KAAK,mBACxB,KAAK,WAAW,iBAAiB,KAAK,eAAe,gBACrD,KAAK,WAAW,oBAAoB,KAAK,eAAe,mBACxD,KAAK,WAAW,iBAAiB,KAAK,eAAe,gBACrD,KAAK,WAAW,kBAAkB,KAAK,eAAe,iBACtD,KAAK,WAAW,sBAAsB,KAAK,eAAe,qBAC1D,KAAK,WAAW,cAAc,KAAK,eAAe,aAClD,KAAK,WAAW,YAAY,KAAK,eAAe,WAChD,KAAK,WAAW,aAAa,KAAK,eAAe,YACjD,KAAK,WAAW,eAAe,KAAK,eAAe,OACnD,KAAK,WAAW,QAAQ,KAAK,eAAe,SAAS,YAAY,KAAK,eAAe,UAAU,IAC3F,KAAK,eAAe,gBAAgB,cAAc,KAAK,eAAe,sBACtE,KAAK,WAAW,WAAW,KAAK,eAAe,qBAGvD,KAAK,kBAAkB;AAAA,IAC1B;AAAA,IAED,kBAAkB;AAAE,WAAK,kBAAkB;AAAA,IAAQ;AAAA,IAEnD,kBAAkB;AACd,aAAO,OAAO,KAAK,YAAY;AAAA,QAC3B,aAAa;AAAA,QAAI,WAAW;AAAA,QAAI,YAAY;AAAA,QAAI,cAAc;AAAA,QAC9D,gBAAgB;AAAA,QAAI,mBAAmB;AAAA,QAAI,gBAAgB;AAAA,QAC3D,iBAAiB;AAAA,QAAI,qBAAqB;AAAA,QAAM,iBAAiB;AAAA,MACrE,CAAC;AAAA,IACJ;AAAA,IAED,wBAAwB;AACpB,UAAI,CAAC,KAAK,WAAW;AAAiB;AACtC,YAAMX,IAAI,KAAK,MAAM,KAAK,WAAW,eAAe;AACpD,WAAK,WAAW,cAAcA,EAAE,aAChC,KAAK,WAAW,YAAYA,EAAE,WAC9B,KAAK,WAAW,aAAaA,EAAE,YAC/B,KAAK,WAAW,eAAeA,EAAE,OACjC,KAAK,WAAW,iBAAiBA,EAAE,kBAAkB,IACrD,KAAK,WAAW,oBAAoBA,EAAE,qBAAqB,IAC3D,KAAK,WAAW,iBAAiBA,EAAE,kBAAkB,IACrD,KAAK,WAAW,kBAAkBA,EAAE,mBAAmB,IACvD,KAAK,WAAW,sBAAsBA,EAAE,uBAAuB,MAC1D,KAAK,WAAW,UAAO,KAAK,WAAW,QAAQ,YAAYA,EAAE,UAAU,KACxEA,EAAE,gBAAgB,cAAcA,EAAE,qBAAqB,CAAC,KAAK,WAAW,aACxE,KAAK,WAAW,WAAWA,EAAE;AAAA,IAEpC;AAAA,IAED,sBAAsB;AAClB,MAAI,CAAC,KAAK,WAAW,SAAS,CAAC,KAAK,WAAW,eAAe,CAAC,KAAK,WAAW,YAC/E,KAAK,MAAM,2BAA2B;AAAA,QAClC,aAAa,KAAK,WAAW,gBAAgB,WAAW,WAAW,KAAK,WAAW;AAAA,QACnF,WAAW,KAAK,WAAW,aAAa;AAAA,QACxC,YAAY,KAAK,WAAW,gBAAgB,WACrC,KAAK,WAAW,cAAc,OAC/B,KAAK,WAAW;AAAA,QACtB,OAAO,KAAK,WAAW;AAAA,QACvB,aAAa,KAAK,WAAW;AAAA,QAC7B,QAAQ,KAAK,WAAW,UAAU;AAAA,QAClC,MAAM,KAAK,WAAW;AAAA,QACtB,UAAU,KAAK,WAAW;AAAA,QAC1B,mBAAmB,KAAK,WAAW,qBAAqB;AAAA,QACxD,UAAU;AAAA,QACV,YAAY;AAAA,QACZ,iBAAiB,KAAK,WAAW,gBAAgB,WAAW,KAAK,WAAW,kBAAkB;AAAA,QAC9F,OAAO,KAAK,WAAW;AAAA;AAAA,QAEvB,gBAAgB,KAAK,WAAW,kBAAkB;AAAA,QAClD,gBAAgB,KAAK,WAAW,kBAAkB;AAAA,QAClD,mBAAmB,KAAK,WAAW,qBAAqB;AAAA,QACxD,iBAAiB,KAAK,WAAW,mBAAmB;AAAA,QACpD,qBAAqB,KAAK,WAAW,uBAAuB;AAAA,QAC5D,iBAAiB,CAAC,GAAG,KAAK,WAAW,cAAc;AAAA;AAAA,QAEnD,kBAAkB,KAAK,WAAW,oBAAoB;AAAA,QACtD,aAAa,KAAK,WAAW,eAAe;AAAA,QAC5C,sBAAsB,KAAK,WAAW,wBAAwB;AAAA,QAC9D,kBAAkB,KAAK,WAAW,oBAAoB;AAAA,QACtD,gBAAgB,KAAK,WAAW,kBAAkB;AAAA,QAClD,aAAa,KAAK,WAAW,eAAe;AAAA,MAChD,CAAC;AAAA,IACJ;AAAA,IAED,YAAY;AAAE,WAAK,aAAa,KAAK,UAAW;AAAA,IAAG;AAAA,IAEnD,gBAAgBa,GAAW;AACvB,WAAK,iBAAiBA,GACtB,KAAK,UAAU,MAAM,KAAK,eAAeA,CAAS,CAAC,GACnD,WAAW,MAAM;AAAE,aAAK,iBAAiB;AAAA,MAAM,GAAG,GAAI;AAAA,IACzD;AAAA;AAAA,IAID,WAAWL,GAAQ;AACf,WAAK,gBAAgBA,GACrB,KAAK,gBAAgB,IACrB,KAAK,MAAM,iBAAiBA,CAAM;AAAA,IACrC;AAAA,IAED,cAAc;AACV,WAAK,gBAAgB,IACrB,KAAK,gBAAgB;AAAA,IACxB;AAAA;AAAA,IAGD,oBAAoBF,GAAU;AAC1B,WAAK,YAAW,GAChB,KAAK,MAAM,2BAA2BA,CAAQ;AAAA,IACjD;AAAA,IAED,eAAeH,GAAK;AAChB,WAAK,UAAU,MAAM;;AACjB,cAAMW,IAAK,KAAK,MAAM,YAAYX,CAAG;AACrC,QAAIW,OAAK5F,IAAA,MAAM,QAAQ4F,CAAE,IAAIA,EAAG,CAAC,IAAIA,MAA5B,QAAA5F,EAAiC,eAAe,EAAE,UAAU,UAAU,OAAO,SAAO;AAAA,MACjG,CAAC;AAAA,IACJ;AAAA,IAED,aAAasF,GAAQ;AACjB,WAAK,YAAY;AACjB,YAAMO,IAAM,UAAUP,EAAO;AAC7B,MAAK,KAAK,gBAAgB,SAASO,CAAG,KAAG,KAAK,gBAAgB,KAAKA,CAAG,GACtE,KAAK,UAAU,MAAM;;AACjB,cAAMZ,IAAMK,EAAO,aAAaA,EAAO,IACjCM,IAAK,KAAK,MAAM,YAAYX,CAAG;AACrC,QAAIW,OAAK5F,IAAA,MAAM,QAAQ4F,CAAE,IAAIA,EAAG,CAAC,IAAIA,MAA5B,QAAA5F,EAAiC,eAAe,EAAE,UAAU,UAAU,OAAO,SAAO;AAAA,MACjG,CAAC;AAAA,IACJ;AAAA;AAAA,IAID,MAAM,eAAesF,GAAQ;AACzB,WAAK,gBAAgBA,EAAO;AAC5B,UAAI;AACA,cAAM,KAAK;AACX,cAAMQ,IAAc,KAAK,kBAAkBR,EAAO,EAAE,GAC9CS,IAAaD,EAAY,OAAO,CAAAT,MAAE;;AAAG,kBAAArF,IAAAqF,EAAE,SAAF,gBAAArF,EAAQ,WAAW;AAAA,SAAS,GACjEgG,IAAiB,MAAM,KAAK,gBAAgBV,GAAQS,CAAU;AACpE,cAAM,KAAK,qBAAqBT,GAAQU,GAAgBF,CAAW;AAAA,MACrE,SAAOG,GAAK;AACV,gBAAQ,MAAM,0BAA0BA,CAAG,GAC3C,MAAM,kCAAkCA,EAAI,OAAO;AAAA,MACvD,UAAU;AACN,aAAK,gBAAgB;AAAA,MACzB;AAAA,IACH;AAAA,IAED,MAAM,sBAAsBX,GAAQ;AAChC,WAAK,gBAAgBA,EAAO,KAAK;AACjC,UAAI;AACA,cAAM,KAAK;AACX,cAAMS,IAAa,KAAK,kBAAkBT,EAAO,EAAE,EAAE,OAAO,CAAAD,MAAK;;AAAA,kBAAArF,IAAAqF,EAAE,SAAF,gBAAArF,EAAQ,WAAW;AAAA,SAAS,GACvFgG,IAAiB,MAAM,KAAK,gBAAgBV,GAAQS,CAAU,GAC9DG,IAAO,IAAI,KAAK,CAACF,CAAc,GAAG,EAAE,MAAM,kBAAkB,CAAC;AACnE,aAAK,iBAAiBE,GAAM,GAAG,KAAK,QAAQZ,CAAM,CAAC,aAAa;AAAA,MAClE,SAAOW,GAAK;AACV,cAAM,6BAA6BA,EAAI,OAAO;AAAA,MAClD,UAAU;AACN,aAAK,gBAAgB;AAAA,MACzB;AAAA,IACH;AAAA,IAED,MAAM,iBAAiB;AACnB,MAAK,OAAO,SAAO,MAAM,KAAK,YAAY,qEAAqE,GAC1G,OAAO,SAAO,MAAM,KAAK,YAAY,kEAAkE;AAAA,IAC/G;AAAA,IAED,YAAYE,GAAK;AACb,aAAO,IAAI,QAAQ,CAACC,GAASC,MAAW;AACpC,YAAI,SAAS,cAAc,eAAeF,CAAG,IAAI,GAAG;AAAE,UAAAC;AAAW;AAAA,QAAQ;AACzE,cAAME,IAAI,SAAS,cAAc,QAAQ;AACzC,QAAAA,EAAE,MAAMH,GAAKG,EAAE,SAASF,GAASE,EAAE,UAAUD,GAC7C,SAAS,KAAK,YAAYC,CAAC;AAAA,MAC/B,CAAC;AAAA,IACJ;AAAA;AAAA,IAID,MAAM,gBAAgBhB,GAAQS,IAAa,IAAI;AAC3C,YAAMN,IAAOH,EAAO,cAAcA,EAAO;AACzC,aAAIG,MAAS,UAAgB,KAAK,eAAeH,GAAQS,CAAU,IAC/DN,MAAS,aAAmB,KAAK,kBAAkBH,GAAQS,CAAU,IAClE,KAAK,gBAAgBT,GAAQS,CAAU;AAAA,IACjD;AAAA;AAAA,IAID,MAAM,eAAeT,GAAQS,IAAa,IAAI;;AAC1C,YAAM,EAAE,OAAAQ,EAAM,IAAI,OAAO,OACnBC,IAAM,IAAID,EAAM,EAAE,aAAa,YAAY,MAAM,MAAM,QAAQ,KAAG,CAAG,GACrEE,IAAQ,KAAKC,IAAS,IAAIC,IAAWF,IAAQC,IAAS;AAC5D,UAAIE,IAAI;AAER,YAAMC,IAAY,CAACC,IAAS,OAAO;AAC/B,QAAIF,IAAIE,IAAS,QAAON,EAAI,WAAWI,IAAI;AAAA,SAGzCG,IAAiB,CAACC,MAAS;AAC7B,QAAAH,EAAU,EAAE,GACZL,EAAI,aAAa,IAAI,IAAI,GAAG,GAC5BA,EAAI,KAAKE,GAAQE,GAAGD,GAAU,GAAG,GAAG,GACpCH,EAAI,aAAa,KAAK,KAAK,GAAG,GAC9BA,EAAI,YAAY,GAAG,GACnBA,EAAI,QAAQ,aAAa,MAAM,GAC/BA,EAAI,KAAKQ,EAAK,YAAW,GAAIN,IAAS,GAAGE,IAAI,CAAC,GAC9CA,KAAK,IACLJ,EAAI,aAAa,IAAI,IAAI,EAAE;AAAA,SAGzBS,IAAW,CAACC,GAAOC,GAAOC,IAAa,OAAO;AAChD,QAAAP,EAAU,CAAC,GACXL,EAAI,YAAY,CAAC,GACjBA,EAAI,QAAQ,aAAa,MAAM,GAC/BA,EAAI,aAAa,IAAI,IAAI,GAAG,GAC5BA,EAAI,KAAKU,GAAOR,IAAS,GAAGE,CAAC,GAC7BJ,EAAI,QAAQ,aAAa,QAAQ,GACjCA,EAAI,aAAa,IAAI,IAAI,EAAE,GAC3BA,EAAI,KAAK,KAAKE,IAASU,IAAa,GAAGR,CAAC;AACxC,cAAMS,IAAWb,EAAI,gBAAgB,OAAOW,KAAS,GAAG,GAAGR,IAAWS,IAAa,CAAC;AACpF,QAAAZ,EAAI,KAAKa,GAAUX,IAASU,GAAYR,CAAC,GACzCA,KAAK,KAAK,IAAIS,EAAS,SAAS,GAAG,CAAC,IAAI;AAAA;AAI5C,MAAAb,EAAI,aAAa,IAAI,IAAI,GAAG,GAC5BA,EAAI,KAAK,GAAG,GAAGC,GAAO,IAAI,GAAG,GAC7BD,EAAI,aAAa,KAAK,KAAK,EAAE,GAC7BA,EAAI,aAAa,GAAG,GACpBA,EAAI,KAAKE,GAAQ,MAAMD,IAAQC,GAAQ,IAAI,GAC3CF,EAAI,aAAa,KAAK,KAAK,GAAG,GAC9BA,EAAI,YAAY,EAAE,GAClBA,EAAI,QAAQ,aAAa,MAAM,GAC/BA,EAAI,KAAK,0BAA0BC,IAAQ,GAAG,IAAI,EAAE,OAAO,SAAS,CAAC,GACrED,EAAI,YAAY,CAAC,GACjBA,EAAI,QAAQ,aAAa,QAAQ,GACjCA,EAAI,aAAa,KAAK,KAAK,GAAG,GAC9BA,EAAI,KAAK,2DAA2DC,IAAQ,GAAG,IAAI,EAAE,OAAO,SAAO,CAAG,GACtGG,IAAI,IAGAtB,EAAO,cACPkB,EAAI,aAAa,KAAK,KAAK,GAAG,GAC9BA,EAAI,YAAYC,IAAQC,IAAS,IAAI,IAAI,IAAI,GAAG,GAAG,GAAG,GAAG,GACzDF,EAAI,aAAa,IAAI,IAAI,GAAG,GAC5BA,EAAI,YAAY,CAAC,GACjBA,EAAI,QAAQ,aAAa,MAAM,GAC/BA,EAAI,KAAKlB,EAAO,WAAWmB,IAAQC,IAAS,GAAG,IAAI,EAAE,OAAO,QAAS,CAAA,GACrEF,EAAI,aAAa,IAAI,IAAI,EAAE,IAI/BA,EAAI,aAAa,KAAK,KAAK,GAAG,GAC9BA,EAAI,aAAa,GAAG,GACpBA,EAAI,KAAKE,GAAQE,GAAGD,GAAU,IAAI,GAAG,GACrCH,EAAI,KAAKE,IAASC,IAAW,GAAGC,GAAGF,IAASC,IAAW,GAAGC,IAAI,EAAE,GAChEJ,EAAI,KAAKE,GAAQE,IAAI,IAAIF,IAASC,IAAW,GAAGC,IAAI,EAAE,GAGtDJ,EAAI,YAAY,CAAC,GAAGA,EAAI,QAAQ,aAAa,MAAM,GAAGA,EAAI,aAAa,IAAI,IAAI,GAAG,GAClFA,EAAI,KAAK,WAAWE,IAAS,GAAGE,IAAI,CAAC,GACrCJ,EAAI,QAAQ,aAAa,MAAM,GAAGA,EAAI,aAAa,IAAI,IAAI,EAAE,GAAGA,EAAI,YAAY,EAAE,GAClFA,EAAI,KAAK,OAAOlB,EAAO,UAAU,GAAG,EAAE,YAAW,GAAIoB,IAAS,IAAIE,IAAI,CAAC,GAGvEJ,EAAI,YAAY,CAAC,GAAGA,EAAI,QAAQ,aAAa,MAAM,GAAGA,EAAI,aAAa,IAAI,IAAI,GAAG,GAClFA,EAAI,KAAK,iBAAiBE,IAAS,GAAGE,IAAI,EAAE,GAC5CJ,EAAI,QAAQ,aAAa,QAAQ,GAAGA,EAAI,aAAa,IAAI,IAAI,EAAE,GAC/DA,EAAI,KAAK,GAAGlB,EAAO,QAAQ,GAAG,QAAQA,EAAO,UAAU,GAAG,IAAIoB,IAAS,IAAIE,IAAI,EAAE;AAGjF,YAAMU,IAAKZ,IAASC,IAAW,IAAI;AACnC,MAAAH,EAAI,YAAY,CAAC,GAAGA,EAAI,QAAQ,aAAa,MAAM,GAAGA,EAAI,aAAa,IAAI,IAAI,GAAG,GAClFA,EAAI,KAAK,kBAAkBc,GAAIV,IAAI,CAAC,GACpCJ,EAAI,YAAY,EAAE,GAAGA,EAAI,QAAQ,aAAa,MAAM,GAAGA,EAAI,aAAa,IAAI,IAAI,GAAG,GACnFA,EAAI,KAAK,OAAOlB,EAAO,kBAAkB,GAAG,EAAE,eAAegC,GAAIV,IAAI,EAAE,GACvEJ,EAAI,YAAY,GAAG,GAAGA,EAAI,QAAQ,aAAa,QAAQ,GAAGA,EAAI,aAAa,KAAK,KAAK,GAAG,GACxFA,EAAI,KAAK,sCAAsCc,GAAIV,IAAI,EAAE,GAEzDA,KAAK,IAGLG,EAAe,eAAe,GAC9BE,EAAS,+BAA+B3B,EAAO,cAAc,GAC7D2B,EAAS,YAAY3B,EAAO,eAAe,GAC3C2B,EAAS,cAAc3B,EAAO,iBAAiB,GAC/C2B,EAAS,gBAAgB3B,EAAO,WAAW,GAC3C2B,EAAS,gBAAgB,KAAK,WAAW3B,EAAO,WAAW,CAAC,GAC5DsB,KAAK;AAGL,YAAMW,IAAmBjC,EAAO,uBAAuB;AACvD,MAAAyB,EAAe,0BAA0BQ,CAAgB,UAAUA,MAAqB,IAAI,MAAM,EAAE,eAAe;AAGnH,YAAMC,KAAa,MAAM;AACrB,cAAMC,KAAOnC,EAAO,YAAY,IAAI,KAAI;AACxC,YAAI,UAAU,KAAKmC,CAAG;AAGlB,iBADoBA,EAAI,QAAQ,cAAc,EAAE,EAAE,MAAM,MAAM,EAAE,CAAC,EAC9C,MAAM,QAAQ,EAAE,IAAI,CAAAnB,MAAKA,EAAE,KAAM,CAAA,EAAE,OAAO,OAAO;AAGxE,cAAMoB,IAAO,CAAA;AACb,eAAIpC,EAAO,kBAAgBoC,EAAK,KAAK,GAAGpC,EAAO,cAAc,iBAAiB,GAC1EA,EAAO,eAAeA,EAAO,gBAAgBA,EAAO,kBACpDoC,EAAK,KAAK,GAAGpC,EAAO,WAAW,aAAa,GACzCoC;AAAA;AAIX,MAAAb,EAAU,EAAE;AACZ,YAAMc,IAAQjB,GAAQkB,IAAM,IACtBC,IAAUnB,IAASkB,GAAKE,IAAQnB,IAAWiB;AAEjD,MAAApB,EAAI,aAAa,KAAK,KAAK,GAAG,GAC9BA,EAAI,KAAKmB,GAAOf,GAAGD,GAAU,GAAG,GAAG,GACnCH,EAAI,YAAY,CAAC,GAAGA,EAAI,QAAQ,aAAa,MAAM,GAAGA,EAAI,aAAa,IAAI,IAAI,GAAG,GAClFA,EAAI,KAAK,OAAOmB,IAAQ,GAAGf,IAAI,CAAC,GAChCJ,EAAI,KAAK,eAAeqB,IAAU,GAAGjB,IAAI,CAAC,GAC1CA,KAAK,GAEDY,EAAU,SAAS,IACnBA,EAAU,QAAQ,CAACO,GAAMC,MAAQ;AAC7B,QAAAnB,EAAU,CAAC,GACPmB,IAAM,MAAM,MACZxB,EAAI,aAAa,KAAK,KAAK,GAAG,GAC9BA,EAAI,KAAKmB,GAAOf,IAAI,GAAGD,GAAU,GAAG,GAAG,IAE3CH,EAAI,YAAY,GAAG,GAAGA,EAAI,QAAQ,aAAa,QAAQ,GAAGA,EAAI,aAAa,IAAI,IAAI,EAAE,GACrFA,EAAI,KAAK,OAAOwB,IAAM,CAAC,GAAGL,IAAQ,GAAGf,IAAI,CAAC,GAC1CJ,EAAI,KAAKA,EAAI,gBAAgBuB,GAAMD,IAAQ,CAAC,EAAE,CAAC,GAAGD,IAAU,GAAGjB,IAAI,CAAC,GACpEA,KAAK;AAAA,MACT,CAAC,KAEDC,EAAU,CAAC,GACXL,EAAI,YAAY,GAAG,GAAGA,EAAI,QAAQ,aAAa,QAAQ,GAAGA,EAAI,aAAa,KAAK,KAAK,GAAG,GACxFA,EAAI;AAAA,QACA,GAAGe,CAAgB;AAAA,QACnBM,IAAU;AAAA,QAAGjB,IAAI;AAAA,SAErBA,KAAK,IAETA,KAAK,GAGLG,EAAe,UAAU;AACzB,YAAMkB,IAAiB;AAAA,QACnB;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,SAGEC,KAAgB,MAAM;AACxB,cAAMT,IAAMnC,EAAO,mBAAmBA,EAAO;AAC7C,YAAI,MAAM,QAAQmC,CAAG;AAAG,iBAAOA;AAC/B,YAAI;AAAE,iBAAO,KAAK,MAAMA,CAAG;AAAA,QAAC,QAAU;AAAE,iBAAO,CAAC,IAAM,IAAM,IAAM,IAAM,EAAI;AAAA,QAAG;AAAA;AAEnF,MAAAQ,EAAe,QAAQ,CAACE,GAAGH,MAAQ;AAC/B,QAAAnB,EAAU,CAAC;AACX,cAAMuB,IAAMF,EAAaF,CAAG,MAAM;AAClC,QAAAxB,EAAI,YAAY,GAAG,GAAGA,EAAI,QAAQ,aAAa,QAAQ,GAAGA,EAAI,aAAa,IAAI,IAAI,EAAE,GACrFA,EAAI,KAAK,GAAGwB,IAAM,CAAC,MAAMG,CAAC,IAAIzB,IAAS,GAAGE,IAAI,CAAC,GAC3CwB,KACA5B,EAAI,aAAa,KAAK,KAAK,GAAG,GAC9BA,EAAI,YAAYC,IAAQC,IAAS,IAAIE,IAAI,GAAG,IAAI,GAAG,GAAG,GAAG,GAAG,GAC5DJ,EAAI,aAAa,IAAI,IAAI,EAAE,GAAGA,EAAI,QAAQ,aAAa,MAAM,GAAGA,EAAI,YAAY,GAAG,GACnFA,EAAI,KAAK,OAAOC,IAAQC,IAAS,GAAGE,IAAI,KAAK,EAAE,OAAO,SAAU,CAAA,MAEhEJ,EAAI,aAAa,KAAK,KAAK,GAAG,GAC9BA,EAAI,YAAYC,IAAQC,IAAS,IAAIE,IAAI,GAAG,IAAI,GAAG,GAAG,GAAG,GAAG,GAC5DJ,EAAI,aAAa,KAAK,IAAI,EAAE,GAAGA,EAAI,QAAQ,aAAa,MAAM,GAAGA,EAAI,YAAY,GAAG,GACpFA,EAAI,KAAK,MAAMC,IAAQC,IAAS,GAAGE,IAAI,KAAK,EAAE,OAAO,SAAU,CAAA,IAEnEA,KAAK;AAAA,MACT,CAAC,GACDA,KAAK;AAIL,YAAMyB,KAAgB,MAAM;AACxB,cAAMZ,KAAOnC,EAAO,YAAY,IAAI,KAAI;AACxC,eAAI,UAAU,KAAKmC,CAAG,IAEJA,EAAI,MAAM,OAAO,EAClB,MAAM,CAAC,EAAE,KAAK;AAAA;AAAA,CAAM,EAAE,SAEhCA;AAAA;AAGX,MAAIY,MACAtB,EAAe,2BAA2B,GAC1CF,EAAU,EAAE,GACZL,EAAI,YAAY,CAAC,GAAGA,EAAI,QAAQ,aAAa,QAAQ,GAAGA,EAAI,aAAa,IAAI,IAAI,EAAE,GACrEA,EAAI,gBAAgB6B,GAAc1B,IAAW,CAAC,EACtD,QAAQ,CAAA2B,MAAQ;AAClB,QAAAzB,EAAU,CAAC,GACXL,EAAI,KAAK8B,GAAM5B,IAAS,GAAGE,CAAC,GAC5BA,KAAK;AAAA,MACT,CAAC,GACDA,KAAK,IAILtB,EAAO,sBACPyB,EAAe,kDAAkD,GACjEF,EAAU,EAAE,GACZL,EAAI,YAAY,CAAC,GAAGA,EAAI,QAAQ,aAAa,QAAQ,GAAGA,EAAI,aAAa,IAAI,IAAI,EAAE,GACrEA,EAAI,gBAAgBlB,EAAO,mBAAmBqB,IAAW,CAAC,EAClE,QAAQ,CAAA2B,MAAQ;AAClB,QAAAzB,EAAU,CAAC,GACXL,EAAI,KAAK8B,GAAM5B,IAAS,GAAGE,CAAC,GAC5BA,KAAK;AAAA,MACT,CAAC,GACDA,KAAK,IAITC,EAAU,EAAE,GACZE,EAAe,SAAS,GACxBP,EAAI,aAAa,KAAK,KAAK,GAAG,GAAGA,EAAI,aAAa,GAAG,GACrDA,EAAI,KAAKE,GAAQE,GAAGD,GAAU,IAAI,GAAG,GACrCH,EAAI,YAAY,GAAG,GAAGA,EAAI,QAAQ,aAAa,QAAQ,GAAGA,EAAI,aAAa,KAAK,KAAK,GAAG,GACxFA,EAAI,KAAK,qCAAqCE,IAAS,GAAGE,IAAI,CAAC,GAC/DA,KAAK;AAGL,iBAAW2B,KAAWxC;AAClB,YAAI;AACA,cAAIyC;AAGJ,cAFID,EAAQ,gBAAgB,OAAMC,IAAU,MAAM,KAAK,eAAeD,EAAQ,IAAI,IACzEA,EAAQ,cAAWC,IAAU,MAAM,KAAK,qBAAqBD,EAAQ,SAAS,IACnF,CAACC;AAAS;AACd,UAAA3B,EAAU,EAAE,GACZE,EAAe,iBAAiBwB,EAAQ,IAAI;AAC5C,gBAAME,IAAQjC,EAAI,mBAAmBgC,CAAO,GACtCE,IAAQ,KAAK,IAAI/B,IAAW8B,EAAM,OAAO,KAAKA,EAAM,MAAM,GAC1DE,IAAKF,EAAM,QAAQC,GAAOE,IAAKH,EAAM,SAASC;AACpD,UAAA7B,EAAU+B,IAAK,CAAC,GAChBpC,EAAI,SAASgC,KAASzD,KAAA/E,IAAAuI,EAAQ,SAAR,gBAAAvI,EAAc,MAAM,KAAK,OAAzB,gBAAA+E,EAA6B,kBAAiB,QAAQ2B,GAAQE,GAAG+B,GAAIC,CAAE,GAC7FhC,KAAKgC,IAAK;AAAA,iBACLC,GAAG;AAAE,kBAAQ,KAAK,yBAAyBN,EAAQ,MAAMM,CAAC;AAAA,QAAG;AAO1E,YAAMC,IAAatC,EAAI;AACvB,eAASuC,IAAI,GAAGA,KAAKD,GAAYC;AAC7B,QAAAvC,EAAI,QAAQuC,CAAC,GACbvC,EAAI,aAAa,IAAI,IAAI,GAAG,GAC5BA,EAAI,KAAK,GAAG,KAAKC,GAAO,IAAI,GAAG,GAC/BD,EAAI,aAAa,KAAK,KAAK,GAAG,GAAGA,EAAI,YAAY,GAAG,GAAGA,EAAI,QAAQ,aAAa,QAAQ,GACxFA,EAAI,KAAK,uCAAsC,oBAAI,KAAI,GAAG,mBAAmB,OAAO,CAAC,WAAWuC,CAAC,OAAOD,CAAU,IAAIpC,GAAQ,GAAG,GAC7HpB,EAAO,aAAWkB,EAAI,KAAKlB,EAAO,WAAWmB,IAAQC,GAAQ,KAAK,EAAE,OAAO,QAAS,CAAA;AAG5F,aAAOF,EAAI,OAAO,aAAa;AAAA,IAClC;AAAA;AAAA,IAID,MAAM,kBAAkBlB,GAAQS,IAAa,IAAI;;AAC7C,YAAM,EAAE,OAAAQ,EAAM,IAAI,OAAO,OACnBC,IAAM,IAAID,EAAM,EAAE,aAAa,YAAY,MAAM,MAAM,QAAQ,KAAG,CAAG,GACrEE,IAAQ,KAAKC,IAAS,IAAIC,IAAWF,IAAQC,IAAS;AAC5D,UAAIE,IAAI;AAER,YAAMC,IAAY,CAACC,IAAS,OAAO;AAC/B,QAAIF,IAAIE,IAAS,QAAON,EAAI,WAAWI,IAAI;AAAA,SASzCoC,IAAc,CAAC9B,GAAOF,GAAMiC,IAAY,OAAO;AACjD,cAAMC,IAAWlC,IAAOR,EAAI,gBAAgB,OAAOQ,CAAI,GAAGL,IAAW,CAAC,IAAI,IACpEwC,IAAQD,EAAS,SAAS,KAC1BE,IAAO,KAAK,IAAIH,GAAWE,IAAQ,EAAE;AAC3C,QAAAtC,EAAUuC,IAAO,CAAC,GAElB5C,EAAI,aAAa,KAAK,KAAK,GAAG,GAC9BA,EAAI,aAAa,IAAI,GACrBA,EAAI,KAAKE,GAAQE,GAAGD,GAAUyC,GAAM,GAAG,GAGvC5C,EAAI,YAAY,GAAG,GAAGA,EAAI,QAAQ,aAAa,MAAM,GAAGA,EAAI,aAAa,IAAI,IAAI,GAAG;AACpF,cAAM6C,IAAa7C,EAAI,gBAAgBU,EAAM,eAAeP,IAAW,CAAC;AACxE,QAAA0C,EAAW,QAAQ,CAACC,GAAIvJ,MAAMyG,EAAI,KAAK8C,GAAI5C,IAAS,GAAGE,IAAI,IAAI7G,IAAI,CAAC,CAAC;AACrE,cAAMwJ,IAASF,EAAW,SAAS,IAAI;AAMvC,YAHA7C,EAAI,aAAa,KAAK,KAAK,GAAG,GAAGA,EAAI,aAAa,GAAG,GACrDA,EAAI,KAAKE,IAAS,GAAGE,IAAI2C,IAAS,GAAG7C,IAASC,IAAW,GAAGC,IAAI2C,IAAS,CAAC,GAEtEL,EAAS,SAAS,GAAG;AACrB,UAAA1C,EAAI,YAAY,GAAG,GAAGA,EAAI,QAAQ,aAAa,QAAQ,GAAGA,EAAI,aAAa,IAAI,IAAI,EAAE;AACrF,cAAIgD,IAAK5C,IAAI2C,IAAS;AACtB,UAAAL,EAAS,QAAQ,CAAAZ,MAAQ;AAAE,YAAA9B,EAAI,KAAK8B,GAAM5B,IAAS,GAAG8C,CAAE,GAAGA,KAAM;AAAA,UAAM,CAAA;AAAA,QAC3E;AAEA,QAAA5C,KAAKwC,IAAO;AAAA;AAIhB,MAAA5C,EAAI,aAAa,IAAI,IAAI,GAAG,GAC5BA,EAAI,KAAK,GAAG,GAAGC,GAAO,IAAI,GAAG,GAC7BD,EAAI,aAAa,KAAK,KAAK,GAAG,GAC9BA,EAAI,YAAY,EAAE,GAAGA,EAAI,QAAQ,aAAa,MAAM;AACpD,YAAMiD,KAAYnE,EAAO,kBAAkBA,EAAO,cAAc,YAAY,YAAc,IAAE;AAC5F,MAAAkB,EAAI,KAAKiD,GAAU/C,GAAQ,EAAE,GAC7BF,EAAI,YAAY,GAAG,GAAGA,EAAI,QAAQ,aAAa,QAAQ,GAAGA,EAAI,aAAa,KAAK,KAAK,GAAG,GACxFA,EAAI,KAAK,QAAQlB,EAAO,aAAa,GAAG,IAAImB,IAAQC,GAAQ,GAAG,EAAE,OAAO,QAAS,CAAA,GACjFF,EAAI,KAAK,SAASlB,EAAO,QAAQ,GAAG,IAAImB,IAAQC,GAAQ,IAAI,EAAE,OAAO,QAAS,CAAA,GAC9EE,IAAI,IAGJJ,EAAI,YAAY,CAAC,GAAGA,EAAI,QAAQ,aAAa,MAAM,GAAGA,EAAI,aAAa,IAAI,IAAI,GAAG,GAClFA,EAAI,KAAK,gBAAgBE,GAAQE,IAAI,CAAC,GACtCJ,EAAI,QAAQ,aAAa,QAAQ,GAAGA,EAAI,aAAa,IAAI,IAAI,EAAE,GAC/DA,EAAI,KAAKlB,EAAO,aAAa,KAAKoB,IAAS,IAAIE,IAAI,CAAC,GACpDJ,EAAI,QAAQ,aAAa,MAAM,GAAGA,EAAI,aAAa,IAAI,IAAI,GAAG,GAC9DA,EAAI,KAAK,iBAAiBC,IAAQ,GAAGG,IAAI,CAAC,GAC1CJ,EAAI,QAAQ,aAAa,QAAQ,GAAGA,EAAI,aAAa,IAAI,IAAI,EAAE,GAC/DA,EAAI,KAAKlB,EAAO,eAAe,KAAKmB,IAAQ,IAAI,IAAIG,IAAI,CAAC,GACzDA,KAAK;AAGL,YAAM8C,KAAS/C,IAAW,KAAK;AAC/B,MAAAH,EAAI,aAAa,KAAK,KAAK,GAAG,GAAGA,EAAI,aAAa,IAAI,GACtDA,EAAI,KAAKE,GAAQE,GAAG8C,GAAO,IAAI,GAAG,GAClClD,EAAI,KAAKE,IAASgD,IAAQ,GAAG9C,GAAG8C,GAAO,IAAI,GAAG,GAE9ClD,EAAI,YAAY,GAAG,GAAGA,EAAI,QAAQ,aAAa,MAAM,GAAGA,EAAI,aAAa,IAAI,IAAI,GAAG,GACpFA,EAAI,KAAK,eAAeE,IAAS,GAAGE,IAAI,CAAC,GACzCJ,EAAI,KAAK,mBAAmBE,IAASgD,IAAQ,GAAG9C,IAAI,CAAC,GACrDJ,EAAI,YAAY,EAAE,GAAGA,EAAI,QAAQ,aAAa,MAAM,GAAGA,EAAI,aAAa,IAAI,IAAI,EAAE,GAClFA,EAAI,KAAK,OAAOlB,EAAO,UAAU,GAAG,GAAGoB,IAAS,GAAGE,IAAI,EAAE,GACzDJ,EAAI;AAAA,QACA,GAAGlB,EAAO,kBAAkB,GAAG,QAAQA,EAAO,YAAYA,EAAO,kBAAkB,GAAG;AAAA,QACtFoB,IAASgD,IAAQ;AAAA,QAAG9C,IAAI;AAAA,SAE5BA,KAAK,IAGLJ,EAAI,aAAa,KAAK,KAAK,GAAG,GAAGA,EAAI,aAAa,IAAI,GACtDA,EAAI,KAAKE,GAAQE,GAAG8C,GAAO,IAAI,GAAG,GAClClD,EAAI,KAAKE,IAASgD,IAAQ,GAAG9C,GAAG8C,GAAO,IAAI,GAAG,GAC9ClD,EAAI,YAAY,GAAG,GAAGA,EAAI,QAAQ,aAAa,MAAM,GAAGA,EAAI,aAAa,IAAI,IAAI,GAAG,GACpFA,EAAI,KAAK,qBAAqBE,IAAS,GAAGE,IAAI,CAAC,GAC/CJ,EAAI,KAAK,QAAQE,IAASgD,IAAQ,GAAG9C,IAAI,CAAC,GAC1CJ,EAAI,YAAY,CAAC,GAAGA,EAAI,QAAQ,aAAa,QAAQ,GAAGA,EAAI,aAAa,IAAI,IAAI,EAAE,GACnFA,EAAI,KAAK,KAAKE,IAAS,GAAGE,IAAI,CAAC,GAC/BJ,EAAI,KAAKlB,EAAO,QAAQ,KAAKoB,IAASgD,IAAQ,GAAG9C,IAAI,CAAC,GACtDA,KAAK,IAILoC,EAAY,wBAAwB1D,EAAO,UAAU,EAAE,GAEvD0D;AAAA,QACI;AAAA;AAAA,QACA1D,EAAO,oBAAoB;AAAA,QAC3B;AAAA,SAGJ0D;AAAA,QACI;AAAA;AAAA,QACA1D,EAAO,eAAe;AAAA,QACtB;AAAA,SAGJ0D,EAAY,0BAA0B1D,EAAO,wBAAwB,MAAM,EAAE,GAE7E0D;AAAA,QACI;AAAA;AAAA,QACA1D,EAAO,oBAAoB;AAAA,QAC3B;AAAA,SAGJ0D;AAAA,QACI;AAAA;AAAA,QACA1D,EAAO,kBAAkB;AAAA,QACzB;AAAA,SAGJ0D,EAAY,gDAAgD1D,EAAO,qBAAqB,MAAM,EAAE,GAEhG0D,EAAY,qBAAqB1D,EAAO,eAAe,MAAM,EAAE;AAG/D,iBAAWiD,KAAWxC;AAClB,YAAI;AACA,cAAIyC;AAGJ,cAFID,EAAQ,gBAAgB,OAAMC,IAAU,MAAM,KAAK,eAAeD,EAAQ,IAAI,IACzEA,EAAQ,cAAWC,IAAU,MAAM,KAAK,qBAAqBD,EAAQ,SAAS,IACnF,CAACC;AAAS;AACd,UAAA3B,EAAU,EAAE,GACZL,EAAI,aAAa,KAAK,KAAK,GAAG,GAC9BA,EAAI,KAAKE,GAAQE,GAAGD,GAAU,GAAG,GAAG,GACpCH,EAAI,YAAY,CAAC,GAAGA,EAAI,QAAQ,aAAa,MAAM,GAAGA,EAAI,aAAa,IAAI,IAAI,GAAG,GAClFA,EAAI,KAAK,iBAAiB+B,EAAQ,MAAM7B,IAAS,GAAGE,IAAI,CAAC,GACzDA,KAAK;AACL,gBAAM6B,IAAQjC,EAAI,mBAAmBgC,CAAO,GACtCE,IAAQ,KAAK,IAAI/B,IAAW8B,EAAM,OAAO,KAAKA,EAAM,MAAM,GAC1DE,IAAKF,EAAM,QAAQC,GAAOE,IAAKH,EAAM,SAASC;AACpD,UAAA7B,EAAU+B,IAAK,CAAC,GAChBpC,EAAI,SAASgC,KAASzD,KAAA/E,IAAAuI,EAAQ,SAAR,gBAAAvI,EAAc,MAAM,KAAK,OAAzB,gBAAA+E,EAA6B,kBAAiB,QAAQ2B,GAAQE,GAAG+B,GAAIC,CAAE,GAC7FhC,KAAKgC,IAAK;AAAA,iBACLC,GAAG;AAAE,kBAAQ,KAAK,yBAAyBN,EAAQ,MAAMM,CAAC;AAAA,QAAG;AAI1E,MAAAhC,EAAU,EAAE,GACZD,KAAK,GACLJ,EAAI,YAAY,GAAG,GAAGA,EAAI,QAAQ,aAAa,QAAQ,GAAGA,EAAI,aAAa,KAAK,KAAK,GAAG,GACxFA,EAAI,KAAK,2EAA2EE,GAAQE,CAAC,GAC7FA,KAAK;AAGL,YAAMkC,IAAatC,EAAI;AACvB,eAASuC,IAAI,GAAGA,KAAKD,GAAYC;AAC7B,QAAAvC,EAAI,QAAQuC,CAAC,GACbvC,EAAI,aAAa,IAAI,IAAI,GAAG,GAC5BA,EAAI,KAAK,GAAG,KAAKC,GAAO,IAAI,GAAG,GAC/BD,EAAI,aAAa,KAAK,KAAK,GAAG,GAAGA,EAAI,YAAY,GAAG,GAAGA,EAAI,QAAQ,aAAa,QAAQ,GACxFA,EAAI,KAAK,gCAA+B,oBAAI,KAAI,GAAG,mBAAmB,OAAO,CAAC,WAAWuC,CAAC,OAAOD,CAAU,IAAIpC,GAAQ,GAAG,GACtHpB,EAAO,aAAWkB,EAAI,KAAKlB,EAAO,WAAWmB,IAAQC,GAAQ,KAAK,EAAE,OAAO,QAAS,CAAA;AAG5F,aAAOF,EAAI,OAAO,aAAa;AAAA,IAClC;AAAA;AAAA,IAID,MAAM,gBAAgBlB,GAAQS,IAAa,IAAI;;AAC3C,YAAM,EAAE,OAAAQ,EAAM,IAAI,OAAO,OACnBC,IAAM,IAAID,EAAM,EAAE,aAAa,YAAY,MAAM,MAAM,QAAQ,KAAG,CAAG,GACrEG,IAAS,IAAID,IAAQ,KAAKE,IAAWF,IAAQC,IAAS;AAC5D,UAAIE,IAAI;AAER,MAAAJ,EAAI,aAAa,IAAI,IAAI,GAAG,GAC5BA,EAAI,KAAK,GAAG,GAAGC,GAAO,IAAI,GAAG,GAC7BD,EAAI,aAAa,KAAK,KAAK,GAAG,GAC9BA,EAAI,YAAY,EAAE,GAAGA,EAAI,QAAQ,aAAa,MAAM,GACpDA,EAAI,KAAK,eAAeE,GAAQ,EAAE,GAClCF,EAAI,YAAY,CAAC,GAAGA,EAAI,QAAQ,aAAa,QAAQ,GACrDA,EAAI,KAAK,KAAK,gBAAgBlB,CAAM,GAAGoB,GAAQ,EAAE,GAC7CpB,EAAO,cACPkB,EAAI,YAAY,EAAE,GAAGA,EAAI,QAAQ,aAAa,MAAM,GACpDA,EAAI,KAAKlB,EAAO,WAAWmB,IAAQC,GAAQ,IAAI,EAAE,OAAO,QAAQ,CAAC,IAErEE,IAAI,IAEJJ,EAAI,aAAa,IAAI,IAAI,GAAG,GAAGA,EAAI,YAAY,EAAE,GAAGA,EAAI,QAAQ,aAAa,MAAM;AACnF,YAAMmD,IAAanD,EAAI,gBAAgBlB,EAAO,OAAOqB,CAAQ;AAC7D,MAAAH,EAAI,KAAKmD,GAAYjD,GAAQE,CAAC,GAC9BA,KAAK+C,EAAW,SAAS,IAAI,GAE7BnD,EAAI,aAAa,KAAK,KAAK,GAAG,GAAGA,EAAI,KAAKE,GAAQE,GAAGH,IAAQC,GAAQE,CAAC,GAAGA,KAAK;AAE9E,YAAMgD,IAAO;AAAA,QACT,CAAC,gBAAgBtE,EAAO,eAAe,GAAG;AAAA,QAC1C,CAAC,QAAQA,EAAO,QAAQ,GAAG;AAAA,QAC3B,CAAC,qBAAqBA,EAAO,UAAU,GAAG;AAAA,QAC1C,CAAC,gBAAgB,KAAK,WAAWA,EAAO,WAAW,CAAC;AAAA;AAExD,MAAIA,EAAO,kBAAgBsE,EAAK,OAAO,GAAG,GAAG,CAAC,YAAYtE,EAAO,cAAc,CAAC;AAEhF,YAAMuE,IAAOlD,IAAW;AACxB,MAAAiD,EAAK,QAAQ,CAAC/J,GAAMmI,MAAQ;AACxB,cAAM8B,IAAM9B,IAAM,GAAG+B,IAAM,KAAK,MAAM/B,IAAM,CAAC,GACvCgC,IAAKtD,IAASoD,IAAMD,GAAMI,IAAKrD,IAAImD,IAAM;AAC/C,QAAAvD,EAAI,YAAY,CAAC,GAAGA,EAAI,QAAQ,aAAa,MAAM,GAAGA,EAAI,aAAa,KAAK,KAAK,GAAG,GACpFA,EAAI,KAAK3G,EAAK,CAAC,EAAE,eAAemK,GAAIC,CAAE,GACtCzD,EAAI,QAAQ,aAAa,QAAQ,GAAGA,EAAI,aAAa,IAAI,IAAI,EAAE,GAC/DA,EAAI,KAAK,OAAO3G,EAAK,CAAC,CAAC,GAAGmK,GAAIC,IAAK,GAAG;AAAA,MAC1C,CAAC,GACDrD,KAAK,KAAK,KAAKgD,EAAK,SAAS,CAAC,IAAI,KAAK;AAEvC,YAAMM,IAAa,CAACC,GAASnD,MAAS;AAClC,QAAKA,MACDJ,IAAI,QAAOJ,EAAI,QAAO,GAAII,IAAI,KAClCJ,EAAI,aAAa,KAAK,KAAK,GAAG,GAC9BA,EAAI,YAAYE,GAAQE,GAAGD,GAAU,GAAG,GAAG,GAAG,GAAG,GACjDH,EAAI,QAAQ,aAAa,MAAM,GAAGA,EAAI,YAAY,CAAC,GAAGA,EAAI,aAAa,IAAI,IAAI,GAAG,GAClFA,EAAI,KAAK2D,EAAQ,YAAa,GAAEzD,IAAS,GAAGE,IAAI,CAAC,GAAGA,KAAK,IACzDJ,EAAI,QAAQ,aAAa,QAAQ,GAAGA,EAAI,YAAY,EAAE,GAAGA,EAAI,aAAa,IAAI,IAAI,EAAE,GACpFA,EAAI,gBAAgBQ,GAAML,CAAQ,EAAE,QAAQ,CAAA2B,MAAQ;AAChD,UAAI1B,IAAI,QAAOJ,EAAI,QAAO,GAAII,IAAI,KAClCJ,EAAI,KAAK8B,GAAM5B,GAAQE,CAAC,GAAGA,KAAK;AAAA,QACpC,CAAC,GACDA,KAAK;AAAA;AAET,MAAAsD,EAAW,sBAAsB5E,EAAO,QAAQ,GAChD4E,EAAW,sBAAsB5E,EAAO,iBAAiB;AAEzD,iBAAWiD,KAAWxC;AAClB,YAAI;AACA,cAAIyC;AAGJ,cAFID,EAAQ,gBAAgB,OAAMC,IAAU,MAAM,KAAK,eAAeD,EAAQ,IAAI,IACzEA,EAAQ,cAAWC,IAAU,MAAM,KAAK,qBAAqBD,EAAQ,SAAS,IACnF,CAACC;AAAS;AACd,UAAI5B,IAAI,QAAOJ,EAAI,QAAO,GAAII,IAAI,KAClCJ,EAAI,aAAa,KAAK,KAAK,GAAG,GAC9BA,EAAI,YAAYE,GAAQE,GAAGD,GAAU,GAAG,GAAG,GAAG,GAAG,GACjDH,EAAI,QAAQ,aAAa,MAAM,GAAGA,EAAI,YAAY,CAAC,GAAGA,EAAI,aAAa,IAAI,IAAI,GAAG,GAClFA,EAAI,KAAK,iBAAiB+B,EAAQ,MAAM7B,IAAS,GAAGE,IAAI,CAAC,GAAGA,KAAK;AACjE,gBAAM6B,IAAQjC,EAAI,mBAAmBgC,CAAO,GACtCE,IAAQ,KAAK,IAAI/B,IAAW8B,EAAM,OAAO,KAAKA,EAAM,MAAM,GAC1DE,IAAKF,EAAM,QAAQC,GAAOE,IAAKH,EAAM,SAASC;AACpD,UAAI9B,IAAIgC,IAAK,QAAOpC,EAAI,WAAWI,IAAI,KACvCJ,EAAI,SAASgC,KAASzD,KAAA/E,IAAAuI,EAAQ,SAAR,gBAAAvI,EAAc,MAAM,KAAK,OAAzB,gBAAA+E,EAA6B,kBAAiB,QAAQ2B,GAAQE,GAAG+B,GAAIC,CAAE,GAC7FhC,KAAKgC,IAAK;AAAA,iBACLC,GAAG;AAAE,kBAAQ,KAAK,yBAAyBN,EAAQ,MAAMM,CAAC;AAAA,QAAG;AAG1E,YAAMC,IAAatC,EAAI;AACvB,eAASuC,IAAI,GAAGA,KAAKD,GAAYC;AAC7B,QAAAvC,EAAI,QAAQuC,CAAC,GACbvC,EAAI,aAAa,IAAI,IAAI,GAAG,GAAGA,EAAI,KAAK,GAAG,KAAKC,GAAO,IAAI,GAAG,GAC9DD,EAAI,aAAa,KAAK,KAAK,GAAG,GAAGA,EAAI,YAAY,CAAC,GAAGA,EAAI,QAAQ,aAAa,QAAQ,GACtFA,EAAI,KAAK,cAAa,oBAAI,KAAI,GAAG,mBAAmB,OAAO,CAAC,WAAWuC,CAAC,OAAOD,CAAU,IAAIpC,GAAQ,GAAG,GACpGpB,EAAO,aAAWkB,EAAI,KAAKlB,EAAO,WAAWmB,IAAQC,GAAQ,KAAK,EAAE,OAAO,QAAS,CAAA;AAG5F,aAAOF,EAAI,OAAO,aAAa;AAAA,IAClC;AAAA;AAAA,IAID,MAAM,qBAAqBlB,GAAQU,GAAgBoE,GAAgB;AAC/D,YAAMC,IAAM,IAAI,OAAO,SACjBC,IAAW,KAAK,QAAQhF,CAAM,GAC9BiF,IAASF,EAAI,OAAOC,CAAQ;AAElC,MAAAC,EAAO,KAAK,GAAGD,CAAQ,eAAetE,CAAc;AAEpD,iBAAWwE,KAAOJ;AACd,YAAI;AACA,cAAIK;AACJ,cAAID,EAAI,gBAAgB;AACpB,YAAAC,IAAQ,MAAMD,EAAI,KAAK,YAAW;AAAA,mBAC3BA,EAAI,WAAW;AACtB,kBAAME,IAAO,MAAM,MAAMF,EAAI,SAAS;AACtC,gBAAI,CAACE,EAAK;AAAI,oBAAM,IAAI,MAAM,QAAQA,EAAK,MAAM,EAAE;AACnD,YAAAD,IAAQ,MAAMC,EAAK;UACvB;AACA,UAAID,KAAOF,EAAO,KAAKC,EAAI,MAAMC,CAAK;AAAA,QAC1C,SAAS5B,GAAG;AACR,kBAAQ,KAAK,iBAAiB2B,EAAI,IAAI,YAAY3B,CAAC;AAAA,QACvD;AAGJ,YAAM3C,IAAO,MAAMmE,EAAI,cAAc;AAAA,QACjC,MAAM;AAAA,QACN,aAAa;AAAA,QACb,oBAAoB,EAAE,OAAO,EAAG;AAAA,MACpC,CAAC;AACD,WAAK,iBAAiBnE,GAAM,GAAGoE,CAAQ,MAAM;AAAA,IAChD;AAAA,IAED,iBAAiBpE,GAAMyE,GAAU;AAC7B,YAAMC,IAAM,IAAI,gBAAgB1E,CAAI,GAC9B2E,IAAI,SAAS,cAAc,GAAG;AACpC,MAAAA,EAAE,OAAOD,GAAKC,EAAE,WAAWF,GAC3B,SAAS,KAAK,YAAYE,CAAC,GAAGA,EAAE,MAAO,GAAE,SAAS,KAAK,YAAYA,CAAC,GACpE,WAAW,MAAM,IAAI,gBAAgBD,CAAG,GAAG,GAAI;AAAA,IAClD;AAAA,IAED,eAAelF,GAAM;AACjB,aAAO,IAAI,QAAQ,CAACU,GAASC,MAAW;AACpC,cAAMvB,IAAI,IAAI;AACd,QAAAA,EAAE,SAAS,MAAMsB,EAAQtB,EAAE,MAAM,GAAGA,EAAE,UAAUuB,GAChDvB,EAAE,cAAcY,CAAI;AAAA,MACxB,CAAC;AAAA,IACJ;AAAA,IAED,MAAM,qBAAqBkF,GAAK;AAC5B,UAAI;AACA,cAAMF,IAAO,MAAM,MAAME,CAAG;AAC5B,eAAO,KAAK,eAAe,MAAMF,EAAK,KAAM,CAAA;AAAA,MAChD,QAAQ;AAAE,eAAO;AAAA,MAAM;AAAA,IAC1B;AAAA;AAAA,IAGD,uBAAuB7B,GAAG;AAAE,WAAK,WAAW,MAAM,KAAK,GAAG,MAAM,KAAKA,EAAE,OAAO,KAAK,CAAC,GAAGA,EAAE,OAAO,QAAQ;AAAA,IAAK;AAAA,IAC7G,qBAAqBA,GAAG;AAAE,WAAK,WAAW,MAAM,KAAK,GAAG,MAAM,KAAKA,EAAE,aAAa,KAAK,CAAC;AAAA,IAAI;AAAA,IAC5F,iBAAiB9I,GAAG;AAAE,WAAK,WAAW,MAAM,OAAOA,GAAG,CAAC;AAAA,IAAI;AAAA;AAAA,IAG3D,sBAAsB;AAClB,MAAK,KAAK,cAAc,KAAM,MAC9B,KAAK,MAAM,2BAA2B,KAAK,cAAc,KAAI,CAAE,GAC/D,KAAK,gBAAgB,IACrB,KAAK,qBAAqB,IAC1B,KAAK,YAAY;AAAA,IACpB;AAAA,IAED,aAAawK,GAAQ;AAAE,WAAK,iBAAiBA,GAAQ,KAAK,MAAM,UAAU,MAAO;AAAA,IAAG;AAAA,IAEpF,oBAAoBnK,GAAO;AACvB,YAAM0K,IAAQ,MAAM,KAAK1K,EAAM,OAAO,KAAK;AAC3C,MAAI,CAAC,KAAK,kBAAkB0K,EAAM,WAAW,MAC7C,KAAK,MAAM,uBAAuB;AAAA,QAC9B,UAAU,KAAK,eAAe;AAAA,QAC9B,OAAOA,EAAM,IAAI,CAAApF,OAAS;AAAA,UACtB,IAAI,KAAK,QAAQ,KAAK,OAAQ;AAAA,UAC9B,MAAMA,EAAK;AAAA,UACX,MAAMA,EAAK;AAAA,UACX,MAAMA,EAAK;AAAA,UACX,MAAAA;AAAA,UACA,SAAS,oBAAI,KAAM;AAAA,QACvB,EAAE;AAAA,MACN,CAAC,GACDtF,EAAM,OAAO,QAAQ,IAAI,KAAK,iBAAiB;AAAA,IAClD;AAAA,IAED,aAAayF,GAAK;AACd,YAAM9F,IAAI,KAAK,gBAAgB,QAAQ8F,CAAG;AAC1C,MAAI9F,IAAI,KAAI,KAAK,gBAAgB,OAAOA,GAAG,CAAC,IAAQ,KAAK,gBAAgB,KAAK8F,CAAG;AAAA,IACpF;AAAA;AAAA,IAGD,eAAe4E,GAAO;AAClB,UAAI,CAACA;AAAO,eAAO;AACnB,YAAMM,IAAI,MAAMC,IAAQ,CAAC,KAAK,MAAM,MAAM,IAAI,GACxCjL,IAAI,KAAK,MAAM,KAAK,IAAI0K,CAAK,IAAI,KAAK,IAAIM,CAAC,CAAC;AAClD,aAAO,KAAK,MAAMN,IAAQ,KAAK,IAAIM,GAAGhL,CAAC,IAAI,GAAG,IAAI,MAAM,MAAMiL,EAAMjL,CAAC;AAAA,IACxE;AAAA,IACD,WAAWkL,GAAG;AACV,aAAOA,IAAI,IAAI,KAAKA,CAAC,EAAE,mBAAmB,SAAS,EAAE,KAAK,WAAW,OAAO,SAAS,MAAM,UAAQ,CAAG,IAAI;AAAA,IAC7G;AAAA,EACJ;AACL,GAtrDSnK,KAAA,EAAA,OAAM,oBAAmB;;EAIjB,OAAM;GACFN,KAAA,EAAA,OAAM,uBAAsB,GAExB2C,KAAA,EAAA,OAAM,kBAAiB,oBAGdE,KAAA,EAAA,OAAM,WAAU,qCAmBrC1B,KAAA,EAAA,OAAM,gEAA+D,GAKjEE,KAAA,EAAA,OAAM,iBAAgB,GAClBC,KAAA,EAAA,OAAM,kBAAiB,GAe/ByC,KAAA,EAAA,OAAM,UAAS,GAEMC,KAAA,EAAA,OAAM,YAAW,GAI7BjB,KAAA,EAAA,OAAM,kBAAiB,GAIvBC,KAAA,EAAA,OAAM,qBAAoB,GAI1BiB,KAAA,EAAA,OAAM,mBAAkB,GAIxByG,KAAA,EAAA,OAAM,YAAW;;EAKT,OAAM;;;EASnB,OAAM;qBAOSrH,KAAA,EAAA,OAAM,SAAQ,GAChBC,KAAA,EAAA,OAAM,WAAU,GAChBC,KAAA,EAAA,OAAM,UAAS;;EAOpB,OAAM;qBAWNE,KAAA,EAAA,OAAM,aAAY;;EAM0B,OAAM;;;EACrC,OAAM;;;EAM3B,OAAM;GAEHY,KAAA,EAAA,OAAM,kBAAiB,GACxBsG,KAAA,EAAA,OAAM,aAAY,yGAgBhBC,KAAA,EAAA,OAAM,kBAAiB,GAGlBC,KAAA,EAAA,OAAM,gBAAe,GAI1BC,KAAA,EAAA,OAAM,eAAc,qBAKRC,KAAA,EAAA,OAAM,eAAc,GAGfC,KAAA,EAAA,OAAM,iBAAgB,GAE3BC,KAAA,EAAA,OAAM,UAAS,GACVC,KAAA,EAAA,OAAM,SAAQ,GAEdC,KAAA,EAAA,OAAM,WAAU,GACjBC,KAAA,EAAA,OAAM,SAAQ,GAGTC,KAAA,EAAA,OAAM,aAAY;;EAClB,OAAM;GAMfC,KAAA,EAAA,OAAM,aAAY;;EAG0B,OAAM;;;EACrC,OAAM;;;EAQnB,OAAM;qBAKEC,KAAA,EAAA,OAAM,WAAU,GACXC,KAAA,EAAA,OAAM,WAAU,GAGrBC,KAAA,EAAA,OAAM,WAAU;;EAMqC,OAAM;;;EAC9C,OAAM;GASnBC,KAAA,EAAA,OAAM,WAAU,GACXC,KAAA,EAAA,OAAM,WAAU,GAChBC,KAAA,EAAA,OAAM,UAAS,GAEpBC,KAAA,EAAA,OAAM,WAAU;;EAOpB,OAAM;GAKNC,KAAA,EAAA,OAAM,aAAY,mEAUbC,KAAA,EAAA,OAAM,cAAa,GAexCC,KAAA,EAAA,OAAM,kBAAiB,GAGlBC,KAAA,EAAA,OAAM,gBAAe,GAG1BC,KAAA,EAAA,OAAM,eAAc,qBAIRC,KAAA,EAAA,OAAM,eAAc;EAEf,OAAM;AAAA,EAAiB,OAAA,EAAyC,YAAA,WAAA,OAAA,UAAA;GAGrEC,KAAA,EAAA,OAAM,UAAS,GACVC,KAAA,EAAA,OAAM,SAAQ,GACdC,KAAA,EAAA,OAAM,SAAQ,GACVC,KAAA,EAAA,OAAM,aAAY,GAI3BC,KAAA,EAAA,OAAM,aAAY;;EAelB,OAAM;GAKEC,KAAA,EAAA,OAAM,WAAU,GACXC,KAAA,EAAA,OAAM,WAAU,GAChBC,KAAA,EAAA,OAAM,UAAS,GAEpBC,KAAA,EAAA,OAAM,WAAU;;EAOpB,OAAM;;;EAa1B,OAAM;GAiBNC,KAAA,EAAA,OAAM,qCAAoC,GACtCC,KAAA,EAAA,OAAM,gBAAe,GACjBC,KAAA,EAAA,OAAM,eAAc,GAIpBC,KAAA,EAAA,OAAM,aAAY,GAKlBC,KAAA,EAAA,OAAM,eAAc,sBAY5BC,KAAA,EAAA,OAAM,8CAA6C,GAC/CC,KAAA,EAAA,OAAM,gBAAe,GACjBC,KAAA,EAAA,OAAM,gCAA+B,GAClCC,KAAA,EAAA,OAAM,cAAa;;EAKlB,OAAM;GAYVC,KAAA,EAAA,OAAM,aAAY;;EAGd,OAAM;;;EAGF,OAAM;GAKDC,KAAA,EAAA,OAAM,kBAAiB,oBAQfC,KAAA,EAAA,OAAM,wBAAuB,mBAM7BC,KAAA,EAAA,OAAM,2BAA0B;;EAYjD,OAAM;GACFC,KAAA,EAAA,OAAM,aAAY,GAYlBC,KAAA,EAAA,OAAM,aAAY;;EAQtB,OAAM;;;EAYN,OAAM;GAMFC,KAAA,EAAA,OAAM,iBAAgB,GAGdC,KAAA,EAAA,OAAM,qBAAoB,iCAGrBC,KAAA,EAAA,OAAM,eAAc,GAKxBC,KAAA,EAAA,OAAM,cAAa,GAUhCC,KAAA,EAAA,OAAM,iBAAgB,GAClBC,KAAA,EAAA,OAAM,aAAY,yBAKlBC,KAAA,EAAA,OAAM,aAAY,GAMtBC,KAAA,EAAA,OAAM,YAAW,GACbC,KAAA,EAAA,OAAM,aAAY,GAKtBC,KAAA,EAAA,OAAM,aAAY,GACZC,KAAA,EAAA,OAAM,yBAAwB;;EAG3B,OAAM;;;EAaX,OAAM;GAMFC,KAAA,EAAA,OAAM,aAAY,GAOlBC,KAAA,EAAA,OAAM,aAAY,GAOlBC,KAAA,EAAA,OAAM,aAAY;EAKlB,OAAM;AAAA,EAAY,OAAA,EAAwB,iBAAA,IAAA;GACtCC,KAAA,EAAA,OAAM,aAAY,GAOlBC,KAAA,EAAA,OAAM,aAAY,GAOtBC,KAAA,EAAA,OAAM,aAAY;EAKlB,OAAM;AAAA,EAAa,OAAA,EAAwB,iBAAA,IAAA;;;EAU/C,OAAM;GAQVC,KAAA,EAAA,OAAM,aAAY;;EASV,OAAM;;;EAYd,OAAM;oBASVC,KAAA,EAAA,OAAM,eAAc,wDAc5BC,KAAA,EAAA,OAAM,8CAA6C;;EAC/C,OAAM;GACFC,KAAA,EAAA,OAAM,gCAA+B,GACjCC,KAAA,EAAA,OAAM,kCAAiC,GAGhCC,KAAA,EAAA,OAAA,EAAkB,OAAA,OAAA,EAAA,GAI7BC,KAAA,EAAA,OAAM,aAAY,GACdC,KAAA,EAAA,OAAM,YAAW,GACbC,KAAA,EAAA,OAAM,YAAW,GAA+BC,KAAA,EAAA,OAAM,WAAU,GAGhEC,KAAA,EAAA,OAAM,YAAW;;EAEjB,OAAM;GAENC,KAAA,EAAA,OAAM,YAAW,GAEjBC,KAAA,EAAA,OAAM,YAAW;;EACjB,OAAM;GAENC,KAAA,EAAA,OAAM,YAAW;;EAIjB,OAAM;;;EAEN,OAAM;;;EAGN,OAAM;;;EAEN,OAAM;GAIVC,KAAA,EAAA,OAAM,eAAc,GAEhBC,KAAA,EAAA,OAAM,YAAW;;EAErB,OAAM;GAEFC,KAAA,EAAA,OAAM,YAAW;;EAErB,OAAM;GAEFC,KAAA,EAAA,OAAM,sBAAqB,kBAIjBC,KAAA,EAAA,OAAM,kBAAiB,GAMzCC,KAAA,EAAA,OAAM,eAAc;;AAlqBzC,SAAA3P,EAAA,GAAAH,EAorBM,OAprBNI,IAorBM;AAAA,IAjrBF2P,EAuBaC,GAAA,EAvBD,MAAK,aAAY,GAAA;AAAA,iBACzB,MAqBM;AAAA,QArB6B,CAAAtM,EAAA,oBAAoBxD,EAAA,kBAAkBA,EAAA,eAAe,SAAM,MAA9FC,KAAAH,EAqBM,OArBNH,IAqBM;AAAA,UApBFQ,EAmBM,OAnBNP,IAmBM;AAAA,8BAlBFO,EAA+E,OAAA,EAA1E,OAAM,kBAAc;AAAA,cAACA,EAA+C,KAAA,EAA5C,OAAM,kCAAiC,CAAA;AAAA;YACpEA,EAUM,OAVNoC,IAUM;AAAA,cATYvC,EAAc,uBAA5BF,EAGS,UAAA0C,IAAA;AAAA,oCAHqB,kCAE1B,EAAA;AAAA,gBAAArC,EAA6D,QAA7DsC,IAA0BrC,EAAAJ,EAAA,eAAe,UAAU,GAAA,CAAA;AAAA,oCAAU,uBACjE,EAAA;AAAA,0BACAF,EAGS,UAAA4C,IAAAtC,EAFFJ,EAAc,eAAC,MAAM,IAAG,YAAOI,EAAGJ,EAAc,eAAC,SAAM,IAAA,MAAA,EAAA,IAAkB,yBAEhF,CAAA;AAAA,cACSA,EAAc,uBAAvBF,EAAuD,KAAAD,IAAAO,EAA3BJ,EAAc,eAAC,KAAK,GAAA,CAAA;;YAEpDG,EAES,UAAA;AAAA,cAFD,OAAM;AAAA,cAAkC,gCAAOJ,EAAc,eAAA,MAAA;AAAA;cACjEI,EAAwC,KAAA,EAArC,OAAM,2BAA0B,GAAA,MAAA,EAAA;AAAA,gBAAK,mBAC5C,EAAA;AAAA;YACAA,EAES,UAAA;AAAA,cAFD,OAAM;AAAA,cAAe,mCAAOJ,EAAa,iBAAAA,EAAA,cAAA,GAAA2D,CAAA;AAAA,cAAE,OAAM;AAAA;cACrDvD,EAA0B,KAAA,EAAvB,OAAM,aAAY,GAAA,MAAA,EAAA;AAAA;;;;;;IAOrCA,EAkBM,OAlBNY,IAkBM;AAAA,wBAjBFZ,EAGM,OAAA,MAAA;AAAA,QAFFA,EAAmC,MAA/B,EAAA,OAAM,aAAY,GAAC,SAAO;AAAA,QAC9BA,EAAmE,KAAhE,EAAA,OAAM,gBAAe,GAAC,oCAAsC;AAAA;MAEnEA,EAYM,OAZNc,IAYM;AAAA,QAXFd,EAUM,OAVNe,IAUM;AAAA,UATFf,EAES,UAAA;AAAA,YAFD,OAAM;AAAA,YAA2B,gCAAOJ,EAAc,eAAA,MAAA;AAAA;YAC1DI,EAAkC,KAAA,EAA/B,OAAM,qBAAoB,GAAA,MAAA,EAAA;AAAA,cAAK,iBACtC,EAAA;AAAA;UACAA,EAES,UAAA;AAAA,YAFD,OAAM;AAAA,YAA6B,gCAAOJ,EAAc,eAAA,QAAA;AAAA;YAC5DI,EAAuC,KAAA,EAApC,OAAM,0BAAyB,GAAA,MAAA,EAAA;AAAA,cAAK,mBAC3C,EAAA;AAAA;UACAA,EAES,UAAA;AAAA,YAFD,OAAM;AAAA,YAAmB,gCAAOqD,EAAkB,qBAAA;AAAA;YACtDrD,EAAiC,KAAA,EAA9B,OAAM,oBAAmB,GAAA,MAAA,EAAA;AAAA,cAAK,gBACrC,EAAA;AAAA;;;;IAMZA,EAoBM,OApBNwD,IAoBM;AAAA,MAnBFxD,EAES,UAAA;AAAA,QAFA,+BAA6BqD,EAAS,cAAA,MAAA,CAAA,CAAA;AAAA,QAAgB,gCAAOA,EAAS,YAAA;AAAA;4BAAU,iBACzE,EAAA;AAAA,QAAArD,EAAmD,QAAnDyD,IAA2BxD,EAAAJ,EAAA,QAAQ,MAAM,GAAA,CAAA;AAAA;MAEzDG,EAGS,UAAA;AAAA,QAHA,+BAA6BqD,EAAS,cAAA,QAAA,CAAA,CAAA;AAAA,QAAkB,gCAAOA,EAAS,YAAA;AAAA;0BAC7ErD,EAAsC,KAAA,EAAnC,OAAM,yBAAwB,GAAA,MAAA,EAAA;AAAA,4BAAK,WACtC,EAAA;AAAA,QAAAA,EAA8D,QAA9DwC,IAAiCvC,EAAAL,EAAA,aAAa,MAAM,GAAA,CAAA;AAAA;MAExDI,EAGS,UAAA;AAAA,QAHA,+BAA6BqD,EAAS,cAAA,WAAA,CAAA,CAAA;AAAA,QAAqB,gCAAOA,EAAS,YAAA;AAAA;0BAChFrD,EAAmD,KAAA,EAAhD,OAAM,sCAAqC,GAAA,MAAA,EAAA;AAAA,4BAAK,cACnD,EAAA;AAAA,QAAAA,EAAoE,QAApEyC,IAAoCxC,EAAAL,EAAA,gBAAgB,MAAM,GAAA,CAAA;AAAA;MAE9DI,EAGS,UAAA;AAAA,QAHA,+BAA6BqD,EAAS,cAAA,SAAA,CAAA,CAAA;AAAA,QAAmB,gCAAOA,EAAS,YAAA;AAAA;0BAC9ErD,EAA4C,KAAA,EAAzC,OAAM,+BAA8B,GAAA,MAAA,EAAA;AAAA,4BAAK,WAC5C,EAAA;AAAA,QAAAA,EAAgE,QAAhE0D,IAAkCzD,EAAAL,EAAA,cAAc,MAAM,GAAA,CAAA;AAAA;MAE1DI,EAGS,UAAA;AAAA,QAHA,+BAA6BqD,EAAS,cAAA,UAAA,CAAA,CAAA;AAAA,QAAoB,gCAAOA,EAAS,YAAA;AAAA;0BAC/ErD,EAAsC,KAAA,EAAnC,OAAM,yBAAwB,GAAA,MAAA,EAAA;AAAA,4BAAK,YACtC,EAAA;AAAA,QAAAA,EAAoE,QAApEmK,IAA2BlK,EAAAJ,EAAA,QAAQ,SAASA,EAAO,QAAC,MAAM,GAAA,CAAA;AAAA;;IAKvDA,EAAS,aAApBC,EAAA,GAAAH,EAGM,OAHN+C,IAGMY,EAAA,EAAA,MAAAA,EAAA,EAAA,IAAA;AAAA,MAFFtD,EAA2B,OAAA,EAAtB,OAAM,UAAS,GAAA,MAAA,EAAA;AAAA,MACpBA,EAAuB,WAApB,oBAAgB,EAAA;AAAA;IAMZqD,EAAA,4BAA4BxD,EAAS,kBAAhDF,EAmDM,OAAAgD,IAAA;AAAA,MAlD8B/C,EAAA,gBAAgB,SAAM,KAAtDE,KAAAH,EAsCM,OAtCNiD,IAsCM;AAAA,gBArCFjD,EAoCMO,GAAA,MAAAC,EApCgBP,EAAe,iBAAA,CAAzB2E,MAAM;;sBAAlB5E,EAoCM,OAAA;AAAA,YApCkC,KAAK4E,EAAO;AAAA;YAAK,KAAG,YAAcA,EAAO;AAAA,YAC5E,OAAqDhE,EAAA,CAAA,eAAA,EAAA,4BAAA8C,EAAA,mBAAmBkB,EAAO,UAAS,CAAA,CAAA;AAAA;YACzFvE,EAAgE,OAAA;AAAA,cAA3D,OAAMO,EAAA,CAAA,eAAsBX,EAAA,gBAAgB2E,CAAM,CAAA,CAAA;AAAA;YACvDvE,EAA0F,OAAA;AAAA,cAArF,OAAMO,EAAA,CAAA,YAAmBX,EAAA,gBAAgB2E,CAAM,CAAA,CAAA;AAAA,YAAM,GAAAtE,EAAAL,EAAA,gBAAgB2E,CAAM,CAAA,GAAA,CAAA;AAAA,YAEhFvE,EAQM,OAAA;AAAA,cARD,OAAM;AAAA,cAAW,SAAK,CAAAK,MAAET,EAAU,WAAC2E,CAAM;AAAA;cAC1CvE,EAA8F,UAA9F8C,IAA0B7C,EAAAsE,EAAO,eAAatF,IAAAsF,EAAO,OAAP,gBAAAtF,EAAW,YAAY,cAAW,GAAA,CAAA;AAAA,cAChFe,EAAgD,QAAhD+C,IAA0B9C,EAAAsE,EAAO,KAAK,GAAA,CAAA;AAAA,cACtCvE,EAIO,QAJPgD,IAIO;AAAA,kCAHHhD,EAAsC,KAAA,EAAnC,OAAM,yBAAwB,GAAA,MAAA,EAAA;AAAA,oBAAQuE,EAAO,WAAW,IAAG,SAE9D,CAAA;AAAA,kCAAAvE,EAAoC,KAAA,EAAjC,OAAM,uBAAsB,GAAA,MAAA,EAAA;AAAA,oBAAQJ,EAAU,WAAC2E,EAAO,WAAW,CAAA,GAAA,CAAA;AAAA;;YAIhD3E,EAAA,kBAAkB2E,EAAO,EAAE,EAAE,SAAM,KAA/DzE,KAAAH,EAEM,OAFNgE,IAEM;AAAA,gCADF3D,EAA+B,KAAA,EAA5B,OAAM,kBAAiB,GAAA,MAAA,EAAA;AAAA,cAAKQ,EAAA,QAAIZ,EAAiB,kBAAC2E,EAAO,EAAE,EAAE,MAAM,GAAA,CAAA;AAAA;YAI1EvE,EAIS,UAAA;AAAA,cAJD,OAAMO,EAAA,CAAA,kBAAyBX,EAAA,gBAAgB2E,CAAM,CAAA,CAAA;AAAA,cAAI,SAAKjE,EAAA,CAAAD,MAAOT,EAAY,aAAC2E,CAAM,GAAA,CAAA,MAAA,CAAA;AAAA,cAC5F,OAAM;AAAA;gCACNvE,EAAsC,KAAA,EAAnC,OAAM,yBAAwB,GAAA,MAAA,EAAA;AAAA,cAAKQ,EAAA,QACnC+D,EAAO,aAAaA,EAAO,KAAK,GAAA,CAAA;AAAA;YAGvCvE,EASM,OATNkD,IASM;AAAA,cARFlD,EAES,UAAA;AAAA,gBAFD,OAAM;AAAA,gBAAuB,SAAK,CAAAK,MAAET,EAAU,WAAC2E,CAAM;AAAA,gBAAG,OAAM;AAAA;gBAClEvE,EAAyB,KAAA,EAAtB,OAAM,YAAW,GAAA,MAAA,EAAA;AAAA;cAExBA,EAIS,UAAA;AAAA,gBAJD,OAAM;AAAA,gBAA2B,SAAK,CAAAK,MAAET,EAAc,eAAC2E,CAAM;AAAA,gBAChE,UAAUlB,EAAA,kBAAkBkB,EAAO;AAAA,gBAAI,OAAM;AAAA;gBAClClB,EAAa,kBAAKkB,EAAO,MAArCzE,KAAAH,EAAmE,QAAnEkE,EAAmE,MACnE/D,KAAAH,EAAqC,KAArCyD,EAAqC;AAAA;;;;;MAMVxD,EAAA,gBAAgB,WAAM,KAAjEE,KAAAH,EASM,OATNiQ,IASM;AAAA,0BARF5P,EAAyE,KAAA;AAAA,UAAtE,OAAM;AAAA,UAAuB,OAAA,EAAoC,aAAA,UAAA,OAAA,OAAA;AAAA;QACpEA,EAA0F,MAA1F8D,IAA4B,UAAMT,EAAS,cAAA,QAAA,KAAkBA,EAAS,SAAA,IAAG,gBAAY,CAAA;AAAA,QACrFrD,EAKI,KALJoK,IAKI;AAAA,UAJY/G,EAAS,cAAA,YAArBvD,EAAA,GAAAH,EAAwF,YAApD,+CAA6C,KAChE0D,EAAS,cAAA,WAA1BvD,EAAA,GAAAH,EAAoF,YAA5C,uCAAqC,KAC5D0D,EAAS,cAAA,cAA1BvD,EAAA,GAAAH,EAA2F,YAAhD,2CAAyC,MACpFG,EAAA,GAAAH,EAAqE,YAAxD,mDAAiD;AAAA;;;IAQ/D0D,EAAA,4BAA4BxD,EAAS,kBAAhDF,EA4LM,OAAAkQ,IAAA;AAAA,MAzLShQ,EAAA,QAAQ,SAAM,UAAzBF,EA0GM,OAAAmQ,IAAA;AAAA,QAzGF9P,EAKM,OALNqK,IAKM;AAAA,4BAJFrK,EAA2D,KAAA,EAAxD,OAAM,8CAA6C,GAAA,MAAA,EAAA;AAAA,8BAAK,oBAE3D,EAAA;AAAA,UAAAA,EAAuD,QAAvDsK,IAA+BrK,EAAAJ,EAAA,QAAQ,MAAM,GAAA,CAAA;AAAA,UAC7CyD,EAAA,EAAA,MAAAA,EAAA,EAAA,IAAAtD,EAA2E,QAArE,EAAA,OAAM,eAAc,GAAC,6CAAyC,EAAA;AAAA;QAGxEA,EAiGM,OAjGNuK,IAiGM;AAAA,kBAhGF5K,EA+FMO,GAAA,MAAAC,EA/FgBN,EAAO,SAAA,CAAjB0E,MAAM;;wBAAlB5E,EA+FM,OAAA;AAAA,cA/F0B,KAAG,QAAU4E,EAAO;AAAA;cAC/C,kBAAkBA,EAAO,aAAaA,EAAO;AAAA,cAC7C,OAAKhE,EAAA,CAAA,oBAAuBX,EAAe,gBAAC2E,CAAM,GAAA,EAAA,WAAgBlB,EAAe,gBAAC,SAAQ,UAAWkB,EAAO,EAAE,EAAA,CAAA,CAAA;AAAA;cAC/GvE,EA6BM,OAAA;AAAA,gBA7BD,OAAM;AAAA,gBAAa,SAAO,CAAAK,MAAAT,EAAA,aAAuB,UAAA2E,EAAO,EAAE;AAAA;gBAC3DvE,EAIM,OAJNwK,IAIM;AAAA,kBAHFxK,EACqD,KAAA;AAAA,oBADlD,OAAMO,EAAA,CAAA,oCACe,YAAAX,EAAA,gBAAgB2E,CAAM,CAAA,CAAA;AAAA;kBAC9CvE,EAAiF,QAAjFyK,IAAoCxK,EAAA,IAAAL,EAAA,kBAAkB2E,EAAO,EAAE,EAAE,MAAM,GAAA,CAAA;AAAA;gBAE3EvE,EAaM,OAbN0K,IAaM;AAAA,kBAZF1K,EACa,QADb2K,IAAwB1K,EAAAsE,EAAO,eAAatF,IAAAsF,EAAO,OAAP,gBAAAtF,EAAW,YAAY,cAAW,GAAA,CAAA;AAAA,kBAE9Ee,EAAgD,QAAhD4K,IAA0B3K,EAAAsE,EAAO,KAAK,GAAA,CAAA;AAAA,kBACtCvE,EAQM,OARN6K,IAQM;AAAA,oBAPF7K,EACa,QAAA;AAAA,sBADP,OAAMO,EAAA,CAAA,cAAqBX,EAAA,gBAAgB2E,CAAM,CAAA,CAAA;AAAA,oBAAM,GAAAtE,EAAAL,EAAA,gBAAgB2E,CAAM,CAAA,GAAA,CAAA;AAAA,oBAEnFvE,EAAoE,QAApE8K,IAAoE7K,EAAxCL,aAAW2E,EAAO,WAAW,CAAA,GAAA,CAAA;AAAA,oBAC1B3E,EAAA,kBAAkB2E,EAAO,EAAE,EAAE,eAA5D5E,EAGO,QAHPoQ,IAAoE,UAC3DnQ,EAAiB,kBAAC2E,EAAO,EAAE,EAAE,MAAM,IAAG,gBACvCtE,EAAAL,EAAA,kBAAkB2E,EAAO,EAAE,EAAE,WAAM,IAAA,MAAA,EAAA,GAAA,CAAA;;;gBAInDvE,EAQM,OARN+K,IAQM;AAAA,kBAPF/K,EAIS,UAAA;AAAA,oBAJD,OAAM;AAAA,oBAA2B,SAAKM,EAAA,CAAAD,MAAOT,EAAc,eAAC2E,CAAM,GAAA,CAAA,MAAA,CAAA;AAAA,oBACrE,UAAUlB,EAAA,kBAAkBkB,EAAO;AAAA,oBAAI,OAAM;AAAA;oBAClClB,EAAa,kBAAKkB,EAAO,MAArCzE,KAAAH,EAAmE,QAAnEqQ,EAAmE,MACnElQ,KAAAH,EAAqC,KAArCsQ,EAAqC;AAAA;kBAEzCjQ,EACqG,KAAA;AAAA,oBADlG,OAAKO,EAAA,CAAC,mBACG8C,EAAA,gBAAgB,SAAQ,UAAWkB,EAAO,EAAE,IAAA,kBAAA,iBAAA,CAAA;AAAA;;;cAIhEmL,EA4DaC,GAAA,EA5DD,MAAK,gBAAe,GAAA;AAAA,2BAC5B,MA0DM;AAAA,kBA1DyBtM,EAAA,gBAAgB,SAAmB,UAAAkB,EAAO,EAAE,KAA3EzE,KAAAH,EA0DM,OA1DNuQ,IA0DM;AAAA,oBAxDFlQ,EAiBM,OAAA;AAAA,sBAjBD,OAAM;AAAA,sBAAmB,SAAK,CAAAK,MAAET,EAAU,WAAC2E,CAAM;AAAA;wCAClDvE,EACM,OAAA,EADD,OAAM,4BAAwB;AAAA,wBAACA,EAA2C,KAAA,EAAxC,OAAM,8BAA6B,CAAA;AAAA;sBAE1EA,EAGM,OAHNgL,IAGM;AAAA,wBAFFhL,EAA8D,QAA9DiL,IAA8DhL,EAApCL,UAAQ2E,CAAM,KAAI,eAAW,CAAA;AAAA,wBACvDjB,EAAA,EAAA,MAAAA,EAAA,EAAA,IAAAtD,EAAsE,QAAhE,EAAA,OAAM,UAAS,GAAC,6CAAyC,EAAA;AAAA;sBAEnEA,EASM,OATNkL,IASM;AAAA,wBARFlL,EACsD,UAAA;AAAA,0BAD9C,OAAM;AAAA,0BAAuB,SAAKM,EAAA,CAAAD,MAAOT,EAAU,WAAC2E,CAAM,GAAA,CAAA,MAAA,CAAA;AAAA,0BAC9D,OAAM;AAAA;0BAAUvE,EAAyB,KAAA,EAAtB,OAAM,YAAW,GAAA,MAAA,EAAA;AAAA;wBACxCA,EAKS,UAAA;AAAA,0BALD,OAAM;AAAA,0BACT,SAAKM,EAAA,CAAAD,MAAOT,EAAqB,sBAAC2E,CAAM,GAAA,CAAA,MAAA,CAAA;AAAA,0BACxC,UAAUlB,EAAA,kBAAkBkB,EAAO,KAAE;AAAA,0BAAW,OAAM;AAAA;0BAC3ClB,EAAa,kBAAKkB,EAAO,KAAE,UAAvCzE,KAAAH,EAA4E,QAA5EwQ,EAA4E,MAC5ErQ,KAAAH,EAAqC,KAArCyQ,EAAqC;AAAA;;;qBAKjDtQ,EAAA,EAAA,GAAAH,EAaMO,WAbWN,EAAiB,kBAAC2E,EAAO,EAAE,IAAhCD,YAAZ3E,EAaM,OAAA;AAAA,sBAb0C,KAAK2E,EAAE;AAAA,sBAAI,OAAM;AAAA;sBAC7DtE,EAEM,OAAA;AAAA,wBAFD,OAAMO,EAAA,CAAA,YAAmBX,EAAA,aAAa0E,CAAC,CAAA,CAAA;AAAA;wBACxCtE,EAA4C,KAAA;AAAA,0BAAzC,UAAM,MAAaJ,WAAS0E,EAAE,IAAI,CAAA,CAAA;AAAA;;sBAEzCtE,EAGM,OAHNmL,IAGM;AAAA,wBAFFnL,EAA0C,QAA1CoL,IAA0BnL,EAAAqE,EAAE,IAAI,GAAA,CAAA;AAAA,wBAChCtE,EAAyD,QAAzDqL,IAAyDpL,EAAhCL,iBAAe0E,EAAE,IAAI,CAAA,GAAA,CAAA;AAAA;sBAElDtE,EAIM,OAJNsL,IAIM;AAAA,wBAHOhH,EAAE,kBAAX3E,EAEiD,KAAA;AAAA;0BAF1B,MAAM2E,EAAE;AAAA,0BAAW,QAAO;AAAA,0BAAS,KAAI;AAAA,0BAC1D,OAAM;AAAA,0BAAsB,OAAM;AAAA;0BAAOtE,EACA,KAAA,EAArC,OAAM,2BAA0B,GAAA,MAAA,EAAA;AAAA;;;oBAInBJ,EAAA,kBAAkB2E,EAAO,EAAE,EAAE,WAAM,KAAhEzE,EAAA,GAAAH,EAGM,OAHN0Q,IAGM/M,EAAA,EAAA,MAAAA,EAAA,EAAA,IAAA;AAAA,sBAFFtD,EAAoC,KAAA,EAAjC,OAAM,uBAAsB,GAAA,MAAA,EAAA;AAAA,wBAAK,0DAExC,EAAA;AAAA;oBAEAA,EAeM,OAfNuL,IAeM;AAAA,sBAdFvL,EAQS,UAAA;AAAA,wBARD,OAAM;AAAA,wBAAkC,SAAK,CAAAK,MAAET,EAAc,eAAC2E,CAAM;AAAA,wBACvE,UAAUlB,EAAA,kBAAkBkB,EAAO;AAAA;wBACxBlB,EAAa,kBAAKkB,EAAO,WAArC5E,EAEO,QAAA2Q,IAAAhN,EAAA,EAAA,MAAAA,EAAA,EAAA,IAAA;AAAA,0BADHtD,EAAqC,QAAA,EAA/B,OAAM,kBAAiB,GAAA,MAAA,EAAA;AAAA,4BAAQ,kBACzC,EAAA;AAAA,qCACAL,EAEO,QAAA4Q,IAAAjN,EAAA,EAAA,MAAAA,EAAA,EAAA,IAAA;AAAA,0BADHtD,EAAmC,KAAA,EAAhC,OAAM,sBAAqB,GAAA,MAAA,EAAA;AAAA,4BAAK,wBACvC,EAAA;AAAA;;sBAEJA,EAIO,QAJPwL,IACOvL,EAAAL,EAAA,QAAQ2E,CAAM,CAAA,IAAI,sBACTtE,EAAGL,oBAAkB2E,EAAO,EAAE,EAAE,SAAM,QAAuD3E,EAAA,kBAAkB2E,EAAO,EAAE,EAAE,SAAM,aAAA,EAAA,GAAA,CAAA;AAAA;;;;;;;;;MAYrH1E,EAAA,QAAQ,SAAM,UAAjEF,EAgEM,OAAA;AAAA;QAhEA,OAAKY,EAAA,EAAA,QAAYV,EAAO,QAAC,SAAM,GAAA;AAAA;QACjCG,EAIM,OAJNyL,IAIM;AAAA,4BAHFzL,EAAmD,KAAA,EAAhD,OAAM,sCAAqC,GAAA,MAAA,EAAA;AAAA,8BAAK,oBAEnD,EAAA;AAAA,UAAAA,EAAuD,QAAvD0L,IAA+BzL,EAAAJ,EAAA,QAAQ,MAAM,GAAA,CAAA;AAAA;QAGjDG,EAwDM,OAxDN2L,IAwDM;AAAA,kBAvDFhM,EAsDMO,GAAA,MAAAC,EAtDgBN,EAAO,SAAA,CAAjB2J,YAAZ7J,EAsDM,OAAA;AAAA,YAtD0B,KAAG,QAAU6J,EAAO;AAAA,YAC/C,2CAAyCnG,EAAe,gBAAC,SAAmB,UAAAmG,EAAO,EAAE,EAAA,CAAA,CAAA;AAAA;YACtFxJ,EAyBM,OAAA;AAAA,cAzBD,OAAM;AAAA,cAAa,SAAO,CAAAK,MAAAT,EAAA,aAAuB,UAAA4J,EAAO,EAAE;AAAA;cAC3DxJ,EAIM,OAJN4L,IAIM;AAAA,kCAHF5L,EAA4D,KAAA,EAAzD,OAAM,+CAA8C,GAAA,MAAA,EAAA;AAAA,gBACvDA,EACiC,QADjCwQ,IACiCvQ,EAA7BuJ,EAAO,MAAM,MAAM,GAAA,CAAA;AAAA;cAE3BxJ,EAMM,OANN6L,IAMM;AAAA,gBALF7L,EAA6C,QAA7C8L,IAAwB7L,EAAAuJ,EAAO,IAAI,GAAA,CAAA;AAAA,gBACnCxJ,EAGO,QAHP+L,IAGO;AAAA,kBAFH/L,EACwB,QADxBgM,IAA4B/L,EAAAuJ,EAAO,MAAM,MAAM,IAAG,UAAQvJ,EAAAuJ,EAAO,MAAM,WAAM;;;cAIrFxJ,EAWM,OAXNiM,IAWM;AAAA,gBAVFjM,EAGS,UAAA;AAAA,kBAHD,OAAM;AAAA,kBAAS,OAAA,EAAsB,OAAA,UAAA;AAAA,kBAAE,SAAKM,EAAA,CAAAD,MAAOT,EAAY,aAAC4J,CAAM,GAAA,CAAA,MAAA,CAAA;AAAA,kBAC1E,OAAM;AAAA;kBACNxJ,EAAuC,KAAA,EAApC,OAAM,0BAAyB,GAAA,MAAA,EAAA;AAAA;gBAEtCA,EAGS,UAAA;AAAA,kBAHD,OAAM;AAAA,kBACT,SAAYM,EAAA,CAAAD,MAAAY,EAAA,MAAiC,2BAAAuI,EAAO,EAAE,GAAA,CAAA,MAAA,CAAA;AAAA,kBAAG,OAAM;AAAA;kBAChExJ,EAA2B,KAAA,EAAxB,OAAM,cAAa,GAAA,MAAA,EAAA;AAAA;gBAE1BA,EACqG,KAAA;AAAA,kBADlG,OAAKO,EAAA,CAAC,mBACG8C,EAAA,gBAAgB,SAAQ,UAAWmG,EAAO,EAAE,IAAA,kBAAA,iBAAA,CAAA;AAAA;;;YAIhEkG,EAwBaC,GAAA,EAxBD,MAAK,gBAAe,GAAA;AAAA,yBAC5B,MAsBM;AAAA,gBAtByBtM,EAAA,gBAAgB,SAAmB,UAAAmG,EAAO,EAAE,KAA3E1J,KAAAH,EAsBM,OAtBN8Q,IAsBM;AAAA,mBArBF3Q,EAAA,EAAA,GAAAH,EAaMO,GAbc,MAAAC,EAAAqJ,EAAO,QAAf7E,YAAZhF,EAaM,OAAA;AAAA,oBAb6B,KAAKgF,EAAK;AAAA,oBAAI,OAAM;AAAA;oBACnD3E,EAEM,OAAA;AAAA,sBAFD,OAAMO,EAAA,CAAA,YAAmBX,EAAA,aAAa+E,CAAI,CAAA,CAAA;AAAA;sBAC3C3E,EAA+C,KAAA;AAAA,wBAA5C,UAAM,MAAaJ,WAAS+E,EAAK,IAAI,CAAA,CAAA;AAAA;;oBAE5C3E,EAGM,OAHNkM,IAGM;AAAA,sBAFFlM,EAA6C,QAA7CmM,IAA0BlM,EAAA0E,EAAK,IAAI,GAAA,CAAA;AAAA,sBACnC3E,EAA4D,QAA5DoM,IAA4DnM,EAAnCL,iBAAe+E,EAAK,IAAI,CAAA,GAAA,CAAA;AAAA;oBAErD3E,EAIM,OAJNqM,IAIM;AAAA,sBAHFrM,EAE0D,UAAA;AAAA,wBAFlD,OAAM;AAAA,wBACT,SAAK,CAAAK,MAAEY,QAA2C,yBAAA,EAAA,UAAAuI,EAAO,IAAE,QAAU7E,EAAK,GAAE,CAAA;AAAA,wBAC7E,OAAM;AAAA;wBAAS3E,EAA8B,KAAA,EAA3B,OAAM,iBAAgB,GAAA,MAAA,EAAA;AAAA;;;kBAIvBwJ,EAAO,MAAM,WAAM,KAAhD1J,KAAAH,EAKM,OALN+Q,IAKM;AAAA,sCAJF1Q,EAAgC,KAAA,EAA7B,OAAM,mBAAkB,GAAA,MAAA,EAAA;AAAA,wCAAK,iBAChC,EAAA;AAAA,oBAAAA,EAES,UAAA;AAAA,sBAFD,OAAM;AAAA,sBAAyC,SAAK,CAAAK,MAAET,EAAY,aAAC4J,CAAM;AAAA;sBAC7ExJ,EAA4C,KAAA,EAAzC,OAAM,+BAA8B,GAAA,MAAA,EAAA;AAAA,wBAAK,cAChD,EAAA;AAAA;;;;;;;;;MASmBH,EAAA,QAAQ,WAAgB,KAAAA,EAAA,QAAQ,WAAM,KAAjFC,KAAAH,EAQM,OARNgR,IAQM;AAAA,0BAPF3Q,EAAuE,KAAA;AAAA,UAApE,OAAM;AAAA,UAAqB,OAAA,EAAoC,aAAA,UAAA,OAAA,OAAA;AAAA;QAClEsD,EAAA,EAAA,MAAAA,EAAA,EAAA,IAAAtD,EAA+C,MAA3C,EAAA,OAAM,kBAAiB,GAAC,kBAAc,EAAA;AAAA,QAC1CsD,EAAA,EAAA,MAAAA,EAAA,EAAA,IAAAtD,EACgB,KADb,EAAA,OAAM,aAAY,GAAC,yFACV,EAAA;AAAA,QACZA,EAES,UAAA;AAAA,UAFD,OAAM;AAAA,UAAwB,kCAAOqD,EAAkB,qBAAA;AAAA;UAC3DrD,EAAsC,KAAA,EAAnC,OAAM,yBAAwB,GAAA,MAAA,EAAA;AAAA,YAAK,gBAC1C,EAAA;AAAA;;;IASRA,EAoBM,OAAA;AAAA,MApBD,OAAKO,EAAA,CAAC,SAAO,EAAA,MAAmB8C,EAAkB,mBAAA,CAAA,CAAA;AAAA,MAAK,oCAAYA,EAAkB,qBAAA,IAAA,CAAA,MAAA,CAAA;AAAA;MACtFrD,EAkBM,OAlBNsM,IAkBM;AAAA,QAjBFtM,EAgBM,OAhBNuM,IAgBM;AAAA,UAfFvM,EAGM,OAHNwM,IAGM;AAAA,8BAFFxM,EAAoF,MAAA,EAAhF,OAAM,iBAAa;AAAA,cAACA,EAAsC,KAAA,EAAnC,OAAM,yBAAwB,CAAA;AAAA,gBAAK,mBAAiB;AAAA;YAC/EA,EAAqF,UAAA;AAAA,cAA7E,MAAK;AAAA,cAAS,OAAM;AAAA,cAAa,kCAAOqD,EAAkB,qBAAA;AAAA;;UAEtErD,EAIM,OAJNyM,IAIM;AAAA,YAHFnJ,EAAA,EAAA,MAAAA,EAAA,EAAA,IAAAtD,EAA6C,SAAtC,EAAA,OAAM,aAAY,GAAC,eAAW,EAAA;AAAA,cACrCA,EAC4E,SAAA;AAAA,cADrE,MAAK;AAAA,cAAO,OAAM;AAAA,8DAAwBqD,EAAa,gBAAAhD;AAAA,cACzD,uCAAaT,EAAmB,uBAAAA,EAAA,oBAAA,GAAA2D,CAAA,GAAA,CAAA,OAAA,CAAA;AAAA,cAAE,aAAY;AAAA;kBADFF,EAAa,aAAA;AAAA;;UAGlErD,EAKM,OALN0M,IAKM;AAAA,YAJF1M,EACuD,UAAA;AAAA,cAD/C,MAAK;AAAA,cAAS,OAAM;AAAA,cACvB,kCAAOqD,EAAkB,qBAAA;AAAA,eAAU,QAAM;AAAA,YAC9CrD,EAC4D,UAAA;AAAA,cADpD,MAAK;AAAA,cAAS,OAAM;AAAA,cAAmB,qCAAOJ,EAAmB,uBAAAA,EAAA,oBAAA,GAAA2D,CAAA;AAAA,cACpE,UAAQ,CAAGF,EAAa,cAAC,KAAI;AAAA,eAAI,iBAAa,GAAAuN,EAAA;AAAA;;;;IAOnE5Q,EAgQM,OAAA;AAAA,MAhQD,OAAKO,EAAA,CAAC,SAAO,EAAA,MAAmB8C,EAAe,gBAAA,CAAA,CAAA;AAAA,MAAK,uCAAYzD,EAAe,mBAAAA,EAAA,gBAAA,GAAA2D,CAAA,GAAA,CAAA,MAAA,CAAA;AAAA;MAChFvD,EA8PM,OA9PN2M,IA8PM;AAAA,QA7PF3M,EA4PM,OA5PN4M,IA4PM;AAAA,UA3PF5M,EAiBM,OAjBN6M,IAiBM;AAAA,YAhBF7M,EAIK,MAJL8M,IAIK;AAAA,cAHD9M,EACkH,KAAA;AAAA,gBAA7G,OAAKO,EAAE8C,EAAU,WAAC,gBAAW,WAAA,iCAAA,yBAAA;AAAA;gBAAgF,MAClHpD,EAAGoD,EAAU,WAAC,gBAAW,WAAA,sBAAA,oBAAA,GAAA,CAAA;AAAA;YAESxD,EAAc,8BAApDC,KAAAH,EASM,OATNkR,IASM;AAAA,cARF7Q,EAGS,UAAA;AAAA,gBAHA,OAAKO,EAAA,CAAA,mBAAA,EAAA,QAAgC8C,EAAU,WAAC,gBAAW,OAAA,CAAA,CAAA;AAAA,gBAC/D,SAAKC,EAAA,EAAA,MAAAA,EAAA,EAAA,IAAA,CAAAjD,MAAEgD,EAAU,WAAC,cAAW;AAAA;gBAC9BrD,EAAuC,KAAA,EAApC,OAAM,0BAAyB,GAAA,MAAA,EAAA;AAAA,kBAAK,SAC3C,EAAA;AAAA;cACAA,EAGS,UAAA;AAAA,gBAHA,OAAKO,EAAA,CAAA,mBAAA,EAAA,QAAgC8C,EAAU,WAAC,gBAAW,SAAA,CAAA,CAAA;AAAA,gBAC/D,SAAKC,EAAA,EAAA,MAAAA,EAAA,EAAA,IAAA,CAAAjD,MAAEgD,EAAU,WAAC,cAAW;AAAA;gBAC9BrD,EAA4C,KAAA,EAAzC,OAAM,+BAA8B,GAAA,MAAA,EAAA;AAAA,kBAAK,WAChD,EAAA;AAAA;;YAEJA,EAA0F,UAAA;AAAA,cAAlF,MAAK;AAAA,cAAS,OAAM;AAAA,cAA6B,qCAAOJ,EAAe,mBAAAA,EAAA,gBAAA,GAAA2D,CAAA;AAAA;;UAEnFvD,EAgOM,OAhON+M,IAgOM;AAAA,YA7NgC1J,EAAA,WAAW,gBAAW,UAAxDvD,KAAAH,EA+BM,OA/BNmR,IA+BM;AAAA,kCA9BF9Q,EACoB,SAAA,EADb,OAAM,4BAAwB;AAAA,gBAACA,EAAqC,KAAA,EAAlC,OAAM,wBAAuB,CAAA;AAAA,kBAAK,0BAC/D;AAAA;cACwBqD,EAAA,WAAW,cAAcA,EAAA,WAAW,eAAxEvD,KAAAH,EAQM,OARNoR,IAQM;AAAA,gBAPF/Q,EAEO,QAAA;AAAA,kBAFD,OAAMO,EAAA,CAAA,eAAsB8C,EAAA,WAAW,WAAW,CAAA;AAAA,gBACjD,GAAApD,EAAAoD,EAAA,WAAW,gBAAW,UAAA,UAAA,UAAA,GAAA,CAAA;AAAA,gBAE7BrD,EAA4C,UAAA,MAAAC,EAAjCoD,EAAU,WAAC,UAAU,GAAA,CAAA;AAAA,gBAChCrD,EAAkE,QAAlEgN,IAAiC/M,EAAAoD,EAAA,WAAW,YAAY,GAAA,CAAA;AAAA,gBACxDrD,EACkD,UAAA;AAAA,kBAD1C,OAAM;AAAA,kBAA2C,qCAAOJ,EAAe,mBAAAA,EAAA,gBAAA,GAAA2D,CAAA;AAAA;kBAAEvD,EAC9C,KAAA,EAA3B,OAAM,iBAAgB,GAAA,MAAA,EAAA;AAAA,oBAAK,UAAM,EAAA;AAAA;0BAE7CL,EAkBM,OAAAqR,IAAA;AAAA,kBAjBFhR,EAeS,UAAA;AAAA,kBAfD,OAAM;AAAA,kBAAwB,uBAAAsD,EAAA,EAAA,MAAAA,EAAA,EAAA,IAAA,CAAAjD,MAAAgD,EAAA,WAAW,kBAAehD;AAAA,kBAC3D,sCAAQT,EAAqB,yBAAAA,EAAA,sBAAA,GAAA2D,CAAA;AAAA;kBAC9BD,EAAA,GAAA,MAAAA,EAAA,GAAA,IAAAtD,EAAgE,UAAxD,EAAA,OAAM,GAAE,GAAC,0CAAsC,EAAA;AAAA,kBACvDA,EAKW,YALXiN,IAKW;AAAA,4BAJPtN,EAGSO,GAAA,MAAAC,EAHWN,EAAc,eAAC,OAAO,CAAAoR,MAAKA,EAAE,gBAAW,OAAA,GAAA,CAA7ClN,YAAfpE,EAGS,UAAA;AAAA,sBAFJ,KAAKoE,EAAE;AAAA,sBAAY,OAAO,KAAK,UAAUA,CAAC;AAAA,oBACxC,GAAA9D,EAAA8D,EAAE,UAAU,IAAG,QAAM9D,EAAA8D,EAAE,KAAK,GAAA,GAAAmN,EAAA;;kBAGvClR,EAKW,YALXkN,IAKW;AAAA,4BAJPvN,EAGSO,GAAA,MAAAC,EAHWN,EAAc,eAAC,OAAO,CAAAoR,MAAKA,EAAE,gBAAW,UAAA,GAAA,CAA7ClN,YAAfpE,EAGS,UAAA;AAAA,sBAFJ,KAAKoE,EAAE;AAAA,sBAAY,OAAO,KAAK,UAAUA,CAAC;AAAA,oBACxC,GAAA9D,EAAA8D,EAAE,UAAU,IAAG,QAAM9D,EAAA8D,EAAE,KAAK,GAAA,GAAAoN,EAAA;;;kBAZL,CAAAC,GAAA/N,EAAA,WAAW,eAAe;AAAA;gBAgBhEC,EAAA,GAAA,MAAAA,EAAA,GAAA,IAAAtD,EAAqF,SAA9E,EAAA,OAAM,aAAY,GAAC,uDAAmD,EAAA;AAAA;;YAKxDqD,EAAA,WAAW,gBAAW,YAAnDvD,KAAAH,EAkBM,OAlBN0R,IAkBM;AAAA,cAjBFrR,EAWM,OAXNmN,IAWM;AAAA,gBAVF7J,EAAA,GAAA,MAAAA,EAAA,GAAA,IAAAtD,EAA6D,SAAtD,EAAA,OAAM,yBAAwB,GAAC,mBAAe,EAAA;AAAA,kBACrDA,EAQS,UAAA;AAAA,kBARD,OAAM;AAAA,kBAAwB,uBAAAsD,EAAA,EAAA,MAAAA,EAAA,EAAA,IAAA,CAAAjD,MAAAgD,EAAA,WAAW,kBAAehD;AAAA;kBAC5DL,EAAwB,gBAAhB,WAAO,EAAA;AAAA,kBACfA,EAA4B,gBAApB,eAAW,EAAA;AAAA,kBACnBA,EAAmC,gBAA3B,sBAAkB,EAAA;AAAA,kBAC1BA,EAA8B,gBAAtB,iBAAa,EAAA;AAAA,kBACrBA,EAAsB,gBAAd,SAAK,EAAA;AAAA,kBACbA,EAAyB,gBAAjB,YAAQ,EAAA;AAAA,kBAChBA,EAAsB,gBAAd,SAAK,EAAA;AAAA;kBAPqB,CAAAoR,GAAA/N,EAAA,WAAW,eAAe;AAAA;;cAUpErD,EAIM,OAJNoN,IAIM;AAAA,gBAHF9J,EAAA,GAAA,MAAAA,EAAA,GAAA,IAAAtD,EAA8D,SAAvD,EAAA,OAAM,yBAAwB,GAAC,oBAAgB,EAAA;AAAA,kBACtDA,EACsC,SAAA;AAAA,kBAD/B,MAAK;AAAA,kBAAO,OAAM;AAAA,kBAAwB,uBAAAsD,EAAA,EAAA,MAAAA,EAAA,EAAA,IAAA,CAAAjD,MAAAgD,EAAA,WAAW,aAAUhD;AAAA,kBAClE,aAAY;AAAA;kBADiC,CAAAiR,GAAAjO,EAAA,WAAW,UAAU;AAAA;;;YAMjDA,EAAA,WAAW,gBAAW,WAAnDvD,KAAAH,EASM,OATN4R,IASM;AAAA,kCARFvR,EAA2C,KAAA,EAAxC,OAAM,8BAA6B,GAAA,MAAA,EAAA;AAAA,cACtCA,EAMO,QAAA,MAAA;AAAA,gBALHsD,EAAA,GAAA,MAAAA,EAAA,GAAA,IAAAtD,EAA+B,gBAAvB,kBAAc,EAAA;AAAA,sCAAS,8BAC/B,EAAA;AAAA,gBAAAsD,EAAA,GAAA,MAAAA,EAAA,GAAA,IAAAtD,EAA8C,cAAxC,qCAAiC,EAAA;AAAA,gBAAOQ,EAAA,4GAEEP,EAAAoD,EAAA,WAAW,4BAA2B,qDAE1F,CAAA;AAAA;;YAImCA,EAAA,WAAW,gBAAW,WAA7DvD,KAAAH,EAwBM,OAxBN6R,IAwBM;AAAA,kCAvBFxR,EAIM,OAAA,EAJD,OAAM,2BAAuB;AAAA,gBAC9BA,EAA2C,KAAA,EAAxC,OAAM,8BAA6B,CAAA;AAAA,kBAAK,sBAE3C;AAAA,gBAAAA,EAAyE,QAAnE,EAAA,OAAM,iBAAgB,GAAC,uCAAqC;AAAA;cAEtEA,EAiBM,OAjBNqN,IAiBM;AAAA,iBAhBFvN,EAAA,EAAA,GAAAH,EAeQO,GAfkB,MAAAC,EAAAkD,EAAA,yBAAX,CAAA+D,GAAGH,YAAlBtH,EAeQ,SAAA;AAAA,kBAf4C,KAAKsH;AAAA,kBACpD,OAAqC1G,EAAA,CAAA,kBAAA,EAAA,SAAA8C,EAAA,WAAW,eAAe4D,CAAG,EAAA,CAAA,CAAA;AAAA;kBACnEjH,EAOM,OAPNsN,IAOM;AAAA,oBANFtN,EACuE,SAAA;AAAA,sBADhE,MAAK;AAAA,sBAAY,SAASqD,EAAA,WAAW,eAAe4D,CAAG;AAAA,sBACzD,UAAM,CAAA5G,MAAEgD,EAAU,WAAC,eAAe4D,CAAG,IAAI5G,EAAO,OAAO;AAAA;oBAC5DL,EAGO,QAHPuN,IAGO;AAAA,sBAFHvN,EAC4E,KAAA;AAAA,wBADzE,UAAM,MACGqD,aAAW,eAAe4D,CAAG,IAAA,gBAAA,SAAA,CAAA;AAAA;;;kBAGjDjH,EAAwC,QAAxCwN,IAAwCvN,EAAXmH,CAAC,GAAA,CAAA;AAAA,kBAC9BpH,EAGO,QAAA;AAAA,oBAHD,UAAM,oBACAqD,aAAW,eAAe4D,CAAG,IAAA,eAAA,WAAA,CAAA;AAAA,uBAClC5D,EAAU,WAAC,eAAe4D,CAAG,IAAA,QAAA,IAAA,GAAA,CAAA;AAAA;;;YAOhDjH,EAWM,OAXNyN,IAWM;AAAA,cAVFzN,EAIM,OAJN0N,IAIM;AAAA,gBAHFpK,EAAA,GAAA,MAAAA,EAAA,GAAA,IAAAtD,EAA4D,SAArD,EAAA,OAAM,yBAAwB,GAAC,kBAAc,EAAA;AAAA,kBACpDA,EACwG,SAAA;AAAA,kBADjG,MAAK;AAAA,kBAAO,OAAM;AAAA,kBAAwB,uBAAAsD,EAAA,EAAA,MAAAA,EAAA,EAAA,IAAA,CAAAjD,MAAAgD,EAAA,WAAW,QAAKhD;AAAA,kBAC5D,aAAagD,EAAU,WAAC,aAAyB,YAAAA,EAAA,WAAW,UAAU,KAAA;AAAA;kBAD1B,CAAAiO,GAAAjO,EAAA,WAAW,KAAK;AAAA;;cAGrErD,EAIM,OAJN2N,IAIM;AAAA,gBAHFrK,EAAA,GAAA,MAAAA,EAAA,GAAA,IAAAtD,EAA4D,SAArD,EAAA,OAAM,yBAAwB,GAAC,kBAAc,EAAA;AAAA,kBACpDA,EAC8B,SAAA;AAAA,kBADvB,MAAK;AAAA,kBAAO,OAAM;AAAA,kBAAwB,uBAAAsD,EAAA,EAAA,MAAAA,EAAA,EAAA,IAAA,CAAAjD,MAAAgD,EAAA,WAAW,cAAWhD;AAAA,kBACnE,aAAY;AAAA;kBADiC,CAAAiR,GAAAjO,EAAA,WAAW,WAAW;AAAA;;;YAI/ErD,EAKM,OALN4N,IAKM;AAAA,cAJF5N,EAGM,OAHN6N,IAGM;AAAA,gBAFFvK,EAAA,GAAA,MAAAA,EAAA,GAAA,IAAAtD,EAAkD,SAA3C,EAAA,OAAM,yBAAwB,GAAC,QAAI,EAAA;AAAA,kBAC1CA,EAAoE,SAAA;AAAA,kBAA7D,MAAK;AAAA,kBAAO,OAAM;AAAA,kBAAwB,uBAAAsD,EAAA,EAAA,MAAAA,EAAA,EAAA,IAAA,CAAAjD,MAAAgD,EAAA,WAAW,OAAIhD;AAAA;kBAAf,CAAAiR,GAAAjO,EAAA,WAAW,IAAI;AAAA;;;YAGxErD,EAaM,OAbN8N,IAaM;AAAA,cAZF9N,EAKQ,SALR+N,IAKQ;AAAA,gBAJDvN,EAAAP,EAAAoD,EAAA,WAAW,gBAAW,aAAA,gEACA,KACzB,CAAA;AAAA,gBAA8BA,EAAA,WAAW,gBAAW,mBAApD1D,EAC8C,QAD9C8R,IAAqE,qDAC9B;;gBAE3CzR,EAKW,YAAA;AAAA,gBALD,OAAM;AAAA,gBAAe,MAAK;AAAA,gBAAa,uBAAAsD,EAAA,EAAA,MAAAA,EAAA,EAAA,IAAA,CAAAjD,MAAAgD,EAAA,WAAW,WAAQhD;AAAA,gBAAG,aAAagD,EAAU,WAAC,gBAAW;;kDAA4LA,EAAA,WAAW,gBAAW;iBAIhQ,gCAC5D,GAAAqO,EAAA,GAAA;AAAA,gBALiD,CAAAJ,GAAAjO,EAAA,WAAW,QAAQ;AAAA;;YASxDA,EAAA,WAAW,gBAAW,cAClCvD,KAAAH,EAkDM,OAlDNgS,IAkDM;AAAA,kCAjDF3R,EAIM,OAAA,EAJD,OAAM,2BAAuB;AAAA,gBAC9BA,EAAqD,KAAA,EAAlD,OAAM,wCAAuC,CAAA;AAAA,kBAAK,0BAErD;AAAA,gBAAAA,EAA0E,QAApE,EAAA,OAAM,iBAAgB,GAAC,wCAAsC;AAAA;cAEvEA,EAMM,OANNgO,IAMM;AAAA,gBALF1K,EAAA,GAAA,MAAAA,EAAA,GAAA,IAAAtD,EAAmE,SAA5D,EAAA,OAAM,yBAAwB,GAAC,yBAAqB,EAAA;AAAA,gBAC3DsD,EAAA,GAAA,MAAAA,EAAA,GAAA,IAAAtD,EACmB,OADd,EAAA,OAAM,aAAY,GAAC,uEACX,EAAA;AAAA,kBACbA,EAC6D,YAAA;AAAA,kBADnD,OAAM;AAAA,kBAAe,MAAK;AAAA,kBAAa,uBAAAsD,EAAA,EAAA,MAAAA,EAAA,EAAA,IAAA,CAAAjD,MAAAgD,EAAA,WAAW,mBAAgBhD;AAAA,kBACxE,aAAY;AAAA;kBADiC,CAAAiR,GAAAjO,EAAA,WAAW,gBAAgB;AAAA;;cAGhFrD,EAMM,OANNiO,IAMM;AAAA,gBALF3K,EAAA,GAAA,MAAAA,EAAA,GAAA,IAAAtD,EACiB,SADV,EAAA,OAAM,yBAAwB,GAAC,uDAC7B,EAAA;AAAA,gBACTsD,EAAA,GAAA,MAAAA,EAAA,GAAA,IAAAtD,EAA4E,OAAvE,EAAA,OAAM,aAAY,GAAC,kDAA8C,EAAA;AAAA,kBACtEA,EACuE,YAAA;AAAA,kBAD7D,OAAM;AAAA,kBAAe,MAAK;AAAA,kBAAa,uBAAAsD,EAAA,EAAA,MAAAA,EAAA,EAAA,IAAA,CAAAjD,MAAAgD,EAAA,WAAW,cAAWhD;AAAA,kBACnE,aAAY;AAAA;kBADiC,CAAAiR,GAAAjO,EAAA,WAAW,WAAW;AAAA;;cAG3ErD,EAIM,OAJNkO,IAIM;AAAA,gBAHF5K,EAAA,GAAA,MAAAA,EAAA,GAAA,IAAAtD,EAAoE,SAA7D,EAAA,OAAM,yBAAwB,GAAC,0BAAsB,EAAA;AAAA,kBAC5DA,EACwE,YAAA;AAAA,kBAD9D,OAAM;AAAA,kBAAe,MAAK;AAAA,kBAAa,uBAAAsD,EAAA,EAAA,MAAAA,EAAA,EAAA,IAAA,CAAAjD,MAAAgD,EAAA,WAAW,uBAAoBhD;AAAA,kBAC5E,aAAY;AAAA;kBADiC,CAAAiR,GAAAjO,EAAA,WAAW,oBAAoB;AAAA;;cAGpFrD,EAcM,OAdN4R,IAcM;AAAA,gBAbF5R,EAMM,OANNmO,IAMM;AAAA,kBALF7K,EAAA,GAAA,MAAAA,EAAA,GAAA,IAAAtD,EAA0D,SAAnD,EAAA,OAAM,yBAAwB,GAAC,gBAAY,EAAA;AAAA,kBAClDsD,EAAA,GAAA,MAAAA,EAAA,GAAA,IAAAtD,EACM,OADD,EAAA,OAAM,aAAY,GAAC,2DACxB,EAAA;AAAA,oBACAA,EACwD,YAAA;AAAA,oBAD9C,OAAM;AAAA,oBAAe,MAAK;AAAA,oBAAa,uBAAAsD,EAAA,EAAA,MAAAA,EAAA,EAAA,IAAA,CAAAjD,MAAAgD,EAAA,WAAW,mBAAgBhD;AAAA,oBACxE,aAAY;AAAA;oBADiC,CAAAiR,GAAAjO,EAAA,WAAW,gBAAgB;AAAA;;gBAGhFrD,EAKM,OALNoO,IAKM;AAAA,kBAJF9K,EAAA,GAAA,MAAAA,EAAA,GAAA,IAAAtD,EAAwD,SAAjD,EAAA,OAAM,yBAAwB,GAAC,cAAU,EAAA;AAAA,kBAChDsD,EAAA,GAAA,MAAAA,EAAA,GAAA,IAAAtD,EAAuE,OAAlE,EAAA,OAAM,aAAY,GAAC,6CAAyC,EAAA;AAAA,oBACjEA,EACsD,YAAA;AAAA,oBAD5C,OAAM;AAAA,oBAAe,MAAK;AAAA,oBAAa,uBAAAsD,EAAA,EAAA,MAAAA,EAAA,EAAA,IAAA,CAAAjD,MAAAgD,EAAA,WAAW,iBAAchD;AAAA,oBACtE,aAAY;AAAA;oBADiC,CAAAiR,GAAAjO,EAAA,WAAW,cAAc;AAAA;;;cAIlFrD,EAIM,OAJNqO,IAIM;AAAA,gBAHF/K,EAAA,GAAA,MAAAA,EAAA,GAAA,IAAAtD,EAAiF,SAA1E,EAAA,OAAM,yBAAwB,GAAC,uCAAmC,EAAA;AAAA,kBACzEA,EACyE,YAAA;AAAA,kBAD/D,OAAM;AAAA,kBAAe,MAAK;AAAA,kBAAa,uBAAAsD,EAAA,EAAA,MAAAA,EAAA,EAAA,IAAA,CAAAjD,MAAAgD,EAAA,WAAW,oBAAiBhD;AAAA,kBACzE,aAAY;AAAA;kBADiC,CAAAiR,GAAAjO,EAAA,WAAW,iBAAiB;AAAA;;cAGjFrD,EAIM,OAJN6R,IAIM;AAAA,gBAHFvO,EAAA,GAAA,MAAAA,EAAA,GAAA,IAAAtD,EAA+D,SAAxD,EAAA,OAAM,yBAAwB,GAAC,qBAAiB,EAAA;AAAA,kBACvDA,EACiD,YAAA;AAAA,kBADvC,OAAM;AAAA,kBAAe,MAAK;AAAA,kBAAa,uBAAAsD,EAAA,EAAA,MAAAA,EAAA,EAAA,IAAA,CAAAjD,MAAAgD,EAAA,WAAW,cAAWhD;AAAA,kBACnE,aAAY;AAAA;kBADiC,CAAAiR,GAAAjO,EAAA,WAAW,WAAW;AAAA;;mBAQ/EvD,KAAAH,EAIM,OAJNmS,IAIM;AAAA,cAHFxO,EAAA,GAAA,MAAAA,EAAA,GAAA,IAAAtD,EAAgE,SAAzD,EAAA,OAAM,yBAAwB,GAAC,sBAAkB,EAAA;AAAA,gBACxDA,EAC4E,YAAA;AAAA,gBADlE,OAAM;AAAA,gBAAe,MAAK;AAAA,gBAAa,uBAAAsD,EAAA,EAAA,MAAAA,EAAA,EAAA,IAAA,CAAAjD,MAAAgD,EAAA,WAAW,oBAAiBhD;AAAA,gBACzE,aAAY;AAAA;gBADiC,CAAAiR,GAAAjO,EAAA,WAAW,iBAAiB;AAAA;;YAMrFrD,EAkBM,OAlBNsO,IAkBM;AAAA,kCAjBFtO,EAGQ,SAAA,EAHD,OAAM,4BAAwB;AAAA,kBAAC,gBAElC;AAAA,gBAAAA,EAA8E,QAAxE,EAAA,OAAM,YAAW,GAAC,iDAA+C;AAAA;cAE3EA,EAUM,OAAA;AAAA,gBAVD,OAAM;AAAA,gBAAkB,SAAOsD,EAAA,EAAA,MAAAA,EAAA,EAAA,IAAA,CAAAjD,MAAAY,EAAA,MAAM,gBAAgB,MAAK;AAAA,gBAAK,gCAAD,MAAiB;AAAA,gBAAA,GAAA,CAAA,SAAA,CAAA;AAAA,gBAC/E,sCAAcrB,EAAoB,wBAAAA,EAAA,qBAAA,GAAA2D,CAAA,GAAA,CAAA,SAAA,CAAA;AAAA;oCACnCvD,EAAwE,KAAA;AAAA,kBAArE,OAAM;AAAA,kBAAqB,OAAA,EAAqC,aAAA,QAAA,OAAA,UAAA;AAAA;gBACnEsD,EAAA,GAAA,MAAAA,EAAA,GAAA,IAAAtD,EAA6E,KAA1E,EAAA,OAAM,uBAAsB,GAAC,6CAAyC,EAAA;AAAA,gBACvCqD,EAAU,WAAC,MAAM,SAAM,KAAzDvD,KAAAH,EAKM,OALNoS,IAKM;AAAA,mBAJFjS,EAAA,EAAA,GAAAH,EAGOO,WAHsCmD,EAAU,WAAC,OAApB,CAAAiB,GAAGtF,YAAvCW,EAGO,QAAA;AAAA,oBAHD,OAAM;AAAA,oBAAoD,KAAKX;AAAA;oBACjEgB,EAAiD,KAAA;AAAA,sBAA9C,UAAM,WAAkBJ,WAAS0E,EAAE,IAAI,CAAA,CAAA;AAAA;wBAAUA,EAAE,IAAI,IAAG,KAC7D,CAAA;AAAA,oBAAAtE,EAA0E,UAAA;AAAA,sBAAjE,SAAKM,EAAA,CAAAD,MAAOT,EAAgB,iBAACZ,CAAC,GAAA,CAAA,MAAA,CAAA;AAAA;sBAAGgB,EAAuB,KAAA,EAApB,OAAM,UAAS,GAAA,MAAA,EAAA;AAAA;;;;cAIxEA,EACuC,SAAA;AAAA,gBADhC,KAAI;AAAA,gBAAkB,MAAK;AAAA,gBAAO,UAAA;AAAA,gBAAS,OAAA,EAAoB,SAAA,OAAA;AAAA,gBACjE,sCAAQJ,EAAsB,0BAAAA,EAAA,uBAAA,GAAA2D,CAAA;AAAA;;YAIXF,EAAA,WAAW,SAASA,aAAW,MAAM,SAAM,KAAvEvD,KAAAH,EAOM,OAPNqS,IAOM;AAAA,kCANFhS,EAAmC,KAAA,EAAhC,OAAM,sBAAqB,GAAA,MAAA,EAAA;AAAA,oCAAK,2BACb,EAAA;AAAA,cAAAA,EAAkC,UAAA,MAAAC,EAAvBL,EAAO,OAAA,IAAG,QAAI,CAAA;AAAA,oCAAS,+BAExD,EAAA;AAAA,cAAYyD,EAAU,WAAC,MAAM,UAA7BvD,EAAA,GAAAH,EAEsB,QAFesS,IAAA,QAAMhS,EAAAoD,EAAA,WAAW,MAAM,MAAM,IAAG,gBACjEpD,EAAAoD,EAAA,WAAW,MAAM,WAAM;;;UAInCrD,EAOM,OAPNuO,IAOM;AAAA,YANFvO,EAAwF,UAAA;AAAA,cAAhF,MAAK;AAAA,cAAS,OAAM;AAAA,cAAqB,qCAAOJ,EAAe,mBAAAA,EAAA,gBAAA,GAAA2D,CAAA;AAAA,eAAE,QAAM;AAAA,YAC/EvD,EAIS,UAAA;AAAA,cAJD,MAAK;AAAA,cAAS,OAAM;AAAA,cAAmB,qCAAOJ,EAAmB,uBAAAA,EAAA,oBAAA,GAAA2D,CAAA;AAAA,cACpE,UAAU1D,EAAA,gBAAiB,CAAAwD,EAAA,WAAW,SAAU,CAAAA,EAAA,WAAW,eAAgB,CAAAA,EAAA,WAAW;AAAA;cAC3ExD,EAAY,qBAAxBF,EAA6E,QAAAuS,IAAA5O,EAAA,GAAA,MAAAA,EAAA,GAAA,IAAA;AAAA,gBAAnDtD,EAAgC,QAAA,EAA1B,OAAM,aAAY,GAAA,MAAA,EAAA;AAAA,kBAAQ,gBAAY,EAAA;AAAA,2BACtEL,EAAwE,QAAAwS,IAAA7O,EAAA,GAAA,MAAAA,EAAA,GAAA,IAAA;AAAA,gBAA3DtD,EAAuC,KAAA,EAApC,OAAM,0BAAyB,GAAA,MAAA,EAAA;AAAA,kBAAK,iBAAa,EAAA;AAAA;;;;;;IAQrFA,EA0EM,OAAA;AAAA,MA1ED,OAAKO,EAAA,CAAC,SAAO,EAAA,MAAmB8C,EAAa,cAAA,CAAA,CAAA;AAAA,MAAK,uCAAYzD,EAAW,eAAAA,EAAA,YAAA,GAAA2D,CAAA,GAAA,CAAA,MAAA,CAAA;AAAA;MAC1EvD,EAwEM,OAxENwO,IAwEM;AAAA,QAvE+BnL,EAAa,iBAA9CvD,KAAAH,EAsEM,OAtENyS,IAsEM;AAAA,UArEFpS,EAOM,OAPNyO,IAOM;AAAA,YANFzO,EAIM,OAJN0O,IAIM;AAAA,cAHF1O,EAC4C,QAAA;AAAA,gBADtC,OAAMO,EAAA,CAAA,oBAA2BX,EAAA,gBAAgByD,EAAa,aAAA,CAAA,CAAA;AAAA,cAChE,GAAApD,EAAAL,EAAA,gBAAgByD,EAAa,aAAA,CAAA,GAAA,CAAA;AAAA,cACjCrD,EAA6D,UAA7D2O,IAA8B1O,EAAAoD,EAAA,cAAc,KAAK,GAAA,CAAA;AAAA;YAErDrD,EAAsF,UAAA;AAAA,cAA9E,MAAK;AAAA,cAAS,OAAM;AAAA,cAA6B,qCAAOJ,EAAW,eAAAA,EAAA,YAAA,GAAA2D,CAAA;AAAA;;UAE/EvD,EAgDM,OAhDN4O,IAgDM;AAAA,YA/CF5O,EA2BM,OA3BN6O,IA2BM;AAAA,cA1BF7O,EAE2B,OAF3B8O,IAE2B;AAAA,gBAFJxL,EAAA,GAAA,MAAAA,EAAA,GAAA,IAAAtD,EAAwB,eAAjB,aAAS,EAAA;AAAA,gBAAQA,EAE1B,QAF0B+O,IACvC9O,EAAAoD,EAAA,cAAc;;cAEtBrD,EACM,OADNgP,IACM;AAAA,gBADiB1L,EAAA,GAAA,MAAAA,EAAA,GAAA,IAAAtD,EAAmB,eAAZ,QAAI,EAAA;AAAA,gBAAQA,EAAiD,QAAA,MAAAC,EAAxCL,EAAe,gBAACyD,EAAa,aAAA,CAAA,GAAA,CAAA;AAAA;cAEnDA,EAAA,cAAc,kBAA3CvD,KAAAH,EACoD,OADpD0S,IACoD;AAAA,gBADO/O,EAAA,GAAA,MAAAA,EAAA,GAAA,IAAAtD,EAAuB,eAAhB,YAAQ,EAAA;AAAA,gBAAQA,EACpC,QAAA,MAAAC,EAAtCoD,EAAa,cAAC,cAAc,GAAA,CAAA;AAAA;cACpCrD,EACuB,OADvBiP,IACuB;AAAA,gBADA3L,EAAA,GAAA,MAAAA,EAAA,GAAA,IAAAtD,EAA2B,eAApB,gBAAY,EAAA;AAAA,gBAAQA,EACjC,QAAA,MAAAC,EAD0CoD,EAAa,cAAC,WAAW,GAAA,CAAA;AAAA;cAEpFrD,EAAqF,OAArFkP,IAAqF;AAAA,gBAA9D5L,EAAA,GAAA,MAAAA,EAAA,GAAA,IAAAtD,EAAmB,eAAZ,QAAI,EAAA;AAAA,gBAAQA,EAAqC,QAAA,MAAAC,EAA5BoD,EAAa,cAAC,IAAI,GAAA,CAAA;AAAA;cACxCA,EAAA,cAAc,UAA3CvD,KAAAH,EAC4C,OAD5C2S,IAC4C;AAAA,gBADOhP,EAAA,GAAA,MAAAA,EAAA,GAAA,IAAAtD,EAAgC,eAAzB,qBAAiB,EAAA;AAAA,gBAAQA,EAC7C,QAAA,MAAAC,EAA9BoD,EAAa,cAAC,MAAM,GAAA,CAAA;AAAA;cAC5BrD,EAEuB,OAFvBmP,IAEuB;AAAA,gBAFA7L,EAAA,GAAA,MAAAA,EAAA,GAAA,IAAAtD,EAA2B,eAApB,gBAAY,EAAA;AAAA,gBAAQA,EAEjC,QADT,MAAAC,EAAAL,EAAA,WAAWyD,EAAA,cAAc,WAAW,CAAA,GAAA,CAAA;AAAA;cAGfA,EAAA,cAAc,kBAA3CvD,KAAAH,EACoD,OADpD4S,IACoD;AAAA,gBADOjP,EAAA,GAAA,MAAAA,EAAA,GAAA,IAAAtD,EAAyB,eAAlB,cAAU,EAAA;AAAA,gBAAQA,EACtC,QAAA,MAAAC,EAAtCoD,EAAa,cAAC,cAAc,GAAA,CAAA;AAAA;cACPA,EAAA,cAAc,kBAA3CvD,KAAAH,EAEoD,OAFpD6S,IAEoD;AAAA,gBAFOlP,EAAA,GAAA,MAAAA,EAAA,GAAA,IAAAtD,EACrC,eAD4C,gBACpD,EAAA;AAAA,gBAAQA,EACwB,QAAA,MAAAC,EAAtCoD,EAAa,cAAC,cAAc,GAAA,CAAA;AAAA;cACPA,EAAA,cAAc,mBAA3CvD,KAAAH,EACqD,OADrD8S,IACqD;AAAA,gBADOnP,EAAA,GAAA,MAAAA,EAAA,GAAA,IAAAtD,EAAuB,eAAhB,YAAQ,EAAA;AAAA,gBAAQA,EACpC,QAAA,MAAAC,EAAvCoD,EAAa,cAAC,eAAe,GAAA,CAAA;AAAA;cACRA,EAAA,cAAc,uBAA3CvD,KAAAH,EAEyD,OAFzD+S,IAEyD;AAAA,gBADrDpP,EAAA,GAAA,MAAAA,EAAA,GAAA,IAAAtD,EAA2B,eAApB,gBAAY,EAAA;AAAA,gBAAQA,EACoB,QAAA,MAAAC,EAA3CoD,EAAa,cAAC,mBAAmB,GAAA,CAAA;AAAA;;YAE7CrD,EAGM,OAHNoP,IAGM;AAAA,cAFF9L,EAAA,GAAA,MAAAA,EAAA,GAAA,IAAAtD,EAAiC,eAA1B,sBAAkB,EAAA;AAAA,cACzBA,EAAyD,OAAzDqP,IAA0BpP,EAAAoD,EAAA,cAAc,QAAQ,GAAA,CAAA;AAAA;YAEpBA,EAAA,cAAc,qBAA9CvD,KAAAH,EAGM,OAHNgT,IAGM;AAAA,cAFFrP,EAAA,GAAA,MAAAA,EAAA,GAAA,IAAAtD,EAAiC,eAA1B,sBAAkB,EAAA;AAAA,cACzBA,EAAkE,OAAlEsP,IAA0BrP,EAAAoD,EAAA,cAAc,iBAAiB,GAAA,CAAA;AAAA;YAE7BzD,EAAA,kBAAkByD,EAAA,cAAc,EAAE,EAAE,SAAM,KAA1EvD,KAAAH,EAUM,OAVNiT,IAUM;AAAA,cATFtP,EAAA,GAAA,MAAAA,EAAA,GAAA,IAAAtD,EAA0B,eAAnB,eAAW,EAAA;AAAA,cAClBA,EAOM,OAPNuP,IAOM;AAAA,iBANFzP,EAAA,EAAA,GAAAH,EAKIO,WALWN,EAAiB,kBAACyD,gBAAc,EAAE,IAAvCiB,YAAV3E,EAKI,KAAA;AAAA,kBALiD,KAAK2E,EAAE;AAAA,kBAAK,MAAMA,EAAE;AAAA,kBACrE,QAAO;AAAA,kBAAS,KAAI;AAAA,kBAAW,OAAM;AAAA;kBACrCtE,EAAiD,KAAA;AAAA,oBAA9C,UAAM,WAAkBJ,WAAS0E,EAAE,IAAI,CAAA,CAAA;AAAA;sBAAUA,EAAE,IAAI,IAAG,KAC7D,CAAA;AAAA,kBAAAtE,EAAqE,SAArEwP,IAA+B,MAACvP,EAAGL,EAAc,eAAC0E,EAAE,IAAI,CAAA,IAAI,KAAC,CAAA;AAAA,sCAC7DtE,EAAqE,KAAA;AAAA,oBAAlE,OAAM;AAAA,oBAAgC,OAAA,EAAuB,aAAA,OAAA;AAAA;;;;;UAKhFA,EAWM,OAXNyP,IAWM;AAAA,YAVFzP,EAES,UAAA;AAAA,cAFD,OAAM;AAAA,cAAiC,SAAOsD,EAAA,EAAA,MAAAA,EAAA,EAAA,IAAA,CAAAjD,MAAAT,EAAA,oBAAoByD,EAAA,cAAc,EAAE;AAAA;cACtFrD,EAA2B,KAAA,EAAxB,OAAM,cAAa,GAAA,MAAA,EAAA;AAAA,gBAAK,YAC/B,EAAA;AAAA;YACAA,EAAqE,UAAA;AAAA,cAA7D,OAAM;AAAA,cAAqB,qCAAOJ,EAAW,eAAAA,EAAA,YAAA,GAAA2D,CAAA;AAAA,eAAE,OAAK;AAAA,YAC5DvD,EAKS,UAAA;AAAA,cALD,OAAM;AAAA,cAAmB,SAAKsD,EAAA,EAAA,MAAAA,EAAA,EAAA,IAAA,CAAAjD,MAAET,EAAc,eAACyD,EAAa,aAAA;AAAA,cAC/D,UAAUA,EAAA,kBAAkBA,EAAA,cAAc;AAAA;cAC/BA,EAAa,kBAAKA,EAAa,cAAC,WAA5C1D,EACe,QAAAkT,IAAAvP,EAAA,GAAA,MAAAA,EAAA,GAAA,IAAA;AAAA,gBADiCtD,EAAgC,QAAA,EAA1B,OAAM,aAAY,GAAA,MAAA,EAAA;AAAA,kBAAQ,kBACxE,EAAA;AAAA,2BACRL,EAAmE,QAAAmT,IAAAxP,EAAA,GAAA,MAAAA,EAAA,GAAA,IAAA;AAAA,gBAAtDtD,EAAmC,KAAA,EAAhC,OAAM,sBAAqB,GAAA,MAAA,EAAA;AAAA,kBAAK,gBAAY,EAAA;AAAA;;;;;;IAQhFA,EAAkG,SAAA;AAAA,MAA3F,KAAI;AAAA,MAAY,MAAK;AAAA,MAAO,UAAA;AAAA,MAAS,OAAA,EAAqB,SAAA,OAAA;AAAA,MAAE,sCAAQJ,EAAmB,uBAAAA,EAAA,oBAAA,GAAA2D,CAAA;AAAA;;;sFC5MjG1E,KAAU;AAAA,EACX,MAAM;AAAA,EACN,OAAO;AAAA,IACH,YAAY;AAAA,MACR,MAAM;AAAA,MACN,UAAU;AAAA,IACb;AAAA,IACD,OAAO;AAAA,MACH,MAAM;AAAA,MACN,SAAS,MAAM,CAAC;AAAA,IACnB;AAAA,IACD,YAAY;AAAA,MACR,MAAM;AAAA,MACN,SAAS,MAAM,CAAC;AAAA,IACnB;AAAA,IACD,aAAa;AAAA,MACT,MAAM;AAAA,MACN,SAAS,OAAO,CAAA;AAAA,IACnB;AAAA,IACD,aAAa;AAAA,MACT,MAAM;AAAA,MACN,UAAU;AAAA,IACd;AAAA,EACH;AAAA,EACD,OAAO;AAAA,IACH;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACH;AAAA,EACD,OAAO;AACH,WAAO;AAAA,MACH,OAAO;AAAA,MACP,UAAU;AAAA,MACV,OAAO;AAAA,MACP,aAAa;AAAA,MACb,aAAa;AAAA,MACb,SAAS;AAAA,MACT,UAAU;AAAA,MACV,iBAAiB,CAAE;AAAA,MACnB,YAAY;AAAA,MACZ,eAAe;AAAA,MACf,UAAU;AAAA,QACN,EAAE,IAAI,YAAY,MAAM,YAAY,MAAM,KAAM;AAAA,QAChD,EAAE,IAAI,aAAa,MAAM,mBAAmB,MAAM,KAAM;AAAA,QACxD;AAAA,UACI,IAAI;AAAA,UACJ,MAAM;AAAA,UACN,MAAM;AAAA,UACN,SAAS,MAAM,KAAK,MAAM,oBAAoB;AAAA,QAClD;AAAA,MACH;AAAA,MACD,cAAc;AAAA,MACd,aAAa;AAAA,MACb,YAAY,CAAE;AAAA,MACd,WAAW;AAAA,MACX,MAAM;AAAA,QACF,UAAU;AAAA,QACV,aAAa;AAAA,QACb,iBAAiB;AAAA,QACjB,WAAW;AAAA,QACX,UAAU;AAAA,QACV,SAAS;AAAA,QACT,gBAAgB;AAAA,QAChB,YAAY;AAAA,QACZ,YAAY;AAAA,QACZ,eAAe;AAAA,QACf,SAAS;AAAA,QACT,aAAa;AAAA,QACb,WAAW;AAAA,QACX,cAAc;AAAA,QACd,mBAAmB;AAAA,QACnB,OAAO;AAAA,QACP,QAAQ;AAAA,QACR,OAAO;AAAA,QACP,eAAe;AAAA,QACf,aAAa,CAAC;AAAA,MACjB;AAAA,MACD,kBAAkB,CAAE;AAAA,MACpB,YAAY;AAAA,MACZ,aAAY,oBAAI,QAAO,mBAAmB,SAAS;AAAA,QAC/C,MAAM;AAAA,QACN,OAAO;AAAA,QACP,KAAK;AAAA,MACT,CAAC;AAAA,MACD,UAAU,QAAQ,KAAK,OAAQ,EAAC,SAAS,EAAE,EAAE,OAAO,GAAG,CAAC,EAAE,YAAa;AAAA;EAE9E;AAAA,EACD,OAAO;AAAA,IACH,sBAAsB;AAAA,IACtB,mBAAmB;AAAA,IACnB,gBAAgB,SAAUkU,GAAS;AAC/B,WAAK,uBAAsB;AAAA,IAC/B;AAAA,EACH;AAAA,EACD,UAAU;AAAA,IACN,gBAAgB;AACZ,UAAIjR,IAAS,CAAC,GAAG,KAAK,KAAK;AAU3B,UATI,KAAK,iBAAiB,QACtBA,IAASA,EAAO,OAAO,CAAAkR,MAAQA,EAAK,WAAW,aAAaA,EAAK,WAAW,UAAUA,EAAK,WAAW,WAAW,IAE5G,KAAK,iBAAiB,QAC3BlR,IAASA,EAAO,OAAO,CAAAkR,MAAQA,EAAK,WAAW,aAAaA,EAAK,WAAW,MAAM,IAC3E,KAAK,iBAAiB,gBAC7BlR,IAASA,EAAO,OAAO,CAAAkR,MAAQA,EAAK,WAAW,WAAW,IAG1D,KAAK,aAAa;AAClB,cAAMC,IAAQ,KAAK,YAAY,YAAW;AAC1C,QAAAnR,IAASA,EAAO;AAAA,UAAO,CAAAkR,MACnBA,EAAK,UAAU,cAAc,SAASC,CAAK,KAC3CD,EAAK,SAAS,cAAc,SAASC,CAAK,KAC1CD,EAAK,WAAW,cAAc,SAASC,CAAK;AAAA;MAEpD;AAEA,aAAOnR;AAAA,IACV;AAAA,IACD,iBAAiB;AACb,aAAO,KAAK,WAAW,OAAO,CAAAhD,MAAQA,EAAK,SAAS;AAAA,IACvD;AAAA,IACD,WAAW;AACP,aAAO,KAAK,MAAO,KAAK,eAAe,SAAS,KAAK,WAAW,SAAU,GAAG;AAAA,IAChF;AAAA,IACD,uBAAuB;AACnB,aAAO,KAAK,gBAAgB,aAAa,wBAAwB;AAAA,IACpE;AAAA,IACD,oBAAoB;AAChB,aAAO,KAAK,yBAAyB;AAAA,IACxC;AAAA,IACD,sBAAsB;AAClB,aAAO,KAAK,iBAAiB,OAAO,CAACoU,GAAOF,MAASE,KAASF,EAAK,kBAAkB,IAAI,CAAC;AAAA,IAC7F;AAAA,EACJ;AAAA,EACD,SAAS;AAAA,IACL,YAAY9R,GAAQ;AAChB,YAAMiS,IAAU,KAAK;AACrB,aAAOA,EAAQ,SAAS,WACjBA,EAAQ,SAAS,WAChBA,EAAQ,SAAS,aAAaA,EAAQ,WAAWjS;AAAA,IAC5D;AAAA,IACD,aAAa;AACT,YAAMiS,IAAU,KAAK;AACrB,aAAIA,EAAQ,SAAS,WAAWA,EAAQ,SAAS,YACtC,MAEP,KAAK,MAAM,iBAAiB,mCAAmC,GACxD;AAAA,IAEd;AAAA,IACD,WAAWC,GAAQ;AACf,WAAK,aAAa,KAAK,WAAW,OAAO,CAAAC,MAAaA,EAAU,OAAOD,CAAM;AAAA,IAChF;AAAA,IACD,QAAQ/T,GAAO;AACX,MAAIA,KAAOA,EAAM,kBAEjB,KAAK,MAAM,gBAAgB;AAAA,QACvB,MAAM;AAAA,QACN,OAAO;AAAA,QACP,SAAS;AAAA,QACT,UAAU,CAACyC,MAAW;AAClB,cAAIA,GAAQ;AACR,kBAAMwR,IAAU;AAAA,cACZ,IAAI,KAAK,IAAK;AAAA,cACd,MAAMxR;AAAA,cACN,WAAW;AAAA;AAEf,iBAAK,WAAW,KAAKwR,CAAO;AAAA,UAChC;AAAA,QACJ;AAAA,MACJ,CAAC;AAAA,IACJ;AAAA,IACD,UAAUC,GAAQ;AACd,WAAK,eAAeA;AAAA,IACvB;AAAA,IACD,cAAcC,GAAe;AACzB,WAAK,YAAY,IACjB,KAAK,MAAM,sBAAsB;AAAA,QAC7B,WAAWA;AAAA,QACX,UAAU,CAACH,MAAc;AACrB,eAAK,aAAaA,EAAU,IAAI,CAAAvU,OAAS;AAAA,YACrC,GAAGA;AAAA,YACH,WAAW;AAAA,UACd,EAAC,GACF,KAAK,YAAY;AAAA,QACrB;AAAA,MACJ,CAAC;AAAA,IACJ;AAAA,IACD,gBAAgB0U,GAAe;AAC3B,UAAI,KAAK,cAAc;AACnB,cAAMR,IAAO,KAAK,MAAM,KAAK,CAAAxO,MAAKA,EAAE,cAAcgP,CAAa;AAE/D,QAAIR,KAAQA,EAAK,oBACb,KAAK,aAAa,CAAC,GAAGA,EAAK,iBAAiB,IAE5C,KAAK,cAAcQ,CAAa,GAGpC,KAAK,QAAQR,KAAA,gBAAAA,EAAM,OACnB,KAAK,cAAcQ,GACnB,KAAK,cAAc,aACnB,KAAK,gBAAgB;AAAA,MACzB;AAAA,IACH;AAAA,IACD,iBAAiBA,GAAe;AAC5B,YAAMR,IAAO,KAAK,MAAM,KAAK,CAAAxO,MAAKA,EAAE,cAAcgP,CAAa;AAC/D,WAAK,mBAAmB,CAACR,CAAI,GAC7B,KAAK,oBAAmB,GAExB,KAAK,aAAa,IAElB,KAAK,UAAU,MAAM;AACjB,mBAAW,MAAM;AACb,iBAAO,MAAK,GACZ,KAAK,aAAa;AAAA,QACrB,GAAE,GAAG;AAAA,MACV,CAAC;AAAA,IACJ;AAAA,IACD,iBAAiB;AACb,MAAI,KAAK,iBACL,KAAK,gBAAgB;AAAA,IAE5B;AAAA,IACD,YAAY3T,GAAO;AACf,WAAK,UAAUA,EAAM,OAAO,MAAM,CAAC,EAAE,MACrC,KAAK,KAAK,cAAc;AAAA,QACpB,MAAMA,EAAM,OAAO,MAAM,CAAC;AAAA;IAEjC;AAAA,IACD,UAAUA,GAAO;AACb,WAAK,WAAWA,EAAM,OAAO,MAAM,CAAC,EAAE,MACtC,KAAK,kBAAkB;AAAA,QACnB,MAAMA,EAAM,OAAO,MAAM,CAAC;AAAA;IAEjC;AAAA,IACD,eAAe;AACX,YAAMoU,IAAiB;AAAA,QACnB;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA;AAGJ,iBAAWC,KAASD;AAChB,YAAI,CAAC,KAAK,KAAKC,CAAK;AAChB,sBAAK,MAAM,gBAAgB;AAAA,YACvB,MAAM;AAAA,YACN,OAAO;AAAA,YACP,SAAS,sCAAsCA,CAAK;AAAA,UACxD,CAAC,GACM;AAIf,aAAO;AAAA,IACV;AAAA,IACD,mBAAmBC,GAAS;AACxB,WAAK,gBAAgBA,EAAQ,IACzB,OAAOA,EAAQ,WAAY,cAC3BA,EAAQ,QAAO;AAAA,IAEtB;AAAA,IACD,mBAAmB;AACf,YAAMrS,IAAO,KAAK,KAAK,gBAAgB,IAAI,KAAK,KAAK,KAAK,aAAa,IAAI,MACrEsS,IAAa,KAAK,KAAK;AAE7B,UAAI,CAACtS,KAAQ,CAACsS;AAAY;AAE1B,UAAIC,IAAW,IAAI,KAAKvS,CAAI;AAE5B,cAAQsS,GAAU;AAAA,QACd,KAAK;AACD,UAAAC,EAAS,QAAQA,EAAS,QAAU,IAAE,CAAC;AACvC;AAAA,QACJ,KAAK;AACD,UAAAA,EAAS,QAAQA,EAAS,QAAU,IAAE,CAAC;AACvC;AAAA,QACJ,KAAK;AACD,UAAAA,EAAS,SAASA,EAAS,SAAW,IAAE,CAAC;AACzC;AAAA,QACJ,KAAK;AACD,UAAAA,EAAS,SAASA,EAAS,SAAW,IAAE,CAAC;AACzC;AAAA,QACJ,KAAK;AACD,UAAAA,EAAS,SAASA,EAAS,SAAW,IAAE,CAAC;AACzC;AAAA,QACJ,KAAK;AACD,UAAAA,EAAS,YAAYA,EAAS,YAAc,IAAE,CAAC;AAC/C;AAAA,QACJ,KAAK;AAAA,QACL,KAAK;AACD;AAAA,MACR;AAEA,WAAK,KAAK,UAAUA,EAAS,YAAa,EAAC,MAAM,GAAG,EAAE,CAAC;AAAA,IAC1D;AAAA,IACD,yBAAyB;AACrB,UAAI,CAAC,KAAK,KAAK,SAAS;AACpB,aAAK,KAAK,gBAAgB;AAC1B;AAAA,MACJ;AAEA,YAAM3R,IAAQ,oBAAI,QACZ4R,IAAc,IAAI,KAAK,KAAK,KAAK,OAAO;AAE9C,MAAA5R,EAAM,SAAS,GAAG,GAAG,GAAG,CAAC,GACzB4R,EAAY,SAAS,GAAG,GAAG,GAAG,CAAC;AAE/B,YAAM3R,IAAW2R,IAAc5R,GACzB6R,IAAW,KAAK,KAAK5R,KAAY,MAAO,KAAK,KAAK,GAAG;AAE3D,WAAK,KAAK,gBAAgB,GAAG4R,CAAQ;AAAA,IACxC;AAAA,IACD,MAAM,eAAe;AAGjB,UAFA,KAAK,WAAW,IAEZ,CAAC,KAAK,gBAAgB;AACtB,aAAK,WAAW;AAChB;AAAA,MACJ;AAEA,YAAMC,IAAW,EAAE,GAAG,KAAK,KAAG;AAW9B,UATI,KAAK,KAAK,cAAc,WAAW,KAAK,KAAK,oBAC7CA,EAAS,YAAY,KAAK,KAAK,kBAGnCA,EAAS,QAAQ,KAAK,YAAY,OAGJ,KAAK,MAAM,KAAK,CAAAhB,MAAQA,EAAK,cAAcgB,EAAS,SAAS,GAEhE;AACvB,aAAK,MAAM,gBAAgB;AAAA,UACvB,MAAM;AAAA,UACN,OAAO;AAAA,UACP,SAAS,8BAA8BA,EAAS,SAAS;AAAA,QAC7D,CAAC,GACD,KAAK,WAAW;AAChB;AAAA,MACJ;AAEA,aAAOA,EAAS,iBAEhB,KAAK,MAAM,iBAAiB;AAAA,QACxB,UAAAA;AAAA,QACA,MAAMA,EAAS,YAAY;AAAA,QAC3B,UAAU,CAACC,MAAY;AACnB,eAAK,WAAW,IACZA,MACA,KAAK,cAAcD,EAAS,SAAS,GACrC,KAAK,cAAc,YACnB,KAAK,cAAcA,EAAS,WAC5B,KAAK,UAAS,GACd,KAAK,gBAAgB;AAAA,QAE7B;AAAA,MACJ,CAAC;AAAA,IACJ;AAAA,IACD,YAAY;AACR,WAAK,OAAO;AAAA,QACR,UAAU;AAAA,QACV,aAAa;AAAA,QACb,iBAAiB;AAAA,QACjB,WAAW;AAAA,QACX,UAAU;AAAA,QACV,SAAS;AAAA,QACT,gBAAgB;AAAA,QAChB,YAAY;AAAA,QACZ,YAAY;AAAA,QACZ,eAAe;AAAA,QACf,SAAS;AAAA,QACT,aAAa;AAAA,QACb,WAAW;AAAA,QACX,cAAc;AAAA,QACd,mBAAmB;AAAA,QACnB,OAAO;AAAA,QACP,QAAQ;AAAA,QACR,eAAe;AAAA,QACf,aAAa,CAAC;AAAA;IAErB;AAAA,IACD,WAAWhB,GAAM;AACb,MAAAA,EAAK,YAAY,CAACA,EAAK;AAAA,IAC1B;AAAA,IACD,MAAM,aAAa;AAEf,YAAM7R,IADe,KAAK,WAAW,MAAM,CAAArC,MAAQA,EAAK,SAAS,IACnC,cAAc,QACtCoV,IAAa;AAAA,QACf,mBAAmB,CAAC,GAAG,KAAK,UAAU;AAAA,QACtC,QAAA/S;AAAA,QACA,WAAW,KAAK;AAAA,QAChB,OAAO,KAAK;AAAA;AAGhB,WAAK,MAAM,eAAe;AAAA,QACtB,YAAA+S;AAAA,QACA,MAAM,KAAK,gBAAgB;AAAA,QAC3B,OAAO,KAAK;AAAA,QACZ,UAAU,CAACD,GAASE,MAAiB;AACjC,UAAIF,MACIE,MACA,KAAK,QAAQA,IAEjB,KAAK,kBAAkB,IACvB,KAAK,WAAW,+BAChB,KAAK,cAAc,GACnB,KAAK,gBAAgB;AAAA,QAE7B;AAAA,MACJ,CAAC;AAAA,IACJ;AAAA,IACD,sBAAsB;AAClB,WAAK,WAAW,QAAQ,KAAK,OAAM,EAAG,SAAS,EAAE,EAAE,OAAO,GAAG,CAAC,EAAE,YAAW,GAC3E,KAAK,cAAa,oBAAI,KAAI,GAAG,mBAAmB,SAAS;AAAA,QACrD,MAAM;AAAA,QACN,OAAO;AAAA,QACP,KAAK;AAAA,MACT,CAAC;AAAA,IACJ;AAAA,IACD,WAAWC,GAAY;AACnB,aAAKA,IACE,IAAI,KAAKA,CAAU,EAAE,mBAAmB,SAAS;AAAA,QACpD,MAAM;AAAA,QACN,OAAO;AAAA,QACP,KAAK;AAAA,MACT,CAAC,IALuB;AAAA,IAM3B;AAAA,IACD,mBAAmBpB,GAAM;AACrB,aAAIA,EAAK,WAAW,cAAoB,cACpCA,EAAK,WAAW,YAAkB,YAClCA,EAAK,WAAW,gBAAsB,gBACnC;AAAA,IACV;AAAA,IACD,qBAAqBA,GAAM;AACvB,UAAI,CAACA,EAAK,qBAAqBA,EAAK,kBAAkB,WAAW;AAAG,eAAO;AAC3E,YAAMqB,IAAYrB,EAAK,kBAAkB,OAAO,CAAAlU,MAAQA,EAAK,SAAS,EAAE;AACxE,aAAO,KAAK,MAAOuV,IAAYrB,EAAK,kBAAkB,SAAU,GAAG;AAAA,IACtE;AAAA,IACD,2BAA2BA,GAAM;AAC7B,aAAKA,EAAK,oBACHA,EAAK,kBAAkB,OAAO,CAAAlU,MAAQA,EAAK,SAAS,EAAE,SADzB;AAAA,IAEvC;AAAA,IACD,0BAA0B;AACtB,aAAO;AAAA,QACH;AAAA,QACA;AAAA,QACA;AAAA;IAEP;AAAA,IACD,iBAAiB;AACb,WAAK,MAAM,mBAAmB;AAAA,QAC1B,aAAa,KAAK;AAAA,QAClB,UAAU,CAACmV,MAAY;AACnB,UAAIA,MACA,KAAK,QAAQ,MACb,KAAK,WAAW,+BAChB,KAAK,kBAAkB,IACvB,KAAK,cAAc;AAAA,QAE3B;AAAA,MACJ,CAAC;AAAA,IACL;AAAA,EACJ;AACJ,sCAx7BiBxU,KAAA,EAAA,OAAM,UAAS;;EAMP,OAAM;oBAKF6C,KAAA,EAAA,OAAM,YAAW,GACbC,KAAA,EAAA,OAAM,oDAAmD,GAQzD7C,KAAA,EAAA,OAAM,qBAAoB,GACtBkB,KAAA,EAAA,OAAM,gBAAe,GAGrBE,KAAA,EAAA,OAAM,eAAc,GAKzBC,KAAA,EAAA,OAAM,YAAW,2FA2BboJ,KAAA,EAAA,OAAM,YAAW,GACbzH,KAAA,EAAA,OAAM,iBAAgB,GAwBzBC,KAAA,EAAA,OAAM,kBAAiB;;EAO3B,OAAM;GAcVE,KAAA,EAAA,OAAM,aAAY,GAKlBC,KAAA,EAAA,OAAM,aAAY,GAKlBC,KAAA,EAAA,OAAM,cAAa,GACfC,KAAA,EAAA,OAAM,aAAY,GAWlBW,KAAA,EAAA,OAAM,aAAY,GAoBtBV,KAAA,EAAA,OAAM,cAAa,GACfC,KAAA,EAAA,OAAM,aAAY,GASlBU,KAAA,EAAA,OAAM,aAAY,GAMtBT,KAAA,EAAA,OAAM,cAAa,GACfU,KAAA,EAAA,OAAM,aAAY,GAMtBT,KAAA,EAAA,OAAM,aAAY,mBAWlBU,KAAA,EAAA,OAAM,cAAa,GACfsG,KAAA,EAAA,OAAM,aAAY,GAetBkK,KAAA,EAAA,OAAM,cAAa,GACfC,KAAA,EAAA,OAAM,aAAY,GAKlBC,KAAA,EAAA,OAAM,aAAY,GAMtBC,KAAA,EAAA,OAAM,aAAY,GAEd5E,KAAA,EAAA,OAAM,iBAAgB,GAClBC,KAAA,EAAA,OAAM,gBAAe,GAIrBzF,KAAA,EAAA,OAAM,gBAAe,GAO7BC,KAAA,EAAA,OAAM,cAAa,GACfC,KAAA,EAAA,OAAM,aAAY,GAYtBmK,KAAA,EAAA,OAAM,aAAY,GAKlBlK,KAAA,EAAA,OAAM,aAAY,GAEdC,KAAA,EAAA,OAAM,kBAAiB,GAO3BC,KAAA,EAAA,OAAM,iBAAgB,sBAa1BE,KAAA,EAAA,OAAM,qBAAoB,GAEtBC,KAAA,EAAA,OAAM,iBAAgB,GAClBC,KAAA,EAAA,OAAM,UAAS,GAUjBiF,KAAA,EAAA,OAAM,aAAY;EAsChB,OAAM;AAAA,EAAsB,MAAK;GAI/BG,KAAA,EAAA,OAAM,OAAM;EAW9B,OAAM;AAAA,EAAmB,KAAI;GAKzBlF,KAAA,EAAA,OAAM,cAAa,GACfC,KAAA,EAAA,OAAM,WAAU,GAIhBC,KAAA,EAAA,OAAM,WAAU,GAIhByJ,KAAA,EAAA,OAAM,WAAU,GAUpBC,KAAA,EAAA,OAAM,UAAS,GAEXzE,KAAA,EAAA,OAAM,eAAc,GAahBC,KAAA,EAAA,OAAM,eAAc,GAChBjF,KAAA,EAAA,OAAM,iBAAgB,GAMlCC,KAAA,EAAA,OAAM,UAAS,GAKPC,KAAA,EAAA,OAAM,cAAa,GAEXC,KAAA,EAAA,OAAM,aAAY,GAMlBuJ,KAAA,EAAA,OAAM,iBAAgB,GAO9BxE,KAAA,EAAA,OAAM,eAAc,GAChB9E,KAAA,EAAA,OAAM,cAAa,GAEfuJ,KAAA,EAAA,OAAM,eAAc,GAExBxE,KAAA,EAAA,OAAM,cAAa,GAEfC,KAAA,EAAA,OAAM,eAAc,GAExB/E,KAAA,EAAA,OAAM,cAAa,GAEfC,KAAA,EAAA,OAAM,eAAc,GAExBC,KAAA,EAAA,OAAM,cAAa,GAEfC,KAAA,EAAA,OAAM,eAAc,GAExBoJ,KAAA,EAAA,OAAM,cAAa,GAEfnJ,KAAA,EAAA,OAAM,eAAc,GAExB4E,KAAA,EAAA,OAAM,cAAa,GAEf3E,KAAA,EAAA,OAAM,eAAc;;EAK7B,OAAA,EAA6E,QAAA,UAAA,SAAA,QAAA,YAAA,SAAA,iBAAA,MAAA;GAExEE,KAAA,EAAA,OAAM,eAAc;;EAIzB,OAAA,EAA6E,QAAA,UAAA,SAAA,QAAA,YAAA,SAAA,iBAAA,MAAA;GAExEE,KAAA,EAAA,OAAM,eAAc;;EAG2C,OAAM;GAErE+I,KAAA,EAAA,OAAM,eAAc,GAGpBvE,KAAA,EAAA,OAAA,EAAuD,aAAA,SAAA,OAAA,QAAA,cAAA,MAAA,EAAA,GAKvDvE,KAAA,EAAA,OAAM,kBAAiB,GAEdC,KAAA,EAAA,OAAM,iBAAgB,GAQ3CC,KAAA,EAAA,OAAM,UAAS,GAEXC,KAAA,EAAA,OAAM,WAAU,GASpB4I,KAAA,EAAA,OAAM,oBAAmB,GAKrBvE,KAAA,EAAA,OAAM,gBAAe,GAEjBwE,KAAA,EAAA,OAAA,EAAsC,cAAA,QAAA,OAAA,OAAA,EAAA;;SA9dpD7R,EAAK,cAAhB1D,EAmeM,OAAAI,IAAA;AAAA,IAleFC,EAieM,OAAA,MAAA;AAAA,QAheFA,EAKM,OAAA,MAAA;AAAA,gBAJFL,EAGSO,GAAA,MAAAC,EAHiBkD,EAAQ,UAAA,CAAnBsQ,YAAfhU,EAGS,UAAA;AAAA,UAH4B,KAAKgU,EAAQ;AAAA,UAAI,UAAM,WAAS,EAAA,QAC/CtQ,oBAAkBsQ,EAAQ,GAAE,CAAA,CAAA;AAAA,UAAK,SAAK,CAAAtT,MAAET,EAAkB,mBAAC+T,CAAO;AAAA,QACjF,GAAA1T,EAAA0T,EAAQ,IAAI,IAAG,MAAI1T,EAAA0T,EAAQ,IAAI,GAAA,IAAAnU,EAAA;;aAH5B6D,EAAU,UAAA;AAAA;MAOxB5C,EAAAT,EAoUM,OApUNP,IAoUM;AAAA,UAlUFO,EA6FU,WAAA;AAAA,UA7FA,oCAAkCqD,EAAa,kBAAA,cAAA,CAAA,CAAA;AAAA;UAErDC,EAAA,EAAA,MAAAA,EAAA,EAAA,IAAAtD,EAA8B,YAA1B,yBAAqB,EAAA;AAAA,UAEYqD,EAAS,aAA9CvD,EAAA,GAAAH,EAGM,OAHNyC,IAGMkB,EAAA,EAAA,MAAAA,EAAA,EAAA,IAAA;AAAA,YAFFtD,EAAmC,OAAA,EAA9B,OAAM,kBAAiB,GAAA,MAAA,EAAA;AAAA,YAC5BA,EAA2B,WAAxB,wBAAoB,EAAA;AAAA;UAEdqD,EAAS,8BAAtB1D,EAoFO,QAAA0C,IAAA;AAAA,YAnFHrC,EAkFM,OAlFNsC,IAkFM;AAAA,cAjFFtC,EAMM,OANNuC,IAMM;AAAA,gBALFe,EAAA,EAAA,MAAAA,EAAA,EAAA,IAAAtD,EAA8B,YAA1B,yBAAqB,EAAA;AAAA,gBACXJ,EAAiB,0BAA/BD,EAGS,UAAA;AAAA;kBAHwB,OAAM;AAAA,kBAA0B,kCAAeC,EAAO,QAAA,GAAA,CAAA,SAAA,CAAA;AAAA;oBAAI,uBAEvF,EAAA;AAAA,kBAAAI,EAA2B,KAAA,EAAxB,OAAM,cAAa,GAAA,MAAA,EAAA;AAAA;;cAI9BA,EAOM,OAPNN,IAOM;AAAA,gBANFM,EAEM,OAFNY,IAA2B,gBACVX,EAAAL,EAAA,QAAQ,IAAG,QAAGK,EAAGL,iBAAe,MAAM,IAAG,MAACK,EAAGoD,aAAW,MAAM,IAAG,MAClF,CAAA;AAAA,gBACArD,EAEM,OAFNc,IAEM;AAAA,kBADFd,EAAoE,OAAA;AAAA,oBAA/D,OAAM;AAAA,oBAAiB,kBAAgBJ,EAAQ,WAAA,KAAA;AAAA;;;cAI5DI,EAuBK,MAvBLe,IAuBK;AAAA,wBAtBDpB,EAqBKO,GAAA,MAAAC,EArBmBkD,EAAU,YAAA,CAAvBgQ,YAAX1T,EAqBK,MAAA;AAAA,kBArBgC,KAAK0T,EAAU;AAAA,kBAAI,OAAM;AAAA;kBAC1DrT,EAGM,OAAA;AAAA,oBAHD,OAAMO,EAAA,CAAA,YAAgC,EAAA,SAAA8S,EAAU,UAAS,CAAA,CAAA;AAAA,oBACzD,SAAK,CAAAhT,MAAET,EAAU,WAACyT,CAAS;AAAA;oBAChBA,EAAU,aAAtBvT,EAAA,GAAAH,EAAyC,YAAR,GAAC;;kBAEtCK,EAGO,QAAA;AAAA,oBAHD,OAAMO,EAAA,CAAA,aAAmC,EAAA,WAAA8S,EAAU,UAAS,CAAA,CAAA;AAAA,oBAC7D,SAAK,CAAAhT,MAAET,EAAU,WAACyT,CAAS;AAAA,kBACzB,GAAApT,EAAAoT,EAAU,IAAI,GAAA,IAAA7Q,EAAA;AAAA,kBAEP5C,EAAiB,0BAA/BD,EAWS,UAAA;AAAA;oBAXwB,OAAM;AAAA,oBAAc,SAAO,CAAAU,MAAAT,EAAA,WAAWyT,EAAU,EAAE;AAAA,oBAC/E,OAAM;AAAA;;;;;cAcPhQ,EAAK,cAAhB1D,EAsBM,OAAA+D,IAAA;AAAA,gBArBFJ,EAAA,EAAA,MAAAA,EAAA,EAAA,IAAAtD,EAAoC,eAA7B,yBAAqB,EAAA;AAAA,gBAC5BA,EAmBK,MAnBLmK,IAmBK;AAAA,kBAlBDnK,EAiBK,MAjBL0C,IAiBK;AAAA,oBAhBDY,EAAA,EAAA,MAAAA,EAAA,EAAA,IAAAtD,EAEO,QAFD,EAAA,OAAM,YAAW,GAAC,qCAExB,EAAA;AAAA,oBACAA,EAYS,UAAA;AAAA,sBAZD,MAAK;AAAA,sBAAS,OAAM;AAAA,sBAAc,gCAAOJ,EAAc,eAAA;AAAA,sBAC3D,OAAM;AAAA;;;;;0BAgBtBD,EAQM,OAAA;AAAA,gBARD,OAAM;AAAA,gBAAqB,KAAK0D,EAAU,cAAA;AAAA;gBAC3CC,EAAA,EAAA,MAAAA,EAAA,EAAA,IAAAtD,EAAoC,eAA7B,yBAAqB,EAAA;AAAA,gBAC5BsD,EAAA,EAAA,MAAAA,EAAA,EAAA,IAAAtD,EAAmD,WAAhD,gDAA4C,EAAA;AAAA,gBAC/CA,EAIM,OAJN2C,IAIM;AAAA,kBAHF3C,EAAqB,aAAfqD,EAAQ,QAAA,GAAA,CAAA;AAAA,kBACdrD,EAA8E,SAAA;AAAA,oBAAvE,MAAK;AAAA,oBAAO,IAAG;AAAA,oBAAiB,OAAM;AAAA,oBAAc,oCAAQJ,EAAS,aAAAA,EAAA,UAAA,GAAA2D,CAAA;AAAA;oCAC5EvD,EAAmE,SAAA;AAAA,oBAA5D,KAAI;AAAA,oBAAiB,OAAM;AAAA,qBAAa,gBAAY,EAAA;AAAA;;cAIzCJ,EAAc,mBAAKyD,EAAU,WAAC,eAAxD1D,EAEM,OAFNiD,IAAgE,0BAEhE;cAEA5C,EAA4F,UAAA;AAAA,gBAApF,OAAM;AAAA,gBAAgB,qCAAeJ,EAAU,cAAAA,EAAA,WAAA,GAAA2D,CAAA,GAAA,CAAA,SAAA,CAAA;AAAA,mBAAK3D,EAAoB,oBAAA,GAAA,CAAA;AAAA;;;cAzFhFyD,EAAa,kBAAA,aAAA;AAAA;UA+FzBrD,EA4JU,WAAA;AAAA,UA5JA,oCAAkCqD,EAAa,kBAAA,WAAA,CAAA,CAAA;AAAA;UAErDC,EAAA,EAAA,MAAAA,EAAA,EAAA,IAAAtD,EAAgC,YAA5B,2BAAuB,EAAA;AAAA,UAC3BA,EAwJO,QAAA,MAAA;AAAA,YAvJHA,EAGM,OAHN6C,IAGM;AAAA,cAFFS,EAAA,EAAA,MAAAA,EAAA,EAAA,IAAAtD,EAAwC,SAAjC,EAAA,KAAI,YAAW,GAAC,aAAS,EAAA;AAAA,gBAChCA,EAAmE,SAAA;AAAA,gBAA5D,MAAK;AAAA,gBAAO,IAAG;AAAA,gBAAqB,uBAAAsD,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAAjD,MAAAgD,EAAA,KAAK,WAAQhD;AAAA,gBAAE,UAAA;AAAA;gBAAf,CAAAiR,GAAAjO,EAAA,KAAK,QAAQ;AAAA;;YAG5DrD,EAGM,OAHN8C,IAGM;AAAA,cAFFQ,EAAA,EAAA,MAAAA,EAAA,EAAA,IAAAtD,EAAiD,SAA1C,EAAA,KAAI,mBAAkB,GAAC,eAAW,EAAA;AAAA,gBACzCA,EAA+E,YAAA;AAAA,gBAArE,IAAG;AAAA,gBAA4B,uBAAAsD,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAAjD,MAAAgD,EAAA,KAAK,cAAWhD;AAAA,gBAAE,UAAA;AAAA;gBAAlB,CAAAiR,GAAAjO,EAAA,KAAK,WAAW;AAAA;;YAG7DrD,EA8BM,OA9BN+C,IA8BM;AAAA,cA7BF/C,EASM,OATNgD,IASM;AAAA,gBARFM,EAAA,EAAA,MAAAA,EAAA,EAAA,IAAAtD,EAAsD,SAA/C,EAAA,KAAI,mBAAkB,GAAC,oBAAgB,EAAA;AAAA,kBAC9CA,EAMS,UAAA;AAAA,kBAND,IAAG;AAAA,kBAA4B,uBAAAsD,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAAjD,MAAAgD,EAAA,KAAK,kBAAehD;AAAA,kBAAE,UAAA;AAAA;;;kBAAtB,CAAA+Q,GAAA/N,EAAA,KAAK,eAAe;AAAA;;cAS/DrD,EAiBM,OAjBN2D,IAiBM;AAAA,gBAhBFL,EAAA,EAAA,MAAAA,EAAA,EAAA,IAAAtD,EAA+C,SAAxC,EAAA,KAAI,YAAW,GAAC,oBAAgB,EAAA;AAAA,kBACvCA,EAWS,UAAA;AAAA,kBAXD,IAAG;AAAA,kBAAqB,uBAAAsD,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAAjD,MAAAgD,EAAA,KAAK,YAAShD;AAAA,kBAAE,UAAA;AAAA;;;kBAAhB,CAAA+Q,GAAA/N,EAAA,KAAK,SAAS;AAAA;gBAYjCA,EAAA,KAAK,cAAS,kBAA3B1D,EAE6B,SAAA;AAAA;kBAFY,MAAK;AAAA,kBAC1C,aAAY;AAAA,kBAAyC,uBAAA2D,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAAjD,MAAAgD,EAAA,KAAK,kBAAehD;AAAA,kBACzE,OAAA,EAAwB,cAAA,MAAA;AAAA;kBAD6B,CAAAiR,GAAAjO,EAAA,KAAK,eAAe;AAAA;;;YAKrFrD,EAcM,OAdNiD,IAcM;AAAA,cAbFjD,EAQM,OARNkD,IAQM;AAAA,gBAPFI,EAAA,EAAA,MAAAA,EAAA,EAAA,IAAAtD,EAAsC,SAA/B,EAAA,KAAI,WAAU,GAAC,YAAQ,EAAA;AAAA,kBAC9BA,EAKS,UAAA;AAAA,kBALD,IAAG;AAAA,kBAAoB,uBAAAsD,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAAjD,MAAAgD,EAAA,KAAK,WAAQhD;AAAA,kBAAE,UAAA;AAAA;kBAC1CL,EAAgC,UAAxB,EAAA,OAAM,MAAK,GAAC,OAAG,EAAA;AAAA,kBACvBA,EAAsC,UAA9B,EAAA,OAAM,SAAQ,GAAC,UAAM,EAAA;AAAA,kBAC7BA,EAAkC,UAA1B,EAAA,OAAM,OAAM,GAAC,QAAI,EAAA;AAAA,kBACzBA,EAA0C,UAAlC,EAAA,OAAM,WAAU,GAAC,YAAQ,EAAA;AAAA;kBAJN,CAAAoR,GAAA/N,EAAA,KAAK,QAAQ;AAAA;;cAOhDrD,EAGM,OAHN4D,IAGM;AAAA,gBAFFN,EAAA,EAAA,MAAAA,EAAA,EAAA,IAAAtD,EAAkC,SAA3B,EAAA,KAAI,SAAQ,GAAC,UAAM,EAAA;AAAA,kBAC1BA,EAA8D,SAAA;AAAA,kBAAvD,MAAK;AAAA,kBAAO,IAAG;AAAA,kBAAkB,uBAAAsD,EAAA,EAAA,MAAAA,EAAA,EAAA,IAAA,CAAAjD,MAAAgD,EAAA,KAAK,SAAMhD;AAAA,kBAAE,UAAA;AAAA;kBAAb,CAAAiR,GAAAjO,EAAA,KAAK,MAAM;AAAA;;;YAI3DrD,EAKM,OALNmD,IAKM;AAAA,cAJFnD,EAGM,OAHN6D,IAGM;AAAA,gBAFFP,EAAA,EAAA,MAAAA,EAAA,EAAA,IAAAtD,EAAoD,SAA7C,EAAA,KAAI,kBAAiB,GAAC,mBAAe,EAAA;AAAA,kBAC5CA,EAA2F,SAAA;AAAA,kBAApF,MAAK;AAAA,kBAAS,IAAG;AAAA,kBAA2B,uBAAAsD,EAAA,EAAA,MAAAA,EAAA,EAAA,IAAA,CAAAjD,MAAAgD,EAAA,KAAK,iBAAchD;AAAA,kBAAE,KAAI;AAAA,kBAAI,MAAK;AAAA;kBAAlC,CAAAiR,GAAAjO,EAAA,KAAK,cAAc;AAAA;;;YAI9ErD,EASM,OATNoD,IASM;AAAA,cARFE,EAAA,EAAA,MAAAA,EAAA,EAAA,IAAAtD,EAA4C,SAArC,EAAA,KAAI,cAAa,GAAC,eAAW,EAAA;AAAA,gBACpCA,EAMS,UAAA;AAAA,gBAND,IAAG;AAAA,gBAAuB,uBAAAsD,EAAA,EAAA,MAAAA,EAAA,EAAA,IAAA,CAAAjD,MAAAgD,EAAA,KAAK,aAAUhD;AAAA;gBAC7CiD,EAAA,EAAA,MAAAA,EAAA,EAAA,IAAAtD,EAAgD,UAAxC,EAAA,OAAM,GAAE,GAAC,0BAAsB,EAAA;AAAA,wBACvCL,EAGSO,GAAA,MAAAC,EAHgBN,EAAU,YAAA,CAApBsV,YAAfxV,EAGS,UAAA;AAAA,kBAH6B,KAAKwV,EAAO;AAAA,kBAC7C,UAAUA,EAAO,IAAI,MAAMA,EAAO,IAAI;AAAA,gBACpC,GAAAlV,EAAAkV,EAAO,IAAI,IAAG,QAAMlV,EAAAkV,EAAO,IAAI,GAAA,GAAAvF,EAAA;;gBAJR,CAAAwB,GAAA/N,EAAA,KAAK,UAAU;AAAA;;YASrDrD,EAcM,OAdN8D,IAcM;AAAA,cAbF9D,EAYM,OAZNoK,IAYM;AAAA,gBAXF9G,EAAA,EAAA,MAAAA,EAAA,EAAA,IAAAtD,EAA+C,SAAxC,EAAA,KAAI,kBAAiB,GAAC,cAAU,EAAA;AAAA,kBACvCA,EASS,UAAA;AAAA,kBATD,IAAG;AAAA,kBAA2B,uBAAAsD,EAAA,EAAA,MAAAA,EAAA,EAAA,IAAA,CAAAjD,MAAAgD,EAAA,KAAK,aAAUhD;AAAA,kBAAE,UAAA;AAAA;;;kBAAjB,CAAA+Q,GAAA/N,EAAA,KAAK,UAAU;AAAA;;;YAa7DrD,EAUM,OAVNsU,IAUM;AAAA,cATFtU,EAGM,OAHNuU,IAGM;AAAA,gBAFFjR,EAAA,EAAA,MAAAA,EAAA,EAAA,IAAAtD,EAAuD,SAAhD,EAAA,KAAI,iBAAgB,GAAC,uBAAmB,EAAA;AAAA,kBAC/CA,EAAoE,SAAA;AAAA,kBAA7D,MAAK;AAAA,kBAAO,IAAG;AAAA,kBAA0B,uBAAAsD,EAAA,EAAA,MAAAA,EAAA,EAAA,IAAA,CAAAjD,MAAAgD,EAAA,KAAK,gBAAahD;AAAA;kBAAlB,CAAAiR,GAAAjO,EAAA,KAAK,aAAa;AAAA;;cAGtErD,EAGM,OAHNwU,IAGM;AAAA,gBAFFlR,EAAA,EAAA,MAAAA,EAAA,EAAA,IAAAtD,EAAsC,SAA/B,EAAA,KAAI,WAAU,GAAC,YAAQ,EAAA;AAAA,kBAC9BA,EAAiE,SAAA;AAAA,kBAA1D,MAAK;AAAA,kBAAO,IAAG;AAAA,kBAAoB,uBAAAsD,EAAA,EAAA,MAAAA,EAAA,EAAA,IAAA,CAAAjD,MAAAgD,EAAA,KAAK,UAAOhD;AAAA,kBAAE,UAAA;AAAA;kBAAd,CAAAiR,GAAAjO,EAAA,KAAK,OAAO;AAAA;;;YAI9DrD,EAYM,OAZNyU,IAYM;AAAA,cAXFnR,EAAA,EAAA,MAAAA,EAAA,EAAA,IAAAtD,EAA4B,eAArB,iBAAa,EAAA;AAAA,cACpBA,EASM,OATN6P,IASM;AAAA,gBARF7P,EAGM,OAHN8P,IAGM;AAAA,oBAFF9P,EAAoE,SAAA;AAAA,oBAA7D,MAAK;AAAA,oBAAW,IAAG;AAAA,oBAAwB,uBAAAsD,EAAA,EAAA,MAAAA,EAAA,EAAA,IAAA,CAAAjD,MAAAgD,EAAA,KAAK,cAAWhD;AAAA;oBAAhB,CAAA+U,GAAA/R,EAAA,KAAK,WAAW;AAAA;kBAClEC,EAAA,EAAA,MAAAA,EAAA,EAAA,IAAAtD,EAAoD,SAA7C,EAAA,KAAI,eAAc,GAAC,sBAAkB,EAAA;AAAA;gBAEhDA,EAGM,OAHNqK,IAGM;AAAA,oBAFFrK,EAAgE,SAAA;AAAA,oBAAzD,MAAK;AAAA,oBAAW,IAAG;AAAA,oBAAsB,uBAAAsD,EAAA,EAAA,MAAAA,EAAA,EAAA,IAAA,CAAAjD,MAAAgD,EAAA,KAAK,YAAShD;AAAA;oBAAd,CAAA+U,GAAA/R,EAAA,KAAK,SAAS;AAAA;kBAC9DC,EAAA,EAAA,MAAAA,EAAA,EAAA,IAAAtD,EAAgD,SAAzC,EAAA,KAAI,aAAY,GAAC,oBAAgB,EAAA;AAAA;;;YAKpDA,EAWM,OAXNsK,IAWM;AAAA,cAVFtK,EASM,OATNuK,IASM;AAAA,gBARFjH,EAAA,EAAA,MAAAA,EAAA,EAAA,IAAAtD,EAAyD,SAAlD,EAAA,KAAI,gBAAe,GAAC,0BAAsB,EAAA;AAAA,kBACjDA,EAMS,UAAA;AAAA,kBAND,IAAG;AAAA,kBAAyB,uBAAAsD,EAAA,EAAA,MAAAA,EAAA,EAAA,IAAA,CAAAjD,MAAAgD,EAAA,KAAK,eAAYhD;AAAA;;;kBAAjB,CAAA+Q,GAAA/N,EAAA,KAAK,YAAY;AAAA;;;YAU7DrD,EAGM,OAHN0U,IAGM;AAAA,cAFFpR,EAAA,EAAA,MAAAA,EAAA,EAAA,IAAAtD,EAAyC,SAAlC,EAAA,KAAI,iBAAgB,GAAC,SAAK,EAAA;AAAA,gBACjCA,EAA8D,YAAA;AAAA,gBAApD,IAAG;AAAA,gBAA0B,uBAAAsD,EAAA,EAAA,MAAAA,EAAA,EAAA,IAAA,CAAAjD,MAAAgD,EAAA,KAAK,QAAKhD;AAAA;gBAAV,CAAAiR,GAAAjO,EAAA,KAAK,KAAK;AAAA;;YAGrDrD,EAOM,OAPNwK,IAOM;AAAA,cANFlH,EAAA,EAAA,MAAAA,EAAA,EAAA,IAAAtD,EAA0B,eAAnB,eAAW,EAAA;AAAA,cAClBA,EAIM,OAJNyK,IAIM;AAAA,gBAHFzK,EAAoB,aAAdqD,EAAO,OAAA,GAAA,CAAA;AAAA,gBACbrD,EAA4F,SAAA;AAAA,kBAArF,MAAK;AAAA,kBAAO,IAAG;AAAA,kBAAoB,OAAM;AAAA,kBAAc,sCAAQJ,EAAW,eAAAA,EAAA,YAAA,GAAA2D,CAAA;AAAA,kBAAE,UAAA;AAAA;kCACnFvD,EAAsE,SAAA;AAAA,kBAA/D,KAAI;AAAA,kBAAoB,OAAM;AAAA,mBAAa,gBAAY,EAAA;AAAA;;YAItEA,EAKM,OALN0K,IAKM;AAAA,cAJF1K,EAGS,UAAA;AAAA,gBAHD,MAAK;AAAA,gBAAS,OAAM;AAAA,gBAAmB,uCAAeJ,EAAY,gBAAAA,EAAA,aAAA,GAAA2D,CAAA,GAAA,CAAA,SAAA,CAAA;AAAA,gBACrE,UAAUF,EAAQ;AAAA,mBAChBA,EAAQ,WAAA,cAAA,eAAA,GAAA,GAAAsH,EAAA;AAAA;;;cAvJftH,EAAa,kBAAA,UAAA;AAAA;UA8JzBrD,EAkEU,WAAA;AAAA,UAlEA,oCAAkCqD,EAAa,kBAAA,YAAA,CAAA,CAAA;AAAA;UAErDC,EAAA,EAAA,MAAAA,EAAA,EAAA,IAAAtD,EAAwB,YAApB,mBAAe,EAAA;AAAA,UACnBA,EA8DM,OA9DN4K,IA8DM;AAAA,YA5DF5K,EAQM,OARN6K,IAQM;AAAA,cAPF7K,EAMM,OANN8K,IAMM;AAAA,gBALF9K,EAA0F,UAAA;AAAA,kBAAjF,mBAAiBqD,EAAY,iBAAA,OAAA;AAAA,kBAAe,kCAAOzD,EAAS,UAAA,KAAA;AAAA,mBAAS,OAAG,CAAA;AAAA,gBACjFI,EAA0F,UAAA;AAAA,kBAAjF,mBAAiBqD,EAAY,iBAAA,OAAA;AAAA,kBAAe,kCAAOzD,EAAS,UAAA,KAAA;AAAA,mBAAS,OAAG,CAAA;AAAA,gBACjFI,EACsD,UAAA;AAAA,kBAD7C,mBAAiBqD,EAAY,iBAAA,aAAA;AAAA,kBACjC,kCAAOzD,EAAS,UAAA,WAAA;AAAA,mBAAe,aAAS,CAAA;AAAA,kBAC7CI,EAAmE,SAAA;AAAA,kBAA5D,MAAK;AAAA,kEAAgBqD,EAAW,cAAAhD;AAAA,kBAAE,aAAY;AAAA;sBAAzBgD,EAAW,WAAA;AAAA;;;YAK/CrD,EAkCQ,SAlCR+P,IAkCQ;AAAA,gCAjCJ/P,EAWQ,SAAA,MAAA;AAAA,gBAVJA,EASK,MAAA,MAAA;AAAA,kBARDA,EAAkB,YAAd,WAAS;AAAA,kBACbA,EAAkB,YAAd,WAAS;AAAA,kBACbA,EAAoB,YAAhB,aAAW;AAAA,kBACfA,EAAkB,YAAd,WAAS;AAAA,kBACbA,EAAkB,YAAd,WAAS;AAAA,kBACbA,EAAiB,YAAb,UAAQ;AAAA,kBACZA,EAAe,YAAX,QAAM;AAAA,kBACVA,EAAe,YAAX,QAAM;AAAA;;cAGlBA,EAoBQ,SAAA,MAAA;AAAA,wBAnBJL,EAkBKO,GAAA,MAAAC,EAlBcP,EAAa,eAAA,CAArBoT,YAAXrT,EAkBK,MAAA;AAAA,kBAlB8B,KAAKqT,EAAK;AAAA;kBACzChT,EAA6B,MAAA,MAAAC,EAAtB+S,EAAK,SAAS,GAAA,CAAA;AAAA,kBACrBhT,EAA4B,MAAA,MAAAC,EAArB+S,EAAK,QAAQ,GAAA,CAAA;AAAA,kBACpBhT,EAA8B,MAAA,MAAAC,EAAvB+S,EAAK,UAAU,GAAA,CAAA;AAAA,kBACtBhT,EAA8B,MAAA,MAAAC,EAAvB+S,EAAK,UAAU,GAAA,CAAA;AAAA,kBACtBhT,EAAiC,MAAA,MAAAC,EAA1B+S,EAAK,aAAa,GAAA,CAAA;AAAA,kBACzBhT,EAA2B,MAAA,MAAAC,EAApB+S,EAAK,OAAO,GAAA,CAAA;AAAA,kBACnBhT,EAIK,MAAA,MAAA;AAAA,oBAHDA,EAEO,QAAA;AAAA,sBAFA,0BAAwBgT,EAAK,OAAO,YAAW,EAAG,QAAO,KAAA,GAAA,CAAA,CAAA;AAAA,oBACzD,GAAA/S,EAAA+S,EAAK,MAAM,GAAA,CAAA;AAAA;kBAGtBhT,EAKK,MAAA,MAAA;AAAA,oBAJuDgT,EAAK,WAAM,oBAAnErT,EACwC,UAAA;AAAA;sBAD/B,SAAO,CAAAU,MAAAT,EAAA,iBAAiBoT,EAAK,SAAS;AAAA,sBAC3C,OAAM;AAAA,uBAAgB,SAAK,GAAAjI,EAAA,WAC/BpL,EACwC,UAAA;AAAA;sBAD/B,SAAO,CAAAU,MAAAT,EAAA,gBAAgBoT,EAAK,SAAS;AAAA,sBAC1C,OAAM;AAAA,uBAAgB,SAAK,GAAAqC,EAAA;AAAA;;;;YAOnCxV,EAAA,MAAM,2BAAlBF,EAWM,OAAAqQ,IAAA;AAAA,cAVFhQ,EASM,OATNiQ,IASM;AAAA,gBARF3M,EAAA,EAAA,MAAAA,EAAA,EAAA,IAAAtD,EAA4C,MAAxC,EAAA,OAAM,gBAAe,GAAC,iBAAa,EAAA;AAAA,gBACvCsD,EAAA,EAAA,MAAAA,EAAA,EAAA,IAAAtD,EAAiF,WAA9E,8EAA0E,EAAA;AAAA,kCAC7EA,EAAI,MAAA,MAAA,MAAA,EAAA;AAAA,gBACJA,EAII,KAJJkQ,IAII;AAAA,sCAJY,kFAEZ,EAAA;AAAA,kBAAAlQ,EAC+C,UAAA;AAAA,oBADvC,MAAK;AAAA,oBAAS,OAAM;AAAA,oBACvB,kCAAOJ,EAAc,eAAA;AAAA,qBAAI,UAAQ;AAAA;;;;;cA5D9CyD,EAAa,kBAAA,WAAA;AAAA;;aAlQCA,EAAU,UAAA;AAAA;MAsUxC5C,EAAAT,EAkJM,OAlJNsV,IAkJM;AAAA,0BAjJFtV,EAEM,OAAA,EAFD,OAAM,YAAQ;AAAA,UACfA,EAAuD,OAAlD,EAAA,OAAM,eAAc,GAAC,yBAAuB;AAAA;QAGrDA,EAiBM,OAjBNgL,IAiBM;AAAA,UAhBFhL,EAGM,OAHNiL,IAGM;AAAA,YAFF3H,EAAA,EAAA,MAAAA,EAAA,EAAA,IAAAtD,EAA+C,OAA1C,EAAA,OAAM,aAAY,GAAC,qBAAiB,EAAA;AAAA,YACzCA,EAA2B,eAAnBqD,EAAU,UAAA,GAAA,CAAA;AAAA;UAEtBrD,EAGM,OAHNkL,IAGM;AAAA,YAFF5H,EAAA,EAAA,MAAAA,EAAA,EAAA,IAAAtD,EAAwC,OAAnC,EAAA,OAAM,aAAY,GAAC,cAAU,EAAA;AAAA,YAClCA,EAAyB,eAAjBqD,EAAQ,QAAA,GAAA,CAAA;AAAA;UAEpBrD,EAGM,OAHN2U,IAGM;AAAA,YAFFrR,EAAA,EAAA,MAAAA,EAAA,EAAA,IAAAtD,EAA0C,OAArC,EAAA,OAAM,aAAY,GAAC,gBAAY,EAAA;AAAA,YACpCA,EAAwC,OAAA,MAAAC,EAAhCoD,EAAgB,iBAAC,MAAM,GAAA,CAAA;AAAA;4BAEnCrD,EAGM,OAAA,EAHD,OAAM,cAAU;AAAA,YACjBA,EAA2C,OAAtC,EAAA,OAAM,aAAY,GAAC,eAAa;AAAA,YACrCA,EAA2B,aAAtB,kBAAgB;AAAA;;QAI7BA,EAoBM,OApBN4U,IAoBM;AAAA,UAnBFtR,EAAA,EAAA,MAAAA,EAAA,EAAA,IAAAtD,EAAgD,OAA3C,EAAA,OAAM,gBAAe,GAAC,mBAAe,EAAA;AAAA,UAC1CA,EAiBM,OAjBNmQ,IAiBM;AAAA;YAJFnQ,EAGM,OAHNoQ,IAGM;AAAA,cAFFpQ,EAA2D,OAA3DmL,IAA2DlL,EAA5BL,EAAmB,mBAAA,GAAA,CAAA;AAAA,cAClD0D,EAAA,EAAA,MAAAA,EAAA,EAAA,IAAAtD,EAA4C,OAAvC,EAAA,OAAM,gBAAe,GAAC,eAAW,EAAA;AAAA;;;QAKlDA,EA6EM,OA7ENoL,IA6EM;AAAA,UA5EF9H,EAAA,EAAA,MAAAA,EAAA,EAAA,IAAAtD,EAAqD,OAAhD,EAAA,OAAM,gBAAe,GAAC,wBAAoB,EAAA;AAAA,kBAC/CL,EA0EMO,GAAA,MAAAC,EA1EckD,EAAgB,kBAAA,CAAxB2P,YAAZrT,EA0EM,OAAA;AAAA,YA1EiC,KAAKqT,EAAK;AAAA,YAC5C,OAAKzS,EAAA,CAAA,aAAgBX,EAAkB,mBAACoT,CAAI,CAAA,CAAA;AAAA;YAE7ChT,EAaM,OAbNqL,IAaM;AAAA,cAZFrL,EAQM,OAAA,MAAA;AAAA,gBAPFA,EAKM,OALNsL,IAKM;AAAA,sBAJC0H,EAAK,QAAQ,IAAG,KACnB,CAAA;AAAA,kBAAAhT,EAEO,QAAA;AAAA,oBAFA,OAAKO,EAAA,CAAA,oBAAA,UAAiCyS,EAAK,eAAe,CAAA;AAAA,kBAC1D,GAAA/S,EAAA+S,EAAK,eAAe,GAAA,CAAA;AAAA;gBAG/BhT,EAAiE,OAAjE6U,IAA4B,gBAAc5U,EAAA+S,EAAK,SAAS,GAAA,CAAA;AAAA;cAE5DhT,EAEO,QAAA;AAAA,gBAFA,sCAAoCgT,EAAK,OAAO,cAAc,QAAO,KAAA,GAAA,CAAA,CAAA;AAAA,cACrE,GAAA/S,EAAA+S,EAAK,MAAM,GAAA,CAAA;AAAA;YAItBhT,EAyBM,OAzBNqQ,IAyBM;AAAA,cAxBFrQ,EAGM,OAHNuL,IAGM;AAAA,gBAFFjI,EAAA,EAAA,MAAAA,EAAA,EAAA,IAAAtD,EAA2C,OAAtC,EAAA,OAAM,eAAc,GAAC,eAAW,EAAA;AAAA,gBACrCA,EAAqD,OAArD8U,IAA6B7U,EAAA+S,EAAK,UAAU,GAAA,CAAA;AAAA;cAEhDhT,EAGM,OAHNsQ,IAGM;AAAA,gBAFFhN,EAAA,EAAA,MAAAA,EAAA,EAAA,IAAAtD,EAA+C,OAA1C,EAAA,OAAM,eAAc,GAAC,mBAAe,EAAA;AAAA,gBACzCA,EAA+D,OAA/DuQ,IAA+DtQ,EAAlC+S,EAAK,cAAc,IAAG,UAAM,CAAA;AAAA;cAE7DhT,EAGM,OAHNwL,IAGM;AAAA,gBAFFlI,EAAA,EAAA,MAAAA,EAAA,EAAA,IAAAtD,EAA8C,OAAzC,EAAA,OAAM,eAAc,GAAC,kBAAc,EAAA;AAAA,gBACxCA,EAAoE,OAApEyL,IAAoExL,EAAvCL,aAAWoT,EAAK,aAAa,CAAA,GAAA,CAAA;AAAA;cAE9DhT,EAGM,OAHN0L,IAGM;AAAA,gBAFFpI,EAAA,EAAA,MAAAA,EAAA,EAAA,IAAAtD,EAAwC,OAAnC,EAAA,OAAM,eAAc,GAAC,YAAQ,EAAA;AAAA,gBAClCA,EAA8D,OAA9D2L,IAA8D1L,EAAjCL,aAAWoT,EAAK,OAAO,CAAA,GAAA,CAAA;AAAA;cAExDhT,EAGM,OAHN+U,IAGM;AAAA,gBAFFzR,EAAA,EAAA,MAAAA,EAAA,EAAA,IAAAtD,EAA0C,OAArC,EAAA,OAAM,eAAc,GAAC,cAAU,EAAA;AAAA,gBACpCA,EAAqD,OAArD4L,IAA6B3L,EAAA+S,EAAK,UAAU,GAAA,CAAA;AAAA;cAEhDhT,EAGM,OAHNwQ,IAGM;AAAA,gBAFFlN,EAAA,EAAA,MAAAA,EAAA,EAAA,IAAAtD,EAA8C,OAAzC,EAAA,OAAM,eAAc,GAAC,kBAAc,EAAA;AAAA,gBACxCA,EAA6D,OAA7D6L,IAA6D5L,EAAhC+S,EAAK,aAAa,IAAG,SAAK,CAAA;AAAA;;YAIpDA,EAAK,eAAhBlT,KAAAH,EAIM,OAJNmM,IAIM;AAAA,cAFFxI,EAAA,EAAA,MAAAA,EAAA,EAAA,IAAAtD,EAA2C,OAAtC,EAAA,OAAM,eAAc,GAAC,eAAW,EAAA;AAAA,cACrCA,EAAsD,OAAtD+L,IAA6B9L,EAAA+S,EAAK,WAAW,GAAA,CAAA;AAAA;YAGtCA,EAAK,SAAhBlT,KAAAH,EAIM,OAJNqM,IAIM;AAAA,cAFF1I,EAAA,EAAA,MAAAA,EAAA,EAAA,IAAAtD,EAAqC,OAAhC,EAAA,OAAM,eAAc,GAAC,SAAK,EAAA;AAAA,cAC/BA,EAAgD,OAAhDiM,IAA6BhM,EAAA+S,EAAK,KAAK,GAAA,CAAA;AAAA;YAGhCA,EAAK,qBAAqBA,EAAK,kBAAkB,SAAM,KAAlElT,KAAAH,EAgBM,OAhBN4V,IAgBM;AAAA,cAfFjS,EAAA,EAAA,MAAAA,EAAA,EAAA,IAAAtD,EAAkD,OAA7C,EAAA,OAAM,eAAc,GAAC,sBAAkB,EAAA;AAAA,cAC5CA,EAEM,OAFNgV,IAEM;AAAA,gBADFhV,EAAsF,OAAA;AAAA,kBAAjF,OAAM;AAAA,kBAAiB,OAAKwV,EAAA,EAAA,OAAW5V,EAAoB,qBAACoT,CAAI,IAAA,KAAA;AAAA;;cAEzEhT,EAIM,OAJNyQ,IACOxQ,EAAAL,EAAA,2BAA2BoT,CAAI,CAAA,IAAI,SAAO/S,EAAA+S,EAAK,kBAAkB,MAAM,IAAG,yBAEzEpT,EAAoB,qBAACoT,CAAI,CAAA,IAAI,OACrC,CAAA;AAAA,cACAhT,EAKM,OALNkM,IAKM;AAAA,iBAJFpM,EAAA,EAAA,GAAAH,EAGMO,WAHuB8S,EAAK,mBAArB,CAAAlU,GAAMsB,YAAnBT,EAGM,OAAA;AAAA,kBAHgD,KAAKS;AAAA,kBAAO,OAAM;AAAA;kBACpEJ,EAAoE,QAApEmM,IAAgClM,EAAAnB,EAAK,YAAS,MAAA,GAAA,GAAA,CAAA;AAAA,kBAC9CkB,EAA+D,QAAtD,MAAAC,EAAAnB,EAAK,6BAA6BsB,IAAK,EAAA,GAAA,CAAA;AAAA;;;;;QAOpEJ,EASM,OATNoM,IASM;AAAA,UARF9I,EAAA,EAAA,MAAAA,EAAA,EAAA,IAAAtD,EAAmD,OAA9C,EAAA,OAAM,gBAAe,GAAC,sBAAkB,EAAA;AAAA,UAC7CA,EAMM,OANNqM,IAMM;AAAA,YALFrM,EAIK,MAAA,MAAA;AAAA,sBAHDL,EAEKO,GAAA,MAAAC,EAFwBP,EAAuB,2BAAA,CAAzC6V,OAAX3V,EAAA,GAAAH,EAEK,MAFoD,EAAA,KAAK8V,EAAc,KACrEA,CAAc,GAAA,CAAA;;;;QAMjCzV,EASM,OATNiV,IASM;AAAA,4BARFjV,EAGM,OAAA,EAHD,OAAM,mBAAe;AAAA,YACtBA,EAA+C,OAAA,MAAA;AAAA,cAA1CA,EAAoC,gBAA5B,qBAAmB;AAAA;YAChCA,EAA8E,OAAzE,EAAA,OAAA,EAAA,cAAA,QAAA,OAAA,OAAA,KAAuC,8BAA4B;AAAA;UAE5EA,EAGM,OAHN0Q,IAGM;AAAA,8BAFF1Q,EAAgC,OAAA,MAAA;AAAA,cAA3BA,EAAqB,gBAAb,MAAI;AAAA;YACjBA,EAAkE,OAAlEkV,IAAkEjV,EAAnBoD,EAAU,UAAA,GAAA,CAAA;AAAA;;;YA/ITA,EAAU,UAAA;AAAA;;;;;AChOlF,MAAKxE,KAAU;AAAA,EACb,MAAM;AAAA,EACN,OAAO;AAAA,IACL,SAAS;AAAA,IACT,YAAY;AAAA,IACZ,gBAAgB;AAAA,IAChB,MAAM;AAAA,IACN,eAAe;AAAA,IACf,iBAAiB;AAAA,IACjB,iBAAiB;AAAA,IACjB,aAAa;AAAA,IACb,YAAY;AAAA,IACZ,aAAa;AAAA,EACd;AAAA,EACD,OAAO,CAAC,qBAAqB,yBAAyB,WAAW,YAAY,aAAa;AAAA,EAC1F,SAAS;AAAA,IACP,WAAW6W,GAAW;AACpB,aAAO,IAAI,KAAKA,CAAS,EAAE,eAAc;AAAA,IAC1C;AAAA,IACD,cAAcrU,GAAQ;AASpB,aARgB;AAAA,QACd,OAAO;AAAA,QACP,QAAQ;AAAA,QACR,QAAQ;AAAA,QACR,QAAQ;AAAA,QACR,QAAQ;AAAA,QACR,MAAM;AAAA,QAEOA,CAAM,KAAK;AAAA,IAC3B;AAAA,EACF;AACH,GA9IOtB,KAAA,EAAA,OAAM,gBAAe,GAEnBP,KAAA,EAAA,OAAM,aAAY,GAChBC,KAAA,EAAA,OAAM,eAAc,mCAmBtB6C,KAAA,EAAA,OAAM,aAAY,GAChBC,KAAA,EAAA,OAAM,YAAW,GAEf7C,KAAA,EAAA,OAAM,QAAO,GAEfkB,KAAA,EAAA,OAAM,YAAW,GAEfE,KAAA,EAAA,OAAM,QAAO,GAEfC,KAAA,EAAA,OAAM,YAAW,GAEfyC,KAAA,EAAA,OAAM,QAAO,GAWjBC,KAAA,EAAA,OAAM,iBAAgB;;EACL,OAAM;;;EAKS,OAAM;oBAMhC0G,KAAA,EAAA,OAAM,aAAY,GAeVzH,KAAA,EAAA,OAAA,EAAmB,OAAA,OAAA,EAAA,GAWjBC,KAAA,EAAA,OAAA,EAAmB,OAAA,OAAA,EAAA,GAW/BC,KAAA,EAAA,OAAM,aAAY;;AA7F7B,SAAA9C,EAAA,GAAAH,EA2GM,OA3GNI,IA2GM;AAAA,IAzGJC,EAiBM,OAjBNR,IAiBM;AAAA,MAhBJQ,EAGM,OAHNP,IAGM;AAAA,QAFJO,EAC6D,SAAA;AAAA,UADtD,MAAK;AAAA,UAAO,aAAY;AAAA,UAA2C,OAAOH,EAAU;AAAA,UACxF,gCAAOoB,EAAK,MAAA,qBAAsBZ,EAAO,OAAO,KAAK;AAAA;;MAE1DL,EASS,UAAA;AAAA,QATD,OAAM;AAAA,QAAiB,OAAOH,EAAc;AAAA,QACjD,iCAAQoB,EAAK,MAAA,yBAA0BZ,EAAO,OAAO,KAAK;AAAA;;;MAS7DL,EAA6E,UAAA;AAAA,QAArE,OAAM;AAAA,QAAmB,gCAAOiB,EAAK,MAAA,SAAA;AAAA,SAAa,YAAU;AAAA,MACpEjB,EAAwF,UAAA;AAAA,QAAhF,OAAM;AAAA,QAAqB,gCAAOiB,EAAK,MAAA,UAAA;AAAA,SAAc,oBAAkB;AAAA;IAIjFjB,EAmBM,OAnBNsC,IAmBM;AAAA,MAlBJtC,EAGM,OAHNuC,IAGM;AAAA,QAFJe,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAAtD,EAAyB,YAArB,oBAAgB,EAAA;AAAA,QACpBA,EAA8C,OAA9CN,IAA8CO,EAAxBJ,EAAe,eAAA,GAAA,CAAA;AAAA;MAEvCG,EAGM,OAHNY,IAGM;AAAA,QAFJ0C,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAAtD,EAA2B,YAAvB,sBAAkB,EAAA;AAAA,QACtBA,EAA8C,OAA9Cc,IAA8Cb,EAAxBJ,EAAe,eAAA,GAAA,CAAA;AAAA;MAEvCG,EAGM,OAHNe,IAGM;AAAA,QAFJuC,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAAtD,EAAqB,YAAjB,gBAAY,EAAA;AAAA,QAChBA,EAA0C,OAA1CwD,IAA0CvD,EAApBJ,EAAW,WAAA,GAAA,CAAA;AAAA;wBAEnCG,EAKM,OAAA,EALD,OAAM,eAAW;AAAA,QACpBA,EAAkB,YAAd,WAAS;AAAA,QACbA,EAEM,OAFD,EAAA,OAAM,eAAc,GAAC,sEAE1B;AAAA;;IAKJA,EA8DM,OA9DNyD,IA8DM;AAAA,MA7DO5D,EAAO,WAAlBC,EAAA,GAAAH,EAGM,OAHN6C,IAGMc,EAAA,EAAA,MAAAA,EAAA,EAAA,IAAA;AAAA,QAFJtD,EAA2B,OAAA,EAAtB,OAAM,UAAS,GAAA,MAAA,EAAA;AAAA,QACpBA,EAA+B,WAA5B,4BAAwB,EAAA;AAAA,aAGbH,EAAA,KAAK,WAAM,KAA3BC,EAAA,GAAAH,EAGM,OAHN8C,IAGMa,EAAA,EAAA,MAAAA,EAAA,EAAA,IAAA;AAAA,QAFJtD,EAA4B,YAAxB,uBAAmB,EAAA;AAAA,QACvBA,EAAmD,WAAhD,gDAA4C,EAAA;AAAA,mBAGjDL,EAkDM,OAAA+D,IAAA;AAAA,QAjDJ1D,EAkCQ,SAlCRmK,IAkCQ;AAAA,4BAjCNnK,EAQQ,SAAA,MAAA;AAAA,YAPNA,EAMK,MAAA,MAAA;AAAA,cALHA,EAAkB,YAAd,WAAS;AAAA,cACbA,EAAkB,YAAd,WAAS;AAAA,cACbA,EAAe,YAAX,QAAM;AAAA,cACVA,EAAgB,YAAZ,SAAO;AAAA,cACXA,EAAgB,YAAZ,SAAO;AAAA;;UAGfA,EAuBQ,SAAA,MAAA;AAAA,oBAtBNL,EAqBKO,GAAA,MAAAC,EArBaN,EAAa,eAAA,CAApB8V,YAAXhW,EAqBK,MAAA;AAAA,cArB6B,KAAKgW,EAAI;AAAA;cACzC3V,EAAwC,MAAjC,MAAAC,EAAAL,EAAA,WAAW+V,EAAI,SAAS,CAAA,GAAA,CAAA;AAAA,cAC/B3V,EAGK,MAAA,MAAA;AAAA,gBAFHA,EAA8B,OAAA,MAAAC,EAAtB0V,EAAI,SAAS,GAAA,CAAA;AAAA,gBACrB3V,EAAkD,SAAlD0C,IAA8BzC,EAAA0V,EAAI,KAAK,GAAA,CAAA;AAAA;cAEzC3V,EAIK,MAAA,MAAA;AAAA,gBAHHA,EAEO,QAAA;AAAA,kBAFD,UAAM,kBAAyBJ,gBAAc+V,EAAI,MAAM,CAAA,CAAA;AAAA,gBACxD,GAAA1V,EAAA0V,EAAI,MAAM,GAAA,CAAA;AAAA;cAGjB3V,EAQK,MAAA,MAAA;AAAA,gBAPAQ,EAAAP,EAAA0V,EAAI,QAAQ,MAAM,IAAG,KACxB,CAAA;AAAA,wBAAAhW,EAKMO,GAAA,MAAAC,EALuBwV,EAAI,QAAQ,aAAW,CAAvCC,GAAQ9Q,YAArBnF,EAKM,OAAA,EALiD,KAAKmF,KAAG;AAAA,kBAC7D9E,EAA4B,UAAA,MAAAC,EAAjB6E,CAAG,IAAG,MAAE,CAAA;AAAA,kBACnB9E,EAEQ,SAFR2C,IACK1C,GAAA2V,KAAA,gBAAAA,EAAQ,SAAa,EAAA,IAAA,QAAM3V,GAAA2V,KAAA,gBAAAA,EAAQ,OAAMA,KAAM,EAAA,GAAA,CAAA;AAAA;;cAIxD5V,EAA6B,MAAA,MAAAC,EAAtB0V,EAAI,UAAU,GAAA,CAAA;AAAA;;;QAM3B3V,EAWM,OAXN4C,IAWM;AAAA,UAVJ5C,EAES,UAAA;AAAA,YAFA,SAAKsD,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAAjD,MAAEY,EAAK,MAAA,eAAgBpB,EAAW,cAAA,CAAA;AAAA,YAAQ,UAAUA,EAAW,gBAAA;AAAA,aAAQ,cAErF,GAAAgD,EAAA;AAAA,kBACAlD,EAGSO,GAAA,MAAAC,EAHcN,EAAU,YAAA,CAAlBgW,YAAflW,EAGS,UAAA;AAAA,YAH2B,KAAKkW;AAAA,YAAO,SAAK,CAAAxV,MAAEY,EAAK,MAAA,eAAgB4U,CAAI;AAAA,YAC7E,OAAKtV,EAAA,EAAA,QAAYV,EAAW,gBAAKgW,GAAI;AAAA,eACnCA,CAAI,GAAA,IAAA/S,EAAA;UAET9C,EAES,UAAA;AAAA,YAFA,SAAKsD,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAAjD,MAAEY,EAAK,MAAA,eAAgBpB,EAAW,cAAA,CAAA;AAAA,YAAQ,UAAUA,EAAW,gBAAKA,EAAU;AAAA,aAAE,UAE9F,GAAAkD,EAAA;AAAA;;;;;;AC0XV,MAAKlE,KAAU;AAAA,EACX,MAAM;AAAA,EAEN,OAAO;AAAA,IACH,MAAM;AAAA,MACF,MAAM;AAAA,MACN,UAAU;AAAA,MACV,SAAS,MAAM,CAAC;AAAA,IACnB;AAAA,IACD,YAAY;AAAA,MACR,MAAM;AAAA,MACN,SAAS;AAAA,IACZ;AAAA,IACD,kBAAkB;AAAA,MACd,MAAM;AAAA,MACN,UAAU;AAAA,MACV,SAAS;AAAA,IACZ;AAAA,IACD,aAAa;AAAA,MACT,MAAM;AAAA,MACN,SAAS,OAAO,EAAE,MAAM;IAC3B;AAAA,IACD,SAAS;AAAA,MACL,MAAM;AAAA,MACN,SAAS;AAAA,IACZ;AAAA,IACD,gBAAgB;AAAA,MACZ,MAAM;AAAA,MACN,SAAS,MAAM,CAAC,WAAW,iBAAiB,YAAY,YAAY,YAAY,MAAM;AAAA,IACzF;AAAA,IACD,QAAQ;AAAA,MACJ,MAAM;AAAA,MACN,SAAS,OAAO;AAAA,QACZ,oBAAoB;AAAA,QACpB,WAAW;AAAA,QACX,YAAY;AAAA,QACZ,cAAc;AAAA,QACd,mBAAmB;AAAA,QACnB,+BAA+B;AAAA;IAEvC;AAAA,EACH;AAAA,EAED,OAAO;AAAA,IACH;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACH;AAAA,EAED,OAAO;AACH,WAAO;AAAA,MACH,aAAa;AAAA,MACb,cAAc;AAAA,MACd,aAAa;AAAA,MACb,eAAe;AAAA,MACf,YAAY,CAAE;AAAA,MACd,iBAAiB,CAAE;AAAA,MACnB,cAAc,CAAE;AAAA,MAChB,eAAe;AAAA,MACf,iBAAiB;AAAA,MACjB,iBAAiB;AAAA,MACjB,kBAAkB;AAAA,MAClB,oBAAoB;AAAA,MACpB,SAAS;AAAA,QACL,MAAM;AAAA,QACN,MAAM;AAAA,QACN,YAAY;AAAA,QACZ,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,gBAAgB,CAAC;AAAA,UACb,MAAM;AAAA,UACN,YAAY;AAAA,UACZ,WAAW;AAAA,UACX,cAAc;AAAA,UACd,WAAW;AAAA,UACX,WAAW;AAAA,QACf,CAAC;AAAA,QACD,OAAO;AAAA,QACP,OAAO;AAAA,QACP,SAAS;AAAA,MACZ;AAAA,MACD,UAAU;AAAA,QACN,MAAM;AAAA,QACN,OAAO;AAAA,QACP,QAAQ;AAAA,QACR,aAAa;AAAA,QACb,cAAc;AAAA,QACd,OAAO;AAAA,MACX;AAAA,IACJ;AAAA,EACH;AAAA,EAED,UAAU;AAAA,IACN,eAAe;AACX,aAAO,KAAK,aAAa,oBAAoB,KAAK,UAAU,KAAK;AAAA,IACpE;AAAA,IAED,4BAA4B;AACxB,aAAO,CAACsW,MACA,CAACA,EAAO,kBAAkBA,EAAO,eAAe,WAAW,IACpD,CAAC,IAGLA,EAAO,eAAe,OAAO,CAAAW,MAAQ;AAExC,YAAI,CAACA,EAAK,iBAAiBA,EAAK,cAAc,WAAW;AACrD,iBAAO;AAIX,cAAMC,IAAsBD,EAAK,cAAc;AAAA,UAC3C,CAAAE,MAAKA,EAAE,cAAc,KAAK;AAAA,QAC9B;AAGA,eAAOD,KAAuBA,EAAoB,WAAW;AAAA,OAChE;AAAA,IAER;AAAA,IAED,eAAe;AACX,aAAO,KAAK,KAAK,OAAO,CAAAZ,MAAU;AAC9B,cAAMc,IAAgB,KAAK,gBAAgB,MACvCd,EAAO,KAAK,YAAa,EAAC,SAAS,KAAK,YAAY,aAAa,KACjEA,EAAO,KAAK,YAAa,EAAC,SAAS,KAAK,YAAY,aAAa,KAChEA,EAAO,UAAUA,EAAO,OAAO,YAAW,EAAG,SAAS,KAAK,YAAY,YAAW,CAAE,GAEnFe,IAAgB,KAAK,iBAAiB,SAASf,EAAO,WAAW,KAAK;AAE5E,eAAOc,KAAiBC;AAAA,OAC3B;AAAA,IACJ;AAAA,IAED,sBAAsB;AAClB,YAAMC,IAAU,CAAC;AAEjB,kBAAK,KAAK,QAAQ,CAAAhB,MAAU;AACxB,QAAIA,EAAO,OAAOA,EAAO,IAAI,SAAS,KAClCA,EAAO,IAAI,QAAQ,CAACiB,GAAUhW,MAAU;AACpC,UAAA+V,EAAQ,KAAK;AAAA,YACT,GAAGC;AAAA,YACH,UAAUjB,EAAO;AAAA,YACjB,MAAMA,EAAO;AAAA,YACb,QAAQA,EAAO;AAAA,YACf,UAAU,GAAGA,EAAO,EAAE,IAAI/U,CAAK;AAAA,WAClC;AAAA,SACJ;AAAA,OAER,GAEM+V,EAAQ,KAAK,CAACrM,GAAGuM,MAAM;AAC1B,cAAMC,IAAQ,IAAI,KAAKxM,EAAE,SAAS,GAC5ByM,IAAQ,IAAI,KAAKF,EAAE,SAAS;AAClC,eAAO,KAAK,uBAAuB,SAASE,IAAQD,IAAQA,IAAQC;AAAA,OACvE;AAAA,IACJ;AAAA,IAED,2BAA2B;AACvB,UAAIC,IAAW,KAAK;AAMpB,UAJI,KAAK,oBAAoB,UACzBA,IAAWA,EAAS,OAAO,CAAAC,MAASA,EAAM,WAAW,KAAK,eAAe,IAGzE,KAAK,iBAAiB;AACtB,cAAMC,IAAS,KAAK,gBAAgB,YAAY;AAChD,QAAAF,IAAWA,EAAS;AAAA,UAAO,CAAAC,MACvBA,EAAM,SAAS,cAAc,SAASC,CAAM,KAC5CD,EAAM,KAAK,cAAc,SAASC,CAAM,KACxCD,EAAM,OAAO,cAAc,SAASC,CAAM,KACzCD,EAAM,UAAUA,EAAM,OAAO,cAAc,SAASC,CAAM,KAC1DD,EAAM,SAASA,EAAM,MAAM,cAAc,SAASC,CAAM;AAAA,QAC7D;AAAA,MACJ;AAEA,aAAO,KAAK,qBAAqBF,CAAQ;AAAA,IAC5C;AAAA,IAED,kBAAkB;AAEd,aADsB,IAAI,IAAI,KAAK,yBAAyB,IAAI,OAAK,EAAE,MAAM,CAAC,EACzD;AAAA,IACxB;AAAA,IAED,qBAAqB;AACjB,UAAI,KAAK,yBAAyB,WAAW;AAAG,eAAO;AAEvD,YAAMG,IAAQ,KAAK,yBAAyB,IAAI,CAAA7O,MAAK,IAAI,KAAKA,EAAE,SAAS,CAAC,GACpE8O,IAAU,IAAI,KAAK,KAAK,IAAI,GAAGD,CAAK,CAAC,GACrCE,IAAU,IAAI,KAAK,KAAK,IAAI,GAAGF,CAAK,CAAC,GAErCG,IAAa,CAACxV,MAASA,EAAK,mBAAmB,SAAS,EAAE,OAAO,SAAS,KAAK,WAAW,MAAM,UAAQ,CAAG;AAEjH,aAAO,GAAGwV,EAAWF,CAAO,CAAC,MAAME,EAAWD,CAAO,CAAC;AAAA,IACzD;AAAA,IAED,aAAa;AACT,aAAO,KAAK,OAAO,aAAa,KAAK,cAAc,KAAK;AAAA,IAC3D;AAAA,IAED,cAAc;AACV,aAAO,KAAK,OAAO,cAAc,KAAK,cAAc,MAAM;AAAA,IAC7D;AAAA,IAED,gBAAgB;AACZ,aAAO,KAAK,OAAO,gBAAgB,KAAK,cAAc,QAAQ;AAAA,IACjE;AAAA,IAED,iBAAiB;AACb,aAAO,KAAK,OAAO,qBAAqB,KAAK,cAAc,QAAQ;AAAA,IACtE;AAAA,IAED,iBAAiB;AACb,aAAO,KAAK,OAAO,qBAAqB,KAAK,cAAc,QAAQ;AAAA,IACtE;AAAA;AAAA,IAGD,cAAc;AACV,cAAO,oBAAI,KAAI,GAAG,mBAAmB,SAAS;AAAA,QAC1C,SAAS;AAAA,QACT,MAAM;AAAA,QACN,OAAO;AAAA,QACP,KAAK;AAAA,OACR;AAAA,IACJ;AAAA;AAAA,IAGD,eAAe;AACX,aAAO,KAAK,KAAK,OAAO,CAAA1B,MAAUA,EAAO,WAAW,SAAS,EAAE;AAAA,IAClE;AAAA;AAAA,IAGD,cAAc;AACV,aAAO,KAAK,KAAK;AAAA,QAAO,CAAAA,MACpBA,EAAO,WAAW,aAAaA,EAAO,SAAS;AAAA,MACnD,EAAE;AAAA,IACL;AAAA;AAAA,IAGD,gBAAgB;AACZ,aAAO,KAAK,KAAK;AAAA,QAAO,CAAAA,MACpBA,EAAO,WAAW,aAAaA,EAAO,SAAS;AAAA,MACnD,EAAE;AAAA,IACL;AAAA;AAAA,IAGD,oBAAoB;AAChB,YAAM4B,IAAY,CAAC;AAEnB,kBAAK,KAAK,QAAQ,CAAA5B,MAAU;AACxB,QAAIA,EAAO,WAAW,aAAaA,EAAO,WACjC4B,EAAU5B,EAAO,MAAM,MACxB4B,EAAU5B,EAAO,MAAM,IAAI;AAAA,UACvB,MAAM;AAAA,UACN,QAAQ;AAAA,UACR,OAAO;AAAA,QACX,IAGAA,EAAO,SAAS,UAChB4B,EAAU5B,EAAO,MAAM,EAAE,WAEzB4B,EAAU5B,EAAO,MAAM,EAAE,QAE7B4B,EAAU5B,EAAO,MAAM,EAAE;AAAA,OAEhC,GAEM4B;AAAA,IACV;AAAA;AAAA,IAGD,mBAAmB;AACf,YAAMC,IAAU,oBAAI,IAAI;AACxB,kBAAK,KAAK,QAAQ,CAAA7B,MAAU;AACxB,QAAIA,EAAO,UAAUA,EAAO,OAAO,KAAO,MAAI,MAC1C6B,EAAQ,IAAI7B,EAAO,MAAM;AAAA,OAEhC,GACM,MAAM,KAAK6B,CAAO,EAAE,KAAK;AAAA,IACpC;AAAA,EACH;AAAA,EAED,SAAS;AAAA,IACL,cAAc3V,GAAQ;AAClB,YAAM,EAAE,MAAAU,GAAM,QAAAb,EAAS,IAAE,KAAK,aACxB+V,IAAW/V,MAAW,KAAK;AASjC,UAAIgW,IAPgB;AAAA,QAChB,OAAS,CAAC,OAAO,QAAQ,UAAU,UAAU,MAAM;AAAA,QACnD,OAAS,CAAC,OAAO,QAAQ,UAAU,MAAM;AAAA,QACzC,SAAW,CAAC,UAAU,MAAM;AAAA,QAC5B,QAAU,CAAC,MAAM;AAAA,MACrB,EAEkCnV,CAAI,KAAK,CAAC;AAE5C,aAAIA,MAAS,aAAakV,MACtBC,IAAkB,CAAC,GAAGA,GAAiB,KAAK,IAGzCA,EAAgB,SAAS7V,CAAM;AAAA,IACzC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAQD,mBAAmB8T,GAAQ;AAEvB,aADsB,CAAC,WAAW,UAAU,UAAU,EACnC,SAASA,EAAO,MAAM,IAGlCA,EAAO,aAAa,kBAFhB;AAAA,IAGd;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAQD,eAAeA,GAAQ;AAOnB,UALIA,EAAO,WAAW,aAKlB,CAACA,EAAO,OAAOA,EAAO,IAAI,WAAW;AACrC,eAAO;AAKX,UAAIgC,IAAoB;AAExB,eAAS,IAAIhC,EAAO,IAAI,SAAS,GAAG,KAAK,GAAG;AACxC,YAAIA,EAAO,IAAI,CAAC,EAAE,WAAW,WAAW;AACpC,UAAAgC,IAAoBhC,EAAO,IAAI,CAAC;AAChC;AAAA,QACJ;AAIJ,UAAI,CAACgC,KAAqB,CAACA,EAAkB;AACzC,eAAO;AAIX,YAAMC,IAAc,IAAI,KAAKD,EAAkB,SAAS,GAElDhV,IAAW,KAAK,IADR,oBAAI,KAAK,IACWiV,CAAW;AAG7C,aAFiB,KAAK,MAAMjV,KAAY,MAAO,KAAK,KAAK,GAAG;AAAA,IAG/D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAOD,oBAAoBgT,GAAQ;AAOxB,UALI,CAACA,EAAO,aAKRA,EAAO,WAAW;AAClB,eAAO;AAIX,YAAMkC,IAAc,IAAI,KAAKlC,EAAO,SAAS,GAEvChT,IAAW,KAAK,IADR,oBAAI,KAAK,IACWkV,CAAW;AAG7C,aAFiB,KAAK,MAAMlV,KAAY,MAAO,KAAK,KAAK,GAAG;AAAA,IAG/D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAOD,8BAA8BgT,GAAQ;AAClC,aAAI,CAACA,EAAO,kBAAkBA,EAAO,eAAe,WAAW,IACpD,IAGJA,EAAO,eAAe,OAAO,CAAAW,MAAQ;AACxC,YAAI,CAACA,EAAK,iBAAiBA,EAAK,cAAc,WAAW;AACrD,iBAAO;AAGX,cAAMC,IAAsBD,EAAK,cAAc;AAAA,UAC3C,CAAAE,MAAKA,EAAE,cAAc,KAAK;AAAA,QAC9B;AAGA,eAAO,CAACD,KACJA,EAAoB,WAAW;AAAA,MACtC,CAAA,EAAE;AAAA,IACN;AAAA;AAAA;AAAA;AAAA;AAAA,IAMD,gCAAgCZ,GAAQ;AACpC,WAAK,MAAM,+BAA+B;AAAA,QACtC,UAAUA,EAAO;AAAA,QACjB,YAAYA,EAAO;AAAA,QACnB,WAAW,KAAK;AAAA,OACnB;AAAA,IACJ;AAAA,IAED,sBAAsB;AAClB,UAAI,CAAC,KAAK,YAAY;AAClB,aAAK,MAAM,iBAAiB,EAAE,QAAQ,YAAY,aAAa,KAAK,aAAa;AACjF;AAAA,MACJ;AACA,WAAK,cAAc,CAAC,KAAK,aACpB,KAAK,eACN,KAAK,UAAU;AAAA,IAEtB;AAAA,IAED,wBAAwB;AACpB,UAAI,CAAC,KAAK,YAAY;AAClB,aAAK,MAAM,iBAAiB,EAAE,QAAQ,kBAAkB,aAAa,KAAK,aAAa;AACvF;AAAA,MACJ;AACA,WAAK,gBAAgB,CAAC,KAAK,eACtB,KAAK,iBACN,KAAK,eAAe;AAAA,IAE3B;AAAA,IAED,qBAAqB;AACjB,UAAI,CAAC,KAAK;AACN;AAGJ,YAAMmC,IAAW;AAAA,QACb,MAAM,KAAK,SAAS;AAAA,QACpB,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,WAAW,KAAK,SAAS;AAAA;AAAA,QACzB,SAAS,KAAK,SAAS;AAAA,QACvB,OAAO,KAAK,SAAS,SAAS;AAAA,QAC9B,OAAO,KAAK,SAAS;AAAA,QACrB,QAAQ,KAAK,cAAc,KAAK,SAAS;AAAA,QACzC,gBAAgB,CAAC;AAAA,MACrB;AAEA,WAAK,MAAM,iBAAiBA,CAAQ,GACpC,KAAK,eAAe,GACpB,KAAK,gBAAgB;AAAA,IACxB;AAAA,IAED,oBAAoBnC,GAAQ;AACxB,UAAI,CAAC,KAAK,gBAAgB;AACtB,aAAK,MAAM,iBAAiB,EAAE,QAAQ,mBAAmB,aAAa,KAAK,aAAa;AACxF;AAAA,MACJ;AAEA,UAAIoC,IAAW;AACf,UAAIpC,EAAO,WAAW;AAClB,cAAMkC,IAAc,IAAI,KAAKlC,EAAO,SAAS,GAEvChT,IAAW,KAAK,IADR,oBAAI,KAAK,IACWkV,CAAW;AAC7C,QAAAE,IAAW,KAAK,KAAKpV,KAAY,MAAO,KAAK,KAAK,GAAG;AAAA,MACzD;AAEA,WAAK,MAAM,kBAAkB,EAAE,QAAAgT,GAAQ,UAAAoC,GAAU;AAAA,IACpD;AAAA,IAED,wBAAwB;AACpB,WAAK,gBAAgB,IACrB,KAAK,eAAe;AAAA,IACvB;AAAA,IAED,iBAAiB;AACb,WAAK,WAAW;AAAA,QACZ,MAAM;AAAA,QACN,OAAO;AAAA,QACP,QAAQ;AAAA,QACR,aAAa;AAAA,QACb,cAAc;AAAA,QACd,OAAO;AAAA,MACX,GACA,KAAK,kBAAkB,CAAC;AAAA,IAC3B;AAAA,IAED,oBAAoB;AAoBhB,aAnBA,KAAK,kBAAkB,CAAC,IAEpB,CAAC,KAAK,SAAS,QAAQ,KAAK,SAAS,KAAK,KAAO,MAAI,QACrD,KAAK,gBAAgB,OAAO,2BAI5B,CAAC,KAAK,eAAe,CAAC,KAAK,SAAS,UAAU,KAAK,SAAS,OAAO,WAAW,QAC9E,KAAK,gBAAgB,SAAS,2BAG7B,KAAK,SAAS,gBACf,KAAK,gBAAgB,cAAc,8BAGnC,CAAC,KAAK,SAAS,gBAAgB,KAAK,SAAS,gBAAgB,OAC7D,KAAK,gBAAgB,eAAe,6CAGpC,OAAO,KAAK,KAAK,eAAe,EAAE,SAAS,KAC3C,KAAK,MAAM,oBAAoB,KAAK,eAAe,GAC5C,MAGJ;AAAA,IACV;AAAA,IAED,eAAe;AACX,WAAK,MAAM,kBAAkB,KAAK,WAAW;AAAA,IAChD;AAAA,IAED,eAAe;AACX,WAAK,MAAM,kBAAkB,KAAK,YAAY;AAAA,IACjD;AAAA,IAED,kBAAkB;AAAA,IAEjB;AAAA,IAED,cAAczS,GAAK;AACf,MAAI,KAAK,qBAAqBA,IAC1B,KAAK,qBAAqB,KAAK,uBAAuB,QAAQ,SAAS,SAEvE,KAAK,mBAAmBA,GACxB,KAAK,qBAAqB;AAAA,IAEjC;AAAA,IAED,qBAAqBqR,GAAS;AAC1B,YAAMqB,IAAS,CAAC,GAAGrB,CAAO;AAE1B,aAAAqB,EAAO,KAAK,CAAC1N,GAAGuM,MAAM;AAClB,YAAIoB,GAAMC;AAEV,gBAAQ,KAAK,kBAAgB;AAAA,UACzB,KAAK;AACD,YAAAD,IAAO,IAAI,KAAK3N,EAAE,SAAS,GAC3B4N,IAAO,IAAI,KAAKrB,EAAE,SAAS;AAC3B;AAAA,UACJ,KAAK;AACD,YAAAoB,IAAO3N,EAAE,SAAS,YAAY,GAC9B4N,IAAOrB,EAAE,SAAS,YAAY;AAC9B;AAAA,UACJ,KAAK;AACD,YAAAoB,IAAO3N,EAAE,KAAK,YAAY,GAC1B4N,IAAOrB,EAAE,KAAK,YAAY;AAC1B;AAAA,UACJ,KAAK;AACD,YAAAoB,IAAO3N,EAAE,OAAO,YAAY,GAC5B4N,IAAOrB,EAAE,OAAO,YAAY;AAC5B;AAAA,UACJ;AACI,mBAAO;AAAA,QACf;AAEA,eAAIoB,IAAOC,IAAa,KAAK,uBAAuB,QAAQ,KAAK,IAC7DD,IAAOC,IAAa,KAAK,uBAAuB,QAAQ,IAAI,KACzD;AAAA,OACV,GAEMF;AAAA,IACV;AAAA,IAED,qBAAqBnW,GAAQ;AACzB,aAAO,iBAAiBA,EAAO,YAAW,EAAG,QAAQ,QAAQ,GAAG,CAAC;AAAA,IACpE;AAAA,IAED,MAAM,sBAAsB;AACxB,UAAI,CAAC,KAAK;AACN;AAaJ,UAT0B,KAAK,QAAQ,eAAe,KAAK,CAAAyU,MAAQ;AAC/D,cAAM6B,IAAU7B,EAAK,KAAK,KAAK,MAAM,IAC/B8B,IAAU9B,EAAK,eAAe,IAC9B+B,IAAW/B,EAAK,cAAc;AAGpC,gBAAQ6B,KAAWC,KAAWC,MAAa,EAAEF,KAAWC,KAAWC;AAAA,OACtE,GAEsB;AACnB,aAAK,MAAM,0BAA0B;AACrC;AAAA,MACJ;AAGA,YAAMC,IAAsB,KAAK,QAAQ,eAAe,OAAO,CAAAhC,MACpDA,EAAK,KAAK,KAAI,MAAO,MAAMA,EAAK,eAAe,MAAMA,EAAK,cAAc,IAClF,GAEKiC,IAAY,KAAK,QAAQ,SAAS,UAAU,KAAK,QAAQ,aAAa,KAAK,QAAQ,MAGnFC,IAAyB,MAAM,QAAQ;AAAA,QACzCF,EAAoB,IAAI,OAAOhC,GAAM1V,MAAU;AAE3C,gBAAM6X,IAAe,MAAM,KAAK,yBAAyBnC,EAAK,WAAW,KAAK,QAAQ,KAAK;AAE3F,iBAAO;AAAA,YACH,MAAMA,EAAK;AAAA,YACX,YAAYA,EAAK;AAAA,YACjB,WAAWA,EAAK;AAAA,YAChB,WAAWA,EAAK;AAAA,YAChB,UAAUmC,EAAa;AAAA;AAAA,UAC3B;AAAA,SACH;AAAA,MACL,GAEMC,IAAY;AAAA,QACd,MAAM,KAAK,QAAQ;AAAA,QACnB,MAAMH;AAAA,QACN,QAAQ;AAAA,QACR,gBAAgBC;AAAA,QAChB,OAAO,KAAK,QAAQ;AAAA,QACpB,QAAQ,KAAK;AAAA,QACb,OAAO,KAAK,QAAQ;AAAA,QACpB,SAAS,KAAK,QAAQ;AAAA,QACtB,WAAW,KAAK,QAAQ;AAAA,MAC5B;AAEA,WAAK,MAAM,YAAYE,CAAS,GAChC,KAAK,UAAU,GACf,KAAK,cAAc;AAAA,IACtB;AAAA;AAAA,IAGD,MAAM,yBAAyBvT,GAAMwT,GAAO;AAExC,aAAO,IAAI,QAAQ,CAAC9S,GAASC,MAAW;AACpC,aAAK,MAAM,qBAAqB;AAAA,UAC5B,MAAAX;AAAA,UACA,OAAAwT;AAAA,UACA,UAAU,CAACrW,MAAW;AAClB,YAAIA,EAAO,QACPwD,EAAOxD,EAAO,KAAK,IAEnBuD,EAAQvD,CAAM;AAAA,UAEtB;AAAA,SACH;AAAA,OACJ;AAAA,IACJ;AAAA,IAED,mBAAmB;AACf,WAAK,cAAc,IACnB,KAAK,UAAU;AAAA,IAClB;AAAA,IAED,iBAAiBqT,GAAQ;AACrB,UAAI,CAAC,KAAK,eAAe;AACrB,aAAK,MAAM,iBAAiB,EAAE,QAAQ,eAAe,aAAa,KAAK,aAAa;AACpF;AAAA,MACJ;AAEA,WAAK,MAAM,eAAeA,CAAM;AAAA,IACnC;AAAA,IAED,kBAAkBA,GAAQ;AACtB,UAAI,CAAC,KAAK,gBAAgB;AACtB,aAAK,MAAM,iBAAiB,EAAE,QAAQ,gBAAgB,aAAa,KAAK,aAAa;AACrF;AAAA,MACJ;AAEA,WAAK,MAAM,qBAAqBA,CAAM;AAAA,IACzC;AAAA,IAED,kBAAkBA,GAAQ;AACtB,UAAI,CAAC,KAAK,gBAAgB;AACtB,aAAK,MAAM,iBAAiB,EAAE,QAAQ,gBAAgB,aAAa,KAAK,aAAa;AACrF;AAAA,MACJ;AAEA,UAAIoC,IAAW;AACf,UAAIpC,EAAO,WAAW;AAClB,cAAMiD,IAAa,IAAI,KAAKjD,EAAO,SAAS,GAEtChT,IAAW,KAAK,IADR,oBAAI,KAAK,IACWiW,CAAU;AAC5C,QAAAb,IAAW,KAAK,KAAKpV,KAAY,MAAO,KAAK,KAAK,GAAG;AAAA,MACzD;AAEA,WAAK,MAAM,gBAAgB,EAAE,QAAAgT,GAAQ,UAAAoC,GAAU;AAAA,IAClD;AAAA,IAED,kBAAkBpC,GAAQ;AACtB,UAAI,CAAC,KAAK,gBAAgB;AACtB,aAAK,MAAM,iBAAiB,EAAE,QAAQ,iBAAiB,aAAa,KAAK,aAAa;AACtF;AAAA,MACJ;AAEA,WAAK,MAAM,gBAAgBA,CAAM;AAAA,IACpC;AAAA,IAED,cAAckD,GAAU;AACpB,YAAMjY,IAAQ,KAAK,aAAa,QAAQiY,CAAQ;AAChD,MAAIjY,IAAQ,KACR,KAAK,aAAa,OAAOA,GAAO,CAAC,IAEjC,KAAK,aAAa,KAAKiY,CAAQ;AAAA,IAEtC;AAAA,IAED,uBAAuBlD,GAAQ;AAC3B,UAAI,CAAC,KAAK,aAAa;AACnB,aAAK,MAAM,iBAAiB,EAAE,QAAQ,qBAAqB,aAAa,KAAK,aAAa;AAC1F;AAAA,MACJ;AAEA,WAAK,MAAM,0BAA0BA,CAAM;AAAA,IAC9C;AAAA,IAED,wBAAwBmD,GAAenD,GAAQ;AAC3C,WAAK,MAAM,2BAA2B,EAAE,eAAAmD,GAAe,QAAAnD,EAAK,CAAG;AAAA,IAClE;AAAA,IAED,YAAY;AACR,WAAK,UAAU;AAAA,QACX,MAAM;AAAA,QACN,MAAM;AAAA,QACN,YAAY;AAAA,QACZ,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,gBAAgB,CAAC;AAAA,UACb,MAAM;AAAA,UACN,YAAY;AAAA,UACZ,WAAW;AAAA,UACX,cAAc;AAAA,UACd,WAAW;AAAA,UACX,WAAW;AAAA,QACf,CAAC;AAAA,QACD,OAAO;AAAA,QACP,OAAO;AAAA,QACP,SAAS;AAAA,MACb,GACA,KAAK,aAAa,CAAC;AAAA,IACtB;AAAA,IAED,eAAe;AACX,WAAK,aAAa,CAAC;AAEnB,YAAM1B,IAAiB;AAAA,QACnB,MAAM;AAAA,QACN,OAAO;AAAA,MACX;AAiBA,aAfA,OAAO,KAAKA,CAAc,EAAE,QAAQ,CAAAC,MAAS;AACzC,SAAI,CAAC,KAAK,QAAQA,CAAK,KAAK,KAAK,QAAQA,CAAK,EAAE,KAAO,MAAI,QACvD,KAAK,WAAWA,CAAK,IAAI,GAAGD,EAAeC,CAAK,CAAC;AAAA,OAExD,GAEG,KAAK,QAAQ,SAAS,CAAC,KAAK,aAAa,KAAK,QAAQ,KAAK,MAC3D,KAAK,WAAW,QAAQ,uCAGxB,KAAK,QAAQ,SAAS,YAAY,CAAC,KAAK,QAAQ,cAAc,KAAK,QAAQ,WAAW,KAAO,MAAI,QACjG,KAAK,WAAW,aAAa,qDAI7B,OAAO,KAAK,KAAK,UAAU,EAAE,SAAS,KACtC,KAAK,MAAM,oBAAoB,KAAK,UAAU,GACvC,MAGJ;AAAA,IACV;AAAA,IAED,aAAayE,GAAO;AAEhB,aADmB,6BACD,KAAKA,CAAK;AAAA,IAC/B;AAAA,IAED,wBAAwB;AACpB,WAAK,QAAQ,eAAe,KAAK;AAAA,QAC7B,MAAM;AAAA,QACN,YAAY;AAAA,QACZ,WAAW;AAAA,QACX,cAAc;AAAA,QACd,WAAW;AAAA,QACX,WAAW;AAAA,OACd;AAAA,IACJ;AAAA,IAED,oBAAoB/X,GAAO;AACvB,WAAK,QAAQ,eAAe,OAAOA,GAAO,CAAC;AAAA,IAC9C;AAAA,IAED,sBAAsBf,GAAOe,GAAO;AAChC,YAAMuE,IAAOtF,EAAM,OAAO,MAAM,CAAC;AACjC,UAAI,CAACsF;AAAM;AAEX,YAAMmR,IAAO,KAAK,QAAQ,eAAe1V,CAAK;AAM9C,UALA0V,EAAK,YAAYnR,GACjBmR,EAAK,YAAYnR,EAAK,MACtBmR,EAAK,YAAYnR,EAAK,KAAK,SAAS,KAAK,IAAI,QAAQ,SAGjDmR,EAAK,cAAc,SAAS;AAC5B,cAAMyC,IAAS,IAAI,WAAW;AAC9B,QAAAA,EAAO,SAAS,CAACzQ,MAAM;AACnB,UAAAgO,EAAK,eAAehO,EAAE,OAAO;AAAA,QACjC,GACAyQ,EAAO,cAAc5T,CAAI;AAAA;AAEzB,QAAAmR,EAAK,eAAe;AAAA,IAE3B;AAAA,IAED,gBAAgB1V,GAAO;AACnB,YAAM0V,IAAO,KAAK,QAAQ,eAAe1V,CAAK;AAC9C,MAAA0V,EAAK,YAAY,MACjBA,EAAK,eAAe,MACpBA,EAAK,YAAY,IACjBA,EAAK,YAAY;AAGjB,YAAM0C,IAAY,SAAS,eAAe,gBAAgBpY,CAAK;AAC/D,MAAIoY,MACAA,EAAU,QAAQ;AAAA,IAEzB;AAAA,IAED,aAAarX,GAAQ;AACjB,aAAOA,IAASA,EAAO,OAAO,CAAC,EAAE,YAAc,IAAEA,EAAO,MAAM,CAAC,IAAI;AAAA,IACtE;AAAA,IAED,eAAeA,GAAQ;AAQnB,aAPkB;AAAA,QACd,WAAa;AAAA,QACb,QAAU;AAAA,QACV,SAAW;AAAA,QACX,aAAe;AAAA,QACf,UAAY;AAAA,MAChB,EACiBA,CAAM,KAAK;AAAA,IAC/B;AAAA,IAED,sBAAsBsX,GAAY;AAC9B,YAAMtX,IAAS,KAAK,gBAAgBsX,CAAU;AAM9C,aALiB;AAAA,QACb,SAAW;AAAA,QACX,cAAgB;AAAA,QAChB,OAAS;AAAA,MACb,EACgBtX,CAAM,KAAK;AAAA,IAC9B;AAAA,IAED,gBAAgBuX,GAAS;AACrB,UAAI,CAACA;AAAS,eAAO;AAErB,YAAMC,IAAS,IAAI,KAAKD,CAAO,GACzBxW,IAAQ,oBAAI,KAAK,GACjB0W,IAAkB,oBAAI,KAAK;AAGjC,aAFAA,EAAgB,SAAS1W,EAAM,SAAQ,IAAK,CAAC,GAEzCyW,KAAUzW,IAAc,YACxByW,KAAUC,IAAwB,iBAC/B;AAAA,IACV;AAAA,IAED,cAAclD,GAAW;AACrB,aAAKA,IACQ,IAAI,KAAKA,CAAS,EACnB,mBAAmB,SAAS;AAAA,QACpC,MAAM;AAAA,QACN,OAAO;AAAA,QACP,KAAK;AAAA,QACL,MAAM;AAAA,QACN,QAAQ;AAAA,OACX,IARsB;AAAA,IAS1B;AAAA,IAED,kBAAkBrU,GAAQ;AAOtB,aANkB;AAAA,QACd,UAAY;AAAA,QACZ,WAAa;AAAA,QACb,UAAY;AAAA,QACZ,kBAAkB;AAAA,MACtB,EACiBA,CAAM,KAAK;AAAA,IAC/B;AAAA,IAED,WAAWA,GAAQ;AAOf,aANgB;AAAA,QACZ,UAAY;AAAA,QACZ,WAAa;AAAA,QACb,UAAY;AAAA,QACZ,kBAAkB;AAAA,MACtB,EACeA,CAAM,KAAK;AAAA,IAC9B;AAAA,EACJ;AACJ,GA/3CStB,KAAA,EAAA,OAAM,kBAAiB;;EAEnB,OAAM;GAENN,KAAA,EAAA,OAAM,eAAc,GAChB2C,KAAA,EAAA,OAAM,sBAAqB,GACxBC,KAAA,EAAA,OAAM,eAAc,GACnBC,KAAA,EAAA,OAAM,iBAAgB;;EAW1B,OAAM;GACF5C,KAAA,EAAA,OAAM,iBAAgB,GAElBkB,KAAA,EAAA,OAAM,eAAc,GAGxBE,KAAA,EAAA,OAAM,gBAAe,GAEjBC,KAAA,EAAA,OAAM,0BAAyB,GAI3ByC,KAAA,EAAA,OAAM,eAAc,GAChBC,KAAA,EAAA,OAAM,aAAY,GAM1BjB,KAAA,EAAA,OAAM,yBAAwB,GAI1BC,KAAA,EAAA,OAAM,eAAc,GAChBiB,KAAA,EAAA,OAAM,aAAY,GAM1ByG,KAAA,EAAA,OAAM,kCAAiC,GAInCzH,KAAA,EAAA,OAAM,eAAc,GAChBC,KAAA,EAAA,OAAM,aAAY;;EAO9B,OAAM;GAEFE,KAAA,EAAA,OAAM,eAAc,GAEZC,KAAA,EAAA,OAAM,cAAa,GACnBC,KAAA,EAAA,OAAM,eAAc,GAChBC,KAAA,EAAA,OAAM,YAAW,GAEZW,KAAA,EAAA,OAAM,aAAY,GAEvBV,KAAA,EAAA,OAAM,YAAW,GAEZC,KAAA,EAAA,OAAM,aAAY,GAEvBU,KAAA,EAAA,OAAM,uBAAsB,GAEvBT,KAAA,EAAA,OAAM,aAAY;;EAS3C,OAAM;;;EAiB2C,OAAM;;;EAQK,OAAM;GAC9DW,KAAA,EAAA,OAAM,mBAAkB,GAEpBsG,KAAA,EAAA,OAAM,qBAAoB,GAa9BkK,KAAA,EAAA,OAAM,oBAAmB,GACrBC,KAAA,EAAA,OAAM,eAAc,GAEfC,KAAA,EAAA,OAAM,gBAAe,GAE1BC,KAAA,EAAA,OAAM,eAAc,GAEf5E,KAAA,EAAA,OAAM,gBAAe,GAE1BC,KAAA,EAAA,OAAM,eAAc,GAEfzF,KAAA,EAAA,OAAM,gBAAe;;EAIe,OAAM;;;EAI5C,OAAM;GACPqK,KAAA,EAAA,OAAM,kBAAiB,GA2BdlK,KAAA,EAAA,OAAM,iBAAgB,GACtBC,KAAA,EAAA,OAAM,iBAAgB,GAGtBC,KAAA,EAAA,OAAM,YAAW,GACjBC,KAAA,EAAA,OAAM,cAAa,GAMnBC,KAAA,EAAA,OAAM,cAAa,GACnBC,KAAA,EAAA,OAAM,gBAAe,GACrBC,KAAA,EAAA,OAAM,aAAY;;EAQrC,OAAM;GAOEC,KAAA,EAAA,OAAM,YAAW,GACjBsK,KAAA,EAAA,OAAM,YAAW;;EAGjB,OAAM;;;EAM+C,OAAM;sCASvDpK,KAAA,EAAA,OAAM,oBAAmB,GAGzBC,KAAA,EAAA,OAAM,oBAAmB,GAGzByJ,KAAA,EAAA,OAAM,oBAAmB,oBAKzBxE,KAAA,EAAA,OAAM,oBAAmB,GAGzBC,KAAA,EAAA,OAAM,oBAAmB,GAGzBjF,KAAA,EAAA,OAAM,oBAAmB,GAM7BC,KAAA,EAAA,OAAM,iBAAgB;;EACG,OAAM;;;EAGpB,OAAM;2EAgCjBkF,KAAA,EAAA,OAAM,cAAa;;EACf,OAAM;;;EAS8B,OAAM;GAGtC3E,KAAA,EAAA,OAAM,WAAU,GAKhBoJ,KAAA,EAAA,OAAM,cAAa;;EAIA,OAAM;;;EAQgC,OAAM;;;EAK/E,OAAM;GAIF/I,KAAA,EAAA,OAAM,WAAU,GACZC,KAAA,EAAA,OAAM,aAAY;;EAGS,OAAM;GAEjC+I,KAAA,EAAA,OAAM,aAAY,mBAatB9I,KAAA,EAAA,OAAM,WAAU,GACZC,KAAA,EAAA,OAAM,aAAY;;EAGU,OAAM;GAyDtCE,KAAA,EAAA,OAAM,WAAU,GACZ4I,KAAA,EAAA,OAAM,aAAY,GAOtBvE,KAAA,EAAA,OAAM,eAAc;;EAOxB,OAAM;GAIFC,KAAA,EAAA,OAAM,WAAU,GACZrE,KAAA,EAAA,OAAM,aAAY;;EAIc,OAAM;GAEtCE,KAAA,EAAA,OAAM,aAAY;;EAOtB,OAAM;GACFE,KAAA,EAAA,OAAM,aAAY;;EAQgB,OAAM;GAI5CE,KAAA,EAAA,OAAM,WAAU,GACZC,KAAA,EAAA,OAAM,aAAY;;EAIqB,OAAM;GAG7CgE,KAAA,EAAA,OAAM,aAAY;;EAIsB,OAAM;GAMlDC,KAAA,EAAA,OAAM,WAAU,GACZC,KAAA,EAAA,OAAM,aAAY,GAQtB/D,KAAA,EAAA,OAAM,eAAc;;AAvdrC,SAAAlN,EAAA,GAAAH,EA6dM,OA7dNI,IA6dM;AAAA,IA3dyBF,EAAA,OAAO,sBAAlCC,KAAAH,EAA4D,OAA5DH,EAA4D;IAE5DQ,EAwdM,OAxdNP,IAwdM;AAAA,MAvdFO,EAUM,OAVNoC,IAUM;AAAA,QATFpC,EAAgD,MAAhDqC,IAAgDpC,EAApBL,EAAY,YAAA,GAAA,CAAA;AAAA,QACxCI,EAOM,OAPNsC,IAOM;AAAA,UANqE1C,EAAU,mBAAjFD,EAES,UAAA;AAAA;YAFD,OAAM;AAAA,YAAqB,mCAAOC,EAAqB,yBAAAA,EAAA,sBAAA,GAAA2D,CAAA;AAAA,eACxDF,EAAa,gBAAA,WAAA,kBAAA,GAAA,CAAA;UAE+CzD,EAAU,mBAA7ED,EAES,UAAA;AAAA;YAFD,OAAM;AAAA,YAAmB,mCAAOC,EAAmB,uBAAAA,EAAA,oBAAA,GAAA2D,CAAA;AAAA,eACpDF,EAAW,cAAA,WAAA,mBAAA,GAAA,CAAA;;;OAMYA,EAAW,eAAA,CAAKA,EAAa,iBAAA,CAAKA,EAAa,iBAArFvD,KAAAH,EAgEM,OAhEN4C,IAgEM;AAAA,QA/DFvC,EAGM,OAHNN,IAGM;AAAA,4BAFFM,EAAoE,MAAA,MAAA;AAAA,YAAhEA,EAAiC,KAAA,EAA9B,OAAM,oBAAmB,CAAA;AAAA,cAAK,4BAA0B;AAAA;UAC/DA,EAAiD,OAAjDY,IAAiDX,EAApBL,EAAW,WAAA,GAAA,CAAA;AAAA;QAG5CI,EAiCM,OAjCNc,IAiCM;AAAA,UA/BFd,EAQM,OARNe,IAQM;AAAA,8BAPFf,EAEM,OAAA,EAFD,OAAM,eAAW;AAAA,cAClBA,EAA4B,KAAA,EAAzB,OAAM,eAAc,CAAA;AAAA;YAE3BA,EAGM,OAHNwD,IAGM;AAAA,cAFFxD,EAAgD,OAAhDyD,IAAgDxD,EAArBL,EAAY,YAAA,GAAA,CAAA;AAAA,cACvC0D,EAAA,EAAA,MAAAA,EAAA,EAAA,IAAAtD,EAA2C,OAAtC,EAAA,OAAM,aAAY,GAAC,iBAAa,EAAA;AAAA;;UAK7CA,EAQM,OARNwC,IAQM;AAAA,8BAPFxC,EAEM,OAAA,EAFD,OAAM,eAAW;AAAA,cAClBA,EAAkC,KAAA,EAA/B,OAAM,qBAAoB,CAAA;AAAA;YAEjCA,EAGM,OAHNyC,IAGM;AAAA,cAFFzC,EAA+C,OAA/C0D,IAA+CzD,EAApBL,EAAW,WAAA,GAAA,CAAA;AAAA,cACtC0D,EAAA,EAAA,MAAAA,EAAA,EAAA,IAAAtD,EAA0C,OAArC,EAAA,OAAM,aAAY,GAAC,gBAAY,EAAA;AAAA;;UAK5CA,EAQM,OARNmK,IAQM;AAAA,8BAPFnK,EAEM,OAAA,EAFD,OAAM,eAAW;AAAA,cAClBA,EAAkC,KAAA,EAA/B,OAAM,qBAAoB,CAAA;AAAA;YAEjCA,EAGM,OAHN0C,IAGM;AAAA,cAFF1C,EAAiD,OAAjD2C,IAAiD1C,EAAtBL,EAAa,aAAA,GAAA,CAAA;AAAA,cACxC0D,EAAA,EAAA,MAAAA,EAAA,EAAA,IAAAtD,EAA4C,OAAvC,EAAA,OAAM,aAAY,GAAC,kBAAc,EAAA;AAAA;;;QAMd,OAAO,KAAKJ,EAAA,iBAAiB,EAAE,SAAM,KAAzEE,KAAAH,EAqBM,OArBNiD,IAqBM;AAAA,UApBFU,EAAA,EAAA,MAAAA,EAAA,EAAA,IAAAtD,EAA4B,YAAxB,uBAAmB,EAAA;AAAA,UACvBA,EAkBM,OAlBN6C,IAkBM;AAAA,aAjBF/C,EAAA,EAAA,GAAAH,EAgBMO,GAhBwB,MAAAC,EAAAP,EAAA,mBAAjB,CAAAiZ,GAAM3X,YAAnBvB,EAgBM,OAAA;AAAA,cAhB4C,KAAKuB;AAAA,cAAQ,OAAM;AAAA;cACjElB,EAA2C,OAA3C8C,IAA2C7C,EAAfiB,CAAM,GAAA,CAAA;AAAA,cAClClB,EAaM,OAbN+C,IAaM;AAAA,gBAZF/C,EAGM,OAHNgD,IAGM;AAAA,kBAFFM,EAAA,EAAA,MAAAA,EAAA,EAAA,IAAAtD,EAAqC,QAA/B,EAAA,OAAM,aAAY,GAAC,SAAK,EAAA;AAAA,kBAC9BA,EAA+C,QAA/C2D,IAA4B1D,EAAA4Y,EAAK,IAAI,GAAA,CAAA;AAAA;gBAEzC7Y,EAGM,OAHNiD,IAGM;AAAA,kBAFFK,EAAA,EAAA,MAAAA,EAAA,EAAA,IAAAtD,EAAuC,QAAjC,EAAA,OAAM,aAAY,GAAC,WAAO,EAAA;AAAA,kBAChCA,EAAiD,QAAjDkD,IAA4BjD,EAAA4Y,EAAK,MAAM,GAAA,CAAA;AAAA;gBAE3C7Y,EAGM,OAHN4D,IAGM;AAAA,kBAFFN,EAAA,EAAA,MAAAA,EAAA,EAAA,IAAAtD,EAAsC,QAAhC,EAAA,OAAM,aAAY,GAAC,UAAM,EAAA;AAAA,kBAC/BA,EAAgD,QAAhDmD,IAA4BlD,EAAA4Y,EAAK,KAAK,GAAA,CAAA;AAAA;;;;;;MAS5B,CAAAxV,EAAA,gBAAgBA,EAAa,iBAA/DvD,KAAAH,EAcM,OAdNkE,IAcM;AAAA,UAbF7D,EAA4G,SAAA;AAAA,UAArG,MAAK;AAAA,UAAO,aAAY;AAAA,wDAA0CqD,EAAW,cAAAhD;AAAA,UAAG,mCAAOT,EAAY,gBAAAA,EAAA,aAAA,GAAA2D,CAAA;AAAA;cAAjCF,EAAW,WAAA;AAAA;UACpFrD,EAOS,UAAA;AAAA,wDAPQqD,EAAY,eAAAhD;AAAA,UAAG,oCAAQT,EAAY,gBAAAA,EAAA,aAAA,GAAA2D,CAAA;AAAA;;;cAAnCF,EAAY,YAAA;AAAA;QAQ7BrD,EAGS,UAAA;AAAA,UAHD,OAAM;AAAA,UAAqB,SAAKsD,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAAjD,MAAEgD,EAAa,gBAAA,CAAIA,EAAa;AAAA;UACpErD,EAAqE,KAAA;AAAA,YAAjE,SAAOqD,EAAa,gBAAA,uBAAA,aAAA;AAAA;UAA6C7C,EAAA,QAClE6C,EAAa,gBAAA,oBAAA,gBAAA,GAAA,CAAA;AAAA;;MAKbxD,EAAO,WAAA,CAAKwD,EAAW,eAAA,CAAKA,EAAa,iBAApDvD,EAAA,GAAAH,EAKM,OALNyD,IAKME,EAAA,EAAA,MAAAA,EAAA,EAAA,IAAA;AAAA,QAJFtD,EAEM,OAAA;AAAA,UAFD,OAAM;AAAA,UAA8B,MAAK;AAAA;UAC1CA,EAAoD,QAA9C,EAAA,OAAM,kBAAiB,GAAC,iBAAe;AAAA;QAEjDA,EAA8B,WAA3B,2BAAuB,EAAA;AAAA,aAIdqD,EAAa,iBAAA,CAAKA,EAAW,eAAA,CAAKA,EAAa,iBAA/DvD,KAAAH,EAiFM,OAjFNiQ,IAiFM;AAAA,QAhFF5P,EAaM,OAbN8D,IAaM;AAAA,4BAZF9D,EAA4D,MAAA,MAAA;AAAA,YAAxDA,EAA2B,KAAA,EAAxB,OAAM,cAAa,CAAA;AAAA,cAAK,0BAAwB;AAAA;UACvDA,EAUM,OAVNoK,IAUM;AAAA,cATFpK,EAMS,UAAA;AAAA,4DANQqD,EAAe,kBAAAhD;AAAA,cAAG,oCAAQT,EAAe,mBAAAA,EAAA,gBAAA,GAAA2D,CAAA;AAAA;;;kBAAzCF,EAAe,eAAA;AAAA;cAOhCrD,EAC6B,SAAA;AAAA,cADtB,MAAK;AAAA,4DAAgBqD,EAAe,kBAAAhD;AAAA,cAAE,aAAY;AAAA,cACrD,OAAM;AAAA;kBADkBgD,EAAe,eAAA;AAAA;;;QAKnDrD,EAaM,OAbNsU,IAaM;AAAA,UAZFtU,EAGM,OAHNuU,IAGM;AAAA,YAFFjR,EAAA,EAAA,MAAAA,EAAA,EAAA,IAAAtD,EAAiD,QAA3C,EAAA,OAAM,gBAAe,GAAC,kBAAc,EAAA;AAAA,YAC1CA,EAAwE,QAAxEwU,IAA+BvU,EAAAL,EAAA,yBAAyB,MAAM,GAAA,CAAA;AAAA;UAElEI,EAGM,OAHNyU,IAGM;AAAA,YAFFnR,EAAA,EAAA,MAAAA,EAAA,EAAA,IAAAtD,EAAgD,QAA1C,EAAA,OAAM,gBAAe,GAAC,iBAAa,EAAA;AAAA,YACzCA,EAAwD,QAAxD6P,IAAwD5P,EAAzBL,EAAe,eAAA,GAAA,CAAA;AAAA;UAElDI,EAGM,OAHN8P,IAGM;AAAA,YAFFxM,EAAA,EAAA,MAAAA,EAAA,EAAA,IAAAtD,EAA8C,QAAxC,EAAA,OAAM,gBAAe,GAAC,eAAW,EAAA;AAAA,YACvCA,EAA2D,QAA3DqK,IAA2DpK,EAA5BL,EAAkB,kBAAA,GAAA,CAAA;AAAA;;QAI9CA,EAAA,yBAAyB,WAAM,UAA1CD,EAEM,OAFN2K,IAAqE,+BAErE,MAEAxK,KAAAH,EA6CM,OA7CN4K,IA6CM;AAAA,UA5CFvK,EA2CQ,SA3CR0U,IA2CQ;AAAA,YA1CJ1U,EAsBQ,SAAA,MAAA;AAAA,cArBJA,EAoBK,MAAA,MAAA;AAAA,gBAnBDA,EAGK,MAAA;AAAA,kBAHA,kCAAOJ,EAAa,cAAA,WAAA;AAAA;oBAAe,eAEpC,EAAA;AAAA,kBAAAI,EAAmC,KAAA,EAAhC,OAAM,sBAAqB,GAAA,MAAA,EAAA;AAAA;gBAElCA,EAGK,MAAA;AAAA,kBAHA,kCAAOJ,EAAa,cAAA,UAAA;AAAA;oBAAc,iBAEnC,EAAA;AAAA,kBAAAI,EAAmC,KAAA,EAAhC,OAAM,sBAAqB,GAAA,MAAA,EAAA;AAAA;gBAElCA,EAGK,MAAA;AAAA,kBAHA,kCAAOJ,EAAa,cAAA,MAAA;AAAA;oBAAU,UAE/B,EAAA;AAAA,kBAAAI,EAAmC,KAAA,EAAhC,OAAM,sBAAqB,GAAA,MAAA,EAAA;AAAA;gBAElCA,EAGK,MAAA;AAAA,kBAHA,kCAAOJ,EAAa,cAAA,QAAA;AAAA;oBAAY,YAEjC,EAAA;AAAA,kBAAAI,EAAmC,KAAA,EAAhC,OAAM,sBAAqB,GAAA,MAAA,EAAA;AAAA;gBAElCsD,EAAA,EAAA,MAAAA,EAAA,EAAA,IAAAtD,EAAe,YAAX,UAAM,EAAA;AAAA,gBACVsD,EAAA,EAAA,MAAAA,EAAA,EAAA,IAAAtD,EAAiB,YAAb,YAAQ,EAAA;AAAA,gBACZsD,EAAA,EAAA,MAAAA,EAAA,EAAA,IAAAtD,EAAc,YAAV,SAAK,EAAA;AAAA;;YAGjBA,EAkBQ,SAAA,MAAA;AAAA,sBAjBJL,EAgBKO,GAAA,MAAAC,EAhBeP,EAAwB,0BAAA,CAAjC6W,YAAX9W,EAgBK,MAAA;AAAA,gBAhB0C,KAAK8W,EAAM;AAAA,gBACrD,OAAOlW,EAAAX,EAAA,qBAAqB6W,EAAM,MAAM,CAAA;AAAA;gBACzCzW,EAAoE,MAApEwK,IAAoEvK,EAAtCL,gBAAc6W,EAAM,SAAS,CAAA,GAAA,CAAA;AAAA,gBAC3DzW,EAEK,MAFLyK,IAEK;AAAA,kBADDzK,EAAqC,UAAA,MAAAC,EAA1BwW,EAAM,QAAQ,GAAA,CAAA;AAAA;gBAE7BzW,EAA2C,MAA3C0K,IAAyBzK,EAAAwW,EAAM,IAAI,GAAA,CAAA;AAAA,gBACnCzW,EAKK,MALL2K,IAKK;AAAA,kBAJD3K,EAGO,QAAA;AAAA,oBAHA,OAAwBO,EAAA,CAAA,gBAAAX,EAAA,kBAAkB6W,EAAM,MAAM,CAAA,CAAA;AAAA;oBACzDzW,EAAyC,KAAA;AAAA,sBAArC,OAAOO,EAAAX,EAAA,WAAW6W,EAAM,MAAM,CAAA;AAAA;sBAAO,MACzCxW,EAAGwW,EAAM,MAAM,GAAA,CAAA;AAAA;;gBAGvBzW,EAAwD,MAAxD4K,IAA2B3K,EAAAwW,EAAM,UAAM,KAAA,GAAA,CAAA;AAAA,gBACvCzW,EAAsF,MAAtF6K,IAA6B5K,EAAAwW,EAAM,WAAWA,EAAM,WAAQ,UAAA,KAAA,GAAA,CAAA;AAAA,gBAC5DzW,EAAoD,MAApD8K,IAA0B7K,EAAAwW,EAAM,SAAK,GAAA,GAAA,CAAA;AAAA;;;;YAQvB7W,EAAA,aAAa,SAAe,KAAA,CAAAyD,EAAA,gBAAgBA,EAAa,iBAA3FvD,KAAAH,EAgHM,OAhHNoQ,IAgHM;AAAA,gBA/GFpQ,EA8GMO,GAAA,MAAAC,EA9GgBP,EAAY,cAAA,CAAtBuV,YAAZxV,EA8GM,OAAA;AAAA,UA9G+B,KAAKwV,EAAO;AAAA,UAAI,OAAK5U,EAAA,CAAC,aAC9B,EAAA,aAAA4U,EAAO,WAAM,eAAA,cAAkCA,EAAO,SAAI,QAAA,CAAA,CAAA;AAAA;UACnFnV,EAEM,OAAA;AAAA,YAFA,OAA6BO,EAAA,CAAA,qBAAAX,EAAA,eAAeuV,EAAO,MAAM,CAAA,CAAA;AAAA,eACxDvV,EAAY,aAACuV,EAAO,MAAM,CAAA,GAAA,CAAA;AAAA,UAGjCnV,EAA8C,OAA9C+K,IAA0B9K,EAAAkV,EAAO,IAAI,GAAA,CAAA;AAAA,UACrCnV,EAAkF,OAAlFqV,IAA0BpV,EAAAkV,EAAO,SAAI,UAAA,UAAyBA,EAAO,IAAI,GAAA,CAAA;AAAA,UAGlCA,EAAO,SAAI,WAAlDrV,KAAAH,EAWM,OAXNqQ,IAWM;AAAA,aAVFlQ,EAAA,EAAA,GAAAH,EAGMO,GAHc,MAAAC,EAAAP,EAAA,0BAA0BuV,CAAM,IAAxCW,YAAZnW,EAGM,OAAA;AAAA,cAHkD,KAAKmW,EAAK;AAAA,cAAM,UAAM,qBAClElW,wBAAsBkW,EAAK,UAAU,CAAA,CAAA;AAAA,cAAI,SAAO,CAAAzV,MAAAT,EAAA,wBAAwBkW,GAAMX,CAAM;AAAA,YACzF,GAAAlV,EAAA6V,EAAK,IAAI,GAAA,IAAA7F,EAAA;YAGLrQ,EAAA,8BAA8BuV,CAAM,IAAA,KAA/CrV,KAAAH,EAEM,OAFNuQ,IAEM;AAAA,gCADFlQ,EAAmC,KAAA,EAAhC,OAAM,sBAAqB,GAAA,MAAA,EAAA;AAAA,cAAKQ,EAAA,MAAIP,EAAAL,EAAA,8BAA8BuV,CAAM,KAAI,aACnF,CAAA;AAAA;YAEUvV,EAAW,oBADrBD,EAC2B,KAAA;AAAA;cADxB,OAAM;AAAA,cAA8B,SAAK,CAAAU,MAAET,EAAsB,uBAACuV,CAAM;AAAA;;UAKpEA,EAAO,SAAI,gBAAtBxV,EAUM,OAAAqL,IAAA;AAAA,YATFhL,EAEM,OAFNiL,IAEM;AAAA,cADF3H,EAAA,EAAA,MAAAA,EAAA,EAAA,IAAAtD,EAA8B,gBAAtB,iBAAa,EAAA;AAAA,gBAAS,MAACC,EAAGkV,EAAO,aAAS,cAAA,GAAA,CAAA;AAAA;YAEtDnV,EAEM,OAFNkL,IAEM;AAAA,cADF5H,EAAA,EAAA,MAAAA,EAAA,EAAA,IAAAtD,EAAuC,gBAA/B,0BAAsB,EAAA;AAAA,gBAAS,MAACC,EAAGkV,EAAO,WAAO,eAAA,GAAA,CAAA;AAAA;YAE7DnV,EAEM,OAFN2U,IAEM;AAAA,cADFrR,EAAA,EAAA,MAAAA,EAAA,EAAA,IAAAtD,EAA8B,gBAAtB,iBAAa,EAAA;AAAA,gBAAS,MAACC,EAAGL,EAAmB,oBAACuV,CAAM,CAAA,GAAA,CAAA;AAAA;sBAGpExV,EAUM,OAAAiV,IAAA;AAAA,YATF5U,EAEM,OAFNmQ,IAEM;AAAA,cADF7M,EAAA,EAAA,MAAAA,EAAA,EAAA,IAAAtD,EAAkC,gBAA1B,qBAAiB,EAAA;AAAA,gBAAS,MAACC,EAAGL,EAAkB,mBAACuV,CAAM,CAAA,GAAA,CAAA;AAAA;YAEnEnV,EAEM,OAFNoQ,IAEM;AAAA,cADF9M,EAAA,EAAA,MAAAA,EAAA,EAAA,IAAAtD,EAAuC,gBAA/B,0BAAsB,EAAA;AAAA,gBAAS,MAACC,EAAGkV,EAAO,WAAO,eAAA,GAAA,CAAA;AAAA;YAE7DnV,EAEM,OAFNmL,IAEM;AAAA,cADF7H,EAAA,EAAA,MAAAA,EAAA,EAAA,IAAAtD,EAA8B,gBAAtB,iBAAa,EAAA;AAAA,gBAAS,MAACC,EAAGL,EAAc,eAACuV,CAAM,CAAA,GAAA,CAAA;AAAA;;UAK/DnV,EAiCM,OAjCNoL,IAiCM;AAAA,YAhCS+J,EAAO,UAAlBrV,EAAA,GAAAH,EAEM,OAFN0L,IAA2E,cAC5DpL,EAAAkV,EAAO,MAAM,GAAA,CAAA,WAE5BxV,EAEM,OAFN2L,IAA+D,sBAE/D;AAAA,YAIU6J,EAAO,SAAoB,WAAAA,EAAO,WAAM,kBADlDxV,EAGS,UAAA;AAAA;cAHD,OAAM;AAAA,cAAmB,SAAK,CAAAU,MAAET,EAAmB,oBAACuV,CAAM;AAAA,eACA,eAElE,GAAAN,EAAA;YAGgBM,EAAO,SAAI,gBAA3BxV,EAgBWO,GAAA,EAAA,KAAA,EAAA,GAAA;AAAA,cAbGN,EAAc,kBAAIuV,EAAO,WAAM,oBADzCxV,EAGS,UAAA;AAAA;gBAHD,OAAM;AAAA,gBAAmB,SAAK,CAAAU,MAAET,EAAiB,kBAACuV,CAAM;AAAA,iBACL,kBAE3D,GAAA9E,EAAA;cAGUzQ,EAAc,kBAAIuV,EAAO,WAAM,iBADzCxV,EAGS,UAAA;AAAA;gBAHD,OAAM;AAAA,gBAAmB,SAAK,CAAAU,MAAET,EAAiB,kBAACuV,CAAM;AAAA,iBACR,cAExD,GAAA5J,EAAA;cAGU3L,EAAc,kBAAIuV,EAAO,WAAM,kBADzCxV,EAGS,UAAA;AAAA;gBAHD,OAAM;AAAA,gBAAmB,SAAK,CAAAU,MAAET,EAAiB,kBAACuV,CAAM;AAAA,iBACP,aAEzD,GAAAL,EAAA;;;UAMR9U,EAOM,OAPNsQ,IAOM;AAAA,YANiC6E,EAAO,OAAOA,EAAO,IAAI,SAAM,KAAlErV,KAAAH,EAIM,OAJN4Q,IAIM;AAAA,cAHFvQ,EAES,UAAA;AAAA,gBAFD,OAAM;AAAA,gBAAsC,SAAO,CAAAK,MAAAT,EAAA,cAAcuV,EAAO,EAAE;AAAA;kCAC9EnV,EAAmC,KAAA,EAAhC,OAAM,sBAAqB,GAAA,MAAA,EAAA;AAAA,gBAAKQ,EAAA,kBAAc2U,EAAO,IAAI,MAAM,IAAG,MACzE,CAAA;AAAA;;YAE4EvV,EAAa,sBAA7FD,EAAmG,KAAA;AAAA;cAAhG,OAAM;AAAA,cAAgC,SAAK,CAAAU,MAAET,EAAgB,iBAACuV,CAAM;AAAA;;UAIhE9R,EAAA,aAAa,SAAS8R,EAAO,EAAE,KAA1CrV,KAAAH,EAcM,OAdN+L,IAcM;AAAA,YAbFpI,EAAA,EAAA,MAAAA,EAAA,EAAA,IAAAtD,EAA0B,YAAtB,qBAAiB,EAAA;AAAA,aACrBF,EAAA,EAAA,GAAAH,EAWMO,WAXwBiV,EAAO,KAAxB,CAAAsB,GAAOrW,YAApBT,EAWM,OAAA;AAAA,cAXqC,KAAKS;AAAA,cAAO,OAAM;AAAA;cACzDJ,EAAgE,OAAhE2L,IAAgE1L,EAAvCL,gBAAc6W,EAAM,SAAS,CAAA,GAAA,CAAA;AAAA,cACtDzW,EAGM,OAAA;AAAA,gBAHD,UAAM,cAAqBJ,oBAAkB6W,EAAM,MAAM,CAAA,CAAA;AAAA;gBAC1DzW,EAAyC,KAAA;AAAA,kBAArC,OAAOO,EAAAX,EAAA,WAAW6W,EAAM,MAAM,CAAA;AAAA;kBAAO,MACzCxW,EAAGwW,EAAM,MAAM,GAAA,CAAA;AAAA;cAEnBzW,EAGM,OAHN+U,IAGM;AAAA,gBAFU0B,EAAM,UAAlB3W,EAAA,GAAAH,EAA2D,QAAjCiM,IAAA,aAAW3L,EAAAwW,EAAM,MAAM,GAAA,CAAA;gBACrCA,EAAM,YAAlB3W,KAAAH,EAAyE,YAA7C,kBAAaM,EAAGwW,EAAM,QAAQ,IAAG,SAAK,CAAA;;cAE3DA,EAAM,SAAjB3W,EAAA,GAAAH,EAAiE,OAAjEkM,IAA6C5L,EAAAwW,EAAM,KAAK,GAAA,CAAA;;;;YAQvD,CAAA5W,EAAA,WAAY,CAAAwD,EAAA,iBAAkB,CAAAA,EAAA,gBAAgBA,EAAa,iBAA5EvD,EAAA,GAAAH,EAEM,OAFNmM,IACO7L,EAAAJ,EAAA,KAAK,WAAM,IAAA,2BAAA,sDAAA,GAAA,CAAA;MAIewD,EAAW,eAA5CvD,KAAAH,EAgGM,OAhGNoM,IAgGM;AAAA,QA/FFzI,EAAA,EAAA,MAAAA,EAAA,EAAA,IAAAtD,EAA4B,YAAxB,uBAAmB,EAAA;AAAA,QAGvBA,EAiBM,OAjBNgM,IAiBM;AAAA,UAhBFhM,EAIM,OAJNiM,IAIM;AAAA,YAHF3I,EAAA,EAAA,MAAAA,EAAA,EAAA,IAAAtD,EAA0C,SAAnC,EAAA,KAAI,YAAW,GAAC,eAAW,EAAA;AAAA,cAClCA,EAA+F,SAAA;AAAA,cAAxF,MAAK;AAAA,cAAO,IAAG;AAAA,cAAqB,uBAAAsD,EAAA,EAAA,MAAAA,EAAA,EAAA,IAAA,CAAAjD,MAAAgD,EAAA,QAAQ,OAAIhD;AAAA,cAAG,OAAKE,EAAA,EAAA,OAAa8C,EAAU,WAAC,MAAI;AAAA;cAAhD,CAAAiO,GAAAjO,EAAA,QAAQ,IAAI;AAAA;YAC5CA,EAAA,WAAW,QAAtBvD,EAAA,GAAAH,EAA6E,OAA7E4V,IAAqDtV,EAAAoD,EAAA,WAAW,IAAI,GAAA,CAAA;;UAExErD,EAUM,OAVNgV,IAUM;AAAA,YATF1R,EAAA,EAAA,MAAAA,EAAA,EAAA,IAAAtD,EAA8C,SAAvC,EAAA,KAAI,YAAW,GAAC,mBAAe,EAAA;AAAA,cACtCA,EAKS,UAAA;AAAA,cALD,IAAG;AAAA,cAAqB,uBAAAsD,EAAA,EAAA,MAAAA,EAAA,EAAA,IAAA,CAAAjD,MAAAgD,EAAA,QAAQ,OAAIhD;AAAA;sBACxCV,EAESO,GAAA,MAAAC,EAFcN,EAAc,gBAAA,CAAtBkC,YAAfpC,EAES,UAAA;AAAA,gBAF+B,KAAKoC;AAAA,gBAAO,OAAOA;AAAA,mBACpDA,CAAI,GAAA,GAAA0O,EAAA;cAEXnN,EAAA,EAAA,MAAAA,EAAA,EAAA,IAAAtD,EAAoC,UAA5B,EAAA,OAAM,QAAO,GAAC,SAAK,EAAA;AAAA;cAJC,CAAAoR,GAAA/N,EAAA,QAAQ,IAAI;AAAA;YAM/BA,EAAA,QAAQ,SAAI,kBAAzB1D,EAC0D,SAAA;AAAA;cADnB,MAAK;AAAA,cAAO,aAAY;AAAA,cAClD,uBAAA2D,EAAA,EAAA,MAAAA,EAAA,EAAA,IAAA,CAAAjD,MAAAgD,EAAA,QAAQ,aAAUhD;AAAA,cAAE,OAAA,EAAwB,cAAA,MAAA;AAAA;cAA5C,CAAAiR,GAAAjO,EAAA,QAAQ,UAAU;AAAA;;;QAIvCrD,EAMM,OANNkM,IAMM;AAAA,UALFlM,EAIM,OAJNmM,IAIM;AAAA,YAHF7I,EAAA,EAAA,MAAAA,EAAA,EAAA,IAAAtD,EAA+C,SAAxC,EAAA,KAAI,aAAY,GAAC,mBAAe,EAAA;AAAA,cACvCA,EAAmG,SAAA;AAAA,cAA5F,MAAK;AAAA,cAAQ,IAAG;AAAA,cAAsB,uBAAAsD,EAAA,EAAA,MAAAA,EAAA,EAAA,IAAA,CAAAjD,MAAAgD,EAAA,QAAQ,QAAKhD;AAAA,cAAG,OAAKE,EAAA,EAAA,OAAa8C,EAAU,WAAC,OAAK;AAAA;cAAlD,CAAAiO,GAAAjO,EAAA,QAAQ,KAAK;AAAA;YAC/CA,EAAA,WAAW,SAAtBvD,EAAA,GAAAH,EAA+E,OAA/EyM,IAAsDnM,EAAAoD,EAAA,WAAW,KAAK,GAAA,CAAA;;;QAyD9ErD,EAKM,OALNqM,IAKM;AAAA,UAJFrM,EAGM,OAHNiV,IAGM;AAAA,YAFF3R,EAAA,EAAA,MAAAA,EAAA,EAAA,IAAAtD,EAAqC,SAA9B,EAAA,KAAI,aAAY,GAAC,SAAK,EAAA;AAAA,cAC7BA,EAAsE,YAAA;AAAA,cAA5D,IAAG;AAAA,cAAa,MAAK;AAAA,cAAa,uBAAAsD,EAAA,EAAA,MAAAA,EAAA,EAAA,IAAA,CAAAjD,MAAAgD,EAAA,QAAQ,QAAKhD;AAAA;cAAb,CAAAiR,GAAAjO,EAAA,QAAQ,KAAK;AAAA;;;QAKjErD,EAGM,OAHN0Q,IAGM;AAAA,UAFF1Q,EAA2E,UAAA;AAAA,YAAnE,OAAM;AAAA,YAAqB,qCAAOJ,EAAgB,oBAAAA,EAAA,iBAAA,GAAA2D,CAAA;AAAA,aAAE,QAAM;AAAA,UAClEvD,EAAqF,UAAA;AAAA,YAA7E,OAAM;AAAA,YAAmB,qCAAOJ,EAAmB,uBAAAA,EAAA,oBAAA,GAAA2D,CAAA;AAAA,aAAE,iBAAe;AAAA;;MAKnDF,EAAa,iBAA9CvD,KAAAH,EA8DM,OA9DNuV,IA8DM;AAAA,QA7DF5R,EAAA,EAAA,MAAAA,EAAA,EAAA,IAAAtD,EAAuB,YAAnB,kBAAc,EAAA;AAAA,QAGlBA,EAWM,OAXN2Q,IAWM;AAAA,UAVF3Q,EAKM,OALNsM,IAKM;AAAA,YAJFhJ,EAAA,EAAA,MAAAA,EAAA,EAAA,IAAAtD,EAA2C,SAApC,EAAA,KAAI,aAAY,GAAC,eAAW,EAAA;AAAA,cACnCA,EAC+C,SAAA;AAAA,cADxC,MAAK;AAAA,cAAO,IAAG;AAAA,cAAsB,uBAAAsD,EAAA,EAAA,MAAAA,EAAA,EAAA,IAAA,CAAAjD,MAAAgD,EAAA,SAAS,OAAIhD;AAAA,cACpD,OAAKE,EAAA,EAAA,OAAa8C,EAAe,gBAAC,MAAI;AAAA;cADC,CAAAiO,GAAAjO,EAAA,SAAS,IAAI;AAAA;YAE9CA,EAAA,gBAAgB,QAA3BvD,EAAA,GAAAH,EAAuF,OAAvF4M,IAA0DtM,EAAAoD,EAAA,gBAAgB,IAAI,GAAA,CAAA;;UAElFrD,EAGM,OAHNwM,IAGM;AAAA,YAFFlJ,EAAA,EAAA,MAAAA,EAAA,EAAA,IAAAtD,EAA8C,SAAvC,EAAA,KAAI,cAAa,GAAC,iBAAa,EAAA;AAAA,cACtCA,EAA8D,SAAA;AAAA,cAAvD,MAAK;AAAA,cAAQ,IAAG;AAAA,cAAuB,uBAAAsD,EAAA,EAAA,MAAAA,EAAA,EAAA,IAAA,CAAAjD,MAAAgD,EAAA,SAAS,QAAKhD;AAAA;cAAd,CAAAiR,GAAAjO,EAAA,SAAS,KAAK;AAAA;;;QAKvCxD,EAAU,0BAAvCC,KAAAH,EAWM,OAXN8M,IAWM;AAAA,UAVFzM,EASM,OATN0M,IASM;AAAA,YARFpJ,EAAA,EAAA,MAAAA,EAAA,EAAA,IAAAtD,EAA0C,SAAnC,EAAA,KAAI,eAAc,GAAC,YAAQ,EAAA;AAAA,cAClCA,EAKS,UAAA;AAAA,cALD,IAAG;AAAA,cAAwB,uBAAAsD,EAAA,EAAA,MAAAA,EAAA,EAAA,IAAA,CAAAjD,MAAAgD,EAAA,SAAS,SAAMhD;AAAA,cAAG,OAAKE,EAAA,EAAA,OAAa8C,EAAe,gBAAC,QAAM;AAAA;cACzFC,EAAA,EAAA,MAAAA,EAAA,EAAA,IAAAtD,EAAyC,UAAjC,EAAA,OAAM,GAAE,GAAC,mBAAe,EAAA;AAAA,sBAChCL,EAESO,GAAA,MAAAC,EAFgBP,EAAgB,kBAAA,CAA1BsB,YAAfvB,EAES,UAAA;AAAA,gBAFmC,KAAKuB;AAAA,gBAAS,OAAOA;AAAA,mBAC1DA,CAAM,GAAA,GAAA0P,EAAA;;cAHkB,CAAAQ,GAAA/N,EAAA,SAAS,MAAM;AAAA;YAMvCA,EAAA,gBAAgB,UAA3BvD,EAAA,GAAAH,EAA2F,OAA3FgN,IAA4D1M,EAAAoD,EAAA,gBAAgB,MAAM,GAAA,CAAA;;;QAI1FrD,EAeM,OAfN4M,IAeM;AAAA,UAdF5M,EAMM,OANN6M,IAMM;AAAA,YALFvJ,EAAA,EAAA,MAAAA,EAAA,EAAA,IAAAtD,EAAiD,SAA1C,EAAA,KAAI,gBAAe,GAAC,kBAAc,EAAA;AAAA,cACzCA,EACsD,SAAA;AAAA,cAD/C,MAAK;AAAA,cAAO,IAAG;AAAA,cAAyB,uBAAAsD,EAAA,EAAA,MAAAA,EAAA,EAAA,IAAA,CAAAjD,MAAAgD,EAAA,SAAS,cAAWhD;AAAA,cAC9D,OAAKE,EAAA,EAAA,OAAa8C,EAAe,gBAAC,aAAW;AAAA;cADH,CAAAiO,GAAAjO,EAAA,SAAS,WAAW;AAAA;YAExDA,EAAA,gBAAgB,eAA3BvD,EAAA,GAAAH,EACM,OADNmN,IAAiE7M,EAAAoD,EAAA,gBAAgB,WAAW,GAAA,CAAA;;UAGhGrD,EAMM,OANN6Q,IAMM;AAAA,YALFvN,EAAA,EAAA,MAAAA,EAAA,EAAA,IAAAtD,EAAgE,SAAzD,EAAA,KAAI,sBAAqB,GAAC,2BAAuB,EAAA;AAAA,cACxDA,EACuD,SAAA;AAAA,cADhD,MAAK;AAAA,cAAS,IAAG;AAAA,cAA+B,uBAAAsD,EAAA,EAAA,MAAAA,EAAA,EAAA,IAAA,CAAAjD,MAAAgD,EAAA,SAAS,eAAYhD;AAAA,cAAE,KAAI;AAAA,cAC7E,OAAKE,EAAA,EAAA,OAAa8C,EAAe,gBAAC,cAAY;AAAA;cADI,CAAAiO,GAAAjO,EAAA,SAAS,YAAY;AAAA;YAEjEA,EAAA,gBAAgB,gBAA3BvD,EAAA,GAAAH,EACM,OADNoN,IAAkE9M,EAAAoD,EAAA,gBAAgB,YAAY,GAAA,CAAA;;;QAMtGrD,EAMM,OANN8Q,IAMM;AAAA,UALF9Q,EAIM,OAJN+Q,IAIM;AAAA,YAHFzN,EAAA,EAAA,MAAAA,EAAA,EAAA,IAAAtD,EAAsC,SAA/B,EAAA,KAAI,cAAa,GAAC,SAAK,EAAA;AAAA,cAC9BA,EACyE,YAAA;AAAA,cAD/D,IAAG;AAAA,cAAc,MAAK;AAAA,cAAa,uBAAAsD,EAAA,EAAA,MAAAA,EAAA,EAAA,IAAA,CAAAjD,MAAAgD,EAAA,SAAS,QAAKhD;AAAA,cACvD,aAAY;AAAA;cAD6B,CAAAiR,GAAAjO,EAAA,SAAS,KAAK;AAAA;;;QAMnErD,EAGM,OAHNgN,IAGM;AAAA,UAFFhN,EAAgF,UAAA;AAAA,YAAxE,OAAM;AAAA,YAAqB,qCAAOJ,EAAqB,yBAAAA,EAAA,sBAAA,GAAA2D,CAAA;AAAA,aAAE,QAAM;AAAA,UACvEvD,EAAmF,UAAA;AAAA,YAA3E,OAAM;AAAA,YAAmB,qCAAOJ,EAAkB,sBAAAA,EAAA,mBAAA,GAAA2D,CAAA;AAAA,aAAE,gBAAc;AAAA;;;;;;ACV9F,MAAK1E,KAAU;AAAA,EACX,MAAM;AAAA,EACN,OAAO;AAAA,IACH,aAAa;AAAA,MACT,MAAM;AAAA,MACN,UAAU;AAAA,IACb;AAAA,IACD,UAAU;AAAA,MACN,MAAM;AAAA,MACN,UAAU;AAAA,IACb;AAAA,IACD,cAAc;AAAA,MACV,MAAM;AAAA,MACN,SAAS,MAAM,CAAC;AAAA,IACnB;AAAA,IACD,SAAS;AAAA,MACL,MAAM;AAAA,MACN,SAAS,MAAM,CAAC;AAAA,IACpB;AAAA,EACH;AAAA,EAED,OAAO;AAAA,IACH;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACH;AAAA,EAED,OAAO;AACH,WAAO;AAAA,MACH,WAAW;AAAA,MACX,YAAY;AAAA,MACZ,cAAc;AAAA,MACd,cAAc;AAAA;AAAA,MAGd,MAAM;AAAA,QACF,EAAE,MAAM,mBAAmB,OAAO,mBAAmB,OAAO,CAAC,YAAY,EAAG;AAAA,QAC5E,EAAE,MAAM,mBAAmB,OAAO,mBAAmB,OAAO,CAAC,YAAY,EAAG;AAAA,QAC5E,EAAE,MAAM,oBAAoB,OAAO,oBAAoB,OAAO,CAAC,cAAc,cAAc,WAAW,SAAS,WAAW,EAAG;AAAA,QAC7H,EAAE,MAAM,aAAa,OAAO,qBAAqB,OAAO,CAAC,SAAS,YAAY,EAAG;AAAA,QACjF,EAAE,MAAM,cAAc,OAAO,oBAAoB,OAAO,CAAC,WAAW,EAAG;AAAA,QACvE,EAAE,MAAM,aAAa,OAAO,aAAa,OAAO,CAAC,YAAY,EAAG;AAAA,QAChE,EAAE,MAAM,YAAY,OAAO,kBAAkB,OAAO,CAAC,cAAc,cAAc,SAAS,aAAa,SAAS,EAAE;AAAA,MACrH;AAAA;AAAA,MAGD,MAAM;AAAA,QACF,WAAW;AAAA,QACX,YAAY;AAAA,QACZ,SAAS;AAAA,QACT,YAAY;AAAA,QACZ,eAAe;AAAA,QACf,OAAO,CAAC;AAAA,MACX;AAAA,MAED,WAAW;AAAA,QACP,SAAS;AAAA,QACT,OAAO,CAAC;AAAA,MACX;AAAA,MACD,YAAY,CAAE;AAAA,MACd,mBAAmB;AAAA,MACnB,kBAAkB;AAAA,MAClB,wBAAwB;AAAA;AAAA,MAGxB,mBAAmB;AAAA,QACf,EAAE,OAAO,aAAa,OAAO,CAAAia,MAAOA,EAAI,UAAW;AAAA,QACnD,EAAE,OAAO,cAAc,OAAO,CAAAA,MAAOA,EAAI,WAAY;AAAA,QACrD,EAAE,OAAO,WAAW,OAAO,CAAAA,MAAOA,EAAI,WAAW,MAAO;AAAA,QACxD,EAAE,OAAO,aAAa,OAAO,CAAAA,MAAOA,EAAI,cAAe;AAAA,QACvD,EAAE,OAAO,SAAS,OAAO,CAAAA,MAAO;;AAAA,sBAAG7Z,IAAA6Z,EAAI,UAAJ,gBAAA7Z,EAAW,WAAU,CAAC;AAAA,UAAW;AAAA,MACvE;AAAA;AAAA,MAGD,sBAAsB;AAAA,QAClB,UAAU;AAAA,UACN,EAAE,OAAO,eAAe,OAAO,CAAA6Z,MAAOA,EAAI,WAAY;AAAA,QACzD;AAAA,QACD,UAAU;AAAA,UACN,EAAE,OAAO,eAAe,OAAO,CAAAA,MAAOA,EAAI,WAAY;AAAA,UACtD,EAAE,OAAO,oBAAoB,OAAO,CAAAA,MAAOA,EAAI,gBAAiB;AAAA,QACnE;AAAA,QACD,kBAAkB;AAAA,UACd,EAAE,OAAO,kBAAkB,OAAO,CAAAA,MAAOA,EAAI,gBAAiB;AAAA,UAC9D,EAAE,OAAO,kBAAkB,OAAO,CAAAA,MAAOA,EAAI,cAAc;AAAA,QAC/D;AAAA,MACH;AAAA;AAAA,MAGD,aAAa;AAAA,QACT;AAAA,QAAqB;AAAA,QAAe;AAAA,QACpC;AAAA,QAAuB;AAAA,QAAa;AAAA,QACpC;AAAA,MACH;AAAA,MAED,YAAY;AAAA,QACR;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACH;AAAA,MAED,OAAO,CAAC,UAAU,aAAa,UAAU,UAAU,QAAQ,OAAO;AAAA,IACtE;AAAA,EACH;AAAA,EAED,UAAU;AAAA,IACN,QAAQ;AACJ,cAAO,oBAAI,KAAI,GAAG,YAAW,EAAG,MAAM,GAAG,EAAE,CAAC;AAAA,IAC/C;AAAA,IAED,cAAc;AACV,aAAO,KAAK,KAAK,OAAO,CAAAC,MAAOA,EAAI,MAAM,SAAS,KAAK,QAAQ,CAAC;AAAA,IACnE;AAAA,IAED,WAAW;AACP,cAAQ,KAAK,UAAU,SAAS,CAAE,GAAE,OAAO,CAACC,GAAKla,MAAS;AACtD,cAAMma,IAAYna,EAAK,aAAaA,EAAK,QAAQ;AACjD,eAAOka,IAAOC,KAAana,EAAK,OAAO;AAAA,MAC1C,GAAE,CAAC;AAAA,IACP;AAAA,IAED,aAAa;AACT,aAAO,KAAK,WAAW,KAAK,aAAY,IAAK,WAAW,KAAK,YAAY,KAAK,WAAW,QAAQ,CAAC;AAAA,IACrG;AAAA,IAED,qBAAqB;AACjB,cAAQ,KAAK,gBAAgB,IAAI,OAAO,CAAAiF,MAAKA,EAAE,WAAW,cAAc;AAAA,IAC3E;AAAA,IAED,iBAAiB;AACb,cAAQ,KAAK,gBAAgB,IAAI,OAAO,CAAAA,MAAKA,EAAE,WAAW,UAAU;AAAA,IACvE;AAAA,IAED,mBAAmB;AACf,cAAQ,KAAK,gBAAgB,IAAI,OAAO,CAAAA,MAAKA,EAAE,WAAW,YAAY;AAAA,IACzE;AAAA,IAED,cAAc;AACV,aAAO,KAAK,qBAAqB,OAAO,KAAK,UAAU,MAAM,KAAK,gBAAgB,IAAI;AAAA,IACzF;AAAA,IAED,iBAAiB;;AACb,YAAMmV,MAASja,IAAA,KAAK,gBAAL,gBAAAA,EAAkB,SAAM+E,IAAA,KAAK,gBAAL,gBAAAA,EAAkB;AACzD,cAAQ,KAAK,gBAAgB,IAAI,OAAO,CAAA8U,MAAOA,EAAI,cAAcI,CAAM;AAAA,IAC3E;AAAA,EACH;AAAA,EAED,SAAS;AAAA,IACL,aAAaC,GAAS;AAClB,WAAK,YAAYA;AAAA,IACpB;AAAA,IAED,WAAW/E,GAAY;AACnB,aAAKA,IACQ,IAAI,KAAKA,CAAU,EACpB,uBAFY;AAAA,IAG3B;AAAA,IAED,eAAe;;AACX,YAAMgF,IAAU,WAAW,KAAK,WAAW,SAAOna,IAAA,KAAK,UAAU,eAAf,gBAAAA,EAA2B,QAAO,CAAC;AACrF,aAAQ,KAAK,WAAWma,IAAW;AAAA,IACtC;AAAA,IAED,YAAYhT,GAAO;AACf,aAAO,OAAOA,KAAU,WAAWA,EAAM,QAAQ,CAAC,KAAK,WAAWA,CAAK,KAAK,GAAG,QAAQ,CAAC;AAAA,IAC3F;AAAA,IAED,qBAAqB0S,GAAK;AACtB,YAAMO,IAAe,KAAK,qBAAqBP,EAAI,MAAM,KAAK;AAC9D,aAAO,CAAC,GAAI,KAAK,qBAAqB,CAAA,GAAK,GAAGO,CAAY;AAAA,IAC7D;AAAA,IAED,UAAU;AACN,WAAK,KAAK,MAAM,KAAK;AAAA,QACjB,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,KAAK;AAAA,QACL,MAAM;AAAA,QACN,MAAM;AAAA,MACV,CAAC;AAAA,IACJ;AAAA,IAED,WAAWjZ,GAAO;AACd,WAAK,KAAK,MAAM,OAAOA,GAAO,CAAC;AAAA,IAClC;AAAA,IAED,UAAUA,GAAO;AACb,WAAK,UAAU,MAAMA,CAAK,EAAE,UAAU,IACtC,KAAK,UAAU,MAAMA,CAAK,EAAE,YAAY,KAAK,UAAU,MAAMA,CAAK,EAAE,aAAa,KAAK,UAAU,MAAMA,CAAK,EAAE;AAAA,IAChH;AAAA,IAED,WAAWA,GAAO;AACd,WAAK,UAAU,MAAMA,CAAK,EAAE,UAAU,IACtC,KAAK,UAAU,MAAMA,CAAK,EAAE,YAAY,KAAK,UAAU,MAAMA,CAAK,EAAE,aAAa,KAAK,UAAU,MAAMA,CAAK,EAAE;AAAA,IAChH;AAAA,IAED,UAAUA,GAAO;AACb,YAAMtB,IAAO,KAAK,UAAU,MAAMsB,CAAK;AACvC,MAAItB,EAAK,cAAcA,EAAK,QAExB,KAAK,mBAAmBsB,GACxB,KAAK,yBAAyB,OAG9BtB,EAAK,YAAYA,EAAK,WACtBA,EAAK,UAAU;AAAA,IAEtB;AAAA,IAED,qBAAqB;AACjB,UAAI,CAAC,KAAK,kBAAkB,QAAQ;AAChC,cAAM,sDAAsD;AAC5D;AAAA,MACJ;AAEA,YAAMA,IAAO,KAAK,UAAU,MAAM,KAAK,gBAAgB;AACvD,MAAAA,EAAK,YAAYA,EAAK,WACtBA,EAAK,OAAOA,EAAK,WACjBA,EAAK,gBAAgB,KAAK,kBAAkB,KAAI,GAChDA,EAAK,UAAU,IAEf,KAAK,wBAAuB;AAAA,IAC/B;AAAA,IAED,0BAA0B;AACtB,WAAK,yBAAyB,IAC9B,KAAK,mBAAmB,MACxB,KAAK,oBAAoB;AAAA,IAC5B;AAAA;AAAA,IAGD,0BAA0B;AACtB,UAAI,KAAK,KAAK,MAAM,WAAW,GAAG;AAC9B,cAAM,kDAAkD;AACxD;AAAA,MACJ;AAEA,WAAK,eAAe;AACpB,YAAMwa,IAAc,KAAK,gBAAgB,cAAc;AACvD,WAAK,MAAM,sBAAsBA,CAAW,GAE5C,WAAW,MAAM;AACb,aAAK,UAAS,GACd,KAAK,eAAe;AAAA,MACvB,GAAE,GAAI;AAAA,IACV;AAAA,IAED,yBAAyBR,GAAK;AAC1B,UAAI,CAAC,KAAK,gBAAgB,KAAK,aAAa,KAAK,MAAM,IAAI;AACvD,cAAM,4CAA4C;AAClD;AAAA,MACJ;AACA,WAAK,MAAM,wBAAwB,EAAE,KAAAA,GAAK,UAAU,KAAK,aAAW,CAAG,GACvE,KAAK,eAAe;AAAA,IACvB;AAAA,IAED,yBAAyBS,GAAI;AACzB,WAAK,MAAM,uBAAuBA,CAAE;AAAA,IACvC;AAAA,IAED,yBAAyBA,GAAI;AACzB,WAAK,MAAM,uBAAuBA,CAAE;AAAA,IACvC;AAAA,IAED,sBAAsBA,GAAI;AACtB,WAAK,MAAM,oBAAoBA,CAAE;AAAA,IACpC;AAAA,IAED,eAAeA,GAAI;AACf,WAAK,MAAM,aAAaA,CAAE;AAAA,IAC7B;AAAA,IAED,aAAaA,GAAI;AACb,WAAK,MAAM,WAAWA,CAAE;AAAA,IAC3B;AAAA,IAED,eAAeA,GAAI;AACf,WAAK,MAAM,aAAaA,CAAE;AAAA,IAC7B;AAAA,IAED,qBAAqBA,GAAI;AACrB,WAAK,MAAM,mBAAmBA,CAAE;AAAA,IACnC;AAAA,IAED,gBAAgBpY,GAAQ;;AACpB,aAAO;AAAA,QACH,IAAI,SAAS,KAAK,IAAK;AAAA,QACvB,aAAWlC,IAAA,KAAK,gBAAL,gBAAAA,EAAkB,cAAa;AAAA,QAC1C,YAAY,KAAK,KAAK;AAAA,QACtB,SAAS,KAAK,KAAK;AAAA,QACnB,YAAY,KAAK,KAAK;AAAA,QACtB,eAAe,KAAK,KAAK;AAAA,QACzB,OAAO,KAAK,KAAK,MAAM,IAAI,CAAAH,OAAS,EAAE,GAAGA,EAAK,EAAE;AAAA,QAChD,QAAAqC;AAAA,QACA,gBAAe,oBAAI,KAAM,GAAC,mBAAoB;AAAA,QAC9C,cAAY6C,IAAA,KAAK,gBAAL,gBAAAA,EAAkB,SAAMwV,IAAA,KAAK,gBAAL,gBAAAA,EAAkB;AAAA;IAE7D;AAAA,IAED,YAAY;AACR,WAAK,OAAO;AAAA,QACR,WAAW;AAAA,QACX,YAAY;AAAA,QACZ,SAAS;AAAA,QACT,YAAY;AAAA,QACZ,eAAe;AAAA,QACf,OAAO,CAAC;AAAA,SAGZ,KAAK,QAAO;AAAA,IACf;AAAA;AAAA,IAGD,gBAAgBC,GAAS;AACrB,WAAK,YAAY,EAAE,GAAGA,KACtB,KAAK,UAAS;AACd,eAAS3a,KAAQ,KAAK,UAAU,SAAS,CAAA;AACrC,QAAAA,EAAK,YAAYA,EAAK,QAAQ,GAC9BA,EAAK,YAAYA,EAAK,aAAaA,EAAK,QAAQ,GAChDA,EAAK,WAAWA,EAAK,aAAaA,EAAK,OAAO;AAAA,IAErD;AAAA,IAED,iBAAiB4a,GAAM;AACnB,WAAK,aAAa,EAAE,GAAGA;IAC1B;AAAA,IAED,gBAAgBC,GAAY;AACxB,WAAK,aAAaA;AAAA,IACrB;AAAA,IAED,YAAY;AACR,cAAQ,KAAK,UAAU,SAAS,CAAE,GAAE,IAAI,CAAC7a,GAAMsB,MACpCtB,EAAK,aAAasB,IAAQ,CACpC;AAAA,IACL;AAAA,EACH;AAAA,EAED,UAAU;AAEN,SAAK,QAAO;AAAA,EAChB;AACJ,GA5yBSL,KAAA,EAAA,OAAM,wBAAuB,GAOzBP,KAAA,EAAA,OAAM,WAAU;;EAQuB,OAAM;GAErC6C,KAAA,EAAA,OAAM,YAAW,GACbC,KAAA,EAAA,OAAM,aAAY,mBAIlB5C,KAAA,EAAA,OAAM,aAAY,mBAOlBoB,KAAA,EAAA,OAAM,aAAY,mBASlB0C,KAAA,EAAA,OAAM,aAAY,iBAMtBhB,KAAA,EAAA,OAAM,aAAY,GAMlBC,KAAA,EAAA,OAAM,gBAAe,GACjBiB,KAAA,EAAA,OAAM,eAAc,GAMZyG,KAAA,EAAA,OAAM,aAAY,iCAIlBxH,KAAA,EAAA,OAAM,aAAY,iCAIlBE,KAAA,EAAA,OAAM,aAAY,iCAIlBE,KAAA,EAAA,OAAM,aAAY,iDAMlBE,KAAA,EAAA,OAAM,aAAY,mDAS9BE,KAAA,EAAA,OAAM,iBAAgB;;EASU,OAAM;GAC1CyM,KAAA,EAAA,OAAM,mBAAkB,GAEhB9L,KAAA,EAAA,OAAM,qBAAoB,GACtBsG,KAAA,EAAA,OAAM,iBAAgB,GAG1BkK,KAAA,EAAA,OAAM,sBAAqB,GAEnBC,KAAA,EAAA,OAAM,eAAc,GACpBC,KAAA,EAAA,OAAM,eAAc;;EAI7B,OAAM;;;EAUsB,OAAM;GACzCnK,KAAA,EAAA,OAAM,mBAAkB,GAEhBC,KAAA,EAAA,OAAM,qBAAoB,GACtBC,KAAA,EAAA,OAAM,iBAAgB,GAG1BmK,KAAA,EAAA,OAAM,sBAAqB,GAEnBlK,KAAA,EAAA,OAAM,eAAc,GACpBC,KAAA,EAAA,OAAM,eAAc;;EAGW,OAAM;;;EAaxB,OAAM;;EAQnC,OAAM;AAAA,EAAmB,IAAG;GAEpBK,KAAA,EAAA,OAAM,qBAAoB,GACtBiF,KAAA,EAAA,OAAM,iBAAgB,GAE1BhF,KAAA,EAAA,OAAM,sBAAqB,GAEnBsK,KAAA,EAAA,OAAM,eAAc,GACpBrF,KAAA,EAAA,OAAM,eAAc,GAI5BC,KAAA,EAAA,OAAM,cAAa,GAEfC,KAAA,EAAA,OAAM,eAAc,GAIxBoF,KAAA,EAAA,OAAM,cAAa,GAEhBtK,KAAA,EAAA,OAAM,YAAW;;EAgBE,OAAM;;EAOpC,OAAM;AAAA,EAAmB,IAAG;GAEpBoF,KAAA,EAAA,OAAM,qBAAoB,GACtBjF,KAAA,EAAA,OAAM,iBAAgB,GAE1BC,KAAA,EAAA,OAAM,sBAAqB,GAEnBC,KAAA,EAAA,OAAM,eAAc,GACpBC,KAAA,EAAA,OAAM,eAAc,GAI5BuJ,KAAA,EAAA,OAAM,cAAa,GAEfxE,KAAA,EAAA,OAAM,eAAc,GAIxB9E,KAAA,EAAA,OAAM,cAAa,GAEhBuJ,KAAA,EAAA,OAAM,YAAW;;EAYC,OAAM;;EAOnC,OAAM;AAAA,EAAmB,IAAG;GAEpBrJ,KAAA,EAAA,OAAM,qBAAoB,GACtBC,KAAA,EAAA,OAAM,iBAAgB,GAE1BC,KAAA,EAAA,OAAM,sBAAqB,GAEnBoJ,KAAA,EAAA,OAAM,eAAc,GACpBnJ,KAAA,EAAA,OAAM,eAAc,GAI5B4E,KAAA,EAAA,OAAM,cAAa,GAEf3E,KAAA,EAAA,OAAM,eAAc,GAIxBC,KAAA,EAAA,OAAM,cAAa,GAEhBC,KAAA,EAAA,OAAM,YAAW;;EAaN,OAAM;;EAC5B,OAAM;AAAA,EAAa,IAAG;GAClBiJ,KAAA,EAAA,OAAM,YAAW,GACbvE,KAAA,EAAA,OAAM,eAAc,GAEhBvE,KAAA,EAAA,OAAM,WAAU,GAEXC,KAAA,EAAA,OAAM,aAAY,GAEvBC,KAAA,EAAA,OAAM,WAAU,GAEXC,KAAA,EAAA,OAAM,aAAY,GAEvB4I,KAAA,EAAA,OAAM,WAAU,GAEXvE,KAAA,EAAA,OAAM,aAAY,GAEvBwE,KAAA,EAAA,OAAM,WAAU,GAEXvE,KAAA,EAAA,OAAM,aAAY,GAEvBrE,KAAA,EAAA,OAAM,WAAU,GAEXC,KAAA,EAAA,OAAM,aAAY,GAI3BC,KAAA,EAAA,OAAM,eAAc,GAEhBC,KAAA,EAAA,OAAM,WAAU,GAEXC,KAAA,EAAA,OAAM,aAAY,GAEvBkE,KAAA,EAAA,OAAM,WAAU,GAEXjE,KAAA,EAAA,OAAM,aAAY,GAEvBC,KAAA,EAAA,OAAM,WAAU,GAEXC,KAAA,EAAA,OAAM,aAAY,GAEvBC,KAAA,EAAA,OAAM,WAAU,GAEX+D,KAAA,EAAA,OAAM,aAAY,GAEvB9D,KAAA,EAAA,OAAM,WAAU,GAEX+D,KAAA,EAAA,OAAM,aAAY,GAK/BC,KAAA,EAAA,OAAM,gBAAe,GAEf/D,KAAA,EAAA,OAAM,cAAa;;EAmBsD,OAAM;;;EAoBnD,OAAM;GAMpCK,KAAA,EAAA,OAAM,SAAQ,GACVC,KAAA,EAAA,OAAM,YAAW,GAIjBsM,KAAA,EAAA,OAAM,YAAW,GAIjBrM,KAAA,EAAA,OAAM,YAAW,GAIjBC,KAAA,EAAA,OAAM,wBAAuB,GASrCC,KAAA,EAAA,OAAM,gBAAe,GAEnBC,KAAA,EAAA,OAAA,EAAyC,iBAAA,QAAA,OAAA,OAAA,EAAA,GAOvCmM,KAAA,EAAA,OAAM,gBAAe;;EAaD,OAAM;;;;AAzZ/C,SAAA/Z,EAAA,GAAAH,EA2cM,OA3cNI,IA2cM;AAAA,sBA1cFC,EAGM,OAAA,EAHD,OAAM,YAAQ;AAAA,MACfA,EAAqC,YAAjC,8BAA4B;AAAA,MAChCA,EAAsD,WAAnD,iDAA+C;AAAA;IAItDA,EAKM,OALNR,IAKM;AAAA,cAJFG,EAGSO,GAAA,MAAAC,EAHaP,EAAW,aAAA,CAAlBmZ,YAAfpZ,EAGS,UAAA;AAAA,QAH2B,KAAKoZ,EAAI;AAAA,QAAO,OAA6BxY,EAAA,CAAA,WAAA,EAAA,QAAA8C,EAAA,cAAc0V,EAAI,KAAI,CAAA,CAAA;AAAA,QAClG,SAAO,CAAA1Y,MAAAT,EAAA,aAAamZ,EAAI,IAAI;AAAA,MAC1B,GAAA9Y,EAAA8Y,EAAI,KAAK,GAAA,IAAAtZ,EAAA;;IAKT4D,EAAS,cAAA,qBAApBvD,KAAAH,EA2EM,OA3ENyC,IA2EM;AAAA,MA1EFpC,EAyEO,QAAA;AAAA,QAzEA,sCAAgBJ,EAAuB,2BAAAA,EAAA,wBAAA,GAAA2D,CAAA,GAAA,CAAA,SAAA,CAAA;AAAA;QAC1CvD,EAyBM,OAzBNqC,IAyBM;AAAA,UAxBFrC,EAGM,OAHNsC,IAGM;AAAA,YAFFgB,EAAA,EAAA,MAAAA,EAAA,EAAA,IAAAtD,EAA+B,eAAxB,oBAAgB,EAAA;AAAA,YACvBA,EAA4F,SAAA;AAAA,cAArF,MAAK;AAAA,cAAQ,QAAOf,IAAAY,EAAW,gBAAX,gBAAAZ,EAAa;AAAA,cAAW,UAAA;AAAA,cAAS,UAAA;AAAA,cAAS,OAAM;AAAA;;UAE/Ee,EAMM,OANNN,IAMM;AAAA,YALF4D,EAAA,EAAA,MAAAA,EAAA,EAAA,IAAAtD,EAA2B,eAApB,gBAAY,EAAA;AAAA,cACnBA,EAGS,UAAA;AAAA,cAHQ,uBAAAsD,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAAjD,MAAAgD,EAAA,KAAK,aAAUhD;AAAA,cAAE,UAAA;AAAA;cAC9BiD,EAAA,EAAA,MAAAA,EAAA,EAAA,IAAAtD,EAA2C,UAAnC,EAAA,OAAM,GAAE,GAAC,qBAAiB,EAAA;AAAA,sBAClCL,EAAiFO,GAAA,MAAAC,EAA1DkD,EAAW,aAAA,CAAnByW,YAAfna,EAAiF,UAAA;AAAA,gBAA5C,KAAKma;AAAA,gBAAO,OAAOA;AAAA,mBAASA,CAAI,GAAA,GAAAlZ,EAAA;;cAFxD,CAAAwQ,GAAA/N,EAAA,KAAK,UAAU;AAAA;;UAKpCrD,EAQM,OARNc,IAQM;AAAA,YAPFwC,EAAA,EAAA,MAAAA,EAAA,EAAA,IAAAtD,EAAuB,eAAhB,YAAQ,EAAA;AAAA,cACfA,EAKS,UAAA;AAAA,cALQ,uBAAAsD,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAAjD,MAAAgD,EAAA,KAAK,UAAOhD;AAAA,cAAE,OAAM;AAAA,cAAe,UAAA;AAAA;gCAChDL,EAAkD,UAAA;AAAA,gBAA1C,UAAA;AAAA,gBAAS,OAAM;AAAA,iBAAG,mBAAe,EAAA;AAAA,sBACzCL,EAESO,GAAA,MAAAC,EAFWN,EAAO,SAAA,CAAZmW,YAAfrW,EAES,UAAA;AAAA,gBAFqB,KAAKqW,EAAE;AAAA,gBAAK,OAAOA,EAAE;AAAA,cAC5C,GAAA/V,EAAA+V,EAAE,IAAI,GAAA,GAAAjV,EAAA;;cAHA,CAAAqQ,GAAA/N,EAAA,KAAK,OAAO;AAAA;;UAOjCrD,EAGM,OAHNwD,IAGM;AAAA,YAFFF,EAAA,EAAA,MAAAA,EAAA,EAAA,IAAAtD,EAA4B,eAArB,iBAAa,EAAA;AAAA,cACpBA,EAAqE,SAAA;AAAA,cAA9D,MAAK;AAAA,cAAgB,uBAAAsD,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAAjD,MAAAgD,EAAA,KAAK,aAAUhD;AAAA,cAAG,KAAKT,EAAK;AAAA,cAAE,UAAA;AAAA;cAA9B,CAAA0R,GAAAjO,EAAA,KAAK,UAAU;AAAA;;;QAInDrD,EAIM,OAJNwC,IAIM;AAAA,UAHFc,EAAA,EAAA,MAAAA,EAAA,EAAA,IAAAtD,EAAuC,eAAhC,4BAAwB,EAAA;AAAA,YAC/BA,EACwB,YAAA;AAAA,YADL,uBAAAsD,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAAjD,MAAAgD,EAAA,KAAK,gBAAahD;AAAA,YAAE,aAAY;AAAA,YAC/C,UAAA;AAAA;YADe,CAAAiR,GAAAjO,EAAA,KAAK,aAAa;AAAA;;QAIzCrD,EAgCM,OAhCNyC,IAgCM;AAAA,UA/BFzC,EAGM,OAHN0D,IAGM;AAAA,YAFFJ,EAAA,EAAA,MAAAA,EAAA,EAAA,IAAAtD,EAAwB,YAApB,mBAAe,EAAA;AAAA,YACnBA,EAA+E,UAAA;AAAA,cAAvE,MAAK;AAAA,cAAS,OAAM;AAAA,cAAgB,mCAAOJ,EAAO,WAAAA,EAAA,QAAA,GAAA2D,CAAA;AAAA,eAAE,YAAU;AAAA;UAE1EvD,EA0BM,OAAA,MAAA;AAAA,aAzBFF,EAAA,EAAA,GAAAH,EAwBMO,WAxBuBmD,EAAI,KAAC,OAArB,CAAAvE,GAAMsB,YAAnBT,EAwBM,OAAA;AAAA,cAxBoC,KAAKS;AAAA,cAAO,OAAM;AAAA;cACxDJ,EAGM,OAHNmK,IAGM;AAAA,gBAFF7G,EAAA,EAAA,MAAAA,EAAA,EAAA,IAAAtD,EAA0B,eAAnB,eAAW,EAAA;AAAA,kBAClBA,EAAgD,SAAA;AAAA,kBAAzC,MAAK;AAAA,kBAAgB,uBAAA,CAAAK,MAAAvB,EAAK,KAAEuB;AAAA,kBAAE,UAAA;AAAA;kBAAT,CAAAiR,GAAAxS,EAAK,EAAE;AAAA;;cAEvCkB,EAGM,OAHN2C,IAGM;AAAA,gBAFFW,EAAA,EAAA,MAAAA,EAAA,EAAA,IAAAtD,EAAiC,eAA1B,sBAAkB,EAAA;AAAA,kBACzBA,EAAkD,SAAA;AAAA,kBAA3C,MAAK;AAAA,kBAAgB,uBAAA,CAAAK,MAAAvB,EAAK,OAAIuB;AAAA,kBAAE,UAAA;AAAA;kBAAX,CAAAiR,GAAAxS,EAAK,IAAI;AAAA;;cAEzCkB,EAGM,OAHN6C,IAGM;AAAA,gBAFFS,EAAA,EAAA,MAAAA,EAAA,EAAA,IAAAtD,EAAyB,eAAlB,cAAU,EAAA;AAAA,kBACjBA,EAAkE,SAAA;AAAA,kBAA3D,MAAK;AAAA,kBAAyB,uBAAA,CAAAK,MAAAvB,EAAK,MAAGuB;AAAA,kBAAE,KAAI;AAAA,kBAAI,UAAA;AAAA;;;oBAAlBvB,EAAK;AAAA;oBAAb,EAAA,QAAR,GAAyB;AAAA;;;cAElDkB,EAKM,OALN+C,IAKM;AAAA,gBAJFO,EAAA,EAAA,MAAAA,EAAA,EAAA,IAAAtD,EAAqB,eAAd,UAAM,EAAA;AAAA,kBACbA,EAES,UAAA;AAAA,kBAFQ,uBAAA,CAAAK,MAAAvB,EAAK,OAAIuB;AAAA,kBAAE,UAAA;AAAA;0BACxBV,EAA2EO,GAAA,MAAAC,EAApDkD,EAAK,OAAA,CAAb0W,YAAfpa,EAA2E,UAAA;AAAA,oBAA5C,KAAKoa;AAAA,oBAAO,OAAOA;AAAA,uBAASA,CAAI,GAAA,GAAApW,EAAA;;kBADlD,CAAAyN,GAAAtS,EAAK,IAAI;AAAA;;cAI9BkB,EAGM,OAHNiD,IAGM;AAAA,gBAFFK,EAAA,EAAA,MAAAA,EAAA,EAAA,IAAAtD,EAA+B,eAAxB,oBAAgB,EAAA;AAAA,kBACvBA,EAAkG,SAAA;AAAA,kBAA3F,MAAK;AAAA,kBAAyB,uBAAA,CAAAK,MAAAvB,EAAK,OAAIuB;AAAA,kBAAE,MAAK;AAAA,kBAAO,KAAI;AAAA,kBAAI,aAAY;AAAA,kBAAO,UAAA;AAAA;;;oBAAlDvB,EAAK;AAAA;oBAAb,EAAA,QAAR,GAA0B;AAAA;;;cAEnDkB,EAAwF,UAAA;AAAA,gBAAhF,MAAK;AAAA,gBAAS,OAAM;AAAA,gBAAmB,SAAK,CAAAK,MAAET,EAAU,WAACQ,CAAK;AAAA,iBAAG,UAAM,GAAAwD,EAAA;AAAA;;;QAK3F5D,EAIM,OAJNmD,IAIM;AAAA,UAHFnD,EAES,UAAA;AAAA,YAFD,MAAK;AAAA,YAAS,OAAM;AAAA,YAAuB,UAAUqD,EAAY;AAAA,eAClEA,EAAY,eAAA,kBAAA,oBAAA,GAAA,GAAAQ,EAAA;AAAA;;;IAOpBR,EAAS,cAAA,sBAApBvD,KAAAH,EAqBM,OArBNyD,IAqBM;AAAA,MApBFpD,EAmBM,OAnBN4P,IAmBM;AAAA,gBAlBFjQ,EAiBMO,GAAA,MAAAC,EAjBaN,EAAY,cAAA,CAAnBiZ,YAAZnZ,EAiBM,OAAA;AAAA,UAjB4B,KAAKmZ,EAAI;AAAA,UAAI,OAAM;AAAA;UACjD9Y,EAGM,OAHN8D,IAGM;AAAA,YAFF9D,EAA8C,OAA9CoK,IAA+BnK,EAAA6Y,EAAI,EAAE,GAAA,CAAA;AAAA,YACrC9Y,EAA6E,OAAA;AAAA,cAAvE,OAAKO,EAAA,CAAA,gBAAA,UAA6BuY,EAAI,MAAM,EAAA,CAAA;AAAA,YAAQ,GAAA7Y,EAAA6Y,EAAI,MAAM,GAAA,CAAA;AAAA;UAExE9Y,EAKM,OALNsU,IAKM;AAAA,aAJFxU,EAAA,EAAA,GAAAH,EAGMO,GAHmC,MAAAC,EAAAP,EAAA,qBAAqBkZ,CAAG,IAAjCpF,YAAhC/T,EAGM,OAAA;AAAA,cAHD,OAAM;AAAA,cAA0D,KAAK+T,EAAM;AAAA;cAC5E1T,EAAiD,OAAjDuU,IAA6BtU,EAAAyT,EAAM,KAAK,GAAA,CAAA;AAAA,cACxC1T,EAAsD,OAAtDwU,IAAsDvU,EAAzByT,EAAM,MAAMoF,CAAG,CAAA,GAAA,CAAA;AAAA;;UAGzCA,EAAI,WAA2B,gBAAAA,EAAI,WAAM,eAApDhZ,KAAAH,EAKM,OALN8U,IAKM;AAAA,YAHFzU,EAES,UAAA;AAAA,cAFA,SAAO,CAAAK,MAAAT,EAAA,aAAakZ,EAAI,EAAE;AAAA,cAAG,OAAM;AAAA,eAAgC,cAE5E,GAAAjJ,EAAA;AAAA;;;;IAOLxM,EAAS,cAAA,qBAApBvD,KAAAH,EAuBM,OAvBNmQ,IAuBM;AAAA,MAtBF9P,EAqBM,OArBNqK,IAqBM;AAAA,gBApBF1K,EAmBMO,GAAA,MAAAC,EAnBaP,EAAc,gBAAA,CAArBkZ,YAAZnZ,EAmBM,OAAA;AAAA,UAnB8B,KAAKmZ,EAAI;AAAA,UAAI,OAAM;AAAA;UACnD9Y,EAGM,OAHNsK,IAGM;AAAA,YAFFtK,EAA8C,OAA9CuK,IAA+BtK,EAAA6Y,EAAI,EAAE,GAAA,CAAA;AAAA,YACrC9Y,EAA6E,OAAA;AAAA,cAAvE,OAAKO,EAAA,CAAA,gBAAA,UAA6BuY,EAAI,MAAM,EAAA,CAAA;AAAA,YAAQ,GAAA7Y,EAAA6Y,EAAI,MAAM,GAAA,CAAA;AAAA;UAExE9Y,EAKM,OALN0U,IAKM;AAAA,aAJF5U,EAAA,EAAA,GAAAH,EAGMO,GAHmC,MAAAC,EAAAP,EAAA,qBAAqBkZ,CAAG,IAAjCpF,YAAhC/T,EAGM,OAAA;AAAA,cAHD,OAAM;AAAA,cAA0D,KAAK+T,EAAM;AAAA;cAC5E1T,EAAiD,OAAjDwK,IAA6BvK,EAAAyT,EAAM,KAAK,GAAA,CAAA;AAAA,cACxC1T,EAAsD,OAAtDyK,IAAsDxK,EAAzByT,EAAM,MAAMoF,CAAG,CAAA,GAAA,CAAA;AAAA;;UAGzCA,EAAI,WAAM,oBAArBhZ,KAAAH,EAOM,OAPN+K,IAOM;AAAA,YANFpH,EAAA,EAAA,MAAAA,EAAA,EAAA,IAAAtD,EAAiD,SAA1C,EAAA,OAAM,eAAc,GAAC,iBAAa,EAAA;AAAA,cACzCA,EACiD,YAAA;AAAA,4DAD9BqD,EAAY,eAAAhD;AAAA,cAAE,OAAM;AAAA,cACnC,aAAY;AAAA;kBADGgD,EAAY,YAAA;AAAA;YAE/BrD,EAES,UAAA;AAAA,cAFA,SAAK,CAAAK,MAAET,EAAwB,yBAACkZ,CAAG;AAAA,cAAG,OAAM;AAAA,eAAgC,iBAErF,GAAAnO,EAAA;AAAA;;;;IAOLtH,EAAS,cAAA,eAApBvD,KAAAH,EAyCM,OAzCNiL,IAyCM;AAAA,wBAxCF5K,EAMM,OAAA,EAND,OAAA,EAA4B,iBAAA,OAAA,EAAA,GAAA;AAAA,QAC7BA,EAAqF,MAAjF,EAAA,OAAA,EAAA,OAAA,WAAA,iBAAA,OAAA,KAA6C,iCAA+B;AAAA,QAChFA,EAGM,OAAA,EAHD,OAAA,EAAgG,YAAA,WAAA,SAAA,QAAA,iBAAA,QAAA,eAAA,oBAAA,EAAA,GAAA;AAAA,UACjGA,EAAsB,gBAAd,OAAK;AAAA,YAAS,0FAE1B;AAAA;;MAEJA,EAgCM,OAhCN6K,IAgCM;AAAA,gBA/BFlL,EA8BMO,GAAA,MAAAC,EA9BaP,EAAkB,oBAAA,CAAzBkZ,YAAZnZ,EA8BM,OAAA;AAAA,UA9BkC,KAAKmZ,EAAI;AAAA,UAAI,OAAM;AAAA;UACvD9Y,EAEM,OAFN8K,IAEM;AAAA,YADF9K,EAA8C,OAA9C+P,IAA+B9P,EAAA6Y,EAAI,EAAE,GAAA,CAAA;AAAA;UAEzC9Y,EAKM,OALN+K,IAKM;AAAA,oBAJFpL,EAGMO,GAAA,MAAAC,EAHmCkD,EAAiB,mBAAA,CAA1BqQ,YAAhC/T,EAGM,OAAA;AAAA,cAHD,OAAM;AAAA,cAAkD,KAAK+T,EAAM;AAAA;cACpE1T,EAAiD,OAAjDqV,IAA6BpV,EAAAyT,EAAM,KAAK,GAAA,CAAA;AAAA,cACxC1T,EAAsD,OAAtDgQ,IAAsD/P,EAAzByT,EAAM,MAAMoF,CAAG,CAAA,GAAA,CAAA;AAAA;;UAIpD9Y,EAGM,OAHNiQ,IAGM;AAAA,YAFF3M,EAAA,EAAA,MAAAA,EAAA,EAAA,IAAAtD,EAA6C,OAAxC,EAAA,OAAM,eAAc,GAAC,iBAAa,EAAA;AAAA,YACvCA,EAAgE,OAAhEkQ,IAA6BjQ,EAAA6Y,EAAI,iBAAa,KAAA,GAAA,CAAA;AAAA;UAIlD9Y,EAOM,OAPNsV,IAOM;AAAA,YANFhS,EAAA,EAAA,MAAAA,EAAA,EAAA,IAAAtD,EAAqC,OAAhC,EAAA,OAAM,eAAc,GAAC,SAAK,EAAA;AAAA,YAC/BA,EAIK,MAJLgL,IAIK;AAAA,eAHDlL,EAAA,EAAA,GAAAH,EAEKO,WAFuB4Y,EAAI,OAApB,CAAAha,GAAMsB,OAAlBN,EAAA,GAAAH,EAEK,MAFmC,EAAA,KAAKS,EAAK,GAC3CH,EAAAnB,EAAK,IAAI,IAAG,QAAMmB,EAAAnB,EAAK,GAAG,IAAG,MAAImB,EAAAnB,EAAK,IAAI,IAAG,SAAOmB,EAAAnB,EAAK,KAAK,cAAa,UAClF,CAAA;;;UAGRkB,EAAqG,UAAA;AAAA,YAA7F,MAAK;AAAA,YAAS,OAAM;AAAA,YAAgB,SAAO,CAAAK,MAAAT,EAAA,yBAAyBkZ,EAAI,EAAE;AAAA,aAAG,WAAO,GAAA7N,EAAA;AAAA,UAC5FjL,EAC8D,UAAA;AAAA,YADtD,MAAK;AAAA,YAAS,OAAM;AAAA,YACvB,SAAO,CAAAK,MAAAT,EAAA,yBAAyBkZ,EAAI,EAAE;AAAA,aAAG,WAAO,GAAA5N,EAAA;AAAA,UACrDlL,EACiB,UAAA;AAAA,YADT,MAAK;AAAA,YAAS,OAAM;AAAA,YAAyB,SAAO,CAAAK,MAAAT,EAAA,sBAAsBkZ,EAAI,EAAE;AAAA,aAAG,gBACnF,GAAAnE,EAAA;AAAA;;;IAMTtR,EAAS,cAAA,gBAApBvD,KAAAH,EAoCM,OApCNiV,IAoCM;AAAA,wBAnCF5U,EAKM,OAAA,EALD,OAAA,EAA4B,iBAAA,OAAA,EAAA,GAAA;AAAA,QAC7BA,EAAqF,MAAjF,EAAA,OAAA,EAAA,OAAA,WAAA,iBAAA,OAAA,KAA6C,iCAA+B;AAAA,QAChFA,EAEM,OAAA,EAFD,OAAA,EAAgG,YAAA,WAAA,SAAA,QAAA,iBAAA,QAAA,eAAA,oBAAA,EAAA,GAAA;AAAA,UACjGA,EAAsB,gBAAd,OAAK;AAAA,YAAS,sEAC1B;AAAA;;MAEJA,EA4BM,OA5BNmQ,IA4BM;AAAA,gBA3BFxQ,EA0BMO,GAAA,MAAAC,EA1BaP,EAAc,gBAAA,CAArBkZ,YAAZnZ,EA0BM,OAAA;AAAA,UA1B8B,KAAKmZ,EAAI;AAAA,UAAI,OAAM;AAAA;UACnD9Y,EAEM,OAFNoQ,IAEM;AAAA,YADFpQ,EAA8C,OAA9CmL,IAA+BlL,EAAA6Y,EAAI,EAAE,GAAA,CAAA;AAAA;UAEzC9Y,EAKM,OALNoL,IAKM;AAAA,oBAJFzL,EAGMO,GAAA,MAAAC,EAHmCkD,EAAiB,mBAAA,CAA1BqQ,YAAhC/T,EAGM,OAAA;AAAA,cAHD,OAAM;AAAA,cAAkD,KAAK+T,EAAM;AAAA;cACpE1T,EAAiD,OAAjDqL,IAA6BpL,EAAAyT,EAAM,KAAK,GAAA,CAAA;AAAA,cACxC1T,EAAsD,OAAtDsL,IAAsDrL,EAAzByT,EAAM,MAAMoF,CAAG,CAAA,GAAA,CAAA;AAAA;;UAIpD9Y,EAGM,OAHN6U,IAGM;AAAA,YAFFvR,EAAA,EAAA,MAAAA,EAAA,EAAA,IAAAtD,EAA6C,OAAxC,EAAA,OAAM,eAAc,GAAC,iBAAa,EAAA;AAAA,YACvCA,EAAgE,OAAhEqQ,IAA6BpQ,EAAA6Y,EAAI,iBAAa,KAAA,GAAA,CAAA;AAAA;UAIlD9Y,EAOM,OAPNuL,IAOM;AAAA,YANFjI,EAAA,EAAA,MAAAA,EAAA,EAAA,IAAAtD,EAAqC,OAAhC,EAAA,OAAM,eAAc,GAAC,SAAK,EAAA;AAAA,YAC/BA,EAIK,MAJL8U,IAIK;AAAA,eAHDhV,EAAA,EAAA,GAAAH,EAEKO,WAFuB4Y,EAAI,OAApB,CAAAha,GAAMsB,OAAlBN,EAAA,GAAAH,EAEK,MAFmC,EAAA,KAAKS,EAAK,GAC3CH,EAAAnB,EAAK,IAAI,IAAG,QAAMmB,EAAAnB,EAAK,GAAG,IAAG,MAAImB,EAAAnB,EAAK,IAAI,IAAG,SAAOmB,EAAAnB,EAAK,KAAK,cAAa,UAClF,CAAA;;;UAGRkB,EAA6F,UAAA;AAAA,YAArF,MAAK;AAAA,YAAS,OAAM;AAAA,YAAgB,SAAO,CAAAK,MAAAT,EAAA,eAAekZ,EAAI,EAAE;AAAA,aAAG,aAAS,GAAAxI,EAAA;AAAA;;;IAMrFjN,EAAS,cAAA,eAApBvD,KAAAH,EAqCM,OArCN4Q,IAqCM;AAAA,wBApCFvQ,EAKM,OAAA,EALD,OAAA,EAA4B,iBAAA,OAAA,EAAA,GAAA;AAAA,QAC7BA,EAAqF,MAAjF,EAAA,OAAA,EAAA,OAAA,WAAA,iBAAA,OAAA,KAA6C,iCAA+B;AAAA,QAChFA,EAEM,OAAA,EAFD,OAAA,EAAgG,YAAA,WAAA,SAAA,QAAA,iBAAA,QAAA,eAAA,oBAAA,EAAA,GAAA;AAAA,UACjGA,EAAsB,gBAAd,OAAK;AAAA,YAAS,qEAC1B;AAAA;;MAEJA,EA6BM,OA7BNwL,IA6BM;AAAA,gBA5BF7L,EA2BMO,GAAA,MAAAC,EA3BaP,EAAgB,kBAAA,CAAvBkZ,YAAZnZ,EA2BM,OAAA;AAAA,UA3BgC,KAAKmZ,EAAI;AAAA,UAAI,OAAM;AAAA;UACrD9Y,EAEM,OAFNyL,IAEM;AAAA,YADFzL,EAA8C,OAA9C0L,IAA+BzL,EAAA6Y,EAAI,EAAE,GAAA,CAAA;AAAA;UAEzC9Y,EAKM,OALN2L,IAKM;AAAA,oBAJFhM,EAGMO,GAAA,MAAAC,EAHmCkD,EAAiB,mBAAA,CAA1BqQ,YAAhC/T,EAGM,OAAA;AAAA,cAHD,OAAM;AAAA,cAAkD,KAAK+T,EAAM;AAAA;cACpE1T,EAAiD,OAAjD+U,IAA6B9U,EAAAyT,EAAM,KAAK,GAAA,CAAA;AAAA,cACxC1T,EAAsD,OAAtD4L,IAAsD3L,EAAzByT,EAAM,MAAMoF,CAAG,CAAA,GAAA,CAAA;AAAA;;UAIpD9Y,EAGM,OAHNwQ,IAGM;AAAA,YAFFlN,EAAA,EAAA,MAAAA,EAAA,EAAA,IAAAtD,EAA6C,OAAxC,EAAA,OAAM,eAAc,GAAC,iBAAa,EAAA;AAAA,YACvCA,EAAgE,OAAhE6L,IAA6B5L,EAAA6Y,EAAI,iBAAa,KAAA,GAAA,CAAA;AAAA;UAIlD9Y,EAOM,OAPN8L,IAOM;AAAA,YANFxI,EAAA,EAAA,MAAAA,EAAA,EAAA,IAAAtD,EAAqC,OAAhC,EAAA,OAAM,eAAc,GAAC,SAAK,EAAA;AAAA,YAC/BA,EAIK,MAJL+L,IAIK;AAAA,eAHDjM,EAAA,EAAA,GAAAH,EAEKO,WAFuB4Y,EAAI,OAApB,CAAAha,GAAMsB,OAAlBN,EAAA,GAAAH,EAEK,MAFmC,EAAA,KAAKS,EAAK,GAC3CH,EAAAnB,EAAK,IAAI,IAAG,QAAMmB,EAAAnB,EAAK,GAAG,IAAG,MAAImB,EAAAnB,EAAK,IAAI,IAAG,SAAOmB,EAAAnB,EAAK,KAAK,cAAa,UAClF,CAAA;;;UAGRkB,EACqB,UAAA;AAAA,YADb,MAAK;AAAA,YAAS,OAAM;AAAA,YAAgB,SAAO,CAAAK,MAAAT,EAAA,qBAAqBkZ,EAAI,EAAE;AAAA,aAAG,mBACrE,GAAA9M,EAAA;AAAA;;;IAMb3I,EAAS,cAAA,QAApBvD,KAAAH,EA4IM,OA5INsM,IA4IM;AAAA,MA3IFjM,EAqHM,OArHNuV,IAqHM;AAAA,QApHFvV,EAgDM,OAhDNgV,IAgDM;AAAA,UA/CFhV,EAsBM,OAtBNyQ,IAsBM;AAAA,YArBFnN,EAAA,EAAA,MAAAA,EAAA,EAAA,IAAAtD,EAA2B,YAAvB,sBAAkB,EAAA;AAAA,YACtBA,EAGM,OAHNkM,IAGM;AAAA,cAFF5I,EAAA,EAAA,MAAAA,EAAA,EAAA,IAAAtD,EAAwC,QAAlC,EAAA,OAAM,aAAY,GAAC,YAAQ,EAAA;AAAA,cACjCA,EAAmG,QAAnGmM,IAAmGlM,EAAvEoD,EAAU,WAAC,aAAWW,IAAAX,EAAS,UAAC,eAAV,gBAAAW,EAAsB,YAAO,KAAA,GAAA,CAAA;AAAA;YAEnFhE,EAGM,OAHNoM,IAGM;AAAA,cAFF9I,EAAA,EAAA,MAAAA,EAAA,EAAA,IAAAtD,EAAwC,QAAlC,EAAA,OAAM,aAAY,GAAC,YAAQ,EAAA;AAAA,cACjCA,EAAkG,QAAlGqM,IAAkGpM,EAAtEoD,EAAU,WAAC,aAAWmW,IAAAnW,EAAS,UAAC,eAAV,gBAAAmW,EAAsB,YAAO,KAAA,GAAA,CAAA;AAAA;YAEnFxZ,EAGM,OAHNiV,IAGM;AAAA,cAFF3R,EAAA,EAAA,MAAAA,EAAA,EAAA,IAAAtD,EAAsC,QAAhC,EAAA,OAAM,aAAY,GAAC,UAAM,EAAA;AAAA,cAC/BA,EAA8F,QAA9F0Q,IAA8FzQ,EAAlEoD,EAAU,WAAC,WAAS2W,IAAA3W,EAAS,UAAC,eAAV,gBAAA2W,EAAsB,UAAK,KAAA,GAAA,CAAA;AAAA;YAE/Eha,EAGM,OAHNkV,IAGM;AAAA,cAFF5R,EAAA,EAAA,MAAAA,EAAA,EAAA,IAAAtD,EAAsC,QAAhC,EAAA,OAAM,aAAY,GAAC,UAAM,EAAA;AAAA,cAC/BA,EAA8F,QAA9F2Q,IAA8F1Q,EAAlEoD,EAAU,WAAC,WAAS4W,IAAA5W,EAAS,UAAC,eAAV,gBAAA4W,EAAsB,UAAK,KAAA,GAAA,CAAA;AAAA;YAE/Eja,EAGM,OAHNsM,IAGM;AAAA,cAFFhJ,EAAA,EAAA,MAAAA,EAAA,EAAA,IAAAtD,EAAwC,QAAlC,EAAA,OAAM,aAAY,GAAC,YAAQ,EAAA;AAAA,cACjCA,EAAkG,QAAlGuM,IAAkGtM,EAAtEoD,EAAU,WAAC,aAAW6W,IAAA7W,EAAS,UAAC,eAAV,gBAAA6W,EAAsB,YAAO,KAAA,GAAA,CAAA;AAAA;;UAIvFla,EAsBM,OAtBNwM,IAsBM;AAAA,YArBFlJ,EAAA,EAAA,MAAAA,EAAA,EAAA,IAAAtD,EAA+B,YAA3B,0BAAsB,EAAA;AAAA,YAC1BA,EAGM,OAHNyM,IAGM;AAAA,cAFFnJ,EAAA,EAAA,MAAAA,EAAA,EAAA,IAAAtD,EAA0C,QAApC,EAAA,OAAM,aAAY,GAAC,cAAU,EAAA;AAAA,cACnCA,EAAkD,QAAlD0M,IAA4BzM,EAAAoD,EAAA,UAAU,EAAE,GAAA,CAAA;AAAA;YAE5CrD,EAGM,OAHN4Q,IAGM;AAAA,cAFFtN,EAAA,EAAA,MAAAA,EAAA,EAAA,IAAAtD,EAAqC,QAA/B,EAAA,OAAM,aAAY,GAAC,SAAK,EAAA;AAAA,cAC9BA,EAAiH,QAAjH2M,IAA4B1M,EAAAoD,EAAA,WAAW,YAAU8W,IAAA9W,EAAS,UAAC,eAAV,gBAAA8W,EAAsB,WAAUva,EAAA,+BAAe,KAAI,CAAA,CAAA,GAAA,CAAA;AAAA;YAExGI,EAGM,OAHN4M,IAGM;AAAA,cAFFtJ,EAAA,EAAA,MAAAA,EAAA,EAAA,IAAAtD,EAA6C,QAAvC,EAAA,OAAM,aAAY,GAAC,iBAAa,EAAA;AAAA,cACtCA,EAAwG,QAAxG6M,IAAwG5M,EAA5EoD,EAAU,WAAC,gBAAc+W,IAAA/W,EAAS,UAAC,eAAV,gBAAA+W,EAAsB,eAAU,KAAA,GAAA,CAAA;AAAA;YAEzFpa,EAGM,OAHN8M,IAGM;AAAA,cAFFxJ,EAAA,EAAA,MAAAA,EAAA,EAAA,IAAAtD,EAA2C,QAArC,EAAA,OAAM,aAAY,GAAC,eAAW,EAAA;AAAA,cACpCA,EAAsE,QAAtE6Q,IAAyB,QAAM5Q,EAAAoD,EAAA,UAAU,cAAU,KAAA,GAAA,CAAA;AAAA;YAEvDrD,EAGM,OAHN+M,IAGM;AAAA,cAFFzJ,EAAA,EAAA,MAAAA,EAAA,EAAA,IAAAtD,EAA8C,QAAxC,EAAA,OAAM,aAAY,GAAC,kBAAc,EAAA;AAAA,cACvCA,EAAmE,QAAnE8Q,IAA4B7Q,EAAAoD,EAAA,UAAU,cAAU,KAAA,GAAA,CAAA;AAAA;;;QAK5DrD,EAiEM,OAjEN+Q,IAiEM;AAAA,UAhEFzN,EAAA,EAAA,MAAAA,EAAA,EAAA,IAAAtD,EAA0C,MAAtC,EAAA,OAAM,gBAAe,GAAC,eAAW,EAAA;AAAA,UACrCA,EAoCQ,SApCRgN,IAoCQ;AAAA,YAnCJhN,EASQ,SAAA,MAAA;AAAA,cARJA,EAOK,MAAA,MAAA;AAAA,gBANDsD,EAAA,EAAA,MAAAA,EAAA,EAAA,IAAAtD,EAAe,YAAX,UAAM,EAAA;AAAA,gBACVsD,EAAA,EAAA,MAAAA,EAAA,EAAA,IAAAtD,EAAoB,YAAhB,eAAW,EAAA;AAAA,gBACfsD,EAAA,EAAA,MAAAA,EAAA,EAAA,IAAAtD,EAAiB,YAAb,YAAQ,EAAA;AAAA,gBACZsD,EAAA,EAAA,MAAAA,EAAA,EAAA,IAAAtD,EAAmB,YAAf,cAAU,EAAA;AAAA,gBACdsD,EAAA,EAAA,MAAAA,EAAA,EAAA,IAAAtD,EAAc,YAAV,SAAK,EAAA;AAAA,gBACEqD,EAAU,0BAArBvD,EAAA,GAAAH,EAAmC,UAAZ,SAAO;AAAA;;YAGtCK,EAwBQ,SAAA,MAAA;AAAA,eAvBJF,EAAA,EAAA,GAAAH,EAsBKO,WAtBuBmD,EAAS,UAAC,SAA1B,CAAA,GAAA,CAAAvE,GAAMsB,YAAlBT,EAsBK,MAAA,EAtB+C,KAAKS,KAAK;AAAA,gBAC1DJ,EAA6C,MAAtC,MAAAC,EAAAnB,EAAK,cAAesB,IAAK,CAAA,GAAA,CAAA;AAAA,gBAChCJ,EAAwB,MAAA,MAAAC,EAAjBnB,EAAK,IAAI,GAAA,CAAA;AAAA,gBAChBkB,EAAuB,MAAA,MAAAC,EAAhBnB,EAAK,GAAG,GAAA,CAAA;AAAA,gBACfkB,EAOK,MAAA,MAAA;AAAA,kBANYlB,EAAK,kBAIlBa,EACmF,SAAA;AAAA;oBADrD,uBAAA,CAAAU,MAAAvB,EAAK,YAASuB;AAAA,oBAAE,MAAK;AAAA,oBAAS,MAAK;AAAA,oBAAO,KAAI;AAAA,oBACxE,OAAKE,EAAA,CAAC,eAAyC,EAAA,iBAAAzB,EAAK,SAASA,EAAK,UAAS,CAAA,CAAA;AAAA;;;sBADjDA,EAAK;AAAA;sBAAb,EAAA,QAAR,GAA+B;AAAA;6BAJ7Ca,EAGO,QAAAsN,IAAA;AAAA,sBAHoB,OACtBhN,GAAInB,EAAK,aAAaA,EAAK,QAAI,GAAO,QAAO,CAAA,CAAA,IAAM,KACpD,CAAA;AAAA,oBAAYA,EAAK,SAASA,EAAK,aAAaA,EAAK,kBAAjDa,EAAmG,QAAnGuR,IAA2F,GAAC;;;gBAKpGlR,EAAiF,MAA7E,MAAA,MAAMC,IAAAnB,EAAK,aAAaA,EAAK,QAAc,MAAAA,EAAK,WAAW,QAAO,CAAA,CAAA,GAAA,CAAA;AAAA,gBAC3DuE,EAAU,+BAArB1D,EAQK,MAAAwR,IAAA;AAAA,kBAPcrS,EAAK,gBAGpBa,EAGM,OAAAwN,IAAA;AAAA,oBAFFnN,EAAgE,UAAA;AAAA,sBAAvD,SAAK,CAAAK,MAAET,EAAS,UAACQ,CAAK;AAAA,sBAAG,OAAM;AAAA,uBAAW,QAAI,GAAAgN,EAAA;AAAA,oBACvDpN,EAAqE,UAAA;AAAA,sBAA5D,SAAK,CAAAK,MAAET,EAAU,WAACQ,CAAK;AAAA,sBAAG,OAAM;AAAA,uBAAa,UAAM,GAAAmR,EAAA;AAAA,8BALhE5R,EAES,UAAA;AAAA;oBAFqB,SAAK,CAAAU,MAAET,EAAS,UAACQ,CAAK;AAAA,oBAAG,OAAM;AAAA,qBAAW,gBAExE,GAAAiR,EAAA;AAAA;;;;WAUhBvR,EAAA,EAAA,GAAAH,EAKMO,WALuBmD,EAAS,UAAC,SAA1B,CAAA,GAAA,CAAAvE,GAAMsB,YAAnBT,EAKM,OAAA;AAAA,YAL+C,eAAeS;AAAA;YACrDtB,EAAK,iBAAhBgB,KAAAH,EAGM,OAHN6R,IAGM;AAAA,cAFFxR,EAAwF,UAAA,MAAhF,sCAAoCC,EAAAnB,EAAK,cAAesB,IAAK,CAAA,IAAQ,MAAE,CAAA;AAAA,gBAAS,MAACH,EAAGnB,EAAK,aAAa,GAAA,CAAA;AAAA;;UAKtHkB,EAiBM,OAjBNqN,IAiBM;AAAA,YAhBFrN,EAGM,OAHNsN,IAGM;AAAA,cAFFhK,EAAA,EAAA,MAAAA,EAAA,EAAA,IAAAtD,EAAsB,cAAhB,aAAS,EAAA;AAAA,cACfA,EAAuC,QAAjC,MAAA,MAAIC,EAAAL,EAAA,SAAS,QAAO,CAAA,CAAA,GAAA,CAAA;AAAA;YAE9BI,EAGM,OAHN4Z,IAGM;AAAA,cAFF5Z,EAA2E,QAArE,MAAA,UAAQC,EAAAoD,EAAA,WAAW,SAAOgX,IAAAhX,EAAA,UAAU,eAAV,gBAAAgX,EAAsB,aAAW,OAAG,CAAA;AAAA,cACpEra,EAA6C,QAAvC,MAAA,MAAIC,EAAAL,EAAA,aAAY,EAAG,QAAO,CAAA,CAAA,GAAA,CAAA;AAAA;YAEpCI,EAGM,OAHNuN,IAGM;AAAA,cAFFjK,EAAA,EAAA,MAAAA,EAAA,EAAA,IAAAtD,EAAsB,cAAhB,aAAS,EAAA;AAAA,cACfA,EAAoD,cAA9C,MAACC,EAAGL,cAAYyD,EAAA,WAAW,QAAQ,CAAA,GAAA,CAAA;AAAA;YAE7CrD,EAGM,OAHNwN,IAGM;AAAA,cAFFlK,EAAA,EAAA,MAAAA,EAAA,EAAA,IAAAtD,EAAyB,cAAnB,gBAAY,EAAA;AAAA,cAClBA,EAAyC,QAAnC,MAAA,MAAIC,EAAAL,EAAA,WAAW,QAAO,CAAA,CAAA,GAAA,CAAA;AAAA;;;;MAMjCyD,EAAsB,+BAAjC1D,EAiBM,OAAA;AAAA;QAjB6B,OAAM;AAAA,QAAuB,uCAAYC,EAAuB,2BAAAA,EAAA,wBAAA,GAAA2D,CAAA,GAAA,CAAA,MAAA,CAAA;AAAA;QAC/FvD,EAeM,OAfNyN,IAeM;AAAA,UAdFnK,EAAA,EAAA,MAAAA,EAAA,EAAA,IAAAtD,EAA4C,YAAxC,uCAAmC,EAAA;AAAA,UACvCA,EAII,KAJJ0N,IAII;AAAA,gCAJyC,gEAEzC,EAAA;AAAA,YAAA1N,EAAqD,gBAA7C,MAACC,GAAGqa,KAAAC,IAAA3a,kBAAA,gBAAA2a,EAAa,SAAb,gBAAAD,EAAmB,QAAO,EAAA,GAAA,CAAA;AAAA,gCAAe,QACrD,EAAA;AAAA,YAAAta,EAA0D,gBAAlD,MAACC,GAAGua,KAAAC,IAAA7a,kBAAA,gBAAA6a,EAAa,cAAb,gBAAAD,EAAwB,QAAO,EAAA,GAAA,CAAA;AAAA;YAE/Cxa,EAC8E,YAAA;AAAA,0DAD3DqD,EAAiB,oBAAAhD;AAAA,YAAE,OAAM;AAAA,YACxC,aAAY;AAAA,YAA0C,UAAA;AAAA;gBADvCgD,EAAiB,iBAAA;AAAA;UAEpCrD,EAKM,OALN6Z,IAKM;AAAA,YAJF7Z,EAA2E,UAAA;AAAA,cAAlE,mCAAOJ,EAAuB,2BAAAA,EAAA,wBAAA,GAAA2D,CAAA;AAAA,cAAE,OAAM;AAAA,eAAa,QAAM;AAAA,YAClEvD,EAES,UAAA;AAAA,cAFA,mCAAOJ,EAAkB,sBAAAA,EAAA,mBAAA,GAAA2D,CAAA;AAAA,cAAE,OAAM;AAAA,cAAY,UAAQ,CAAGF,EAAiB,kBAAC,KAAI;AAAA,eAAI,oBAE3F,GAAAsK,EAAA;AAAA;;;MAIGtK,EAAU,+BAAzB1D,EACe,UAAA;AAAA;QADY,MAAK;AAAA,QAAS,OAAM;AAAA,QAAgB,SAAO2D,EAAA,EAAA,MAAAA,EAAA,EAAA,IAAA,CAAAjD,MAAAT,EAAA,eAAeyD,EAAA,UAAU,EAAE;AAAA,SAAG,YAC9F;AAAA;IAICA,EAAS,cAAA,cAApBvD,EAAA,GAAAH,EAiDM,OAjDNiO,IAiDMtK,EAAA,EAAA,MAAAA,EAAA,EAAA,IAAA;AAAA;;;;oDC1cDoX,KAAsB,CAACC,IAAU,QACnC;AAAA,EACH,WAAWA,EAAQ,aAAa;AAAA,EAChC,UAAUA,EAAQ,YAAY;AAAA,EAC9B,UAAUA,EAAQ,aAAa;AAAA,EAC/B,YAAYA,EAAQ,eAAe;AAAA,EACnC,GAAGA;AACN,IAGQC,KAAmB;AAAA,EAC5B;AAAA,IACI,MAAM;AAAA,IACN,OAAO;AAAA,IACP,MAAM;AAAA,IACN,OAAO,CAAC,SAAS,SAAS,SAAS;AAAA,IACnC,MAAM;AAAA,IACN,QAAQ;AAAA,EACX;AAAA,EACD;AAAA,IACI,MAAM;AAAA,IACN,OAAO;AAAA,IACP,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,OAAO,CAAC,MAAM;AAAA,EACjB;AAAA,EACD;AAAA,IACI,MAAM;AAAA,IACN,OAAO;AAAA,IACP,MAAM;AAAA,IACN,MAAM;AAAA,IACN,OAAO,CAAC,OAAO;AAAA,EAClB;AAAA,EACD;AAAA,IACI,MAAM;AAAA,IACN,OAAO;AAAA,IACP,MAAM;AAAA,IACN,MAAM;AAAA,IACN,OAAO,CAAC,OAAO;AAAA,EAClB;AAAA,EACD;AAAA,IACI,MAAM;AAAA,IACN,OAAO;AAAA,EACV;AAAA,EACD;AAAA,IACI,MAAM;AAAA,IACN,OAAO;AAAA,IACP,OAAO,CAAC,SAAS,SAAS,SAAS;AAAA,IACnC,MAAM;AAAA,IACN,UAAU;AAAA,MACN,EAAE,OAAO,wBAAwB,QAAQ,cAAe;AAAA,MACxD,EAAE,OAAO,WAAwB,QAAQ,UAAW;AAAA,MACpD,EAAE,OAAO,sBAAwB,QAAQ,YAAa;AAAA,MACtD,EAAE,OAAO,mBAAwB,QAAQ,OAAQ;AAAA,MACjD,EAAE,OAAO,iBAAwB,QAAQ,UAAW;AAAA,IACvD;AAAA,EACJ;AAAA,EACD;AAAA;AAAA;AAAA;AAAA,IAII,MAAM;AAAA,IACN,OAAO;AAAA,IACP,MAAM;AAAA,IACN,OAAO,CAAC,SAAS,OAAO;AAAA,IACxB,UAAU;AAAA,MACN;AAAA,QACI,OAAO;AAAA,QACP,QAAQ;AAAA,QACR,OAAO,CAAC,SAAS,OAAO;AAAA,MAC3B;AAAA,MACD;AAAA,QACI,OAAO;AAAA,QACP,QAAQ;AAAA,QACR,OAAO,CAAC,SAAS,OAAO;AAAA,MAC3B;AAAA,MACD;AAAA,QACI,OAAO;AAAA,QACP,QAAQ;AAAA,QACR,OAAO,CAAC,SAAS,OAAO;AAAA,MAC3B;AAAA,MACD;AAAA,QACI,OAAO;AAAA,QACP,QAAQ;AAAA,QACR,OAAO,CAAC,SAAS,OAAO;AAAA,MAC3B;AAAA,MACD;AAAA,QACI,OAAO;AAAA;AAAA,QACP,QAAQ;AAAA,QACR,OAAO,CAAC,OAAO;AAAA,MAClB;AAAA,IACJ;AAAA,EACJ;AAAA;AAAA,EAED;AAAA,IACI,MAAM;AAAA,IACN,OAAO;AAAA,IACP,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,OAAO,CAAC,SAAS,SAAS,SAAS;AAAA,EACtC;AAAA,EACD;AAAA,IACI,MAAM;AAAA,IACN,OAAO;AAAA,IACP,MAAM;AAAA,IACN,OAAO,CAAC,SAAS,SAAS,SAAS;AAAA,IACnC,UAAU;AAAA,MACN,EAAE,OAAO,YAAqB,QAAQ,YAAkB,OAAO,CAAC,SAAS,OAAO,EAAG;AAAA,MACnF,EAAE,OAAO,sBAAsB,QAAQ,iBAAkB;AAAA,MACzD,EAAE,OAAO,YAAqB,QAAQ,WAAY;AAAA,IACrD;AAAA,EACJ;AAAA,EACD;AAAA,IACI,MAAM;AAAA,IACN,OAAO;AAAA,IACP,MAAM;AAAA,IACN,OAAO,CAAC,SAAS,SAAS,SAAS;AAAA,IACnC,UAAU;AAAA,MACN,EAAE,OAAO,mBAAmB,QAAQ,aAAa,OAAO,CAAC,SAAS,SAAS,SAAS,EAAG;AAAA,MACvF,EAAE,OAAO,aAAmB,QAAQ,QAAa,OAAO,CAAC,SAAS,SAAS,SAAS,EAAG;AAAA,IAC1F;AAAA,EACJ;AAAA,EACD;AAAA,IACI,MAAM;AAAA,IACN,OAAO;AAAA,IACP,MAAM;AAAA,IACN,MAAM;AAAA,IACN,OAAO,CAAC,SAAS,SAAS,SAAS;AAAA,EACtC;AAAA,EACD;AAAA,IACI,MAAM;AAAA,IACN,OAAO;AAAA,IACP,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,OAAO,CAAC,SAAS,SAAS,SAAS;AAAA,EACtC;AAAA,EACD;AAAA,IACI,MAAM;AAAA,IACN,OAAO;AAAA,IACP,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,OAAO,CAAC,SAAS,SAAS,SAAS;AAAA,EACtC;AAAA,EACD;AAAA,IACI,MAAM;AAAA,IACN,OAAO;AAAA,IACP,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,OAAO,CAAC,MAAM;AAAA,EACjB;AAAA,EACD;AAAA,IACI,MAAM;AAAA,IACN,OAAO;AAAA,IACP,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,OAAO,CAAC,MAAM;AAAA,EACjB;AAAA,EACD;AAAA,IACI,MAAM;AAAA,IACN,OAAO;AAAA,IACP,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,OAAO,CAAC,SAAS,OAAO;AAAA,EAC3B;AAAA,EACD;AAAA,IACI,MAAM;AAAA,IACN,OAAO;AAAA,IACP,MAAM;AAAA,IACN,QAAQ;AAAA,EACX;AACL,GC1KaC,KAA2B,CAAC/b,GAAMgc,MAEvC,CAAChc,EAAK,SAASA,EAAK,MAAM,WAAW,IAC9B,KAIJA,EAAK,MAAM,SAASgc,KAAA,gBAAAA,EAAa,IAAI,GCejC1a,KAAA;AAAA,EACb,QAAQ2a,GAAKJ,IAAU,IAAI;AACzB,IAAAI,EAAI,UAAU,uBAAuBC,EAAmB,GACxDD,EAAI,UAAU,eAAeE,EAAU,GACvCF,EAAI,UAAU,YAAYG,EAAQ,GAClCH,EAAI,UAAU,WAAWI,EAAO,GAChCJ,EAAI,UAAU,gBAAgBK,EAAY,GAC1CL,EAAI,UAAU,kBAAkBM,EAAc,GAC9CN,EAAI,UAAU,qBAAqBO,EAAiB,GACpDP,EAAI,UAAU,wBAAwBQ,EAAoB,GAG1DR,EAAI,QAAQ,iBAAiBJ,CAAO;AAAA,EACrC;AACH;"}
|
|
1
|
+
{"version":3,"file":"oceanhelm.es.js","sources":["../src/components/ConfigurableSidebar.vue","../src/components/VesselList.vue","../src/components/DashHead.vue","../src/components/Reports.vue","../src/components/OceanHelmMaintenance.vue","../src/components/ActivityLogs.vue","../src/components/CrewManagement.vue","../src/components/RequisitionSystem.vue","../src/utils/sidebarConfig.js","../src/utils/permissions.js","../src/index.js"],"sourcesContent":["<template>\n <nav id=\"sidebar\" :class=\"sidebarClasses\">\n <!-- Logo Section -->\n <div class=\"logo d-flex align-items-center left\" v-if=\"showLogo\">\n <span style=\"margin-left: 45px;\">{{ brandName }}</span>\n </div>\n\n <!-- Navigation Items -->\n <ul class=\"list-unstyled components mt-4\">\n <li v-for=\"(item, index) in filteredMenuItems\" :key=\"index\"\n :class=\"{ 'active': item.active, 'dropdown': item.type === 'dropdown' }\" @click=\"handleItemClick(item)\">\n <!-- Regular Link -->\n <a v-if=\"item.type === 'link'\" :href=\"item.href || '#'\" @click.prevent=\"handleNavigation(item)\">\n <i :class=\"item.icon\" v-if=\"item.icon\"></i>\n {{ item.label }}\n </a>\n\n <!-- Button/Action -->\n <a v-else-if=\"item.type === 'button'\" @click.prevent=\"handleAction(item)\" style=\"cursor: pointer;\">\n <i :class=\"item.icon\" v-if=\"item.icon\"></i>\n {{ item.label }}\n </a>\n\n <!-- Dropdown -->\n <template v-else-if=\"item.type === 'dropdown'\">\n <a class=\"dropdown-toggle\" @click.prevent=\"toggleDropdown(item)\" style=\"cursor: pointer;\">\n <i :class=\"item.icon\" v-if=\"item.icon\"></i>\n {{ item.label }}\n <i class=\"\" :class=\"{ open: item.open }\"></i>\n </a>\n\n <ul v-show=\"item.open\" class=\"sidebar-dropdown\">\n <li v-for=\"(subItem, subIndex) in getFilteredChildren(item)\" :key=\"subIndex\">\n <a class=\"dropdown-item\" @click.prevent=\"handleAction(subItem)\">\n {{ subItem.label }}\n </a>\n </li>\n </ul>\n </template>\n\n <!-- Separator -->\n <div v-else-if=\"item.type === 'separator'\" class=\"dropdown-divider\"></div>\n\n <!-- Static Text -->\n <a v-else-if=\"item.type === 'text'\">\n {{ item.label }}\n </a>\n </li>\n </ul>\n\n <!-- Custom Slot for Additional Content -->\n <slot name=\"footer\"></slot>\n </nav>\n</template>\n\n<script>\nexport default {\n name: 'ConfigurableSidebar',\n\n props: {\n // Brand configuration\n brandName: {\n type: String,\n default: 'OceanHelm'\n },\n logoIcon: {\n type: String,\n default: 'bi bi-water'\n },\n showLogo: {\n type: Boolean,\n default: true\n },\n\n // Menu items configuration\n menuItems: {\n type: Array,\n required: true,\n default: () => []\n },\n\n // User profile for role-based filtering\n // Expected shape: { role: 'staff', categories: ['hr', 'purchaser'] }\n userProfile: {\n type: Object,\n default: () => ({})\n },\n\n // Sidebar behavior\n responsive: {\n type: Boolean,\n default: true\n },\n\n // Custom classes\n customClasses: {\n type: String,\n default: ''\n },\n\n // Optional override: provide your own permission function\n // Signature: (item, userProfile) => Boolean\n permissionChecker: {\n type: Function,\n default: null\n }\n },\n\n computed: {\n sidebarClasses() {\n return this.customClasses;\n },\n\n filteredMenuItems() {\n return this.menuItems.filter(item => {\n if (!this.hasPermission(item)) return false;\n\n // For dropdowns, only show if at least one child is permitted\n if (item.type === 'dropdown' && item.children) {\n return item.children.some(child => this.hasPermission(child));\n }\n\n return true;\n });\n }\n },\n\n mounted() {\n if (this.responsive) {\n this.initializeResponsiveBehavior();\n }\n },\n\n methods: {\n toggleDropdown(item) {\n // Accordion behaviour — close others\n this.filteredMenuItems.forEach(i => {\n if (i !== item && i.type === 'dropdown') {\n i.open = false;\n }\n });\n item.open = !item.open;\n },\n\n getFilteredChildren(item) {\n if (!item.children) return [];\n return item.children.filter(child => this.hasPermission(child));\n },\n\n // ─── Permission logic ────────────────────────────────────────────────────\n // Rule summary:\n // 1. Use permissionChecker prop if supplied.\n // 2. No `roles` array on the item → visible to everyone.\n // 3. User's role must be in item.roles.\n // 4. If the item also has a `categories` array AND the user's role is\n // NOT one of the \"elevated\" roles (owner, super-staff), the user must\n // possess at least one of the listed categories.\n // Elevated roles bypass the category gate entirely.\n // ────────────────────────────────────────────────────────────────────────\n hasPermission(item) {\n if (this.permissionChecker) {\n return this.permissionChecker(item, this.userProfile);\n }\n\n const userRole = this.userProfile?.role || '';\n const userCategories = this.userProfile?.categories || [];\n\n // No role restriction — always visible\n if (!item.roles || item.roles.length === 0) return true;\n\n // Role must be listed\n if (!item.roles.includes(userRole)) return false;\n\n // Category gate — only applies when the item declares categories\n // AND the user is not an elevated role that bypasses it\n if (item.categories && item.categories.length > 0) {\n const elevatedRoles = ['owner', 'super-staff'];\n if (!elevatedRoles.includes(userRole)) {\n // Regular staff: must hold at least one of the required categories\n const hasCategory = item.categories.some(cat => userCategories.includes(cat));\n if (!hasCategory) return false;\n }\n // Elevated roles fall through — no category check needed\n }\n\n return true;\n },\n\n // Navigation handling\n handleNavigation(item) {\n this.$emit('navigate', item);\n\n if (item.href && !item.preventDefault) {\n if (item.external) {\n window.open(item.href, '_blank');\n } else {\n this.$router?.push(item.href);\n }\n }\n },\n\n // Action handling\n handleAction(item) {\n this.$emit('action', item);\n },\n\n // Item click handling\n handleItemClick(item) {\n this.$emit('item-click', item);\n },\n\n // Responsive behaviour\n initializeResponsiveBehavior() {\n const sidebarToggle = document.getElementById('sidebarToggle');\n const sidebar = document.getElementById('sidebar');\n const content = document.getElementById('content');\n\n if (!sidebarToggle || !sidebar || !content) return;\n\n if (window.innerWidth >= 768) {\n sidebar.classList.toggle('active');\n content.classList.toggle('active');\n }\n\n sidebarToggle.addEventListener('click', () => {\n sidebar.classList.toggle('active');\n content.classList.toggle('active');\n });\n\n document.addEventListener('click', (event) => {\n const isClickInsideSidebar = sidebar.contains(event.target);\n const isClickOnToggleBtn = sidebarToggle.contains(event.target);\n\n if (!isClickInsideSidebar && !isClickOnToggleBtn &&\n window.innerWidth < 768 &&\n sidebar.classList.contains('active')) {\n sidebar.classList.remove('active');\n content.classList.remove('active');\n }\n });\n }\n },\n\n emits: ['navigate', 'action', 'item-click']\n}\n</script>\n\n<style>\n.sidebar-dropdown {\n list-style: none;\n padding-left: 20px;\n margin: 5px 0 10px 0;\n}\n\n.sidebar-dropdown li a {\n display: block;\n padding: 8px 15px;\n font-size: 14px;\n color: #ddd;\n border-radius: 4px;\n transition: background 0.2s ease;\n}\n\n.sidebar-dropdown li a:hover {\n background: rgba(255, 255, 255, 0.1);\n}\n\n.dropdown-arrow {\n float: right;\n transition: transform 0.2s ease;\n}\n\n.dropdown-arrow.open {\n transform: rotate(180deg);\n}\n</style>","<template>\n <!-- Fleet Summary -->\n <div class=\"row mb-3\">\n <div class=\"col-md-4\">\n <div class=\"card border-0 shadow-sm\" \n @click=\"filterVessels('Active')\"\n :class=\"{ 'border-primary border-2': activeFilter === 'Active' }\"\n style=\"cursor: pointer;\">\n <div class=\"card-body d-flex align-items-center\">\n <div class=\"rounded-circle bg-primary bg-opacity-10 p-3 me-3\">\n <i class=\"bi bi-check-circle-fill text-primary fs-4\"></i>\n </div>\n <div>\n <h6 class=\"mb-0\">Active Vessels</h6>\n <h3 class=\"mt-2 mb-0\">{{ activeVesselsCount }}</h3>\n </div>\n </div>\n </div>\n </div>\n <div class=\"col-md-4\">\n <div class=\"card border-0 shadow-sm\"\n @click=\"filterVessels('Inactive')\"\n :class=\"{ 'border-secondary border-2': activeFilter === 'Inactive' }\"\n style=\"cursor: pointer;\">\n <div class=\"card-body d-flex align-items-center\">\n <div class=\"rounded-circle bg-secondary bg-opacity-10 p-3 me-3\">\n <i class=\"bi bi-pause-circle-fill text-secondary fs-4\"></i>\n </div>\n <div>\n <h6 class=\"mb-0\">Inactive</h6>\n <h3 class=\"mt-2 mb-0\">{{ inactiveVesselsCount }}</h3>\n </div>\n </div>\n </div>\n </div>\n <!-- Register New Fleet -->\n <div class=\"col-md-4\" v-if=\"canAddVessel\">\n <div class=\"card border-0 shadow-sm\" @click=\"handleAddVessel\" style=\"cursor: pointer;\">\n <div class=\"card-body d-flex align-items-center\">\n <div class=\"rounded-circle bg-success bg-opacity-10 p-3 me-3\">\n <i class=\"bi bi-patch-plus-fill text-success fs-4\"></i>\n </div>\n <div>\n <h6 class=\"mb-0\">Add New Vessel</h6>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <div class=\"d-flex justify-content-between align-items-center mb-4\">\n <h4 class=\"mb-0\"><i class=\"bi bi-ship me-2\"></i>Registered Vessels</h4>\n <button \n v-if=\"activeFilter !== 'All'\" \n class=\"btn btn-sm btn-outline-secondary\"\n @click=\"clearFilter\">\n <i class=\"bi bi-x-circle me-1\"></i>Clear Filter\n </button>\n </div>\n\n <!-- Filter indicator -->\n <div v-if=\"activeFilter !== 'All'\" class=\"alert alert-info mb-3\" role=\"alert\">\n Showing <strong>{{ activeFilter }}</strong> vessels ({{ filteredVessels.length }})\n </div>\n\n <!-- Loading State -->\n <div v-if=\"loading\" class=\"text-center py-4\">\n <div class=\"spinner-border text-primary\" role=\"status\">\n <span class=\"visually-hidden\">Loading...</span>\n </div>\n <p class=\"mt-2\">Loading vessels...</p>\n </div>\n\n <!-- Empty State -->\n <div v-else-if=\"!filteredVessels.length && activeFilter === 'All'\" class=\"alert alert-primary\" role=\"alert\">\n <h4 class=\"alert-heading\">Empty Fleet!</h4>\n <p>You have an empty fleet, you have not added any vessel yet.</p>\n <hr>\n <p class=\"mb-0\">Click on the add vessel button above, to start adding vessels to your fleet</p>\n </div>\n\n <!-- No results for filter -->\n <div v-else-if=\"!filteredVessels.length && activeFilter !== 'All'\" class=\"alert alert-warning\" role=\"alert\">\n <h4 class=\"alert-heading\">No {{ activeFilter }} Vessels</h4>\n <p class=\"mb-0\">There are no {{ activeFilter.toLowerCase() }} vessels in your fleet.</p>\n </div>\n\n <!-- Vessel Cards -->\n <div v-else class=\"row\">\n <div class=\"col-lg-6\" v-for=\"vessel in filteredVessels\" :key=\"vessel.registrationNumber || vessel.id\">\n <div class=\"vessel-card\" @click=\"handleVesselClick(vessel)\">\n <div class=\"card-body d-flex align-items-center\">\n <div class=\"vessel-icon v-left\">\n <i class=\"fas fa-ship\"></i>\n </div>\n <div class=\"flex-grow-1\">\n <div class=\"d-flex justify-content-between align-items-center mb-2\">\n <h5 class=\"card-title mb-0\">{{ vessel.name }}</h5>\n <span :class=\"['vessel-status', statusClass(vessel.status)]\">{{ vessel.status }}</span>\n </div>\n <div class=\"row\">\n <div class=\"col-6\">\n <small class=\"text-muted\">Registration #:</small>\n <p class=\"mb-0\">{{ vessel.registrationNumber }}</p>\n </div>\n\n <div class=\"col-6\" v-if=\"vessel.date\">\n <template v-if=\"vessel.status === 'Active'\">\n <small class=\"text-muted\">Active Duration:</small>\n <p class=\"mb-0\">{{ getDuration(vessel.date, vessel.registrationNumber) }}</p>\n </template>\n <template v-else>\n <small class=\"text-muted\">Inactive Duration:</small>\n <p class=\"mb-0\">{{ getDuration(vessel.date, vessel.registrationNumber) }}</p>\n </template>\n </div>\n\n <div class=\"col-6\" v-else>\n <small class=\"text-muted\">{{ vessel.status }} Duration:</small>\n <button type=\"button\" class=\"btn btn-outline-primary btn-sm mt-1\"\n @click.stop=\"setVesselDate(vessel.registrationNumber)\">\n Set Date\n </button>\n </div>\n </div>\n </div>\n </div>\n <div class=\"action-icon v-left delete\">\n <i class=\"bi bi-trash\" @click.stop=\"handleDeleteVessel(vessel)\"></i>\n </div>\n <button class=\"btn btn-primary\" @click.stop=\"handleToggleStatus(vessel)\">\n {{ vessel.status === 'Active' ? 'Mark Inactive' : 'Mark Active' }}\n </button>\n </div>\n </div>\n </div>\n</template>\n\n<script>\nexport default {\n name: 'VesselList',\n\n props: {\n // Required props\n vessels: {\n type: Array,\n required: true,\n default: () => []\n },\n userProfile: {\n type: Object,\n required: true,\n default: () => ({ role: 'viewer', vessel: null })\n },\n\n // Optional props\n loading: {\n type: Boolean,\n default: false\n },\n currentRoute: {\n type: String,\n default: 'dashboard' // 'dashboard', 'maintenanceroute', 'crewroute'\n },\n\n // Configuration props\n config: {\n type: Object,\n default: () => ({\n enableAdd: true,\n enableEdit: true,\n enableDelete: true,\n enableStatusToggle: true,\n showCertifications: true\n })\n }\n },\n\n data() {\n return {\n activeFilter: 'All' // 'All', 'Active', or 'Inactive'\n };\n },\n\n emits: [\n 'vessel-add',\n 'vessel-click',\n 'vessel-edit',\n 'vessel-delete',\n 'vessel-toggle-status',\n 'vessel-navigate',\n 'access-denied',\n 'date-change'\n ],\n\n computed: {\n activeVesselsCount() {\n return this.vessels.filter(vessel => vessel.status === \"Active\").length;\n },\n\n inactiveVesselsCount() {\n return this.vessels.filter(vessel => vessel.status === \"Inactive\").length;\n },\n\n filteredVessels() {\n if (this.activeFilter === 'All') {\n return this.vessels;\n }\n return this.vessels.filter(vessel => vessel.status === this.activeFilter);\n },\n\n canAddVessel() {\n return this.config.enableAdd &&\n (this.userProfile.role === 'owner' || this.userProfile.role === 'staff');\n }\n },\n\n methods: {\n // Filter methods\n filterVessels(status) {\n this.activeFilter = status;\n },\n\n clearFilter() {\n this.activeFilter = 'All';\n },\n\n // Event handlers that emit to parent\n handleAddVessel() {\n if (!this.canAddVessel) {\n this.handleAccessDenied('add vessel');\n return;\n }\n this.$emit('vessel-add');\n },\n\n handleVesselClick(vessel) {\n const navigationData = {\n vessel,\n route: this.currentRoute,\n id: vessel.registrationNumber,\n name: vessel.name\n };\n\n if (this.grantAccess(vessel)) {\n if (this.currentRoute === 'dashboard') {\n this.$emit('vessel-click', vessel);\n } else {\n this.$emit('vessel-navigate', navigationData);\n }\n } else {\n this.handleAccessDenied('this protected route');\n }\n },\n\n handleDeleteVessel(vessel) {\n if (!this.grantAccess(vessel)) {\n this.handleAccessDenied('delete vessel');\n return;\n }\n\n if (!this.config.enableDelete) {\n return;\n }\n\n this.$emit('vessel-delete', vessel);\n },\n\n handleToggleStatus(vessel) {\n if (!this.grantAccess(vessel)) {\n this.handleAccessDenied('change vessel status');\n return;\n }\n\n if (!this.config.enableStatusToggle) {\n return;\n }\n\n this.$emit('vessel-toggle-status', vessel);\n },\n\n handleEditVessel(vessel) {\n if (!this.grantAccess(vessel)) {\n this.handleAccessDenied('edit vessel');\n return;\n }\n\n if (!this.config.enableEdit) {\n return;\n }\n\n this.$emit('vessel-edit', vessel);\n },\n\n handleAccessDenied(action) {\n this.$emit('access-denied', { action, userProfile: this.userProfile });\n },\n\n // Utility methods (keep these in component as they're UI-related)\n statusClass(status) {\n const normalized = status?.toLowerCase() || '';\n return `status-${normalized}`;\n },\n\n getDuration(date, registrationNumber) {\n const now = new Date();\n const inputDate = new Date(date);\n\n // difference in milliseconds\n const diffMs = now - inputDate;\n\n if (diffMs < 0) return \"Invalid (future date)\";\n\n // convert to hours\n const diffHours = Math.floor(diffMs / (1000 * 60 * 60));\n\n const days = Math.floor(diffHours / 24);\n const hours = diffHours % 24;\n\n let result = \"\";\n\n if (days > 0) {\n result += `${days} day${days > 1 ? \"s\" : \"\"}`;\n }\n if (hours > 0) {\n result += (result ? \" \" : \"\") + `${hours} hr${hours > 1 ? \"s\" : \"\"}`;\n }\n\n return result || '0 hr'\n },\n\n setVesselDate(registrationNumber) {\n this.$emit('date-change', registrationNumber);\n },\n\n grantAccess(vessel) {\n const { role, vessel: userVessel } = this.userProfile;\n\n return role === 'owner' ||\n role === 'staff' ||\n (role === 'captain' && userVessel === vessel.name);\n },\n\n getDaysToExpiry(expiry_date) {\n if (!expiry_date) return null;\n\n const today = new Date();\n const expiry = new Date(expiry_date);\n const diffTime = expiry - today;\n const diffDays = Math.ceil(diffTime / (1000 * 60 * 60 * 24));\n return diffDays;\n },\n\n getExpiryClass(expiry_date) {\n const days = this.getDaysToExpiry(expiry_date);\n if (days === null) return '';\n if (days < 30) return 'cert-critical';\n if (days < 90) return 'cert-warning';\n return '';\n }\n }\n}\n</script>\n\n<style>\n.v-left {\n margin-left: 20px;\n}\n\n.vessel-card {\n background: white;\n border-radius: 10px;\n box-shadow: 0 8px 16px rgba(0, 105, 192, 0.15);\n transition: all 0.3s ease;\n margin-bottom: 20px;\n overflow: hidden;\n border-left: 4px solid var(--accent-color);\n}\n\n.vessel-card:hover {\n transform: translateY(-5px);\n box-shadow: 0 12px 20px rgba(0, 105, 192, 0.2);\n}\n\n.vessel-icon {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 50px;\n height: 50px;\n background-color: #e3f2fd;\n border-radius: 10px;\n color: var(--accent-color);\n font-size: 24px;\n margin-right: 15px;\n}\n\n.black {\n color: black !important;\n}\n\n.action-icon {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 30px;\n height: 30px;\n border-radius: 20px;\n color: var(--accent-color);\n font-size: 16px;\n margin-right: 15px;\n margin-top: 20px;\n margin-bottom: 10px;\n}\n\n.delete {\n background-color: var(--danger);\n}\n\n.edit {\n background-color: var(--success);\n}\n\n.vessel-status {\n display: inline-block;\n padding: 5px 12px;\n border-radius: 20px;\n font-size: 12px;\n font-weight: 600;\n}\n\n.status-active {\n background-color: #e8f5e9;\n color: #2e7d32;\n}\n\n.status-maintenance {\n background-color: #fff8e1;\n color: #f57f17;\n}\n\n.status-inactive {\n background-color: #f5f5f5;\n color: #757575;\n}\n</style>","<template>\n <div class=\"page-header d-flex justify-content-between align-items-center\">\n <h4 style=\"margin-left: 20px;\">{{ name }}</h4>\n <div class=\"d-flex\">\n <button class=\"btn btn-outline-primary me-2\" @click=\"addUser()\" v-if=\"this.userProfile.role == 'owner'\">\n <i class=\"bi bi-bell\"></i>\n <span class=\"badge bg-danger\">1</span>\n </button>\n <button class=\"btn btn-outline-primary\" @click=\"loggedIn()\">\n <i class=\"bi bi-person-circle\"></i>\n </button>\n </div>\n </div>\n</template>\n\n<script>\nexport default {\n name: 'DashHead',\n \n props: {\n name: {\n type: String,\n required: true\n },\n userProfile: {\n type: Object,\n required: true,\n default: () => ({ role: 'viewer', vessel: null })\n }\n },\n\n emits: [\n 'add-user',\n 'logged-in'\n ],\n\n methods: {\n addUser() {\n this.$emit('add-user');\n },\n loggedIn() {\n this.$emit('logged-in');\n }\n }\n}\n</script>\n\n<style>\n.page-header {\n margin-bottom: 30px;\n border-bottom: 1px solid #e0e0e0;\n padding-bottom: 15px;\n}\n\n.btn-outline-primary {\n border: 1px solid #0d6efd !important;\n}\n\n.btn-outline-primary:hover {\n background-color: #0d6efd !important;\n border-color: #0d6efd !important;\n color: white !important;\n}\n</style>","<template>\n <div class=\"reports-container\">\n\n <!-- ── Missing Reports Alert Banner ── -->\n <transition name=\"slide-down\">\n <div class=\"missing-banner\" v-if=\"!bannerDismissed && (pendingContext || missingReports.length > 0)\">\n <div class=\"missing-banner-inner\">\n <div class=\"missing-icon\"><i class=\"bi bi-exclamation-triangle-fill\"></i></div>\n <div class=\"missing-content\">\n <strong v-if=\"pendingContext\">\n Action Required — Report for\n <span class=\"ref-chip\">{{ pendingContext.entity_ref }}</span> must be submitted\n </strong>\n <strong v-else>\n {{ missingReports.length }} report{{ missingReports.length > 1 ? 's' : '' }} awaiting\n submission\n </strong>\n <p v-if=\"pendingContext\">{{ pendingContext.title }}</p>\n </div>\n <button class=\"btn btn-warning btn-sm fw-bold\" @click=\"openReportForm('qhse')\">\n <i class=\"bi bi-pencil-square me-1\"></i> Submit Report\n </button>\n <button class=\"btn-dismiss\" @click=\"dismissBanner\" title=\"Dismiss\">\n <i class=\"bi bi-x-lg\"></i>\n </button>\n </div>\n </div>\n </transition>\n\n <!-- ── Page Header ── -->\n <div class=\"page-header d-flex justify-content-between align-items-center\">\n <div>\n <h4 class=\"page-title\">Reports</h4>\n <p class=\"page-subtitle\">Document Management & QHSE Reports</p>\n </div>\n <div class=\"header-actions\">\n <div class=\"btn-group-split\">\n <button class=\"btn btn-outline-primary\" @click=\"openReportForm('qhse')\">\n <i class=\"bi bi-shield-check\"></i> QHSE Report\n </button>\n <button class=\"btn btn-outline-secondary\" @click=\"openReportForm('manual')\">\n <i class=\"bi bi-file-earmark-plus\"></i> Manual Report\n </button>\n <button class=\"btn btn-primary\" @click=\"showNewFolderModal = true\">\n <i class=\"bi bi-folder-plus\"></i> New Folder\n </button>\n </div>\n </div>\n </div>\n\n <!-- ── Tab Navigation ── -->\n <div class=\"tab-nav\">\n <button :class=\"['tab-btn', { active: activeTab === 'all' }]\" @click=\"activeTab = 'all'\">\n All Reports <span class=\"tab-count\">{{ reports.length }}</span>\n </button>\n <button :class=\"['tab-btn', { active: activeTab === 'drill' }]\" @click=\"activeTab = 'drill'\">\n <i class=\"bi bi-people-fill me-1\"></i>Drills\n <span class=\"tab-count drill\">{{ drillReports.length }}</span>\n </button>\n <button :class=\"['tab-btn', { active: activeTab === 'incident' }]\" @click=\"activeTab = 'incident'\">\n <i class=\"bi bi-exclamation-octagon-fill me-1\"></i>Incidents\n <span class=\"tab-count incident\">{{ incidentReports.length }}</span>\n </button>\n <button :class=\"['tab-btn', { active: activeTab === 'manual' }]\" @click=\"activeTab = 'manual'\">\n <i class=\"bi bi-file-earmark-text me-1\"></i>Manual\n <span class=\"tab-count manual\">{{ manualReports.length }}</span>\n </button>\n <button :class=\"['tab-btn', { active: activeTab === 'folders' }]\" @click=\"activeTab = 'folders'\">\n <i class=\"bi bi-folder-fill me-1\"></i>Folders\n <span class=\"tab-count\">{{ reports.length + folders.length }}</span>\n </button>\n </div>\n\n <!-- ── Loading ── -->\n <div v-if=\"isLoading\" class=\"loading-container\">\n <div class=\"spinner\"></div>\n <p>Loading reports…</p>\n </div>\n\n <!-- ════════════════════════════════════════\n REPORTS LIST TABS (all/drill/incident/manual)\n ════════════════════════════════════════ -->\n <div v-if=\"activeTab !== 'folders' && !isLoading\">\n <div class=\"report-cards\" v-if=\"filteredReports.length > 0\">\n <div v-for=\"report in filteredReports\" :key=\"report.id\" :ref=\"'report-' + report.entityRef\"\n :class=\"['report-card', { 'report-card--highlighted': highlightedRef === report.entityRef }]\">\n <div class=\"rc-type-bar\" :class=\"reportTypeClass(report)\"></div>\n <div class=\"rc-badge\" :class=\"reportTypeClass(report)\">{{ reportTypeLabel(report) }}</div>\n\n <div class=\"rc-body\" @click=\"viewReport(report)\">\n <strong class=\"rc-ref\">{{ report.entityRef || report.id?.slice(0, 8).toUpperCase() }}</strong>\n <span class=\"rc-title\">{{ report.title }}</span>\n <span class=\"rc-meta\">\n <i class=\"bi bi-person-fill me-1\"></i>{{ report.submittedBy }}\n · \n <i class=\"bi bi-calendar3 me-1\"></i>{{ formatDate(report.submittedAt) }}\n </span>\n </div>\n\n <div class=\"rc-files\" v-if=\"getFilesForReport(report.id).length > 0\">\n <i class=\"bi bi-paperclip\"></i> {{ getFilesForReport(report.id).length }}\n </div>\n\n <!-- Folder pill: click jumps to the auto-folder -->\n <button class=\"rc-folder-pill\" :class=\"reportTypeClass(report)\" @click.stop=\"jumpToFolder(report)\"\n title=\"View folder\">\n <i class=\"bi bi-folder-fill me-1\"></i>\n {{ report.entityRef || report.title }}\n </button>\n\n <div class=\"rc-actions\">\n <button class=\"rc-btn rc-btn--view\" @click=\"viewReport(report)\" title=\"View\">\n <i class=\"bi bi-eye\"></i>\n </button>\n <button class=\"rc-btn rc-btn--download\" @click=\"downloadReport(report)\"\n :disabled=\"generatingPdf === report.id\" title=\"Download ZIP\">\n <span v-if=\"generatingPdf === report.id\" class=\"spinner-xs\"></span>\n <i v-else class=\"bi bi-file-zip\"></i>\n </button>\n </div>\n </div>\n </div>\n\n <div class=\"empty-state text-center\" v-if=\"filteredReports.length === 0\">\n <i class=\"bi bi-file-earmark-x\" style=\"font-size:3.5rem;color:#ccc;\"></i>\n <h5 class=\"mt-3 text-muted\">No {{ activeTab === 'all' ? '' : activeTab }} reports yet</h5>\n <p class=\"text-muted\">\n <span v-if=\"activeTab === 'manual'\">Create a manual report using the button above</span>\n <span v-else-if=\"activeTab === 'drill'\">Submit a report after logging a drill</span>\n <span v-else-if=\"activeTab === 'incident'\">Submit a report after logging an incident</span>\n <span v-else>Submit a report or create a folder to get started</span>\n </p>\n </div>\n </div>\n\n <!-- ════════════════════════════════════════\n FOLDERS TAB\n ════════════════════════════════════════ -->\n <div v-if=\"activeTab === 'folders' && !isLoading\">\n\n <!-- ─ Auto-folders ─ -->\n <div v-if=\"reports.length > 0\">\n <div class=\"section-heading\">\n <i class=\"bi bi-folder-symlink-fill text-primary me-1\"></i>\n Report Folders\n <span class=\"section-count\">{{ reports.length }}</span>\n <span class=\"section-hint\">Auto-generated · one per submitted report</span>\n </div>\n\n <div class=\"folders-list\">\n <div v-for=\"report in reports\" :key=\"'af-' + report.id\"\n :ref=\"'folder-' + (report.entityRef || report.id)\"\n :class=\"['auto-folder-card', reportTypeClass(report), { 'is-open': expandedFolders.includes('auto-' + report.id) }]\">\n <div class=\"af-header\" @click=\"toggleFolder('auto-' + report.id)\">\n <div class=\"af-icon-wrap\">\n <i class=\"bi bi-folder-fill af-folder-icon\"\n :class=\"'color--' + reportTypeClass(report)\"></i>\n <span class=\"af-count-badge\">{{ 1 + getFilesForReport(report.id).length }}</span>\n </div>\n <div class=\"af-meta\">\n <span class=\"af-ref\">{{ report.entityRef || report.id?.slice(0, 8).toUpperCase()\n }}</span>\n <span class=\"af-title\">{{ report.title }}</span>\n <div class=\"af-sub\">\n <span class=\"mini-badge\" :class=\"reportTypeClass(report)\">{{ reportTypeLabel(report)\n }}</span>\n <span class=\"text-muted\">{{ formatDate(report.submittedAt) }}</span>\n <span class=\"text-muted\" v-if=\"getFilesForReport(report.id).length\">\n · {{ getFilesForReport(report.id).length }} attachment{{\n getFilesForReport(report.id).length !== 1 ? 's' : '' }}\n </span>\n </div>\n </div>\n <div class=\"af-actions\">\n <button class=\"rc-btn rc-btn--download\" @click.stop=\"downloadReport(report)\"\n :disabled=\"generatingPdf === report.id\" title=\"Download ZIP\">\n <span v-if=\"generatingPdf === report.id\" class=\"spinner-xs\"></span>\n <i v-else class=\"bi bi-file-zip\"></i>\n </button>\n <i class=\"bi chevron-icon\"\n :class=\"expandedFolders.includes('auto-' + report.id) ? 'bi-chevron-up' : 'bi-chevron-down'\"></i>\n </div>\n </div>\n\n <transition name=\"folder-expand\">\n <div class=\"af-contents\" v-if=\"expandedFolders.includes('auto-' + report.id)\">\n\n <div class=\"ffi ffi--report\" @click=\"viewReport(report)\">\n <div class=\"ffi-icon ffi-icon--pdf\"><i class=\"bi bi-file-earmark-pdf-fill\"></i>\n </div>\n <div class=\"ffi-meta\">\n <span class=\"ffi-name\">{{ safeRef(report) }}_report.pdf</span>\n <span class=\"ffi-sub\">Generated report sheet · click to preview</span>\n </div>\n <div class=\"ffi-acts\">\n <button class=\"rc-btn rc-btn--view\" @click.stop=\"viewReport(report)\"\n title=\"Preview\"><i class=\"bi bi-eye\"></i></button>\n <button class=\"rc-btn rc-btn--download\"\n @click.stop=\"downloadReportPdfOnly(report)\"\n :disabled=\"generatingPdf === report.id + '-pdf'\" title=\"Download PDF only\">\n <span v-if=\"generatingPdf === report.id + '-pdf'\" class=\"spinner-xs\"></span>\n <i v-else class=\"bi bi-download\"></i>\n </button>\n </div>\n </div>\n\n <div v-for=\"f in getFilesForReport(report.id)\" :key=\"f.id\" class=\"ffi\">\n <div class=\"ffi-icon\" :class=\"ffiIconClass(f)\">\n <i class=\"bi\" :class=\"fileIcon(f.type)\"></i>\n </div>\n <div class=\"ffi-meta\">\n <span class=\"ffi-name\">{{ f.name }}</span>\n <span class=\"ffi-sub\">{{ formatFileSize(f.size) }}</span>\n </div>\n <div class=\"ffi-acts\">\n <a v-if=\"f.publicUrl\" :href=\"f.publicUrl\" target=\"_blank\" rel=\"noopener\"\n class=\"rc-btn rc-btn--view\" title=\"Open\"><i\n class=\"bi bi-box-arrow-up-right\"></i></a>\n </div>\n </div>\n\n <div class=\"ffi-empty\" v-if=\"getFilesForReport(report.id).length === 0\">\n <i class=\"bi bi-paperclip me-1\"></i>No attachments — ZIP will contain the report PDF\n only\n </div>\n\n <div class=\"af-zip-row\">\n <button class=\"btn btn-sm btn-outline-primary\" @click=\"downloadReport(report)\"\n :disabled=\"generatingPdf === report.id\">\n <span v-if=\"generatingPdf === report.id\">\n <span class=\"spinner-xs me-1\"></span>Building ZIP…\n </span>\n <span v-else>\n <i class=\"bi bi-file-zip me-1\"></i>Download all as ZIP\n </span>\n </button>\n <span class=\"af-zip-hint\">\n {{ safeRef(report) }}.zip\n · report PDF{{ getFilesForReport(report.id).length ? ' + ' +\n getFilesForReport(report.id).length + ' file(s)' : '' }}\n </span>\n </div>\n\n </div>\n </transition>\n </div>\n </div>\n </div>\n\n <!-- ─ User folders ─ -->\n <div :class=\"{ 'mt-4': reports.length > 0 }\" v-if=\"folders.length > 0\">\n <div class=\"section-heading\">\n <i class=\"bi bi-folder-plus text-warning me-1\"></i>\n Custom Folders\n <span class=\"section-count\">{{ folders.length }}</span>\n </div>\n\n <div class=\"folders-list\">\n <div v-for=\"folder in folders\" :key=\"'uf-' + folder.id\"\n :class=\"['user-folder-card', { 'is-open': expandedFolders.includes('user-' + folder.id) }]\">\n <div class=\"af-header\" @click=\"toggleFolder('user-' + folder.id)\">\n <div class=\"af-icon-wrap\">\n <i class=\"bi bi-folder-fill af-folder-icon color--user\"></i>\n <span class=\"af-count-badge\" style=\"background:#f0ad4e;color:#664d03;\">{{\n folder.files.length }}</span>\n </div>\n <div class=\"af-meta\">\n <span class=\"af-ref\">{{ folder.name }}</span>\n <span class=\"af-sub\">\n <span class=\"text-muted\">{{ folder.files.length }} file{{ folder.files.length !== 1\n ? 's' : '' }}</span>\n </span>\n </div>\n <div class=\"af-actions\">\n <button class=\"rc-btn\" style=\"color:#6f42c1;\" @click.stop=\"selectFolder(folder)\"\n title=\"Add Files\">\n <i class=\"bi bi-file-earmark-plus\"></i>\n </button>\n <button class=\"rc-btn rc-btn--danger\"\n @click.stop=\"$emit('folder-delete-requested', folder.id)\" title=\"Delete\">\n <i class=\"bi bi-trash\"></i>\n </button>\n <i class=\"bi chevron-icon\"\n :class=\"expandedFolders.includes('user-' + folder.id) ? 'bi-chevron-up' : 'bi-chevron-down'\"></i>\n </div>\n </div>\n\n <transition name=\"folder-expand\">\n <div class=\"af-contents\" v-if=\"expandedFolders.includes('user-' + folder.id)\">\n <div v-for=\"file in folder.files\" :key=\"file.id\" class=\"ffi\">\n <div class=\"ffi-icon\" :class=\"ffiIconClass(file)\">\n <i class=\"bi\" :class=\"fileIcon(file.type)\"></i>\n </div>\n <div class=\"ffi-meta\">\n <span class=\"ffi-name\">{{ file.name }}</span>\n <span class=\"ffi-sub\">{{ formatFileSize(file.size) }}</span>\n </div>\n <div class=\"ffi-acts\">\n <button class=\"rc-btn rc-btn--danger\"\n @click=\"$emit('file-remove-requested', { folderId: folder.id, fileId: file.id })\"\n title=\"Remove\"><i class=\"bi bi-x-circle\"></i></button>\n </div>\n </div>\n\n <div class=\"ffi-empty\" v-if=\"folder.files.length === 0\">\n <i class=\"bi bi-inbox me-1\"></i>Empty folder\n <button class=\"btn btn-sm btn-outline-secondary ms-2\" @click=\"selectFolder(folder)\">\n <i class=\"bi bi-file-earmark-plus me-1\"></i>Add Files\n </button>\n </div>\n </div>\n </transition>\n </div>\n </div>\n </div>\n\n <!-- All empty -->\n <div class=\"empty-state text-center\" v-if=\"reports.length === 0 && folders.length === 0\">\n <i class=\"bi bi-folder2-open\" style=\"font-size:3.5rem;color:#ccc;\"></i>\n <h5 class=\"mt-3 text-muted\">No folders yet</h5>\n <p class=\"text-muted\">Each submitted report auto-creates a folder here. You can also create custom\n folders.</p>\n <button class=\"btn btn-primary mt-2\" @click=\"showNewFolderModal = true\">\n <i class=\"bi bi-folder-plus me-1\"></i> New Folder\n </button>\n </div>\n </div>\n\n <!-- ════════════════════════════════════════\n MODALS\n ════════════════════════════════════════ -->\n\n <!-- New Folder -->\n <div class=\"modal\" :class=\"{ 'show': showNewFolderModal }\" @click.self=\"showNewFolderModal = false\">\n <div class=\"modal-dialog modal-dialog-centered\">\n <div class=\"modal-content\">\n <div class=\"modal-header\">\n <h5 class=\"modal-title\"><i class=\"bi bi-folder-plus me-2\"></i>Create New Folder</h5>\n <button type=\"button\" class=\"btn-close\" @click=\"showNewFolderModal = false\"></button>\n </div>\n <div class=\"modal-body\">\n <label class=\"form-label\">Folder Name</label>\n <input type=\"text\" class=\"form-control\" v-model=\"newFolderName\"\n @keyup.enter=\"requestCreateFolder\" placeholder=\"e.g., Q1 2025 Drills\" />\n </div>\n <div class=\"modal-footer\">\n <button type=\"button\" class=\"btn btn-secondary\"\n @click=\"showNewFolderModal = false\">Cancel</button>\n <button type=\"button\" class=\"btn btn-primary\" @click=\"requestCreateFolder\"\n :disabled=\"!newFolderName.trim()\">Create Folder</button>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Submit Report -->\n <div class=\"modal\" :class=\"{ 'show': showReportModal }\" @click.self=\"closeReportForm\">\n <div class=\"modal-dialog modal-dialog-centered modal-lg\">\n <div class=\"modal-content\">\n <div class=\"modal-header rpt-modal-header\">\n <h5 class=\"modal-title\">\n <i\n :class=\"reportForm.report_type === 'manual' ? 'bi bi-file-earmark-text me-2' : 'bi bi-shield-check me-2'\"></i>\n {{ reportForm.report_type === 'manual' ? 'New Manual Report' : 'Submit QHSE Report' }}\n </h5>\n <div class=\"modal-type-toggle\" v-if=\"!pendingContext\">\n <button :class=\"['type-toggle-btn', { active: reportForm.report_type === 'qhse' }]\"\n @click=\"reportForm.report_type = 'qhse'\">\n <i class=\"bi bi-shield-check me-1\"></i>QHSE\n </button>\n <button :class=\"['type-toggle-btn', { active: reportForm.report_type === 'manual' }]\"\n @click=\"reportForm.report_type = 'manual'\">\n <i class=\"bi bi-file-earmark-text me-1\"></i>Manual\n </button>\n </div>\n <button type=\"button\" class=\"btn-close btn-close-white\" @click=\"closeReportForm\"></button>\n </div>\n <div class=\"modal-body\">\n\n <!-- QHSE: entity link -->\n <div class=\"rpt-entity-box\" v-if=\"reportForm.report_type === 'qhse'\">\n <label class=\"form-label fw-semibold\"><i class=\"bi bi-link-45deg me-1\"></i>Link to Drill /\n Incident</label>\n <div class=\"prefilled-entity\" v-if=\"reportForm.entity_ref && reportForm.entity_type\">\n <span class=\"entity-chip\" :class=\"reportForm.entity_type\">\n {{ reportForm.entity_type === 'drill' ? 'DRILL' : 'INCIDENT' }}\n </span>\n <strong>{{ reportForm.entity_ref }}</strong>\n <span class=\"text-muted ms-2\">{{ reportForm.entity_label }}</span>\n <button class=\"btn btn-link btn-sm text-danger ms-auto\" @click=\"clearEntityLink\"><i\n class=\"bi bi-x-circle\"></i> Clear</button>\n </div>\n <div v-else>\n <select class=\"form-control\" v-model=\"reportForm.selectedMissing\"\n @change=\"applyMissingSelection\">\n <option value=\"\">— Select a missing report (optional) —</option>\n <optgroup label=\"Missing Drill Reports\">\n <option v-for=\"r in missingReports.filter(x => x.entity_type === 'drill')\"\n :key=\"r.entity_id\" :value=\"JSON.stringify(r)\">\n {{ r.entity_ref }} — {{ r.label }}\n </option>\n </optgroup>\n <optgroup label=\"Missing Incident Reports\">\n <option v-for=\"r in missingReports.filter(x => x.entity_type === 'incident')\"\n :key=\"r.entity_id\" :value=\"JSON.stringify(r)\">\n {{ r.entity_ref }} — {{ r.label }}\n </option>\n </optgroup>\n </select>\n <small class=\"text-muted\">Linking will mark the drill / incident as reported.</small>\n </div>\n </div>\n\n <!-- Manual: category + ref -->\n <div class=\"input-row\" v-if=\"reportForm.report_type === 'manual'\">\n <div class=\"form-group\">\n <label class=\"form-label fw-semibold\">Report Category</label>\n <select class=\"form-control\" v-model=\"reportForm.manual_category\">\n <option>General</option>\n <option>Maintenance</option>\n <option>Safety Observation</option>\n <option>Environmental</option>\n <option>Audit</option>\n <option>Training</option>\n <option>Other</option>\n </select>\n </div>\n <div class=\"form-group\">\n <label class=\"form-label fw-semibold\">Reference Number</label>\n <input type=\"text\" class=\"form-control\" v-model=\"reportForm.manual_ref\"\n placeholder=\"e.g. RPT-2025-001\" />\n </div>\n </div>\n\n <!-- Drill-specific hint -->\n <div class=\"crew-hint\" v-if=\"reportForm.entity_type === 'drill'\">\n <i class=\"bi bi-info-circle-fill me-1\"></i>\n <span>\n <strong>Crew list tip:</strong> Start your Findings with\n <code>CREW: Name (Rank), Name (Rank), …</code>\n to generate a named crew participation table in the PDF.\n Otherwise the PDF will show the total count ({{ reportForm.entity_participants || 0 }}\n members) with a note to attach the signed list.\n </span>\n </div>\n\n <!-- Drill checklist — only shown when linked to a drill -->\n <div class=\"drill-checklist-box\" v-if=\"reportForm.entity_type === 'drill'\">\n <div class=\"drill-checklist-title\">\n <i class=\"bi bi-clipboard2-check me-1\"></i>\n Comments Checklist\n <span class=\"checklist-hint\">Tick = YES · unticked = NO in the PDF</span>\n </div>\n <div class=\"checklist-grid\">\n <label v-for=\"(q, idx) in drillChecklistQuestions\" :key=\"idx\"\n :class=\"['checklist-item', { checked: reportForm.drillChecklist[idx] }]\">\n <div class=\"checklist-checkbox\">\n <input type=\"checkbox\" :checked=\"reportForm.drillChecklist[idx]\"\n @change=\"reportForm.drillChecklist[idx] = $event.target.checked\" />\n <span class=\"custom-check\">\n <i class=\"bi\"\n :class=\"reportForm.drillChecklist[idx] ? 'bi-check-lg' : 'bi-x-lg'\"></i>\n </span>\n </div>\n <span class=\"checklist-q\">{{ q }}</span>\n <span class=\"checklist-answer\"\n :class=\"reportForm.drillChecklist[idx] ? 'answer-yes' : 'answer-no'\">\n {{ reportForm.drillChecklist[idx] ? 'YES' : 'NO' }}\n </span>\n </label>\n </div>\n </div>\n\n <!-- Common fields -->\n <div class=\"input-row mt-3\">\n <div class=\"form-group\">\n <label class=\"form-label fw-semibold\">Report Title *</label>\n <input type=\"text\" class=\"form-control\" v-model=\"reportForm.title\"\n :placeholder=\"reportForm.entity_ref ? `Report — ${reportForm.entity_ref}` : 'Enter report title'\" />\n </div>\n <div class=\"form-group\">\n <label class=\"form-label fw-semibold\">Submitted By *</label>\n <input type=\"text\" class=\"form-control\" v-model=\"reportForm.submittedBy\"\n placeholder=\"Your name\" />\n </div>\n </div>\n <div class=\"input-row\">\n <div class=\"form-group\">\n <label class=\"form-label fw-semibold\">Date</label>\n <input type=\"date\" class=\"form-control\" v-model=\"reportForm.date\" />\n </div>\n </div>\n <div class=\"form-group\">\n <label class=\"form-label fw-semibold\">\n {{ reportForm.entity_type === 'incident' ? 'Description of Event (Findings) *' :\n 'Findings / Summary *' }}\n <span class=\"form-hint\" v-if=\"reportForm.entity_type === 'incident'\">Pre-filled from\n incident objective — edit as needed</span>\n </label>\n <textarea class=\"form-control\" rows=\"4\" v-model=\"reportForm.findings\" :placeholder=\"reportForm.entity_type === 'drill'\n ? 'CREW: John Smith (Master), Jane Doe (Chief Officer), …\\n\\nThen describe the drill scenario and findings…'\n : reportForm.entity_type === 'incident'\n ? 'Describe what happened, when, and where…'\n : 'Describe findings, observations, and outcomes…'\">\n </textarea>\n </div>\n\n <!-- Incident-specific structured fields -->\n <template v-if=\"reportForm.entity_type === 'incident'\">\n <div class=\"incident-fields-box\">\n <div class=\"incident-fields-title\">\n <i class=\"bi bi-layout-text-window-reverse me-1\"></i>\n Incident Report Fields\n <span class=\"checklist-hint\">These map directly to the PDF sections</span>\n </div>\n <div class=\"form-group\">\n <label class=\"form-label fw-semibold\">Possible Consequences</label>\n <div class=\"field-hint\">e.g. Personal injury, damage, collision, grounding, fire,\n pollution</div>\n <textarea class=\"form-control\" rows=\"2\" v-model=\"reportForm.inc_consequences\"\n placeholder=\"Describe possible consequences…\"></textarea>\n </div>\n <div class=\"form-group\">\n <label class=\"form-label fw-semibold\">Relevant Factors / Conditions Surrounding the\n Event</label>\n <div class=\"field-hint\">e.g. weather, lighting, fatigue, time pressure</div>\n <textarea class=\"form-control\" rows=\"2\" v-model=\"reportForm.inc_factors\"\n placeholder=\"Describe relevant factors and conditions…\"></textarea>\n </div>\n <div class=\"form-group\">\n <label class=\"form-label fw-semibold\">Immediate Action Taken</label>\n <textarea class=\"form-control\" rows=\"2\" v-model=\"reportForm.inc_immediate_action\"\n placeholder=\"What was done immediately after the event?\"></textarea>\n </div>\n <div class=\"input-row\" style=\"margin-bottom:0;\">\n <div class=\"form-group\">\n <label class=\"form-label fw-semibold\">Direct Cause</label>\n <div class=\"field-hint\">e.g. failure to follow procedures, defective equipment\n </div>\n <textarea class=\"form-control\" rows=\"3\" v-model=\"reportForm.inc_direct_cause\"\n placeholder=\"Direct cause of the event…\"></textarea>\n </div>\n <div class=\"form-group\">\n <label class=\"form-label fw-semibold\">Root Cause</label>\n <div class=\"field-hint\">e.g. lack of training, management factors</div>\n <textarea class=\"form-control\" rows=\"3\" v-model=\"reportForm.inc_root_cause\"\n placeholder=\"Root / underlying cause…\"></textarea>\n </div>\n </div>\n <div class=\"form-group\">\n <label class=\"form-label fw-semibold\">Action Taken to Avoid Re-occurrence</label>\n <textarea class=\"form-control\" rows=\"2\" v-model=\"reportForm.correctiveActions\"\n placeholder=\"Corrective actions and preventive measures…\"></textarea>\n </div>\n <div class=\"form-group\" style=\"margin-bottom:0;\">\n <label class=\"form-label fw-semibold\">Any Other Remarks</label>\n <textarea class=\"form-control\" rows=\"2\" v-model=\"reportForm.inc_remarks\"\n placeholder=\"Additional remarks…\"></textarea>\n </div>\n </div>\n </template>\n\n <!-- Non-incident: standard corrective actions -->\n <template v-else>\n <div class=\"form-group\">\n <label class=\"form-label fw-semibold\">Corrective Actions</label>\n <textarea class=\"form-control\" rows=\"3\" v-model=\"reportForm.correctiveActions\"\n placeholder=\"List any corrective actions required or taken…\"></textarea>\n </div>\n </template>\n\n <!-- Attachments -->\n <div class=\"form-group\">\n <label class=\"form-label fw-semibold\">\n Attach Files\n <span class=\"form-hint\">Images embed in PDF · all files go into the ZIP</span>\n </label>\n <div class=\"file-drop-zone\" @click=\"$refs.reportFileInput.click()\" @dragover.prevent\n @drop.prevent=\"handleReportFileDrop\">\n <i class=\"bi bi-cloud-upload\" style=\"font-size:2rem;color:#6c757d;\"></i>\n <p class=\"mb-0 mt-2 text-muted\">Click or drag files here (PNG, JPG, PDF…)</p>\n <div class=\"attached-files\" v-if=\"reportForm.files.length > 0\">\n <span class=\"attached-chip\" v-for=\"(f, i) in reportForm.files\" :key=\"i\">\n <i class=\"bi me-1\" :class=\"fileIcon(f.type)\"></i>{{ f.name }}\n <button @click.stop=\"removeReportFile(i)\"><i class=\"bi bi-x\"></i></button>\n </span>\n </div>\n </div>\n <input ref=\"reportFileInput\" type=\"file\" multiple style=\"display:none\"\n @change=\"handleReportFileAttach\" />\n </div>\n\n <!-- ZIP preview -->\n <div class=\"zip-hint\" v-if=\"reportForm.title || reportForm.files.length > 0\">\n <i class=\"bi bi-file-zip me-1\"></i>\n Download will produce <strong>{{ zipName }}.zip</strong>\n containing the report PDF\n <span v-if=\"reportForm.files.length\"> + {{ reportForm.files.length }} attachment{{\n reportForm.files.length !== 1 ?\n 's' : '' }}</span>\n </div>\n </div>\n <div class=\"modal-footer\">\n <button type=\"button\" class=\"btn btn-secondary\" @click=\"closeReportForm\">Cancel</button>\n <button type=\"button\" class=\"btn btn-success\" @click=\"requestSubmitReport\"\n :disabled=\"isSubmitting || !reportForm.title || !reportForm.submittedBy || !reportForm.findings\">\n <span v-if=\"isSubmitting\"><span class=\"spinner-sm\"></span> Submitting…</span>\n <span v-else><i class=\"bi bi-check-circle me-1\"></i>Submit Report</span>\n </button>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Report Viewer -->\n <div class=\"modal\" :class=\"{ 'show': showViewModal }\" @click.self=\"closeViewer\">\n <div class=\"modal-dialog modal-dialog-centered modal-lg\">\n <div class=\"modal-content\" v-if=\"viewingReport\">\n <div class=\"modal-header rpt-modal-header\">\n <div class=\"d-flex align-items-center gap-2\">\n <span class=\"entity-chip me-2\" :class=\"reportTypeClass(viewingReport)\">{{\n reportTypeLabel(viewingReport) }}</span>\n <strong style=\"color:#fff\">{{ viewingReport.title }}</strong>\n </div>\n <button type=\"button\" class=\"btn-close btn-close-white\" @click=\"closeViewer\"></button>\n </div>\n <div class=\"modal-body\">\n <div class=\"view-grid\">\n <div class=\"view-item\"><label>Reference</label><span class=\"ref-mono\">{{\n viewingReport.entityRef ||\n '—' }}</span></div>\n <div class=\"view-item\"><label>Type</label><span>{{ reportTypeLabel(viewingReport) }}</span>\n </div>\n <div class=\"view-item\" v-if=\"viewingReport.manualCategory\"><label>Category</label><span>{{\n viewingReport.manualCategory }}</span></div>\n <div class=\"view-item\"><label>Submitted By</label><span>{{ viewingReport.submittedBy\n }}</span></div>\n <div class=\"view-item\"><label>Date</label><span>{{ viewingReport.date }}</span></div>\n <div class=\"view-item\" v-if=\"viewingReport.vessel\"><label>Vessel / Location</label><span>{{\n viewingReport.vessel }}</span></div>\n <div class=\"view-item\"><label>Submitted At</label><span>{{\n formatDate(viewingReport.submittedAt)\n }}</span></div>\n <!-- Drill-specific meta -->\n <div class=\"view-item\" v-if=\"viewingReport.entity_subtype\"><label>Drill Type</label><span>{{\n viewingReport.entity_subtype }}</span></div>\n <div class=\"view-item\" v-if=\"viewingReport.entity_creator\"><label>Drill\n Master</label><span>{{\n viewingReport.entity_creator }}</span></div>\n <div class=\"view-item\" v-if=\"viewingReport.entity_duration\"><label>Duration</label><span>{{\n viewingReport.entity_duration }}</span></div>\n <div class=\"view-item\" v-if=\"viewingReport.entity_participants\">\n <label>Participants</label><span>{{\n viewingReport.entity_participants }}</span></div>\n </div>\n <div class=\"view-section\">\n <label>Findings / Summary</label>\n <div class=\"view-text\">{{ viewingReport.findings }}</div>\n </div>\n <div class=\"view-section\" v-if=\"viewingReport.correctiveActions\">\n <label>Corrective Actions</label>\n <div class=\"view-text\">{{ viewingReport.correctiveActions }}</div>\n </div>\n <div class=\"view-section\" v-if=\"getFilesForReport(viewingReport.id).length > 0\">\n <label>Attachments</label>\n <div class=\"attached-files mt-1\">\n <a v-for=\"f in getFilesForReport(viewingReport.id)\" :key=\"f.id\" :href=\"f.publicUrl\"\n target=\"_blank\" rel=\"noopener\" class=\"attached-chip attached-chip--link\">\n <i class=\"bi me-1\" :class=\"fileIcon(f.type)\"></i>{{ f.name }}\n <small class=\"text-muted ms-1\">({{ formatFileSize(f.size) }})</small>\n <i class=\"bi bi-box-arrow-up-right ms-1\" style=\"font-size:10px;\"></i>\n </a>\n </div>\n </div>\n </div>\n <div class=\"modal-footer\">\n <button class=\"btn btn-danger btn-sm me-auto\" @click=\"requestDeleteReport(viewingReport.id)\">\n <i class=\"bi bi-trash\"></i> Delete\n </button>\n <button class=\"btn btn-secondary\" @click=\"closeViewer\">Close</button>\n <button class=\"btn btn-primary\" @click=\"downloadReport(viewingReport)\"\n :disabled=\"generatingPdf === viewingReport.id\">\n <span v-if=\"generatingPdf === viewingReport.id\"><span class=\"spinner-sm\"></span> Building\n ZIP…</span>\n <span v-else><i class=\"bi bi-file-zip me-1\"></i>Download ZIP</span>\n </button>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Hidden file input for user folders -->\n <input ref=\"fileInput\" type=\"file\" multiple style=\"display:none;\" @change=\"handleFileSelection\" />\n </div>\n</template>\n\n<script>\nexport default {\n name: 'Reports',\n\n props: {\n reports: { type: Array, default: () => [] },\n reportFiles: { type: Array, default: () => [] },\n folders: { type: Array, default: () => [] },\n isLoading: { type: Boolean, default: false },\n isSubmitting: { type: Boolean, default: false },\n pendingContext: { type: Object, default: null },\n missingReports: { type: Array, default: () => [] },\n highlightRef: { type: String, default: null },\n },\n\n emits: [\n 'report-submit-requested',\n 'report-delete-requested',\n 'folder-create-requested',\n 'files-add-requested',\n 'file-remove-requested',\n 'folder-delete-requested',\n 'report-viewed',\n ],\n\n data() {\n return {\n activeTab: 'all',\n showNewFolderModal: false,\n newFolderName: '',\n selectedFolder: null,\n expandedFolders: [],\n\n showReportModal: false,\n showViewModal: false,\n viewingReport: null,\n highlightedRef: null,\n bannerDismissed: false,\n generatingPdf: null,\n\n drillChecklistQuestions: [\n 'Is the reaction of crew members satisfactory?',\n 'Is the equipment functioning properly?',\n 'Is the crew properly trained and ready?',\n 'Was debriefing conducted on completion of drill?',\n 'Is time log of various activities marked on checklist?',\n ],\n\n reportForm: this.emptyForm(),\n };\n },\n\n computed: {\n drillReports() { return this.reports.filter(r => r.entityType === 'drill'); },\n incidentReports() { return this.reports.filter(r => r.entityType === 'incident'); },\n manualReports() {\n return this.reports.filter(r =>\n r.entityType === 'manual' ||\n (!r.entityType && !r.entityRef?.startsWith('DRILL') && !r.entityRef?.startsWith('INC'))\n );\n },\n filteredReports() {\n switch (this.activeTab) {\n case 'drill': return this.drillReports;\n case 'incident': return this.incidentReports;\n case 'manual': return this.manualReports;\n default: return this.reports;\n }\n },\n zipName() {\n const ref = this.reportForm.entity_ref || this.reportForm.manual_ref || this.reportForm.title;\n return (ref || 'report').replace(/[^a-zA-Z0-9_-]/g, '_').slice(0, 50);\n },\n },\n\n watch: {\n pendingContext: {\n immediate: true,\n handler(ctx) {\n if (ctx) {\n this.reportForm.entity_type = ctx.entity_type;\n this.reportForm.entity_id = ctx.entity_id;\n this.reportForm.entity_ref = ctx.entity_ref;\n this.reportForm.entity_label = ctx.title;\n this.reportForm.title = ctx.title || `Report — ${ctx.entity_ref}`;\n this.reportForm.report_type = 'qhse';\n this.reportForm.entity_creator = ctx.entity_creator;\n this.reportForm.entity_objectives = ctx.entity_objectives;\n this.reportForm.entity_subtype = ctx.entity_subtype;\n this.reportForm.entity_duration = ctx.entity_duration;\n this.reportForm.entity_participants = ctx.entity_participants;\n // Pre-fill findings with the entity objective for incidents\n if (ctx.entity_type === 'incident' && ctx.entity_objectives) {\n this.reportForm.findings = ctx.entity_objectives;\n }\n }\n },\n },\n highlightRef: {\n immediate: true,\n handler(ref) {\n if (ref) {\n this.highlightedRef = ref;\n this.$nextTick(() => this.scrollToReport(ref));\n }\n },\n },\n isSubmitting(val, prev) {\n if (prev === true && val === false) {\n this.showReportModal = false;\n this.resetForm();\n }\n },\n },\n\n methods: {\n\n // ─── Helpers ────────────────────────────────────────────────────────────\n\n emptyForm() {\n return {\n report_type: 'qhse', manual_category: 'General', manual_ref: '',\n title: '', submittedBy: '', vessel: '', folderId: '',\n date: new Date().toISOString().split('T')[0],\n findings: '', correctiveActions: '', files: [],\n entity_type: '', entity_id: '', entity_ref: '', entity_label: '',\n entity_creator: '', entity_objectives: '', entity_subtype: '',\n entity_duration: '', entity_participants: null,\n selectedMissing: '',\n drillChecklist: [true, true, true, true, true],\n // incident-specific structured fields\n inc_consequences: '',\n inc_factors: '',\n inc_immediate_action: '',\n inc_direct_cause: '',\n inc_root_cause: '',\n inc_remarks: '',\n };\n },\n\n getFilesForReport(reportId) {\n return this.reportFiles.filter(f => f.report_id === reportId || f.reportId === reportId);\n },\n\n safeRef(report) {\n return (report.entityRef || report.title || 'report').replace(/[^a-zA-Z0-9_-]/g, '_').slice(0, 60);\n },\n\n reportTypeClass(report) {\n const t = report?.entityType || report?.entity_type;\n if (t === 'drill') return 'drill';\n if (t === 'incident') return 'incident';\n return 'manual';\n },\n\n reportTypeLabel(report) {\n const t = report?.entityType || report?.entity_type;\n if (t === 'drill') return 'DRILL';\n if (t === 'incident') return 'INCIDENT';\n const cat = report?.manualCategory || report?.manual_category;\n return cat ? cat.toUpperCase() : 'MANUAL';\n },\n\n fileIcon(type) {\n if (!type) return 'bi-file-earmark';\n if (type.startsWith('image/')) return 'bi-file-earmark-image';\n if (type === 'application/pdf') return 'bi-file-earmark-pdf-fill';\n if (type.includes('word')) return 'bi-file-earmark-word';\n if (type.includes('sheet') || type.includes('excel')) return 'bi-file-earmark-excel';\n return 'bi-file-earmark';\n },\n\n ffiIconClass(file) {\n const t = file?.type || '';\n if (t.startsWith('image/')) return 'ffi-icon--img';\n if (t === 'application/pdf') return 'ffi-icon--pdf';\n return 'ffi-icon--generic';\n },\n\n // ─── Banner ─────────────────────────────────────────────────────────────\n dismissBanner() { this.bannerDismissed = true; },\n\n // ─── Report form ─────────────────────────────────────────────────────────\n\n openReportForm(type = 'qhse') {\n this.reportForm = this.emptyForm();\n this.reportForm.report_type = type;\n if (type === 'qhse' && this.pendingContext) {\n this.reportForm.entity_creator = this.pendingContext.entity_creator;\n this.reportForm.entity_objectives = this.pendingContext.entity_objectives;\n this.reportForm.entity_subtype = this.pendingContext.entity_subtype;\n this.reportForm.entity_duration = this.pendingContext.entity_duration;\n this.reportForm.entity_participants = this.pendingContext.entity_participants;\n this.reportForm.entity_type = this.pendingContext.entity_type;\n this.reportForm.entity_id = this.pendingContext.entity_id;\n this.reportForm.entity_ref = this.pendingContext.entity_ref;\n this.reportForm.entity_label = this.pendingContext.title;\n this.reportForm.title = this.pendingContext.title || `Report — ${this.pendingContext.entity_ref}`;\n if (this.pendingContext.entity_type === 'incident' && this.pendingContext.entity_objectives) {\n this.reportForm.findings = this.pendingContext.entity_objectives;\n }\n }\n this.showReportModal = true;\n },\n\n closeReportForm() { this.showReportModal = false; },\n\n clearEntityLink() {\n Object.assign(this.reportForm, {\n entity_type: '', entity_id: '', entity_ref: '', entity_label: '',\n entity_creator: '', entity_objectives: '', entity_subtype: '',\n entity_duration: '', entity_participants: null, selectedMissing: '',\n });\n },\n\n applyMissingSelection() {\n if (!this.reportForm.selectedMissing) return;\n const r = JSON.parse(this.reportForm.selectedMissing);\n this.reportForm.entity_type = r.entity_type;\n this.reportForm.entity_id = r.entity_id;\n this.reportForm.entity_ref = r.entity_ref;\n this.reportForm.entity_label = r.label;\n this.reportForm.entity_creator = r.entity_creator || '';\n this.reportForm.entity_objectives = r.entity_objectives || '';\n this.reportForm.entity_subtype = r.entity_subtype || '';\n this.reportForm.entity_duration = r.entity_duration || '';\n this.reportForm.entity_participants = r.entity_participants || null;\n if (!this.reportForm.title) this.reportForm.title = `Report — ${r.entity_ref}`;\n if (r.entity_type === 'incident' && r.entity_objectives && !this.reportForm.findings) {\n this.reportForm.findings = r.entity_objectives;\n }\n },\n\n requestSubmitReport() {\n if (!this.reportForm.title || !this.reportForm.submittedBy || !this.reportForm.findings) return;\n this.$emit('report-submit-requested', {\n entity_type: this.reportForm.report_type === 'manual' ? 'manual' : this.reportForm.entity_type,\n entity_id: this.reportForm.entity_id || null,\n entity_ref: this.reportForm.report_type === 'manual'\n ? (this.reportForm.manual_ref || null)\n : this.reportForm.entity_ref,\n title: this.reportForm.title,\n submittedBy: this.reportForm.submittedBy,\n vessel: this.reportForm.vessel || null,\n date: this.reportForm.date,\n findings: this.reportForm.findings,\n correctiveActions: this.reportForm.correctiveActions || null,\n folderId: null,\n folderName: null,\n manual_category: this.reportForm.report_type === 'manual' ? this.reportForm.manual_category : null,\n files: this.reportForm.files,\n // drill / incident enrichment fields\n entity_subtype: this.reportForm.entity_subtype || null,\n entity_creator: this.reportForm.entity_creator || null,\n entity_objectives: this.reportForm.entity_objectives || null,\n entity_duration: this.reportForm.entity_duration || null,\n entity_participants: this.reportForm.entity_participants || null,\n drill_checklist: [...this.reportForm.drillChecklist],\n // incident structured fields\n inc_consequences: this.reportForm.inc_consequences || null,\n inc_factors: this.reportForm.inc_factors || null,\n inc_immediate_action: this.reportForm.inc_immediate_action || null,\n inc_direct_cause: this.reportForm.inc_direct_cause || null,\n inc_root_cause: this.reportForm.inc_root_cause || null,\n inc_remarks: this.reportForm.inc_remarks || null,\n });\n },\n\n resetForm() { this.reportForm = this.emptyForm(); },\n\n highlightReport(entityRef) {\n this.highlightedRef = entityRef;\n this.$nextTick(() => this.scrollToReport(entityRef));\n setTimeout(() => { this.highlightedRef = null; }, 3000);\n },\n\n // ─── View ────────────────────────────────────────────────────────────────\n\n viewReport(report) {\n this.viewingReport = report;\n this.showViewModal = true;\n this.$emit('report-viewed', report);\n },\n\n closeViewer() {\n this.showViewModal = false;\n this.viewingReport = null;\n },\n\n // Closes the modal immediately, then emits so ReportsView can confirm + delete\n requestDeleteReport(reportId) {\n this.closeViewer();\n this.$emit('report-delete-requested', reportId);\n },\n\n scrollToReport(ref) {\n this.$nextTick(() => {\n const el = this.$refs['report-' + ref];\n if (el) (Array.isArray(el) ? el[0] : el)?.scrollIntoView({ behavior: 'smooth', block: 'center' });\n });\n },\n\n jumpToFolder(report) {\n this.activeTab = 'folders';\n const key = 'auto-' + report.id;\n if (!this.expandedFolders.includes(key)) this.expandedFolders.push(key);\n this.$nextTick(() => {\n const ref = report.entityRef || report.id;\n const el = this.$refs['folder-' + ref];\n if (el) (Array.isArray(el) ? el[0] : el)?.scrollIntoView({ behavior: 'smooth', block: 'center' });\n });\n },\n\n // ─── Download ────────────────────────────────────────────────────────────\n\n async downloadReport(report) {\n this.generatingPdf = report.id;\n try {\n await this._loadLibraries();\n const attachments = this.getFilesForReport(report.id);\n const imageFiles = attachments.filter(f => f.type?.startsWith('image/'));\n const reportPdfBytes = await this._buildReportPdf(report, imageFiles);\n await this._buildAndDownloadZip(report, reportPdfBytes, attachments);\n } catch (err) {\n console.error('ZIP generation failed:', err);\n alert('Failed to generate download: ' + err.message);\n } finally {\n this.generatingPdf = null;\n }\n },\n\n async downloadReportPdfOnly(report) {\n this.generatingPdf = report.id + '-pdf';\n try {\n await this._loadLibraries();\n const imageFiles = this.getFilesForReport(report.id).filter(f => f.type?.startsWith('image/'));\n const reportPdfBytes = await this._buildReportPdf(report, imageFiles);\n const blob = new Blob([reportPdfBytes], { type: 'application/pdf' });\n this._triggerDownload(blob, `${this.safeRef(report)}_report.pdf`);\n } catch (err) {\n alert('Failed to generate PDF: ' + err.message);\n } finally {\n this.generatingPdf = null;\n }\n },\n\n async _loadLibraries() {\n if (!window.jspdf) await this._loadScript('https://cdnjs.cloudflare.com/ajax/libs/jspdf/2.5.1/jspdf.umd.min.js');\n if (!window.JSZip) await this._loadScript('https://cdnjs.cloudflare.com/ajax/libs/jszip/3.10.1/jszip.min.js');\n },\n\n _loadScript(src) {\n return new Promise((resolve, reject) => {\n if (document.querySelector(`script[src=\"${src}\"]`)) { resolve(); return; }\n const s = document.createElement('script');\n s.src = src; s.onload = resolve; s.onerror = reject;\n document.head.appendChild(s);\n });\n },\n\n // ─── PDF router ──────────────────────────────────────────────────────────\n\n async _buildReportPdf(report, imageFiles = []) {\n const type = report.entityType || report.entity_type;\n if (type === 'drill') return this._buildDrillPdf(report, imageFiles);\n if (type === 'incident') return this._buildIncidentPdf(report, imageFiles);\n return this._buildManualPdf(report, imageFiles);\n },\n\n // ─── DRILL PDF ───────────────────────────────────────────────────────────\n\n async _buildDrillPdf(report, imageFiles = []) {\n const { jsPDF } = window.jspdf;\n const doc = new jsPDF({ orientation: 'portrait', unit: 'mm', format: 'a4' });\n const pageW = 210, margin = 15, contentW = pageW - margin * 2;\n let y = 0;\n\n const checkPage = (needed = 10) => {\n if (y + needed > 275) { doc.addPage(); y = 20; }\n };\n\n const sectionHeading = (text) => {\n checkPage(12);\n doc.setFillColor(26, 54, 107);\n doc.rect(margin, y, contentW, 7, 'F');\n doc.setTextColor(255, 255, 255);\n doc.setFontSize(8.5);\n doc.setFont('helvetica', 'bold');\n doc.text(text.toUpperCase(), margin + 3, y + 5);\n y += 10;\n doc.setTextColor(30, 30, 30);\n };\n\n const fieldRow = (label, value, labelWidth = 68) => {\n checkPage(7);\n doc.setFontSize(9);\n doc.setFont('helvetica', 'bold');\n doc.setTextColor(80, 90, 110);\n doc.text(label, margin + 2, y);\n doc.setFont('helvetica', 'normal');\n doc.setTextColor(20, 20, 20);\n doc.text(':', margin + labelWidth - 6, y);\n const valLines = doc.splitTextToSize(String(value || '—'), contentW - labelWidth - 4);\n doc.text(valLines, margin + labelWidth, y);\n y += Math.max(valLines.length * 5, 5) + 2;\n };\n\n // ── Header band ──────────────────────────────────────────────────────\n doc.setFillColor(26, 54, 107);\n doc.rect(0, 0, pageW, 24, 'F');\n doc.setDrawColor(255, 200, 50);\n doc.setLineWidth(1.2);\n doc.line(margin, 23.4, pageW - margin, 23.4);\n doc.setTextColor(255, 255, 255);\n doc.setFontSize(14);\n doc.setFont('helvetica', 'bold');\n doc.text('EMERGENCY DRILL REPORT', pageW / 2, 10, { align: 'center' });\n doc.setFontSize(8);\n doc.setFont('helvetica', 'normal');\n doc.setTextColor(200, 215, 240);\n doc.text('Quality, Health, Safety & Environment Management System', pageW / 2, 17, { align: 'center' });\n y = 30;\n\n // Ref badge\n if (report.entityRef) {\n doc.setFillColor(240, 245, 255);\n doc.roundedRect(pageW - margin - 44, 26, 44, 8, 2, 2, 'F');\n doc.setTextColor(26, 54, 107);\n doc.setFontSize(8);\n doc.setFont('helvetica', 'bold');\n doc.text(report.entityRef, pageW - margin - 2, 31, { align: 'right' });\n doc.setTextColor(30, 30, 30);\n }\n\n // ── Vessel / Drill kind grid ──────────────────────────────────────────\n doc.setDrawColor(180, 190, 210);\n doc.setLineWidth(0.4);\n doc.rect(margin, y, contentW, 28, 'S');\n doc.line(margin + contentW / 2, y, margin + contentW / 2, y + 28);\n doc.line(margin, y + 14, margin + contentW / 2, y + 14);\n\n // Vessel name\n doc.setFontSize(8); doc.setFont('helvetica', 'bold'); doc.setTextColor(80, 90, 110);\n doc.text('VESSEL:', margin + 3, y + 6);\n doc.setFont('helvetica', 'bold'); doc.setTextColor(20, 20, 20); doc.setFontSize(10);\n doc.text(String(report.vessel || '—').toUpperCase(), margin + 22, y + 6);\n\n // Date / place\n doc.setFontSize(8); doc.setFont('helvetica', 'bold'); doc.setTextColor(80, 90, 110);\n doc.text('DATE / PLACE:', margin + 3, y + 20);\n doc.setFont('helvetica', 'normal'); doc.setTextColor(20, 20, 20);\n doc.text(`${report.date || '—'} / ${report.vessel || '—'}`, margin + 33, y + 20);\n\n // Kind of drill\n const hx = margin + contentW / 2 + 3;\n doc.setFontSize(8); doc.setFont('helvetica', 'bold'); doc.setTextColor(80, 90, 110);\n doc.text('KIND OF DRILL:', hx, y + 6);\n doc.setFontSize(11); doc.setFont('helvetica', 'bold'); doc.setTextColor(26, 54, 107);\n doc.text(String(report.entity_subtype || '—').toUpperCase(), hx, y + 16);\n doc.setFontSize(7.5); doc.setFont('helvetica', 'italic'); doc.setTextColor(120, 120, 120);\n doc.text('RELEVANT IMAGES/NOTES ARE ATTACHED', hx, y + 23);\n\n y += 32;\n\n // ── Drill details ─────────────────────────────────────────────────────\n sectionHeading('Drill Details');\n fieldRow('Drill Master / Conducted By', report.entity_creator);\n fieldRow('Duration', report.entity_duration);\n fieldRow('Objectives', report.entity_objectives);\n fieldRow('Submitted By', report.submittedBy);\n fieldRow('Submitted At', this.formatDate(report.submittedAt));\n y += 2;\n\n // ── Crew participation table ──────────────────────────────────────────\n const participantCount = report.entity_participants || 0;\n sectionHeading(`Crew Participation — ${participantCount} member${participantCount !== 1 ? 's' : ''} participated`);\n\n // Parse crew from findings if prefixed with CREW:\n const crewLines = (() => {\n const raw = (report.findings || '').trim();\n if (/^CREW:/i.test(raw)) {\n // Everything up to first blank line after CREW: is the crew list\n const crewSection = raw.replace(/^CREW:\\s*/i, '').split(/\\n\\n/)[0];\n return crewSection.split(/[\\n,]+/).map(s => s.trim()).filter(Boolean);\n }\n // Fallback: show drill master + submitter\n const list = [];\n if (report.entity_creator) list.push(`${report.entity_creator} (Drill Master)`);\n if (report.submittedBy && report.submittedBy !== report.entity_creator)\n list.push(`${report.submittedBy} (Reporter)`);\n return list;\n })();\n\n // Table header\n checkPage(14);\n const colNr = margin, wNr = 12;\n const colName = margin + wNr, wName = contentW - wNr;\n\n doc.setFillColor(235, 240, 250);\n doc.rect(colNr, y, contentW, 7, 'F');\n doc.setFontSize(8); doc.setFont('helvetica', 'bold'); doc.setTextColor(26, 54, 107);\n doc.text('NO.', colNr + 2, y + 5);\n doc.text('NAME / RANK', colName + 2, y + 5);\n y += 8;\n\n if (crewLines.length > 0) {\n crewLines.forEach((name, idx) => {\n checkPage(7);\n if (idx % 2 === 0) {\n doc.setFillColor(249, 250, 252);\n doc.rect(colNr, y - 1, contentW, 7, 'F');\n }\n doc.setFontSize(8.5); doc.setFont('helvetica', 'normal'); doc.setTextColor(30, 30, 30);\n doc.text(String(idx + 1), colNr + 2, y + 4);\n doc.text(doc.splitTextToSize(name, wName - 4)[0], colName + 2, y + 4);\n y += 7;\n });\n } else {\n checkPage(8);\n doc.setFontSize(8.5); doc.setFont('helvetica', 'italic'); doc.setTextColor(150, 150, 150);\n doc.text(\n `${participantCount} crew members participated — attach signed crew list with participants' signatures`,\n colName + 2, y + 4\n );\n y += 8;\n }\n y += 4;\n\n // ── Comments checklist — driven by report.drill_checklist ─────────────\n sectionHeading('Comments');\n const checkQuestions = [\n 'Is the reaction of crew members satisfactory?',\n 'Is the equipment functioning properly?',\n 'Is the crew properly trained and ready?',\n 'Was debriefing conducted on completion of drill?',\n 'Is time log of various activities marked on checklist?',\n ];\n // Parse stored answers (array of booleans). Fall back to all-true if absent.\n const checkAnswers = (() => {\n const raw = report.drill_checklist || report.drillChecklist;\n if (Array.isArray(raw)) return raw;\n try { return JSON.parse(raw); } catch { return [true, true, true, true, true]; }\n })();\n checkQuestions.forEach((q, idx) => {\n checkPage(9);\n const yes = checkAnswers[idx] !== false; // undefined → true\n doc.setFontSize(8.5); doc.setFont('helvetica', 'normal'); doc.setTextColor(30, 30, 30);\n doc.text(`${idx + 1}. ${q}`, margin + 3, y + 5);\n if (yes) {\n doc.setFillColor(212, 237, 218);\n doc.roundedRect(pageW - margin - 18, y + 1, 18, 6, 2, 2, 'F');\n doc.setTextColor(21, 87, 36); doc.setFont('helvetica', 'bold'); doc.setFontSize(7.5);\n doc.text('YES', pageW - margin - 9, y + 5.5, { align: 'center' });\n } else {\n doc.setFillColor(248, 215, 218);\n doc.roundedRect(pageW - margin - 18, y + 1, 18, 6, 2, 2, 'F');\n doc.setTextColor(114, 28, 36); doc.setFont('helvetica', 'bold'); doc.setFontSize(7.5);\n doc.text('NO', pageW - margin - 9, y + 5.5, { align: 'center' });\n }\n y += 9;\n });\n y += 3;\n\n // ── Drill scenario / findings ─────────────────────────────────────────\n // Strip the CREW: block from findings before printing\n const scenarioText = (() => {\n const raw = (report.findings || '').trim();\n if (/^CREW:/i.test(raw)) {\n // Remove everything up to the first blank line\n const parts = raw.split(/\\n\\n+/);\n return parts.slice(1).join('\\n\\n').trim();\n }\n return raw;\n })();\n\n if (scenarioText) {\n sectionHeading('Drill Scenario & Findings');\n checkPage(10);\n doc.setFontSize(9); doc.setFont('helvetica', 'normal'); doc.setTextColor(30, 30, 30);\n const lines = doc.splitTextToSize(scenarioText, contentW - 6);\n lines.forEach(line => {\n checkPage(6);\n doc.text(line, margin + 3, y);\n y += 5.5;\n });\n y += 4;\n }\n\n // ── Suggestions / corrective actions ─────────────────────────────────\n if (report.correctiveActions) {\n sectionHeading('Suggestions for Improvement & Corrective Actions');\n checkPage(10);\n doc.setFontSize(9); doc.setFont('helvetica', 'normal'); doc.setTextColor(30, 30, 30);\n const lines = doc.splitTextToSize(report.correctiveActions, contentW - 6);\n lines.forEach(line => {\n checkPage(6);\n doc.text(line, margin + 3, y);\n y += 5.5;\n });\n y += 4;\n }\n\n // ── Remarks box ───────────────────────────────────────────────────────\n checkPage(22);\n sectionHeading('Remarks');\n doc.setDrawColor(180, 190, 210); doc.setLineWidth(0.3);\n doc.rect(margin, y, contentW, 16, 'S');\n doc.setFontSize(8.5); doc.setFont('helvetica', 'italic'); doc.setTextColor(140, 140, 140);\n doc.text('Drill carried out satisfactorily.', margin + 3, y + 8);\n y += 20;\n\n // ── Embedded images ───────────────────────────────────────────────────\n for (const imgFile of imageFiles) {\n try {\n let dataUrl;\n if (imgFile.file instanceof File) dataUrl = await this._fileToDataUrl(imgFile.file);\n else if (imgFile.publicUrl) dataUrl = await this._fetchImageAsDataUrl(imgFile.publicUrl);\n if (!dataUrl) continue;\n checkPage(30);\n sectionHeading('Attachment: ' + imgFile.name);\n const props = doc.getImageProperties(dataUrl);\n const ratio = Math.min(contentW / props.width, 80 / props.height);\n const iw = props.width * ratio, ih = props.height * ratio;\n checkPage(ih + 5);\n doc.addImage(dataUrl, imgFile.type?.split('/')[1]?.toUpperCase() || 'JPEG', margin, y, iw, ih);\n y += ih + 8;\n } catch (e) { console.warn('Could not embed image', imgFile.name, e); }\n }\n\n // ── Signature block ───────────────────────────────────────────────────\n \n\n // ── Footer ────────────────────────────────────────────────────────────\n const totalPages = doc.getNumberOfPages();\n for (let p = 1; p <= totalPages; p++) {\n doc.setPage(p);\n doc.setFillColor(26, 54, 107);\n doc.rect(0, 287, pageW, 10, 'F');\n doc.setTextColor(180, 200, 240); doc.setFontSize(7.5); doc.setFont('helvetica', 'normal');\n doc.text(`Emergency Drill Report · Generated ${new Date().toLocaleDateString('en-GB')} · Page ${p} of ${totalPages}`, margin, 293);\n if (report.entityRef) doc.text(report.entityRef, pageW - margin, 293, { align: 'right' });\n }\n\n return doc.output('arraybuffer');\n },\n\n // ─── INCIDENT PDF ────────────────────────────────────────────────────────\n\n async _buildIncidentPdf(report, imageFiles = []) {\n const { jsPDF } = window.jspdf;\n const doc = new jsPDF({ orientation: 'portrait', unit: 'mm', format: 'a4' });\n const pageW = 210, margin = 15, contentW = pageW - margin * 2;\n let y = 0;\n\n const checkPage = (needed = 10) => {\n if (y + needed > 275) { doc.addPage(); y = 20; }\n };\n\n /**\n * Bordered labelled box — mirrors the Near Miss Report form style.\n * label — small-caps field label shown inside the top of the box\n * text — content (may be null/empty — leaves a blank writable area)\n * minHeight — minimum box height in mm\n */\n const labelledBox = (label, text, minHeight = 18) => {\n const bodyText = text ? doc.splitTextToSize(String(text), contentW - 6) : [];\n const textH = bodyText.length * 5.5;\n const boxH = Math.max(minHeight, textH + 14);\n checkPage(boxH + 4);\n\n doc.setDrawColor(140, 150, 165);\n doc.setLineWidth(0.35);\n doc.rect(margin, y, contentW, boxH, 'S');\n\n // Label\n doc.setFontSize(7.5); doc.setFont('helvetica', 'bold'); doc.setTextColor(70, 80, 100);\n const labelLines = doc.splitTextToSize(label.toUpperCase(), contentW - 6);\n labelLines.forEach((ll, i) => doc.text(ll, margin + 3, y + 5 + i * 4));\n const labelH = labelLines.length * 4 + 2;\n\n // Thin rule under label\n doc.setDrawColor(200, 208, 220); doc.setLineWidth(0.2);\n doc.line(margin + 1, y + labelH + 2, margin + contentW - 1, y + labelH + 2);\n\n if (bodyText.length > 0) {\n doc.setFontSize(9.5); doc.setFont('helvetica', 'normal'); doc.setTextColor(20, 20, 20);\n let ty = y + labelH + 7;\n bodyText.forEach(line => { doc.text(line, margin + 3, ty); ty += 5.5; });\n }\n\n y += boxH + 3;\n };\n\n // ── Header ────────────────────────────────────────────────────────────\n doc.setFillColor(26, 54, 107);\n doc.rect(0, 0, pageW, 16, 'F');\n doc.setTextColor(255, 255, 255);\n doc.setFontSize(12); doc.setFont('helvetica', 'bold');\n const incLabel = (report.entity_subtype || report.entityType || 'INCIDENT').toUpperCase() + ' REPORT';\n doc.text(incLabel, margin, 10);\n doc.setFontSize(7.5); doc.setFont('helvetica', 'normal'); doc.setTextColor(200, 215, 240);\n doc.text(`Ref: ${report.entityRef || '—'}`, pageW - margin, 8, { align: 'right' });\n doc.text(`Date: ${report.date || '—'}`, pageW - margin, 13, { align: 'right' });\n y = 20;\n\n // Form number + submitted by row\n doc.setFontSize(8); doc.setFont('helvetica', 'bold'); doc.setTextColor(80, 90, 110);\n doc.text('FORM NUMBER:', margin, y + 4);\n doc.setFont('helvetica', 'normal'); doc.setTextColor(20, 20, 20);\n doc.text(report.entityRef || '—', margin + 30, y + 4);\n doc.setFont('helvetica', 'bold'); doc.setTextColor(80, 90, 110);\n doc.text('SUBMITTED BY:', pageW / 2, y + 4);\n doc.setFont('helvetica', 'normal'); doc.setTextColor(20, 20, 20);\n doc.text(report.submittedBy || '—', pageW / 2 + 28, y + 4);\n y += 10;\n\n // ── 2-col meta: vessel | severity/type ───────────────────────────────\n const halfW = (contentW - 2) / 2;\n doc.setDrawColor(140, 150, 165); doc.setLineWidth(0.35);\n doc.rect(margin, y, halfW, 14, 'S');\n doc.rect(margin + halfW + 2, y, halfW, 14, 'S');\n\n doc.setFontSize(7.5); doc.setFont('helvetica', 'bold'); doc.setTextColor(80, 90, 110);\n doc.text('VESSEL NAME', margin + 3, y + 5);\n doc.text('SEVERITY / TYPE', margin + halfW + 5, y + 5);\n doc.setFontSize(10); doc.setFont('helvetica', 'bold'); doc.setTextColor(20, 20, 20);\n doc.text(String(report.vessel || '—'), margin + 3, y + 12);\n doc.text(\n `${report.entity_subtype || '—'} · ${report.severity || report.entity_subtype || '—'}`,\n margin + halfW + 5, y + 12\n );\n y += 18;\n\n // Management office + date\n doc.setDrawColor(140, 150, 165); doc.setLineWidth(0.35);\n doc.rect(margin, y, halfW, 10, 'S');\n doc.rect(margin + halfW + 2, y, halfW, 10, 'S');\n doc.setFontSize(7.5); doc.setFont('helvetica', 'bold'); doc.setTextColor(80, 90, 110);\n doc.text('MANAGEMENT OFFICE', margin + 3, y + 4);\n doc.text('DATE', margin + halfW + 5, y + 4);\n doc.setFontSize(9); doc.setFont('helvetica', 'normal'); doc.setTextColor(20, 20, 20);\n doc.text('—', margin + 3, y + 9);\n doc.text(report.date || '—', margin + halfW + 5, y + 9);\n y += 14;\n\n // ── Labelled content boxes ────────────────────────────────────────────\n\n labelledBox('Description of Event', report.findings, 24);\n\n labelledBox(\n 'Possible Consequences\\n(e.g. Personal injury, damage, collision, grounding, fire, pollution etc.)',\n report.inc_consequences || null,\n 18\n );\n\n labelledBox(\n 'Relevant Factors / Conditions Surrounding the Event\\n(e.g. weather, lighting etc.)',\n report.inc_factors || null,\n 18\n );\n\n labelledBox('Immediate Action Taken', report.inc_immediate_action || null, 16);\n\n labelledBox(\n 'Direct Cause\\n(e.g. failure to follow procedures, inadequate or defective equipment etc.)',\n report.inc_direct_cause || null,\n 18\n );\n\n labelledBox(\n 'Root Cause\\n(e.g. lack of training, personal factors, job factors, control management factors, instructions not clear etc.)',\n report.inc_root_cause || null,\n 18\n );\n\n labelledBox('Action Taken on Board to Avoid Re-occurrence', report.correctiveActions || null, 18);\n\n labelledBox('Any Other Remarks', report.inc_remarks || null, 16);\n\n // ── Embedded images ───────────────────────────────────────────────────\n for (const imgFile of imageFiles) {\n try {\n let dataUrl;\n if (imgFile.file instanceof File) dataUrl = await this._fileToDataUrl(imgFile.file);\n else if (imgFile.publicUrl) dataUrl = await this._fetchImageAsDataUrl(imgFile.publicUrl);\n if (!dataUrl) continue;\n checkPage(30);\n doc.setFillColor(235, 240, 250);\n doc.rect(margin, y, contentW, 7, 'F');\n doc.setFontSize(8); doc.setFont('helvetica', 'bold'); doc.setTextColor(26, 54, 107);\n doc.text('ATTACHMENT: ' + imgFile.name, margin + 3, y + 5);\n y += 10;\n const props = doc.getImageProperties(dataUrl);\n const ratio = Math.min(contentW / props.width, 80 / props.height);\n const iw = props.width * ratio, ih = props.height * ratio;\n checkPage(ih + 5);\n doc.addImage(dataUrl, imgFile.type?.split('/')[1]?.toUpperCase() || 'JPEG', margin, y, iw, ih);\n y += ih + 8;\n } catch (e) { console.warn('Could not embed image', imgFile.name, e); }\n }\n\n // ── Closed-out note ───────────────────────────────────────────────────\n checkPage(14);\n y += 4;\n doc.setFontSize(8.5); doc.setFont('helvetica', 'italic'); doc.setTextColor(100, 110, 130);\n doc.text('Closed out on board / Office support required (delete as applicable)', margin, y);\n y += 8;\n\n // ── Footer ────────────────────────────────────────────────────────────\n const totalPages = doc.getNumberOfPages();\n for (let p = 1; p <= totalPages; p++) {\n doc.setPage(p);\n doc.setFillColor(26, 54, 107);\n doc.rect(0, 287, pageW, 10, 'F');\n doc.setTextColor(180, 200, 240); doc.setFontSize(7.5); doc.setFont('helvetica', 'normal');\n doc.text(`Incident Report · Generated ${new Date().toLocaleDateString('en-GB')} · Page ${p} of ${totalPages}`, margin, 293);\n if (report.entityRef) doc.text(report.entityRef, pageW - margin, 293, { align: 'right' });\n }\n\n return doc.output('arraybuffer');\n },\n\n // ─── MANUAL PDF ──────────────────────────────────────────────────────────\n\n async _buildManualPdf(report, imageFiles = []) {\n const { jsPDF } = window.jspdf;\n const doc = new jsPDF({ orientation: 'portrait', unit: 'mm', format: 'a4' });\n const margin = 18, pageW = 210, contentW = pageW - margin * 2;\n let y = 0;\n\n doc.setFillColor(30, 60, 114);\n doc.rect(0, 0, pageW, 28, 'F');\n doc.setTextColor(255, 255, 255);\n doc.setFontSize(16); doc.setFont('helvetica', 'bold');\n doc.text('QHSE REPORT', margin, 11);\n doc.setFontSize(9); doc.setFont('helvetica', 'normal');\n doc.text(this.reportTypeLabel(report), margin, 18);\n if (report.entityRef) {\n doc.setFontSize(10); doc.setFont('helvetica', 'bold');\n doc.text(report.entityRef, pageW - margin, 18, { align: 'right' });\n }\n y = 36;\n\n doc.setTextColor(30, 60, 114); doc.setFontSize(13); doc.setFont('helvetica', 'bold');\n const titleLines = doc.splitTextToSize(report.title, contentW);\n doc.text(titleLines, margin, y);\n y += titleLines.length * 6 + 4;\n\n doc.setDrawColor(200, 210, 230); doc.line(margin, y, pageW - margin, y); y += 6;\n\n const meta = [\n ['Submitted By', report.submittedBy || '—'],\n ['Date', report.date || '—'],\n ['Vessel / Location', report.vessel || '—'],\n ['Submitted At', this.formatDate(report.submittedAt)],\n ];\n if (report.manualCategory) meta.splice(2, 0, ['Category', report.manualCategory]);\n\n const colW = contentW / 2;\n meta.forEach((item, idx) => {\n const col = idx % 2, row = Math.floor(idx / 2);\n const xo = margin + col * colW, yo = y + row * 10;\n doc.setFontSize(9); doc.setFont('helvetica', 'bold'); doc.setTextColor(100, 120, 160);\n doc.text(item[0].toUpperCase(), xo, yo);\n doc.setFont('helvetica', 'normal'); doc.setTextColor(40, 40, 40);\n doc.text(String(item[1]), xo, yo + 4.5);\n });\n y += Math.ceil(meta.length / 2) * 10 + 6;\n\n const addSection = (heading, text) => {\n if (!text) return;\n if (y > 250) { doc.addPage(); y = 20; }\n doc.setFillColor(240, 245, 255);\n doc.roundedRect(margin, y, contentW, 7, 1, 1, 'F');\n doc.setFont('helvetica', 'bold'); doc.setFontSize(9); doc.setTextColor(30, 60, 114);\n doc.text(heading.toUpperCase(), margin + 3, y + 5); y += 10;\n doc.setFont('helvetica', 'normal'); doc.setFontSize(10); doc.setTextColor(40, 40, 40);\n doc.splitTextToSize(text, contentW).forEach(line => {\n if (y > 272) { doc.addPage(); y = 20; }\n doc.text(line, margin, y); y += 5.5;\n });\n y += 4;\n };\n addSection('Findings / Summary', report.findings);\n addSection('Corrective Actions', report.correctiveActions);\n\n for (const imgFile of imageFiles) {\n try {\n let dataUrl;\n if (imgFile.file instanceof File) dataUrl = await this._fileToDataUrl(imgFile.file);\n else if (imgFile.publicUrl) dataUrl = await this._fetchImageAsDataUrl(imgFile.publicUrl);\n if (!dataUrl) continue;\n if (y > 220) { doc.addPage(); y = 20; }\n doc.setFillColor(240, 245, 255);\n doc.roundedRect(margin, y, contentW, 7, 1, 1, 'F');\n doc.setFont('helvetica', 'bold'); doc.setFontSize(9); doc.setTextColor(30, 60, 114);\n doc.text('ATTACHMENT: ' + imgFile.name, margin + 3, y + 5); y += 10;\n const props = doc.getImageProperties(dataUrl);\n const ratio = Math.min(contentW / props.width, 80 / props.height);\n const iw = props.width * ratio, ih = props.height * ratio;\n if (y + ih > 272) { doc.addPage(); y = 20; }\n doc.addImage(dataUrl, imgFile.type?.split('/')[1]?.toUpperCase() || 'JPEG', margin, y, iw, ih);\n y += ih + 8;\n } catch (e) { console.warn('Could not embed image', imgFile.name, e); }\n }\n\n const totalPages = doc.getNumberOfPages();\n for (let p = 1; p <= totalPages; p++) {\n doc.setPage(p);\n doc.setFillColor(30, 60, 114); doc.rect(0, 287, pageW, 10, 'F');\n doc.setTextColor(180, 200, 240); doc.setFontSize(8); doc.setFont('helvetica', 'normal');\n doc.text(`Generated ${new Date().toLocaleDateString('en-GB')} · Page ${p} of ${totalPages}`, margin, 293);\n if (report.entityRef) doc.text(report.entityRef, pageW - margin, 293, { align: 'right' });\n }\n\n return doc.output('arraybuffer');\n },\n\n // ─── ZIP builder ─────────────────────────────────────────────────────────\n\n async _buildAndDownloadZip(report, reportPdfBytes, allAttachments) {\n const zip = new window.JSZip();\n const safeName = this.safeRef(report);\n const folder = zip.folder(safeName);\n\n folder.file(`${safeName}_report.pdf`, reportPdfBytes);\n\n for (const att of allAttachments) {\n try {\n let bytes;\n if (att.file instanceof File) {\n bytes = await att.file.arrayBuffer();\n } else if (att.publicUrl) {\n const resp = await fetch(att.publicUrl);\n if (!resp.ok) throw new Error(`HTTP ${resp.status}`);\n bytes = await resp.arrayBuffer();\n }\n if (bytes) folder.file(att.name, bytes);\n } catch (e) {\n console.warn(`Could not add ${att.name} to ZIP:`, e);\n }\n }\n\n const blob = await zip.generateAsync({\n type: 'blob',\n compression: 'DEFLATE',\n compressionOptions: { level: 6 },\n });\n this._triggerDownload(blob, `${safeName}.zip`);\n },\n\n _triggerDownload(blob, filename) {\n const url = URL.createObjectURL(blob);\n const a = document.createElement('a');\n a.href = url; a.download = filename;\n document.body.appendChild(a); a.click(); document.body.removeChild(a);\n setTimeout(() => URL.revokeObjectURL(url), 5000);\n },\n\n _fileToDataUrl(file) {\n return new Promise((resolve, reject) => {\n const r = new FileReader();\n r.onload = () => resolve(r.result); r.onerror = reject;\n r.readAsDataURL(file);\n });\n },\n\n async _fetchImageAsDataUrl(url) {\n try {\n const resp = await fetch(url);\n return this._fileToDataUrl(await resp.blob());\n } catch { return null; }\n },\n\n // ─── File input (report form) ─────────────────────────────────────────────\n handleReportFileAttach(e) { this.reportForm.files.push(...Array.from(e.target.files)); e.target.value = ''; },\n handleReportFileDrop(e) { this.reportForm.files.push(...Array.from(e.dataTransfer.files)); },\n removeReportFile(i) { this.reportForm.files.splice(i, 1); },\n\n // ─── User-folder UI ───────────────────────────────────────────────────────\n requestCreateFolder() {\n if (!this.newFolderName.trim()) return;\n this.$emit('folder-create-requested', this.newFolderName.trim());\n this.newFolderName = '';\n this.showNewFolderModal = false;\n this.activeTab = 'folders';\n },\n\n selectFolder(folder) { this.selectedFolder = folder; this.$refs.fileInput.click(); },\n\n handleFileSelection(event) {\n const files = Array.from(event.target.files);\n if (!this.selectedFolder || files.length === 0) return;\n this.$emit('files-add-requested', {\n folderId: this.selectedFolder.id,\n files: files.map(file => ({\n id: Date.now() + Math.random(),\n name: file.name,\n size: file.size,\n type: file.type,\n file,\n addedAt: new Date(),\n })),\n });\n event.target.value = ''; this.selectedFolder = null;\n },\n\n toggleFolder(key) {\n const i = this.expandedFolders.indexOf(key);\n if (i > -1) this.expandedFolders.splice(i, 1); else this.expandedFolders.push(key);\n },\n\n // ─── Formatters ───────────────────────────────────────────────────────────\n formatFileSize(bytes) {\n if (!bytes) return '0 B';\n const k = 1024, sizes = ['B', 'KB', 'MB', 'GB'];\n const i = Math.floor(Math.log(bytes) / Math.log(k));\n return Math.round(bytes / Math.pow(k, i) * 100) / 100 + ' ' + sizes[i];\n },\n formatDate(d) {\n return d ? new Date(d).toLocaleDateString('en-GB', { day: '2-digit', month: 'short', year: 'numeric' }) : '—';\n },\n },\n};\n</script>\n\n<style scoped>\n/* ─── Base ─── */\n.reports-container {\n padding: 24px;\n}\n\n/* ─── Banner ─── */\n.missing-banner {\n background: linear-gradient(135deg, #fff3cd, #ffe8a1);\n border: 1.5px solid #f0ad4e;\n border-radius: 10px;\n margin-bottom: 22px;\n overflow: hidden;\n}\n\n.missing-banner-inner {\n display: flex;\n align-items: center;\n gap: 14px;\n padding: 14px 18px;\n flex-wrap: wrap;\n}\n\n.missing-icon {\n font-size: 22px;\n color: #856404;\n flex-shrink: 0;\n}\n\n.missing-content {\n flex: 1;\n min-width: 0;\n}\n\n.missing-content strong {\n font-size: 14px;\n color: #664d03;\n display: block;\n}\n\n.missing-content p {\n margin: 2px 0 0;\n font-size: 12px;\n color: #856404;\n}\n\n.ref-chip {\n background: #856404;\n color: #fff;\n border-radius: 4px;\n padding: 1px 8px;\n font-family: monospace;\n font-size: 12px;\n font-weight: 700;\n}\n\n.btn-dismiss {\n background: none;\n border: none;\n color: #856404;\n cursor: pointer;\n font-size: 15px;\n padding: 4px 6px;\n border-radius: 4px;\n transition: background .15s;\n}\n\n.btn-dismiss:hover {\n background: rgba(0, 0, 0, .08);\n}\n\n.slide-down-enter-active,\n.slide-down-leave-active {\n transition: all .25s;\n}\n\n.slide-down-enter-from,\n.slide-down-leave-to {\n opacity: 0;\n transform: translateY(-12px);\n}\n\n/* ─── Page Header ─── */\n.page-header {\n margin-bottom: 18px;\n border-bottom: 1px solid #e0e0e0;\n padding-bottom: 16px;\n}\n\n.page-title {\n font-size: 22px;\n font-weight: 700;\n color: #1e3c72;\n margin: 0;\n}\n\n.page-subtitle {\n font-size: 13px;\n color: #6c757d;\n margin: 2px 0 0;\n}\n\n.btn-group-split {\n display: flex;\n gap: 8px;\n flex-wrap: wrap;\n}\n\n/* ─── Tabs ─── */\n.tab-nav {\n display: flex;\n gap: 4px;\n margin-bottom: 20px;\n border-bottom: 2px solid #e9ecef;\n overflow-x: auto;\n}\n\n.tab-btn {\n background: none;\n border: none;\n border-bottom: 3px solid transparent;\n padding: 9px 16px;\n font-size: 13px;\n font-weight: 600;\n color: #6c757d;\n cursor: pointer;\n white-space: nowrap;\n margin-bottom: -2px;\n transition: all .2s;\n display: flex;\n align-items: center;\n gap: 5px;\n}\n\n.tab-btn:hover {\n color: #2a5298;\n}\n\n.tab-btn.active {\n color: #2a5298;\n border-bottom-color: #2a5298;\n}\n\n.tab-count {\n font-size: 10px;\n background: #e9ecef;\n color: #495057;\n border-radius: 10px;\n padding: 1px 7px;\n font-weight: 700;\n}\n\n.tab-count.drill {\n background: #d1ecf1;\n color: #0c5460;\n}\n\n.tab-count.incident {\n background: #f8d7da;\n color: #721c24;\n}\n\n.tab-count.manual {\n background: #e2e3f0;\n color: #383d72;\n}\n\n/* ─── Report Cards ─── */\n.report-cards {\n display: flex;\n flex-direction: column;\n gap: 10px;\n margin-bottom: 24px;\n}\n\n.report-card {\n display: flex;\n align-items: center;\n gap: 12px;\n background: #fff;\n border: 1.5px solid #e9ecef;\n border-radius: 10px;\n padding: 12px 16px;\n transition: all .2s;\n position: relative;\n overflow: hidden;\n}\n\n.report-card:hover {\n border-color: #2a5298;\n box-shadow: 0 2px 10px rgba(42, 82, 152, .1);\n}\n\n.report-card--highlighted {\n border-color: #f0ad4e !important;\n background: #fffbf0 !important;\n box-shadow: 0 0 0 3px rgba(240, 173, 78, .25) !important;\n animation: flash-highlight 1.5s ease;\n}\n\n@keyframes flash-highlight {\n\n 0%,\n 100% {\n background: #fffbf0\n }\n\n 50% {\n background: #fff3cd\n }\n}\n\n.rc-type-bar {\n position: absolute;\n left: 0;\n top: 0;\n bottom: 0;\n width: 4px;\n}\n\n.rc-type-bar.drill {\n background: #17a2b8;\n}\n\n.rc-type-bar.incident {\n background: #dc3545;\n}\n\n.rc-type-bar.manual {\n background: #6f42c1;\n}\n\n.rc-badge {\n font-size: 9px;\n font-weight: 700;\n padding: 2px 7px;\n border-radius: 4px;\n text-transform: uppercase;\n white-space: nowrap;\n flex-shrink: 0;\n}\n\n.rc-badge.drill {\n background: #d1ecf1;\n color: #0c5460;\n}\n\n.rc-badge.incident {\n background: #f8d7da;\n color: #721c24;\n}\n\n.rc-badge.manual {\n background: #ede9f6;\n color: #383d72;\n}\n\n.rc-body {\n display: flex;\n flex-direction: column;\n flex: 1;\n min-width: 0;\n cursor: pointer;\n}\n\n.rc-ref {\n font-family: monospace;\n font-size: 12px;\n color: #2a5298;\n font-weight: 700;\n}\n\n.rc-title {\n font-size: 14px;\n color: #212529;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.rc-meta {\n font-size: 11px;\n color: #6c757d;\n margin-top: 2px;\n}\n\n.rc-files {\n font-size: 11px;\n color: #6c757d;\n display: flex;\n align-items: center;\n gap: 4px;\n flex-shrink: 0;\n}\n\n.rc-folder-pill {\n display: inline-flex;\n align-items: center;\n font-size: 10px;\n font-weight: 700;\n padding: 3px 10px;\n border-radius: 12px;\n cursor: pointer;\n border: 1.5px solid;\n transition: all .18s;\n white-space: nowrap;\n flex-shrink: 0;\n max-width: 170px;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.rc-folder-pill.drill {\n background: #e8f7fa;\n border-color: #17a2b8;\n color: #0c5460;\n}\n\n.rc-folder-pill.incident {\n background: #fce8ea;\n border-color: #dc3545;\n color: #721c24;\n}\n\n.rc-folder-pill.manual {\n background: #f0ebfa;\n border-color: #6f42c1;\n color: #383d72;\n}\n\n.rc-folder-pill:hover {\n filter: brightness(.92);\n}\n\n.rc-actions {\n display: flex;\n gap: 5px;\n flex-shrink: 0;\n}\n\n.rc-btn {\n width: 30px;\n height: 30px;\n border: 1.5px solid #dee2e6;\n border-radius: 6px;\n background: #fff;\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 13px;\n transition: all .18s;\n text-decoration: none;\n color: #495057;\n}\n\n.rc-btn:disabled {\n opacity: .5;\n cursor: not-allowed;\n}\n\n.rc-btn--view:hover:not(:disabled) {\n background: #2a5298;\n color: #fff;\n border-color: #2a5298;\n}\n\n.rc-btn--download {\n color: #28a745;\n}\n\n.rc-btn--download:hover:not(:disabled) {\n background: #28a745;\n color: #fff;\n border-color: #28a745;\n}\n\n.rc-btn--danger {\n color: #dc3545;\n}\n\n.rc-btn--danger:hover:not(:disabled) {\n background: #dc3545;\n color: #fff;\n border-color: #dc3545;\n}\n\n/* ─── Crew hint ─── */\n.crew-hint {\n background: #eef7ff;\n border: 1px solid #b8deff;\n border-radius: 7px;\n padding: 10px 14px;\n font-size: 12px;\n color: #0c5460;\n display: flex;\n align-items: flex-start;\n gap: 8px;\n margin-bottom: 4px;\n}\n\n.crew-hint code {\n background: #d1ecf1;\n border-radius: 3px;\n padding: 1px 5px;\n font-size: 11px;\n color: #0c5460;\n}\n\n/* ─── Section Heading ─── */\n.section-heading {\n display: flex;\n align-items: center;\n font-size: 13px;\n font-weight: 700;\n color: #495057;\n margin-bottom: 12px;\n gap: 5px;\n}\n\n.section-count {\n background: #e9ecef;\n color: #495057;\n font-size: 10px;\n font-weight: 700;\n border-radius: 10px;\n padding: 1px 8px;\n}\n\n.section-hint {\n font-size: 11px;\n font-weight: 400;\n color: #adb5bd;\n margin-left: 2px;\n}\n\n/* ─── Folders list ─── */\n.folders-list {\n display: flex;\n flex-direction: column;\n gap: 10px;\n}\n\n.auto-folder-card {\n border: 1.5px solid #e9ecef;\n border-radius: 12px;\n background: #fff;\n overflow: hidden;\n transition: border-color .18s;\n}\n\n.auto-folder-card.drill {\n border-left: 4px solid #17a2b8;\n}\n\n.auto-folder-card.incident {\n border-left: 4px solid #dc3545;\n}\n\n.auto-folder-card.manual {\n border-left: 4px solid #6f42c1;\n}\n\n.auto-folder-card:hover,\n.auto-folder-card.is-open {\n border-color: #adb5bd;\n}\n\n.user-folder-card {\n border: 1.5px solid #e9ecef;\n border-left: 4px solid #f0ad4e;\n border-radius: 12px;\n background: #fff;\n overflow: hidden;\n transition: border-color .18s;\n}\n\n.user-folder-card:hover,\n.user-folder-card.is-open {\n border-color: #adb5bd;\n}\n\n.af-header {\n display: flex;\n align-items: center;\n gap: 14px;\n padding: 14px 18px;\n cursor: pointer;\n user-select: none;\n transition: background .15s;\n}\n\n.af-header:hover {\n background: #f8f9fa;\n}\n\n.af-icon-wrap {\n position: relative;\n flex-shrink: 0;\n}\n\n.af-folder-icon {\n font-size: 2.1rem;\n}\n\n.color--drill {\n color: #17a2b8;\n}\n\n.color--incident {\n color: #dc3545;\n}\n\n.color--manual {\n color: #6f42c1;\n}\n\n.color--user {\n color: #f0ad4e;\n}\n\n.af-count-badge {\n position: absolute;\n top: -5px;\n right: -8px;\n background: #2a5298;\n color: #fff;\n font-size: 9px;\n font-weight: 700;\n border-radius: 10px;\n padding: 1px 6px;\n min-width: 18px;\n text-align: center;\n line-height: 16px;\n}\n\n.af-meta {\n flex: 1;\n min-width: 0;\n display: flex;\n flex-direction: column;\n gap: 2px;\n}\n\n.af-ref {\n font-family: monospace;\n font-size: 13px;\n font-weight: 700;\n color: #2a5298;\n}\n\n.af-title {\n font-size: 13px;\n color: #212529;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.af-sub {\n display: flex;\n align-items: center;\n gap: 8px;\n flex-wrap: wrap;\n margin-top: 1px;\n}\n\n.af-actions {\n display: flex;\n align-items: center;\n gap: 8px;\n flex-shrink: 0;\n}\n\n.chevron-icon {\n font-size: .85rem;\n color: #6c757d;\n}\n\n.af-contents {\n border-top: 1px solid #e9ecef;\n padding: 12px 16px;\n background: #fafbff;\n display: flex;\n flex-direction: column;\n gap: 6px;\n}\n\n.folder-expand-enter-active,\n.folder-expand-leave-active {\n transition: all .2s ease;\n overflow: hidden;\n}\n\n.folder-expand-enter-from,\n.folder-expand-leave-to {\n opacity: 0;\n max-height: 0 !important;\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n}\n\n.ffi {\n display: flex;\n align-items: center;\n gap: 10px;\n padding: 9px 12px;\n background: #fff;\n border: 1px solid #e9ecef;\n border-radius: 8px;\n transition: border-color .15s;\n}\n\n.ffi:hover {\n border-color: #adb5bd;\n}\n\n.ffi--report {\n border-color: #c5d0ee;\n background: #f5f7ff;\n cursor: pointer;\n}\n\n.ffi--report:hover {\n border-color: #2a5298;\n}\n\n.ffi-icon {\n width: 34px;\n height: 34px;\n border-radius: 7px;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 1.2rem;\n flex-shrink: 0;\n}\n\n.ffi-icon--pdf {\n background: #ffeaea;\n color: #dc3545;\n}\n\n.ffi-icon--img {\n background: #e8f5e9;\n color: #28a745;\n}\n\n.ffi-icon--generic {\n background: #e9ecef;\n color: #6c757d;\n}\n\n.ffi-meta {\n flex: 1;\n min-width: 0;\n display: flex;\n flex-direction: column;\n gap: 1px;\n}\n\n.ffi-name {\n font-size: 13px;\n font-weight: 600;\n color: #212529;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.ffi-sub {\n font-size: 11px;\n color: #6c757d;\n}\n\n.ffi-acts {\n display: flex;\n gap: 5px;\n flex-shrink: 0;\n}\n\n.ffi-empty {\n padding: 8px 2px;\n font-size: 12px;\n color: #6c757d;\n display: flex;\n align-items: center;\n}\n\n.af-zip-row {\n display: flex;\n align-items: center;\n gap: 12px;\n padding-top: 8px;\n border-top: 1px dashed #dee2e6;\n margin-top: 2px;\n}\n\n.af-zip-hint {\n font-size: 11px;\n color: #6c757d;\n font-family: monospace;\n}\n\n.mini-badge {\n font-size: 9px;\n font-weight: 700;\n padding: 2px 7px;\n border-radius: 4px;\n text-transform: uppercase;\n flex-shrink: 0;\n}\n\n.mini-badge.drill {\n background: #d1ecf1;\n color: #0c5460;\n}\n\n.mini-badge.incident {\n background: #f8d7da;\n color: #721c24;\n}\n\n.mini-badge.manual {\n background: #ede9f6;\n color: #383d72;\n}\n\n/* ─── Modals ─── */\n.modal {\n display: none;\n position: fixed;\n z-index: 1050;\n inset: 0;\n background: rgba(0, 0, 0, .5);\n align-items: center;\n justify-content: center;\n}\n\n.modal.show {\n display: flex;\n}\n\n.modal-dialog {\n max-width: 500px;\n width: 95%;\n margin: 1.5rem auto;\n}\n\n.modal-dialog.modal-lg {\n max-width: 780px;\n}\n\n.modal-content {\n background: #fff;\n border-radius: 12px;\n box-shadow: 0 10px 40px rgba(0, 0, 0, .25);\n overflow: hidden;\n}\n\n.modal-header {\n padding: 16px 22px;\n border-bottom: 1px solid #dee2e6;\n display: flex;\n justify-content: space-between;\n align-items: center;\n gap: 10px;\n}\n\n.modal-body {\n padding: 22px;\n max-height: 70vh;\n overflow-y: auto;\n}\n\n.modal-footer {\n padding: 14px 22px;\n border-top: 1px solid #dee2e6;\n display: flex;\n justify-content: flex-end;\n gap: 10px;\n align-items: center;\n}\n\n.rpt-modal-header {\n background: linear-gradient(135deg, #1e3c72, #2a5298);\n color: #fff;\n}\n\n.modal-type-toggle {\n display: flex;\n background: rgba(255, 255, 255, .15);\n border-radius: 6px;\n padding: 3px;\n gap: 2px;\n margin-left: auto;\n margin-right: 10px;\n}\n\n.type-toggle-btn {\n background: transparent;\n border: none;\n color: rgba(255, 255, 255, .7);\n font-size: 12px;\n font-weight: 600;\n padding: 4px 12px;\n border-radius: 4px;\n cursor: pointer;\n transition: all .2s;\n}\n\n.type-toggle-btn.active {\n background: #fff;\n color: #2a5298;\n}\n\n.type-toggle-btn:hover:not(.active) {\n color: #fff;\n background: rgba(255, 255, 255, .2);\n}\n\n.btn-close {\n background: transparent;\n border: none;\n font-size: 1.4rem;\n cursor: pointer;\n opacity: .6;\n color: inherit;\n}\n\n.btn-close:hover {\n opacity: 1;\n}\n\n/* ─── Report Form ─── */\n.rpt-entity-box {\n background: #f8f9fa;\n border: 1px solid #e0e0e0;\n border-radius: 8px;\n padding: 14px 16px;\n margin-bottom: 4px;\n}\n\n.prefilled-entity {\n display: flex;\n align-items: center;\n gap: 10px;\n flex-wrap: wrap;\n}\n\n.entity-chip {\n font-size: 9px;\n font-weight: 700;\n padding: 2px 7px;\n border-radius: 4px;\n text-transform: uppercase;\n flex-shrink: 0;\n}\n\n.entity-chip.drill {\n background: #d1ecf1;\n color: #0c5460;\n}\n\n.entity-chip.incident {\n background: #f8d7da;\n color: #721c24;\n}\n\n.entity-chip.manual {\n background: #ede9f6;\n color: #383d72;\n}\n\n.input-row {\n display: grid;\n grid-template-columns: 1fr 1fr;\n gap: 14px;\n margin-bottom: 14px;\n}\n\n.form-group {\n display: flex;\n flex-direction: column;\n margin-bottom: 14px;\n}\n\n.form-label {\n font-size: 13px;\n margin-bottom: 5px;\n color: #495057;\n}\n\n.form-hint {\n font-size: 10px;\n font-weight: 400;\n color: #adb5bd;\n margin-left: 8px;\n}\n\n.form-control {\n padding: 9px 12px;\n border: 1px solid #ced4da;\n border-radius: 6px;\n font-size: 14px;\n transition: border-color .2s;\n width: 100%;\n box-sizing: border-box;\n}\n\n.form-control:focus {\n outline: none;\n border-color: #2a5298;\n box-shadow: 0 0 0 3px rgba(42, 82, 152, .1);\n}\n\ntextarea.form-control {\n resize: vertical;\n min-height: 80px;\n}\n\nselect.form-control {\n cursor: pointer;\n}\n\n.file-drop-zone {\n border: 2px dashed #ced4da;\n border-radius: 8px;\n padding: 18px;\n text-align: center;\n cursor: pointer;\n transition: border-color .2s;\n min-height: 80px;\n}\n\n.file-drop-zone:hover {\n border-color: #2a5298;\n}\n\n.attached-files {\n display: flex;\n flex-wrap: wrap;\n gap: 6px;\n margin-top: 10px;\n justify-content: center;\n}\n\n.attached-chip {\n background: #e9ecef;\n border-radius: 5px;\n padding: 3px 10px;\n font-size: 12px;\n display: inline-flex;\n align-items: center;\n gap: 5px;\n}\n\n.attached-chip--link {\n text-decoration: none;\n color: #2a5298;\n background: #eef2ff;\n border: 1px solid #c5d0ee;\n transition: background .15s;\n}\n\n.attached-chip--link:hover {\n background: #dce4f8;\n}\n\n.attached-chip button {\n background: none;\n border: none;\n cursor: pointer;\n color: #dc3545;\n padding: 0;\n font-size: 11px;\n}\n\n.zip-hint {\n background: #eef2ff;\n border: 1px solid #c5d0ee;\n border-radius: 7px;\n padding: 8px 14px;\n font-size: 12px;\n color: #2a5298;\n display: flex;\n align-items: center;\n margin-top: -6px;\n}\n\n/* ─── Report Viewer ─── */\n.view-grid {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(160px, 1fr));\n gap: 14px;\n margin-bottom: 20px;\n}\n\n.view-item {\n display: flex;\n flex-direction: column;\n gap: 3px;\n}\n\n.view-item label {\n font-size: 11px;\n font-weight: 700;\n text-transform: uppercase;\n letter-spacing: .05em;\n color: #6c757d;\n}\n\n.view-item span {\n font-size: 14px;\n color: #212529;\n}\n\n.ref-mono {\n font-family: monospace;\n font-size: 13px;\n color: #2a5298;\n font-weight: 700;\n}\n\n.view-section {\n margin-bottom: 18px;\n}\n\n.view-section label {\n font-size: 12px;\n font-weight: 700;\n text-transform: uppercase;\n letter-spacing: .05em;\n color: #6c757d;\n display: block;\n margin-bottom: 6px;\n}\n\n.view-text {\n background: #f8f9fa;\n border-radius: 6px;\n padding: 12px 14px;\n font-size: 14px;\n line-height: 1.6;\n color: #212529;\n white-space: pre-wrap;\n}\n\n/* ─── Buttons ─── */\n.btn {\n padding: 9px 18px;\n border: none;\n border-radius: 8px;\n font-size: 13px;\n font-weight: 600;\n cursor: pointer;\n transition: all .2s;\n display: inline-flex;\n align-items: center;\n gap: 6px;\n}\n\n.btn:disabled {\n opacity: .6;\n cursor: not-allowed;\n}\n\n.btn-primary {\n background: #2a5298;\n color: #fff;\n}\n\n.btn-primary:hover:not(:disabled) {\n background: #1e3c72;\n}\n\n.btn-success {\n background: #28a745;\n color: #fff;\n}\n\n.btn-success:hover:not(:disabled) {\n background: #218838;\n}\n\n.btn-secondary {\n background: #6c757d;\n color: #fff;\n}\n\n.btn-secondary:hover:not(:disabled) {\n background: #5a6268;\n}\n\n.btn-danger {\n background: #dc3545;\n color: #fff;\n}\n\n.btn-danger:hover:not(:disabled) {\n background: #c82333;\n}\n\n.btn-warning {\n background: #f0ad4e;\n color: #664d03;\n}\n\n.btn-warning:hover {\n background: #e0972e;\n}\n\n.btn-outline-primary {\n background: transparent;\n border: 1.5px solid #2a5298;\n color: #2a5298;\n}\n\n.btn-outline-primary:hover:not(:disabled) {\n background: #2a5298;\n color: #fff;\n}\n\n.btn-outline-secondary {\n background: transparent;\n border: 1.5px solid #6c757d;\n color: #6c757d;\n}\n\n.btn-outline-secondary:hover:not(:disabled) {\n background: #6c757d;\n color: #fff;\n}\n\n.btn-link {\n background: none;\n border: none;\n padding: 0;\n font-size: 13px;\n text-decoration: none;\n cursor: pointer;\n}\n\n.btn-sm {\n padding: 5px 12px;\n font-size: 12px;\n}\n\n/* ─── Loading / Spinners ─── */\n.loading-container {\n display: flex;\n flex-direction: column;\n align-items: center;\n padding: 40px 20px;\n}\n\n.spinner {\n border: 4px solid #f3f3f3;\n border-top: 4px solid #2a5298;\n border-radius: 50%;\n width: 40px;\n height: 40px;\n animation: spin 1s linear infinite;\n margin-bottom: 14px;\n}\n\n.spinner-sm {\n display: inline-block;\n width: 14px;\n height: 14px;\n border: 2px solid rgba(255, 255, 255, .4);\n border-top-color: #fff;\n border-radius: 50%;\n animation: spin .7s linear infinite;\n}\n\n.spinner-xs {\n display: inline-block;\n width: 11px;\n height: 11px;\n border: 2px solid rgba(0, 0, 0, .15);\n border-top-color: #333;\n border-radius: 50%;\n animation: spin .7s linear infinite;\n}\n\n@keyframes spin {\n to {\n transform: rotate(360deg);\n }\n}\n\n/* ─── Utilities ─── */\n.fw-bold {\n font-weight: 700;\n}\n\n.fw-semibold {\n font-weight: 600;\n}\n\n.me-1 {\n margin-right: 4px;\n}\n\n.me-2 {\n margin-right: 8px;\n}\n\n.me-auto {\n margin-right: auto;\n}\n\n.ms-1 {\n margin-left: 4px;\n}\n\n.ms-2 {\n margin-left: 8px;\n}\n\n.mt-2 {\n margin-top: 8px;\n}\n\n.mt-3 {\n margin-top: 16px;\n}\n\n.mt-4 {\n margin-top: 24px;\n}\n\n.mb-0 {\n margin-bottom: 0;\n}\n\n.text-muted {\n color: #6c757d !important;\n}\n\n.text-danger {\n color: #dc3545 !important;\n}\n\n.text-success {\n color: #28a745 !important;\n}\n\n.text-primary {\n color: #2a5298 !important;\n}\n\n.text-warning {\n color: #f0ad4e !important;\n}\n\n.d-flex {\n display: flex;\n}\n\n.gap-2 {\n gap: 8px;\n}\n\n.justify-content-between {\n justify-content: space-between;\n}\n\n.text-center {\n text-align: center;\n}\n\n.empty-state {\n padding: 60px 20px;\n}\n\n/* ─── Incident Fields Box ─── */\n.incident-fields-box {\n background: #fff8f5;\n border: 1.5px solid #f5d0c0;\n border-radius: 10px;\n padding: 14px 16px;\n margin-bottom: 14px;\n display: flex;\n flex-direction: column;\n gap: 0;\n}\n\n.incident-fields-title {\n font-size: 13px;\n font-weight: 700;\n color: #7b2d1a;\n margin-bottom: 14px;\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.field-hint {\n font-size: 11px;\n color: #adb5bd;\n margin-bottom: 4px;\n margin-top: -2px;\n}\n\n/* ─── Drill Checklist ─── */\n.drill-checklist-box {\n background: #f8faff;\n border: 1.5px solid #d0daf0;\n border-radius: 10px;\n padding: 14px 16px;\n margin-bottom: 14px;\n}\n\n.drill-checklist-title {\n font-size: 13px;\n font-weight: 700;\n color: #1e3c72;\n margin-bottom: 10px;\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.checklist-hint {\n font-size: 11px;\n font-weight: 400;\n color: #adb5bd;\n margin-left: 4px;\n}\n\n.checklist-grid {\n display: flex;\n flex-direction: column;\n gap: 6px;\n}\n\n.checklist-item {\n display: flex;\n align-items: center;\n gap: 10px;\n padding: 8px 12px;\n border-radius: 7px;\n border: 1.5px solid #e2e8f0;\n background: #fff;\n cursor: pointer;\n transition: all .18s;\n user-select: none;\n}\n\n.checklist-item:hover {\n border-color: #2a5298;\n background: #f5f8ff;\n}\n\n.checklist-item.checked {\n border-color: #28a745;\n background: #f0fff4;\n}\n\n.checklist-checkbox input[type=\"checkbox\"] {\n display: none;\n}\n\n.custom-check {\n width: 22px;\n height: 22px;\n border-radius: 5px;\n border: 2px solid #ced4da;\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n font-size: 12px;\n transition: all .18s;\n}\n\n.checklist-item.checked .custom-check {\n background: #28a745;\n border-color: #28a745;\n color: #fff;\n}\n\n.checklist-item:not(.checked) .custom-check {\n background: #fff8f8;\n border-color: #dc3545;\n color: #dc3545;\n}\n\n.checklist-q {\n flex: 1;\n font-size: 13px;\n color: #212529;\n}\n\n.checklist-answer {\n font-size: 10px;\n font-weight: 700;\n padding: 2px 8px;\n border-radius: 4px;\n flex-shrink: 0;\n}\n\n.answer-yes {\n background: #d4edda;\n color: #155724;\n}\n\n.answer-no {\n background: #f8d7da;\n color: #721c24;\n}\n\n@media (max-width: 640px) {\n .input-row {\n grid-template-columns: 1fr;\n }\n\n .btn-group-split {\n gap: 5px;\n }\n\n .btn {\n padding: 8px 12px;\n font-size: 12px;\n }\n\n .tab-btn {\n padding: 8px 10px;\n font-size: 12px;\n }\n\n .modal-type-toggle {\n display: none;\n }\n\n .rc-folder-pill {\n display: none;\n }\n\n .af-header {\n padding: 12px 14px;\n gap: 10px;\n }\n}\n</style>","<template>\n <div v-if=\"ready\">\n <div>\n <nav v-show=\"!showReport\">\n <button v-for=\"section in sections\" :key=\"section.id\" class=\"nav-btn\"\n :class=\"{ active: activeSection === section.id }\" @click=\"handleSectionClick(section)\">\n {{ section.icon }} {{ section.name }}\n </button>\n </nav>\n \n <div class=\"content\" v-show=\"!showReport\">\n <!-- Maintenance Tasks Form -->\n <section :class=\"['form-section', { active: activeSection === 'maintenance' }]\"\n v-show=\"activeSection === 'maintenance'\">\n <h2>🛠️ Maintenance Tasks</h2>\n <!-- Loading indicator -->\n <div class=\"loading-container\" v-if=\"isLoading\">\n <div class=\"loading-spinner\"></div>\n <p>Loading checklist...</p>\n </div>\n <form v-if=\"!isLoading\">\n <div class=\"container\">\n <div class=\"d-flex justify-content-between align-items-center\">\n <h1>Maintenance Checklist</h1>\n <button v-if=\"showAddTaskButton\" class=\"btn btn-outline-custom\" @click.prevent=\"addTask()\">\n Manually Add Task\n <i class=\"fas fa-plus\"></i>\n </button>\n </div>\n\n <div class=\"progress-container\">\n <div class=\"progress-info\">\n Progress: {{ progress }}% ({{ completedCount.length }}/{{ checklists.length }})\n </div>\n <div class=\"progress-bar\">\n <div class=\"progress-fill\" :style=\"{ width: progress + '%' }\"></div>\n </div>\n </div>\n\n <ul class=\"checklist\">\n <li v-for=\"checklist in checklists\" :key=\"checklist.id\" class=\"checklist-item\">\n <div class=\"checkbox\" :class=\"{ 'checked': checklist.completed }\"\n @click=\"toggleTask(checklist)\">\n <span v-if=\"checklist.completed\">✓</span>\n </div>\n <span class=\"task-text\" :class=\"{ 'completed': checklist.completed }\"\n @click=\"toggleTask(checklist)\">\n {{ checklist.text }}\n </span>\n <button v-if=\"showAddTaskButton\" class=\"delete-btn\" @click=\"deleteTask(checklist.id)\"\n title=\"Delete task\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\"\n stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <polyline points=\"3,6 5,6 21,6\"></polyline>\n <path\n d=\"m19,6v14a2,2 0 0,1 -2,2H7a2,2 0 0,1 -2,-2V6m3,0V4a2,2 0 0,1 2,-2h4a2,2 0 0,1 2,2v2\">\n </path>\n <line x1=\"10\" y1=\"11\" x2=\"10\" y2=\"17\"></line>\n <line x1=\"14\" y1=\"11\" x2=\"14\" y2=\"17\"></line>\n </svg>\n </button>\n </li>\n </ul>\n\n <div v-if=\"after\">\n <label>Upload Image Evidence</label>\n <ul class=\"checklist\">\n <li class=\"checklist-item\">\n <span class=\"task-text\">\n Image Evidence Already Uploaded\n </span>\n <button type=\"button\" class=\"delete-btn\" @click=\"deleteEvidence()\"\n title=\"Delete Image\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\"\n stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\">\n <polyline points=\"3,6 5,6 21,6\"></polyline>\n <path\n d=\"m19,6v14a2,2 0 0,1 -2,2H7a2,2 0 0,1 -2,-2V6m3,0V4a2,2 0 0,1 2,-2h4a2,2 0 0,1 2,2v2\">\n </path>\n <line x1=\"10\" y1=\"11\" x2=\"10\" y2=\"17\"></line>\n <line x1=\"14\" y1=\"11\" x2=\"14\" y2=\"17\"></line>\n </svg>\n </button>\n </li>\n </ul>\n </div>\n\n <div class=\"form-group\" v-else :key=\"refreshKey || 'default'\">\n <label>Upload Image Evidence</label>\n <p>You can only upload one image evidence here.</p>\n <div class=\"attachment-area\">\n <p>{{ fileText }}</p>\n <input type=\"file\" id=\"evidence-files\" class=\"file-input\" @change=\"handleImg\">\n <label for=\"evidence-files\" class=\"file-label\">Browse Files</label>\n </div>\n </div>\n\n <div class=\"status\" v-if=\"completedCount === checklists.length\">\n All tasks completed! ✅\n </div>\n\n <button class=\"reset-button\" @click.prevent=\"resetTasks\">{{ checklistButtonLabel }}</button>\n </div>\n </form>\n </section>\n\n <!-- Maintenance Schedule Form -->\n <section :class=\"['form-section', { active: activeSection === 'schedule' }]\"\n v-show=\"activeSection === 'schedule'\">\n <h2>📅 Maintenance Schedule</h2>\n <form>\n <div class=\"form-group\">\n <label for=\"task-name\">Task Name</label>\n <input type=\"text\" id=\"task-name\" v-model=\"form.taskName\" required>\n </div>\n\n <div class=\"form-group\">\n <label for=\"task-description\">Description</label>\n <textarea id=\"task-description\" v-model=\"form.description\" required></textarea>\n </div>\n\n <div class=\"input-group\">\n <div class=\"form-group\">\n <label for=\"maintenance-type\">Maintenance Type</label>\n <select id=\"maintenance-type\" v-model=\"form.maintenanceType\" required>\n <option value=\"\">-- Select Type --</option>\n <option value=\"preventive\">Preventive</option>\n <option value=\"corrective\">Corrective</option>\n <option value=\"predictive\">Predictive</option>\n <option value=\"condition\">Condition-Based</option>\n </select>\n </div>\n\n <div class=\"form-group\">\n <label for=\"component\">Component/System</label>\n <select id=\"component\" v-model=\"form.component\" required>\n <option value=\"\">-- Select Component --</option>\n <option value=\"engine\">Engine</option>\n <option value=\"hull\">Hull</option>\n <option value=\"electronics\">Electronics</option>\n <option value=\"deck\">Deck Machinery</option>\n <option value=\"plumbing\">Plumbing</option>\n <option value=\"electrical\">Electrical</option>\n <option value=\"hvac\">HVAC</option>\n <option value=\"safety\">Safety Systems</option>\n <option value=\"Other\">Other</option>\n </select>\n <input v-if=\"form.component === 'Other'\" type=\"text\"\n placeholder=\"Enter custom component/system\" v-model=\"form.customComponent\"\n style=\"margin-top: 8px;\">\n </div>\n </div>\n\n <div class=\"input-group\">\n <div class=\"form-group\">\n <label for=\"priority\">Priority</label>\n <select id=\"priority\" v-model=\"form.priority\" required>\n <option value=\"low\">Low</option>\n <option value=\"medium\">Medium</option>\n <option value=\"high\">High</option>\n <option value=\"critical\">Critical</option>\n </select>\n </div>\n <div class=\"form-group\">\n <label for=\"status\">Status</label>\n <input type=\"text\" id=\"status\" v-model=\"form.status\" readonly>\n </div>\n </div>\n\n <div class=\"input-group\">\n <div class=\"form-group\">\n <label for=\"estimated-hours\">Estimated Hours</label>\n <input type=\"number\" id=\"estimated-hours\" v-model=\"form.estimatedHours\" min=\"0\" step=\"0.5\">\n </div>\n </div>\n\n <div class=\"form-group\">\n <label for=\"assigned-to\">Assigned To</label>\n <select id=\"assigned-to\" v-model=\"form.assignedTo\">\n <option value=\"\">-- Select Personnel --</option>\n <option v-for=\"member in vesselCrew\" :key=\"member.id\"\n :value=\"`${member.name} - ${member.role}`\">\n {{ member.name }} - {{ member.role }}\n </option>\n </select>\n </div>\n\n <div class=\"input-group\">\n <div class=\"form-group\">\n <label for=\"recurrence-type\">Recurrence</label>\n <select id=\"recurrence-type\" v-model=\"form.recurrence\" required>\n <option value=\"once\">One-time</option>\n <option value=\"daily\">Daily</option>\n <option value=\"weekly\">Weekly</option>\n <option value=\"monthly\">Monthly</option>\n <option value=\"quarterly\">Quarterly</option>\n <option value=\"semi-annual\">Semi-annually</option>\n <option value=\"annual\">Annually</option>\n <option value=\"custom\">Custom Interval</option>\n </select>\n </div>\n </div>\n\n <div class=\"input-group\">\n <div class=\"form-group\">\n <label for=\"last-performed\">Last Performed Date</label>\n <input type=\"date\" id=\"last-performed\" v-model=\"form.lastPerformed\">\n </div>\n\n <div class=\"form-group\">\n <label for=\"next-due\">Due Date</label>\n <input type=\"date\" id=\"next-due\" v-model=\"form.nextDue\" required>\n </div>\n </div>\n\n <div class=\"form-group\">\n <label>Notifications</label>\n <div class=\"checkbox-group\">\n <div class=\"checkbox-item\">\n <input type=\"checkbox\" id=\"notify-email\" v-model=\"form.notifyEmail\">\n <label for=\"notify-email\">Email Notification</label>\n </div>\n <div class=\"checkbox-item\">\n <input type=\"checkbox\" id=\"notify-sms\" v-model=\"form.notifySms\">\n <label for=\"notify-sms\">SMS Notification</label>\n </div>\n </div>\n </div>\n\n <div class=\"input-group\">\n <div class=\"form-group\">\n <label for=\"reminder-days\">Reminder (Days Before)</label>\n <select id=\"reminder-days\" v-model=\"form.reminderDays\">\n <option value=\"1\">1 day</option>\n <option value=\"3\">3 days</option>\n <option value=\"7\">1 week</option>\n <option value=\"14\">2 weeks</option>\n <option value=\"30\">1 month</option>\n </select>\n </div>\n </div>\n\n <div class=\"form-group\">\n <label for=\"schedule-notes\">Notes</label>\n <textarea id=\"schedule-notes\" v-model=\"form.notes\"></textarea>\n </div>\n\n <div class=\"form-group\">\n <label>Attachments</label>\n <div class=\"attachment-area\">\n <p>{{ imgText }}</p>\n <input type=\"file\" id=\"maintenance-files\" class=\"file-input\" @change=\"handleFiles\" multiple>\n <label for=\"maintenance-files\" class=\"file-label\">Browse Files</label>\n </div>\n </div>\n\n <div class=\"action-buttons\">\n <button type=\"button\" class=\"btn btn-primary\" @click.prevent=\"saveSchedule\"\n :disabled=\"isSaving\">\n {{ isSaving ? 'Saving...' : 'Save Schedule' }}\n </button>\n </div>\n </form>\n </section>\n\n <!-- Inventory Form -->\n <section :class=\"['form-section', { active: activeSection === 'inventory' }]\"\n v-show=\"activeSection === 'inventory'\">\n <h2>All Maintenance</h2>\n <div class=\"task-table-wrapper\">\n <!-- Filters and Controls -->\n <div class=\"table-controls\">\n <div class=\"filters\">\n <button :class=\"{ active: activeFilter === 'due' }\" @click=\"setFilter('due')\">Due</button>\n <button :class=\"{ active: activeFilter === 'all' }\" @click=\"setFilter('all')\">All</button>\n <button :class=\"{ active: activeFilter === 'completed' }\"\n @click=\"setFilter('completed')\">Completed</button>\n <input type=\"text\" v-model=\"searchQuery\" placeholder=\"Search...\" />\n </div>\n </div>\n\n <!-- Task Table -->\n <table class=\"task-table\">\n <thead>\n <tr>\n <th>Equipment</th>\n <th>Task Name</th>\n <th>Assigned To</th>\n <th>Intervals</th>\n <th>Remaining</th>\n <th>Next Due</th>\n <th>Status</th>\n <th>Action</th>\n </tr>\n </thead>\n <tbody>\n <tr v-for=\"task in filteredTasks\" :key=\"task.id\">\n <td>{{ task.component }}</td>\n <td>{{ task.taskName }}</td>\n <td>{{ task.assignedTo }}</td>\n <td>{{ task.recurrence }}</td>\n <td>{{ task.remainingDays }}</td>\n <td>{{ task.nextDue }}</td>\n <td>\n <span :class=\"['status-badge', task.status.toLowerCase().replace(' ', '-')]\">\n {{ task.status }}\n </span>\n </td>\n <td>\n <button @click=\"printMaintenance(task.component)\" v-if=\"task.status === 'Completed'\"\n class=\"status-action\">Print</button>\n <button @click=\"showMaintenance(task.component)\" v-else\n class=\"status-action\">Start</button>\n </td>\n </tr>\n </tbody>\n </table>\n\n <!-- Empty schedule -->\n <div v-if=\"!tasks.length\">\n <div class=\"alert alert-primary\" role=\"alert\">\n <h4 class=\"alert-heading\">Such Empty!!!</h4>\n <p>You have no maintenance, because you have not scheduled any for this ship.</p>\n <hr>\n <p class=\"mb-0\">Navigate to the schedule tab, to start scheduling. Or click on this button\n to\n <button type=\"button\" class=\"btn btn-primary\"\n @click=\"switchSchedule()\">Schedule</button>\n </p>\n </div>\n </div>\n </div>\n </section>\n </div>\n\n <div class=\"report-container\" ref=\"reportContainer\" v-show=\"showReport\">\n <div class=\"header\">\n <div class=\"report-title\">MAINTENANCE TASK REPORT</div>\n </div>\n\n <div class=\"report-info\">\n <div class=\"info-box\">\n <div class=\"info-label\">Report Generated:</div>\n <div>{{ reportDate }}</div>\n </div>\n <div class=\"info-box\">\n <div class=\"info-label\">Report ID:</div>\n <div>{{ reportId }}</div>\n </div>\n <div class=\"info-box\">\n <div class=\"info-label\">Total Tasks:</div>\n <div>{{ maintenanceTasks.length }}</div>\n </div>\n <div class=\"info-box\">\n <div class=\"info-label\">Generated By:</div>\n <div>OceanHelm System</div>\n </div>\n </div>\n\n <div class=\"section\">\n <div class=\"section-title\">📊 Task Summary</div>\n <div class=\"summary-grid\">\n <div class=\"summary-card\">\n <div class=\"summary-number\">1</div>\n <div class=\"summary-label\">Completed</div>\n </div>\n <div class=\"summary-card\">\n <div class=\"summary-number\">0</div>\n <div class=\"summary-label\">Pending</div>\n </div>\n <div class=\"summary-card\">\n <div class=\"summary-number\">0</div>\n <div class=\"summary-label\">Overdue</div>\n </div>\n <div class=\"summary-card\">\n <div class=\"summary-number\">{{ totalEstimatedHours }}</div>\n <div class=\"summary-label\">Total Hours</div>\n </div>\n </div>\n </div>\n\n <div class=\"section\">\n <div class=\"section-title\">🔧 Maintenance Tasks</div>\n <div v-for=\"task in maintenanceTasks\" :key=\"task.taskName\"\n :class=\"['task-item', getTaskStatusClass(task)]\">\n\n <div class=\"task-header\">\n <div>\n <div class=\"task-title\">\n {{ task.taskName }}\n <span :class=\"['maintenance-type', 'type-' + task.maintenanceType]\">\n {{ task.maintenanceType }}\n </span>\n </div>\n <div class=\"task-component\">Component: {{ task.component }}</div>\n </div>\n <span :class=\"['status-badge', 'status-' + task.status.toLowerCase().replace(' ', '-')]\">\n {{ task.status }}\n </span>\n </div>\n\n <div class=\"task-details\">\n <div class=\"detail-item\">\n <div class=\"detail-label\">Assigned To</div>\n <div class=\"detail-value\">{{ task.assignedTo }}</div>\n </div>\n <div class=\"detail-item\">\n <div class=\"detail-label\">Estimated Hours</div>\n <div class=\"detail-value\">{{ task.estimatedHours }} hours</div>\n </div>\n <div class=\"detail-item\">\n <div class=\"detail-label\">Last Performed</div>\n <div class=\"detail-value\">{{ formatDate(task.lastPerformed) }}</div>\n </div>\n <div class=\"detail-item\">\n <div class=\"detail-label\">Next Due</div>\n <div class=\"detail-value\">{{ formatDate(task.nextDue) }}</div>\n </div>\n <div class=\"detail-item\">\n <div class=\"detail-label\">Recurrence</div>\n <div class=\"detail-value\">{{ task.recurrence }}</div>\n </div>\n <div class=\"detail-item\">\n <div class=\"detail-label\">Remaining Days</div>\n <div class=\"detail-value\">{{ task.remainingDays }} days</div>\n </div>\n </div>\n\n <div v-if=\"task.description\"\n style=\"margin: 15px 0; padding: 10px; background: white; border-radius: 5px;\">\n <div class=\"detail-label\">Description</div>\n <div class=\"detail-value\">{{ task.description }}</div>\n </div>\n\n <div v-if=\"task.notes\"\n style=\"margin: 15px 0; padding: 10px; background: white; border-radius: 5px;\">\n <div class=\"detail-label\">Notes</div>\n <div class=\"detail-value\">{{ task.notes }}</div>\n </div>\n\n <div v-if=\"task.checklistProgress && task.checklistProgress.length > 0\" class=\"checklist-progress\">\n <div class=\"detail-label\">Checklist Progress</div>\n <div class=\"progress-bar\">\n <div class=\"progress-fill\" :style=\"{ width: getChecklistProgress(task) + '%' }\"></div>\n </div>\n <div style=\"font-size: 0.9em; color: #666; margin-top: 5px;\">\n {{ getCompletedChecklistItems(task) }} of {{ task.checklistProgress.length }} items\n completed\n ({{ getChecklistProgress(task) }}%)\n </div>\n <div class=\"checklist-items\">\n <div v-for=\"(item, index) in task.checklistProgress\" :key=\"index\" class=\"checklist-item\">\n <span class=\"checklist-icon\">{{ item.completed ? '✅' : '⭕' }}</span>\n <span>{{ item.text || 'Checklist Item ' + (index + 1) }}</span>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <div class=\"section\">\n <div class=\"section-title\">📋 Recommendations</div>\n <div class=\"info-box\">\n <ul>\n <li v-for=\"recommendation in generateRecommendations()\" :key=\"recommendation\">\n {{ recommendation }}\n </li>\n </ul>\n </div>\n </div>\n\n <div class=\"signature-section\">\n <div class=\"signature-box\">\n <div><strong>Report Generated By</strong></div>\n <div style=\"margin-top: 10px; color: #666;\">OceanHelm Maintenance System</div>\n </div>\n <div class=\"signature-box\">\n <div><strong>Date</strong></div>\n <div style=\"margin-top: 10px; color: #666;\">{{ reportDate }}</div>\n </div>\n </div>\n </div>\n </div>\n </div>\n</template>\n\n<script>\nexport default {\n name: 'OceanHelmMaintenance',\n props: {\n vesselInfo: {\n type: Object,\n required: true\n },\n tasks: {\n type: Array,\n default: () => []\n },\n vesselCrew: {\n type: Array,\n default: () => []\n },\n companyInfo: {\n type: Object,\n default: () => ({})\n },\n userProfile: {\n type: Object,\n required: true\n }\n },\n emits: [\n 'dashboard-navigate',\n 'load-checklist',\n 'save-schedule',\n 'update-task',\n 'upload-file',\n 'delete-evidence',\n 'access-denied',\n 'show-message',\n 'generate-checklist'\n ],\n data() {\n return {\n ready: true,\n isSaving: false,\n after: null,\n lastSection: '',\n currentTask: '',\n imgText: 'Choose file to upload',\n fileText: 'Drag and drop files here or',\n fileattachments: {},\n refreshKey: 0,\n activeSection: 'inventory',\n sections: [\n { id: 'schedule', name: 'Schedule', icon: '📅' },\n { id: 'inventory', name: 'All Maintenance', icon: '♻️' },\n {\n id: 'dashboard', \n name: 'Dashboard', \n icon: '☰', \n onClick: () => this.$emit('dashboard-navigate')\n }\n ],\n activeFilter: 'all',\n searchQuery: '',\n checklists: [],\n isLoading: false,\n form: {\n taskName: '',\n description: '',\n maintenanceType: '',\n component: '',\n priority: '',\n dueDate: '',\n estimatedHours: null,\n assignedTo: '',\n recurrence: '',\n lastPerformed: '',\n nextDue: '',\n notifyEmail: true,\n notifySms: true,\n reminderDays: '1',\n estimatedDuration: null,\n notes: '',\n status: 'Soon',\n email: '',\n remainingDays: null,\n attachments: {}\n },\n maintenanceTasks: [],\n showReport: false,\n reportDate: new Date().toLocaleDateString('en-US', {\n year: 'numeric',\n month: 'long',\n day: 'numeric'\n }),\n reportId: 'MT-' + Math.random().toString(36).substr(2, 9).toUpperCase(),\n };\n },\n watch: {\n 'form.lastPerformed': 'calculateNextDue',\n 'form.recurrence': 'calculateNextDue',\n 'form.nextDue': function (newDate) {\n this.calculateRemainingDays();\n }\n },\n computed: {\n filteredTasks() {\n let result = [...this.tasks];\n if (this.activeFilter === 'all') {\n result = result.filter(task => task.status === 'Overdue' || task.status === 'Soon' || task.status === 'Completed');\n }\n else if (this.activeFilter === 'due') {\n result = result.filter(task => task.status === 'Overdue' || task.status === 'Soon');\n } else if (this.activeFilter === 'completed') {\n result = result.filter(task => task.status === 'Completed');\n }\n\n if (this.searchQuery) {\n const query = this.searchQuery.toLowerCase();\n result = result.filter(task =>\n task.component.toLowerCase().includes(query) ||\n task.taskName.toLowerCase().includes(query) ||\n task.assignedTo.toLowerCase().includes(query)\n );\n }\n\n return result;\n },\n completedCount() {\n return this.checklists.filter(item => item.completed);\n },\n progress() {\n return Math.round((this.completedCount.length / this.checklists.length) * 100);\n },\n checklistButtonLabel() {\n return this.lastSection === 'schedule' ? 'Approve Maintenance' : 'Save Checklist';\n },\n showAddTaskButton() {\n return this.checklistButtonLabel !== 'Save Checklist';\n },\n totalEstimatedHours() {\n return this.maintenanceTasks.reduce((total, task) => total + (task.estimatedHours || 0), 0);\n },\n },\n methods: {\n grantAccess(vessel) {\n const profile = this.userProfile;\n return profile.role === 'owner' || \n profile.role === 'staff' || \n (profile.role === 'captain' && profile.vessel === vessel);\n },\n deepAccess() {\n const profile = this.userProfile;\n if (profile.role === 'owner' || profile.role === 'captain') {\n return true;\n } else {\n this.$emit('access-denied', 'You do not have access to do this');\n return false;\n }\n },\n deleteTask(taskId) {\n this.checklists = this.checklists.filter(checklist => checklist.id !== taskId);\n },\n addTask(event) {\n if (event) event.preventDefault();\n \n this.$emit('show-message', {\n type: 'prompt',\n title: 'Add New Task',\n message: 'Enter the task details',\n callback: (result) => {\n if (result) {\n const newTask = {\n id: Date.now(),\n text: result,\n completed: false\n };\n this.checklists.push(newTask);\n }\n }\n });\n },\n setFilter(filter) {\n this.activeFilter = filter;\n },\n loadChecklist(taskComponent) {\n this.isLoading = true;\n this.$emit('generate-checklist', {\n component: taskComponent,\n callback: (checklist) => {\n this.checklists = checklist.map(item => ({\n ...item,\n completed: false\n }));\n this.isLoading = false;\n }\n });\n },\n showMaintenance(taskComponent) {\n if (this.deepAccess()) {\n const task = this.tasks.find(t => t.component === taskComponent);\n\n if (task && task.checklistProgress) {\n this.checklists = [...task.checklistProgress];\n } else {\n this.loadChecklist(taskComponent);\n }\n\n this.after = task?.after;\n this.currentTask = taskComponent;\n this.lastSection = 'inventory';\n this.activeSection = 'maintenance';\n }\n },\n printMaintenance(taskComponent) {\n const task = this.tasks.find(t => t.component === taskComponent);\n this.maintenanceTasks = [task];\n this.loadMaintenanceData();\n\n this.showReport = true;\n\n this.$nextTick(() => {\n setTimeout(() => {\n window.print();\n this.showReport = false;\n }, 100);\n });\n },\n switchSchedule() {\n if (this.deepAccess()) {\n this.activeSection = 'schedule';\n }\n },\n handleFiles(event) {\n this.imgText = event.target.files[0].name;\n this.form.attachments = {\n file: event.target.files[0]\n };\n },\n handleImg(event) {\n this.fileText = event.target.files[0].name;\n this.fileattachments = {\n file: event.target.files[0]\n };\n },\n validateForm() {\n const requiredFields = [\n 'taskName',\n 'description',\n 'maintenanceType',\n 'component',\n 'priority',\n 'estimatedHours',\n 'recurrence',\n 'lastPerformed',\n 'assignedTo'\n ];\n\n for (const field of requiredFields) {\n if (!this.form[field]) {\n this.$emit('show-message', {\n type: 'error',\n title: 'Missing info',\n message: `Please fill in the required field: ${field}`\n });\n return false;\n }\n }\n\n return true;\n },\n handleSectionClick(section) {\n this.activeSection = section.id;\n if (typeof section.onClick === 'function') {\n section.onClick();\n }\n },\n calculateNextDue() {\n const date = this.form.lastPerformed ? new Date(this.form.lastPerformed) : null;\n const recurrence = this.form.recurrence;\n\n if (!date || !recurrence) return;\n\n let nextDate = new Date(date);\n\n switch (recurrence) {\n case 'daily':\n nextDate.setDate(nextDate.getDate() + 1);\n break;\n case 'weekly':\n nextDate.setDate(nextDate.getDate() + 7);\n break;\n case 'monthly':\n nextDate.setMonth(nextDate.getMonth() + 1);\n break;\n case 'quarterly':\n nextDate.setMonth(nextDate.getMonth() + 3);\n break;\n case 'semi-annual':\n nextDate.setMonth(nextDate.getMonth() + 6);\n break;\n case 'annual':\n nextDate.setFullYear(nextDate.getFullYear() + 1);\n break;\n case 'once':\n case 'custom':\n return;\n }\n\n this.form.nextDue = nextDate.toISOString().split('T')[0];\n },\n calculateRemainingDays() {\n if (!this.form.nextDue) {\n this.form.remainingDays = null;\n return;\n }\n\n const today = new Date();\n const nextDueDate = new Date(this.form.nextDue);\n\n today.setHours(0, 0, 0, 0);\n nextDueDate.setHours(0, 0, 0, 0);\n\n const diffTime = nextDueDate - today;\n const diffDays = Math.ceil(diffTime / (1000 * 60 * 60 * 24));\n\n this.form.remainingDays = `${diffDays} Days`;\n },\n async saveSchedule() {\n this.isSaving = true;\n \n if (!this.validateForm()) {\n this.isSaving = false;\n return;\n }\n\n const taskData = { ...this.form };\n\n if (this.form.component === 'Other' && this.form.customComponent) {\n taskData.component = this.form.customComponent;\n }\n\n taskData.email = this.companyInfo.email;\n\n // Check for duplicate component\n const hasDuplicateComponent = this.tasks.some(task => task.component === taskData.component);\n\n if (hasDuplicateComponent) {\n this.$emit('show-message', {\n type: 'error',\n title: 'Duplicate Component',\n message: `A task with the component \"${taskData.component}\" already exists in maintenance`\n });\n this.isSaving = false;\n return;\n }\n\n delete taskData.customComponent;\n\n this.$emit('save-schedule', {\n taskData,\n file: taskData.attachments.file,\n callback: (success) => {\n this.isSaving = false;\n if (success) {\n this.loadChecklist(taskData.component);\n this.lastSection = 'schedule';\n this.currentTask = taskData.component;\n this.resetForm();\n this.activeSection = 'maintenance';\n }\n }\n });\n },\n resetForm() {\n this.form = {\n taskName: '',\n description: '',\n maintenanceType: '',\n component: '',\n priority: '',\n dueDate: '',\n estimatedHours: null,\n assignedTo: '',\n recurrence: '',\n lastPerformed: '',\n nextDue: '',\n notifyEmail: true,\n notifySms: true,\n reminderDays: '1',\n estimatedDuration: null,\n notes: '',\n status: 'Soon',\n remainingDays: null,\n attachments: {}\n };\n },\n toggleTask(task) {\n task.completed = !task.completed;\n },\n async resetTasks() {\n const allCompleted = this.checklists.every(item => item.completed);\n const status = allCompleted ? 'Completed' : 'Soon';\n const updateData = {\n checklistProgress: [...this.checklists],\n status,\n component: this.currentTask,\n after: this.after\n };\n\n this.$emit('update-task', {\n updateData,\n file: this.fileattachments.file,\n tasks: this.tasks,\n callback: (success, updatedAfter) => {\n if (success) {\n if (updatedAfter) {\n this.after = updatedAfter;\n }\n this.fileattachments = {};\n this.fileText = 'Drag and drop files here or';\n this.refreshKey += 1;\n this.activeSection = 'inventory';\n }\n }\n });\n },\n loadMaintenanceData() {\n this.reportId = 'MT-' + Math.random().toString(36).substr(2, 9).toUpperCase();\n this.reportDate = new Date().toLocaleDateString('en-US', {\n year: 'numeric',\n month: 'long',\n day: 'numeric'\n });\n },\n formatDate(dateString) {\n if (!dateString) return 'N/A';\n return new Date(dateString).toLocaleDateString('en-US', {\n year: 'numeric',\n month: 'short',\n day: 'numeric'\n });\n },\n getTaskStatusClass(task) {\n if (task.status === 'Completed') return 'completed';\n if (task.status === 'Overdue') return 'overdue';\n if (task.status === 'In Progress') return 'in-progress';\n return 'pending';\n },\n getChecklistProgress(task) {\n if (!task.checklistProgress || task.checklistProgress.length === 0) return 0;\n const completed = task.checklistProgress.filter(item => item.completed).length;\n return Math.round((completed / task.checklistProgress.length) * 100);\n },\n getCompletedChecklistItems(task) {\n if (!task.checklistProgress) return 0;\n return task.checklistProgress.filter(item => item.completed).length;\n },\n generateRecommendations() {\n return [\n 'Maintain regular communication with assigned technicians',\n 'Ensure all safety protocols are followed during maintenance activities',\n 'Update task progress and notes in real-time for accurate reporting'\n ];\n },\n deleteEvidence() {\n this.$emit('delete-evidence', {\n currentTask: this.currentTask,\n callback: (success) => {\n if (success) {\n this.after = null;\n this.fileText = 'Drag and drop files here or';\n this.fileattachments = {};\n this.refreshKey += 1;\n }\n }\n });\n }\n }\n};\n</script>\n<!--\n<style>\n.progress-container {\n margin-bottom: 20px;\n}\n\n.progress-bar {\n background-color: #e9ecef;\n border-radius: 4px;\n height: 10px;\n margin-top: 8px;\n}\n\n.progress-fill {\n background-color: #00a8e8;\n height: 100%;\n border-radius: 4px;\n transition: width 0.3s ease;\n}\n\n.checklist {\n list-style-type: none;\n padding: 0;\n}\n\n.checklist-item {\n display: flex;\n align-items: center;\n padding: 10px 0;\n border-bottom: 1px solid #eee;\n cursor: pointer;\n}\n\n.checkbox {\n margin-right: 15px;\n width: 20px;\n height: 20px;\n border: 2px solid #00a8e8;\n border-radius: 50%;\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n}\n\n.checkbox.checked {\n background-color: #00a8e8;\n color: white;\n}\n\n.task-text {\n flex-grow: 1;\n}\n\n.task-text.completed {\n text-decoration: line-through;\n color: #6c757d;\n}\n\n.status {\n margin-top: 20px;\n font-weight: bold;\n text-align: center;\n}\n\n.reset-button {\n background-color: #005792;\n color: white;\n border: none;\n padding: 8px 16px;\n border-radius: 4px;\n cursor: pointer;\n margin-top: 20px;\n font-weight: bold;\n}\n\n.btn-outline-custom {\n color: #005792;\n /* your custom text color */\n border: 2px solid #005792;\n /* your custom border color */\n background-color: transparent;\n padding: 8px 16px;\n border-radius: 4px;\n font-weight: 500;\n cursor: pointer;\n transition: background-color 0.3s, color 0.3s;\n}\n\n.btn-outline-custom:hover {\n background-color: #005792;\n /* custom hover background */\n color: white;\n /* text color on hover */\n}\n\n.reset-button:hover {\n background-color: #003d5b;\n}\n\nheader {\n background-color: var(--maitprimary);\n color: white;\n padding: 1rem;\n text-align: center;\n border-radius: 5px 5px 0 0;\n}\n\n/* \n*/\n\n.content {\n background-color: white;\n padding: 20px;\n border-radius: 0 0 5px 5px;\n box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);\n}\n\n.form-section {\n display: none;\n animation: fadeIn 0.5s;\n}\n\n.form-section.active {\n display: block;\n}\n\n.form-row {\n margin-bottom: 15px;\n}\n\n.form-group {\n margin-bottom: 20px;\n}\n\nlabel {\n display: block;\n margin-bottom: 5px;\n font-weight: bold;\n color: var(--dark);\n}\n\ninput,\nselect,\ntextarea {\n width: 100%;\n padding: 10px;\n border: 1px solid #ddd;\n border-radius: 4px;\n font-size: 16px;\n}\n\n.input-group {\n display: flex;\n gap: 10px;\n}\n\n.input-group>div {\n flex: 1;\n}\n\ntextarea {\n height: 120px;\n resize: vertical;\n}\n\n/* \n.btn {\n padding: 10px 20px;\n border-radius: 4px;\n cursor: pointer;\n font-size: 16px;\n font-weight: bold;\n transition: background-color 0.3s;\n}*/\n\n.btn-primary {\n background-color: var(--maitprimary);\n color: white;\n}\n\n.btn-primary:hover {\n background-color: var(--dark);\n}\n\n.btn-success {\n background-color: var(--success);\n color: white;\n}\n\n.btn-success:hover {\n background-color: #219653;\n}\n\n.action-buttons {\n display: flex;\n justify-content: flex-end;\n gap: 10px;\n margin-top: 20px;\n}\n\n.status-badge {\n display: inline-block;\n padding: 5px 10px;\n border-radius: 15px;\n font-size: 14px;\n font-weight: bold;\n color: white;\n}\n\n.status-pending {\n background-color: var(--warning);\n}\n\n.status-progress {\n background-color: var(--accent);\n}\n\n.status-completed {\n background-color: var(--success);\n}\n\n.attachment-area {\n border: 2px dashed #ddd;\n padding: 20px;\n text-align: center;\n border-radius: 5px;\n margin-bottom: 20px;\n}\n\n.file-input {\n display: none;\n}\n\n.file-label {\n display: inline-block;\n padding: 10px 20px;\n background-color: var(--accent);\n color: white;\n border-radius: 4px;\n cursor: pointer;\n transition: background-color 0.3s;\n}\n\n.file-label:hover {\n background-color: var(--maitsecondary);\n}\n\n@keyframes fadeIn {\n from {\n opacity: 0;\n }\n\n to {\n opacity: 1;\n }\n}\n\n.form-section h3 {\n margin-top: 30px;\n margin-bottom: 15px;\n color: var(--maitsecondary);\n}\n\n.checkbox-group {\n display: flex;\n flex-wrap: wrap;\n gap: 15px;\n margin-top: 10px;\n}\n\n.checkbox-item {\n display: flex;\n align-items: center;\n gap: 5px;\n}\n\n.checkbox-item input {\n width: auto;\n}\n\n.status-badge {\n padding: 0.3em 0.6em;\n border-radius: 4px;\n color: white;\n font-weight: bold;\n font-size: 0.85rem;\n}\n\n.status-action {\n padding: 0.3em 0.6em;\n border-radius: 4px;\n color: white;\n font-weight: bold;\n font-size: 0.85rem;\n background-color: var(--maitprimary);\n}\n\n.status-badge.overdue {\n background-color: red;\n}\n\n.status-badge.soon {\n background-color: orange;\n}\n\n/* Wrapper layout */\n.task-table-wrapper {\n font-family: 'Inter', sans-serif;\n padding: 1rem;\n}\n\n/* Controls section */\n.table-controls {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 1rem;\n flex-wrap: wrap;\n gap: 1rem;\n}\n\n.filters {\n display: flex;\n gap: 0.5rem;\n flex-wrap: wrap;\n}\n\n.filters button,\n.filters input {\n padding: 0.5rem 1rem;\n border-radius: 6px;\n border: 1px solid #ccc;\n background-color: #f5f5f5;\n font-weight: 500;\n cursor: pointer;\n}\n\n.filters button.active {\n background-color: #002f6c;\n color: white;\n}\n\n.filters input {\n border: 1px solid #bbb;\n}\n\n.filter-badge {\n background-color: #eee;\n color: #333;\n}\n\n/* Print and Add buttons */\n.table-controls>div:last-child button {\n padding: 0.5rem 1rem;\n border: 1px solid var(--maitprimary);\n border-radius: 6px;\n background-color: white;\n color: var(--maitprimary);\n ;\n font-weight: 600;\n cursor: pointer;\n transition: background 0.2s;\n}\n\n.table-controls>div:last-child button:last-child {\n background-color: var(--maitprimary);\n ;\n color: white;\n}\n\n/* Table */\n.task-table {\n width: 100%;\n border-collapse: collapse;\n box-shadow: 0 0 0 1px #ccc;\n}\n\n.task-table thead {\n background-color: var(--maitprimary);\n ;\n color: white;\n}\n\n.task-table th,\n.task-table td {\n padding: 0.75rem;\n text-align: left;\n border-bottom: 1px solid #eee;\n white-space: pre-line;\n /* so \\n works */\n}\n\n.task-table tbody tr:hover {\n background-color: #f9f9f9;\n}\n\n/* Status badges */\n.status-badge {\n padding: 0.3em 0.6em;\n border-radius: 6px;\n font-weight: bold;\n font-size: 0.85rem;\n color: white;\n display: inline-block;\n text-align: center;\n min-width: 90px;\n}\n\n.status-badge.complete {\n background-color: #4dffd0;\n}\n\n.status-badge.soon {\n background-color: #ffa500;\n}\n\n.status-badge.completed {\n background-color: #4caf50;\n}\n\n.delete-btn {\n background: none;\n border: none;\n color: #dc3545;\n cursor: pointer;\n padding: 6px;\n border-radius: 4px;\n display: flex;\n align-items: center;\n justify-content: center;\n transition: all 0.2s ease;\n opacity: 1;\n margin-left: 8px;\n flex-shrink: 0;\n transform: scale(1.1);\n}\n\n.checklist-item:hover .delete-btn {\n opacity: 1;\n}\n\n.delete-btn:hover {\n background-color: #dc3545;\n color: white;\n transform: scale(1.1);\n}\n\n.delete-btn:active {\n transform: scale(0.95);\n}\n\n.print-only-container {\n text-align: center;\n}\n\n.initial-print-btn {\n background: linear-gradient(135deg, #0066cc, #004499);\n color: white;\n border: none;\n padding: 20px 40px;\n font-size: 1.3em;\n border-radius: 12px;\n cursor: pointer;\n transition: all 0.3s ease;\n box-shadow: 0 6px 20px rgba(0, 102, 204, 0.3);\n display: flex;\n align-items: center;\n gap: 15px;\n margin: 0 auto;\n}\n\n.initial-print-btn:hover {\n background: linear-gradient(135deg, #004499, #003366);\n transform: translateY(-3px);\n box-shadow: 0 8px 25px rgba(0, 102, 204, 0.4);\n}\n\n.initial-print-btn:active {\n transform: translateY(0);\n}\n\n.company-branding {\n margin-bottom: 30px;\n}\n\n.company-logo {\n font-size: 3em;\n font-weight: bold;\n color: #0066cc;\n margin-bottom: 10px;\n}\n\n.company-tagline {\n font-size: 1.1em;\n color: #666;\n}\n\n/* Report Styles - Hidden Initially */\n.report-container {\n display: none;\n max-width: 900px;\n margin: 0 auto;\n background: white;\n padding: 30px;\n border-radius: 10px;\n box-shadow: 0 4px 15px rgba(0, 0, 0, 0.1);\n}\n\n.header {\n text-align: center;\n border-bottom: 3px solid #0066cc;\n padding-bottom: 20px;\n margin-bottom: 30px;\n}\n\n.report-logo {\n font-size: 2.5em;\n font-weight: bold;\n color: #0066cc;\n margin-bottom: 10px;\n}\n\n.report-title {\n font-size: 1.8em;\n color: #333;\n margin: 10px 0;\n}\n\n.report-info {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));\n gap: 20px;\n margin-bottom: 30px;\n}\n\n.info-box {\n background: #f8f9fa;\n padding: 15px;\n border-radius: 8px;\n border-left: 4px solid #0066cc;\n}\n\n.info-box ul li {\n margin-left: 15px;\n}\n\n.info-label {\n font-weight: bold;\n color: #0066cc;\n margin-bottom: 5px;\n}\n\n.section {\n margin-bottom: 30px;\n}\n\n.section-title {\n font-size: 1.3em;\n font-weight: bold;\n color: #0066cc;\n border-bottom: 2px solid #e9ecef;\n padding-bottom: 10px;\n margin-bottom: 15px;\n}\n\n.task-item {\n background: #f8f9fa;\n margin: 15px 0;\n padding: 20px;\n border-radius: 8px;\n border-left: 4px solid #28a745;\n box-shadow: 0 2px 5px rgba(0, 0, 0, 0.1);\n}\n\n.task-item.pending {\n border-left-color: #ffc107;\n}\n\n.task-item.overdue {\n border-left-color: #dc3545;\n}\n\n.task-item.in-progress {\n border-left-color: #17a2b8;\n}\n\n.task-header {\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n margin-bottom: 15px;\n flex-wrap: wrap;\n gap: 10px;\n}\n\n.task-title {\n font-size: 1.2em;\n font-weight: bold;\n color: #333;\n}\n\n.task-component {\n font-size: 0.9em;\n color: #666;\n margin-top: 5px;\n}\n\n.status-badge {\n display: inline-block;\n padding: 6px 12px;\n border-radius: 20px;\n font-size: 0.8em;\n font-weight: bold;\n text-transform: uppercase;\n}\n\n.status-completed {\n background: #d4edda;\n color: #155724;\n}\n\n.status-pending {\n background: #fff3cd;\n color: #856404;\n}\n\n.status-overdue {\n background: #f8d7da;\n color: #721c24;\n}\n\n.status-in-progress {\n background: #d1ecf1;\n color: #0c5460;\n}\n\n.task-details {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));\n gap: 15px;\n margin: 15px 0;\n}\n\n.detail-item {\n display: flex;\n flex-direction: column;\n}\n\n.detail-label {\n font-weight: bold;\n font-size: 0.85em;\n color: #0066cc;\n margin-bottom: 3px;\n}\n\n.detail-value {\n font-size: 0.95em;\n color: #333;\n}\n\n.checklist-progress {\n margin-top: 15px;\n}\n\n.progress-bar {\n width: 100%;\n height: 20px;\n background: #e9ecef;\n border-radius: 10px;\n overflow: hidden;\n margin: 10px 0;\n}\n\n.progress-fill {\n height: 100%;\n background: linear-gradient(90deg, #28a745, #20c997);\n transition: width 0.3s ease;\n}\n\n.checklist-items {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));\n gap: 10px;\n margin-top: 10px;\n}\n\n.checklist-item {\n display: flex;\n align-items: center;\n padding: 8px;\n background: white;\n border-radius: 5px;\n font-size: 0.9em;\n}\n\n.checklist-icon {\n margin-right: 8px;\n font-size: 1.1em;\n}\n\n.summary-grid {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(150px, 1fr));\n gap: 15px;\n margin: 20px 0;\n}\n\n.summary-card {\n background: white;\n padding: 20px;\n border-radius: 8px;\n text-align: center;\n border: 2px solid #e9ecef;\n}\n\n.summary-number {\n font-size: 2em;\n font-weight: bold;\n color: #0066cc;\n}\n\n.summary-label {\n font-size: 0.9em;\n color: #666;\n margin-top: 5px;\n}\n\n.signature-section {\n margin-top: 40px;\n display: grid;\n grid-template-columns: 1fr 1fr;\n gap: 40px;\n}\n\n.signature-box {\n padding-top: 10px;\n text-align: center;\n}\n\n.maintenance-type {\n display: inline-block;\n padding: 4px 8px;\n border-radius: 12px;\n font-size: 0.75em;\n font-weight: bold;\n text-transform: uppercase;\n margin-left: 10px;\n}\n\n.type-corrective {\n background: #fff3cd;\n color: #856404;\n}\n\n.type-preventive {\n background: #d4edda;\n color: #155724;\n}\n\n.type-predictive {\n background: #d1ecf1;\n color: #0c5460;\n}\n\n/* Print Styles */\n@media print {\n body {\n background: white;\n padding: 0;\n display: block;\n }\n\n .print-only-container {\n display: none !important;\n }\n\n .report-container {\n display: block !important;\n box-shadow: none;\n padding: 0;\n margin: 0;\n max-width: none;\n }\n}\n\nnav button {\n background-color: var(--maitsecondary);\n color: white;\n border: none;\n padding: 10px 20px;\n margin: 5px;\n cursor: pointer;\n font-weight: bold;\n border-radius: 3px;\n transition: background-color 0.3s;\n}\n\nnav button:hover,\nnav button.active {\n background-color: var(--maitprimary);\n}\n</style>\n-->","<template>\n <div class=\"activity-logs\">\n <!-- Controls -->\n <div class=\"a-controls\">\n <div class=\"a-search-box\">\n <input type=\"text\" placeholder=\"Search activities, users, or actions...\" :value=\"searchTerm\"\n @input=\"$emit('update:searchTerm', $event.target.value)\" />\n </div>\n <select class=\"filter-select\" :value=\"selectedFilter\"\n @change=\"$emit('update:selectedFilter', $event.target.value)\">\n <option value=\"all\">All Activities</option>\n <option value=\"login\">Login</option>\n <option value=\"logout\">Logout</option>\n <option value=\"create\">Create</option>\n <option value=\"update\">Update</option>\n <option value=\"delete\">Delete</option>\n <option value=\"view\">View</option>\n </select>\n <button class=\"btn btn-primary\" @click=\"$emit('refresh')\">🔄 Refresh</button>\n <button class=\"btn btn-secondary\" @click=\"$emit('download')\">📥 Download Report</button>\n </div>\n\n <!-- Stats -->\n <div class=\"stats-grid\">\n <div class=\"stat-card\">\n <h3>Total Activities</h3>\n <div class=\"value\">{{ totalActivities }}</div>\n </div>\n <div class=\"stat-card\">\n <h3>Today's Activities</h3>\n <div class=\"value\">{{ todayActivities }}</div>\n </div>\n <div class=\"stat-card\">\n <h3>Active Users</h3>\n <div class=\"value\">{{ activeUsers }}</div>\n </div>\n <div class=\"stat-card\">\n <h3>Important</h3>\n <div class=\"badge-danger\">\n Logs are deleted at the end of every month, please download a copy\n </div>\n </div>\n </div>\n\n <!-- Logs Table -->\n <div class=\"logs-container\">\n <div v-if=\"loading\" class=\"loading\">\n <div class=\"spinner\"></div>\n <p>Loading activity logs...</p>\n </div>\n\n <div v-else-if=\"logs.length === 0\" class=\"no-logs\">\n <h3>No activities found</h3>\n <p>Try adjusting your search or filter criteria</p>\n </div>\n\n <div v-else>\n <table class=\"logs-table\">\n <thead>\n <tr>\n <th>Timestamp</th>\n <th>User Name</th>\n <th>Action</th>\n <th>Details</th>\n <th>Section</th>\n </tr>\n </thead>\n <tbody>\n <tr v-for=\"log in paginatedLogs\" :key=\"log.id\">\n <td>{{ formatDate(log.timestamp) }}</td>\n <td>\n <div>{{ log.user_name }}</div>\n <small style=\"color: gray\">{{ log.email }}</small>\n </td>\n <td>\n <span class=\"activity-badge\" :class=\"getBadgeClass(log.action)\">\n {{ log.action }}\n </span>\n </td>\n <td>\n {{ log.details.status }}\n <div v-for=\"(change, key) in log.details.information\" :key=\"key\">\n <strong>{{ key }}: </strong>\n <small style=\"color: gray\">\n {{ change?.from ?? \"\" }} → {{ change?.to ?? change ?? \"\" }}\n </small>\n </div>\n </td>\n <td>{{ log.table_name }}</td>\n </tr>\n </tbody>\n </table>\n\n <!-- Pagination -->\n <div class=\"pagination\">\n <button @click=\"$emit('change-page', currentPage - 1)\" :disabled=\"currentPage === 1\">\n Previous\n </button>\n <button v-for=\"page in totalPages\" :key=\"page\" @click=\"$emit('change-page', page)\"\n :class=\"{ active: currentPage === page }\">\n {{ page }}\n </button>\n <button @click=\"$emit('change-page', currentPage + 1)\" :disabled=\"currentPage === totalPages\">\n Next\n </button>\n </div>\n </div>\n </div>\n </div>\n</template>\n\n<script>\nexport default {\n name: \"ActivityLogs\",\n props: {\n loading: Boolean,\n searchTerm: String,\n selectedFilter: String,\n logs: Array,\n paginatedLogs: Array,\n totalActivities: Number,\n todayActivities: Number,\n activeUsers: Number,\n totalPages: Number,\n currentPage: Number,\n },\n emits: [\"update:searchTerm\", \"update:selectedFilter\", \"refresh\", \"download\", \"change-page\"],\n methods: {\n formatDate(timestamp) {\n return new Date(timestamp).toLocaleString();\n },\n getBadgeClass(action) {\n const classes = {\n login: \"badge-login\",\n logout: \"badge-logout\",\n create: \"badge-create\",\n update: \"badge-update\",\n delete: \"badge-delete\",\n view: \"badge-view\",\n };\n return classes[action] || \"badge-view\";\n },\n },\n};\n</script>\n\n<style>\n.a-header {\n background: linear-gradient(135deg, var(--dashprimary-color), var(--dashsecondary-color));\n color: white;\n padding: 2rem 0;\n margin-bottom: 2rem;\n border-radius: 12px;\n box-shadow: 0 10px 30px rgba(52, 153, 64, 0.3);\n}\n\n.a-header h1 {\n font-size: 2.5rem;\n font-weight: 700;\n margin-bottom: 0.5rem;\n text-align: center;\n}\n\n.a-header p {\n text-align: center;\n opacity: 0.9;\n font-size: 1.1rem;\n}\n\n.a-controls {\n display: flex;\n gap: 1rem;\n margin-bottom: 2rem;\n flex-wrap: wrap;\n align-items: center;\n}\n\n.a-search-box {\n flex: 1;\n min-width: 250px;\n position: relative;\n}\n\n.a-search-box input {\n width: 100%;\n padding: 12px 16px;\n border: 2px solid #e0e0e0;\n border-radius: 8px;\n font-size: 1rem;\n transition: all 0.3s ease;\n}\n\n.a-search-box input:focus {\n outline: none;\n border-color: var(--dashsecondary-color);\n box-shadow: 0 0 0 3px rgba(52, 153, 64, 0.1);\n}\n\n.filter-select {\n padding: 12px 16px;\n border: 2px solid #e0e0e0;\n border-radius: 8px;\n font-size: 1rem;\n background: white;\n cursor: pointer;\n transition: all 0.3s ease;\n}\n\n.filter-select:focus {\n outline: none;\n border-color: var(--dashsecondary-color);\n box-shadow: 0 0 0 3px rgba(52, 153, 64, 0.1);\n}\n\n.btn {\n padding: 12px 24px;\n border-radius: 8px;\n font-size: 1rem;\n font-weight: 600;\n cursor: pointer;\n transition: all 0.3s ease;\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.btn-primary {\n background: var(--primary);\n color: white;\n}\n\n.btn-primary:hover {\n background: var(--primary-dark);\n transform: translateY(-1px);\n box-shadow: 0 4px 12px rgba(52, 153, 64, 0.3);\n}\n\n.btn-secondary {\n background: var(--secondary);\n color: var(--dark);\n}\n\n.btn-secondary:hover {\n background: #e6a200;\n transform: translateY(-1px);\n box-shadow: 0 4px 12px rgba(244, 180, 0, 0.3);\n}\n\n.stats-grid {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));\n gap: 1.5rem;\n margin-bottom: 2rem;\n}\n\n.stat-card {\n background: white;\n padding: 1.5rem;\n border-radius: 12px;\n box-shadow: 0 4px 20px rgba(0, 0, 0, 0.05);\n transition: transform 0.3s ease;\n}\n\n.stat-card:hover {\n transform: translateY(-2px);\n}\n\n.stat-card h3 {\n color: var(--gray);\n font-size: 0.9rem;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n margin-bottom: 0.5rem;\n}\n\n.stat-card .value {\n font-size: 2rem;\n font-weight: 700;\n color: var(--dashsecondary-color);\n}\n\n.logs-container {\n background: white;\n border-radius: 12px;\n box-shadow: 0 4px 20px rgba(0, 0, 0, 0.05);\n overflow: hidden;\n}\n\n.logs-header {\n background: var(--light);\n padding: 1.5rem;\n border-bottom: 1px solid #e0e0e0;\n}\n\n.logs-header h2 {\n color: var(--dark);\n font-size: 1.3rem;\n font-weight: 600;\n}\n\n.logs-table {\n width: 100%;\n border-collapse: collapse;\n}\n\n.logs-table th,\n.logs-table td {\n padding: 1rem;\n text-align: left;\n border-bottom: 1px solid #f0f0f0;\n}\n\n.logs-table th {\n background: var(--light);\n font-weight: 600;\n color: var(--dark);\n font-size: 0.9rem;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.logs-table tr:hover {\n background: #f8f9fa;\n}\n\n.activity-badge {\n padding: 4px 12px;\n border-radius: 20px;\n font-size: 0.8rem;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.badge-login {\n background: var(--success);\n color: white;\n}\n\n.badge-logout {\n background: var(--gray);\n color: white;\n}\n\n.badge-create {\n background: var(--dashprimary-color);\n color: white;\n}\n\n.badge-update {\n background: var(--warning);\n color: white;\n}\n\n.badge-delete {\n background: var(--danger);\n color: white;\n}\n\n.badge-danger {\n color: var(--danger);\n}\n\n.badge-view {\n background: var(--maitsecondary);\n color: white;\n}\n\n.pagination {\n display: flex;\n justify-content: center;\n align-items: center;\n gap: 0.5rem;\n padding: 1.5rem;\n background: var(--light);\n}\n\n.pagination button {\n padding: 8px 12px;\n border: 1px solid #e0e0e0;\n background: white;\n border-radius: 6px;\n cursor: pointer;\n transition: all 0.3s ease;\n}\n\n.pagination button:hover {\n background: var(--primary);\n color: white;\n border-color: var(--primary);\n}\n\n.pagination button.active {\n background: var(--primary);\n color: white;\n border-color: var(--primary);\n}\n\n.pagination button:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n.no-logs {\n text-align: center;\n padding: 3rem;\n color: var(--gray);\n}\n\n.no-logs h3 {\n font-size: 1.5rem;\n margin-bottom: 1rem;\n}\n\n.loading {\n text-align: center;\n padding: 3rem;\n color: var(--gray);\n}\n\n.spinner {\n border: 3px solid #f3f3f3;\n border-top: 3px solid var(--primary);\n border-radius: 50%;\n width: 40px;\n height: 40px;\n animation: spin 1s linear infinite;\n margin: 0 auto 1rem;\n}\n\n@keyframes spin {\n 0% {\n transform: rotate(0deg);\n }\n\n 100% {\n transform: rotate(360deg);\n }\n}\n\n@media (max-width: 768px) {\n .a-controls {\n flex-direction: column;\n align-items: stretch;\n }\n\n .a-search-box {\n min-width: 100%;\n }\n\n .stats-grid {\n grid-template-columns: 1fr;\n }\n\n .logs-table {\n font-size: 0.9rem;\n }\n\n .logs-table th,\n .logs-table td {\n padding: 0.5rem;\n }\n}\n</style>","<template>\n <div class=\"crew-management\">\n <!-- Wave background -->\n <div class=\"wave-bg\" v-if=\"config.showWaveBackground\"></div>\n\n <div class=\"crew-section\">\n <div class=\"crew-section-header\">\n <h4 class=\"crew-subhead\">{{ sectionTitle }}</h4>\n <div class=\"header-actions\">\n <button class=\"btn btn-secondary\" @click=\"handleToggleGuestForm\" v-if=\"canAddCrew\">\n {{ showGuestForm ? 'Cancel' : '+ Check-in Guest' }}\n </button>\n <button class=\"btn btn-primary\" @click=\"handleToggleAddForm\" v-if=\"canAddCrew\">\n {{ showAddForm ? 'Cancel' : '+ Add Crew Member' }}\n </button>\n </div>\n </div>\n\n <!-- Personnel Onboard Summary -->\n <div class=\"personnel-summary\" v-if=\"!showAddForm && !showGuestForm && !showTimesheet\">\n <div class=\"summary-header\">\n <h3><i class=\"bi bi-people-fill\"></i> Personnel Onboard Summary</h3>\n <div class=\"summary-date\">{{ currentDate }}</div>\n </div>\n\n <div class=\"summary-cards\">\n <!-- Total Onboard -->\n <div class=\"summary-card total-card\">\n <div class=\"card-icon\">\n <i class=\"bi bi-people\"></i>\n </div>\n <div class=\"card-content\">\n <div class=\"card-value\">{{ totalOnboard }}</div>\n <div class=\"card-label\">Total Onboard</div>\n </div>\n </div>\n\n <!-- Crew Onboard -->\n <div class=\"summary-card crew-card\">\n <div class=\"card-icon\">\n <i class=\"bi bi-person-badge\"></i>\n </div>\n <div class=\"card-content\">\n <div class=\"card-value\">{{ crewOnboard }}</div>\n <div class=\"card-label\">Crew Onboard</div>\n </div>\n </div>\n\n <!-- Guests Onboard -->\n <div class=\"summary-card guest-card-summary\">\n <div class=\"card-icon\">\n <i class=\"bi bi-person-check\"></i>\n </div>\n <div class=\"card-content\">\n <div class=\"card-value\">{{ guestsOnboard }}</div>\n <div class=\"card-label\">Guests Onboard</div>\n </div>\n </div>\n </div>\n\n <!-- Breakdown by Vessel -->\n <div class=\"vessel-breakdown\" v-if=\"Object.keys(personnelByVessel).length > 0\">\n <h4>Breakdown by Vessel</h4>\n <div class=\"vessel-cards\">\n <div v-for=\"(data, vessel) in personnelByVessel\" :key=\"vessel\" class=\"vessel-card\">\n <div class=\"vessel-name\">{{ vessel }}</div>\n <div class=\"vessel-stats\">\n <div class=\"stat-item\">\n <span class=\"stat-label\">Crew:</span>\n <span class=\"stat-value\">{{ data.crew }}</span>\n </div>\n <div class=\"stat-item\">\n <span class=\"stat-label\">Guests:</span>\n <span class=\"stat-value\">{{ data.guests }}</span>\n </div>\n <div class=\"stat-item total-stat\">\n <span class=\"stat-label\">Total:</span>\n <span class=\"stat-value\">{{ data.total }}</span>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Search and Filter - Hide when form is shown -->\n <div class=\"search-filter\" v-if=\"!showAddForm && !showGuestForm\">\n <input type=\"text\" placeholder=\"Search crew by name or role...\" v-model=\"searchQuery\" @input=\"handleSearch\">\n <select v-model=\"filterStatus\" @change=\"handleFilter\">\n <option value=\"all\">All Statuses</option>\n <option value=\"available\">Available</option>\n <option value=\"onduty\">On Duty</option>\n <option value=\"onboard\">On Board</option>\n <option value=\"assigned\">Assigned</option>\n <option value=\"unavailable\">Unavailable</option>\n </select>\n <button class=\"btn btn-secondary\" @click=\"showTimesheet = !showTimesheet\">\n <i :class=\"showTimesheet ? 'bi bi-grid-3x3-gap' : 'bi bi-table'\"></i>\n {{ showTimesheet ? 'Show Crew Cards' : 'Show Timesheet' }}\n </button>\n </div>\n\n <!-- Loading State - Hide when form is shown -->\n <div v-if=\"loading && !showAddForm && !showGuestForm\" class=\"loading-state\">\n <div class=\"spinner-border text-primary\" role=\"status\">\n <span class=\"visually-hidden\">Loading crew...</span>\n </div>\n <p>Loading crew members...</p>\n </div>\n\n <!-- Consolidated Timesheet View - Hide when form is shown -->\n <div v-else-if=\"showTimesheet && !showAddForm && !showGuestForm\" class=\"timesheet-view\">\n <div class=\"timesheet-header\">\n <h3><i class=\"bi bi-table\"></i> Crew Activity Timesheet</h3>\n <div class=\"timesheet-controls\">\n <select v-model=\"timesheetFilter\" @change=\"filterTimesheet\">\n <option value=\"all\">All Activities</option>\n <option value=\"Embarked\">Embarked Only</option>\n <option value=\"Deboarded\">Deboarded Only</option>\n <option value=\"Assigned\">Assigned Only</option>\n <option value=\"Status Changed\">Status Changes Only</option>\n </select>\n <input type=\"text\" v-model=\"timesheetSearch\" placeholder=\"Search timesheet...\"\n class=\"timesheet-search\">\n </div>\n </div>\n\n <div class=\"timesheet-summary\">\n <div class=\"summary-card\">\n <span class=\"summary-label\">Total Entries:</span>\n <span class=\"summary-value\">{{ filteredTimesheetEntries.length }}</span>\n </div>\n <div class=\"summary-card\">\n <span class=\"summary-label\">Crew Members:</span>\n <span class=\"summary-value\">{{ uniqueCrewCount }}</span>\n </div>\n <div class=\"summary-card\">\n <span class=\"summary-label\">Date Range:</span>\n <span class=\"summary-value\">{{ timesheetDateRange }}</span>\n </div>\n </div>\n\n <div v-if=\"filteredTimesheetEntries.length === 0\" class=\"no-results\">\n No timesheet entries found.\n </div>\n\n <div v-else class=\"timesheet-table-container\">\n <table class=\"timesheet-table\">\n <thead>\n <tr>\n <th @click=\"sortTimesheet('timestamp')\">\n Date/Time\n <i class=\"bi bi-arrow-down-up\"></i>\n </th>\n <th @click=\"sortTimesheet('crewName')\">\n Crew Member\n <i class=\"bi bi-arrow-down-up\"></i>\n </th>\n <th @click=\"sortTimesheet('role')\">\n Role\n <i class=\"bi bi-arrow-down-up\"></i>\n </th>\n <th @click=\"sortTimesheet('action')\">\n Action\n <i class=\"bi bi-arrow-down-up\"></i>\n </th>\n <th>Vessel</th>\n <th>Duration</th>\n <th>Notes</th>\n </tr>\n </thead>\n <tbody>\n <tr v-for=\"entry in filteredTimesheetEntries\" :key=\"entry.uniqueId\"\n :class=\"getTimesheetRowClass(entry.action)\">\n <td class=\"timestamp-cell\">{{ formatLogDate(entry.timestamp) }}</td>\n <td class=\"crew-name-cell\">\n <strong>{{ entry.crewName }}</strong>\n </td>\n <td class=\"role-cell\">{{ entry.role }}</td>\n <td class=\"action-cell\">\n <span :class=\"['action-badge', getLogActionClass(entry.action)]\">\n <i :class=\"getLogIcon(entry.action)\"></i>\n {{ entry.action }}\n </span>\n </td>\n <td class=\"vessel-cell\">{{ entry.vessel || 'N/A' }}</td>\n <td class=\"duration-cell\">{{ entry.duration ? entry.duration + ' days' : 'N/A' }}</td>\n <td class=\"notes-cell\">{{ entry.notes || '-' }}</td>\n </tr>\n </tbody>\n </table>\n </div>\n </div>\n\n <!-- Crew Grid - Hide when form is shown -->\n <div class=\"crew-grid\" v-else-if=\"filteredCrew.length > 0 && !showAddForm && !showGuestForm\">\n <div v-for=\"member in filteredCrew\" :key=\"member.id\" class=\"crew-card\"\n :class=\"{ 'unavailable': member.status === 'unavailable', 'guest-card': member.role === 'guest' }\">\n <div :class=\"['crew-status-badge', getStatusClass(member.status)]\">\n {{ formatStatus(member.status) }}\n </div>\n\n <div class=\"crew-name\">{{ member.name }}</div>\n <div class=\"crew-role\">{{ member.role === 'guest' ? 'Guest' : member.role }}</div>\n\n <!-- Certifications - Only show for non-guests -->\n <div class=\"crew-certifications\" v-if=\"member.role !== 'guest'\">\n <div v-for=\"cert in getApprovedCertifications(member)\" :key=\"cert.name\" class=\"certification-tag\"\n :class=\"getCertificationClass(cert.expiryDate)\" @click=\"handleViewCertification(cert, member)\">\n {{ cert.name }}\n </div>\n <!-- Optional: Show pending certifications count -->\n <div v-if=\"getPendingCertificationsCount(member) > 0\" class=\"certification-tag text-muted\">\n <i class=\"bi bi-clock-history\"></i> {{ getPendingCertificationsCount(member) }} pending\n </div>\n <i class=\"bi bi-patch-plus-fill icon\" @click=\"handleAddCertification(member)\"\n v-if=\"canEditCrew\"></i>\n </div>\n\n <!-- Crew Details - Different for guests -->\n <div v-if=\"member.role === 'guest'\">\n <div class=\"crew-availability\">\n <strong>Arrival Date:</strong> {{ member.nextShift || 'Not Recorded' }}\n </div>\n <div class=\"crew-availability\">\n <strong>Expected Days Onboard:</strong> {{ member.onBoard || 'Not Specified' }}\n </div>\n <div class=\"crew-availability\">\n <strong>Days Onboard:</strong> {{ getGuestDaysOnboard(member) }}\n </div>\n </div>\n <div v-else>\n <div class=\"crew-availability\">\n <strong>Embarkation Date:</strong> {{ getEmbarkationDate(member) }}\n </div>\n <div class=\"crew-availability\">\n <strong>Expected Days Onboard:</strong> {{ member.onBoard || 'Not Scheduled' }}\n </div>\n <div class=\"crew-availability\">\n <strong>Days Onboard:</strong> {{ getDaysOnboard(member) }}\n </div>\n </div>\n\n <!-- Action Buttons -->\n <div class=\"action-buttons\">\n <div v-if=\"member.vessel\" class=\"status-available crew-availability vcard\">\n Vessel: {{ member.vessel }}\n </div>\n <div v-else class=\"status-unavailable crew-availability vcard\">\n Vessel: Unassigned\n </div>\n\n <!-- Guest-specific actions -->\n <button class=\"btn btn-warning\" @click=\"handleCheckoutGuest(member)\"\n v-if=\"member.role === 'guest' && member.status === 'onboard'\">\n Check Out\n </button>\n\n <!-- Crew-specific actions -->\n <template v-if=\"member.role !== 'guest'\">\n <!-- Available: Show Assign Shift button -->\n <button class=\"btn btn-primary\" @click=\"handleAssignShift(member)\"\n v-if=\"canAssignShift && member.status === 'available'\">\n Assign Shift\n </button>\n <!-- On Duty: Show Check In button -->\n <button class=\"btn btn-success\" @click=\"handleCheckinCrew(member)\"\n v-if=\"canDeboardCrew && member.status === 'onduty'\">\n Check In\n </button>\n <!-- Onboard: Show Deboard button -->\n <button class=\"btn btn-warning\" @click=\"handleDeboardCrew(member)\"\n v-if=\"canDeboardCrew && member.status === 'onboard'\">\n Deboard\n </button>\n </template>\n <!-- Unavailable & Assigned: No buttons -->\n </div>\n\n <!-- Crew Log Button and Delete Icon -->\n <div class=\"crew-footer\">\n <div class=\"crew-log-toggle\" v-if=\"member.log && member.log.length > 0\">\n <button class=\"btn btn-link btn-sm log-toggle-btn\" @click=\"toggleCrewLog(member.id)\">\n <i class=\"bi bi-clock-history\"></i> View Log ({{ member.log.length }})\n </button>\n </div>\n <i class=\"bi bi-trash icon delete-icon\" @click=\"handleDeleteCrew(member)\" v-if=\"canDeleteCrew\"></i>\n </div>\n\n <!-- Crew Log Display -->\n <div v-if=\"expandedLogs.includes(member.id)\" class=\"crew-log\">\n <h4>Crew Activity Log</h4>\n <div v-for=\"(entry, index) in member.log\" :key=\"index\" class=\"log-entry\">\n <div class=\"log-date\">{{ formatLogDate(entry.timestamp) }}</div>\n <div class=\"log-action\" :class=\"getLogActionClass(entry.action)\">\n <i :class=\"getLogIcon(entry.action)\"></i>\n {{ entry.action }}\n </div>\n <div class=\"log-details\">\n <span v-if=\"entry.vessel\">Vessel: {{ entry.vessel }}</span>\n <span v-if=\"entry.duration\"> | Duration: {{ entry.duration }} days</span>\n </div>\n <div v-if=\"entry.notes\" class=\"log-notes\">{{ entry.notes }}</div>\n </div>\n </div>\n\n </div>\n </div>\n\n <!-- No Results - Hide when form is shown -->\n <div v-else-if=\"!loading && !showTimesheet && !showAddForm && !showGuestForm\" class=\"no-results\">\n {{ crew.length === 0 ? 'No crew members found.' : 'No crew members found matching your search criteria.' }}\n </div>\n\n <!-- Add Crew Form -->\n <div class=\"add-crew-form\" v-if=\"showAddForm\">\n <h2>Add New Crew Member</h2>\n\n <!-- Basic Information -->\n <div class=\"form-row\">\n <div class=\"form-group\">\n <label for=\"crew-name\">Full Name *</label>\n <input type=\"text\" id=\"crew-name\" v-model=\"newCrew.name\" :class=\"{ 'error': formErrors.name }\">\n <div v-if=\"formErrors.name\" class=\"error-message\">{{ formErrors.name }}</div>\n </div>\n <div class=\"form-group\">\n <label for=\"crew-role\">Role/Position *</label>\n <select id=\"crew-role\" v-model=\"newCrew.role\">\n <option v-for=\"role in availableRoles\" :key=\"role\" :value=\"role\">\n {{ role }}\n </option>\n <option value=\"Other\">Other</option>\n </select>\n <input v-if=\"newCrew.role === 'Other'\" type=\"text\" placeholder=\"Enter custom role\"\n v-model=\"newCrew.customRole\" style=\"margin-top: 8px;\">\n </div>\n </div>\n\n <div class=\"form-row\">\n <div class=\"form-group\">\n <label for=\"crew-email\">Email Address *</label>\n <input type=\"email\" id=\"crew-email\" v-model=\"newCrew.email\" :class=\"{ 'error': formErrors.email }\">\n <div v-if=\"formErrors.email\" class=\"error-message\">{{ formErrors.email }}</div>\n </div>\n </div>\n\n <!-- Certifications Section \n <div class=\"certification-section\">\n <h3>Certifications</h3>\n <div v-for=\"(cert, index) in newCrew.certifications\" :key=\"index\" class=\"certification-entry\">\n <div class=\"form-row\">\n <div class=\"form-group\">\n <label>Certification Name *</label>\n <input type=\"text\" v-model=\"cert.name\" placeholder=\"Enter certification name\">\n </div>\n <div class=\"form-group\">\n <label>Expiry Date *</label>\n <input type=\"date\" v-model=\"cert.expiryDate\">\n </div>\n <div class=\"form-group\">\n <label>Certificate Image *</label>\n <div class=\"image-upload-wrapper\">\n <input type=\"file\" :id=\"'cert-image-' + index\"\n @change=\"handleCertImageUpload($event, index)\" accept=\"image/*,.pdf\"\n class=\"file-input\">\n <label :for=\"'cert-image-' + index\" class=\"file-input-label\">\n <i class=\"bi bi-cloud-upload\"></i>\n {{ cert.imagePreview ? 'Change File' : 'Upload File' }}\n </label>\n <div v-if=\"cert.imagePreview\" class=\"image-preview\">\n <img v-if=\"cert.imageType !== 'pdf'\" :src=\"cert.imagePreview\"\n alt=\"Certificate preview\">\n <div v-else class=\"pdf-preview\">\n <i class=\"bi bi-file-pdf\"></i>\n <span>{{ cert.imageName }}</span>\n </div>\n <button type=\"button\" class=\"btn-remove-image\" @click=\"removeCertImage(index)\">\n <i class=\"bi bi-x-circle\"></i>\n </button>\n </div>\n <small v-if=\"cert.imageName\" class=\"file-name\">{{ cert.imageName }}</small>\n </div>\n </div>\n <div class=\"form-group\" style=\"display: flex; align-items: flex-end;\">\n <button type=\"button\" class=\"btn btn-danger btn-sm\" @click=\"removeCertification(index)\"\n v-if=\"newCrew.certifications.length > 1\">\n Remove\n </button>\n </div>\n </div>\n </div>\n\n <button type=\"button\" class=\"btn btn-secondary btn-sm\" @click=\"addCertificationEntry\">\n + Add More Certification\n </button>\n </div>\n -->\n\n <!-- Notes -->\n <div class=\"form-row\">\n <div class=\"form-group\">\n <label for=\"crew-notes\">Notes</label>\n <textarea id=\"crew-notes\" rows=\"3\" v-model=\"newCrew.notes\"></textarea>\n </div>\n </div>\n\n <!-- Form Actions -->\n <div class=\"form-actions\">\n <button class=\"btn btn-secondary\" @click=\"handleCancelForm\">Cancel</button>\n <button class=\"btn btn-primary\" @click=\"handleAddCrewMember\">Add Crew Member</button>\n </div>\n </div>\n\n <!-- Guest Check-in Form -->\n <div class=\"add-crew-form\" v-if=\"showGuestForm\">\n <h2>Check-in Guest</h2>\n\n <!-- Basic Information -->\n <div class=\"form-row\">\n <div class=\"form-group\">\n <label for=\"guest-name\">Full Name *</label>\n <input type=\"text\" id=\"guest-name\" v-model=\"newGuest.name\"\n :class=\"{ 'error': guestFormErrors.name }\">\n <div v-if=\"guestFormErrors.name\" class=\"error-message\">{{ guestFormErrors.name }}</div>\n </div>\n <div class=\"form-group\">\n <label for=\"guest-email\">Email Address</label>\n <input type=\"email\" id=\"guest-email\" v-model=\"newGuest.email\">\n </div>\n </div>\n\n <!-- Vessel Selection - Only show when not on a specific vessel page -->\n <div class=\"form-row\" v-if=\"!vesselName\">\n <div class=\"form-group\">\n <label for=\"guest-vessel\">Vessel *</label>\n <select id=\"guest-vessel\" v-model=\"newGuest.vessel\" :class=\"{ 'error': guestFormErrors.vessel }\">\n <option value=\"\">Select a vessel</option>\n <option v-for=\"vessel in availableVessels\" :key=\"vessel\" :value=\"vessel\">\n {{ vessel }}\n </option>\n </select>\n <div v-if=\"guestFormErrors.vessel\" class=\"error-message\">{{ guestFormErrors.vessel }}</div>\n </div>\n </div>\n\n <div class=\"form-row\">\n <div class=\"form-group\">\n <label for=\"guest-arrival\">Arrival Date *</label>\n <input type=\"date\" id=\"guest-arrival\" v-model=\"newGuest.arrivalDate\"\n :class=\"{ 'error': guestFormErrors.arrivalDate }\">\n <div v-if=\"guestFormErrors.arrivalDate\" class=\"error-message\">{{ guestFormErrors.arrivalDate }}\n </div>\n </div>\n <div class=\"form-group\">\n <label for=\"guest-expected-days\">Expected Days Onboard *</label>\n <input type=\"number\" id=\"guest-expected-days\" v-model=\"newGuest.expectedDays\" min=\"1\"\n :class=\"{ 'error': guestFormErrors.expectedDays }\">\n <div v-if=\"guestFormErrors.expectedDays\" class=\"error-message\">{{ guestFormErrors.expectedDays }}\n </div>\n </div>\n </div>\n\n <!-- Notes -->\n <div class=\"form-row\">\n <div class=\"form-group\">\n <label for=\"guest-notes\">Notes</label>\n <textarea id=\"guest-notes\" rows=\"3\" v-model=\"newGuest.notes\"\n placeholder=\"Purpose of visit, company affiliation, etc.\"></textarea>\n </div>\n </div>\n\n <!-- Form Actions -->\n <div class=\"form-actions\">\n <button class=\"btn btn-secondary\" @click=\"handleCancelGuestForm\">Cancel</button>\n <button class=\"btn btn-primary\" @click=\"handleCheckinGuest\">Check-in Guest</button>\n </div>\n </div>\n </div>\n </div>\n</template>\n\n<script>\nexport default {\n name: 'CrewManagement',\n\n props: {\n crew: {\n type: Array,\n required: true,\n default: () => []\n },\n vesselName: {\n type: String,\n default: ''\n },\n currentCompanyId: {\n type: String,\n required: true,\n default: ''\n },\n userProfile: {\n type: Object,\n default: () => ({ role: 'viewer' })\n },\n loading: {\n type: Boolean,\n default: false\n },\n availableRoles: {\n type: Array,\n default: () => ['Captain', 'First Officer', 'Engineer', 'Deckhand', 'Mechanic', 'Cook']\n },\n config: {\n type: Object,\n default: () => ({\n showWaveBackground: true,\n enableAdd: true,\n enableEdit: true,\n enableDelete: true,\n enableAssignShift: true,\n enableCertificationManagement: true\n })\n }\n },\n\n emits: [\n 'crew-add',\n 'crew-edit',\n 'crew-delete',\n 'view-pending-certifications',\n 'crew-assign-shift',\n 'crew-deboard',\n 'crew-checkin',\n 'crew-add-certification',\n 'crew-view-certification',\n 'search-changed',\n 'filter-changed',\n 'access-denied',\n 'upload-cert-image',\n 'guest-checkin',\n 'guest-checkout'\n ],\n\n data() {\n return {\n searchQuery: '',\n filterStatus: 'all',\n showAddForm: false,\n showGuestForm: false,\n formErrors: {},\n guestFormErrors: {},\n expandedLogs: [],\n showTimesheet: false,\n timesheetFilter: 'all',\n timesheetSearch: '',\n timesheetSortKey: 'timestamp',\n timesheetSortOrder: 'desc',\n newCrew: {\n name: '',\n role: 'Deckhand',\n customRole: '',\n status: 'available',\n nextShift: '',\n certifications: [{\n name: '',\n expiryDate: '',\n imageFile: null,\n imagePreview: null,\n imageName: '',\n imageType: ''\n }],\n notes: '',\n email: '',\n onBoard: ''\n },\n newGuest: {\n name: '',\n email: '',\n vessel: '',\n arrivalDate: '',\n expectedDays: '',\n notes: ''\n }\n }\n },\n\n computed: {\n sectionTitle() {\n return this.vesselName ? `Current Crew for ${this.vesselName}` : 'All Fleet Crew'\n },\n\n getApprovedCertifications() {\n return (member) => {\n if (!member.certifications || member.certifications.length === 0) {\n return []\n }\n\n return member.certifications.filter(cert => {\n // If no verifications exist, certificate is not approved by anyone\n if (!cert.verifications || cert.verifications.length === 0) {\n return false\n }\n\n // Find verification for current company\n const companyVerification = cert.verifications.find(\n v => v.companyId === this.currentCompanyId\n )\n\n // Only show if approved by this company\n return companyVerification && companyVerification.status === 'approved'\n })\n }\n },\n\n filteredCrew() {\n return this.crew.filter(member => {\n const matchesSearch = this.searchQuery === '' ||\n member.name.toLowerCase().includes(this.searchQuery.toLowerCase()) ||\n member.role.toLowerCase().includes(this.searchQuery.toLowerCase()) ||\n (member.vessel && member.vessel.toLowerCase().includes(this.searchQuery.toLowerCase()))\n\n const matchesStatus = this.filterStatus === 'all' || member.status === this.filterStatus\n\n return matchesSearch && matchesStatus\n })\n },\n\n allTimesheetEntries() {\n const entries = []\n\n this.crew.forEach(member => {\n if (member.log && member.log.length > 0) {\n member.log.forEach((logEntry, index) => {\n entries.push({\n ...logEntry,\n crewName: member.name,\n role: member.role,\n crewId: member.id,\n uniqueId: `${member.id}-${index}`\n })\n })\n }\n })\n\n return entries.sort((a, b) => {\n const dateA = new Date(a.timestamp)\n const dateB = new Date(b.timestamp)\n return this.timesheetSortOrder === 'desc' ? dateB - dateA : dateA - dateB\n })\n },\n\n filteredTimesheetEntries() {\n let filtered = this.allTimesheetEntries\n\n if (this.timesheetFilter !== 'all') {\n filtered = filtered.filter(entry => entry.action === this.timesheetFilter)\n }\n\n if (this.timesheetSearch) {\n const search = this.timesheetSearch.toLowerCase()\n filtered = filtered.filter(entry =>\n entry.crewName.toLowerCase().includes(search) ||\n entry.role.toLowerCase().includes(search) ||\n entry.action.toLowerCase().includes(search) ||\n (entry.vessel && entry.vessel.toLowerCase().includes(search)) ||\n (entry.notes && entry.notes.toLowerCase().includes(search))\n )\n }\n\n return this.sortTimesheetEntries(filtered)\n },\n\n uniqueCrewCount() {\n const uniqueCrewIds = new Set(this.filteredTimesheetEntries.map(e => e.crewId))\n return uniqueCrewIds.size\n },\n\n timesheetDateRange() {\n if (this.filteredTimesheetEntries.length === 0) return 'N/A'\n\n const dates = this.filteredTimesheetEntries.map(e => new Date(e.timestamp))\n const minDate = new Date(Math.min(...dates))\n const maxDate = new Date(Math.max(...dates))\n\n const formatDate = (date) => date.toLocaleDateString('en-US', { month: 'short', day: 'numeric', year: 'numeric' })\n\n return `${formatDate(minDate)} - ${formatDate(maxDate)}`\n },\n\n canAddCrew() {\n return this.config.enableAdd && this.hasPermission('add')\n },\n\n canEditCrew() {\n return this.config.enableEdit && this.hasPermission('edit')\n },\n\n canDeleteCrew() {\n return this.config.enableDelete && this.hasPermission('delete')\n },\n\n canAssignShift() {\n return this.config.enableAssignShift && this.hasPermission('assign')\n },\n\n canDeboardCrew() {\n return this.config.enableAssignShift && this.hasPermission('assign')\n },\n\n // Current date for display\n currentDate() {\n return new Date().toLocaleDateString('en-US', {\n weekday: 'long',\n year: 'numeric',\n month: 'long',\n day: 'numeric'\n })\n },\n\n // Total personnel onboard\n totalOnboard() {\n return this.crew.filter(member => member.status === 'onboard').length\n },\n\n // Crew members onboard (excluding guests)\n crewOnboard() {\n return this.crew.filter(member =>\n member.status === 'onboard' && member.role !== 'guest'\n ).length\n },\n\n // Guests onboard\n guestsOnboard() {\n return this.crew.filter(member =>\n member.status === 'onboard' && member.role === 'guest'\n ).length\n },\n\n // Personnel breakdown by vessel\n personnelByVessel() {\n const breakdown = {}\n\n this.crew.forEach(member => {\n if (member.status === 'onboard' && member.vessel) {\n if (!breakdown[member.vessel]) {\n breakdown[member.vessel] = {\n crew: 0,\n guests: 0,\n total: 0\n }\n }\n\n if (member.role === 'guest') {\n breakdown[member.vessel].guests++\n } else {\n breakdown[member.vessel].crew++\n }\n breakdown[member.vessel].total++\n }\n })\n\n return breakdown\n },\n\n // Get unique vessels from crew data for vessel selector\n availableVessels() {\n const vessels = new Set()\n this.crew.forEach(member => {\n if (member.vessel && member.vessel.trim() !== '') {\n vessels.add(member.vessel)\n }\n })\n return Array.from(vessels).sort()\n }\n },\n\n methods: {\n hasPermission(action) {\n const { role, vessel } = this.userProfile\n const isVessel = vessel === this.vesselName\n\n const permissions = {\n 'owner': ['add', 'edit', 'delete', 'assign', 'view'],\n 'staff': ['add', 'edit', 'assign', 'view'],\n 'captain': ['assign', 'view'],\n 'viewer': ['view']\n }\n\n let rolePermissions = permissions[role] || []\n\n if (role === 'captain' && isVessel) {\n rolePermissions = [...rolePermissions, 'add']\n }\n\n return rolePermissions.includes(action)\n },\n\n /**\n * Get embarkation date based on crew member status\n * Returns N/A if status is not onboard, onduty, or assigned\n * @param {Object} member - The crew member\n * @returns {String} - Embarkation date or 'N/A'\n */\n getEmbarkationDate(member) {\n const validStatuses = ['onboard', 'onduty', 'assigned']\n if (!validStatuses.includes(member.status)) {\n return 'N/A'\n }\n return member.nextShift || 'Not Scheduled'\n },\n\n /**\n * Calculate days onboard from logs\n * Finds the most recent \"Onboard\" action and counts days from that timestamp\n * @param {Object} member - The crew member\n * @returns {String|Number} - Days onboard or 'N/A'\n */\n getDaysOnboard(member) {\n // Only calculate if member is currently onboard\n if (member.status !== 'onboard') {\n return 'N/A'\n }\n\n // Check if logs exist\n if (!member.log || member.log.length === 0) {\n return 'N/A'\n }\n\n // Find the most recent \"Onboard\" action\n // Logs are typically sorted by timestamp, but we'll search from the end to be safe\n let mostRecentOnboard = null\n\n for (let i = member.log.length - 1; i >= 0; i--) {\n if (member.log[i].action === 'Onboard') {\n mostRecentOnboard = member.log[i]\n break\n }\n }\n\n // If no \"Onboard\" action found, return N/A\n if (!mostRecentOnboard || !mostRecentOnboard.timestamp) {\n return 'N/A'\n }\n\n // Calculate days between onboard timestamp and now\n const onboardDate = new Date(mostRecentOnboard.timestamp)\n const today = new Date()\n const diffTime = Math.abs(today - onboardDate)\n const diffDays = Math.floor(diffTime / (1000 * 60 * 60 * 24))\n\n return diffDays\n },\n\n /**\n * Calculate days onboard for guests from arrival date\n * @param {Object} member - The guest member\n * @returns {String|Number} - Days onboard or 'N/A'\n */\n getGuestDaysOnboard(member) {\n // Check if arrival date (nextShift) exists\n if (!member.nextShift) {\n return 'N/A'\n }\n\n // Only calculate if guest is currently onboard\n if (member.status !== 'onboard') {\n return 'N/A'\n }\n\n // Calculate days between arrival date and now\n const arrivalDate = new Date(member.nextShift)\n const today = new Date()\n const diffTime = Math.abs(today - arrivalDate)\n const diffDays = Math.floor(diffTime / (1000 * 60 * 60 * 24))\n\n return diffDays\n },\n\n /**\n * Get count of pending certifications for a member\n * @param {Object} member - The crew member\n * @returns {Number} - Count of pending certifications\n */\n getPendingCertificationsCount(member) {\n if (!member.certifications || member.certifications.length === 0) {\n return 0\n }\n\n return member.certifications.filter(cert => {\n if (!cert.verifications || cert.verifications.length === 0) {\n return true // No verifications = pending\n }\n\n const companyVerification = cert.verifications.find(\n v => v.companyId === this.currentCompanyId\n )\n\n // Pending if: no verification OR verification is pending/rejected\n return !companyVerification ||\n companyVerification.status === 'pending'\n }).length\n },\n\n /**\n * Emit event when user clicks on pending certifications\n * This allows parent component to navigate to verification page\n */\n handleViewPendingCertifications(member) {\n this.$emit('view-pending-certifications', {\n memberId: member.id,\n memberName: member.name,\n companyId: this.currentCompanyId\n })\n },\n\n handleToggleAddForm() {\n if (!this.canAddCrew) {\n this.$emit('access-denied', { action: 'add crew', userProfile: this.userProfile })\n return\n }\n this.showAddForm = !this.showAddForm\n if (!this.showAddForm) {\n this.resetForm()\n }\n },\n\n handleToggleGuestForm() {\n if (!this.canAddCrew) {\n this.$emit('access-denied', { action: 'check-in guest', userProfile: this.userProfile })\n return\n }\n this.showGuestForm = !this.showGuestForm\n if (!this.showGuestForm) {\n this.resetGuestForm()\n }\n },\n\n handleCheckinGuest() {\n if (!this.validateGuestForm()) {\n return\n }\n\n const newGuest = {\n name: this.newGuest.name,\n role: 'guest',\n status: 'onboard',\n nextShift: this.newGuest.arrivalDate, // Store arrival date in nextShift\n onBoard: this.newGuest.expectedDays,\n email: this.newGuest.email || '',\n notes: this.newGuest.notes,\n vessel: this.vesselName || this.newGuest.vessel,\n certifications: []\n }\n\n this.$emit('guest-checkin', newGuest)\n this.resetGuestForm()\n this.showGuestForm = false\n },\n\n handleCheckoutGuest(member) {\n if (!this.canDeboardCrew) {\n this.$emit('access-denied', { action: 'check out guest', userProfile: this.userProfile })\n return\n }\n\n let duration = null\n if (member.nextShift) {\n const arrivalDate = new Date(member.nextShift)\n const today = new Date()\n const diffTime = Math.abs(today - arrivalDate)\n duration = Math.ceil(diffTime / (1000 * 60 * 60 * 24))\n }\n\n this.$emit('guest-checkout', { member, duration })\n },\n\n handleCancelGuestForm() {\n this.showGuestForm = false\n this.resetGuestForm()\n },\n\n resetGuestForm() {\n this.newGuest = {\n name: '',\n email: '',\n vessel: '',\n arrivalDate: '',\n expectedDays: '',\n notes: ''\n }\n this.guestFormErrors = {}\n },\n\n validateGuestForm() {\n this.guestFormErrors = {}\n\n if (!this.newGuest.name || this.newGuest.name.trim() === '') {\n this.guestFormErrors.name = 'Guest name is required'\n }\n\n // Require vessel selection if not on a specific vessel page\n if (!this.vesselName && (!this.newGuest.vessel || this.newGuest.vessel.trim() === '')) {\n this.guestFormErrors.vessel = 'Please select a vessel'\n }\n\n if (!this.newGuest.arrivalDate) {\n this.guestFormErrors.arrivalDate = 'Arrival date is required'\n }\n\n if (!this.newGuest.expectedDays || this.newGuest.expectedDays <= 0) {\n this.guestFormErrors.expectedDays = 'Expected days onboard must be at least 1'\n }\n\n if (Object.keys(this.guestFormErrors).length > 0) {\n this.$emit('validation-error', this.guestFormErrors)\n return false\n }\n\n return true\n },\n\n handleSearch() {\n this.$emit('search-changed', this.searchQuery)\n },\n\n handleFilter() {\n this.$emit('filter-changed', this.filterStatus)\n },\n\n filterTimesheet() {\n // Trigger re-computation of filtered entries\n },\n\n sortTimesheet(key) {\n if (this.timesheetSortKey === key) {\n this.timesheetSortOrder = this.timesheetSortOrder === 'asc' ? 'desc' : 'asc'\n } else {\n this.timesheetSortKey = key\n this.timesheetSortOrder = 'asc'\n }\n },\n\n sortTimesheetEntries(entries) {\n const sorted = [...entries]\n\n sorted.sort((a, b) => {\n let valA, valB\n\n switch (this.timesheetSortKey) {\n case 'timestamp':\n valA = new Date(a.timestamp)\n valB = new Date(b.timestamp)\n break\n case 'crewName':\n valA = a.crewName.toLowerCase()\n valB = b.crewName.toLowerCase()\n break\n case 'role':\n valA = a.role.toLowerCase()\n valB = b.role.toLowerCase()\n break\n case 'action':\n valA = a.action.toLowerCase()\n valB = b.action.toLowerCase()\n break\n default:\n return 0\n }\n\n if (valA < valB) return this.timesheetSortOrder === 'asc' ? -1 : 1\n if (valA > valB) return this.timesheetSortOrder === 'asc' ? 1 : -1\n return 0\n })\n\n return sorted\n },\n\n getTimesheetRowClass(action) {\n return `timesheet-row-${action.toLowerCase().replace(/\\s+/g, '-')}`\n },\n\n async handleAddCrewMember() {\n if (!this.validateForm()) {\n return\n }\n\n // Check for incomplete certifications\n const hasIncompleteCert = this.newCrew.certifications.some(cert => {\n const hasName = cert.name.trim() !== ''\n const hasDate = cert.expiryDate !== ''\n const hasImage = cert.imageFile !== null\n\n // If any field is filled but not all, it's incomplete\n return (hasName || hasDate || hasImage) && !(hasName && hasDate && hasImage)\n })\n\n if (hasIncompleteCert) {\n this.$emit('incomplete-certification')\n return\n }\n\n // Filter only complete certifications (all three fields filled)\n const validCertifications = this.newCrew.certifications.filter(cert => {\n return cert.name.trim() !== '' && cert.expiryDate !== '' && cert.imageFile !== null\n })\n\n const finalRole = this.newCrew.role === 'Other' ? this.newCrew.customRole : this.newCrew.role\n\n // Upload all certification images first and get their URLs\n const certificationsWithUrls = await Promise.all(\n validCertifications.map(async (cert, index) => {\n // Emit and wait for the upload to complete\n const uploadResult = await this.uploadCertificationImage(cert.imageFile, this.newCrew.email)\n\n return {\n name: cert.name,\n expiryDate: cert.expiryDate,\n imageName: cert.imageName,\n imageType: cert.imageType,\n imageUrl: uploadResult.publicUrl // Add the public URL here\n }\n })\n )\n\n const newMember = {\n name: this.newCrew.name,\n role: finalRole,\n status: 'unavailable',\n certifications: certificationsWithUrls,\n notes: this.newCrew.notes,\n vessel: this.vesselName,\n email: this.newCrew.email,\n onBoard: this.newCrew.onBoard,\n nextShift: this.newCrew.nextShift\n }\n\n this.$emit('crew-add', newMember)\n this.resetForm()\n this.showAddForm = false\n },\n\n // Add this helper method to handle the upload:\n async uploadCertificationImage(file, email) {\n // Return a promise that resolves when upload completes\n return new Promise((resolve, reject) => {\n this.$emit('upload-cert-image', {\n file,\n email,\n callback: (result) => {\n if (result.error) {\n reject(result.error)\n } else {\n resolve(result)\n }\n }\n })\n })\n },\n\n handleCancelForm() {\n this.showAddForm = false\n this.resetForm()\n },\n\n handleDeleteCrew(member) {\n if (!this.canDeleteCrew) {\n this.$emit('access-denied', { action: 'delete crew', userProfile: this.userProfile })\n return\n }\n\n this.$emit('crew-delete', member)\n },\n\n handleAssignShift(member) {\n if (!this.canAssignShift) {\n this.$emit('access-denied', { action: 'assign shift', userProfile: this.userProfile })\n return\n }\n\n this.$emit('crew-assign-shift', member)\n },\n\n handleDeboardCrew(member) {\n if (!this.canDeboardCrew) {\n this.$emit('access-denied', { action: 'deboard crew', userProfile: this.userProfile })\n return\n }\n\n let duration = null\n if (member.nextShift) {\n const embarkDate = new Date(member.nextShift)\n const today = new Date()\n const diffTime = Math.abs(today - embarkDate)\n duration = Math.ceil(diffTime / (1000 * 60 * 60 * 24))\n }\n\n this.$emit('crew-deboard', { member, duration })\n },\n\n handleCheckinCrew(member) {\n if (!this.canDeboardCrew) {\n this.$emit('access-denied', { action: 'check in crew', userProfile: this.userProfile })\n return\n }\n\n this.$emit('crew-checkin', member)\n },\n\n toggleCrewLog(memberId) {\n const index = this.expandedLogs.indexOf(memberId)\n if (index > -1) {\n this.expandedLogs.splice(index, 1)\n } else {\n this.expandedLogs.push(memberId)\n }\n },\n\n handleAddCertification(member) {\n if (!this.canEditCrew) {\n this.$emit('access-denied', { action: 'add certification', userProfile: this.userProfile })\n return\n }\n\n this.$emit('crew-add-certification', member)\n },\n\n handleViewCertification(certification, member) {\n this.$emit('crew-view-certification', { certification, member })\n },\n\n resetForm() {\n this.newCrew = {\n name: '',\n role: 'Deckhand',\n customRole: '',\n status: 'Unavailable',\n nextShift: '',\n certifications: [{\n name: '',\n expiryDate: '',\n imageFile: null,\n imagePreview: null,\n imageName: '',\n imageType: ''\n }],\n notes: '',\n email: '',\n onBoard: ''\n }\n this.formErrors = {}\n },\n\n validateForm() {\n this.formErrors = {}\n\n const requiredFields = {\n name: 'Full Name',\n email: 'Email Address'\n }\n\n Object.keys(requiredFields).forEach(field => {\n if (!this.newCrew[field] || this.newCrew[field].trim() === '') {\n this.formErrors[field] = `${requiredFields[field]} is required`\n }\n })\n\n if (this.newCrew.email && !this.isValidEmail(this.newCrew.email)) {\n this.formErrors.email = 'Please enter a valid email address'\n }\n\n if (this.newCrew.role === 'Other' && (!this.newCrew.customRole || this.newCrew.customRole.trim() === '')) {\n this.formErrors.customRole = 'Custom role is required when \"Other\" is selected'\n }\n\n // Emit validation errors if any exist\n if (Object.keys(this.formErrors).length > 0) {\n this.$emit('validation-error', this.formErrors)\n return false\n }\n\n return true\n },\n\n isValidEmail(email) {\n const emailRegex = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/\n return emailRegex.test(email)\n },\n\n addCertificationEntry() {\n this.newCrew.certifications.push({\n name: '',\n expiryDate: '',\n imageFile: null,\n imagePreview: null,\n imageName: '',\n imageType: ''\n })\n },\n\n removeCertification(index) {\n this.newCrew.certifications.splice(index, 1)\n },\n\n handleCertImageUpload(event, index) {\n const file = event.target.files[0]\n if (!file) return\n\n const cert = this.newCrew.certifications[index]\n cert.imageFile = file\n cert.imageName = file.name\n cert.imageType = file.type.includes('pdf') ? 'pdf' : 'image'\n\n // Create preview for images\n if (cert.imageType === 'image') {\n const reader = new FileReader()\n reader.onload = (e) => {\n cert.imagePreview = e.target.result\n }\n reader.readAsDataURL(file)\n } else {\n cert.imagePreview = 'pdf'\n }\n },\n\n removeCertImage(index) {\n const cert = this.newCrew.certifications[index]\n cert.imageFile = null\n cert.imagePreview = null\n cert.imageName = ''\n cert.imageType = ''\n\n // Clear the file input\n const fileInput = document.getElementById('cert-image-' + index)\n if (fileInput) {\n fileInput.value = ''\n }\n },\n\n formatStatus(status) {\n return status ? status.charAt(0).toUpperCase() + status.slice(1) : ''\n },\n\n getStatusClass(status) {\n const statusMap = {\n 'available': 'status-available',\n 'onduty': 'status-onduty',\n 'onboard': 'status-onboard',\n 'unavailable': 'status-unavailable',\n 'assigned': 'status-assigned'\n }\n return statusMap[status] || ''\n },\n\n getCertificationClass(expiryDate) {\n const status = this.getExpiryStatus(expiryDate)\n const classMap = {\n 'expired': 'text-danger',\n 'expiringSoon': 'text-warning',\n 'valid': 'text-success'\n }\n return classMap[status] || ''\n },\n\n getExpiryStatus(dateStr) {\n if (!dateStr) return 'none'\n\n const expiry = new Date(dateStr)\n const today = new Date()\n const oneMonthFromNow = new Date()\n oneMonthFromNow.setMonth(today.getMonth() + 1)\n\n if (expiry <= today) return 'expired'\n if (expiry <= oneMonthFromNow) return 'expiringSoon'\n return 'valid'\n },\n\n formatLogDate(timestamp) {\n if (!timestamp) return ''\n const date = new Date(timestamp)\n return date.toLocaleDateString('en-US', {\n year: 'numeric',\n month: 'short',\n day: 'numeric',\n hour: '2-digit',\n minute: '2-digit'\n })\n },\n\n getLogActionClass(action) {\n const actionMap = {\n 'Embarked': 'log-action-embark',\n 'Deboarded': 'log-action-deboard',\n 'Assigned': 'log-action-assign',\n 'Status Changed': 'log-action-status'\n }\n return actionMap[action] || ''\n },\n\n getLogIcon(action) {\n const iconMap = {\n 'Embarked': 'bi bi-box-arrow-in-right',\n 'Deboarded': 'bi bi-box-arrow-left',\n 'Assigned': 'bi bi-calendar-check',\n 'Status Changed': 'bi bi-arrow-repeat'\n }\n return iconMap[action] || 'bi bi-circle-fill'\n }\n }\n}\n</script>\n\n<style>\n.add-crew-form h2 {\n color: #005792;\n}\n\n.crew-section {\n margin-bottom: 30px;\n}\n\n/* Personnel Summary Styles */\n.personnel-summary {\n background: linear-gradient(135deg, #005792 0%, #00a8e8 100%);\n border-radius: 8px;\n padding: 20px;\n margin-bottom: 25px;\n color: white;\n box-shadow: 0 4px 12px rgba(0, 87, 146, 0.2);\n}\n\n.summary-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 20px;\n padding-bottom: 15px;\n border-bottom: 2px solid rgba(255, 255, 255, 0.3);\n}\n\n.summary-header h3 {\n margin: 0;\n font-size: 1.4em;\n display: flex;\n align-items: center;\n gap: 10px;\n}\n\n.summary-date {\n font-size: 0.9em;\n opacity: 0.9;\n}\n\n.summary-cards {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));\n gap: 15px;\n margin-bottom: 25px;\n}\n\n.summary-card {\n background: linear-gradient(135deg, #005792 0%, #00a8e8 100%);\n backdrop-filter: blur(10px);\n border-radius: 8px;\n padding: 20px;\n display: flex;\n align-items: center;\n gap: 15px;\n transition: transform 0.2s, background 0.2s;\n}\n\n.summary-card:hover {\n transform: translateY(-3px);\n background: rgba(255, 255, 255, 0.2);\n}\n\n.card-icon {\n font-size: 2.5em;\n opacity: 0.9;\n}\n\n.card-content {\n flex: 1;\n}\n\n.card-value {\n font-size: 2.5em;\n font-weight: bold;\n line-height: 1;\n margin-bottom: 5px;\n}\n\n.card-label {\n font-size: 0.9em;\n opacity: 0.9;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.total-card {\n background: linear-gradient(135deg, #005792 0%, #00a8e8 100%);\n}\n\n.vessel-breakdown {\n margin-top: 20px;\n}\n\n.vessel-breakdown h4 {\n margin: 0 0 15px 0;\n font-size: 1.1em;\n opacity: 0.95;\n}\n\n.vessel-cards {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(250px, 1fr));\n gap: 12px;\n}\n\n.vessel-card {\n background: rgba(255, 255, 255, 0.15);\n backdrop-filter: blur(10px);\n border-radius: 6px;\n padding: 15px;\n border-left: 4px solid rgba(255, 255, 255, 0.5);\n}\n\n.vessel-name {\n font-weight: bold;\n font-size: 1.1em;\n margin-bottom: 10px;\n padding-bottom: 8px;\n border-bottom: 1px solid rgba(255, 255, 255, 0.2);\n}\n\n.vessel-stats {\n display: flex;\n justify-content: space-between;\n gap: 10px;\n}\n\n.stat-item {\n display: flex;\n flex-direction: column;\n gap: 3px;\n}\n\n.stat-label {\n font-size: 0.8em;\n opacity: 0.8;\n}\n\n.stat-value {\n font-size: 1.5em;\n font-weight: bold;\n}\n\n.total-stat {\n border-left: 1px solid rgba(255, 255, 255, 0.3);\n padding-left: 10px;\n}\n\n.total-stat .stat-value {\n color: #ffd700;\n}\n\n\n.crew-grid {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(250px, 1fr));\n gap: 20px;\n margin-bottom: 30px;\n align-items: start;\n}\n\n.crew-card {\n background-color: #f8f9fa;\n border-radius: 6px;\n padding: 15px;\n box-shadow: 0 1px 5px rgba(0, 0, 0, 0.08);\n border-left: 4px solid #00a8e8;\n position: relative;\n}\n\n.crew-card.unavailable {\n border-left-color: #dc3545;\n opacity: 0.8;\n}\n\n.crew-name {\n font-weight: bold;\n font-size: 1.1em;\n margin-bottom: 5px;\n color: #005792;\n}\n\n.crew-role {\n color: #6c757d;\n font-size: 0.9em;\n margin-bottom: 10px;\n}\n\n.crew-certifications,\n.crew-availability {\n font-size: 0.85em;\n margin: 5px 0;\n}\n\n.certification-tag {\n display: inline-block;\n background-color: #e6f7ff;\n color: #005792;\n border-radius: 4px;\n padding: 2px 8px;\n margin-right: 5px;\n margin-bottom: 5px;\n font-size: 0.85em;\n cursor: pointer;\n}\n\n.certification-tag:hover {\n background-color: #d1f0ff;\n}\n\n.crew-status-badge {\n position: absolute;\n top: 15px;\n right: 15px;\n font-size: 0.75em;\n padding: 3px 8px;\n border-radius: 12px;\n font-weight: bold;\n}\n\n.status-available {\n background-color: #d4edda;\n color: #155724;\n}\n\n.status-unavailable {\n background-color: #f8d7da;\n color: #721c24;\n}\n\n.status-assigned {\n background-color: #ffc107;\n color: #212529;\n}\n\n.status-onduty {\n background-color: #cce5ff;\n color: #004085;\n}\n\n.status-onboard {\n background-color: #d1ecf1;\n color: #0c5460;\n}\n\n.action-buttons {\n display: flex;\n justify-content: space-between;\n margin-top: 15px;\n gap: 5px;\n flex-wrap: wrap;\n}\n\n.btn {\n padding: 6px 12px;\n border-radius: 4px;\n cursor: pointer;\n font-size: 0.9em;\n transition: background-color 0.2s;\n border: none;\n}\n\n.btn-primary {\n background-color: #005792;\n color: white;\n}\n\n.btn-primary:hover {\n background-color: #004675;\n}\n\n.btn-secondary {\n background-color: #e9ecef;\n color: #495057;\n}\n\n.btn-secondary:hover {\n background-color: #dde2e6;\n}\n\n.btn-warning {\n background-color: #ffc107;\n color: #212529;\n}\n\n.btn-warning:hover {\n background-color: #e0a800;\n}\n\n.btn-success {\n background-color: #28a745;\n color: white;\n}\n\n.btn-success:hover {\n background-color: #218838;\n}\n\n.btn-danger {\n background-color: #dc3545;\n color: white;\n}\n\n.btn-danger:hover {\n background-color: #c82333;\n}\n\n.btn-link {\n background: none;\n border: none;\n color: #005792;\n text-decoration: none;\n padding: 4px 8px;\n}\n\n.btn-link:hover {\n text-decoration: underline;\n}\n\n.btn-sm {\n font-size: 0.8em;\n padding: 4px 8px;\n}\n\n.crew-footer {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-top: 10px;\n padding-top: 10px;\n border-top: 1px solid #e9ecef;\n}\n\n.crew-log-toggle {\n flex: 1;\n}\n\n.log-toggle-btn {\n text-align: left;\n padding: 0;\n display: flex;\n align-items: center;\n gap: 5px;\n}\n\n.crew-log {\n margin-top: 15px;\n padding: 10px;\n background-color: #ffffff;\n border-radius: 4px;\n border: 1px solid #dee2e6;\n max-height: 300px;\n overflow-y: auto;\n}\n\n.crew-log h4 {\n margin: 0 0 10px 0;\n font-size: 0.9em;\n color: #005792;\n border-bottom: 1px solid #dee2e6;\n padding-bottom: 5px;\n}\n\n.log-entry {\n padding: 8px;\n margin-bottom: 8px;\n border-left: 3px solid #005792;\n background-color: #f8f9fa;\n border-radius: 3px;\n}\n\n.log-entry:last-child {\n margin-bottom: 0;\n}\n\n.log-date {\n font-size: 0.75em;\n color: #6c757d;\n margin-bottom: 3px;\n}\n\n.log-action {\n font-weight: bold;\n font-size: 0.85em;\n margin-bottom: 3px;\n display: flex;\n align-items: center;\n gap: 5px;\n}\n\n.log-action-embark {\n color: #28a745;\n}\n\n.log-action-deboard {\n color: #dc3545;\n}\n\n.log-action-assign {\n color: #007bff;\n}\n\n.log-action-status {\n color: #ffc107;\n}\n\n.log-details {\n font-size: 0.8em;\n color: #495057;\n}\n\n.log-notes {\n font-size: 0.8em;\n color: #6c757d;\n font-style: italic;\n margin-top: 3px;\n}\n\n.search-filter {\n display: flex;\n margin-bottom: 20px;\n gap: 10px;\n align-items: center;\n}\n\n.search-filter input,\n.search-filter select {\n padding: 8px 12px;\n border: 1px solid #ced4da;\n border-radius: 4px;\n}\n\n.search-filter input {\n flex-grow: 1;\n}\n\n.search-filter select {\n min-width: 150px;\n}\n\n.add-crew-form {\n background-color: #f8f9fa;\n padding: 20px;\n border-radius: 6px;\n margin-top: 30px;\n}\n\n.form-row {\n display: flex;\n flex-wrap: wrap;\n gap: 15px;\n margin-bottom: 15px;\n}\n\n.form-group {\n flex: 1;\n min-width: 200px;\n}\n\n.form-group label {\n display: block;\n margin-bottom: 5px;\n font-weight: bold;\n color: #495057;\n}\n\n.text-danger {\n color: red;\n font-weight: bolder;\n}\n\n.text-warning {\n color: orange;\n font-weight: bolder;\n}\n\n.text-success {\n color: green;\n font-weight: bolder;\n}\n\n.icon {\n font-size: 20px;\n cursor: pointer;\n color: #005792;\n}\n\n.icon:hover {\n color: #003d5c;\n}\n\n.delete-icon {\n font-size: 20px;\n cursor: pointer;\n color: #dc3545;\n position: static;\n margin: 0;\n}\n\n.delete-icon:hover {\n color: #c82333;\n}\n\n.form-group input,\n.form-group select,\n.form-group textarea {\n width: 100%;\n padding: 8px;\n border: 1px solid #ced4da;\n border-radius: 4px;\n}\n\n.form-group input.error {\n border-color: #dc3545;\n}\n\n.error-message {\n color: #dc3545;\n font-size: 0.85em;\n margin-top: 5px;\n}\n\n.form-actions {\n display: flex;\n justify-content: flex-end;\n gap: 10px;\n margin-top: 20px;\n}\n\n.no-results {\n text-align: center;\n padding: 40px 20px;\n color: #6c757d;\n font-size: 1.1em;\n}\n\n.crew-section-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 15px;\n}\n\n.crew-section-header h2 {\n color: #005792;\n margin: 0;\n}\n\n.header-actions {\n display: flex;\n gap: 10px;\n}\n\n.guest-card {\n border-left-color: #ffc107 !important;\n background: linear-gradient(135deg, #f8f9fa 0%, #e3f2fd 100%);\n}\n\n.guest-card .crew-role {\n color: #17a2b8;\n font-weight: 600;\n text-transform: uppercase;\n font-size: 0.85em;\n}\n\n.vcard {\n border-radius: 6px;\n padding: 5px;\n}\n\n.loading-state {\n text-align: center;\n padding: 40px 20px;\n}\n\n.spinner-border {\n width: 3rem;\n height: 3rem;\n border: 0.25em solid currentColor;\n border-right-color: transparent;\n border-radius: 50%;\n display: inline-block;\n animation: spinner-border 0.75s linear infinite;\n}\n\n@keyframes spinner-border {\n to {\n transform: rotate(360deg);\n }\n}\n\n.text-primary {\n color: #005792;\n}\n\n.visually-hidden {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n border: 0;\n}\n\n.certification-section {\n margin: 20px 0;\n padding: 15px;\n background-color: #ffffff;\n border-radius: 4px;\n border: 1px solid #dee2e6;\n}\n\n.certification-section h3 {\n color: #005792;\n margin-top: 0;\n margin-bottom: 15px;\n font-size: 1.1em;\n}\n\n.certification-entry {\n margin-bottom: 10px;\n}\n\n/* Image Upload Styles */\n.image-upload-wrapper {\n position: relative;\n}\n\n.file-input {\n display: none;\n}\n\n.file-input-label {\n display: inline-flex;\n align-items: center;\n gap: 8px;\n padding: 8px 16px;\n background-color: #005792;\n color: white !important;\n border-radius: 4px;\n cursor: pointer;\n font-size: 0.9em;\n transition: background-color 0.2s;\n}\n\n.file-input-label:hover {\n background-color: #004675;\n}\n\n.file-input-label i {\n font-size: 1.1em;\n}\n\n.file-name {\n display: block;\n margin-top: 5px;\n color: #6c757d;\n font-size: 0.85em;\n}\n\n.image-preview {\n margin-top: 10px;\n position: relative;\n display: inline-block;\n}\n\n.image-preview img {\n max-width: 200px;\n max-height: 150px;\n border-radius: 4px;\n border: 2px solid #dee2e6;\n}\n\n.pdf-preview {\n display: flex;\n align-items: center;\n gap: 10px;\n padding: 15px;\n background-color: #f8f9fa;\n border: 2px solid #dee2e6;\n border-radius: 4px;\n max-width: 200px;\n}\n\n.pdf-preview i {\n font-size: 2em;\n color: #dc3545;\n}\n\n.pdf-preview span {\n font-size: 0.85em;\n color: #495057;\n word-break: break-word;\n}\n\n.btn-remove-image {\n position: absolute;\n top: -8px;\n right: -8px;\n background-color: #dc3545;\n color: white;\n border: none;\n border-radius: 50%;\n width: 24px;\n height: 24px;\n display: flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n padding: 0;\n transition: background-color 0.2s;\n}\n\n.btn-remove-image:hover {\n background-color: #c82333;\n}\n\n.btn-remove-image i {\n font-size: 1em;\n}\n\n/* Timesheet Styles */\n.timesheet-view {\n background-color: #ffffff;\n border-radius: 6px;\n padding: 20px;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);\n}\n\n.timesheet-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 20px;\n padding-bottom: 15px;\n border-bottom: 2px solid #005792;\n}\n\n.timesheet-header h3 {\n color: #005792;\n margin: 0;\n display: flex;\n align-items: center;\n gap: 10px;\n}\n\n.timesheet-controls {\n display: flex;\n gap: 10px;\n}\n\n.timesheet-controls select,\n.timesheet-search {\n padding: 8px 12px;\n border: 1px solid #ced4da;\n border-radius: 4px;\n font-size: 0.9em;\n}\n\n.timesheet-search {\n min-width: 250px;\n}\n\n.timesheet-summary {\n display: flex;\n gap: 20px;\n margin-bottom: 20px;\n flex-wrap: wrap;\n}\n\n.summary-card {\n flex: 1;\n min-width: 150px;\n background-color: #f8f9fa;\n padding: 15px;\n border-radius: 6px;\n border-left: 4px solid #005792;\n}\n\n.summary-label {\n display: block;\n font-size: 0.85em;\n color: #6c757d;\n margin-bottom: 5px;\n}\n\n.summary-value {\n display: block;\n font-size: 1.5em;\n font-weight: bold;\n color: #005792;\n}\n\n.timesheet-table-container {\n overflow-x: auto;\n margin-top: 20px;\n}\n\n.timesheet-table {\n width: 100%;\n border-collapse: collapse;\n font-size: 0.9em;\n}\n\n.timesheet-table thead {\n background-color: #005792;\n color: white;\n}\n\n.timesheet-table th {\n padding: 12px 8px;\n text-align: left;\n font-weight: bold;\n cursor: pointer;\n user-select: none;\n}\n\n.timesheet-table th:hover {\n background-color: #004675;\n}\n\n.timesheet-table th i {\n font-size: 0.8em;\n margin-left: 5px;\n}\n\n.timesheet-table tbody tr {\n border-bottom: 1px solid #dee2e6;\n}\n\n.timesheet-table tbody tr:hover {\n background-color: #f8f9fa;\n}\n\n.timesheet-table td {\n padding: 10px 8px;\n}\n\n.timestamp-cell {\n white-space: nowrap;\n color: #495057;\n font-size: 0.85em;\n}\n\n.crew-name-cell strong {\n color: #005792;\n}\n\n.role-cell {\n color: #6c757d;\n}\n\n.action-cell {\n white-space: nowrap;\n}\n\n.action-badge {\n display: inline-flex;\n align-items: center;\n gap: 5px;\n padding: 4px 10px;\n border-radius: 12px;\n font-size: 0.85em;\n font-weight: bold;\n}\n\n.vessel-cell {\n color: #495057;\n}\n\n.duration-cell {\n color: #495057;\n font-weight: 500;\n}\n\n.notes-cell {\n color: #6c757d;\n font-style: italic;\n max-width: 200px;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.timesheet-row-embarked {\n background-color: #d4edda;\n}\n\n.timesheet-row-deboarded {\n background-color: #f8d7da;\n}\n\n.timesheet-row-assigned {\n background-color: #d1ecf1;\n}\n\n.timesheet-row-status-changed {\n background-color: #fff3cd;\n}\n\n@media (max-width: 768px) {\n .crew-grid {\n grid-template-columns: 1fr;\n }\n\n .search-filter {\n flex-direction: column;\n }\n\n .search-filter input,\n .search-filter select {\n width: 100%;\n }\n\n .timesheet-header {\n flex-direction: column;\n align-items: flex-start;\n gap: 15px;\n }\n\n .timesheet-controls {\n flex-direction: column;\n width: 100%;\n }\n\n .timesheet-controls select,\n .timesheet-search {\n width: 100%;\n }\n\n .timesheet-summary {\n flex-direction: column;\n }\n\n .timesheet-table {\n font-size: 0.8em;\n }\n\n .timesheet-table th,\n .timesheet-table td {\n padding: 8px 4px;\n }\n}\n\n.crew-subhead {\n color: #000;\n}</style>","<template>\n <div class=\"s-container container\">\n <div class=\"header\">\n <h1>OceanHelm Requisition System</h1>\n <p>Streamlined Material Request & Ordering Process</p>\n </div>\n\n <!-- Navigation Tabs -->\n <div class=\"nav-tabs\">\n <button v-for=\"tab in visibleTabs\" :key=\"tab.name\" :class=\"['nav-tab', { active: activeTab === tab.name }]\"\n @click=\"setActiveTab(tab.name)\">\n {{ tab.label }}\n </button>\n </div>\n\n <!-- New Requisition Tab -->\n <div v-if=\"activeTab === 'new-requisition'\" class=\"tab-content active\">\n <form @submit.prevent=\"handleSubmitRequisition\">\n <div class=\"form-grid\">\n <div class=\"form-group\">\n <label>Requestor Name *</label>\n <input type=\"text\" :value=\"userProfile?.full_name\" readonly required class=\"form-control\" />\n </div>\n <div class=\"form-group\">\n <label>Department *</label>\n <select v-model=\"form.department\" required>\n <option value=\"\">Select Department</option>\n <option v-for=\"dept in departments\" :key=\"dept\" :value=\"dept\">{{ dept }}</option>\n </select>\n </div>\n <div class=\"form-group\">\n <label>Vessel *</label>\n <select v-model=\"form.project\" class=\"form-control\" required>\n <option disabled value=\"\">Select a vessel</option>\n <option v-for=\"v in vessels\" :key=\"v.id\" :value=\"v.name\">\n {{ v.name }}\n </option>\n </select>\n </div>\n <div class=\"form-group\">\n <label>Date Needed *</label>\n <input type=\"date\" v-model=\"form.neededDate\" :min=\"today\" required />\n </div>\n </div>\n\n <div class=\"form-group\">\n <label>Business Justification *</label>\n <textarea v-model=\"form.justification\" placeholder=\"Explain why these materials are needed...\"\n required></textarea>\n </div>\n\n <div class=\"items-section\">\n <div class=\"items-header\">\n <h3>Requested Items</h3>\n <button type=\"button\" class=\"add-item-btn\" @click=\"addItem\">+ Add Item</button>\n </div>\n <div>\n <div v-for=\"(item, index) in form.items\" :key=\"index\" class=\"item-row\">\n <div class=\"form-group\">\n <label>Item Code *</label>\n <input type=\"text\" v-model=\"item.id\" required />\n </div>\n <div class=\"form-group\">\n <label>Item Description *</label>\n <input type=\"text\" v-model=\"item.desc\" required />\n </div>\n <div class=\"form-group\">\n <label>Quantity *</label>\n <input type=\"number\" v-model.number=\"item.qty\" min=\"1\" required />\n </div>\n <div class=\"form-group\">\n <label>Unit *</label>\n <select v-model=\"item.unit\" required>\n <option v-for=\"unit in units\" :key=\"unit\" :value=\"unit\">{{ unit }}</option>\n </select>\n </div>\n <div class=\"form-group\">\n <label>Est. Unit Cost *</label>\n <input type=\"number\" v-model.number=\"item.cost\" step=\"0.01\" min=\"0\" placeholder=\"0.00\" required />\n </div>\n <button type=\"button\" class=\"remove-item-btn\" @click=\"removeItem(index)\">Remove</button>\n </div>\n </div>\n </div>\n\n <div class=\"action-buttons\">\n <button type=\"submit\" class=\"btn btn-primary-req\" :disabled=\"isSubmitting\">\n {{ isSubmitting ? 'Submitting...' : 'Submit Requisition' }}\n </button>\n </div>\n </form>\n </div>\n\n <!-- All Requisitions Tab -->\n <div v-if=\"activeTab === 'all-requisitions'\" class=\"tab-content active\">\n <div class=\"requisition-list\">\n <div v-for=\"req in requisitions\" :key=\"req.id\" class=\"requisition-card\">\n <div class=\"requisition-header\">\n <div class=\"requisition-id\">{{ req.id }}</div>\n <div :class=\"['status-badge', `status-${req.status}`]\">{{ req.status }}</div>\n </div>\n <div class=\"requisition-details\">\n <div class=\"detail-item\" v-for=\"field in getRequisitionFields(req)\" :key=\"field.label\">\n <div class=\"detail-label\">{{ field.label }}</div>\n <div class=\"detail-value\">{{ field.value(req) }}</div>\n </div>\n </div>\n <div v-if=\"req.status === 'po-created' || req.status === 'delivered'\"\n class=\"form-group comments-section\">\n <button @click=\"handleOpenPO(req.id)\" class=\"add-item-btn comments-section\">\n Print PO\n </button>\n </div>\n </div>\n </div>\n </div>\n\n <!-- My Requisitions Tab -->\n <div v-if=\"activeTab === 'my-requisitions'\" class=\"tab-content active\">\n <div class=\"requisition-list\">\n <div v-for=\"req in myRequisitions\" :key=\"req.id\" class=\"requisition-card\">\n <div class=\"requisition-header\">\n <div class=\"requisition-id\">{{ req.id }}</div>\n <div :class=\"['status-badge', `status-${req.status}`]\">{{ req.status }}</div>\n </div>\n <div class=\"requisition-details\">\n <div class=\"detail-item\" v-for=\"field in getRequisitionFields(req)\" :key=\"field.label\">\n <div class=\"detail-label\">{{ field.label }}</div>\n <div class=\"detail-value\">{{ field.value(req) }}</div>\n </div>\n </div>\n <div v-if=\"req.status === 'info-requested'\" class=\"form-group comments-section\">\n <label class=\"detail-label\">Your Response</label>\n <textarea v-model=\"infoResponse\" class=\"response-textarea\"\n placeholder=\"Submit more info...\"></textarea>\n <button @click=\"handleSubmitInfoResponse(req)\" class=\"add-item-btn comments-section\">\n Submit Info\n </button>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Pending Approval Tab -->\n <div v-if=\"activeTab === 'approvals'\" class=\"tab-content active\">\n <div style=\"margin-bottom: 20px;\">\n <h3 style=\"color: #1e40af; margin-bottom: 15px;\">Department Supervisor Dashboard</h3>\n <div style=\"background: #fef3c7; padding: 15px; border-radius: 10px; border-left: 4px solid #f59e0b;\">\n <strong>Role:</strong> Department Supervisor - Review requests for accuracy, necessity, and budget\n compliance\n </div>\n </div>\n <div class=\"requisition-list\" id=\"approvalsQueue\">\n <div v-for=\"req in reviewRequisitions\" :key=\"req.id\" class=\"requisition-card\">\n <div class=\"requisition-header\">\n <div class=\"requisition-id\">{{ req.id }}</div>\n </div>\n <div class=\"requisition-details\">\n <div class=\"detail-item\" v-for=\"field in requisitionFields\" :key=\"field.label\">\n <div class=\"detail-label\">{{ field.label }}</div>\n <div class=\"detail-value\">{{ field.value(req) }}</div>\n </div>\n </div>\n <!-- Justification -->\n <div class=\"detail-item\">\n <div class=\"detail-label\">Justification</div>\n <div class=\"detail-value\">{{ req.justification || 'N/A' }}</div>\n </div>\n\n <!-- Item list -->\n <div class=\"detail-item\">\n <div class=\"detail-label\">Items</div>\n <ul class=\"item-list\">\n <li v-for=\"(item, index) in req.items\" :key=\"index\">\n {{ item.desc }} - {{ item.qty }} {{ item.unit }} @ ₦{{ item.cost.toFixed(2) }} each\n </li>\n </ul>\n </div>\n <button type=\"button\" class=\"add-item-btn\" @click=\"handleApproveRequisition(req.id)\">Approve</button>\n <button type=\"button\" class=\"marginbox btn-reject\"\n @click=\"handleDeclineRequisition(req.id)\">Decline</button>\n <button type=\"button\" class=\"marginbox btn-request\" @click=\"handleInfoRequisition(req.id)\">Request\n Info</button>\n </div>\n </div>\n </div>\n\n <!-- Purchasing Queue Tab -->\n <div v-if=\"activeTab === 'purchasing'\" class=\"tab-content active\">\n <div style=\"margin-bottom: 20px;\">\n <h3 style=\"color: #1e40af; margin-bottom: 15px;\">Purchasing Department Dashboard</h3>\n <div style=\"background: #dbeafe; padding: 15px; border-radius: 10px; border-left: 4px solid #3b82f6;\">\n <strong>Role:</strong> Purchasing Team - Convert approved requisitions to Purchase Orders\n </div>\n </div>\n <div class=\"requisition-list\" id=\"purchasingQueue\">\n <div v-for=\"req in poRequisitions\" :key=\"req.id\" class=\"requisition-card\">\n <div class=\"requisition-header\">\n <div class=\"requisition-id\">{{ req.id }}</div>\n </div>\n <div class=\"requisition-details\">\n <div class=\"detail-item\" v-for=\"field in requisitionFields\" :key=\"field.label\">\n <div class=\"detail-label\">{{ field.label }}</div>\n <div class=\"detail-value\">{{ field.value(req) }}</div>\n </div>\n </div>\n <!-- Justification -->\n <div class=\"detail-item\">\n <div class=\"detail-label\">Justification</div>\n <div class=\"detail-value\">{{ req.justification || 'N/A' }}</div>\n </div>\n\n <!-- Item list -->\n <div class=\"detail-item\">\n <div class=\"detail-label\">Items</div>\n <ul class=\"item-list\">\n <li v-for=\"(item, index) in req.items\" :key=\"index\">\n {{ item.desc }} - {{ item.qty }} {{ item.unit }} @ ₦{{ item.cost.toFixed(2) }} each\n </li>\n </ul>\n </div>\n <button type=\"button\" class=\"add-item-btn\" @click=\"handleCreatePO(req.id)\">Create PO</button>\n </div>\n </div>\n </div>\n\n <!-- Receiving Tab -->\n <div v-if=\"activeTab === 'receiving'\" class=\"tab-content active\">\n <div style=\"margin-bottom: 20px;\">\n <h3 style=\"color: #1e40af; margin-bottom: 15px;\">Receiving & Inventory Dashboard</h3>\n <div style=\"background: #dcfce7; padding: 15px; border-radius: 10px; border-left: 4px solid #10b981;\">\n <strong>Role:</strong> Warehouse Team - Process incoming deliveries and update inventory\n </div>\n </div>\n <div class=\"requisition-list\" id=\"receivingQueue\">\n <div v-for=\"req in awaitingDelivery\" :key=\"req.id\" class=\"requisition-card\">\n <div class=\"requisition-header\">\n <div class=\"requisition-id\">{{ req.id }}</div>\n </div>\n <div class=\"requisition-details\">\n <div class=\"detail-item\" v-for=\"field in requisitionFields\" :key=\"field.label\">\n <div class=\"detail-label\">{{ field.label }}</div>\n <div class=\"detail-value\">{{ field.value(req) }}</div>\n </div>\n </div>\n <!-- Justification -->\n <div class=\"detail-item\">\n <div class=\"detail-label\">Justification</div>\n <div class=\"detail-value\">{{ req.justification || 'N/A' }}</div>\n </div>\n\n <!-- Item list -->\n <div class=\"detail-item\">\n <div class=\"detail-label\">Items</div>\n <ul class=\"item-list\">\n <li v-for=\"(item, index) in req.items\" :key=\"index\">\n {{ item.desc }} - {{ item.qty }} {{ item.unit }} @ ₦{{ item.cost.toFixed(2) }} each\n </li>\n </ul>\n </div>\n <button type=\"button\" class=\"add-item-btn\" @click=\"handleAcceptDelivery(req.id)\">Accept\n Delivery</button>\n </div>\n </div>\n </div>\n\n <!-- PO Tab -->\n <div v-if=\"activeTab === 'po'\" class=\"tab-content active\">\n <div class=\"po-content\" id=\"po-content\">\n <div class=\"po-header\">\n <div class=\"company-info\">\n <h3>Vendor Information</h3>\n <div class=\"info-row\">\n <span class=\"info-label\">Company:</span>\n <span class=\"info-value\">{{ vendorInfo.company || poDetails.vendorInfo?.company || 'N/A' }} </span>\n </div>\n <div class=\"info-row\">\n <span class=\"info-label\">Contact:</span>\n <span class=\"info-value\">{{ vendorInfo.contact || poDetails.vendorInfo?.contact || 'N/A' }}</span>\n </div>\n <div class=\"info-row\">\n <span class=\"info-label\">Email:</span>\n <span class=\"info-value\">{{ vendorInfo.email || poDetails.vendorInfo?.email || 'N/A' }}</span>\n </div>\n <div class=\"info-row\">\n <span class=\"info-label\">Phone:</span>\n <span class=\"info-label\">{{ vendorInfo.phone || poDetails.vendorInfo?.phone || 'N/A' }}</span>\n </div>\n <div class=\"info-row\">\n <span class=\"info-label\">Address:</span>\n <span class=\"info-value\">{{ vendorInfo.address || poDetails.vendorInfo?.address || 'N/A' }}</span>\n </div>\n </div>\n\n <div class=\"company-info\">\n <h3>Purchase Order Details</h3>\n <div class=\"info-row\">\n <span class=\"info-label\">PO Number:</span>\n <span class=\"info-value\">{{ poDetails.id }}</span>\n </div>\n <div class=\"info-row\">\n <span class=\"info-label\">Date:</span>\n <span class=\"info-value\">{{ vendorInfo.poDate || poDetails.vendorInfo?.poDate || formatDate(new Date()) }}</span>\n </div>\n <div class=\"info-row\">\n <span class=\"info-label\">Requested By:</span>\n <span class=\"info-value\">{{ vendorInfo.poApproved || poDetails.vendorInfo?.poApproved || 'N/A' }}</span>\n </div>\n <div class=\"info-row\">\n <span class=\"info-label\">Department:</span>\n <span class=\"info-value\">PO-{{ poDetails.department || 'N/A' }}</span>\n </div>\n <div class=\"info-row\">\n <span class=\"info-label\">Delivery Date:</span>\n <span class=\"info-value\">{{ poDetails.neededDate || 'N/A' }}</span>\n </div>\n </div>\n </div>\n\n <div class=\"items-section\">\n <h2 class=\"section-title\">Order Items</h2>\n <table class=\"items-table\">\n <thead>\n <tr>\n <th>Item #</th>\n <th>Description</th>\n <th>Quantity</th>\n <th>Unit Price</th>\n <th>Total</th>\n <th v-if=\"!isPrinting\">Actions</th>\n </tr>\n </thead>\n <tbody>\n <tr v-for=\"(item, index) in poDetails.items || []\" :key=\"index\">\n <td>{{ item.itemNumber || (index + 1) }}</td>\n <td>{{ item.desc }}</td>\n <td>{{ item.qty }}</td>\n <td>\n <span v-if=\"!item.editing\">\n ${{ (item.unitPrice || item.cost || 0).toFixed(2) }}\n <span v-if=\"item.cost !== item.unitPrice && item.unitPrice\" class=\"price-change-indicator\">!</span>\n </span>\n <input v-else v-model.number=\"item.tempPrice\" type=\"number\" step=\"0.01\" min=\"0\"\n class=\"price-input\" :class=\"{ 'price-changed': item.cost !== item.tempPrice }\">\n </td>\n <td>${{ ((item.unitPrice || item.cost || 0) * (item.qty || 0)).toFixed(2) }}</td>\n <td v-if=\"!isPrinting\">\n <button v-if=\"!item.editing\" @click=\"startEdit(index)\" class=\"edit-btn\">\n Edit Price\n </button>\n <div v-else>\n <button @click=\"savePrice(index)\" class=\"save-btn\">Save</button>\n <button @click=\"cancelEdit(index)\" class=\"cancel-btn\">Cancel</button>\n </div>\n </td>\n </tr>\n </tbody>\n </table>\n\n <div v-for=\"(item, index) in poDetails.items || []\" :key=\"'note-' + index\">\n <div v-if=\"item.justification\" class=\"justification-note\">\n <strong>Price Change Justification (Item {{ item.itemNumber || (index + 1) }}):</strong> {{ item.justification\n }}\n </div>\n </div>\n\n <div class=\"totals\">\n <div class=\"total-row\">\n <span>Subtotal:</span>\n <span>${{ subTotal.toFixed(2) }}</span>\n </div>\n <div class=\"total-row\">\n <span>Tax ({{ vendorInfo.tax || poDetails.vendorInfo?.tax || 0 }}%):</span>\n <span>${{ calculateTax().toFixed(2) }}</span>\n </div>\n <div class=\"total-row\">\n <span>Shipping:</span>\n <span>${{ getOptional(vendorInfo.shipping) }}</span>\n </div>\n <div class=\"total-row grand-total\">\n <span>Grand Total:</span>\n <span>${{ grandTotal.toFixed(2) }}</span>\n </div>\n </div>\n </div>\n </div>\n <!-- Justification Modal -->\n <div v-if=\"showJustificationModal\" class=\"justification-modal\" @click.self=\"closeJustificationModal\">\n <div class=\"modal-content\">\n <h3>Price Change Justification Required</h3>\n <p style=\"margin-bottom: 15px; color: #666;\">\n Please provide a justification for changing the price from\n <strong>${{ currentItem?.cost?.toFixed(2) }}</strong> to\n <strong>${{ currentItem?.tempPrice?.toFixed(2) }}</strong>\n </p>\n <textarea v-model=\"justificationText\" class=\"justification-textarea\"\n placeholder=\"Enter justification for price change...\" required></textarea>\n <div class=\"modal-buttons\">\n <button @click=\"closeJustificationModal\" class=\"cancel-btn\">Cancel</button>\n <button @click=\"confirmPriceChange\" class=\"save-btn\" :disabled=\"!justificationText.trim()\">\n Confirm Change\n </button>\n </div>\n </div>\n </div>\n <button v-if=\"!isPrinting\" type=\"button\" class=\"add-item-btn\" @click=\"handleFinishPO(poDetails.id)\">Approve\n PO</button>\n </div>\n\n <!-- Workflow Guide Tab -->\n <div v-if=\"activeTab === 'workflow'\" class=\"tab-content active\">\n <div class=\"workflow-steps\">\n <div class=\"workflow-step\">\n <div class=\"step-icon completed\">1</div>\n <div class=\"step-title\">Request Submitted</div>\n </div>\n <div class=\"workflow-step\">\n <div class=\"step-icon active\">2</div>\n <div class=\"step-title\">Department Review</div>\n </div>\n <div class=\"workflow-step\">\n <div class=\"step-icon\">3</div>\n <div class=\"step-title\">Management Approval</div>\n </div>\n <div class=\"workflow-step\">\n <div class=\"step-icon\">4</div>\n <div class=\"step-title\">Purchase Order Created</div>\n </div>\n <div class=\"workflow-step\">\n <div class=\"step-icon\">5</div>\n <div class=\"step-title\">Order Fulfilled</div>\n </div>\n </div>\n\n <div style=\"background: white; padding: 30px; border-radius: 15px; margin-top: 20px;\">\n <h3 style=\"color: #1e40af; margin-bottom: 20px;\">Requisition Workflow Process</h3>\n <div style=\"line-height: 1.8; color: #374151;\">\n <p><strong>Step 1: Request Identification</strong><br>\n Department or individual identifies need for materials, equipment, or services.</p>\n\n <p><strong>Step 2: Requisition Creation</strong><br>\n Complete requisition form with detailed specifications, quantities, and business justification.</p>\n\n <p><strong>Step 3: Department Review</strong><br>\n Department supervisor reviews request for accuracy, necessity, and budget compliance.</p>\n\n <p><strong>Step 4: Management Approval</strong><br>\n Based on cost thresholds, appropriate management level provides approval.</p>\n\n <p><strong>Step 5: Purchase Order Generation</strong><br>\n Purchasing team converts approved requisition into formal Purchase Order (PO).</p>\n\n <p><strong>Step 6: Vendor Processing</strong><br>\n PO sent to vendor, order processed, and delivery scheduled.</p>\n\n <p><strong>Step 7: Receipt & Inventory</strong><br>\n Goods received, inspected, and entered into inventory system.</p>\n </div>\n </div>\n </div>\n </div>\n</template>\n \n<script>\nexport default {\n name: 'RequisitionSystem',\n props: {\n userProfile: {\n type: Object,\n required: true\n },\n userRole: {\n type: String,\n required: true\n },\n requisitions: {\n type: Array,\n default: () => []\n },\n vessels: {\n type: Array,\n default: () => []\n }\n },\n\n emits: [\n 'submit-requisition',\n 'submit-info-response',\n 'approve-requisition',\n 'decline-requisition',\n 'info-requisition',\n 'create-po',\n 'open-po',\n 'finish-po',\n 'accept-delivery'\n ],\n\n data() {\n return {\n activeTab: 'workflow',\n isPrinting: false,\n infoResponse: '',\n isSubmitting: false,\n\n // Tabs with visibility rules\n tabs: [\n { name: 'new-requisition', label: 'New Requisition', roles: ['requisitor'] },\n { name: 'my-requisitions', label: 'My Requisitions', roles: ['requisitor'] },\n { name: 'all-requisitions', label: 'All Requisitions', roles: ['requisitor', 'supervisor', 'captain', 'owner', 'purchaser'] },\n { name: 'approvals', label: 'Pending Approvals', roles: ['owner', 'supervisor'] },\n { name: 'purchasing', label: 'Purchasing Queue', roles: ['purchaser'] },\n { name: 'receiving', label: 'Receiving', roles: ['requisitor'] },\n { name: 'workflow', label: 'Workflow Guide', roles: ['requisitor', 'supervisor', 'owner', 'purchaser', 'captain'] }\n ],\n\n // Form State\n form: {\n requestor: '',\n department: '',\n project: '',\n neededDate: '',\n justification: '',\n items: []\n },\n\n poDetails: {\n editing: false,\n items: []\n },\n vendorInfo: {},\n justificationText: '',\n currentItemIndex: null,\n showJustificationModal: false,\n\n // common fields\n requisitionFields: [\n { label: 'Requestor', value: req => req.requestor },\n { label: 'Department', value: req => req.department },\n { label: 'Project', value: req => req.project || 'N/A' },\n { label: 'Submitted', value: req => req.submittedDate },\n { label: 'Items', value: req => `${req.items?.length || 0} item(s)` }\n ],\n\n // Fields for My Requisitions display\n requisitionFieldsMap: {\n approved: [\n { label: 'Approved By', value: req => req.approvedBy },\n ],\n declined: [\n { label: 'Declined By', value: req => req.declinedBy },\n { label: 'Rejection Reason', value: req => req.rejectionReason },\n ],\n 'info-requested': [\n { label: 'Info Requester', value: req => req.infoRequestedBy },\n { label: 'Requested Info', value: req => req.requestedInfo }\n ]\n },\n\n // Options\n departments: [\n 'Marine Operations', 'Engineering', 'Maintenance',\n 'Safety & Compliance', 'Logistics', 'Administration',\n 'Engine Room'\n ],\n\n priorities: [\n 'Urgent - Same Day',\n 'High - Within 3 Days',\n 'Normal - Within 1 Week',\n 'Low - Within 2 Weeks'\n ],\n\n units: ['Pieces', 'Kilograms', 'Liters', 'Meters', 'Sets', 'Boxes']\n }\n },\n\n computed: {\n today() {\n return new Date().toISOString().split('T')[0];\n },\n\n visibleTabs() {\n return this.tabs.filter(tab => tab.roles.includes(this.userRole));\n },\n\n subTotal() {\n return (this.poDetails.items || []).reduce((sum, item) => {\n const unitPrice = item.unitPrice || item.cost || 0;\n return sum + (unitPrice * (item.qty || 0));\n }, 0);\n },\n\n grandTotal() {\n return this.subTotal + this.calculateTax() + parseFloat(this.getOptional(this.vendorInfo.shipping));\n },\n\n reviewRequisitions() {\n return (this.requisitions || []).filter(r => r.status === 'under-review');\n },\n\n poRequisitions() {\n return (this.requisitions || []).filter(r => r.status === 'approved');\n },\n\n awaitingDelivery() {\n return (this.requisitions || []).filter(r => r.status === 'po-created');\n },\n\n currentItem() {\n return this.currentItemIndex !== null ? this.poDetails.items[this.currentItemIndex] : null;\n },\n\n myRequisitions() {\n const userId = this.userProfile?.id || this.userProfile?.profile_id;\n return (this.requisitions || []).filter(req => req.profile_id == userId);\n }\n },\n\n methods: {\n setActiveTab(tabName) {\n this.activeTab = tabName;\n },\n\n formatDate(dateString) {\n if (!dateString) return 'N/A';\n const date = new Date(dateString);\n return date.toLocaleDateString();\n },\n\n calculateTax() {\n const taxRate = parseFloat(this.vendorInfo.tax || this.poDetails.vendorInfo?.tax || 0);\n return (this.subTotal * taxRate) / 100;\n },\n\n getOptional(value) {\n return typeof value === 'number' ? value.toFixed(2) : (parseFloat(value) || 0).toFixed(2);\n },\n\n getRequisitionFields(req) {\n const statusFields = this.requisitionFieldsMap[req.status] || [];\n return [...(this.requisitionFields || []), ...statusFields];\n },\n\n addItem() {\n this.form.items.push({\n id: '',\n desc: '',\n qty: 1,\n unit: 'Pieces',\n cost: 0\n });\n },\n\n removeItem(index) {\n this.form.items.splice(index, 1);\n },\n\n startEdit(index) {\n this.poDetails.items[index].editing = true;\n this.poDetails.items[index].tempPrice = this.poDetails.items[index].unitPrice || this.poDetails.items[index].cost;\n },\n\n cancelEdit(index) {\n this.poDetails.items[index].editing = false;\n this.poDetails.items[index].tempPrice = this.poDetails.items[index].unitPrice || this.poDetails.items[index].cost;\n },\n\n savePrice(index) {\n const item = this.poDetails.items[index];\n if (item.tempPrice !== item.cost) {\n // Price changed, require justification\n this.currentItemIndex = index;\n this.showJustificationModal = true;\n } else {\n // No change, just save\n item.unitPrice = item.tempPrice;\n item.editing = false;\n }\n },\n\n confirmPriceChange() {\n if (!this.justificationText.trim()) {\n alert('Please provide a justification for the price change.');\n return;\n }\n\n const item = this.poDetails.items[this.currentItemIndex];\n item.unitPrice = item.tempPrice;\n item.cost = item.tempPrice;\n item.justification = this.justificationText.trim();\n item.editing = false;\n\n this.closeJustificationModal();\n },\n\n closeJustificationModal() {\n this.showJustificationModal = false;\n this.currentItemIndex = null;\n this.justificationText = '';\n },\n\n // Event handlers that emit to parent\n handleSubmitRequisition() {\n if (this.form.items.length === 0) {\n alert('Please add at least one item to the requisition.');\n return;\n }\n\n this.isSubmitting = true;\n const requisition = this.collectFormData('under-review');\n this.$emit('submit-requisition', requisition);\n \n setTimeout(() => {\n this.resetForm();\n this.isSubmitting = false;\n }, 1000);\n },\n\n handleSubmitInfoResponse(req) {\n if (!this.infoResponse || this.infoResponse.trim() === '') {\n alert('Please enter a response before submitting.');\n return;\n }\n this.$emit('submit-info-response', { req, response: this.infoResponse });\n this.infoResponse = '';\n },\n\n handleApproveRequisition(id) {\n this.$emit('approve-requisition', id);\n },\n\n handleDeclineRequisition(id) {\n this.$emit('decline-requisition', id);\n },\n\n handleInfoRequisition(id) {\n this.$emit('info-requisition', id);\n },\n\n handleCreatePO(id) {\n this.$emit('create-po', id);\n },\n\n handleOpenPO(id) {\n this.$emit('open-po', id);\n },\n\n handleFinishPO(id) {\n this.$emit('finish-po', id);\n },\n\n handleAcceptDelivery(id) {\n this.$emit('accept-delivery', id);\n },\n\n collectFormData(status) {\n return {\n id: 'REQ-' + Date.now(),\n requestor: this.userProfile?.full_name || 'Unknown',\n department: this.form.department,\n project: this.form.project,\n neededDate: this.form.neededDate,\n justification: this.form.justification,\n items: this.form.items.map(item => ({ ...item })),\n status,\n submittedDate: new Date().toLocaleDateString(),\n profile_id: this.userProfile?.id || this.userProfile?.profile_id\n };\n },\n\n resetForm() {\n this.form = {\n requestor: '',\n department: '',\n project: '',\n neededDate: '',\n justification: '',\n items: []\n };\n // Add initial item row again\n this.addItem();\n },\n\n // Methods for updating PO details from parent\n updatePODetails(details) {\n this.poDetails = { ...details };\n this.getNumber();\n for (let item of this.poDetails.items || []) {\n item.tempPrice = item.cost || 0;\n item.unitPrice = item.unitPrice || item.cost || 0;\n item.subTotal = item.unitPrice * (item.qty || 0);\n }\n },\n\n updateVendorInfo(info) {\n this.vendorInfo = { ...info };\n },\n\n setPrintingMode(isPrinting) {\n this.isPrinting = isPrinting;\n },\n\n getNumber() {\n return (this.poDetails.items || []).map((item, index) => {\n return item.itemNumber = index + 1;\n });\n }\n },\n\n created() {\n // Initialize form with one item row\n this.addItem();\n }\n}\n</script>\n\n<style>\n.s-container {\n max-width: 1200px;\n margin: 0 auto;\n background: rgba(255, 255, 255, 0.95);\n border-radius: 20px;\n box-shadow: 0 25px 50px rgba(0, 0, 0, 0.25);\n overflow: hidden;\n backdrop-filter: blur(10px);\n font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;\n padding: 20px;\n}\n\n.header h1 {\n font-size: 2.5rem;\n margin-bottom: 10px;\n position: relative;\n z-index: 1;\n}\n\n.header p {\n font-size: 1.1rem;\n opacity: 0.9;\n position: relative;\n z-index: 1;\n}\n\n.nav-tabs {\n display: flex;\n background: #f8fafc;\n border-bottom: 2px solid #e2e8f0;\n overflow-x: auto;\n white-space: nowrap;\n -webkit-overflow-scrolling: touch;\n scrollbar-width: thin;\n}\n\n.nav-tabs::-webkit-scrollbar {\n height: 6px;\n}\n\n.nav-tabs::-webkit-scrollbar-thumb {\n background: #cbd5e1;\n border-radius: 3px;\n}\n\n.nav-tabs::-webkit-scrollbar-track {\n background: transparent;\n}\n\n\n.nav-tab {\n flex: 1;\n padding: 15px 20px;\n background: none;\n border: none;\n cursor: pointer;\n font-size: 1rem;\n font-weight: 600;\n color: #64748b;\n transition: all 0.3s ease;\n position: relative;\n}\n\n.nav-tab:hover {\n background: #e2e8f0;\n color: #1e40af;\n}\n\n.nav-tab.active {\n color: #1e40af;\n background: white;\n}\n\n.nav-tab.active::after {\n content: '';\n position: absolute;\n bottom: -2px;\n left: 0;\n right: 0;\n height: 3px;\n background: #1e40af;\n}\n\n.tab-content {\n display: none;\n padding: 30px;\n animation: fadeIn 0.5s ease-in;\n}\n\n.tab-content.active {\n display: block;\n}\n\n@keyframes fadeIn {\n from {\n opacity: 0;\n transform: translateY(20px);\n }\n\n to {\n opacity: 1;\n transform: translateY(0);\n }\n}\n\n.form-grid {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));\n gap: 25px;\n margin-bottom: 30px;\n}\n\n.form-group {\n display: flex;\n flex-direction: column;\n}\n\n.form-group label {\n font-weight: 600;\n margin-bottom: 8px;\n color: #374151;\n font-size: 0.95rem;\n}\n\n.form-group input,\n.form-group select,\n.form-group textarea {\n padding: 12px 15px;\n border: 2px solid #e5e7eb;\n border-radius: 10px;\n font-size: 1rem;\n transition: all 0.3s ease;\n background: white;\n}\n\n.form-group input:focus,\n.form-group select:focus,\n.form-group textarea:focus {\n outline: none;\n border-color: #3b82f6;\n box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.1);\n}\n\n.form-group textarea {\n min-height: 100px;\n resize: vertical;\n}\n\n.items-section {\n background: #f8fafc;\n border-radius: 15px;\n padding: 25px;\n margin: 25px 0;\n border: 2px solid #e2e8f0;\n}\n\n.items-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 20px;\n}\n\n.items-header h3 {\n color: #1e40af;\n font-size: 1.3rem;\n}\n\n.add-item-btn {\n background: linear-gradient(135deg, #10b981 0%, #059669 100%);\n color: white;\n border: none;\n padding: 10px 20px;\n border-radius: 8px;\n cursor: pointer;\n font-weight: 600;\n transition: all 0.3s ease;\n box-shadow: 0 4px 15px rgba(16, 185, 129, 0.3);\n}\n\n.add-item-btn:hover {\n transform: translateY(-2px);\n box-shadow: 0 6px 20px rgba(16, 185, 129, 0.4);\n}\n\n.item-row {\n display: grid;\n grid-template-columns: 2fr 1fr 1fr 1fr auto;\n gap: 15px;\n align-items: end;\n margin-bottom: 15px;\n padding: 15px;\n background: white;\n border-radius: 10px;\n border: 1px solid #e5e7eb;\n transition: all 0.3s ease;\n}\n\n.item-row:hover {\n box-shadow: 0 4px 15px rgba(0, 0, 0, 0.1);\n}\n\n.marginbox {\n margin: 10px\n}\n\n.item-list {\n list-style: none;\n padding: 0;\n margin: 0.5rem 0;\n}\n\n.item-list li {\n background: #f1f5f9;\n margin-bottom: 0.5rem;\n padding: 0.5rem 0.75rem;\n border-radius: 0.375rem;\n font-size: 0.95rem;\n color: #1e293b;\n display: flex;\n justify-content: space-between;\n align-items: center;\n content: '•';\n color: #3b82f6;\n}\n\n\n.remove-item-btn {\n background: #ef4444;\n color: white;\n border: none;\n padding: 8px 12px;\n border-radius: 6px;\n cursor: pointer;\n font-size: 0.9rem;\n transition: all 0.3s ease;\n}\n\n.remove-item-btn:hover {\n background: #dc2626;\n transform: scale(1.05);\n}\n\n.approval-actions {\n display: flex;\n gap: 10px;\n margin-top: 15px;\n}\n\n.btn-approve {\n background: linear-gradient(135deg, #10b981 0%, #059669 100%);\n color: white;\n border: none;\n padding: 8px 16px;\n border-radius: 6px;\n cursor: pointer;\n font-size: 0.9rem;\n font-weight: 600;\n transition: all 0.3s ease;\n}\n\n.btn-approve:hover {\n transform: translateY(-1px);\n box-shadow: 0 4px 12px rgba(16, 185, 129, 0.3);\n}\n\n.btn-reject {\n background: linear-gradient(135deg, #ef4444 0%, #dc2626 100%);\n color: white;\n border: none;\n padding: 8px 16px;\n border-radius: 6px;\n cursor: pointer;\n font-size: 0.9rem;\n font-weight: 600;\n transition: all 0.3s ease;\n}\n\n.btn-reject:hover {\n transform: translateY(-1px);\n box-shadow: 0 4px 12px rgba(239, 68, 68, 0.3);\n}\n\n.btn-request {\n background: linear-gradient(135deg, #ef9a44 0%, #fa920a 100%);\n color: white;\n border: none;\n padding: 8px 16px;\n border-radius: 6px;\n cursor: pointer;\n font-size: 0.9rem;\n font-weight: 600;\n transition: all 0.3s ease;\n}\n\n.btn-request:hover {\n transform: translateY(-1px);\n box-shadow: 0 4px 12px rgba(240, 162, 52, 0.3);\n}\n\n\n.btn-create-po {\n background: linear-gradient(135deg, #8b5cf6 0%, #7c3aed 100%);\n color: white;\n border: none;\n padding: 8px 16px;\n border-radius: 6px;\n cursor: pointer;\n font-size: 0.9rem;\n font-weight: 600;\n transition: all 0.3s ease;\n}\n\n.btn-create-po:hover {\n transform: translateY(-1px);\n box-shadow: 0 4px 12px rgba(139, 92, 246, 0.3);\n}\n\n.btn-mark-delivered {\n background: linear-gradient(135deg, #06b6d4 0%, #0891b2 100%);\n color: white;\n border: none;\n padding: 8px 16px;\n border-radius: 6px;\n cursor: pointer;\n font-size: 0.9rem;\n font-weight: 600;\n transition: all 0.3s ease;\n}\n\n.btn-mark-delivered:hover {\n transform: translateY(-1px);\n box-shadow: 0 4px 12px rgba(6, 182, 212, 0.3);\n}\n\n.po-info {\n background: #f8fafc;\n padding: 15px;\n border-radius: 8px;\n margin: 10px 0;\n border: 1px solid #e2e8f0;\n}\n\n.po-info h4 {\n color: #1e40af;\n margin-bottom: 10px;\n font-size: 1rem;\n}\n\n.po-details {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(150px, 1fr));\n gap: 10px;\n font-size: 0.9rem;\n}\n\n.items-list {\n background: #f8fafc;\n padding: 15px;\n border-radius: 8px;\n margin: 15px 0;\n border: 1px solid #e2e8f0;\n}\n\n.items-list h4 {\n color: #374151;\n margin-bottom: 10px;\n font-size: 1rem;\n}\n\n.item-detail {\n display: flex;\n justify-content: space-between;\n padding: 8px 0;\n border-bottom: 1px solid #e5e7eb;\n}\n\n.item-detail:last-child {\n border-bottom: none;\n}\n\n.comments-section {\n margin-top: 15px;\n}\n\n.comments-section textarea {\n width: 100%;\n min-height: 80px;\n padding: 10px;\n border: 1px solid #d1d5db;\n border-radius: 6px;\n font-size: 0.9rem;\n resize: vertical;\n}\n\n.role-badge {\n display: inline-block;\n padding: 4px 8px;\n border-radius: 12px;\n font-size: 0.75rem;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n margin-left: 10px;\n}\n\n.role-supervisor {\n background: #fef3c7;\n color: #92400e;\n}\n\n.role-purchasing {\n background: #dbeafe;\n color: #1e40af;\n}\n\n.role-receiving {\n background: #dcfce7;\n color: #166534;\n}\n\n.status-badge {\n display: inline-block;\n padding: 6px 12px;\n border-radius: 20px;\n font-size: 0.85rem;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.status-draft {\n background: #fef3c7;\n color: #92400e;\n}\n\n.status-under-review {\n background: #dbeafe;\n color: #1e40af;\n}\n\n.status-approved {\n background: #dcfce7;\n color: #166534;\n}\n\n.status-declined {\n background: #fee2e2;\n color: #dc2626;\n}\n\n.status-info-requested {\n background: #e8cf12;\n color: #da7212;\n}\n\n.status-po-created {\n background: #e0e7ff;\n color: #4bca38;\n}\n\n.status-pending-supply {\n background: #113fd8;\n color: #4bca38;\n}\n\n.status-delivered {\n background: #f3e8ff;\n color: #7c3aed;\n}\n\n.status-received {\n background: #ecfdf5;\n color: #065f46;\n}\n\n.action-buttons {\n display: flex;\n gap: 15px;\n justify-content: flex-end;\n margin-top: 30px;\n padding-top: 25px;\n border-top: 2px solid #e5e7eb;\n}\n\n.btn-primary-req {\n background: linear-gradient(135deg, #1e40af 0%, #3b82f6 100%);\n color: white;\n box-shadow: 0 4px 15px rgba(30, 64, 175, 0.3);\n padding: 12px 25px;\n border: none;\n border-radius: 10px;\n font-size: 1rem;\n font-weight: 600;\n cursor: pointer;\n transition: all 0.3s ease;\n}\n\n.btn-primary-req:hover:not(:disabled) {\n transform: translateY(-2px);\n box-shadow: 0 6px 20px rgba(30, 64, 175, 0.4);\n}\n\n.btn-primary-req:disabled {\n opacity: 0.6;\n cursor: not-allowed;\n}\n\n.btn-secondary {\n background: #6b7280;\n color: white;\n}\n\n.btn-secondary:hover {\n background: #4b5563;\n transform: translateY(-2px);\n}\n\n.requisition-list {\n display: grid;\n gap: 20px;\n}\n\n.requisition-card {\n background: white;\n border-radius: 15px;\n padding: 25px;\n box-shadow: 0 4px 15px rgba(0, 0, 0, 0.1);\n border: 1px solid #e5e7eb;\n transition: all 0.3s ease;\n}\n\n.requisition-card:hover {\n transform: translateY(-5px);\n box-shadow: 0 8px 25px rgba(0, 0, 0, 0.15);\n}\n\n.requisition-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 15px;\n}\n\n.requisition-id {\n font-size: 1.2rem;\n font-weight: 700;\n color: #1e40af;\n}\n\n.requisition-details {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));\n gap: 15px;\n margin-top: 15px;\n}\n\n.detail-item {\n display: flex;\n flex-direction: column;\n}\n\n.detail-label {\n font-size: 0.85rem;\n font-weight: 600;\n color: #6b7280;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n margin-bottom: 4px;\n}\n\n.detail-value {\n font-size: 1rem;\n color: #374151;\n font-weight: 500;\n}\n\n.workflow-steps {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin: 30px 0;\n padding: 20px;\n background: #f8fafc;\n border-radius: 15px;\n border: 2px solid #e2e8f0;\n}\n\n.workflow-step {\n display: flex;\n flex-direction: column;\n align-items: center;\n flex: 1;\n position: relative;\n}\n\n.workflow-step:not(:last-child)::after {\n content: '';\n position: absolute;\n top: 20px;\n right: -50%;\n width: 100%;\n height: 2px;\n background: #e5e7eb;\n z-index: 1;\n}\n\n.step-icon {\n width: 40px;\n height: 40px;\n border-radius: 50%;\n background: #e5e7eb;\n display: flex;\n align-items: center;\n justify-content: center;\n font-weight: bold;\n color: #6b7280;\n margin-bottom: 10px;\n position: relative;\n z-index: 2;\n}\n\n.step-icon.active {\n background: #3b82f6;\n color: white;\n}\n\n.step-icon.completed {\n background: #10b981;\n color: white;\n}\n\n.step-title {\n font-size: 0.9rem;\n font-weight: 600;\n color: #374151;\n text-align: center;\n}\n\n@media (max-width: 768px) {\n .form-grid {\n grid-template-columns: 1fr;\n }\n\n .item-row {\n grid-template-columns: 1fr;\n gap: 10px;\n }\n\n .action-buttons {\n flex-direction: column;\n }\n\n .workflow-steps {\n flex-direction: column;\n gap: 20px;\n }\n\n .workflow-step::after {\n display: none;\n }\n}\n\n#content {\n width: 100%;\n min-height: 100vh;\n transition: all 0.3s;\n position: absolute;\n padding: 20px;\n padding-left: 40px;\n}\n\n#content.active {\n margin-left: var(--sidebar-width);\n width: calc(100% - var(--sidebar-width));\n}\n\n.po-content {\n padding: 40px;\n}\n\n.po-header {\n display: grid;\n grid-template-columns: 1fr 1fr;\n gap: 40px;\n margin-bottom: 40px;\n}\n\n.company-info,\n.po-details {\n background: #f8f9fa;\n padding: 25px;\n border-radius: 15px;\n border-left: 5px solid #3498db;\n}\n\n.company-info h3,\n.po-details h3 {\n color: #2c3e50;\n margin-bottom: 15px;\n font-size: 1.3rem;\n}\n\n.info-row {\n margin-bottom: 8px;\n display: flex;\n justify-content: space-between;\n}\n\n.info-label {\n font-weight: 600;\n color: #555;\n}\n\n.info-value {\n color: #2c3e50;\n}\n\n.items-section {\n margin-top: 30px;\n}\n\n.section-title {\n color: #2c3e50;\n font-size: 1.5rem;\n margin-bottom: 20px;\n border-bottom: 2px solid #3498db;\n padding-bottom: 10px;\n}\n\n.items-table {\n width: 100%;\n border-collapse: collapse;\n margin-bottom: 30px;\n background: white;\n border-radius: 10px;\n overflow: hidden;\n box-shadow: 0 5px 15px rgba(0, 0, 0, 0.1);\n}\n\n.items-table th {\n background: linear-gradient(135deg, #34495e 0%, #2c3e50 100%);\n color: white;\n padding: 15px;\n text-align: left;\n font-weight: 600;\n}\n\n.items-table td {\n padding: 15px;\n border-bottom: 1px solid #eee;\n vertical-align: middle;\n}\n\n.items-table tr:hover {\n background: #f8f9fa;\n transform: translateY(-1px);\n transition: all 0.3s ease;\n}\n\n.price-input {\n padding: 8px 12px;\n border: 2px solid #ddd;\n border-radius: 8px;\n font-size: 14px;\n width: 100px;\n transition: all 0.3s ease;\n}\n\n.price-input:focus {\n outline: none;\n border-color: #3498db;\n box-shadow: 0 0 0 3px rgba(52, 152, 219, 0.1);\n}\n\n.price-changed {\n background: #fff3cd;\n border-color: #ffc107;\n}\n\n.edit-btn {\n background: #3498db;\n color: white;\n border: none;\n padding: 8px 16px;\n border-radius: 6px;\n cursor: pointer;\n font-size: 12px;\n transition: all 0.3s ease;\n}\n\n.edit-btn:hover {\n background: #2980b9;\n transform: translateY(-2px);\n}\n\n.save-btn {\n background: #27ae60;\n color: white;\n border: none;\n padding: 8px 16px;\n border-radius: 6px;\n cursor: pointer;\n font-size: 12px;\n margin-right: 5px;\n}\n\n.save-btn:disabled {\n background: #95a5a6;\n cursor: not-allowed;\n}\n\n.cancel-btn {\n background: #e74c3c;\n color: white;\n border: none;\n padding: 8px 16px;\n border-radius: 6px;\n cursor: pointer;\n font-size: 12px;\n}\n\n.justification-modal {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background: rgba(0, 0, 0, 0.7);\n display: flex;\n align-items: center;\n justify-content: center;\n z-index: 1000;\n}\n\n.modal-content {\n background: white;\n padding: 30px;\n border-radius: 15px;\n max-width: 500px;\n width: 90%;\n box-shadow: 0 20px 40px rgba(0, 0, 0, 0.3);\n}\n\n.modal-content h3 {\n color: #2c3e50;\n margin-bottom: 20px;\n font-size: 1.3rem;\n}\n\n.justification-textarea {\n width: 100%;\n padding: 15px;\n border: 2px solid #ddd;\n border-radius: 8px;\n font-family: inherit;\n font-size: 14px;\n resize: vertical;\n min-height: 100px;\n}\n\n.justification-textarea:focus {\n outline: none;\n border-color: #3498db;\n box-shadow: 0 0 0 3px rgba(52, 152, 219, 0.1);\n}\n\n.modal-buttons {\n margin-top: 20px;\n display: flex;\n gap: 10px;\n justify-content: flex-end;\n}\n\n.totals {\n background: linear-gradient(135deg, #f8f9fa 0%, #e9ecef 100%);\n padding: 25px;\n border-radius: 15px;\n margin-top: 20px;\n}\n\n.total-row {\n display: flex;\n justify-content: space-between;\n margin-bottom: 10px;\n font-size: 1.1rem;\n}\n\n.total-row.grand-total {\n border-top: 2px solid #3498db;\n padding-top: 15px;\n margin-top: 15px;\n font-weight: bold;\n font-size: 1.3rem;\n color: #2c3e50;\n}\n\n.justification-note {\n background: #fff3cd;\n border: 1px solid #ffc107;\n border-radius: 8px;\n padding: 10px;\n margin-top: 10px;\n font-size: 12px;\n color: #856404;\n}\n\n.price-change-indicator {\n background: #dc3545;\n color: white;\n border-radius: 50%;\n width: 20px;\n height: 20px;\n font-size: 12px;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n margin-left: 5px;\n}\n\n@media (max-width: 768px) {\n .po-header {\n grid-template-columns: 1fr;\n gap: 20px;\n }\n\n .items-table {\n font-size: 14px;\n }\n\n .items-table th,\n .items-table td {\n padding: 10px 8px;\n }\n\n .price-input {\n width: 80px;\n }\n}\n</style>","// ===== src/utils/sidebarConfig.js =====\nexport const createSidebarConfig = (options = {}) => {\n return {\n brandName: options.brandName || 'OceanHelm',\n logoIcon: options.logoIcon || 'bi bi-water',\n showLogo: options.showLogo !== false,\n responsive: options.responsive !== false,\n ...options\n }\n}\n\n// Roles that behave like \"owner\" in terms of broad visibility\n// (super-staff gets everything owner sees, minus Activity Log and approvals)\nexport const defaultMenuItems = [\n {\n type: 'link',\n label: 'Home',\n icon: 'bi bi-house',\n roles: ['owner', 'super-staff', 'staff', 'captain'],\n href: '/app/dashboard',\n active: true\n },\n {\n type: 'button',\n label: 'Guide',\n icon: 'bi bi-compass',\n action: 'guide',\n roles: ['crew']\n },\n {\n // Activity Log — intentionally excluded from super-staff\n type: 'link',\n label: 'Activity Log',\n icon: 'bi bi-activity',\n href: '/activity-log',\n roles: ['owner']\n },\n {\n type: 'link',\n label: 'People Manager',\n icon: 'bi bi-person-plus',\n href: '/app/people-manager',\n roles: ['owner', 'super-staff']\n },\n {\n type: 'text',\n label: 'Modules'\n },\n {\n type: 'dropdown',\n label: 'Compliance',\n roles: ['owner', 'super-staff', 'staff', 'captain'],\n icon: 'bi bi-list-ul',\n children: [\n { label: 'Vessel Certification', action: 'vessel-cert' },\n { label: 'Reports', action: 'reports' },\n { label: 'Crew Certification', action: 'crew-cert' },\n { label: 'QHSE Compliance', action: 'qhse' },\n { label: 'Track Garbage', action: 'garbage' },\n ]\n },\n {\n // ── HR MODULE ──────────────────────────────────────────────────────────\n // Visible to owner, super-staff, and staff with the 'hr' category.\n // Category-based filtering is handled by the sidebar's permissionChecker.\n type: 'dropdown',\n label: 'HR',\n icon: 'bi bi-people-fill',\n roles: ['owner', 'super-staff', 'staff'],\n categories: ['hr'], // staff must also have this category\n children: [\n {\n label: 'Attendance',\n action: 'hr-attendance',\n roles: ['owner', 'super-staff', 'staff'],\n categories: ['hr'],\n },\n {\n label: 'Payroll',\n action: 'hr-payroll',\n roles: ['owner', 'super-staff', 'staff'],\n categories: ['hr'],\n },\n {\n label: 'Appraisals',\n action: 'hr-appraisals',\n roles: ['owner', 'super-staff', 'staff'],\n categories: ['hr'],\n },\n {\n label: 'Leave Management',\n action: 'hr-leave',\n roles: ['owner', 'super-staff', 'staff'],\n categories: ['hr'],\n },\n {\n label: 'Disciplinary Log',\n action: 'hr-disciplinary',\n roles: ['owner'], // owner-only, no category gate needed\n },\n ]\n },\n {\n // ── RECRUITMENT MODULE ─────────────────────────────────────────────────\n // Accessible to owner, super-staff, and staff with the 'hr' category.\n type: 'dropdown',\n label: 'Recruitment',\n icon: 'bi bi-person-fill-add',\n roles: ['owner', 'super-staff', 'staff'],\n categories: ['hr'], // staff must also have this category\n children: [\n {\n label: 'Recruitment Tracker',\n action: 'recruitment-tracker',\n roles: ['owner', 'super-staff', 'staff'],\n categories: ['hr'],\n },\n {\n label: 'Recruitment Builder',\n action: 'recruitment-builder',\n roles: ['owner', 'super-staff', 'staff'],\n categories: ['hr'],\n }\n ]\n },\n /* ── end HR / RECRUITMENT MODULES ── */\n {\n type: 'button',\n label: 'Maintenance',\n icon: 'bi bi-tools',\n action: 'maintenance',\n roles: ['owner', 'super-staff', 'staff', 'captain']\n },\n {\n type: 'dropdown',\n label: 'Crew Management',\n icon: 'bi bi-people',\n roles: ['owner', 'super-staff', 'staff', 'captain'],\n children: [\n { label: 'All Crew', action: 'crew-all', roles: ['owner', 'super-staff', 'staff'] },\n { label: 'Get Crew by Vessel', action: 'crew-by-vessel' },\n { label: 'Schedule', action: 'schedule' },\n ]\n },\n {\n type: 'dropdown',\n label: 'Inventory Management',\n icon: 'bi bi-clipboard-data',\n roles: ['owner', 'super-staff', 'staff', 'captain'],\n children: [\n { label: 'Parts Inventory', action: 'inventory', roles: ['owner', 'super-staff', 'staff', 'captain'] },\n { label: 'Bunkering', action: 'fuel', roles: ['owner', 'super-staff', 'staff', 'captain'] },\n ]\n },\n {\n type: 'link',\n label: 'Requisition Processing',\n icon: 'bi bi-calendar-check',\n href: '/app/requisition',\n roles: ['owner', 'super-staff', 'staff', 'captain']\n },\n {\n type: 'button',\n label: 'Voyage Manager',\n icon: 'fas fa-ship',\n action: 'coming-soon',\n roles: ['owner', 'super-staff', 'staff', 'captain']\n },\n {\n type: 'button',\n label: 'Vessel Log',\n icon: 'bi bi-file-ruled',\n action: 'coming-soon',\n roles: ['owner', 'super-staff', 'staff', 'captain']\n },\n {\n type: 'button',\n label: 'Profile',\n icon: 'bi bi-people',\n action: 'crew-profile',\n roles: ['crew']\n },\n {\n type: 'button',\n label: 'Training',\n icon: 'bi bi-book',\n action: 'crew-training',\n roles: ['crew']\n },\n {\n type: 'button',\n label: 'Settings',\n icon: 'bi bi-gear',\n action: 'settings',\n roles: ['owner', 'super-staff', 'staff']\n },\n {\n type: 'button',\n label: 'Help & Support',\n icon: 'bi bi-question-circle',\n action: 'help',\n }\n]","// ===== src/utils/permissions.js =====\nexport const defaultPermissionChecker = (item, userProfile) => {\n // No role restrictions\n if (!item.roles || item.roles.length === 0) {\n return true\n }\n\n // Check if user role is in allowed roles\n return item.roles.includes(userProfile?.role)\n}","// src/index.js - Library entry point\nimport ConfigurableSidebar from './components/ConfigurableSidebar.vue'\nimport VesselList from './components/VesselList.vue'\nimport DashHead from './components/DashHead.vue' \nimport Reports from './components/Reports.vue' \nimport OceanHelmMaintenance from './components/OceanHelmMaintenance.vue'\nimport ActivityLogs from './components/ActivityLogs.vue'\nimport CrewManagement from './components/CrewManagement.vue'\nimport RequisitionSystem from './components/RequisitionSystem.vue'\n\nimport { createSidebarConfig, defaultMenuItems } from './utils/sidebarConfig'\nimport { defaultPermissionChecker } from './utils/permissions'\n\n// Export main components\nexport { ConfigurableSidebar, VesselList, DashHead, Reports, CrewManagement, ActivityLogs, OceanHelmMaintenance, RequisitionSystem }\n\n// Export utilities\nexport { createSidebarConfig, defaultMenuItems, defaultPermissionChecker }\n\n// Export types for TypeScript users\nexport * from './types'\n\n// Default export for plugin-style usage\nexport default {\n install(app, options = {}) {\n app.component('ConfigurableSidebar', ConfigurableSidebar)\n app.component('VesselLists', VesselList)\n app.component('DashHead', DashHead)\n app.component('Reports', Reports)\n app.component('ActivityLogs', ActivityLogs)\n app.component('CrewManagement', CrewManagement)\n app.component('RequisitionSystem', RequisitionSystem)\n app.component('OceanHelmMaintenance', OceanHelmMaintenance)\n\n // Provide global configuration\n app.provide('sidebarConfig', options)\n }\n}"],"names":["_sfc_main","item","child","i","userRole","_a","userCategories","_b","cat","sidebarToggle","sidebar","content","event","isClickInsideSidebar","isClickOnToggleBtn","_hoisted_2","_hoisted_3","_hoisted_8","_createElementBlock","$options","$props","_openBlock","_hoisted_1","_createElementVNode","_toDisplayString","_Fragment","_renderList","index","$event","_withModifiers","_normalizeClass","_createTextVNode","_withDirectives","subItem","subIndex","_hoisted_9","_vShow","_hoisted_10","_hoisted_11","_renderSlot","_ctx","vessel","status","navigationData","action","date","registrationNumber","now","inputDate","diffMs","diffHours","days","hours","result","role","userVessel","expiry_date","today","diffTime","_hoisted_4","_hoisted_5","_hoisted_6","_hoisted_7","_hoisted_14","_hoisted_15","_hoisted_18","_hoisted_19","_hoisted_20","_hoisted_21","_hoisted_22","_hoisted_23","_hoisted_24","_hoisted_26","_hoisted_27","_hoisted_29","_hoisted_31","$data","_cache","args","_hoisted_12","_hoisted_13","_hoisted_16","_hoisted_25","_hoisted_28","_hoisted_30","_hoisted_33","r","ctx","ref","val","prev","reportId","f","report","t","type","file","entityRef","el","key","attachments","imageFiles","reportPdfBytes","err","blob","src","resolve","reject","s","jsPDF","doc","pageW","margin","contentW","y","checkPage","needed","sectionHeading","text","fieldRow","label","value","labelWidth","valLines","hx","participantCount","crewLines","raw","list","colNr","wNr","colName","wName","name","idx","checkQuestions","checkAnswers","q","yes","scenarioText","line","imgFile","dataUrl","props","ratio","iw","ih","e","totalPages","p","labelledBox","minHeight","bodyText","textH","boxH","labelLines","ll","labelH","ty","incLabel","halfW","titleLines","meta","colW","col","row","xo","yo","addSection","heading","allAttachments","zip","safeName","folder","att","bytes","resp","filename","url","a","files","k","sizes","d","_hoisted_17","_hoisted_34","_hoisted_41","_hoisted_42","_hoisted_43","_hoisted_45","_hoisted_46","_hoisted_47","_hoisted_48","_hoisted_49","_hoisted_50","_hoisted_51","_hoisted_53","_hoisted_59","_hoisted_60","_hoisted_61","_hoisted_66","_hoisted_67","_hoisted_68","_hoisted_69","_hoisted_72","_hoisted_76","_hoisted_77","_hoisted_78","_hoisted_79","_hoisted_81","_hoisted_83","_hoisted_84","_hoisted_85","_hoisted_86","_hoisted_87","_hoisted_91","_hoisted_92","_hoisted_93","_hoisted_94","_hoisted_99","_hoisted_100","_hoisted_101","_hoisted_102","_hoisted_103","_hoisted_105","_hoisted_106","_hoisted_107","_hoisted_108","_hoisted_110","_hoisted_113","_hoisted_115","_hoisted_117","_hoisted_120","_hoisted_121","_hoisted_124","_hoisted_125","_hoisted_127","_hoisted_128","_hoisted_129","_hoisted_130","_hoisted_132","_hoisted_133","_hoisted_134","_hoisted_135","_hoisted_136","_hoisted_140","_hoisted_141","_hoisted_142","_hoisted_144","_hoisted_145","_hoisted_146","_hoisted_149","_hoisted_154","_hoisted_158","_hoisted_160","_hoisted_161","_hoisted_162","_hoisted_163","_hoisted_164","_hoisted_165","_hoisted_166","_hoisted_167","_hoisted_169","_hoisted_170","_hoisted_172","_hoisted_177","_hoisted_178","_hoisted_180","_hoisted_182","_hoisted_184","_hoisted_185","_createVNode","_Transition","_hoisted_32","_hoisted_39","_hoisted_40","_hoisted_52","_hoisted_55","_hoisted_56","_hoisted_57","_hoisted_64","_hoisted_65","_hoisted_71","_hoisted_74","_hoisted_75","_hoisted_82","_hoisted_90","_hoisted_96","_hoisted_98","_hoisted_104","_hoisted_109","_hoisted_111","_hoisted_112","_hoisted_114","x","_hoisted_116","_hoisted_118","_vModelSelect","_hoisted_119","_vModelText","_hoisted_122","_hoisted_123","_hoisted_137","_hoisted_138","_hoisted_139","_hoisted_143","_hoisted_147","_hoisted_148","_hoisted_150","_hoisted_152","_hoisted_153","_hoisted_156","_hoisted_157","_hoisted_159","_hoisted_168","_hoisted_171","_hoisted_173","_hoisted_174","_hoisted_175","_hoisted_176","_hoisted_179","_hoisted_181","_hoisted_187","_hoisted_188","newDate","task","query","total","profile","taskId","checklist","newTask","filter","taskComponent","requiredFields","field","section","recurrence","nextDate","nextDueDate","diffDays","taskData","success","updateData","updatedAfter","dateString","completed","_hoisted_35","_hoisted_36","_hoisted_37","_hoisted_38","_hoisted_44","_hoisted_62","_hoisted_63","_hoisted_70","_hoisted_73","_hoisted_80","_hoisted_89","_hoisted_95","_hoisted_97","member","_vModelCheckbox","_hoisted_54","_hoisted_58","_hoisted_88","_normalizeStyle","recommendation","timestamp","log","change","page","cert","companyVerification","v","matchesSearch","matchesStatus","entries","logEntry","b","dateA","dateB","filtered","entry","search","dates","minDate","maxDate","formatDate","breakdown","vessels","isVessel","rolePermissions","mostRecentOnboard","onboardDate","arrivalDate","newGuest","duration","sorted","valA","valB","hasName","hasDate","hasImage","validCertifications","finalRole","certificationsWithUrls","uploadResult","newMember","email","embarkDate","memberId","certification","reader","fileInput","expiryDate","dateStr","expiry","oneMonthFromNow","data","req","tab","sum","unitPrice","userId","tabName","taxRate","statusFields","requisition","id","_c","details","info","isPrinting","_hoisted_126","_hoisted_131","dept","unit","_d","_e","_f","_g","_h","_i","_k","_j","_m","_l","createSidebarConfig","options","defaultMenuItems","defaultPermissionChecker","userProfile","app","ConfigurableSidebar","VesselList","DashHead","Reports","ActivityLogs","CrewManagement","RequisitionSystem","OceanHelmMaintenance"],"mappings":"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"}
|