<?php
declare(strict_types=1);

namespace App\Modules\Tutorials;

final class TutorialRegistry
{
    public static function getSections(): array
    {
        return [
            // ── العمليات (Operations) ──────────────────────────
            'subscriptions' => [
                'title' => 'الاشتراكات',
                'subtitle' => 'التوليد السنوي والتحصيل والمتابعة',
                'icon' => 'calendar-check',
                'color' => '#059669',
            ],
            'installments' => [
                'title' => 'التقسيط',
                'subtitle' => 'خطط التقسيط والجدولة والمتابعة',
                'icon' => 'calendar-range',
                'color' => '#06B6D4',
            ],
            'fines' => [
                'title' => 'المخالفات',
                'subtitle' => 'فرض الغرامات والتصعيد والسداد',
                'icon' => 'alert-triangle',
                'color' => '#DC2626',
            ],
            'interviews' => [
                'title' => 'المقابلات',
                'subtitle' => 'الجدولة والإجراء والنتائج',
                'icon' => 'message-square',
                'color' => '#0EA5E9',
            ],
            'documents' => [
                'title' => 'المستندات',
                'subtitle' => 'الرفع والتصنيف والتحقق',
                'icon' => 'file-text',
                'color' => '#475569',
            ],
            'seasonal' => [
                'title' => 'العضوية الموسمية',
                'subtitle' => 'إعداد المواسم والتسجيل والتسعير',
                'icon' => 'sun',
                'color' => '#F59E0B',
            ],
            'carnets' => [
                'title' => 'الكارنيهات',
                'subtitle' => 'الإصدار والطباعة والإلغاء',
                'icon' => 'id-card',
                'color' => '#0284C7',
            ],
            // ── الأنشطة الرياضية (Sports) ──────────────────────
            'sa-registration' => [
                'title' => 'تسجيل النشاط الرياضي',
                'subtitle' => 'معالج التسجيل والكروت والبوابة والتقارير',
                'icon' => 'clipboard-check',
                'color' => '#0891B2',
            ],
            'player-affairs' => [
                'title' => 'شؤون اللاعبين',
                'subtitle' => 'التسجيل والتقييم والإصابات واللياقة',
                'icon' => 'medal',
                'color' => '#0D9488',
            ],
            'coaches' => [
                'title' => 'المدربين',
                'subtitle' => 'تسجيل المدربين والتخصصات والأداء',
                'icon' => 'user-check',
                'color' => '#16A34A',
            ],
            'facilities' => [
                'title' => 'المرافق',
                'subtitle' => 'المنشآت والوحدات والصيانة والحجز',
                'icon' => 'building',
                'color' => '#4F46E5',
            ],
            'playgrounds' => [
                'title' => 'الملاعب',
                'subtitle' => 'إدارة الملاعب والجدولة والمرآة الحية',
                'icon' => 'layout-grid',
                'color' => '#16A34A',
            ],
            'reservations' => [
                'title' => 'الحجوزات',
                'subtitle' => 'إنشاء الحجز والتقويم والإلغاء',
                'icon' => 'calendar',
                'color' => '#3B82F6',
            ],
            'tournaments' => [
                'title' => 'البطولات',
                'subtitle' => 'إنشاء بطولات وتسجيل وقرعة ونتائج',
                'icon' => 'trophy',
                'color' => '#CA8A04',
            ],
            'pool-management' => [
                'title' => 'إدارة حمامات السباحة',
                'subtitle' => 'إعداد الحمامات والحارات والجدولة',
                'icon' => 'waves',
                'color' => '#0EA5E9',
            ],
            'match-center' => [
                'title' => 'مركز المباريات',
                'subtitle' => 'المباريات الحية والأحداث والنتائج',
                'icon' => 'tv',
                'color' => '#DC2626',
            ],
            // ── المالية (Finance) ──────────────────────────────
            'cashier' => [
                'title' => 'الخزينة الرئيسية',
                'subtitle' => 'طابور الدفع والشيكات والتقارير اليومية',
                'icon' => 'landmark',
                'color' => '#059669',
            ],
            'payments' => [
                'title' => 'المدفوعات',
                'subtitle' => 'أنواع الدفع والإيصالات وسير الإلغاء',
                'icon' => 'credit-card',
                'color' => '#2563EB',
            ],
            'accounting' => [
                'title' => 'المحاسبة والماليات',
                'subtitle' => 'دفتر الأستاذ والقيود والميزانيات',
                'icon' => 'calculator',
                'color' => '#059669',
            ],
            // ── سلسلة التوريد (Supply Chain) ───────────────────
            'inventory' => [
                'title' => 'المخازن',
                'subtitle' => 'الأصناف والمخازن وحركات المخزون',
                'icon' => 'warehouse',
                'color' => '#0891B2',
            ],
            'procurement' => [
                'title' => 'المشتريات',
                'subtitle' => 'طلبات الشراء والموردين والمدفوعات',
                'icon' => 'shopping-cart',
                'color' => '#D97706',
            ],
            'sales' => [
                'title' => 'المبيعات',
                'subtitle' => 'نقاط البيع والباقات والعمولات',
                'icon' => 'shopping-bag',
                'color' => '#DC2626',
            ],
            // ── الشئون الإدارية (Administration) ───────────────
            'hr' => [
                'title' => 'الموارد البشرية',
                'subtitle' => 'الموظفين والحضور والرواتب',
                'icon' => 'briefcase',
                'color' => '#7C3AED',
            ],
            'rentals' => [
                'title' => 'الإيجارات',
                'subtitle' => 'الوحدات المؤجرة والعقود والفواتير',
                'icon' => 'key',
                'color' => '#9333EA',
            ],
            // ── النظام والإعدادات (System) ─────────────────────
            'reports' => [
                'title' => 'التقارير',
                'subtitle' => 'أنواع التقارير والفلاتر والتصدير',
                'icon' => 'bar-chart-3',
                'color' => '#8B5CF6',
            ],
            'users' => [
                'title' => 'إدارة المستخدمين',
                'subtitle' => 'إنشاء الحسابات وتعيين الأدوار والصلاحيات',
                'icon' => 'users',
                'color' => '#6366F1',
            ],
            'roles' => [
                'title' => 'الأدوار والصلاحيات',
                'subtitle' => 'إنشاء الأدوار وتعيين الصلاحيات',
                'icon' => 'shield',
                'color' => '#7C3AED',
            ],
            'forms' => [
                'title' => 'النماذج الإلكترونية',
                'subtitle' => 'بناء النماذج والتعبئة والطباعة',
                'icon' => 'clipboard-list',
                'color' => '#8B5CF6',
            ],
            'pricing-management' => [
                'title' => 'إدارة التسعير',
                'subtitle' => 'قواعد التسعير والخصومات الخاصة',
                'icon' => 'tag',
                'color' => '#059669',
            ],
            'workflow' => [
                'title' => 'سير العمل',
                'subtitle' => 'قواعد سير العمل والموافقات',
                'icon' => 'git-pull-request',
                'color' => '#7C3AED',
            ],
            'settings' => [
                'title' => 'الإعدادات',
                'subtitle' => 'ضبط النظام والهوية وتصميم الإيصالات',
                'icon' => 'settings',
                'color' => '#6B7280',
            ],
            'branches' => [
                'title' => 'الفروع',
                'subtitle' => 'إنشاء الفروع وإعداداتها',
                'icon' => 'git-branch',
                'color' => '#EA580C',
            ],
            'notifications' => [
                'title' => 'الإشعارات',
                'subtitle' => 'القوالب والمشغلات وسجل الإرسال',
                'icon' => 'bell',
                'color' => '#F97316',
            ],
            'audit' => [
                'title' => 'سجل المراجعة',
                'subtitle' => 'تتبع جميع التعديلات والعمليات في النظام',
                'icon' => 'eye',
                'color' => '#64748B',
            ],
            'news' => [
                'title' => 'الأخبار',
                'subtitle' => 'إنشاء المقالات والنشر',
                'icon' => 'newspaper',
                'color' => '#2563EB',
            ],
            'support' => [
                'title' => 'الدعم الفني',
                'subtitle' => 'التذاكر والتعيين والحل',
                'icon' => 'headphones',
                'color' => '#0D9488',
            ],
            'parents' => [
                'title' => 'أولياء الأمور',
                'subtitle' => 'إدارة حسابات أولياء الأمور والربط باللاعبين',
                'icon' => 'users',
                'color' => '#7C3AED',
            ],
            'medical-board' => [
                'title' => 'اللجنة الطبية',
                'subtitle' => 'الموافقات الطبية والفحوصات والشهادات',
                'icon' => 'heart-pulse',
                'color' => '#DC2626',
            ],
            'access-matrix' => [
                'title' => 'مصفوفة الصلاحيات',
                'subtitle' => 'عرض ومقارنة صلاحيات الأدوار',
                'icon' => 'grid-3x3',
                'color' => '#6366F1',
            ],
            'rules' => [
                'title' => 'القواعد والتسعير',
                'subtitle' => 'محرك القواعد وسياسات التسعير والخصومات',
                'icon' => 'sliders',
                'color' => '#64748B',
            ],
        ];
    }

    public static function getTutorials(string $section): array
    {
        return match ($section) {
            'accounting' => self::accountingTutorials(),
            'hr' => self::hrTutorials(),
            'procurement' => self::procurementTutorials(),
            'inventory' => self::inventoryTutorials(),
            'cashier' => self::cashierTutorials(),
            'sales' => self::salesTutorials(),
            'payments' => self::paymentsTutorials(),
            'coaches' => self::coachesTutorials(),
            'carnets' => self::carnetsTutorials(),
            'facilities' => self::facilitiesTutorials(),
            'tournaments' => self::tournamentsTutorials(),
            'rentals' => self::rentalsTutorials(),
            'support' => self::supportTutorials(),
            'settings' => self::settingsTutorials(),
            'fines' => self::finesTutorials(),
            'roles' => self::rolesTutorials(),
            'interviews' => self::interviewsTutorials(),
            'installments' => self::installmentsTutorials(),
            'reports' => self::reportsTutorials(),
            'seasonal' => self::seasonalTutorials(),
            'documents' => self::documentsTutorials(),
            'branches' => self::branchesTutorials(),
            'news' => self::newsTutorials(),
            'workflow' => self::workflowTutorials(),
            'subscriptions' => self::subscriptionsTutorials(),
            'reservations' => self::reservationsTutorials(),
            'match-center' => self::matchCenterTutorials(),
            'pool-management' => self::poolManagementTutorials(),
            'users' => self::usersTutorials(),
            'notifications' => self::notificationsTutorials(),
            'player-affairs' => self::playerAffairsTutorials(),
            'forms' => self::formsTutorials(),
            'pricing-management' => self::pricingManagementTutorials(),
            'audit' => self::auditTutorials(),
            'playgrounds' => self::playgroundsTutorials(),
            'sa-registration' => self::saRegistrationTutorials(),
            'parents' => self::parentsTutorials(),
            'medical-board' => self::medicalBoardTutorials(),
            'access-matrix' => self::accessMatrixTutorials(),
            'rules' => self::rulesTutorials(),
            default => [],
        };
    }

    public static function getSteps(string $section, string $slug): array
    {
        $allSteps = self::getAllSteps();
        $key = $section . '.' . $slug;
        $steps = $allSteps[$key] ?? self::generateDefaultSteps($section, $slug);

        if (!empty($steps) && empty($steps[0]['screenshot'])) {
            $screenshot = self::getStepScreenshot($section, $slug);
            if ($screenshot) {
                $steps[0]['screenshot'] = $screenshot;
            }
        }

        return $steps;
    }

    private static function getStepScreenshot(string $section, string $slug): ?string
    {
        $map = [
            'accounting.setup-chart-of-accounts' => 'accounting-coa.png',
            'accounting.create-journal-entry' => 'accounting-journal.png',
            'accounting.bank-reconciliation' => 'accounting-bank.png',
            'accounting.trial-balance-report' => 'accounting-trial-balance.png',
            'accounting.budget-management' => 'accounting-dashboard.png',
            'accounting.fiscal-year-setup' => 'accounting-fiscal.png',
            'accounting.cost-centers' => 'accounting-cost-centers.png',
            'accounting.opening-entries' => 'accounting-journal.png',
            'accounting.period-closing' => 'accounting-fiscal.png',
            'accounting.financial-instruments' => 'accounting-settlements.png',
            'hr.add-employee' => 'hr-employees.png',
            'hr.attendance-management' => 'hr-attendance.png',
            'hr.leave-request' => 'hr-leaves.png',
            'hr.run-payroll' => 'hr-payroll.png',
            'hr.end-of-service' => 'hr-employees.png',
            'hr.create-contract' => 'hr-contracts.png',
            'hr.insurance-management' => 'hr-employees.png',
            'hr.disciplinary-action' => 'hr-employees.png',
            'hr.employee-loan' => 'hr-loans.png',
            'hr.overtime-management' => 'hr-overtime.png',
            'procurement.create-purchase-requisition' => 'procurement-pr.png',
            'procurement.receive-goods' => 'procurement-grn.png',
            'procurement.vendor-invoice' => 'procurement-invoices.png',
            'procurement.vendor-payment' => 'procurement-dashboard.png',
            'procurement.return-to-vendor' => 'procurement-grn.png',
            'procurement.request-for-quotation' => 'procurement-quotes.png',
            'inventory.setup-warehouse' => 'inventory-warehouses.png',
            'inventory.add-item' => 'inventory-items.png',
            'inventory.stock-movement' => 'inventory-movements.png',
            'inventory.stock-audit' => 'inventory-items.png',
            'inventory.opening-balance' => 'inventory-opening.png',
            'inventory.stock-transfer' => 'inventory-movements.png',
            'inventory.purchase-order' => 'inventory-po.png',
            'inventory.manage-suppliers' => 'inventory-suppliers.png',
            'inventory.asset-management' => 'inventory-assets.png',
            'cashier.process-payment-queue' => 'cashier-queue.png',
            'cashier.void-payment' => 'cashier-queue.png',
            'cashier.check-management' => 'cashier-deposits.png',
            'cashier.daily-report' => 'cashier-queue.png',
            'cashier.session-open' => 'cashier-queue.png',
            'cashier.session-close' => 'cashier-queue.png',
            'cashier.settlement-flow' => 'cashier-settlements.png',
            'cashier.custody-tracking' => 'treasury-dashboard.png',
            'sales.pos-transaction' => 'sales-pos.png',
            'sales.create-package' => 'sales-packages.png',
            'sales.sales-commission' => 'sales-list.png',
            'sales.daily-sales-report' => 'sales-list.png',
            'sales.referral-tracking' => 'sales-list.png',
            'payments.payment-types-overview' => 'payments-list.png',
            'payments.issue-receipt' => 'receipts-list.png',
            'payments.void-workflow' => 'payments-list.png',
            'coaches.register-coach' => 'sa-coaches.png',
            'coaches.assign-discipline' => 'sa-coaches.png',
            'coaches.coach-schedule' => 'sa-coaches.png',
            'coaches.coach-performance' => 'sa-coaches.png',
            'coaches.coach-type-academy' => 'sa-coaches.png',
            'coaches.guarantee-report' => 'sa-coaches.png',
            'carnets.carnet-issuance-conditions' => 'carnets-list.png',
            'carnets.print-carnet' => 'carnets-list.png',
            'carnets.deactivate-carnet' => 'carnets-list.png',
            'carnets.dependent-carnet-issuance' => 'carnets-list.png',
            'carnets.guest-entry' => 'guest-entries.png',
            'facilities.create-facility' => 'sa-facilities.png',
            'facilities.manage-units' => 'sa-facilities.png',
            'facilities.maintenance-schedule' => 'sa-facilities.png',
            'facilities.booking-rules' => 'sa-facilities.png',
            'facilities.locker-setup' => 'sa-lockers.png',
            'facilities.locker-rental' => 'sa-lockers.png',
            'facilities.locker-eviction' => 'sa-lockers.png',
            'facilities.locker-payment' => 'sa-lockers.png',
            'facilities.locker-renewal' => 'sa-lockers.png',
            'tournaments.create-tournament' => 'tournaments-list.png',
            'tournaments.tournament-registration' => 'tournaments-list.png',
            'tournaments.generate-bracket' => 'tournaments-list.png',
            'tournaments.record-match-result' => 'tournaments-list.png',
            'rentals.setup-rental-entity' => 'sa-lockers.png',
            'rentals.create-rental-contract' => 'sa-lockers.png',
            'rentals.rental-deposit' => 'sa-lockers.png',
            'rentals.rental-invoicing' => 'sa-lockers.png',
            'support.create-ticket' => 'support-tickets.png',
            'support.assign-ticket' => 'support-tickets.png',
            'support.resolve-ticket' => 'support-tickets.png',
            'support.sla-monitoring' => 'support-tickets.png',
            'settings.system-configuration' => 'settings-main.png',
            'settings.branding-setup' => 'settings-main.png',
            'settings.receipt-design' => 'settings-main.png',
            'settings.appearance' => 'settings-main.png',
            'fines.impose-fine' => 'violations-list.png',
            'fines.fine-types-setup' => 'violations-list.png',
            'fines.fine-escalation' => 'violations-list.png',
            'fines.fine-payment' => 'violations-list.png',
            'roles.create-role' => 'roles-list.png',
            'roles.assign-permissions' => 'roles-list.png',
            'roles.assign-role-to-user' => 'users-list.png',
            'roles.custom-permissions' => 'roles-list.png',
            'roles.cashier-roles' => 'roles-list.png',
            'roles.sports-roles' => 'roles-list.png',
            'interviews.schedule-interview' => 'interviews-list.png',
            'interviews.conduct-interview' => 'interviews-list.png',
            'interviews.interview-results' => 'interviews-list.png',
            'installments.create-installment-plan' => 'installments-list.png',
            'installments.payment-schedule' => 'installments-list.png',
            'installments.collect-installment' => 'installments-list.png',
            'installments.overdue-monitoring' => 'installments-list.png',
            'installments.cheque-submission' => 'installments-list.png',
            'reports.report-types' => 'reports-main.png',
            'reports.apply-filters' => 'reports-main.png',
            'reports.export-report' => 'reports-main.png',
            'reports.schedule-report' => 'reports-main.png',
            'seasonal.setup-season' => 'seasonal-list.png',
            'seasonal.seasonal-pricing' => 'seasonal-list.png',
            'seasonal.seasonal-registration' => 'seasonal-list.png',
            'seasonal.seasonal-report' => 'seasonal-list.png',
            'documents.upload-document' => 'documents-list.png',
            'documents.categorize-document' => 'documents-list.png',
            'documents.verify-document' => 'documents-list.png',
            'branches.create-branch' => 'branches-list.png',
            'branches.branch-configuration' => 'branches-list.png',
            'branches.branch-transfer' => 'branches-list.png',
            'news.create-article' => 'dashboard.png',
            'news.publish-article' => 'dashboard.png',
            'news.manage-categories' => 'dashboard.png',
            'workflow.create-workflow-rule' => 'workflows-overview.png',
            'workflow.approval-chain' => 'workflows-overview.png',
            'workflow.process-approval' => 'workflows-overview.png',
            'workflow.workflow-monitoring' => 'workflows-overview.png',
            'subscriptions.generate-annual' => 'subscriptions-list.png',
            'subscriptions.collect-subscription' => 'subscriptions-list.png',
            'subscriptions.subscription-tracking' => 'subscriptions-list.png',
            'subscriptions.subscription-exemption' => 'subscriptions-list.png',
            'reservations.create-booking' => 'reservations-list.png',
            'reservations.calendar-view' => 'reservations-calendar.png',
            'reservations.cancel-booking' => 'reservations-list.png',
            'reservations.recurring-booking' => 'reservations-list.png',
            'match-center.create-live-match' => 'sa-mirror.png',
            'match-center.track-events' => 'sa-mirror.png',
            'match-center.match-scoring' => 'sa-mirror.png',
            'pool-management.setup-pool' => 'sa-pool-grid.png',
            'pool-management.manage-lanes' => 'sa-pool-grid.png',
            'pool-management.pool-scheduling' => 'sa-pool-grid.png',
            'pool-management.pool-maintenance' => 'sa-pool-grid.png',
            'users.create-user' => 'users-list.png',
            'users.edit-user' => 'users-list.png',
            'users.manage-user-permissions' => 'roles-list.png',
            'users.user-activity-log' => 'audit-log.png',
            'notifications.create-template' => 'notifications-templates.png',
            'notifications.setup-trigger' => 'notifications-templates.png',
            'notifications.send-manual' => 'notifications-log.png',
            'notifications.notification-log' => 'notifications-log.png',
            'player-affairs.register-player' => 'sa-players.png',
            'player-affairs.player-evaluation' => 'sa-players.png',
            'player-affairs.record-injury' => 'sa-players.png',
            'player-affairs.fitness-test' => 'sa-players.png',
            'player-affairs.medical-approval' => 'sa-players.png',
            'forms.build-form' => 'forms-list.png',
            'forms.fill-form' => 'forms-list.png',
            'forms.review-submissions' => 'forms-list.png',
            'forms.print-form' => 'forms-list.png',
            'pricing-management.setup-pricing-rules' => 'pricing-management.png',
            'pricing-management.special-discounts' => 'pricing-management.png',
            'pricing-management.edit-pricing' => 'pricing-management.png',
            'audit.view-audit-log' => 'audit-log.png',
            'audit.entity-history' => 'audit-log.png',
            'audit.filter-audit' => 'audit-log.png',
            'playgrounds.create-playground' => 'sa-mirror.png',
            'playgrounds.playground-schedule' => 'sa-mirror.png',
            'playgrounds.playground-mirror' => 'sa-mirror.png',
            'playgrounds.playground-attendance' => 'sa-attendance.png',
            'sa-registration.registration-wizard' => 'sa-registration.png',
            'sa-registration.card-management' => 'sa-cards.png',
            'sa-registration.gate-scanning' => 'sa-gate.png',
            'sa-registration.registration-reports' => 'sa-registration.png',
            'sa-registration.temp-card-workflow' => 'sa-cards.png',
            'sa-registration.booking-wizard' => 'sa-booking-wizard.png',
            'sa-registration.academy-pricing' => 'sa-pricing.png',
        ];

        return $map[$section . '.' . $slug] ?? self::getScreenshot($section);
    }

    public static function getScreenshot(string $section): ?string
    {
        $map = [
            'accounting' => 'accounting-dashboard.png',
            'hr' => 'hr-employees.png',
            'procurement' => 'procurement-dashboard.png',
            'inventory' => 'inventory-items.png',
            'cashier' => 'cashier-queue.png',
            'sales' => 'sales-pos.png',
            'payments' => 'payments-list.png',
            'coaches' => 'sa-coaches.png',
            'carnets' => 'carnets-list.png',
            'facilities' => 'sa-facilities.png',
            'tournaments' => 'tournaments-list.png',
            'rentals' => 'sa-lockers.png',
            'support' => 'support-tickets.png',
            'settings' => 'settings-main.png',
            'fines' => 'violations-list.png',
            'roles' => 'roles-list.png',
            'interviews' => 'interviews-list.png',
            'installments' => 'installments-list.png',
            'reports' => 'reports-main.png',
            'seasonal' => 'seasonal-list.png',
            'documents' => 'documents-list.png',
            'branches' => 'branches-list.png',
            'workflow' => 'workflows-overview.png',
            'subscriptions' => 'subscriptions-list.png',
            'reservations' => 'reservations-list.png',
            'match-center' => 'sa-mirror.png',
            'pool-management' => 'sa-pool-grid.png',
            'users' => 'users-list.png',
            'notifications' => 'notifications-log.png',
            'player-affairs' => 'sa-players.png',
            'forms' => 'forms-list.png',
            'pricing-management' => 'pricing-management.png',
            'audit' => 'audit-log.png',
            'playgrounds' => 'sa-mirror.png',
            'sa-registration' => 'sa-registration.png',
            'news' => 'dashboard.png',
            'parents' => 'sa-players.png',
            'medical-board' => 'sa-players.png',
            'access-matrix' => 'roles-list.png',
            'rules' => 'pricing-management.png',
        ];
        return $map[$section] ?? null;
    }

    private static function generateDefaultSteps(string $section, string $slug): array
    {
        $tutorials = self::getTutorials($section);
        $tutorial = $tutorials[$slug] ?? null;
        if (!$tutorial) {
            return [];
        }

        $sections = self::getSections();
        $sectionTitle = $sections[$section]['title'] ?? $section;
        $screenshotFile = self::getScreenshot($section);

        return [
            ['title' => 'فتح الصفحة', 'body' => 'من القائمة الجانبية: <span class="field">' . $sectionTitle . '</span> > <span class="field">' . $tutorial['title'] . '</span>.', 'screenshot' => $screenshotFile],
            ['title' => 'ملء البيانات المطلوبة', 'body' => 'أكمل جميع الحقول المطلوبة (المحددة بعلامة <span style="color:#DC2626;">*</span>).<span class="info">تأكد من صحة البيانات قبل الحفظ — بعض الحقول لا يمكن تعديلها لاحقاً.</span>'],
            ['title' => 'المراجعة والحفظ', 'body' => 'راجع البيانات ثم اضغط <span class="field">حفظ</span>.<span class="success">عند النجاح ستظهر رسالة تأكيد ويتم تحويلك للصفحة التالية تلقائياً.</span>'],
        ];
    }

    private static function getAllSteps(): array
    {
        return [
            // ── ACCOUNTING ──
            'accounting.setup-chart-of-accounts' => [
                ['title' => 'فتح شجرة الحسابات', 'body' => 'من القائمة: <span class="field">المحاسبة</span> > <span class="field">شجرة الحسابات</span>.'],
                ['title' => 'إضافة حساب رئيسي', 'body' => 'اضغط <span class="field">حساب جديد</span>. اختر <span class="field">النوع</span> (أصول، خصوم، إيرادات، مصروفات، حقوق ملكية).<span class="info">النظام يستخدم المعيار المصري — 8 أرقام لكود الحساب.</span>'],
                ['title' => 'تحديد المستوى والتبعية', 'body' => 'اختر <span class="field">الحساب الأب</span> إذا كان حساباً فرعياً. المستوى يُحدد تلقائياً.'],
                ['title' => 'الحفظ', 'body' => 'أدخل الاسم بالعربي والإنجليزي ثم <span class="field">حفظ</span>.<span class="warn">لا يمكن تغيير الكود بعد الحفظ — تأكد من صحته.</span>'],
            ],
            'accounting.create-journal-entry' => [
                ['title' => 'فتح صفحة القيود', 'body' => 'من القائمة: <span class="field">المحاسبة</span> > <span class="field">قيود اليومية</span> > <span class="field">قيد جديد</span>.'],
                ['title' => 'بيانات القيد', 'body' => 'أدخل <span class="field">التاريخ</span> و<span class="field">الوصف</span>. اختر <span class="field">مركز التكلفة</span> إن وُجد.'],
                ['title' => 'إضافة البنود', 'body' => 'أضف بنود مدينة ودائنة. لكل بند اختر <span class="field">الحساب</span> وأدخل <span class="field">المبلغ</span>.<span class="warn">يجب أن يتساوى إجمالي المدين مع إجمالي الدائن — النظام لن يسمح بالحفظ إذا لم يتوازن القيد.</span>'],
                ['title' => 'المراجعة والترحيل', 'body' => 'راجع القيد ثم <span class="field">حفظ</span>. القيد يُرحل تلقائياً للأرصدة.<span class="success">يمكنك طباعة القيد أو تصديره PDF من صفحة التفاصيل.</span>'],
            ],
            'accounting.bank-reconciliation' => [
                ['title' => 'اختيار الحساب البنكي', 'body' => 'من <span class="field">المحاسبة</span> > <span class="field">التسويات البنكية</span>. اختر الحساب البنكي والفترة.'],
                ['title' => 'إدخال كشف البنك', 'body' => 'أدخل رصيد كشف البنك الرسمي. النظام يعرض الحركات غير المطابقة.'],
                ['title' => 'مطابقة الحركات', 'body' => 'حدد الحركات المطابقة بين النظام وكشف البنك.<span class="info">الحركات غير المطابقة تظهر في تقرير الفروقات.</span>'],
                ['title' => 'إتمام التسوية', 'body' => 'اضغط <span class="field">إتمام التسوية</span> بعد مطابقة جميع الحركات.'],
            ],
            'accounting.trial-balance-report' => [
                ['title' => 'فتح ميزان المراجعة', 'body' => 'من <span class="field">المحاسبة</span> > <span class="field">التقارير</span> > <span class="field">ميزان المراجعة</span>.'],
                ['title' => 'اختيار الفترة', 'body' => 'حدد <span class="field">السنة المالية</span> والفترة. يمكن عرض ميزان شهري أو تراكمي.'],
                ['title' => 'قراءة الميزان', 'body' => 'يعرض النظام: رصيد أول المدة، حركة مدينة، حركة دائنة، رصيد آخر المدة لكل حساب.<span class="warn">إذا لم يتساوى إجمالي المدين مع الدائن — هناك خلل يجب مراجعته.</span>'],
                ['title' => 'التصدير', 'body' => 'اضغط <span class="field">تصدير Excel</span> أو <span class="field">طباعة</span> للحصول على نسخة.'],
            ],
            'accounting.budget-management' => [
                ['title' => 'إنشاء ميزانية', 'body' => 'من <span class="field">المحاسبة</span> > <span class="field">الميزانيات</span> > <span class="field">ميزانية جديدة</span>. حدد السنة المالية والقسم.'],
                ['title' => 'توزيع المبالغ', 'body' => 'وزّع الميزانية على بنود المصروفات. يمكن التوزيع شهرياً أو ربع سنوي.'],
                ['title' => 'متابعة الصرف', 'body' => 'النظام يقارن المصروفات الفعلية مع المخطط.<span class="warn">عند تجاوز 80% من ميزانية بند يظهر تنبيه تلقائي.</span>'],
                ['title' => 'التقارير', 'body' => 'اضغط <span class="field">تقرير الانحرافات</span> لمعرفة البنود المتجاوزة والبنود المتبقية.'],
            ],
            'accounting.fiscal-year-setup' => [
                ['title' => 'فتح السنوات المالية', 'body' => 'من <span class="field">المحاسبة</span> > <span class="field">السنوات المالية</span> > <span class="field">سنة جديدة</span>.'],
                ['title' => 'بيانات السنة', 'body' => 'أدخل <span class="field">الاسم</span>، <span class="field">تاريخ البدء</span>، <span class="field">تاريخ الانتهاء</span>. النظام يقسّمها لفترات (شهرية/ربع سنوية) تلقائياً.'],
                ['title' => 'التفعيل', 'body' => 'اضغط <span class="field">تفعيل</span>. لا يمكن وجود أكثر من سنة مالية مفتوحة في نفس الوقت.<span class="warn">تفعيل سنة جديدة يتطلب إقفال السنة السابقة أولاً.</span>'],
            ],
            'accounting.cost-centers' => [
                ['title' => 'فتح مراكز التكلفة', 'body' => 'من <span class="field">المحاسبة</span> > <span class="field">مراكز التكلفة</span> > <span class="field">مركز جديد</span>.'],
                ['title' => 'البيانات', 'body' => 'أدخل <span class="field">الكود</span>، <span class="field">الاسم</span>، <span class="field">القسم المسؤول</span>. يمكنك إنشاء مراكز فرعية تابعة لمركز رئيسي.'],
                ['title' => 'الربط بالقيود', 'body' => 'عند إنشاء قيد يمكن ربطه بمركز تكلفة. التقارير تعرض المصروفات موزعة حسب المراكز.<span class="info">مراكز التكلفة مفيدة لمعرفة تكلفة كل قسم أو نشاط.</span>'],
            ],
            'accounting.opening-entries' => [
                ['title' => 'فتح القيود الافتتاحية', 'body' => 'من <span class="field">المحاسبة</span> > <span class="field">القيود الافتتاحية</span> > <span class="field">إدخال جديد</span>.'],
                ['title' => 'إدخال الأرصدة', 'body' => 'لكل حساب أدخل الرصيد الافتتاحي (مدين أو دائن). النظام يتحقق من التوازن.'],
                ['title' => 'المراجعة والتأكيد', 'body' => 'راجع الأرصدة ثم <span class="field">تأكيد</span>. يُنشأ قيد افتتاحي واحد بجميع الأرصدة.<span class="warn">هذه العملية تُنفذ مرة واحدة عند بدء تشغيل النظام — لا يمكن تعديلها بعد التأكيد.</span>'],
            ],
            'accounting.period-closing' => [
                ['title' => 'فتح إقفال الفترة', 'body' => 'من <span class="field">المحاسبة</span> > <span class="field">إقفال الفترة</span>.'],
                ['title' => 'اختيار الفترة', 'body' => 'حدد الفترة المراد إقفالها. النظام يعرض: عدد القيود، إجمالي الحركة، أي قيود معلقة.'],
                ['title' => 'التنفيذ', 'body' => 'اضغط <span class="field">إقفال</span>. يتم منع أي تعديل أو إضافة قيود على هذه الفترة.<span class="warn">الإقفال نهائي — لا يمكن التراجع. تأكد من اكتمال جميع القيود قبل الإقفال.</span>'],
            ],
            'accounting.financial-instruments' => [
                ['title' => 'فتح الأوراق المالية', 'body' => 'من <span class="field">المحاسبة</span> > <span class="field">أوراق مالية</span>.'],
                ['title' => 'إضافة ورقة', 'body' => 'اضغط <span class="field">إضافة</span>. حدد النوع (شيك/كمبيالة/سند)، المبلغ، تاريخ الاستحقاق، الجهة.'],
                ['title' => 'المتابعة', 'body' => 'النظام يعرض الأوراق حسب تاريخ الاستحقاق. التنبيهات تظهر قبل 7 أيام من الاستحقاق.'],
                ['title' => 'التحصيل/السداد', 'body' => 'عند التحصيل غيّر الحالة. يتم ترحيل القيد المحاسبي تلقائياً.<span class="info">الأوراق المستحقة تظهر في لوحة التحكم المالية.</span>'],
            ],
            // ── HR ──
            'hr.add-employee' => [
                ['title' => 'إنشاء حساب موظف', 'body' => 'أولاً من <span class="field">إدارة المستخدمين</span> أنشئ حساب دخول للموظف (اسم المستخدم وكلمة المرور).'],
                ['title' => 'فتح ملف HR', 'body' => 'من <span class="field">الموارد البشرية</span> > <span class="field">الموظفين</span> > <span class="field">إضافة موظف</span>. اربطه بحساب النظام.'],
                ['title' => 'البيانات الشخصية', 'body' => 'أدخل <span class="field">الرقم القومي</span> — سيتم استخراج تاريخ الميلاد والنوع تلقائياً.<span class="info">لا حاجة لإدخال تاريخ الميلاد أو الجنس يدوياً — يُستخرج من الرقم القومي.</span>'],
                ['title' => 'البيانات الوظيفية', 'body' => 'حدد <span class="field">القسم</span>، <span class="field">المسمى الوظيفي</span>، <span class="field">تاريخ التعيين</span>، و<span class="field">الراتب الأساسي</span>.'],
                ['title' => 'الحفظ', 'body' => 'اضغط <span class="field">حفظ</span>. يتم توليد <span class="field">رقم الموظف</span> تلقائياً.<span class="success">يمكنك الآن إنشاء عقد للموظف من صفحة ملفه.</span>'],
            ],
            'hr.attendance-management' => [
                ['title' => 'فتح سجل الحضور', 'body' => 'من <span class="field">الموارد البشرية</span> > <span class="field">الحضور والانصراف</span>.'],
                ['title' => 'تسجيل الحضور', 'body' => 'يمكن التسجيل يدوياً أو عبر جهاز البصمة. حدد الموظف وأدخل <span class="field">وقت الحضور</span> و<span class="field">وقت الانصراف</span>.'],
                ['title' => 'مراجعة التأخيرات', 'body' => 'استعرض التقرير الشهري: أيام الحضور، التأخير، الغياب، الإضافي.<span class="warn">التأخير والغياب يؤثر على الراتب حسب سياسة الخصومات المعتمدة.</span>'],
                ['title' => 'التصدير', 'body' => 'اضغط <span class="field">تصدير</span> لإرسال الكشف لمسير الرواتب.'],
            ],
            'hr.leave-request' => [
                ['title' => 'طلب إجازة', 'body' => 'من ملف الموظف أو <span class="field">الإجازات</span> > <span class="field">طلب جديد</span>.'],
                ['title' => 'تحديد النوع والمدة', 'body' => 'اختر <span class="field">نوع الإجازة</span> (سنوية، مرضية، عارضة، بدون راتب). حدد التواريخ.<span class="info">الرصيد المتاح يظهر تلقائياً. لا يمكن طلب أكثر من الرصيد.</span>'],
                ['title' => 'الاعتماد', 'body' => 'الطلب يذهب للمدير المباشر للاعتماد. بعد الموافقة يُخصم من الرصيد.'],
            ],
            'hr.run-payroll' => [
                ['title' => 'فتح دورة الرواتب', 'body' => 'من <span class="field">الموارد البشرية</span> > <span class="field">الرواتب</span> > <span class="field">دورة جديدة</span>.'],
                ['title' => 'اختيار الشهر', 'body' => 'حدد <span class="field">الشهر</span> و<span class="field">السنة</span>. النظام يحسب تلقائياً: الراتب الأساسي + البدلات − الخصومات − السلف − التأمينات − الضرائب.'],
                ['title' => 'مراجعة المفردات', 'body' => 'راجع مفردات كل موظف. تأكد من: الحضور محسوب، السلف مخصومة، الإضافي مضاف.'],
                ['title' => 'اعتماد وصرف', 'body' => 'اضغط <span class="field">اعتماد الدورة</span> ثم <span class="field">صرف</span>.<span class="success">يتم ترحيل القيد المحاسبي تلقائياً (مصروف رواتب ← بنك/نقدية).</span>'],
            ],
            'hr.end-of-service' => [
                ['title' => 'فتح نهاية الخدمة', 'body' => 'من ملف الموظف > <span class="field">إنهاء خدمة</span>، أو من <span class="field">الموارد البشرية</span> > <span class="field">نهاية الخدمة</span>.'],
                ['title' => 'تحديد السبب والتاريخ', 'body' => 'اختر <span class="field">سبب الإنهاء</span> (استقالة، فصل، انتهاء عقد، تقاعد). حدد <span class="field">آخر يوم عمل</span>.'],
                ['title' => 'حساب المستحقات', 'body' => 'النظام يحسب تلقائياً: رصيد إجازات، مكافأة نهاية خدمة، أي مستحقات أخرى.<span class="info">المكافأة تُحسب وفقاً لقانون العمل المصري (نصف شهر عن كل سنة لأول 5 سنوات، شهر كامل بعدها).</span>'],
                ['title' => 'التأكيد', 'body' => 'اضغط <span class="field">تأكيد الإنهاء</span>. يتم إيقاف الحساب وإنشاء طلب دفع بالمستحقات.<span class="warn">لا يمكن التراجع عن إنهاء الخدمة بعد التأكيد.</span>'],
            ],
            'hr.create-contract' => [
                ['title' => 'فتح صفحة العقود', 'body' => 'من <span class="field">الموارد البشرية</span> > <span class="field">العقود</span> > <span class="field">عقد جديد</span>.'],
                ['title' => 'بيانات العقد', 'body' => 'حدد <span class="field">الموظف</span>، <span class="field">نوع العقد</span> (محدد المدة/غير محدد)، <span class="field">تاريخ البدء</span>، <span class="field">تاريخ الانتهاء</span>.'],
                ['title' => 'الراتب والبدلات', 'body' => 'أدخل <span class="field">الراتب الأساسي</span>، <span class="field">بدل السكن</span>، <span class="field">بدل المواصلات</span>، <span class="field">بدلات أخرى</span>.'],
                ['title' => 'الحفظ', 'body' => 'اضغط <span class="field">حفظ</span>. العقد يظهر في ملف الموظف ويُستخدم في حساب الرواتب.<span class="warn">انتهاء العقد بدون تجديد يُنشئ تنبيه قبل 30 يوم.</span>'],
            ],
            'hr.insurance-management' => [
                ['title' => 'فتح التأمينات', 'body' => 'من <span class="field">الموارد البشرية</span> > <span class="field">التأمينات الاجتماعية</span>.'],
                ['title' => 'بيانات الاشتراك', 'body' => 'لكل موظف: <span class="field">الرقم التأميني</span>، <span class="field">أساس الاشتراك</span>، <span class="field">تاريخ التسجيل</span>. النظام يحسب حصة الشركة وحصة الموظف.'],
                ['title' => 'إصدار الاستمارات', 'body' => 'اضغط <span class="field">استمارة 1</span> (تسجيل) أو <span class="field">استمارة 6</span> (إنهاء). الاستمارة تُطبع بالتنسيق الرسمي.'],
                ['title' => 'التقارير الشهرية', 'body' => 'النظام يُنشئ كشف التأمينات الشهري تلقائياً مع الرواتب.<span class="info">الخصم يظهر في مفردات الراتب تحت بند «تأمينات اجتماعية».</span>'],
            ],
            'hr.disciplinary-action' => [
                ['title' => 'إنشاء إجراء تأديبي', 'body' => 'من <span class="field">الموارد البشرية</span> > <span class="field">الإجراءات التأديبية</span> > <span class="field">إجراء جديد</span>.'],
                ['title' => 'تفاصيل المخالفة', 'body' => 'حدد <span class="field">الموظف</span>، <span class="field">نوع المخالفة</span>، <span class="field">تاريخ الواقعة</span>، <span class="field">الوصف</span>.'],
                ['title' => 'الجزاء', 'body' => 'اختر <span class="field">الجزاء</span>: إنذار شفهي، إنذار كتابي، خصم من الراتب، إيقاف مؤقت.'],
                ['title' => 'الحفظ', 'body' => 'اضغط <span class="field">حفظ</span>. يتم إخطار الموظف وتسجيل الجزاء في ملفه.<span class="warn">الجزاءات المتكررة تُصعّد تلقائياً حسب لائحة العمل.</span>'],
            ],
            'hr.employee-loan' => [
                ['title' => 'إنشاء سلفة', 'body' => 'من <span class="field">الموارد البشرية</span> > <span class="field">السلف</span> > <span class="field">سلفة جديدة</span>.'],
                ['title' => 'البيانات', 'body' => 'حدد <span class="field">الموظف</span>، <span class="field">المبلغ</span>، <span class="field">عدد الأقساط</span> للخصم من الراتب.'],
                ['title' => 'الاعتماد', 'body' => 'السلفة تحتاج اعتماد المدير المالي. بعد الاعتماد يتم جدولة الخصم تلقائياً.'],
                ['title' => 'المتابعة', 'body' => 'النظام يخصم القسط شهرياً من الراتب حتى السداد الكامل.<span class="info">يظهر القسط في مفردات الراتب تحت «خصم سلفة».</span>'],
            ],
            'hr.overtime-management' => [
                ['title' => 'تسجيل ساعات إضافية', 'body' => 'من <span class="field">الموارد البشرية</span> > <span class="field">الإضافي</span> > <span class="field">تسجيل جديد</span>.'],
                ['title' => 'البيانات', 'body' => 'حدد <span class="field">الموظف</span>، <span class="field">التاريخ</span>، <span class="field">عدد الساعات</span>، <span class="field">نوع الإضافي</span> (عادي/عطلة/ليلي).'],
                ['title' => 'الاعتماد', 'body' => 'يحتاج موافقة المدير المباشر. بعد الاعتماد يُضاف للراتب.'],
                ['title' => 'الحساب', 'body' => 'النظام يحسب تلقائياً: عادي (×1.35)، عطلة (×2)، ليلي (×1.5).<span class="success">يظهر في مسير الرواتب تحت بند «ساعات إضافية».</span>'],
            ],
            // ── PROCUREMENT ──
            'procurement.create-purchase-requisition' => [
                ['title' => 'طلب شراء جديد', 'body' => 'من <span class="field">المشتريات</span> > <span class="field">طلبات الشراء</span> > <span class="field">طلب جديد</span>.'],
                ['title' => 'تحديد الاحتياج', 'body' => 'أدخل <span class="field">الأصناف</span> المطلوبة مع <span class="field">الكميات</span> و<span class="field">سبب الطلب</span>.'],
                ['title' => 'الإرسال للاعتماد', 'body' => 'اضغط <span class="field">إرسال</span>. الطلب يذهب للمدير للاعتماد.'],
                ['title' => 'متابعة الحالة', 'body' => 'تابع حالة الطلب: معلق، معتمد، مرفوض، منفذ.<span class="info">بعد الاعتماد يمكن تحويله لأمر شراء مباشرة.</span>'],
            ],
            'procurement.receive-goods' => [
                ['title' => 'فتح أمر الشراء', 'body' => 'من <span class="field">المشتريات</span> > <span class="field">أوامر الشراء</span>. اختر الأمر المطلوب استلامه.'],
                ['title' => 'إنشاء إذن استلام', 'body' => 'اضغط <span class="field">إذن استلام جديد</span>. أدخل الكميات المستلمة فعلياً لكل صنف.'],
                ['title' => 'فحص الجودة', 'body' => 'سجّل ملاحظات الفحص. حدد الأصناف المقبولة والمرفوضة.<span class="warn">الأصناف المرفوضة لا تُضاف للمخزون ويمكن إرجاعها للمورد.</span>'],
                ['title' => 'تأكيد الاستلام', 'body' => 'اضغط <span class="field">تأكيد</span>. يتم تحديث المخزون تلقائياً بالكميات المقبولة.<span class="success">يمكن مطابقة الاستلام مع فاتورة المورد لاحقاً.</span>'],
            ],
            'procurement.vendor-invoice' => [
                ['title' => 'فتح صفحة الفواتير', 'body' => 'من <span class="field">المشتريات</span> > <span class="field">فواتير الموردين</span> > <span class="field">فاتورة جديدة</span>.'],
                ['title' => 'ربط بإذن الاستلام', 'body' => 'اختر <span class="field">إذن الاستلام</span> المرتبط. النظام يملأ الأصناف والكميات تلقائياً.'],
                ['title' => 'إدخال بيانات الفاتورة', 'body' => 'أدخل <span class="field">رقم الفاتورة</span>، <span class="field">تاريخ الفاتورة</span>، والأسعار النهائية.'],
                ['title' => 'الحفظ والترحيل', 'body' => 'اضغط <span class="field">حفظ</span>. يتم ترحيل القيد المحاسبي (مشتريات ← ذمم موردين).<span class="info">يمكن ربط أكثر من إذن استلام بفاتورة واحدة.</span>'],
            ],
            'procurement.vendor-payment' => [
                ['title' => 'فتح أمر الصرف', 'body' => 'من <span class="field">المشتريات</span> > <span class="field">مدفوعات الموردين</span> > <span class="field">أمر صرف جديد</span>.'],
                ['title' => 'اختيار المورد والفواتير', 'body' => 'حدد <span class="field">المورد</span>. النظام يعرض الفواتير المستحقة. اختر الفواتير المطلوب سدادها.'],
                ['title' => 'طريقة الدفع', 'body' => 'حدد <span class="field">شيك</span> أو <span class="field">تحويل بنكي</span>. أدخل البيانات المطلوبة.'],
                ['title' => 'التأكيد', 'body' => 'اضغط <span class="field">تأكيد الصرف</span>. يتم ترحيل قيد (ذمم موردين ← بنك).<span class="success">يُحدّث رصيد المورد تلقائياً.</span>'],
            ],
            'procurement.return-to-vendor' => [
                ['title' => 'إنشاء مرتجع', 'body' => 'من <span class="field">المشتريات</span> > <span class="field">المرتجعات</span> > <span class="field">مرتجع جديد</span>.'],
                ['title' => 'اختيار الأصناف', 'body' => 'حدد <span class="field">المورد</span> و<span class="field">إذن الاستلام</span> الأصلي. اختر الأصناف المُرجعة مع الكميات.'],
                ['title' => 'سبب الإرجاع', 'body' => 'أدخل <span class="field">سبب الإرجاع</span> (عيب تصنيع، عدم مطابقة، انتهاء صلاحية).'],
                ['title' => 'التأكيد', 'body' => 'اضغط <span class="field">تأكيد</span>. يُخصم من المخزون ويُنشأ إشعار دائن على المورد.<span class="warn">المرتجع يخفض رصيد المورد المستحق.</span>'],
            ],
            'procurement.request-for-quotation' => [
                ['title' => 'إنشاء طلب عروض', 'body' => 'من <span class="field">المشتريات</span> > <span class="field">عروض الأسعار</span> > <span class="field">طلب عرض جديد</span>.'],
                ['title' => 'تحديد الأصناف', 'body' => 'أضف <span class="field">الأصناف</span> المطلوب تسعيرها مع <span class="field">الكميات</span> والمواصفات.'],
                ['title' => 'اختيار الموردين', 'body' => 'حدد الموردين المطلوب إرسال الطلب إليهم (3 موردين كحد أدنى).'],
                ['title' => 'المقارنة والاختيار', 'body' => 'بعد ورود الردود: اضغط <span class="field">مقارنة العروض</span>. يعرض الأسعار جنباً إلى جنب. اختر الأفضل ثم <span class="field">تحويل لأمر شراء</span>.<span class="success">المقارنة تُحفظ كمرجع للمراجعة.</span>'],
            ],
            // ── INVENTORY ──
            'inventory.setup-warehouse' => [
                ['title' => 'إنشاء مخزن', 'body' => 'من <span class="field">المخازن</span> > <span class="field">المخازن</span> > <span class="field">مخزن جديد</span>.'],
                ['title' => 'البيانات الأساسية', 'body' => 'أدخل <span class="field">اسم المخزن</span>، <span class="field">الكود</span>، <span class="field">الموقع</span>، و<span class="field">أمين المخزن</span>.'],
                ['title' => 'الحفظ', 'body' => 'اضغط <span class="field">حفظ</span>. يمكنك الآن إضافة أصناف لهذا المخزن.<span class="info">يمكن ربط المخزن بفرع محدد إذا كان النادي متعدد الفروع.</span>'],
            ],
            'inventory.add-item' => [
                ['title' => 'إضافة صنف', 'body' => 'من <span class="field">المخازن</span> > <span class="field">الأصناف</span> > <span class="field">صنف جديد</span>.'],
                ['title' => 'البيانات', 'body' => 'أدخل <span class="field">SKU</span> (كود الصنف)، <span class="field">الاسم</span>، <span class="field">التصنيف</span>، <span class="field">الوحدة</span>، <span class="field">سعر البيع</span>.'],
                ['title' => 'الحدود', 'body' => 'حدد <span class="field">الحد الأدنى</span> و<span class="field">الحد الأقصى</span> للتنبيه عند نفاد أو تكدس المخزون.'],
                ['title' => 'الحفظ', 'body' => 'اضغط <span class="field">حفظ</span>.<span class="success">الصنف جاهز الآن للاستخدام في حركات الصرف والتوريد.</span>'],
            ],
            'inventory.stock-movement' => [
                ['title' => 'إنشاء حركة', 'body' => 'من <span class="field">المخازن</span> > <span class="field">حركات المخزون</span> > <span class="field">حركة جديدة</span>.'],
                ['title' => 'نوع الحركة', 'body' => 'اختر: <span class="field">توريد</span> (إضافة)، <span class="field">صرف</span> (خصم)، أو <span class="field">تحويل</span> (بين مخازن).'],
                ['title' => 'الأصناف والكميات', 'body' => 'أضف الأصناف مع الكميات. لحركات الصرف: حدد <span class="field">الجهة الطالبة</span>.'],
                ['title' => 'التأكيد', 'body' => 'اضغط <span class="field">تأكيد</span>. يتم تحديث الأرصدة فوراً.<span class="warn">حركات المخزون لا يمكن حذفها — يمكن عكسها بحركة مقابلة فقط.</span>'],
            ],
            'inventory.stock-audit' => [
                ['title' => 'بدء الجرد', 'body' => 'من <span class="field">المخازن</span> > <span class="field">الجرد</span> > <span class="field">جرد جديد</span>. اختر المخزن.'],
                ['title' => 'إدخال الأرصدة الفعلية', 'body' => 'أدخل الكمية الفعلية لكل صنف. النظام يحسب الفرق مع الرصيد الدفتري.'],
                ['title' => 'مراجعة الفروقات', 'body' => 'راجع التقرير: عجز (أقل من الدفتري) أو زيادة (أكثر). أدخل <span class="field">سبب الفرق</span> لكل صنف.'],
                ['title' => 'اعتماد الجرد', 'body' => 'اضغط <span class="field">اعتماد</span>. يتم تعديل الأرصدة وترحيل القيد المحاسبي (عجز = مصروف، زيادة = إيراد).'],
            ],
            'inventory.opening-balance' => [
                ['title' => 'فتح أرصدة افتتاحية', 'body' => 'من <span class="field">المخازن</span> > <span class="field">الأرصدة الافتتاحية</span> > <span class="field">إدخال جديد</span>.'],
                ['title' => 'اختيار المخزن', 'body' => 'حدد <span class="field">المخزن</span> المطلوب إدخال أرصدته.'],
                ['title' => 'إدخال الكميات', 'body' => 'لكل صنف أدخل <span class="field">الكمية</span> و<span class="field">تكلفة الوحدة</span>.<span class="info">هذه الخطوة تُنفذ مرة واحدة عند بدء تشغيل النظام.</span>'],
                ['title' => 'التأكيد', 'body' => 'اضغط <span class="field">تأكيد</span>. يتم تحديث الأرصدة وترحيل القيد المحاسبي.<span class="warn">لا يمكن تعديل الأرصدة الافتتاحية بعد التأكيد.</span>'],
            ],
            'inventory.stock-transfer' => [
                ['title' => 'إنشاء إذن تحويل', 'body' => 'من <span class="field">المخازن</span> > <span class="field">التحويلات</span> > <span class="field">تحويل جديد</span>.'],
                ['title' => 'البيانات', 'body' => 'حدد <span class="field">المخزن المصدر</span>، <span class="field">المخزن المستقبل</span>. أضف الأصناف والكميات المطلوب تحويلها.'],
                ['title' => 'التأكيد', 'body' => 'اضغط <span class="field">تأكيد</span>. يتم خصم الكمية من المصدر وإضافتها للمستقبل فوراً.<span class="info">إذن التحويل يحمل رقم مرجعي فريد يظهر في حركات المخزون.</span>'],
            ],
            'inventory.purchase-order' => [
                ['title' => 'إنشاء أمر شراء', 'body' => 'من <span class="field">المخازن</span> > <span class="field">أوامر الشراء</span> > <span class="field">أمر جديد</span>.'],
                ['title' => 'البيانات', 'body' => 'حدد <span class="field">المورد</span>، <span class="field">تاريخ التوريد المتوقع</span>. أضف الأصناف مع الكميات والأسعار.'],
                ['title' => 'الاعتماد', 'body' => 'أمر الشراء يحتاج اعتماد حسب القيمة. بعد الاعتماد يُرسل للمورد.'],
                ['title' => 'الاستلام', 'body' => 'عند وصول البضاعة: اضغط <span class="field">استلام</span> وأدخل الكميات الفعلية.<span class="warn">يمكن الاستلام الجزئي — الكميات المتبقية تبقى مفتوحة.</span>'],
            ],
            'inventory.manage-suppliers' => [
                ['title' => 'إضافة مورد', 'body' => 'من <span class="field">المخازن</span> > <span class="field">الموردين</span> > <span class="field">مورد جديد</span>.'],
                ['title' => 'البيانات', 'body' => 'أدخل <span class="field">اسم الشركة</span>، <span class="field">السجل التجاري</span>، <span class="field">الهاتف</span>، <span class="field">العنوان</span>، <span class="field">مسؤول الاتصال</span>.'],
                ['title' => 'الحفظ', 'body' => 'اضغط <span class="field">حفظ</span>. المورد متاح الآن في أوامر الشراء والمشتريات.<span class="info">صفحة المورد تعرض تاريخ جميع التعاملات وأداء التوريد.</span>'],
            ],
            'inventory.asset-management' => [
                ['title' => 'تسجيل أصل ثابت', 'body' => 'من <span class="field">المخازن</span> > <span class="field">الأصول الثابتة</span> > <span class="field">أصل جديد</span>.'],
                ['title' => 'البيانات', 'body' => 'أدخل <span class="field">اسم الأصل</span>، <span class="field">الكود</span>، <span class="field">الفئة</span>، <span class="field">القيمة</span>، <span class="field">تاريخ الشراء</span>، <span class="field">العمر الافتراضي</span>.'],
                ['title' => 'العهدة', 'body' => 'حدد <span class="field">الموظف المسؤول</span> (العهدة). يمكن نقل العهدة لاحقاً مع محضر تسليم.'],
                ['title' => 'الإهلاك', 'body' => 'النظام يحسب الإهلاك السنوي تلقائياً (قسط ثابت). القيد يُرحل مع إقفال الفترة.<span class="info">يمكنك عرض تقرير الإهلاك والقيمة الدفترية من التقارير.</span>'],
            ],
            // ── CASHIER ──
            'cashier.process-payment-queue' => [
                ['title' => 'فتح طابور الدفع', 'body' => 'من <span class="field">خزنة العضويات</span> > <span class="field">طابور الدفع</span>. تأكد من وجود وردية مفتوحة (الشريط الأخضر أعلى الصفحة).'],
                ['title' => 'اختيار الطلب', 'body' => 'اضغط <span class="field">تحصيل</span> بجانب طلب الدفع. يعرض النظام: اسم العضو، المبلغ، نوع الدفعة، تفصيل الرسوم.'],
                ['title' => 'اختيار طريقة الدفع', 'body' => 'حدد <span class="field">نقدي</span>، <span class="field">شيك</span>، <span class="field">فيزا</span>، أو <span class="field">تحويل</span>. لكل طريقة بيانات إضافية مطلوبة.<span class="warn">فقط الدفع النقدي يزيد العهدة. الفيزا والتحويل تُسجل في الوردية لكن لا تدخل في التسوية النقدية.</span>'],
                ['title' => 'التأكيد وطباعة الإيصال', 'body' => 'اضغط <span class="field">تحصيل</span>. يتم:<ul><li>إنشاء سجل الدفع مربوط بالوردية</li><li>توليد رقم إيصال تلقائي</li><li>زيادة العهدة (إذا كاش)</li><li>ترحيل القيد المحاسبي</li><li>طباعة الإيصال تلقائياً</li></ul><span class="success">الإيصال يُطبع فوراً. يمكنك إعادة الطباعة من صفحة الإيصالات.</span>'],
            ],
            'cashier.void-payment' => [
                ['title' => 'البحث عن الدفعة', 'body' => 'من <span class="field">المدفوعات</span> أو من ملف العضو، اعثر على الدفعة المطلوب إلغاؤها.'],
                ['title' => 'طلب الإلغاء', 'body' => 'اضغط <span class="field">إلغاء الدفعة</span>. أدخل <span class="field">سبب الإلغاء</span>.<span class="warn">الإلغاء متاح خلال 24 ساعة فقط — بعدها يتطلب صلاحية مدير النظام.</span>'],
                ['title' => 'التأكيد', 'body' => 'يتم إلغاء الدفعة والإيصال المرتبط، وترحيل قيد عكسي تلقائياً.'],
            ],
            'cashier.check-management' => [
                ['title' => 'استلام شيك', 'body' => 'عند اختيار <span class="field">شيك</span> كطريقة دفع، أدخل: <span class="field">رقم الشيك</span>، <span class="field">البنك</span>، <span class="field">تاريخ الاستحقاق</span>.'],
                ['title' => 'متابعة الشيكات', 'body' => 'من <span class="field">الخزينة</span> > <span class="field">الشيكات</span>. يعرض النظام حالة كل شيك: معلق، محصل، مرتجع.'],
                ['title' => 'تحصيل أو ارتجاع', 'body' => 'عند التحصيل: غيّر الحالة لـ<span class="field">محصل</span>. عند الارتجاع: <span class="field">مرتجع</span> مع السبب.<span class="warn">الشيك المرتجع يُنشئ مطالبة تلقائية على العضو.</span>'],
            ],
            'cashier.daily-report' => [
                ['title' => 'فتح التقرير اليومي', 'body' => 'من <span class="field">الخزينة</span> > <span class="field">التقرير اليومي</span>. يتم عرض تقرير اليوم الحالي.'],
                ['title' => 'محتويات التقرير', 'body' => 'يعرض: إجمالي المحصل (نقدي/شيكات/فيزا)، عدد الإيصالات، الدفعات الملغاة.'],
                ['title' => 'الطباعة والأرشفة', 'body' => 'اضغط <span class="field">طباعة</span> أو <span class="field">تصدير PDF</span> للحفظ.'],
            ],
            'cashier.session-open' => [
                ['title' => 'فتح صفحة خزنة العضويات', 'body' => 'من القائمة الجانبية: <span class="field">خزنة العضويات</span> > <span class="field">طابور الدفع</span>.'],
                ['title' => 'التأكد من عدم وجود وردية مفتوحة', 'body' => 'إذا كانت هناك وردية مفتوحة بالفعل — يظهر شريط أخضر بمعلومات الوردية. لا تحتاج لفتح وردية جديدة.<span class="info">لا يمكن فتح أكثر من وردية واحدة في نفس الوقت لنفس الموظف على نفس الخزنة.</span>'],
                ['title' => 'فتح الوردية', 'body' => 'إذا لم تكن هناك وردية مفتوحة — يظهر شريط أصفر مع زر <span class="field">فتح وردية</span>. اضغط الزر لبدء الوردية.<span class="success">بعد فتح الوردية يمكنك البدء في تحصيل المدفوعات من الطابور. يتم تسجيل وقت الفتح ورقم وردية فريد.</span>'],
            ],
            'cashier.session-close' => [
                ['title' => 'مراجعة الإجمالي', 'body' => 'من شريط الوردية أعلى الصفحة: تأكد من صحة إجمالي التحصيلات وعدد الإيصالات المعروضة.'],
                ['title' => 'إغلاق الوردية', 'body' => 'اضغط <span class="field">إغلاق الوردية</span>. سيطلب النظام تأكيد الإغلاق.<span class="warn">بعد الإغلاق لا يمكن تحصيل أي دفعة جديدة حتى فتح وردية أخرى.</span>'],
                ['title' => 'بعد الإغلاق', 'body' => 'يتم حفظ إجمالي التحصيلات ووقت الإغلاق. يمكنك الآن إنشاء تسوية لترحيل المبلغ للخزنة الرئيسية.<span class="info">الورديات المغلقة تظهر في تقرير الورديات مع تفاصيل كل وردية.</span>'],
            ],
            'cashier.settlement-flow' => [
                ['title' => 'متى تُنشئ تسوية؟', 'body' => 'بعد إغلاق الوردية — المبالغ <strong>النقدية</strong> المحصلة تبقى في عهدة أمين الخزنة الفرعية. التسوية هي عملية تسليم هذا الكاش رسمياً لأمين الخزنة الرئيسية وإخلاء عهدة الموظف.'],
                ['title' => 'بدء التسوية', 'body' => 'من <span class="field">خزنة العضويات</span> > <span class="field">استلام تسويات</span> > <span class="field">تسوية جديدة</span>. مبلغ التسوية = رصيد العهدة النقدية الحالي.<span class="info">التسوية تشمل فقط المبالغ النقدية. الفيزا والتحويلات لا تدخل في التسوية لأنها لم تمر بيد الموظف أصلاً.</span>'],
                ['title' => 'استلام المبلغ', 'body' => 'أمين الخزنة الرئيسية يستلم الكاش فعلياً ويؤكد الاستلام بالضغط على <span class="field">تأكيد الاستلام</span>.<span class="success">عند التأكيد: عهدة الخزنة الفرعية = 0، وعهدة الخزنة الرئيسية تزيد بنفس المبلغ. القيد المحاسبي يُرحّل تلقائياً.</span>'],
                ['title' => 'ماذا بعد؟', 'body' => 'أمين الخزنة الرئيسية الآن في عهدته المبلغ. في اليوم التالي قبل الساعة 11 صباحاً يجب أن يودع في البنك ويرفع صورة الإيصال.<span class="warn">التسوية المرفوضة تعني: المبلغ يبقى في عهدة الخزنة الفرعية ويحتاج مراجعة وإعادة إرسال.</span>'],
            ],
            'cashier.custody-tracking' => [
                ['title' => 'ما هي العهدة؟', 'body' => 'العهدة هي المبلغ <strong>النقدي (الكاش)</strong> الموجود فعلياً في يد أمين الخزنة. الدفع بالفيزا أو التحويل لا يدخل العهدة لأن الفلوس لا تمر بيد الموظف.<span class="info">موظف الخزنة يبدأ يومه بعهدة = صفر، وينتهي يومه بعهدة = صفر بعد التسوية.</span>'],
                ['title' => 'متى تزيد ومتى تنقص؟', 'body' => '<strong>تزيد عند:</strong> تحصيل مبلغ نقدي (كاش) من عضو/لاعب، أو استلام تسوية نقدية (لأمين الخزنة الرئيسية).<br><strong>تنقص عند:</strong> إنشاء تسوية (للخزنة الفرعية)، أو تأكيد إيداع بنكي (للخزنة الرئيسية)، أو إلغاء دفعة نقدية.'],
                ['title' => 'عرض رصيد العهدة', 'body' => 'من شريط الوردية: يظهر <span class="field">العهدة</span> بالمبلغ الحالي. أو من صفحة الخزنة الرئيسية > <span class="field">رصيد العهدة</span>.'],
                ['title' => 'سجل الحركات', 'body' => 'كل عملية تحصيل نقدي أو تسوية أو إلغاء تُسجل في <span class="field">سجل حركات العهدة</span> (treasury_custody_log) مع: النوع، المبلغ، المرجع، الوقت.<span class="warn">هذا السجل يُستخدم في المراجعة المالية ولا يمكن تعديله أو حذفه. أي فرق في العهدة يكشفه النظام فوراً.</span>'],
            ],
            // ── SALES ──
            'sales.pos-transaction' => [
                ['title' => 'فتح نقطة البيع', 'body' => 'من <span class="field">المبيعات</span> > <span class="field">عملية بيع جديدة</span>.'],
                ['title' => 'إضافة الأصناف', 'body' => 'ابحث عن الصنف بالاسم أو الباركود. حدد <span class="field">الكمية</span>.'],
                ['title' => 'اختيار العميل والدفع', 'body' => 'حدد <span class="field">العضو/العميل</span> (اختياري). اختر <span class="field">طريقة الدفع</span>.'],
                ['title' => 'إتمام البيع', 'body' => 'اضغط <span class="field">إتمام</span>. يتم خصم المخزون وإنشاء إيصال.<span class="success">يظهر البيع في التقرير اليومي فوراً.</span>'],
            ],
            'sales.create-package' => [
                ['title' => 'فتح إدارة الباقات', 'body' => 'من <span class="field">المبيعات</span> > <span class="field">الباقات</span> > <span class="field">باقة جديدة</span>.'],
                ['title' => 'بيانات الباقة', 'body' => 'أدخل <span class="field">الاسم</span>، <span class="field">الوصف</span>، و<span class="field">السعر الخاص</span>.'],
                ['title' => 'إضافة المكونات', 'body' => 'أضف الأصناف أو الخدمات المشمولة في الباقة مع الكميات.'],
                ['title' => 'الحفظ والتفعيل', 'body' => 'اضغط <span class="field">حفظ</span> ثم <span class="field">تفعيل</span>.<span class="info">الباقة تظهر في نقطة البيع للبائعين فوراً بعد التفعيل.</span>'],
            ],
            'sales.sales-commission' => [
                ['title' => 'فتح العمولات', 'body' => 'من <span class="field">المبيعات</span> > <span class="field">العمولات</span>.'],
                ['title' => 'اختيار الفترة', 'body' => 'حدد <span class="field">الشهر</span> و<span class="field">المندوب</span>. النظام يحسب العمولة تلقائياً بناءً على المبيعات المحققة.'],
                ['title' => 'المراجعة والاعتماد', 'body' => 'راجع تفاصيل كل مندوب: إجمالي المبيعات، نسبة العمولة، المبلغ المستحق.<span class="success">بعد الاعتماد تُضاف العمولة لمسير الرواتب تلقائياً.</span>'],
            ],
            'sales.daily-sales-report' => [
                ['title' => 'فتح التقرير', 'body' => 'من <span class="field">المبيعات</span> > <span class="field">التقرير اليومي</span>.'],
                ['title' => 'استعراض البيانات', 'body' => 'يعرض: إجمالي المبيعات، عدد الفواتير، التوزيع حسب الفئة، أعلى 5 أصناف مبيعاً.'],
                ['title' => 'الفلترة', 'body' => 'يمكنك التصفية حسب: <span class="field">التاريخ</span>، <span class="field">المندوب</span>، <span class="field">طريقة الدفع</span>.'],
                ['title' => 'التصدير', 'body' => 'اضغط <span class="field">تصدير Excel</span> أو <span class="field">طباعة</span>.'],
            ],
            'sales.referral-tracking' => [
                ['title' => 'ربط العضو بموظف المبيعات', 'body' => 'عند ملء استمارة عضو جديد: في قسم <span class="field">كيف تعرفت على النادي</span>، اختر <span class="field">موظف المبيعات المُحيل</span> من القائمة المنسدلة.<span class="info">هذا الحقل اختياري — يُستخدم فقط إذا جاء العضو عن طريق مندوب مبيعات.</span>'],
                ['title' => 'تفعيل العضوية', 'body' => 'عند تفعيل العضوية (بعد الدفع)، النظام يحسب العمولة تلقائياً بناءً على نسبة المندوب المسجلة.<span class="success">العمولة تُسجل في جدول عمولات الإحالات بحالة «معلقة» تلقائياً.</span>'],
                ['title' => 'استعراض تقرير الإحالات', 'body' => 'من <span class="field">المبيعات</span> > <span class="field">تقرير الإحالات</span>. يعرض: المندوب، العضو، قيمة العضوية، نسبة العمولة، المبلغ المستحق، الحالة.'],
                ['title' => 'الفلترة والتصدير', 'body' => 'يمكنك التصفية حسب: <span class="field">المندوب</span>، <span class="field">الفترة</span>، <span class="field">الحالة</span> (معلقة/معتمدة/مدفوعة).'],
            ],
            // ── PAYMENTS ──
            'payments.payment-types-overview' => [
                ['title' => 'فتح إعدادات الدفع', 'body' => 'من <span class="field">الإعدادات</span> > <span class="field">طرق الدفع</span>.'],
                ['title' => 'الأنواع المتاحة', 'body' => 'النظام يدعم: <span class="field">نقدي</span>، <span class="field">شيك</span>، <span class="field">فيزا/ماستركارد</span>، <span class="field">تحويل بنكي</span>، <span class="field">محفظة إلكترونية</span>.'],
                ['title' => 'تخصيص الإعدادات', 'body' => 'لكل طريقة: حدد الحساب المحاسبي المقابل، والحقول الإضافية المطلوبة عند الدفع.<span class="info">يمكن تفعيل أو تعطيل أي طريقة حسب الحاجة.</span>'],
            ],
            'payments.issue-receipt' => [
                ['title' => 'تحصيل الدفعة', 'body' => 'بعد اختيار طلب الدفع من الطابور، أكمل عملية التحصيل.'],
                ['title' => 'إصدار الإيصال', 'body' => 'الإيصال يُنشأ تلقائياً برقم تسلسلي فريد. يحتوي: اسم العضو، المبلغ، الطريقة، التاريخ.'],
                ['title' => 'الطباعة', 'body' => 'اضغط <span class="field">طباعة</span> لطباعة الإيصال فوراً. يمكن إعادة الطباعة لاحقاً من <span class="field">سجل الإيصالات</span>.<span class="success">تنسيق الإيصال قابل للتخصيص من الإعدادات.</span>'],
            ],
            'payments.void-workflow' => [
                ['title' => 'طلب إلغاء الإيصال', 'body' => 'من تفاصيل الدفعة > <span class="field">طلب إلغاء</span>. أدخل <span class="field">السبب</span>.'],
                ['title' => 'سلسلة الموافقات', 'body' => 'الطلب يذهب للمسؤول المعتمد حسب المبلغ:<ul><li>أقل من 1,000: أمين الخزينة</li><li>1,000 - 10,000: مدير مالي</li><li>أكثر من 10,000: مدير عام</li></ul>'],
                ['title' => 'التنفيذ', 'body' => 'بعد الموافقة: يتم إلغاء الإيصال وترحيل قيد عكسي.<span class="warn">الإلغاء يُسجّل في سجل المراجعة ولا يمكن حذفه.</span>'],
            ],
            // ── COACHES ──
            'coaches.register-coach' => [
                ['title' => 'فتح صفحة المدربين', 'body' => 'من <span class="field">المدربين</span> > <span class="field">إضافة مدرب جديد</span>.'],
                ['title' => 'البيانات الشخصية', 'body' => 'أدخل <span class="field">الرقم القومي</span> — يتم استخراج تاريخ الميلاد والنوع تلقائياً. أضف الصورة الشخصية.'],
                ['title' => 'المؤهلات والشهادات', 'body' => 'أدخل <span class="field">التخصص الرياضي</span>، <span class="field">سنوات الخبرة</span>، وارفع صور الشهادات.'],
                ['title' => 'الحفظ', 'body' => 'اضغط <span class="field">حفظ</span>. يتم توليد رقم المدرب تلقائياً.<span class="success">يمكنك الآن ربطه بالألعاب المتاحة.</span>'],
            ],
            'coaches.assign-discipline' => [
                ['title' => 'فتح ملف المدرب', 'body' => 'من قائمة المدربين اضغط على المدرب المطلوب.'],
                ['title' => 'إضافة تخصص', 'body' => 'من تبويب <span class="field">التخصصات</span> > <span class="field">إضافة لعبة</span>. اختر اللعبة من القائمة.'],
                ['title' => 'تحديد المستوى', 'body' => 'حدد <span class="field">مستوى التدريب</span> (مبتدئين، متوسط، متقدم، محترف).'],
                ['title' => 'التأكيد', 'body' => 'اضغط <span class="field">حفظ</span>. المدرب يظهر الآن عند اختيار هذه اللعبة في النشاط الرياضي.<span class="info">يمكن ربط المدرب بأكثر من لعبة.</span>'],
            ],
            'coaches.coach-schedule' => [
                ['title' => 'فتح الجدول', 'body' => 'من ملف المدرب > <span class="field">الجدول</span>، أو من <span class="field">المدربين</span> > <span class="field">الجداول</span>.'],
                ['title' => 'إضافة فترة توفر', 'body' => 'اضغط على الخانة المطلوبة في التقويم. حدد <span class="field">اليوم</span>، <span class="field">من الساعة</span>، <span class="field">إلى الساعة</span>.'],
                ['title' => 'الحفظ', 'body' => 'اضغط <span class="field">حفظ</span>. الأوقات المحجوزة تظهر بلون مختلف.<span class="warn">لا يمكن حجز مدرب في وقت مشغول — النظام يمنع التعارض.</span>'],
            ],
            'coaches.coach-performance' => [
                ['title' => 'فتح تقارير الأداء', 'body' => 'من <span class="field">المدربين</span> > <span class="field">تقييم الأداء</span>.'],
                ['title' => 'اختيار المدرب والفترة', 'body' => 'حدد المدرب والفترة الزمنية. النظام يحسب: عدد الحصص، نسبة الحضور، تقييمات اللاعبين.'],
                ['title' => 'إضافة تقييم', 'body' => 'اضغط <span class="field">تقييم جديد</span>. أدخل الملاحظات والدرجة (1-5).<span class="success">التقييمات تُراكم وتظهر في الملف الشخصي للمدرب.</span>'],
            ],
            'coaches.coach-type-academy' => [
                ['title' => 'تحديد نوع المدرب', 'body' => 'عند إنشاء أو تعديل مدرب، حدد <span class="field">نوع المدرب</span>:<ul><li><strong>مدرب مستقل</strong> — يعمل بشكل حر</li><li><strong>مدرب أكاديمية</strong> — تابع لأكاديمية محددة</li><li><strong>موظف نادي</strong> — موظف رسمي بالنادي</li></ul>'],
                ['title' => 'ربط المدرب بأكاديمية', 'body' => 'عند اختيار <span class="field">مدرب أكاديمية</span> يظهر حقل إضافي لاختيار الأكاديمية والمستوى والدور (مدرب أول/مدرب/مساعد).<span class="info">إيرادات مجموعات المدرب المرتبط تُحسب ضمن إيرادات الأكاديمية في تسويات الحد الأدنى المضمون.</span>'],
                ['title' => 'تغيير النوع', 'body' => 'يمكن تغيير نوع المدرب لاحقاً من صفحة التعديل. عند التغيير من أكاديمية لمستقل — يُلغى التعيين تلقائياً.<span class="warn">تغيير النوع يؤثر على حسابات التسوية للشهر الحالي فقط — الأشهر السابقة لا تتأثر.</span>'],
            ],
            'coaches.guarantee-report' => [
                ['title' => 'فتح تقرير الضمان', 'body' => 'من <span class="field">عقود الأكاديميات</span> > <span class="field">التسويات</span> > <span class="field">تقرير الحد الأدنى</span>.'],
                ['title' => 'تصفية البيانات', 'body' => 'حدد <span class="field">الأكاديمية</span> و<span class="field">الفترة الزمنية</span> (من شهر — إلى شهر). يعرض التقرير كل عقد نشط مع الإيرادات والعجز/الفائض لكل شهر.'],
                ['title' => 'قراءة التقرير', 'body' => 'لكل أكاديمية يُعرض:<ul><li>الحد الأدنى الشهري المطلوب</li><li>الإيرادات الفعلية (اشتراكات + مجموعات المدربين)</li><li>الفائض (أخضر) أو العجز (أحمر)</li><li>حالة التسوية</li></ul><span class="info">العجز = المبلغ الذي تدين به الأكاديمية للنادي.</span>'],
            ],
            // ── CARNETS ──
            'carnets.carnet-issuance-conditions' => [
                ['title' => 'فتح شروط الإصدار', 'body' => 'من <span class="field">الكارنيهات</span> > <span class="field">شروط الإصدار</span>.'],
                ['title' => 'الشروط الإلزامية', 'body' => 'لإصدار كارنيه يجب استيفاء:<ul><li>صورة شخصية واضحة</li><li>سداد الاشتراك السنوي</li><li>عدم وجود مخالفات معلقة</li><li>اعتماد العضوية</li></ul>'],
                ['title' => 'التحقق التلقائي', 'body' => 'النظام يتحقق من جميع الشروط تلقائياً عند طلب الطباعة.<span class="warn">إذا لم يستوفِ العضو شرطاً — لن يظهر زر الطباعة.</span>'],
            ],
            'carnets.print-carnet' => [
                ['title' => 'البحث عن العضو', 'body' => 'من <span class="field">الكارنيهات</span> > <span class="field">إصدار كارنيه</span>. ابحث بالاسم أو الرقم القومي.'],
                ['title' => 'مراجعة البيانات', 'body' => 'تأكد من صحة: الاسم، الصورة، رقم العضوية، نوع العضوية.'],
                ['title' => 'الطباعة', 'body' => 'اضغط <span class="field">طباعة</span>. الكارنيه يُطبع بتصميم النادي المعتمد.<span class="success">يتم تسجيل تاريخ الإصدار ورقم تسلسلي فريد تلقائياً.</span>'],
            ],
            'carnets.deactivate-carnet' => [
                ['title' => 'البحث عن الكارنيه', 'body' => 'من <span class="field">الكارنيهات</span> > <span class="field">إدارة الكارنيهات</span>. ابحث عن العضو.'],
                ['title' => 'إلغاء الكارنيه', 'body' => 'اضغط <span class="field">إلغاء</span>. حدد <span class="field">السبب</span> (مفقود، تالف، إيقاف عضوية).'],
                ['title' => 'إعادة إصدار', 'body' => 'بعد الإلغاء يمكن <span class="field">إعادة إصدار</span> كارنيه جديد برقم مختلف.<span class="warn">الكارنيه الملغي لا يمكن استخدامه للدخول.</span>'],
            ],
            'carnets.dependent-carnet-issuance' => [
                ['title' => 'فتح ملف التابع', 'body' => 'من ملف العضو > <span class="field">التابعين</span>. اختر التابع المطلوب (زوج/زوجة، ابن/ابنة، مؤقت).'],
                ['title' => 'التحقق من الشروط', 'body' => 'لإصدار كارنيه تابع يجب:<ul><li>العضو الأصلي مؤهل لإصدار كارنيه</li><li>التابع لديه صورة شخصية مرفوعة</li><li>التابع في حالة نشطة</li></ul><span class="warn">إذا لم تتوفر صورة للتابع — لن يظهر زر إصدار الكارنيه.</span>'],
                ['title' => 'إصدار الكارنيه', 'body' => 'اضغط <span class="field">إصدار كارنيه</span> بجانب اسم التابع. النظام يُنشئ كارنيه منفصل يحتوي على:<ul><li>صورة التابع (كبيرة)</li><li>اسم التابع ونوع القرابة</li><li>صورة العضو الأصلي (صغيرة كمرجع)</li><li>رقم عضوية الأب/الأم</li><li>QR Code + رقم تسلسلي فريد</li></ul>'],
                ['title' => 'الطباعة', 'body' => 'اضغط <span class="field">طباعة</span> لمعاينة الكارنيه وطباعته.<span class="success">كل تابع يحصل على كارنيه مستقل برقم تسلسلي خاص. يمكن إعادة إصداره بشكل مستقل عن كارنيه العضو.</span>'],
            ],
            'carnets.guest-entry' => [
                ['title' => 'تسجيل ضيف', 'body' => 'من <span class="field">الكارنيهات</span> > <span class="field">دخول الزوار</span> > <span class="field">زائر جديد</span>.'],
                ['title' => 'بيانات الضيف', 'body' => 'أدخل <span class="field">الاسم</span>، <span class="field">الرقم القومي</span>، و<span class="field">العضو المضيف</span>.'],
                ['title' => 'إصدار تصريح', 'body' => 'اضغط <span class="field">إصدار تصريح</span>. يتم إنشاء طلب دفع لرسوم الدخول.<span class="info">التصريح صالح ليوم واحد فقط.</span>'],
            ],
            // ── FACILITIES ──
            'facilities.create-facility' => [
                ['title' => 'إنشاء مرفق', 'body' => 'من <span class="field">المرافق</span> > <span class="field">مرفق جديد</span>.'],
                ['title' => 'البيانات الأساسية', 'body' => 'أدخل <span class="field">الاسم</span>، <span class="field">النوع</span> (ملعب، صالة، حمام سباحة)، <span class="field">السعة</span>، و<span class="field">الموقع</span>.'],
                ['title' => 'ساعات التشغيل', 'body' => 'حدد أوقات الفتح والإغلاق لكل يوم في الأسبوع.'],
                ['title' => 'الحفظ', 'body' => 'اضغط <span class="field">حفظ</span>. المرفق جاهز الآن لإضافة وحدات وتلقي حجوزات.<span class="success">يمكنك إضافة صور للمرفق من صفحة التفاصيل.</span>'],
            ],
            'facilities.manage-units' => [
                ['title' => 'فتح وحدات المرفق', 'body' => 'من صفحة المرفق > <span class="field">الوحدات</span> > <span class="field">إضافة وحدة</span>.'],
                ['title' => 'بيانات الوحدة', 'body' => 'أدخل <span class="field">الاسم</span> (مثال: ملعب 1، حارة 3)، <span class="field">السعة</span>، و<span class="field">سعر الساعة</span>.'],
                ['title' => 'الحفظ', 'body' => 'اضغط <span class="field">حفظ</span>. الوحدة تظهر في تقويم الحجوزات.<span class="info">كل وحدة لها جدول حجز مستقل.</span>'],
            ],
            'facilities.maintenance-schedule' => [
                ['title' => 'إنشاء أمر صيانة', 'body' => 'من المرفق > <span class="field">الصيانة</span> > <span class="field">أمر جديد</span>.'],
                ['title' => 'تفاصيل الصيانة', 'body' => 'حدد <span class="field">نوع الصيانة</span> (دورية/طارئة)، <span class="field">الوصف</span>، <span class="field">تاريخ البدء</span>، <span class="field">المدة المتوقعة</span>.'],
                ['title' => 'حجب المرفق', 'body' => 'فعّل <span class="field">حجب الحجوزات</span> خلال فترة الصيانة. الحجوزات المتعارضة يتم إخطار أصحابها.<span class="warn">الحجوزات القائمة خلال فترة الصيانة تحتاج إلغاء يدوي أو نقل.</span>'],
            ],
            'facilities.booking-rules' => [
                ['title' => 'فتح قواعد الحجز', 'body' => 'من <span class="field">المرافق</span> > <span class="field">قواعد الحجز</span>.'],
                ['title' => 'سياسة الإلغاء', 'body' => 'حدد: <span class="field">مهلة الإلغاء المجاني</span> (مثال: 24 ساعة قبل الموعد). بعدها تُخصم رسوم إلغاء.'],
                ['title' => 'الأولوية', 'body' => 'حدد أولوية الحجز: الأعضاء أولاً، ثم الفرق، ثم الزوار.<span class="info">يمكن تخصيص أسعار مختلفة لكل فئة.</span>'],
                ['title' => 'الحفظ', 'body' => 'اضغط <span class="field">حفظ</span>. القواعد تُطبق تلقائياً على جميع الحجوزات الجديدة.'],
            ],
            'facilities.locker-setup' => [
                ['title' => 'فتح إدارة اللوكرات', 'body' => 'من <span class="field">النشاط الرياضي</span> > <span class="field">اللوكرات</span> > <span class="field">إضافة لوكر</span>.'],
                ['title' => 'بيانات اللوكر', 'body' => 'أدخل <span class="field">الكود</span> (رقم/اسم فريد)، <span class="field">الاسم</span>، <span class="field">النوع</span> (عادي/كبير/VIP).<span class="info">يمكنك ربط اللوكر بمنشأة أو رياضة معينة اختيارياً.</span>'],
                ['title' => 'ملاحظة الموقع', 'body' => 'أضف <span class="field">ملاحظة الموقع</span> لتسهيل تحديد مكان اللوكر (مثال: الدور الثاني - يمين المدخل).'],
                ['title' => 'الحفظ والتفعيل', 'body' => 'اضغط <span class="field">حفظ</span>. اللوكر يصبح متاحاً للتأجير فوراً.<span class="success">يمكنك تعطيل اللوكر مؤقتاً من صفحة التفاصيل بدون حذفه.</span>'],
            ],
            'facilities.locker-rental' => [
                ['title' => 'إنشاء إيجار جديد', 'body' => 'من <span class="field">النشاط الرياضي</span> > <span class="field">إيجارات اللوكرات</span> > <span class="field">إيجار جديد</span>.'],
                ['title' => 'اختيار اللوكر واللاعب', 'body' => 'اختر <span class="field">اللوكر</span> (تظهر فقط اللوكرات المتاحة). ثم اختر <span class="field">اللاعب</span> من البحث.'],
                ['title' => 'تحديد مدة الإيجار', 'body' => 'اختر <span class="field">نوع الإيجار</span>: شهري (شهر واحد)، 6 شهور، أو سنوي. النظام يحسب تاريخ الانتهاء تلقائياً.<span class="info">المبلغ يُحدد يدوياً — يمكنك تطبيق تسعيرة مختلفة حسب نوع اللوكر.</span>'],
                ['title' => 'الحفظ', 'body' => 'اضغط <span class="field">حفظ</span>. يُنشئ النظام رقم إيجار فريد (LR-YYYYMM-XXXX) ويُسجل الإيجار بحالة «فعال».<span class="success">عند انتهاء الإيجار بدون تجديد، يدخل اللوكر فترة سماح 3 شهور تلقائياً.</span>'],
            ],
            'facilities.locker-eviction' => [
                ['title' => 'متى يتم الإخلاء؟', 'body' => 'بعد انتهاء فترة السماح (3 شهور من تاريخ انتهاء الإيجار) بدون تجديد أو دفع، يتحول الإيجار لحالة <span class="field">بانتظار الإخلاء</span> تلقائياً.'],
                ['title' => 'فتح صفحة الإخلاء', 'body' => 'من <span class="field">إيجارات اللوكرات</span> > اضغط <span class="field">محضر فض</span> بجانب الإيجار المطلوب.'],
                ['title' => 'كتابة محضر الفض', 'body' => 'أدخل <span class="field">سبب الإخلاء</span> بالتفصيل. هذا يُسجل كمحضر رسمي.<span class="warn">عملية الإخلاء نهائية ولا يمكن التراجع عنها — يتم تحرير اللوكر للتأجير مرة أخرى.</span>'],
                ['title' => 'تأكيد الإخلاء', 'body' => 'اضغط <span class="field">تأكيد الإخلاء</span>. يتحول الإيجار لحالة «تم الإخلاء» واللوكر يصبح متاحاً للتأجير.<span class="success">يتم حفظ تاريخ الإخلاء والموظف المسؤول تلقائياً.</span>'],
            ],
            'facilities.locker-payment' => [
                ['title' => 'إنشاء الإيجار أولاً', 'body' => 'عند إنشاء إيجار لوكر جديد، النظام يُنشئ طلب دفع تلقائياً في طابور الخزنة الفرعية (SUB_SA).<span class="info">المبلغ يُحدد يدوياً عند إنشاء الإيجار حسب نوع اللوكر ومدة الإيجار.</span>'],
                ['title' => 'الدفع من خزنة الأنشطة', 'body' => 'ينتقل أمين الخزنة لطابور دفع الأنشطة: <span class="field">خزنة الأنشطة</span> > <span class="field">طابور الدفع</span>. يظهر الطلب بنوع «إيجار لوكر».'],
                ['title' => 'تحصيل المبلغ', 'body' => 'اختر الطلب > حدد طريقة الدفع > <span class="field">تحصيل</span>. يتم تسجيل الدفع وربطه بالوردية المفتوحة.<span class="success">بعد التحصيل يتحول الإيجار لحالة «فعال» تلقائياً ويُطبع إيصال.</span>'],
            ],
            'facilities.locker-renewal' => [
                ['title' => 'متى يُجدد الإيجار؟', 'body' => 'قبل انتهاء الإيجار الحالي أو خلال فترة السماح (3 شهور). بعد فترة السماح — يتحول لحالة «بانتظار الإخلاء» ولا يمكن التجديد.'],
                ['title' => 'فتح التجديد', 'body' => 'من <span class="field">إيجارات اللوكرات</span> > اضغط <span class="field">تجديد</span> بجانب الإيجار المطلوب.'],
                ['title' => 'اختيار مدة التجديد', 'body' => 'حدد <span class="field">مدة التجديد</span> (شهر، 6 شهور، سنة). النظام يحسب تاريخ الانتهاء الجديد من تاريخ الانتهاء الحالي.<span class="info">المبلغ يُحدد يدوياً — يمكنك تطبيق خصم أو تسعيرة مختلفة.</span>'],
                ['title' => 'الدفع والتفعيل', 'body' => 'بعد الحفظ يُنشأ طلب دفع في طابور الخزنة. بعد التحصيل → يُمدد تاريخ الانتهاء ويبقى الإيجار فعالاً.<span class="success">يتم تسجيل تاريخ التجديد والموظف المسؤول تلقائياً.</span>'],
            ],
            // ── TOURNAMENTS ──
            'tournaments.create-tournament' => [
                ['title' => 'إنشاء بطولة', 'body' => 'من <span class="field">البطولات</span> > <span class="field">بطولة جديدة</span>.'],
                ['title' => 'البيانات الأساسية', 'body' => 'أدخل <span class="field">الاسم</span>، <span class="field">اللعبة</span>، <span class="field">نوع البطولة</span> (فردي/فرق)، <span class="field">الحد الأقصى للمشاركين</span>.'],
                ['title' => 'القوانين والجوائز', 'body' => 'أدخل <span class="field">قوانين البطولة</span> و<span class="field">الجوائز</span> لكل مركز.'],
                ['title' => 'الحفظ', 'body' => 'اضغط <span class="field">حفظ</span>. البطولة في حالة <span class="field">مسودة</span> — افتح التسجيل عندما تكون جاهزاً.<span class="info">يمكنك تحرير كل التفاصيل قبل فتح التسجيل.</span>'],
            ],
            'tournaments.tournament-registration' => [
                ['title' => 'فتح التسجيل', 'body' => 'من صفحة البطولة اضغط <span class="field">فتح التسجيل</span>. حدد <span class="field">تاريخ الإغلاق</span>.'],
                ['title' => 'قبول المشاركين', 'body' => 'المشتركون يظهرون في قائمة الانتظار. اضغط <span class="field">قبول</span> أو <span class="field">رفض</span> لكل طلب.'],
                ['title' => 'رسوم المشاركة', 'body' => 'عند القبول يُنشأ طلب دفع تلقائي لرسوم المشاركة.<span class="warn">لا يُثبت التسجيل إلا بعد سداد الرسوم.</span>'],
            ],
            'tournaments.generate-bracket' => [
                ['title' => 'إغلاق التسجيل', 'body' => 'اضغط <span class="field">إغلاق التسجيل</span> بعد اكتمال العدد أو انتهاء المهلة.'],
                ['title' => 'توليد القرعة', 'body' => 'اضغط <span class="field">توليد القرعة</span>. النظام يوزع المشاركين عشوائياً في شجرة خروج المغلوب.'],
                ['title' => 'مراجعة ونشر', 'body' => 'راجع التوزيع. يمكنك إعادة التوليد. اضغط <span class="field">نشر</span> لإعلان القرعة.<span class="success">شجرة البطولة تظهر للمشاركين فوراً بعد النشر.</span>'],
            ],
            'tournaments.record-match-result' => [
                ['title' => 'فتح المباراة', 'body' => 'من شجرة البطولة اضغط على المباراة المطلوبة.'],
                ['title' => 'إدخال النتيجة', 'body' => 'أدخل النتيجة لكل طرف. حدد <span class="field">الفائز</span>.'],
                ['title' => 'التأكيد', 'body' => 'اضغط <span class="field">تأكيد النتيجة</span>. يتقدم الفائز تلقائياً للدور التالي.<span class="info">يُحدّث الترتيب تلقائياً بعد كل مباراة.</span>'],
            ],
            // ── RENTALS ──
            'rentals.setup-rental-entity' => [
                ['title' => 'إنشاء وحدة إيجارية', 'body' => 'من <span class="field">الإيجارات</span> > <span class="field">الوحدات</span> > <span class="field">وحدة جديدة</span>.'],
                ['title' => 'البيانات', 'body' => 'أدخل <span class="field">الاسم</span>، <span class="field">النوع</span> (محل، مكتب، كشك)، <span class="field">المساحة</span>، <span class="field">الموقع</span>.'],
                ['title' => 'الحفظ', 'body' => 'اضغط <span class="field">حفظ</span>. الوحدة جاهزة لإنشاء عقد إيجار.<span class="info">يمكن إرفاق صور ومخطط للوحدة.</span>'],
            ],
            'rentals.create-rental-contract' => [
                ['title' => 'إنشاء عقد', 'body' => 'من الوحدة > <span class="field">عقد جديد</span>، أو من <span class="field">الإيجارات</span> > <span class="field">العقود</span>.'],
                ['title' => 'بيانات العقد', 'body' => 'حدد <span class="field">المستأجر</span>، <span class="field">مدة العقد</span>، <span class="field">القيمة الشهرية</span>، <span class="field">تاريخ البدء</span>.'],
                ['title' => 'الشروط الخاصة', 'body' => 'أضف أي شروط خاصة (نشاط مسموح، ساعات عمل، شروط الإخلاء).'],
                ['title' => 'الحفظ', 'body' => 'اضغط <span class="field">حفظ</span>. يتم توليد رقم العقد وإنشاء جدول الفوترة تلقائياً.<span class="warn">العقد يحتاج اعتماد إداري قبل التفعيل.</span>'],
            ],
            'rentals.rental-deposit' => [
                ['title' => 'تحصيل التأمين', 'body' => 'عند تفعيل العقد يُنشأ طلب دفع بقيمة التأمين. يُحصّل من الخزينة.'],
                ['title' => 'تسجيل التأمين', 'body' => 'بعد التحصيل يُسجل التأمين في حساب <span class="field">أمانات المستأجرين</span>.'],
                ['title' => 'استرداد التأمين', 'body' => 'عند إنهاء العقد: <span class="field">استرداد التأمين</span>. يمكن خصم أي تلفيات قبل الاسترداد.<span class="info">التأمين يُرد كاملاً إذا لم تكن هناك مخالفات.</span>'],
            ],
            'rentals.rental-invoicing' => [
                ['title' => 'الفوترة التلقائية', 'body' => 'النظام يُنشئ فواتير شهرية تلقائياً حسب جدول العقد.'],
                ['title' => 'مراجعة الفواتير', 'body' => 'من <span class="field">الإيجارات</span> > <span class="field">الفواتير</span>. راجع الفواتير المستحقة والمسددة.'],
                ['title' => 'التحصيل', 'body' => 'عند السداد: يتم إنشاء إيصال وتحديث حالة الفاتورة.<span class="warn">الفاتورة المتأخرة أكثر من 15 يوم تُنشئ إنذار تلقائي للمستأجر.</span>'],
            ],
            // ── SUPPORT ──
            'support.create-ticket' => [
                ['title' => 'فتح تذكرة', 'body' => 'من <span class="field">الدعم الفني</span> > <span class="field">تذكرة جديدة</span>.'],
                ['title' => 'وصف المشكلة', 'body' => 'أدخل <span class="field">العنوان</span>، <span class="field">التصنيف</span>، <span class="field">الأولوية</span> (عادية/مهمة/حرجة)، و<span class="field">الوصف التفصيلي</span>.'],
                ['title' => 'المرفقات', 'body' => 'ارفع لقطات شاشة أو ملفات توضيحية إن وُجدت.'],
                ['title' => 'الإرسال', 'body' => 'اضغط <span class="field">إرسال</span>. يتم توليد رقم تذكرة وإشعار فريق الدعم.<span class="success">يمكنك متابعة حالة التذكرة من لوحة التحكم.</span>'],
            ],
            'support.assign-ticket' => [
                ['title' => 'فتح التذاكر الجديدة', 'body' => 'من <span class="field">الدعم الفني</span> > <span class="field">التذاكر الجديدة</span>.'],
                ['title' => 'تعيين الفني', 'body' => 'اختر التذكرة ثم اضغط <span class="field">تعيين</span>. اختر الفني المناسب حسب التخصص.'],
                ['title' => 'التأكيد', 'body' => 'يتم إشعار الفني المعيّن بالتذكرة. الحالة تتغير إلى <span class="field">قيد المعالجة</span>.<span class="info">يمكن إعادة التعيين إذا لم يستجب الفني خلال المهلة.</span>'],
            ],
            'support.resolve-ticket' => [
                ['title' => 'تسجيل الحل', 'body' => 'من التذكرة > <span class="field">تسجيل حل</span>. أدخل وصف الحل والخطوات المتبعة.'],
                ['title' => 'إغلاق التذكرة', 'body' => 'اضغط <span class="field">إغلاق</span>. يتم إشعار صاحب التذكرة.'],
                ['title' => 'التقييم', 'body' => 'صاحب التذكرة يمكنه تقييم الخدمة (1-5 نجوم).<span class="success">التقييمات تُستخدم في تقارير أداء فريق الدعم.</span>'],
            ],
            'support.sla-monitoring' => [
                ['title' => 'فتح لوحة SLA', 'body' => 'من <span class="field">الدعم الفني</span> > <span class="field">مستوى الخدمة</span>.'],
                ['title' => 'المؤشرات', 'body' => 'يعرض: متوسط وقت الاستجابة، متوسط وقت الحل، نسبة الالتزام بالمهلة.'],
                ['title' => 'التنبيهات', 'body' => 'التذاكر المقتربة من انتهاء المهلة تظهر باللون الأحمر.<span class="warn">تجاوز SLA يُسجل في تقرير الأداء الشهري.</span>'],
            ],
            // ── SETTINGS ──
            'settings.system-configuration' => [
                ['title' => 'فتح الإعدادات', 'body' => 'من <span class="field">الإعدادات</span> > <span class="field">إعدادات النظام</span>.'],
                ['title' => 'البيانات الأساسية', 'body' => 'أدخل <span class="field">اسم النادي</span>، <span class="field">العنوان</span>، <span class="field">رقم الهاتف</span>، <span class="field">البريد الإلكتروني</span>.'],
                ['title' => 'الإعدادات التقنية', 'body' => 'حدد <span class="field">المنطقة الزمنية</span> (Africa/Cairo)، <span class="field">العملة</span> (جنيه مصري)، <span class="field">لغة النظام</span>.'],
                ['title' => 'الحفظ', 'body' => 'اضغط <span class="field">حفظ</span>. التغييرات تسري فوراً على جميع المستخدمين.<span class="warn">تغيير المنطقة الزمنية يؤثر على جميع التواريخ في النظام.</span>'],
            ],
            'settings.branding-setup' => [
                ['title' => 'رفع الشعار', 'body' => 'من <span class="field">الإعدادات</span> > <span class="field">الهوية البصرية</span>. ارفع شعار النادي (PNG شفاف، 200x200 بكسل كحد أدنى).'],
                ['title' => 'الألوان', 'body' => 'حدد <span class="field">اللون الأساسي</span> و<span class="field">اللون الثانوي</span> للنظام.'],
                ['title' => 'الحفظ', 'body' => 'اضغط <span class="field">حفظ</span>. الشعار يظهر في الشريط العلوي وجميع المطبوعات.<span class="info">يُنصح باستخدام شعار واضح يعمل على خلفية بيضاء وداكنة.</span>'],
            ],
            'settings.receipt-design' => [
                ['title' => 'فتح مصمم الإيصالات', 'body' => 'من <span class="field">الإعدادات</span> > <span class="field">تصميم الإيصالات</span>.'],
                ['title' => 'تخصيص المحتوى', 'body' => 'حدد العناصر الظاهرة: الشعار، اسم النادي، بيانات العضو، تفاصيل الدفعة، كود QR.'],
                ['title' => 'معاينة وحفظ', 'body' => 'اضغط <span class="field">معاينة</span> لرؤية النتيجة. ثم <span class="field">حفظ</span>.<span class="success">التصميم يُطبق على جميع الإيصالات الجديدة فوراً.</span>'],
            ],
            'settings.appearance' => [
                ['title' => 'فتح إعدادات المظهر', 'body' => 'من القائمة الجانبية: <span class="field">الإعدادات</span> > <span class="field">المظهر والتخصيص</span>. تفتح صفحة تحتوي على جميع خيارات تخصيص شكل النظام.'],
                ['title' => 'تغيير الألوان', 'body' => 'اختر <span class="field">اللون الأساسي</span> من القائمة الجاهزة (8 ألوان) أو أدخل لون مخصص بصيغة HEX. يمكنك أيضاً تغيير <span class="field">لون التمييز</span> المستخدم في الأزرار الثانوية.<span class="info">اللون الأساسي يُطبق على القائمة الجانبية والأزرار والعناصر التفاعلية.</span>'],
                ['title' => 'نمط القائمة الجانبية', 'body' => 'اختر أحد الأنماط:<ul><li><strong>داكن</strong> — الافتراضي، خلفية سوداء أنيقة</li><li><strong>فاتح</strong> — خلفية بيضاء بحدود خفيفة</li><li><strong>متدرج</strong> — تدرج لوني احترافي</li></ul>يمكنك أيضاً تغيير عرض القائمة (ضيق، عادي، عريض).'],
                ['title' => 'الخطوط والحواف والكثافة', 'body' => 'تحكم في:<ul><li><span class="field">حجم الخط</span>: مضغوط (13px)، عادي (14px)، كبير (15px)</li><li><span class="field">استدارة البطاقات</span>: حاد، مستدير، كبسولة</li><li><span class="field">الحركات</span>: كاملة، خفيفة، بدون</li><li><span class="field">كثافة العرض</span>: مضغوط، مريح، واسع</li></ul>'],
                ['title' => 'المعاينة والحفظ', 'body' => 'لوحة المعاينة الحية أسفل الصفحة تعرض تأثير التغييرات فوراً. بعد الرضا عن الشكل اضغط <span class="field">حفظ التغييرات</span>.<span class="success">التغييرات تُطبق فوراً على جميع المستخدمين. يمكنك العودة للإعدادات الافتراضية في أي وقت بزر «استعادة الافتراضي».</span>'],
            ],
            // ── FINES ──
            'fines.impose-fine' => [
                ['title' => 'فرض غرامة', 'body' => 'من ملف العضو > <span class="field">مخالفات</span> > <span class="field">غرامة جديدة</span>.'],
                ['title' => 'تحديد النوع والمبلغ', 'body' => 'اختر <span class="field">نوع المخالفة</span>. المبلغ يُحسب حسب اللائحة (1,000 — 10,000 ج.م).'],
                ['title' => 'التأكيد', 'body' => 'أدخل <span class="field">الوصف</span> واضغط <span class="field">حفظ</span>.<span class="warn">الغرامة تُنشئ طلب دفع تلقائياً في طابور الخزينة.</span>'],
            ],
            'fines.fine-types-setup' => [
                ['title' => 'فتح أنواع المخالفات', 'body' => 'من <span class="field">المخالفات</span> > <span class="field">أنواع المخالفات</span> > <span class="field">نوع جديد</span>.'],
                ['title' => 'بيانات النوع', 'body' => 'أدخل <span class="field">الاسم</span>، <span class="field">الوصف</span>، <span class="field">المبلغ الافتراضي</span>، <span class="field">درجة الخطورة</span> (بسيطة/متوسطة/جسيمة).'],
                ['title' => 'قواعد التصعيد', 'body' => 'حدد ماذا يحدث عند التكرار: مضاعفة المبلغ، إيقاف مؤقت، فصل.<span class="info">القواعد تُطبق تلقائياً عند فرض مخالفة جديدة.</span>'],
                ['title' => 'الحفظ', 'body' => 'اضغط <span class="field">حفظ</span>. النوع متاح الآن عند فرض مخالفة.'],
            ],
            'fines.fine-escalation' => [
                ['title' => 'مراجعة التكرارات', 'body' => 'من <span class="field">المخالفات</span> > <span class="field">التصعيد التلقائي</span>. النظام يعرض المخالفات المتكررة.'],
                ['title' => 'قواعد التصعيد', 'body' => 'حسب الإعداد:<ul><li>التكرار الأول: تحذير</li><li>التكرار الثاني: مضاعفة المبلغ</li><li>التكرار الثالث: إيقاف مؤقت 30 يوم</li></ul>'],
                ['title' => 'التنفيذ', 'body' => 'عند فرض مخالفة مكررة — النظام يطبق التصعيد تلقائياً ويُخطر العضو.<span class="warn">الإيقاف يمنع الدخول ويُلغي الحجوزات القائمة.</span>'],
            ],
            'fines.fine-payment' => [
                ['title' => 'عرض المخالفات المعلقة', 'body' => 'من ملف العضو > <span class="field">مخالفات</span> أو من <span class="field">طابور الدفع</span>.'],
                ['title' => 'السداد', 'body' => 'اختر المخالفة واضغط <span class="field">سداد</span>. اختر طريقة الدفع.'],
                ['title' => 'التأكيد', 'body' => 'بعد التحصيل: حالة المخالفة تتغير إلى <span class="field">مسددة</span>.<span class="success">إذا كان العضو موقوفاً بسبب المخالفة — يُعاد تفعيله تلقائياً بعد السداد.</span>'],
            ],
            // ── ROLES ──
            'roles.create-role' => [
                ['title' => 'إنشاء دور', 'body' => 'من <span class="field">الإعدادات</span> > <span class="field">الأدوار والصلاحيات</span> > <span class="field">دور جديد</span>.'],
                ['title' => 'البيانات', 'body' => 'أدخل <span class="field">اسم الدور</span> (مثال: أمين خزنة فرعية) و<span class="field">الكود</span>.'],
                ['title' => 'تعيين الصلاحيات', 'body' => 'حدد الصلاحيات المطلوبة من القائمة. يمكنك البحث حسب الوحدة.<span class="info">تغيير الصلاحيات يسري فوراً على جميع المستخدمين المرتبطين بهذا الدور.</span>'],
                ['title' => 'الحفظ', 'body' => 'اضغط <span class="field">حفظ</span>. يمكنك ربط الموظفين بالدور من صفحة إدارة المستخدمين.'],
            ],
            'roles.assign-permissions' => [
                ['title' => 'فتح صفحة الدور', 'body' => 'من <span class="field">الأدوار</span> > اضغط على الدور المطلوب تعديل صلاحياته.'],
                ['title' => 'اختيار الصلاحيات', 'body' => 'الصلاحيات منظمة حسب الوحدة. حدد الصلاحيات المطلوبة بعلامة ✓.'],
                ['title' => 'الحفظ', 'body' => 'اضغط <span class="field">حفظ التعديلات</span>. التغييرات تسري فوراً.<span class="warn">إزالة صلاحية من دور تؤثر على جميع المستخدمين المرتبطين به.</span>'],
            ],
            'roles.assign-role-to-user' => [
                ['title' => 'فتح إدارة المستخدمين', 'body' => 'من <span class="field">الإعدادات</span> > <span class="field">المستخدمين</span>. اختر المستخدم.'],
                ['title' => 'تعيين الأدوار', 'body' => 'من تبويب <span class="field">الأدوار</span> > <span class="field">إضافة دور</span>. اختر الدور من القائمة.'],
                ['title' => 'التأكيد', 'body' => 'اضغط <span class="field">حفظ</span>. الموظف يحصل على جميع صلاحيات الدور فوراً.<span class="info">يمكن تعيين أكثر من دور — الصلاحيات تُجمع.</span>'],
            ],
            'roles.custom-permissions' => [
                ['title' => 'فتح صلاحيات المستخدم', 'body' => 'من ملف المستخدم > <span class="field">صلاحيات مخصصة</span>.'],
                ['title' => 'إضافة صلاحية فردية', 'body' => 'اضغط <span class="field">إضافة</span>. اختر الصلاحية المحددة من القائمة.'],
                ['title' => 'الحفظ', 'body' => 'اضغط <span class="field">حفظ</span>. الصلاحية الفردية تُضاف بالإضافة للصلاحيات من الأدوار.<span class="warn">الصلاحيات الفردية تتقدم على الأدوار — استخدمها بحذر.</span>'],
            ],
            'roles.cashier-roles' => [
                ['title' => 'الأدوار الثلاثة', 'body' => 'النظام يوفر 3 أدوار لأمناء الخزن:<ul><li><strong>أمين خزنة العضويات</strong> — يحصّل مدفوعات العضويات من الخزنة الفرعية SUB_MEM</li><li><strong>أمين خزنة الأنشطة</strong> — يحصّل مدفوعات الأنشطة الرياضية من الخزنة الفرعية SUB_SA</li><li><strong>أمين الخزنة الرئيسية</strong> — يستلم التسويات ويُدير الإيداعات البنكية</li></ul>'],
                ['title' => 'أمين خزنة العضويات', 'body' => 'يمكنه: فتح/إغلاق وردية، تحصيل دفعات العضويات، إلغاء طلب دفع، بدء تسوية، عرض العهدة.<span class="info">لا يمكنه: إلغاء دفعة مكتملة (void) أو استلام تسويات أو إيداع في البنك.</span>'],
                ['title' => 'أمين خزنة الأنشطة', 'body' => 'يمكنه: فتح/إغلاق وردية، تحصيل اشتراكات رياضية وحجوزات ساعية، بدء تسوية، عرض التقارير.<span class="info">يعمل على الخزنة الفرعية SUB_SA — لا يرى طابور العضويات.</span>'],
                ['title' => 'أمين الخزنة الرئيسية', 'body' => 'يمكنه: استلام التسويات من الخزن الفرعية، إنشاء إيداعات بنكية، تأكيد الإيداع، عرض الأرصدة.<span class="warn">هذا الدور لا يُحصّل مدفوعات مباشرة من الأعضاء — دوره إداري/مالي فقط.</span>'],
            ],
            'roles.sports-roles' => [
                ['title' => 'الأدوار المتاحة', 'body' => 'النظام يوفر دورين لإدارة الأنشطة الرياضية:<ul><li><strong>موظف الأنشطة الرياضية</strong> — العمليات اليومية</li><li><strong>مدير الأنشطة الرياضية</strong> — إدارة كاملة + تقارير + إعفاءات</li></ul>'],
                ['title' => 'موظف الأنشطة', 'body' => 'يمكنه: تسجيل اللاعبين، إدارة المجموعات والحجوزات، توليد الاشتراكات، تسجيل الحضور، إدارة قوائم الانتظار، تأجير اللوكرات.<span class="info">لا يمكنه: إعفاء من اشتراك، إدارة الأسعار، اعتماد عقود.</span>'],
                ['title' => 'مدير الأنشطة', 'body' => 'يمتلك كل صلاحيات الموظف بالإضافة إلى: إعفاء من الرسوم، إدارة التسعير، اعتماد العقود، الموافقة الطبية، إخلاء لوكرات، تقارير العمليات.<span class="success">هذا هو الدور المناسب لمدير قسم الأنشطة الرياضية.</span>'],
            ],
            // ── INTERVIEWS ──
            'interviews.schedule-interview' => [
                ['title' => 'جدولة مقابلة', 'body' => 'من <span class="field">المقابلات</span> > <span class="field">جدولة مقابلة</span>.'],
                ['title' => 'البيانات', 'body' => 'حدد <span class="field">المتقدم</span>، <span class="field">التاريخ والوقت</span>، <span class="field">المكان</span>، و<span class="field">لجنة المقابلة</span>.'],
                ['title' => 'الإشعارات', 'body' => 'يتم إشعار المتقدم وأعضاء اللجنة تلقائياً بالموعد.'],
                ['title' => 'الحفظ', 'body' => 'اضغط <span class="field">حفظ</span>. المقابلة تظهر في التقويم.<span class="info">يمكن إعادة الجدولة قبل 24 ساعة من الموعد.</span>'],
            ],
            'interviews.conduct-interview' => [
                ['title' => 'فتح المقابلة', 'body' => 'من التقويم أو <span class="field">المقابلات</span> > <span class="field">مقابلات اليوم</span>.'],
                ['title' => 'تسجيل الملاحظات', 'body' => 'أدخل ملاحظاتك لكل محور من محاور التقييم.'],
                ['title' => 'التقييم', 'body' => 'أعطِ درجة (1-10) لكل محور: المهارات الفنية، التواصل، الخبرة، الملاءمة الثقافية.'],
                ['title' => 'الحفظ', 'body' => 'اضغط <span class="field">حفظ التقييم</span>. يمكن لكل عضو في اللجنة إدخال تقييمه المستقل.<span class="success">النظام يحسب المتوسط من جميع المقيّمين.</span>'],
            ],
            'interviews.interview-results' => [
                ['title' => 'مراجعة النتائج', 'body' => 'من <span class="field">المقابلات</span> > <span class="field">النتائج</span>. يعرض المتقدمين مرتبين حسب الدرجة.'],
                ['title' => 'اتخاذ القرار', 'body' => 'حدد لكل متقدم: <span class="field">قبول</span>، <span class="field">رفض</span>، أو <span class="field">قائمة انتظار</span>.'],
                ['title' => 'الإخطار', 'body' => 'اضغط <span class="field">إرسال النتائج</span>. يتم إخطار المتقدمين بالنتيجة.<span class="info">المقبولون يمكن تحويلهم مباشرة لإجراءات التعيين.</span>'],
            ],
            // ── INSTALLMENTS ──
            'installments.create-installment-plan' => [
                ['title' => 'إنشاء خطة تقسيط', 'body' => 'من <span class="field">التقسيط</span> > <span class="field">خطة جديدة</span>.'],
                ['title' => 'بيانات الخطة', 'body' => 'حدد <span class="field">العضو</span>، <span class="field">إجمالي المبلغ</span>، <span class="field">المقدم</span>، <span class="field">عدد الأقساط</span>.'],
                ['title' => 'جدول السداد', 'body' => 'النظام يحسب قيمة القسط ومواعيد الاستحقاق تلقائياً. يمكنك تعديل المواعيد يدوياً.'],
                ['title' => 'الحفظ', 'body' => 'اضغط <span class="field">حفظ</span>. يتم إنشاء طلبات دفع لكل قسط حسب المواعيد.<span class="warn">تأخر القسط أكثر من 15 يوم يُنشئ إنذار تلقائي.</span>'],
            ],
            'installments.payment-schedule' => [
                ['title' => 'فتح جدول السداد', 'body' => 'من خطة التقسيط > <span class="field">جدول السداد</span>.'],
                ['title' => 'عرض الأقساط', 'body' => 'يعرض لكل قسط: <span class="field">رقم القسط</span>، <span class="field">تاريخ الاستحقاق</span>، <span class="field">المبلغ</span>، <span class="field">الحالة</span> (معلق/مسدد/متأخر).'],
                ['title' => 'تعديل الجدول', 'body' => 'يمكنك تأجيل قسط أو إعادة جدولة.<span class="info">التعديل يحتاج صلاحية مدير الاشتراكات.</span>'],
            ],
            'installments.collect-installment' => [
                ['title' => 'البحث عن القسط', 'body' => 'من <span class="field">طابور الدفع</span> أو من خطة التقسيط > القسط المستحق.'],
                ['title' => 'التحصيل', 'body' => 'اختر طريقة الدفع وأكمل التحصيل كأي دفعة عادية.'],
                ['title' => 'التأكيد', 'body' => 'حالة القسط تتغير إلى <span class="field">مسدد</span>. النظام يُحدث الرصيد المتبقي تلقائياً.<span class="success">عند سداد آخر قسط — الخطة تُغلق تلقائياً.</span>'],
            ],
            'installments.overdue-monitoring' => [
                ['title' => 'فتح المتأخرات', 'body' => 'من <span class="field">التقسيط</span> > <span class="field">الأقساط المتأخرة</span>.'],
                ['title' => 'القائمة', 'body' => 'يعرض جميع الأقساط المتأخرة مع: اسم العضو، مدة التأخير، المبلغ.'],
                ['title' => 'الإجراءات', 'body' => 'يمكنك: <span class="field">إرسال تذكير</span>، <span class="field">تطبيق غرامة تأخير</span>، أو <span class="field">تصعيد للإدارة</span>.<span class="warn">التأخير المتكرر قد يؤدي لإيقاف العضوية حسب السياسة.</span>'],
            ],
            'installments.cheque-submission' => [
                ['title' => 'متى يُطلب تسليم الشيكات؟', 'body' => 'عند دفع العضوية بالتقسيط (مقدم 25%)، تصبح حالة العضو <span class="field">في انتظار الشيكات</span>. لا يُمنح رقم عضوية ولا يُفعّل حتى تسليم جميع الشيكات.<span class="warn">عدد الشيكات المطلوبة = عدد أشهر التقسيط (عادة 30 شيك).</span>'],
                ['title' => 'فتح صفحة الشيكات', 'body' => 'من صفحة العضو: اضغط <span class="field">رفع الشيكات</span> في البانر البرتقالي. أو من خطة التقسيط: <span class="field">شيكات الأقساط</span>.'],
                ['title' => 'رفع شيك', 'body' => 'لكل شيك أدخل: <span class="field">رقم الشيك</span> (السيريال)، <span class="field">البنك</span>، <span class="field">التاريخ</span>، <span class="field">المبلغ</span>، ثم ارفع <span class="field">صورة/مسح الشيك</span> (JPG, PNG, PDF).<span class="info">الصفحة تعرض شريط تقدم: كم شيك تم رفعه وكم المتبقي.</span>'],
                ['title' => 'التفعيل التلقائي', 'body' => 'عند رفع آخر شيك مطلوب، يتم تلقائياً: تفعيل العضوية + إصدار رقم العضوية.<span class="success">يظهر رقم العضوية في رسالة النجاح ويمكن طباعة الكارنيه فوراً بعدها.</span>'],
            ],
            // ── REPORTS ──
            'reports.report-types' => [
                ['title' => 'فتح مركز التقارير', 'body' => 'من <span class="field">التقارير</span> > <span class="field">جميع التقارير</span>.'],
                ['title' => 'التصنيفات', 'body' => 'التقارير مصنفة حسب الوحدة: مالية، عضويات، مبيعات، مخازن، موارد بشرية.'],
                ['title' => 'اختيار التقرير', 'body' => 'اضغط على التقرير المطلوب. كل تقرير له صفحة مستقلة مع فلاتر خاصة.<span class="info">يمكنك تثبيت التقارير المفضلة للوصول السريع.</span>'],
            ],
            'reports.apply-filters' => [
                ['title' => 'فتح الفلاتر', 'body' => 'في أي تقرير: اضغط <span class="field">فلترة</span> أو استخدم شريط الفلاتر العلوي.'],
                ['title' => 'تحديد المعايير', 'body' => 'اختر: <span class="field">الفترة الزمنية</span>، <span class="field">الفرع</span>، <span class="field">الحالة</span>، <span class="field">القسم</span> حسب نوع التقرير.'],
                ['title' => 'تطبيق', 'body' => 'اضغط <span class="field">تطبيق</span>. النتائج تُحدث فوراً.<span class="success">يمكنك حفظ مجموعة فلاتر كـ"عرض محفوظ" لاستخدامها لاحقاً.</span>'],
            ],
            'reports.export-report' => [
                ['title' => 'تطبيق الفلاتر', 'body' => 'أولاً: تأكد من ضبط الفلاتر للحصول على البيانات المطلوبة.'],
                ['title' => 'اختيار الصيغة', 'body' => 'اضغط <span class="field">تصدير</span>. اختر: <span class="field">Excel</span> (للتعديل) أو <span class="field">PDF</span> (للطباعة).'],
                ['title' => 'التحميل', 'body' => 'الملف يُحمّل تلقائياً. يحتوي نفس البيانات الظاهرة على الشاشة.<span class="info">ملفات Excel تحتفظ بالتنسيق العربي (RTL).</span>'],
            ],
            'reports.schedule-report' => [
                ['title' => 'فتح الجدولة', 'body' => 'من أي تقرير: <span class="field">جدولة تلقائية</span>.'],
                ['title' => 'إعداد التكرار', 'body' => 'حدد: <span class="field">التكرار</span> (يومي/أسبوعي/شهري)، <span class="field">وقت الإرسال</span>، <span class="field">الصيغة</span> (Excel/PDF).'],
                ['title' => 'المستلمون', 'body' => 'حدد البريد الإلكتروني للمستلمين.'],
                ['title' => 'التفعيل', 'body' => 'اضغط <span class="field">تفعيل</span>. التقرير يُرسل تلقائياً حسب الجدول.<span class="warn">تأكد من صحة البريد الإلكتروني — لا يوجد تأكيد قبل الإرسال.</span>'],
            ],
            // ── SEASONAL ──
            'seasonal.setup-season' => [
                ['title' => 'إنشاء موسم', 'body' => 'من <span class="field">العضوية الموسمية</span> > <span class="field">موسم جديد</span>.'],
                ['title' => 'بيانات الموسم', 'body' => 'أدخل <span class="field">الاسم</span> (مثال: صيف 2026)، <span class="field">تاريخ البدء</span>، <span class="field">تاريخ الانتهاء</span>.'],
                ['title' => 'المرافق المتاحة', 'body' => 'حدد المرافق المشمولة في الاشتراك الموسمي (حمام سباحة، نادي صحي، ملاعب).'],
                ['title' => 'الحفظ', 'body' => 'اضغط <span class="field">حفظ</span>. الموسم في حالة <span class="field">مسودة</span> حتى تفتح التسجيل.<span class="info">أعدّ الأسعار قبل فتح التسجيل.</span>'],
            ],
            'seasonal.seasonal-pricing' => [
                ['title' => 'فتح التسعير', 'body' => 'من صفحة الموسم > <span class="field">التسعير</span>.'],
                ['title' => 'تحديد الفئات', 'body' => 'أضف فئات الأسعار: <span class="field">فرد</span>، <span class="field">عائلة</span>، <span class="field">زوجين</span>. لكل فئة حدد السعر.'],
                ['title' => 'خصومات مبكرة', 'body' => 'يمكنك إضافة خصم للتسجيل المبكر (مثال: 15% خصم قبل 1 يونيو).<span class="success">الخصم يُطبق تلقائياً حسب تاريخ التسجيل.</span>'],
            ],
            'seasonal.seasonal-registration' => [
                ['title' => 'تسجيل في الموسم', 'body' => 'من <span class="field">العضوية الموسمية</span> > <span class="field">تسجيل جديد</span>.'],
                ['title' => 'اختيار العضو والفئة', 'body' => 'ابحث عن العضو. حدد <span class="field">فئة الاشتراك</span>. النظام يحسب السعر تلقائياً.'],
                ['title' => 'الدفع', 'body' => 'يُنشأ طلب دفع. يمكن السداد نقداً أو تقسيط.'],
                ['title' => 'التأكيد', 'body' => 'بعد السداد: يُصدر كارنيه موسمي ويُفعّل الدخول للمرافق المشمولة.<span class="info">يمكن ترقية الفئة لاحقاً بدفع الفرق.</span>'],
            ],
            'seasonal.seasonal-report' => [
                ['title' => 'فتح تقرير الموسم', 'body' => 'من <span class="field">العضوية الموسمية</span> > <span class="field">التقارير</span>.'],
                ['title' => 'المؤشرات', 'body' => 'يعرض: إجمالي المشتركين، الإيرادات، نسبة الإشغال، مقارنة بالموسم السابق.'],
                ['title' => 'التصدير', 'body' => 'اضغط <span class="field">تصدير</span> للحصول على التقرير التفصيلي.<span class="success">يمكنك مقارنة أداء المواسم المختلفة.</span>'],
            ],
            // ── DOCUMENTS ──
            'documents.upload-document' => [
                ['title' => 'رفع مستند', 'body' => 'من <span class="field">المستندات</span> > <span class="field">رفع مستند</span>، أو من ملف العضو > <span class="field">المستندات</span>.'],
                ['title' => 'البيانات', 'body' => 'اختر <span class="field">الملف</span>، حدد <span class="field">النوع</span> (هوية، شهادة ميلاد، صورة، عقد)، وأضف <span class="field">ملاحظات</span>.'],
                ['title' => 'الرفع', 'body' => 'اضغط <span class="field">رفع</span>. المستند يُحفظ مرتبطاً بالعضو.<span class="info">الأنواع المقبولة: PDF، JPG، PNG. الحد الأقصى: 5 ميجا.</span>'],
            ],
            'documents.categorize-document' => [
                ['title' => 'فتح المستندات', 'body' => 'من <span class="field">المستندات</span> > <span class="field">جميع المستندات</span>.'],
                ['title' => 'التصنيف', 'body' => 'اختر المستند ثم غيّر <span class="field">التصنيف</span> أو <span class="field">الحالة</span> (جديد، قيد المراجعة، معتمد، مرفوض).'],
                ['title' => 'البحث', 'body' => 'يمكنك البحث والتصفية حسب: النوع، العضو، التاريخ، الحالة.<span class="success">المستندات منظمة ويمكن الوصول إليها من أي مكان في النظام.</span>'],
            ],
            'documents.verify-document' => [
                ['title' => 'فتح المراجعة', 'body' => 'من <span class="field">المستندات</span> > <span class="field">بانتظار المراجعة</span>.'],
                ['title' => 'التحقق', 'body' => 'افتح المستند وتأكد من: الصلاحية، المطابقة للعضو، جودة الصورة.'],
                ['title' => 'القرار', 'body' => 'اضغط <span class="field">اعتماد</span> أو <span class="field">رفض</span> مع ذكر السبب.<span class="warn">المستند المرفوض يُخطر العضو بالسبب لإعادة الرفع.</span>'],
            ],
            // ── BRANCHES ──
            'branches.create-branch' => [
                ['title' => 'إنشاء فرع', 'body' => 'من <span class="field">الفروع</span> > <span class="field">فرع جديد</span>.'],
                ['title' => 'البيانات', 'body' => 'أدخل <span class="field">الاسم</span>، <span class="field">العنوان</span>، <span class="field">الهاتف</span>، <span class="field">المدير المسؤول</span>.'],
                ['title' => 'الحفظ', 'body' => 'اضغط <span class="field">حفظ</span>. الفرع متاح الآن لربط الموظفين والمرافق به.<span class="info">كل فرع يمكن أن يكون له إعداداته الخاصة.</span>'],
            ],
            'branches.branch-configuration' => [
                ['title' => 'فتح إعدادات الفرع', 'body' => 'من <span class="field">الفروع</span> > اختر الفرع > <span class="field">الإعدادات</span>.'],
                ['title' => 'ساعات العمل', 'body' => 'حدد ساعات الفتح والإغلاق لكل يوم. يمكن تعيين أيام العطل.'],
                ['title' => 'الخدمات', 'body' => 'حدد الخدمات المتاحة في هذا الفرع (ملاعب، حمام سباحة، صالة لياقة).'],
                ['title' => 'الحفظ', 'body' => 'اضغط <span class="field">حفظ</span>. الإعدادات تسري على الحجوزات والتقارير الخاصة بالفرع.'],
            ],
            'branches.branch-transfer' => [
                ['title' => 'طلب تحويل', 'body' => 'من ملف العضو أو الموظف > <span class="field">تحويل لفرع آخر</span>.'],
                ['title' => 'اختيار الفرع', 'body' => 'حدد <span class="field">الفرع الجديد</span> و<span class="field">تاريخ التحويل</span>.'],
                ['title' => 'التأكيد', 'body' => 'اضغط <span class="field">تأكيد</span>. يتم نقل السجلات للفرع الجديد.<span class="warn">العضو يحتفظ بنفس رقم العضوية عبر الفروع.</span>'],
            ],
            // ── NEWS ──
            'news.create-article' => [
                ['title' => 'مقال جديد', 'body' => 'من <span class="field">الأخبار</span> > <span class="field">مقال جديد</span>.'],
                ['title' => 'المحتوى', 'body' => 'أدخل <span class="field">العنوان</span>، <span class="field">المحتوى</span> (يدعم التنسيق)، <span class="field">التصنيف</span>، وارفع <span class="field">صورة الغلاف</span>.'],
                ['title' => 'الحفظ', 'body' => 'اضغط <span class="field">حفظ كمسودة</span>. المقال لا يظهر للأعضاء حتى يُنشر.<span class="info">يمكنك المعاينة قبل النشر.</span>'],
            ],
            'news.publish-article' => [
                ['title' => 'مراجعة المقال', 'body' => 'من <span class="field">الأخبار</span> > <span class="field">المسودات</span>. افتح المقال وراجعه.'],
                ['title' => 'النشر', 'body' => 'اضغط <span class="field">نشر</span>. يمكنك اختيار <span class="field">نشر فوري</span> أو <span class="field">جدولة</span> لتاريخ محدد.'],
                ['title' => 'التأكيد', 'body' => 'المقال يظهر في صفحة الأخبار للأعضاء.<span class="success">يمكنك تعديل المقال المنشور أو سحبه في أي وقت.</span>'],
            ],
            'news.manage-categories' => [
                ['title' => 'فتح التصنيفات', 'body' => 'من <span class="field">الأخبار</span> > <span class="field">التصنيفات</span> > <span class="field">تصنيف جديد</span>.'],
                ['title' => 'البيانات', 'body' => 'أدخل <span class="field">اسم التصنيف</span> و<span class="field">الوصف</span>.'],
                ['title' => 'الحفظ', 'body' => 'اضغط <span class="field">حفظ</span>. التصنيف متاح الآن عند إنشاء مقال جديد.<span class="info">يمكنك ترتيب التصنيفات حسب الأولوية.</span>'],
            ],
            // ── WORKFLOW ──
            'workflow.create-workflow-rule' => [
                ['title' => 'إنشاء قاعدة', 'body' => 'من <span class="field">سير العمل</span> > <span class="field">القواعد</span> > <span class="field">قاعدة جديدة</span>.'],
                ['title' => 'شرط التشغيل', 'body' => 'حدد <span class="field">الحدث</span> الذي يُفعّل القاعدة (مثال: إنشاء طلب شراء > 5000 ج.م).'],
                ['title' => 'الإجراء', 'body' => 'حدد الإجراء: <span class="field">إرسال للموافقة</span>، <span class="field">إشعار</span>، <span class="field">تصعيد</span>.'],
                ['title' => 'الحفظ', 'body' => 'اضغط <span class="field">حفظ وتفعيل</span>. القاعدة تعمل تلقائياً عند تحقق الشرط.<span class="warn">اختبر القاعدة على حالة تجريبية قبل التفعيل النهائي.</span>'],
            ],
            'workflow.approval-chain' => [
                ['title' => 'إنشاء سلسلة موافقات', 'body' => 'من <span class="field">سير العمل</span> > <span class="field">سلاسل الموافقات</span> > <span class="field">سلسلة جديدة</span>.'],
                ['title' => 'المراحل', 'body' => 'أضف مراحل بالترتيب: المرحلة 1 (المدير المباشر)، المرحلة 2 (المدير المالي)، المرحلة 3 (المدير العام).'],
                ['title' => 'الشروط', 'body' => 'لكل مرحلة حدد: <span class="field">المهلة</span>، <span class="field">بديل في حالة الغياب</span>، <span class="field">التصعيد التلقائي</span>.'],
                ['title' => 'الحفظ', 'body' => 'اضغط <span class="field">حفظ</span>. اربط السلسلة بقاعدة سير عمل.<span class="info">الطلب يتقدم تلقائياً بعد كل موافقة.</span>'],
            ],
            'workflow.process-approval' => [
                ['title' => 'فتح الطلبات المعلقة', 'body' => 'من <span class="field">سير العمل</span> > <span class="field">بانتظار الموافقة</span>، أو من الإشعارات.'],
                ['title' => 'مراجعة الطلب', 'body' => 'افتح الطلب واطلع على التفاصيل والمرفقات.'],
                ['title' => 'القرار', 'body' => 'اضغط <span class="field">موافقة</span> أو <span class="field">رفض</span>. يمكنك إضافة <span class="field">تعليق</span>.<span class="success">عند الموافقة: الطلب ينتقل للمرحلة التالية أو يُنفذ.</span>'],
            ],
            'workflow.workflow-monitoring' => [
                ['title' => 'لوحة المتابعة', 'body' => 'من <span class="field">سير العمل</span> > <span class="field">المتابعة</span>.'],
                ['title' => 'الحالات', 'body' => 'يعرض: طلبات معلقة، منفذة، مرفوضة، متأخرة عن المهلة.'],
                ['title' => 'التفاصيل', 'body' => 'اضغط على أي طلب لمعرفة: أين توقف، من المسؤول الحالي، مدة الانتظار.<span class="warn">الطلبات المتجاوزة للمهلة تظهر باللون الأحمر ويمكن تصعيدها.</span>'],
            ],
            // ── SUBSCRIPTIONS ──
            'subscriptions.generate-annual' => [
                ['title' => 'فتح التوليد', 'body' => 'من <span class="field">الاشتراكات</span> > <span class="field">توليد اشتراكات سنوية</span>.'],
                ['title' => 'اختيار السنة', 'body' => 'حدد <span class="field">السنة المالية</span>. النظام يعرض عدد الأعضاء الفعالين المستحقين.'],
                ['title' => 'التوليد', 'body' => 'اضغط <span class="field">توليد</span>. يتم إنشاء سجل اشتراك لكل عضو فعال.'],
                ['title' => 'النتيجة', 'body' => 'يُنشأ طلب دفع لكل عضو في طابور الخزينة.<span class="warn">التوليد يُنفذ مرة واحدة في السنة — تأكد من صحة قائمة الأعضاء قبل التنفيذ.</span>'],
            ],
            'subscriptions.collect-subscription' => [
                ['title' => 'البحث عن الاشتراك', 'body' => 'من <span class="field">طابور الدفع</span> أو من ملف العضو > <span class="field">الاشتراكات</span>.'],
                ['title' => 'التحصيل', 'body' => 'اختر الاشتراك المستحق. حدد طريقة الدفع (نقدي/شيك/فيزا).'],
                ['title' => 'التأكيد', 'body' => 'اضغط <span class="field">تحصيل</span>. يُصدر إيصال ويُحدث حالة الاشتراك إلى <span class="field">مسدد</span>.<span class="success">يمكن التقسيط إذا كان مفعّلاً في الإعدادات.</span>'],
            ],
            'subscriptions.subscription-tracking' => [
                ['title' => 'فتح المتابعة', 'body' => 'من <span class="field">الاشتراكات</span> > <span class="field">المتابعة</span>.'],
                ['title' => 'التصنيف', 'body' => 'يعرض الأعضاء حسب الحالة: مسددين، متأخرين، معفيين. مع إجمالي كل فئة.'],
                ['title' => 'الإجراءات', 'body' => 'للمتأخرين: <span class="field">إرسال تذكير</span> أو <span class="field">إيقاف مؤقت</span>.<span class="warn">الإيقاف يمنع دخول العضو وإصدار كارنيه جديد.</span>'],
            ],
            'subscriptions.subscription-exemption' => [
                ['title' => 'طلب إعفاء', 'body' => 'من ملف العضو > <span class="field">الاشتراكات</span> > <span class="field">طلب إعفاء</span>.'],
                ['title' => 'البيانات', 'body' => 'حدد <span class="field">نوع الإعفاء</span> (كلي/جزئي)، <span class="field">السبب</span>، وارفع المستندات الداعمة.'],
                ['title' => 'الاعتماد', 'body' => 'الطلب يذهب للجنة الإعفاءات للاعتماد.<span class="info">الإعفاء المعتمد يُسجل في تقرير الإعفاءات السنوي.</span>'],
            ],
            // ── RESERVATIONS ──
            'reservations.create-booking' => [
                ['title' => 'إنشاء حجز', 'body' => 'من <span class="field">الحجوزات</span> > <span class="field">حجز جديد</span>، أو من تقويم المرفق.'],
                ['title' => 'البيانات', 'body' => 'حدد <span class="field">المرفق/الوحدة</span>، <span class="field">التاريخ</span>، <span class="field">من الساعة</span> — <span class="field">إلى الساعة</span>، <span class="field">العضو</span>.'],
                ['title' => 'التسعير', 'body' => 'النظام يحسب التكلفة تلقائياً. يُنشأ طلب دفع.'],
                ['title' => 'التأكيد', 'body' => 'اضغط <span class="field">تأكيد الحجز</span>. يظهر الحجز في التقويم.<span class="warn">الحجز لا يُثبت إلا بعد سداد الرسوم.</span>'],
            ],
            'reservations.calendar-view' => [
                ['title' => 'فتح التقويم', 'body' => 'من <span class="field">الحجوزات</span> > <span class="field">التقويم</span>.'],
                ['title' => 'التنقل', 'body' => 'اختر العرض: <span class="field">يومي</span>، <span class="field">أسبوعي</span>، أو <span class="field">شهري</span>. تنقل بين التواريخ.'],
                ['title' => 'التفاصيل', 'body' => 'اضغط على أي حجز لعرض تفاصيله. الألوان تُميّز حالة الحجز (مؤكد/معلق/ملغي).<span class="info">يمكنك إنشاء حجز جديد بالضغط على خانة فارغة في التقويم.</span>'],
            ],
            'reservations.cancel-booking' => [
                ['title' => 'فتح الحجز', 'body' => 'من التقويم أو من <span class="field">الحجوزات</span> > البحث عن الحجز.'],
                ['title' => 'طلب الإلغاء', 'body' => 'اضغط <span class="field">إلغاء</span>. أدخل <span class="field">السبب</span>.'],
                ['title' => 'سياسة الاسترداد', 'body' => 'النظام يحسب المبلغ المسترد حسب سياسة الإلغاء (مثال: إلغاء قبل 24 ساعة = استرداد كامل).<span class="warn">بعد وقت المهلة: يتم خصم رسوم إلغاء.</span>'],
            ],
            'reservations.recurring-booking' => [
                ['title' => 'إنشاء حجز متكرر', 'body' => 'من <span class="field">الحجوزات</span> > <span class="field">حجز متكرر جديد</span>.'],
                ['title' => 'نمط التكرار', 'body' => 'حدد: <span class="field">كل أسبوع</span> / <span class="field">كل أسبوعين</span>، <span class="field">اليوم</span>، <span class="field">الوقت</span>، <span class="field">عدد الأسابيع</span>.'],
                ['title' => 'المراجعة', 'body' => 'النظام يعرض جميع الحجوزات التي سيتم إنشاؤها. تأكد من عدم التعارض.'],
                ['title' => 'التأكيد', 'body' => 'اضغط <span class="field">تأكيد</span>. يتم إنشاء جميع الحجوزات دفعة واحدة.<span class="info">يمكنك إلغاء حجز فردي دون التأثير على الباقي.</span>'],
            ],
            // ── MATCH CENTER ──
            'match-center.create-live-match' => [
                ['title' => 'إنشاء مباراة', 'body' => 'من <span class="field">مركز المباريات</span> > <span class="field">مباراة جديدة</span>.'],
                ['title' => 'البيانات', 'body' => 'حدد <span class="field">الفريقين</span>، <span class="field">اللعبة</span>، <span class="field">الملعب</span>، <span class="field">التاريخ والوقت</span>، <span class="field">الحكام</span>.'],
                ['title' => 'بدء المباراة', 'body' => 'عند وقت البداية: اضغط <span class="field">بدء</span>. المباراة تنتقل لحالة <span class="field">جارية</span>.'],
                ['title' => 'البث المباشر', 'body' => 'يمكن للمشاهدين متابعة الأحداث لحظياً من صفحة المباراة.<span class="success">الأحداث تُحدث فوراً عند تسجيلها.</span>'],
            ],
            'match-center.track-events' => [
                ['title' => 'فتح المباراة الجارية', 'body' => 'من <span class="field">مركز المباريات</span> > <span class="field">المباريات الحية</span>.'],
                ['title' => 'تسجيل حدث', 'body' => 'اضغط <span class="field">حدث جديد</span>. اختر النوع: <span class="field">هدف</span>، <span class="field">بطاقة صفراء</span>، <span class="field">بطاقة حمراء</span>، <span class="field">تبديل</span>.'],
                ['title' => 'التفاصيل', 'body' => 'حدد: <span class="field">اللاعب</span>، <span class="field">الدقيقة</span>. للأهداف: اختر نوع الهدف (عادي/ركلة جزاء/هدف ذاتي).'],
                ['title' => 'التأكيد', 'body' => 'اضغط <span class="field">تأكيد</span>. الحدث يظهر في الجدول الزمني فوراً.<span class="info">يمكنك تعديل أو حذف حدث خلال 5 دقائق.</span>'],
            ],
            'match-center.match-scoring' => [
                ['title' => 'إنهاء المباراة', 'body' => 'عند نهاية الوقت: اضغط <span class="field">إنهاء المباراة</span>.'],
                ['title' => 'النتيجة', 'body' => 'النتيجة النهائية تُحسب تلقائياً من الأهداف المسجلة.'],
                ['title' => 'الإحصائيات', 'body' => 'يعرض النظام: الاستحواذ، التسديدات، الركنيات، الأخطاء لكل فريق.<span class="success">يمكن تصدير ملخص المباراة كتقرير PDF.</span>'],
            ],
            // ── POOL MANAGEMENT ──
            'pool-management.setup-pool' => [
                ['title' => 'إنشاء حمام سباحة', 'body' => 'من <span class="field">إدارة حمامات السباحة</span> > <span class="field">حمام جديد</span>.'],
                ['title' => 'المواصفات', 'body' => 'أدخل <span class="field">الاسم</span>، <span class="field">الطول</span>، <span class="field">العرض</span>، <span class="field">العمق</span>، <span class="field">السعة القصوى</span>.'],
                ['title' => 'الإعدادات', 'body' => 'حدد ساعات التشغيل ودرجة الحرارة المستهدفة.'],
                ['title' => 'الحفظ', 'body' => 'اضغط <span class="field">حفظ</span>. يمكنك الآن تقسيمه لحارات.<span class="info">السعة القصوى تُستخدم لمنع الحجز الزائد.</span>'],
            ],
            'pool-management.manage-lanes' => [
                ['title' => 'إضافة حارات', 'body' => 'من صفحة الحمام > <span class="field">الحارات</span> > <span class="field">إضافة حارة</span>.'],
                ['title' => 'بيانات الحارة', 'body' => 'أدخل <span class="field">رقم الحارة</span>، <span class="field">النوع</span> (تدريب/استخدام حر)، <span class="field">السعة</span>.'],
                ['title' => 'الحفظ', 'body' => 'اضغط <span class="field">حفظ</span>. الحارة جاهزة للجدولة والحجز.<span class="info">يمكن تخصيص حارات للتدريب الاحترافي فقط.</span>'],
            ],
            'pool-management.pool-scheduling' => [
                ['title' => 'فتح الجدول', 'body' => 'من صفحة الحمام > <span class="field">الجدول الأسبوعي</span>.'],
                ['title' => 'تخصيص الفترات', 'body' => 'قسّم اليوم إلى فترات: <span class="field">تدريب فرق</span>، <span class="field">استخدام حر</span>، <span class="field">صيانة</span>، <span class="field">تدريب خاص</span>.'],
                ['title' => 'الحفظ', 'body' => 'اضغط <span class="field">حفظ الجدول</span>. الجدول يتكرر أسبوعياً.<span class="warn">تغيير الجدول يؤثر على الحجوزات المستقبلية — الحالية تبقى كما هي.</span>'],
            ],
            'pool-management.pool-maintenance' => [
                ['title' => 'تسجيل صيانة', 'body' => 'من صفحة الحمام > <span class="field">الصيانة</span> > <span class="field">سجل جديد</span>.'],
                ['title' => 'القراءات', 'body' => 'أدخل: <span class="field">درجة الحرارة</span>، <span class="field">نسبة الكلور</span>، <span class="field">pH</span>، <span class="field">حالة الفلاتر</span>.'],
                ['title' => 'الإجراءات', 'body' => 'حدد أي صيانة تمت: تنظيف، إضافة كيماويات، إصلاح.'],
                ['title' => 'الحفظ', 'body' => 'اضغط <span class="field">حفظ</span>. يُسجل في سجل الصيانة الدوري.<span class="warn">قراءات خارج النطاق الآمن تُنشئ تنبيه فوري.</span>'],
            ],
            // ── USERS ──
            'users.create-user' => [
                ['title' => 'فتح إدارة المستخدمين', 'body' => 'من القائمة الجانبية: <span class="field">الإعدادات</span> > <span class="field">المستخدمين</span> > <span class="field">مستخدم جديد</span>.'],
                ['title' => 'البيانات الأساسية', 'body' => 'أدخل <span class="field">اسم المستخدم</span> (فريد)، <span class="field">الاسم الكامل</span>، <span class="field">البريد الإلكتروني</span>، <span class="field">كلمة المرور</span>.<span class="info">اسم المستخدم لا يمكن تغييره بعد الإنشاء.</span>'],
                ['title' => 'تعيين الدور', 'body' => 'اختر <span class="field">الدور الوظيفي</span> من القائمة. يمكن تعيين أكثر من دور.'],
                ['title' => 'الحفظ والتفعيل', 'body' => 'اضغط <span class="field">حفظ</span>. الحساب يصبح فعالاً فوراً ويمكن للمستخدم تسجيل الدخول.<span class="success">يمكنك لاحقاً تعطيل الحساب مؤقتاً بدون حذفه.</span>'],
            ],
            'users.edit-user' => [
                ['title' => 'البحث عن المستخدم', 'body' => 'من <span class="field">المستخدمين</span>: ابحث بالاسم أو البريد الإلكتروني.'],
                ['title' => 'تعديل البيانات', 'body' => 'اضغط <span class="field">تعديل</span>. يمكنك تغيير: الاسم، البريد، الهاتف، القسم.'],
                ['title' => 'إعادة تعيين كلمة المرور', 'body' => 'اضغط <span class="field">إعادة تعيين كلمة المرور</span> لتوليد كلمة مرور جديدة.<span class="warn">المستخدم سيحتاج لتغييرها عند أول دخول.</span>'],
            ],
            'users.manage-user-permissions' => [
                ['title' => 'فتح صلاحيات المستخدم', 'body' => 'من ملف المستخدم > تبويب <span class="field">الصلاحيات</span>.'],
                ['title' => 'الصلاحيات من الأدوار', 'body' => 'يعرض جميع الصلاحيات الموروثة من الأدوار المعيّنة (لا يمكن تعديلها هنا).'],
                ['title' => 'صلاحيات مخصصة', 'body' => 'اضغط <span class="field">إضافة صلاحية</span> لمنح صلاحية إضافية خارج الدور.<span class="info">الصلاحيات المخصصة تتقدم على صلاحيات الدور.</span>'],
                ['title' => 'الحفظ', 'body' => 'اضغط <span class="field">حفظ</span>. التغييرات تسري فوراً في الجلسة التالية للمستخدم.'],
            ],
            'users.user-activity-log' => [
                ['title' => 'فتح سجل النشاط', 'body' => 'من ملف المستخدم > <span class="field">سجل النشاط</span>.'],
                ['title' => 'محتوى السجل', 'body' => 'يعرض: تاريخ ووقت كل عملية، نوع العملية (إنشاء/تعديل/حذف)، الكيان المتأثر.'],
                ['title' => 'الفلترة', 'body' => 'صفّي حسب <span class="field">التاريخ</span> أو <span class="field">نوع العملية</span>.<span class="info">هذا السجل لا يمكن تعديله أو حذفه — مرجع للمراجعة الداخلية.</span>'],
            ],
            // ── NOTIFICATIONS ──
            'notifications.create-template' => [
                ['title' => 'فتح القوالب', 'body' => 'من <span class="field">الإشعارات</span> > <span class="field">القوالب</span> > <span class="field">قالب جديد</span>.'],
                ['title' => 'تصميم القالب', 'body' => 'أدخل <span class="field">اسم القالب</span>، <span class="field">نوع الإشعار</span> (SMS/بريد/نظام)، و<span class="field">نص الرسالة</span>.<span class="info">استخدم المتغيرات مثل {member_name} و{amount} للبيانات الديناميكية.</span>'],
                ['title' => 'المعاينة والحفظ', 'body' => 'اضغط <span class="field">معاينة</span> لرؤية الشكل النهائي ثم <span class="field">حفظ</span>.'],
            ],
            'notifications.setup-trigger' => [
                ['title' => 'فتح المشغلات', 'body' => 'من <span class="field">الإشعارات</span> > <span class="field">المشغلات التلقائية</span> > <span class="field">مشغل جديد</span>.'],
                ['title' => 'اختيار الحدث', 'body' => 'حدد <span class="field">الحدث</span> المُشغّل (مثال: إنشاء عضوية، استحقاق قسط، قرب انتهاء اشتراك).'],
                ['title' => 'ربط القالب', 'body' => 'اختر <span class="field">القالب</span> الذي سيُستخدم و<span class="field">المستلم</span> (العضو نفسه / المسؤول / كلاهما).'],
                ['title' => 'التفعيل', 'body' => 'اضغط <span class="field">حفظ وتفعيل</span>. الإشعار يُرسل تلقائياً عند تحقق الحدث.<span class="warn">اختبر المشغل بحدث تجريبي قبل التفعيل النهائي.</span>'],
            ],
            'notifications.send-manual' => [
                ['title' => 'فتح صفحة الإرسال', 'body' => 'من <span class="field">الإشعارات</span> > <span class="field">إرسال إشعار</span>.'],
                ['title' => 'اختيار المستلمين', 'body' => 'حدد المستلمين: عضو محدد، مجموعة (حسب النوع/الحالة/اللعبة)، أو الجميع.'],
                ['title' => 'كتابة الرسالة', 'body' => 'اختر قالب جاهز أو اكتب رسالة مخصصة. حدد <span class="field">القناة</span> (SMS/بريد/إشعار نظام).'],
                ['title' => 'الإرسال', 'body' => 'اضغط <span class="field">إرسال</span>. يتم تسجيل الإرسال في السجل مع حالة التسليم.<span class="success">يمكنك متابعة حالة الإرسال من سجل الإشعارات.</span>'],
            ],
            'notifications.notification-log' => [
                ['title' => 'فتح السجل', 'body' => 'من <span class="field">الإشعارات</span> > <span class="field">السجل</span>.'],
                ['title' => 'محتوى السجل', 'body' => 'يعرض: التاريخ، المستلم، القناة، الحالة (مرسل/فشل/في الانتظار)، نص مختصر.'],
                ['title' => 'الفلترة', 'body' => 'صفّي حسب: <span class="field">التاريخ</span>، <span class="field">القناة</span>، <span class="field">الحالة</span>، <span class="field">المشغل</span>.<span class="info">الإشعارات الفاشلة يمكن إعادة إرسالها يدوياً.</span>'],
            ],
            // ── PLAYER AFFAIRS ──
            'player-affairs.register-player' => [
                ['title' => 'فتح صفحة اللاعبين', 'body' => 'من <span class="field">شؤون اللاعبين</span> > <span class="field">اللاعبين</span> > <span class="field">لاعب جديد</span>.'],
                ['title' => 'البيانات الشخصية', 'body' => 'أدخل <span class="field">الاسم</span>، <span class="field">تاريخ الميلاد</span>، <span class="field">الرقم القومي</span>، <span class="field">العنوان</span>، وبيانات ولي الأمر.'],
                ['title' => 'البيانات الرياضية', 'body' => 'حدد <span class="field">اللعبة</span>، <span class="field">المستوى</span>، <span class="field">التصنيف العمري</span>. ارفع <span class="field">الصورة الشخصية</span>.'],
                ['title' => 'الحفظ', 'body' => 'اضغط <span class="field">حفظ</span>. يتم توليد رقم لاعب فريد.<span class="success">اللاعب جاهز للتسجيل في المجموعات والبرامج.</span>'],
            ],
            'player-affairs.player-evaluation' => [
                ['title' => 'فتح التقييمات', 'body' => 'من <span class="field">شؤون اللاعبين</span> > <span class="field">التقييمات</span> > <span class="field">تقييم جديد</span>.'],
                ['title' => 'اختيار اللاعب والمعايير', 'body' => 'حدد <span class="field">اللاعب</span> و<span class="field">نوع التقييم</span> (فني/بدني/نفسي). أدخل الدرجات لكل محور.'],
                ['title' => 'الملاحظات والتوصيات', 'body' => 'أضف <span class="field">ملاحظات المدرب</span> و<span class="field">التوصيات</span> (ترقية/بقاء/تنزيل).'],
                ['title' => 'الحفظ', 'body' => 'اضغط <span class="field">حفظ</span>. التقييم يظهر في ملف اللاعب.<span class="info">يمكن مقارنة التقييمات عبر الوقت لمتابعة التطور.</span>'],
            ],
            'player-affairs.record-injury' => [
                ['title' => 'تسجيل إصابة', 'body' => 'من <span class="field">شؤون اللاعبين</span> > <span class="field">الإصابات</span> > <span class="field">إصابة جديدة</span>.'],
                ['title' => 'التفاصيل', 'body' => 'حدد <span class="field">اللاعب</span>، <span class="field">نوع الإصابة</span>، <span class="field">تاريخ الإصابة</span>، <span class="field">المنطقة</span>، <span class="field">الوصف</span>.'],
                ['title' => 'فترة التعافي', 'body' => 'حدد <span class="field">المدة المتوقعة</span> و<span class="field">تاريخ العودة</span>.<span class="warn">اللاعب المصاب لا يظهر في قوائم الحضور حتى تاريخ العودة.</span>'],
                ['title' => 'المتابعة', 'body' => 'يمكن تحديث حالة الإصابة (قيد التعافي/شُفي) من صفحة التفاصيل.'],
            ],
            'player-affairs.fitness-test' => [
                ['title' => 'إنشاء اختبار', 'body' => 'من <span class="field">شؤون اللاعبين</span> > <span class="field">اختبارات اللياقة</span> > <span class="field">اختبار جديد</span>.'],
                ['title' => 'إدخال النتائج', 'body' => 'حدد اللاعب وأدخل نتائج الاختبارات: <span class="field">الجري</span>، <span class="field">القوة</span>، <span class="field">المرونة</span>، <span class="field">التحمل</span>.'],
                ['title' => 'الحفظ', 'body' => 'اضغط <span class="field">حفظ</span>. النتائج تُقارن بالمعايير المعتمدة وتظهر في ملف اللاعب.<span class="success">يمكن عرض رسم بياني لتطور اللياقة عبر الزمن.</span>'],
            ],
            'player-affairs.medical-approval' => [
                ['title' => 'فتح الموافقات الطبية', 'body' => 'من <span class="field">شؤون اللاعبين</span> > <span class="field">الموافقات الطبية</span>.'],
                ['title' => 'مراجعة الملف', 'body' => 'يعرض النظام: نتائج الفحص الطبي، الإصابات السابقة، الحالة الصحية.'],
                ['title' => 'القرار', 'body' => 'اضغط <span class="field">موافقة</span> (لائق) أو <span class="field">رفض</span> (غير لائق) مع ذكر السبب.<span class="warn">اللاعب غير المعتمد طبياً لا يمكن تسجيل حضوره.</span>'],
            ],
            // ── FORMS ──
            'forms.build-form' => [
                ['title' => 'فتح أداة البناء', 'body' => 'من <span class="field">النماذج</span> > <span class="field">بناء نموذج</span> > <span class="field">نموذج جديد</span>.'],
                ['title' => 'إضافة الحقول', 'body' => 'اسحب الحقول من الشريط الجانبي: نص، رقم، تاريخ، قائمة منسدلة، مرفق. رتّبها بالسحب.'],
                ['title' => 'الإعدادات', 'body' => 'لكل حقل حدد: <span class="field">العنوان</span>، <span class="field">مطلوب/اختياري</span>، <span class="field">قيمة افتراضية</span>.'],
                ['title' => 'الحفظ والنشر', 'body' => 'اضغط <span class="field">حفظ</span> ثم <span class="field">نشر</span>. النموذج يصبح متاحاً للتعبئة.<span class="info">يمكنك تضمين النموذج في صفحة العضو أو استخدامه مستقلاً.</span>'],
            ],
            'forms.fill-form' => [
                ['title' => 'فتح النموذج', 'body' => 'من <span class="field">النماذج</span> > اختر النموذج المطلوب، أو من ملف العضو إذا كان النموذج مرتبطاً.'],
                ['title' => 'تعبئة الحقول', 'body' => 'أكمل جميع الحقول المطلوبة (المحددة بعلامة *). ارفع المرفقات إن وُجدت.'],
                ['title' => 'الإرسال', 'body' => 'اضغط <span class="field">إرسال</span>. يتم حفظ الاستمارة وإرسالها للمراجعة.<span class="success">يمكنك طباعة النموذج المعبأ من صفحة التقديمات.</span>'],
            ],
            'forms.review-submissions' => [
                ['title' => 'فتح التقديمات', 'body' => 'من <span class="field">النماذج</span> > <span class="field">التقديمات</span>. يعرض جميع النماذج المُقدّمة.'],
                ['title' => 'عرض التفاصيل', 'body' => 'اضغط على أي تقديم لعرض البيانات المعبأة والمرفقات.'],
                ['title' => 'المعالجة', 'body' => 'يمكنك <span class="field">قبول</span> أو <span class="field">رفض</span> أو <span class="field">طلب تعديل</span>.<span class="info">حالة كل تقديم تظهر في قائمة التقديمات.</span>'],
            ],
            'forms.print-form' => [
                ['title' => 'اختيار النموذج', 'body' => 'من <span class="field">النماذج</span> > اختر النموذج أو التقديم المطلوب طباعته.'],
                ['title' => 'الطباعة', 'body' => 'اضغط <span class="field">طباعة</span>. يتم عرض النموذج بتنسيق جاهز للطباعة مع شعار النادي.'],
            ],
            // ── PRICING MANAGEMENT ──
            'pricing-management.setup-pricing-rules' => [
                ['title' => 'فتح التسعير', 'body' => 'من <span class="field">التسعير</span>. يعرض جميع قواعد الأسعار الحالية.'],
                ['title' => 'فئات التسعير', 'body' => 'الأسعار مصنفة حسب: نوع العضوية، الفئة العمرية، نوع الخدمة. لكل فئة سعر مستقل.'],
                ['title' => 'تطبيق الأسعار', 'body' => 'الأسعار تُطبق تلقائياً عند إنشاء طلب دفع. تغيير السعر لا يؤثر على الطلبات القائمة.<span class="warn">أي تغيير في التسعير يحتاج صلاحية المدير المالي.</span>'],
            ],
            'pricing-management.special-discounts' => [
                ['title' => 'فتح الخصومات', 'body' => 'من <span class="field">التسعير</span> > <span class="field">خصومات خاصة</span> > <span class="field">خصم جديد</span>.'],
                ['title' => 'بيانات الخصم', 'body' => 'حدد <span class="field">اسم الخصم</span>، <span class="field">النسبة أو المبلغ</span>، <span class="field">الفئة المستفيدة</span> (فرد/مجموعة/الكل).'],
                ['title' => 'الفترة والشروط', 'body' => 'حدد <span class="field">تاريخ البدء</span> و<span class="field">الانتهاء</span> والحد الأقصى للاستخدام.'],
                ['title' => 'التفعيل', 'body' => 'اضغط <span class="field">حفظ وتفعيل</span>. الخصم يُطبق تلقائياً عند الدفع.<span class="info">يمكنك تعطيل الخصم في أي وقت.</span>'],
            ],
            'pricing-management.edit-pricing' => [
                ['title' => 'اختيار قاعدة التسعير', 'body' => 'من <span class="field">التسعير</span> > اضغط <span class="field">تعديل</span> بجانب القاعدة المطلوبة.'],
                ['title' => 'تعديل المبلغ', 'body' => 'عدّل <span class="field">السعر</span> أو <span class="field">الشروط</span>. يمكنك تحديد تاريخ سريان جديد.'],
                ['title' => 'الحفظ', 'body' => 'اضغط <span class="field">حفظ</span>. السعر الجديد يسري على الطلبات الجديدة فقط.<span class="warn">الطلبات المعلقة تبقى بالسعر القديم.</span>'],
            ],
            // ── AUDIT ──
            'audit.view-audit-log' => [
                ['title' => 'فتح سجل المراجعة', 'body' => 'من القائمة: <span class="field">سجل المراجعة</span>. يعرض آخر العمليات بترتيب زمني.'],
                ['title' => 'محتوى كل سجل', 'body' => 'يعرض: <span class="field">التاريخ والوقت</span>، <span class="field">المستخدم</span>، <span class="field">نوع العملية</span>، <span class="field">الكيان المتأثر</span>، <span class="field">القيم قبل وبعد</span>.'],
                ['title' => 'التفاصيل', 'body' => 'اضغط على أي سجل لعرض التفاصيل الكاملة بما فيها القيم المتغيرة.<span class="info">هذا السجل لا يمكن تعديله — يُستخدم في المراجعة المالية والقانونية.</span>'],
            ],
            'audit.entity-history' => [
                ['title' => 'الوصول لتاريخ الكيان', 'body' => 'من ملف أي عضو/سجل > <span class="field">سجل التعديلات</span>، أو من سجل المراجعة بتحديد الكيان.'],
                ['title' => 'عرض التعديلات', 'body' => 'يعرض جميع التعديلات على هذا السجل بالترتيب الزمني: من عدّل، متى، ماذا تغير.'],
                ['title' => 'المقارنة', 'body' => 'اضغط <span class="field">مقارنة</span> بين نسختين لعرض الفروقات جنباً إلى جنب.<span class="success">مفيد لمعرفة من غيّر بيانات عضو أو دفعة.</span>'],
            ],
            'audit.filter-audit' => [
                ['title' => 'فتح الفلاتر', 'body' => 'من سجل المراجعة اضغط <span class="field">فلترة</span>.'],
                ['title' => 'معايير البحث', 'body' => 'صفّي حسب: <span class="field">الفترة</span>، <span class="field">المستخدم</span>، <span class="field">نوع العملية</span> (إنشاء/تعديل/حذف)، <span class="field">الوحدة</span>.'],
                ['title' => 'التصدير', 'body' => 'اضغط <span class="field">تصدير</span> للحصول على ملف Excel بالنتائج.<span class="info">مفيد لتقارير المراجعة الدورية.</span>'],
            ],
            // ── PLAYGROUNDS ──
            'playgrounds.create-playground' => [
                ['title' => 'إنشاء ملعب', 'body' => 'من <span class="field">الملاعب</span> > <span class="field">ملعب جديد</span>.'],
                ['title' => 'المواصفات', 'body' => 'أدخل <span class="field">الاسم</span>، <span class="field">النوع</span> (كرة قدم/تنس/كرة سلة)، <span class="field">المساحة</span>، <span class="field">السعة</span>، <span class="field">نوع الأرضية</span>.'],
                ['title' => 'ساعات التشغيل', 'body' => 'حدد ساعات الفتح والإغلاق لكل يوم وسعر الساعة.'],
                ['title' => 'الحفظ', 'body' => 'اضغط <span class="field">حفظ</span>. الملعب جاهز لإنشاء الجداول والحجوزات.<span class="info">يمكن إضافة صور ومرفقات للملعب.</span>'],
            ],
            'playgrounds.playground-schedule' => [
                ['title' => 'فتح جدول الملعب', 'body' => 'من صفحة الملعب > <span class="field">الجداول</span> > <span class="field">جدول جديد</span>.'],
                ['title' => 'تحديد الفترات', 'body' => 'قسّم اليوم إلى فترات: تدريب فرق، مباريات، إيجار خارجي، صيانة. لكل فترة حدد الوقت والمسؤول.'],
                ['title' => 'التكرار', 'body' => 'حدد أيام التكرار (يومي/أسبوعي) ومدة سريان الجدول.'],
                ['title' => 'التفعيل', 'body' => 'اضغط <span class="field">تفعيل</span>. الجدول يظهر في المرآة وتقويم الحجوزات.<span class="warn">تعديل جدول نشط يؤثر على الأيام المستقبلية فقط.</span>'],
            ],
            'playgrounds.playground-mirror' => [
                ['title' => 'فتح المرآة', 'body' => 'من الملعب > <span class="field">المرآة</span>، أو من <span class="field">الملاعب</span> > <span class="field">المرآة الحية</span>.'],
                ['title' => 'العرض', 'body' => 'تعرض حالة كل خانة زمنية: <span style="color:#16A34A">متاح</span>، <span style="color:#DC2626">محجوز</span>، <span style="color:#F59E0B">صيانة</span>. مع اسم الحاجز ونوع النشاط.'],
                ['title' => 'التنقل', 'body' => 'تنقل بين الأيام والأسابيع. اضغط على أي خانة لعرض التفاصيل أو إنشاء حجز.<span class="success">يمكن عرض المرآة على شاشة كبيرة في الاستقبال.</span>'],
            ],
            'playgrounds.playground-attendance' => [
                ['title' => 'فتح الحضور', 'body' => 'من الملعب > <span class="field">الحضور</span>. يعرض الحصص المجدولة لليوم.'],
                ['title' => 'تسجيل الحضور', 'body' => 'اختر الحصة. حدد اللاعبين الحاضرين بعلامة ✓. الغائبين يبقون بدون علامة.'],
                ['title' => 'الحفظ', 'body' => 'اضغط <span class="field">حفظ الحضور</span>. النسبة تُحسب وتظهر في تقارير المدرب.<span class="info">يمكن تعديل الحضور خلال 24 ساعة.</span>'],
            ],
            // ── SA REGISTRATION ──
            'sa-registration.registration-wizard' => [
                ['title' => 'فتح مكتب التسجيل', 'body' => 'من القائمة: <span class="field">النشاط الرياضي</span> > <span class="field">مكتب التسجيل</span>.'],
                ['title' => 'إدخال الرقم القومي', 'body' => 'أدخل الرقم القومي (14 رقم). النظام يستخرج تلقائياً: تاريخ الميلاد، العمر، النوع، المحافظة.<span class="info">النظام يكتشف تلقائياً إذا كان الشخص عضو فعال أم لا — لا حاجة لاختيار يدوي. العضو غير المسدد يُعامل كغير عضو.</span>'],
                ['title' => 'دفع استمارة الاشتراك', 'body' => 'الخطوة الأولى: سداد رسوم الاستمارة:<ul><li><span style="font-weight:bold;">100 ج.م</span> لغير الأعضاء</li><li><span style="font-weight:bold;">50 ج.م</span> للأعضاء</li></ul>يتم إرسال طلب دفع للخزينة. بعد السداد يمكن إكمال التسجيل.<span class="warn">لا يمكن التقاط الصورة أو اختيار النشاط قبل سداد الاستمارة.</span>'],
                ['title' => 'التقاط الصورة', 'body' => 'بعد سداد الاستمارة: التقط صورة عبر <span class="field">كاميرا الويب</span> أو ارفع ملف صورة. الصورة إلزامية.<span class="warn">الصورة تظهر على الاستمارة والكارت — تأكد من جودتها.</span>'],
                ['title' => 'اختيار النشاط والمجموعة', 'body' => 'اختر المجموعة المناسبة (حسب السن والنشاط). يمكنك أيضاً:<ul><li>اختيار <span class="field">3 أشهر</span> للحصول على خصم 15%</li><li>تفعيل <span class="field">خصم الأشقاء</span> إن وُجد أخ/أخت بنفس النشاط</li></ul>يظهر تلقائياً: رسوم الكارت + الاستمارة + الاشتراك مع أي خصومات مطبقة.'],
                ['title' => 'دفع الاشتراك', 'body' => 'اضغط <span class="field">إرسال للخزينة</span>. يتم إنشاء طلب دفع ثاني (منفصل عن الاستمارة) يشمل الاشتراك + الكارت + رسوم النشاط.<span class="success">بعد السداد يتم تفعيل التسجيل.</span>'],
                ['title' => 'الطباعة وإصدار الكارت', 'body' => 'بعد السداد يمكنك: <span class="field">طباعة الاستمارة</span> (A4 رسمية) و<span class="field">إنشاء الكارت</span> ثم طباعته. الكارت يحتوي على QR للدخول من البوابة.<span class="info">صلاحية الكارت تنتهي مع آخر يوم في مدة الاشتراك المدفوعة.</span>'],
            ],
            'sa-registration.card-management' => [
                ['title' => 'فتح إدارة الكروت', 'body' => 'من القائمة: <span class="field">النشاط الرياضي</span> > <span class="field">الكروت</span>.'],
                ['title' => 'البحث والفلترة', 'body' => 'ابحث بالاسم أو رقم الكارت. فلتر بالحالة: نشط، مؤقت، منتهي، موقوف، ملغى.'],
                ['title' => 'عرض تفاصيل كارت', 'body' => 'اضغط <span class="field">عرض</span> لمشاهدة: بيانات اللاعب، حالة الكارت، تاريخ الصلاحية، وسجل الدخول.'],
                ['title' => 'صلاحية الكارت', 'body' => 'الكارت ينتهي تلقائياً مع آخر يوم في مدة الاشتراك المدفوعة:<ul><li>اشتراك شهر = صلاحية شهر</li><li>اشتراك 3 أشهر = صلاحية 3 أشهر</li></ul><span class="warn">عند انتهاء الصلاحية يُرفض الكارت تلقائياً عند البوابة.</span>'],
                ['title' => 'إيقاف أو إلغاء', 'body' => '<span class="field">إيقاف</span>: تعليق مؤقت (يمكن إعادة التفعيل). <span class="field">إلغاء</span>: إلغاء نهائي لا رجعة فيه.<span class="warn">الكارت الموقوف أو الملغي يُرفض تلقائياً عند البوابة.</span>'],
                ['title' => 'إعادة الطباعة', 'body' => 'اضغط <span class="field">طباعة</span> لإصدار نسخة جديدة من الكارت. النظام يسجل عدد مرات الطباعة.'],
            ],
            'sa-registration.gate-scanning' => [
                ['title' => 'فتح البوابة', 'body' => 'من القائمة: <span class="field">النشاط الرياضي</span> > <span class="field">البوابة</span>.'],
                ['title' => 'مسح الكارت', 'body' => 'امسح QR Code بالقارئ أو أدخل رقم الكارت يدوياً. النظام يتحقق فوراً من:<ul><li>صلاحية الكارت (تاريخ الانتهاء)</li><li>حالة الكارت (نشط/موقوف/ملغى)</li><li>حالة اللاعب</li></ul>'],
                ['title' => 'نتيجة المسح', 'body' => '<span style="color:#059669;font-weight:bold;">✓ مسموح</span>: يظهر اسم اللاعب ورقم الكارت بخلفية خضراء.<br><span style="color:#DC2626;font-weight:bold;">✗ ممنوع</span>: يظهر سبب الرفض بخلفية حمراء.'],
                ['title' => 'السجل', 'body' => 'اضغط <span class="field">السجل</span> لعرض جميع عمليات المسح مع الفلاتر (التاريخ، النتيجة، البحث).<span class="info">يتم تسجيل كل عملية مسح سواء مسموح أو مرفوض.</span>'],
            ],
            'sa-registration.registration-reports' => [
                ['title' => 'فتح تقارير التسجيل', 'body' => 'من <span class="field">النشاط الرياضي</span> > <span class="field">مكتب التسجيل</span> > <span class="field">التقارير</span>.'],
                ['title' => 'اختيار الفترة', 'body' => 'حدد <span class="field">تاريخ البداية</span> و<span class="field">تاريخ النهاية</span>. يظهر ملخص:<ul><li>إجمالي التسجيلات (مكتمل/ملغي/قيد الانتظار)</li><li>إجمالي الإيرادات</li><li>الأعضاء مقابل غير الأعضاء</li><li>الكروت المصدرة</li></ul>'],
                ['title' => 'التفصيل اليومي', 'body' => 'جدول يومي يعرض عدد التسجيلات والإيرادات لكل يوم في الفترة المحددة.'],
                ['title' => 'تقارير الكروت', 'body' => 'من <span class="field">الكروت</span> > <span class="field">التقرير</span>: إحصائيات الكروت (نشط/مؤقت/منتهي/موقوف) مع توزيع حسب النوع.'],
            ],
            'sa-registration.temp-card-workflow' => [
                ['title' => 'الكارت المؤقت', 'body' => 'عند إصدار كارت بنوع <span class="field">مؤقت</span>: الصلاحية 7 أيام فقط من تاريخ الإصدار.'],
                ['title' => 'الدخول خلال المدة', 'body' => 'اللاعب يستخدم الكارت المؤقت للدخول من البوابة بشكل طبيعي خلال فترة الصلاحية.'],
                ['title' => 'انتهاء الصلاحية', 'body' => 'بعد 7 أيام يتحول الكارت تلقائياً إلى حالة <span style="color:#6B7280;font-weight:bold;">منتهي</span> ويُرفض عند البوابة.<span class="warn">يجب إصدار كارت دائم قبل انتهاء المؤقت.</span>'],
            ],
            'sa-registration.booking-wizard' => [
                ['title' => 'فتح معالج الحجز', 'body' => 'من القائمة: <span class="field">النشاط الرياضي</span> > <span class="field">معالج الحجز</span>. هذا المعالج مصمم للعمل باللمس على شاشة الاستقبال.'],
                ['title' => 'تحديد الشخص', 'body' => 'أدخل الرقم القومي (14 رقم) — النظام يكتشف تلقائياً إذا كان عضو فعال (مسدد الاشتراك) أو غير عضو. يُطبق التسعير المناسب تلقائياً.<span class="info">يمكن إدخال الاسم فقط بدون رقم قومي للزوار — يُعامل كغير عضو.</span>'],
                ['title' => 'اختيار المرفق', 'body' => 'تظهر كروت المرافق المتاحة (ملاعب، أحواض سباحة، كورتات). اضغط على الوحدة المطلوبة.<span class="info">الوحدات المغلقة أو المحجوبة لا تظهر.</span>'],
                ['title' => 'اختيار الموعد', 'body' => 'يعرض شبكة المواعيد:<ul><li><span style="color:#059669;">أخضر</span> = متاح</li><li><span style="color:#DC2626;">أحمر</span> = محجوز</li><li><span style="color:#D97706;">أصفر</span> = متاح جزئياً (وحدات مشتركة)</li></ul>اضغط الموعد المطلوب. حدد عدد المشاركين. يظهر السعر تلقائياً.'],
                ['title' => 'تأكيد وإرسال للخزينة', 'body' => 'يعرض ملخص: الشخص، المرفق، الموعد، والسعر الإجمالي. اضغط <span class="field">تأكيد وإرسال للخزينة</span>.<span class="success">يتم إنشاء الحجز + طلب دفع. بعد التحصيل من الخزينة يصبح الحجز مؤكداً.</span>'],
            ],
            'sa-registration.academy-pricing' => [
                ['title' => 'فتح أسعار الأكاديميات', 'body' => 'من القائمة: <span class="field">النشاط الرياضي</span> > <span class="field">أسعار الأكاديميات</span>. تعرض قائمة كل الأكاديميات مع نطاق الأسعار.'],
                ['title' => 'عرض تفاصيل أكاديمية', 'body' => 'اضغط <span class="field">عرض</span> بجانب أي أكاديمية. يظهر:<ul><li>أسعار الاشتراكات (عضو/غير عضو)</li><li>أسعار الفرق</li><li>التدريب الخاص</li><li>كروت الحصص</li></ul>'],
                ['title' => 'كروت حصص السباحة', 'body' => 'في نفس الصفحة يظهر جدول كروت الحصص: الكارت (1-24 حصة) مع السعر الإجمالي وسعر الحصة الواحدة.'],
                ['title' => 'الخصومات التلقائية', 'body' => 'عند التسجيل من المعالج:<ul><li><span style="color:#059669;font-weight:bold;">15%</span> عند اختيار 3 أشهر مقدماً</li><li><span style="color:#7C3AED;font-weight:bold;">خصم أشقاء</span> عند وجود أخ/أخت بنفس النشاط (حسب اللعبة)</li></ul><span class="info">الخصومات تُحسب وتُعرض تلقائياً في خطوة اختيار النشاط.</span>'],
                ['title' => 'فترات مجانية للأعضاء', 'body' => 'الأعضاء يحصلون على فترات مجانية حسب الموسم:<ul><li>شتوي: من بداية الموسم حتى نهاية فبراير</li><li>صيفي: من يونيو حتى نهاية سبتمبر</li></ul><span class="info">هذه الفترات تظهر في قواعد الخصم فقط — التطبيق يكون من مكتب التسجيل.</span>'],
            ],
        ];
    }

    public static function getCategories(string $section): array
    {
        return match ($section) {
            'accounting' => self::accountingCategories(),
            'hr' => self::hrCategories(),
            'procurement' => self::procurementCategories(),
            'inventory' => self::inventoryCategories(),
            'cashier' => self::cashierCategories(),
            'sales' => self::salesCategories(),
            'payments' => self::paymentsCategories(),
            'coaches' => self::coachesCategories(),
            'carnets' => self::carnetsCategories(),
            'facilities' => self::facilitiesCategories(),
            'tournaments' => self::tournamentsCategories(),
            'rentals' => self::rentalsCategories(),
            'support' => self::supportCategories(),
            'settings' => self::settingsCategories(),
            'fines' => self::finesCategories(),
            'roles' => self::rolesCategories(),
            'interviews' => self::interviewsCategories(),
            'installments' => self::installmentsCategories(),
            'reports' => self::reportsCategories(),
            'seasonal' => self::seasonalCategories(),
            'documents' => self::documentsCategories(),
            'branches' => self::branchesCategories(),
            'news' => self::newsCategories(),
            'workflow' => self::workflowCategories(),
            'subscriptions' => self::subscriptionsCategories(),
            'reservations' => self::reservationsCategories(),
            'match-center' => self::matchCenterCategories(),
            'pool-management' => self::poolManagementCategories(),
            'users' => self::usersCategories(),
            'notifications' => self::notificationsCategories(),
            'player-affairs' => self::playerAffairsCategories(),
            'forms' => self::formsCategories(),
            'pricing-management' => self::pricingManagementCategories(),
            'audit' => self::auditCategories(),
            'playgrounds' => self::playgroundsCategories(),
            'sa-registration' => self::saRegistrationCategories(),
            'parents' => self::parentsCategories(),
            'medical-board' => self::medicalBoardCategories(),
            'access-matrix' => self::accessMatrixCategories(),
            'rules' => self::rulesCategories(),
            default => [],
        };
    }

    // ─────────────────────────────────────────────────────────────────────
    // ACCOUNTING
    // ─────────────────────────────────────────────────────────────────────

    private static function accountingTutorials(): array
    {
        return [
            'setup-chart-of-accounts' => [
                'title' => 'إعداد شجرة الحسابات',
                'subtitle' => 'إنشاء الحسابات الرئيسية والفرعية',
                'icon' => 'list-tree',
                'color' => '#059669',
                'category' => 'setup',
                'order' => 1,
            ],
            'create-journal-entry' => [
                'title' => 'إنشاء قيد يومية',
                'subtitle' => 'تسجيل قيد مدين ودائن مع المرفقات',
                'icon' => 'book-open',
                'color' => '#3B82F6',
                'category' => 'operations',
                'order' => 2,
            ],
            'bank-reconciliation' => [
                'title' => 'التسوية البنكية',
                'subtitle' => 'مطابقة كشف البنك مع الحسابات',
                'icon' => 'git-compare',
                'color' => '#7C3AED',
                'category' => 'operations',
                'order' => 3,
            ],
            'trial-balance-report' => [
                'title' => 'ميزان المراجعة',
                'subtitle' => 'استخراج ميزان المراجعة لفترة محددة',
                'icon' => 'scale',
                'color' => '#D97706',
                'category' => 'reports',
                'order' => 4,
            ],
            'budget-management' => [
                'title' => 'إدارة الميزانيات',
                'subtitle' => 'إنشاء ميزانية ومتابعة الصرف مقابل المخطط',
                'icon' => 'pie-chart',
                'color' => '#DC2626',
                'category' => 'reports',
                'order' => 5,
            ],
            'fiscal-year-setup' => [
                'title' => 'إعداد السنة المالية',
                'subtitle' => 'إنشاء سنة مالية جديدة وتحديد فتراتها',
                'icon' => 'calendar',
                'color' => '#0891B2',
                'category' => 'setup',
                'order' => 6,
            ],
            'cost-centers' => [
                'title' => 'مراكز التكلفة',
                'subtitle' => 'إنشاء مراكز تكلفة وربطها بالأقسام',
                'icon' => 'target',
                'color' => '#F59E0B',
                'category' => 'setup',
                'order' => 7,
            ],
            'opening-entries' => [
                'title' => 'القيود الافتتاحية',
                'subtitle' => 'إدخال الأرصدة الافتتاحية عند بدء النظام',
                'icon' => 'file-input',
                'color' => '#7C3AED',
                'category' => 'setup',
                'order' => 8,
            ],
            'period-closing' => [
                'title' => 'إقفال الفترة',
                'subtitle' => 'إقفال فترة محاسبية ومنع التعديل عليها',
                'icon' => 'lock',
                'color' => '#DC2626',
                'category' => 'operations',
                'order' => 9,
            ],
            'financial-instruments' => [
                'title' => 'الأوراق المالية',
                'subtitle' => 'إدارة الشيكات والكمبيالات والسندات',
                'icon' => 'file-check',
                'color' => '#059669',
                'category' => 'operations',
                'order' => 10,
            ],
        ];
    }

    private static function accountingCategories(): array
    {
        return [
            'setup' => ['label' => 'الإعداد', 'icon' => 'settings', 'color' => '#059669'],
            'operations' => ['label' => 'العمليات', 'icon' => 'pen-tool', 'color' => '#3B82F6'],
            'reports' => ['label' => 'التقارير المالية', 'icon' => 'bar-chart-3', 'color' => '#D97706'],
        ];
    }

    // ─────────────────────────────────────────────────────────────────────
    // HR
    // ─────────────────────────────────────────────────────────────────────

    private static function hrTutorials(): array
    {
        return [
            'add-employee' => [
                'title' => 'إضافة موظف جديد',
                'subtitle' => 'إنشاء ملف موظف مع البيانات والعقد',
                'icon' => 'user-plus',
                'color' => '#7C3AED',
                'category' => 'setup',
                'order' => 1,
            ],
            'attendance-management' => [
                'title' => 'إدارة الحضور والانصراف',
                'subtitle' => 'تسجيل الحضور ومراجعة التأخيرات',
                'icon' => 'clock',
                'color' => '#059669',
                'category' => 'operations',
                'order' => 2,
            ],
            'leave-request' => [
                'title' => 'طلب إجازة',
                'subtitle' => 'تقديم طلب إجازة والموافقة عليه',
                'icon' => 'calendar-off',
                'color' => '#F59E0B',
                'category' => 'operations',
                'order' => 3,
            ],
            'run-payroll' => [
                'title' => 'تشغيل مسير الرواتب',
                'subtitle' => 'حساب الرواتب الشهرية مع الخصومات والبدلات',
                'icon' => 'banknote',
                'color' => '#DC2626',
                'category' => 'payroll',
                'order' => 4,
            ],
            'end-of-service' => [
                'title' => 'نهاية الخدمة',
                'subtitle' => 'حساب مستحقات نهاية الخدمة وإنهاء العقد',
                'icon' => 'log-out',
                'color' => '#6B7280',
                'category' => 'payroll',
                'order' => 5,
            ],
            'create-contract' => [
                'title' => 'إنشاء عقد عمل',
                'subtitle' => 'تسجيل عقد جديد مع المدة والراتب',
                'icon' => 'file-signature',
                'color' => '#3B82F6',
                'category' => 'setup',
                'order' => 6,
            ],
            'insurance-management' => [
                'title' => 'التأمينات الاجتماعية',
                'subtitle' => 'إدارة اشتراكات التأمينات وإصدار الاستمارات',
                'icon' => 'shield-check',
                'color' => '#0891B2',
                'category' => 'payroll',
                'order' => 7,
            ],
            'disciplinary-action' => [
                'title' => 'الإجراءات التأديبية',
                'subtitle' => 'تسجيل مخالفة موظف وتطبيق الجزاء',
                'icon' => 'alert-triangle',
                'color' => '#DC2626',
                'category' => 'operations',
                'order' => 8,
            ],
            'employee-loan' => [
                'title' => 'سلفة موظف',
                'subtitle' => 'إنشاء سلفة وجدولة الخصم من الراتب',
                'icon' => 'banknote',
                'color' => '#F59E0B',
                'category' => 'payroll',
                'order' => 9,
            ],
            'overtime-management' => [
                'title' => 'إدارة الإضافي',
                'subtitle' => 'تسجيل ساعات العمل الإضافية واعتمادها',
                'icon' => 'timer',
                'color' => '#059669',
                'category' => 'operations',
                'order' => 10,
            ],
        ];
    }

    private static function hrCategories(): array
    {
        return [
            'setup' => ['label' => 'إعداد الموظفين', 'icon' => 'user-plus', 'color' => '#7C3AED'],
            'operations' => ['label' => 'العمليات اليومية', 'icon' => 'clock', 'color' => '#059669'],
            'payroll' => ['label' => 'الرواتب والمستحقات', 'icon' => 'banknote', 'color' => '#DC2626'],
        ];
    }

    // ─────────────────────────────────────────────────────────────────────
    // PROCUREMENT
    // ─────────────────────────────────────────────────────────────────────

    private static function procurementTutorials(): array
    {
        return [
            'create-purchase-requisition' => [
                'title' => 'إنشاء طلب شراء',
                'subtitle' => 'تقديم طلب شراء مع المواصفات والكميات',
                'icon' => 'file-plus',
                'color' => '#D97706',
                'category' => 'operations',
                'order' => 1,
            ],
            'receive-goods' => [
                'title' => 'استلام البضائع',
                'subtitle' => 'تسجيل إذن استلام ومطابقة الكميات',
                'icon' => 'package-check',
                'color' => '#059669',
                'category' => 'operations',
                'order' => 2,
            ],
            'vendor-invoice' => [
                'title' => 'فاتورة المورد',
                'subtitle' => 'تسجيل فاتورة المورد وربطها بالاستلام',
                'icon' => 'file-text',
                'color' => '#3B82F6',
                'category' => 'operations',
                'order' => 3,
            ],
            'vendor-payment' => [
                'title' => 'دفع المورد',
                'subtitle' => 'إصدار أمر صرف للمورد',
                'icon' => 'send',
                'color' => '#7C3AED',
                'category' => 'payments',
                'order' => 4,
            ],
            'return-to-vendor' => [
                'title' => 'مرتجع للمورد',
                'subtitle' => 'إرجاع بضائع معيبة واسترداد القيمة',
                'icon' => 'undo-2',
                'color' => '#DC2626',
                'category' => 'payments',
                'order' => 5,
            ],
            'request-for-quotation' => [
                'title' => 'طلب عروض أسعار',
                'subtitle' => 'إرسال طلب عرض لعدة موردين ومقارنة العروض',
                'icon' => 'mail',
                'color' => '#0891B2',
                'category' => 'operations',
                'order' => 6,
            ],
        ];
    }

    private static function procurementCategories(): array
    {
        return [
            'operations' => ['label' => 'دورة الشراء', 'icon' => 'shopping-cart', 'color' => '#D97706'],
            'payments' => ['label' => 'المدفوعات والمرتجعات', 'icon' => 'credit-card', 'color' => '#7C3AED'],
        ];
    }

    // ─────────────────────────────────────────────────────────────────────
    // INVENTORY
    // ─────────────────────────────────────────────────────────────────────

    private static function inventoryTutorials(): array
    {
        return [
            'setup-warehouse' => [
                'title' => 'إنشاء مخزن',
                'subtitle' => 'تعريف مخزن جديد مع الموقع والمسؤول',
                'icon' => 'warehouse',
                'color' => '#0891B2',
                'category' => 'setup',
                'order' => 1,
            ],
            'add-item' => [
                'title' => 'إضافة صنف',
                'subtitle' => 'تعريف صنف مع الفئة ووحدة القياس',
                'icon' => 'package',
                'color' => '#059669',
                'category' => 'setup',
                'order' => 2,
            ],
            'stock-movement' => [
                'title' => 'حركة مخزنية',
                'subtitle' => 'تحويل أصناف بين المخازن أو صرف داخلي',
                'icon' => 'arrow-right-left',
                'color' => '#F59E0B',
                'category' => 'operations',
                'order' => 3,
            ],
            'stock-audit' => [
                'title' => 'جرد المخزون',
                'subtitle' => 'إجراء جرد فعلي ومعالجة الفروقات',
                'icon' => 'clipboard-check',
                'color' => '#DC2626',
                'category' => 'operations',
                'order' => 4,
            ],
            'opening-balance' => [
                'title' => 'أرصدة افتتاحية',
                'subtitle' => 'إدخال الأرصدة الافتتاحية عند بدء التشغيل',
                'icon' => 'database',
                'color' => '#7C3AED',
                'category' => 'setup',
                'order' => 5,
            ],
            'stock-transfer' => [
                'title' => 'تحويل بين المخازن',
                'subtitle' => 'نقل أصناف من مخزن لآخر مع إذن تحويل',
                'icon' => 'truck',
                'color' => '#3B82F6',
                'category' => 'operations',
                'order' => 6,
            ],
            'purchase-order' => [
                'title' => 'أمر شراء',
                'subtitle' => 'إنشاء أمر شراء للمخزون واستلام البضاعة',
                'icon' => 'shopping-cart',
                'color' => '#D97706',
                'category' => 'operations',
                'order' => 7,
            ],
            'manage-suppliers' => [
                'title' => 'إدارة الموردين',
                'subtitle' => 'إضافة مورد وتسجيل بياناته وتاريخ التعامل',
                'icon' => 'building-2',
                'color' => '#059669',
                'category' => 'setup',
                'order' => 8,
            ],
            'asset-management' => [
                'title' => 'إدارة الأصول الثابتة',
                'subtitle' => 'تسجيل أصل ثابت ومتابعة الإهلاك والعهدة',
                'icon' => 'hard-drive',
                'color' => '#DC2626',
                'category' => 'operations',
                'order' => 9,
            ],
        ];
    }

    private static function inventoryCategories(): array
    {
        return [
            'setup' => ['label' => 'الإعداد', 'icon' => 'settings', 'color' => '#0891B2'],
            'operations' => ['label' => 'العمليات', 'icon' => 'arrow-right-left', 'color' => '#F59E0B'],
        ];
    }

    // ─────────────────────────────────────────────────────────────────────
    // CASHIER
    // ─────────────────────────────────────────────────────────────────────

    private static function cashierTutorials(): array
    {
        return [
            'session-open' => [
                'title' => 'فتح وردية خزنة العضويات',
                'subtitle' => 'فتح وردية جديدة للبدء في التحصيل',
                'icon' => 'unlock',
                'color' => '#059669',
                'category' => 'sessions',
                'order' => 1,
            ],
            'process-payment-queue' => [
                'title' => 'معالجة طابور الدفع',
                'subtitle' => 'استعراض الطابور وتحصيل المدفوعات بالترتيب',
                'icon' => 'list-ordered',
                'color' => '#059669',
                'category' => 'operations',
                'order' => 2,
            ],
            'session-close' => [
                'title' => 'إغلاق الوردية والمراجعة',
                'subtitle' => 'تقفيل الوردية ومراجعة إجمالي التحصيلات',
                'icon' => 'lock',
                'color' => '#D97706',
                'category' => 'sessions',
                'order' => 3,
            ],
            'settlement-flow' => [
                'title' => 'ترحيل المبالغ للخزنة الرئيسية',
                'subtitle' => 'إنشاء تسوية وتحويل المبالغ من الخزنة الفرعية للرئيسية',
                'icon' => 'arrow-up-right',
                'color' => '#2563EB',
                'category' => 'settlements',
                'order' => 4,
            ],
            'custody-tracking' => [
                'title' => 'متابعة العهدة',
                'subtitle' => 'الاطلاع على رصيد النقدية المتاحة وسجل الحركات',
                'icon' => 'wallet',
                'color' => '#7C3AED',
                'category' => 'custody',
                'order' => 5,
            ],
            'void-payment' => [
                'title' => 'إلغاء دفعة',
                'subtitle' => 'إلغاء دفعة خاطئة مع ذكر السبب',
                'icon' => 'x-circle',
                'color' => '#DC2626',
                'category' => 'operations',
                'order' => 6,
            ],
            'check-management' => [
                'title' => 'إدارة الشيكات',
                'subtitle' => 'تسجيل شيك وتتبع حالته حتى التحصيل',
                'icon' => 'file-check',
                'color' => '#7C3AED',
                'category' => 'checks',
                'order' => 7,
            ],
            'daily-report' => [
                'title' => 'التقرير اليومي',
                'subtitle' => 'إصدار تقرير نهاية اليوم مع التفاصيل',
                'icon' => 'file-bar-chart',
                'color' => '#3B82F6',
                'category' => 'reports',
                'order' => 8,
            ],
        ];
    }

    private static function cashierCategories(): array
    {
        return [
            'sessions' => ['label' => 'الورديات', 'icon' => 'clock', 'color' => '#059669'],
            'operations' => ['label' => 'العمليات', 'icon' => 'landmark', 'color' => '#059669'],
            'settlements' => ['label' => 'التسويات', 'icon' => 'arrow-up-right', 'color' => '#2563EB'],
            'custody' => ['label' => 'العهدة', 'icon' => 'wallet', 'color' => '#7C3AED'],
            'checks' => ['label' => 'الشيكات', 'icon' => 'file-check', 'color' => '#7C3AED'],
            'reports' => ['label' => 'التقارير', 'icon' => 'bar-chart-3', 'color' => '#3B82F6'],
        ];
    }

    // ─────────────────────────────────────────────────────────────────────
    // SALES
    // ─────────────────────────────────────────────────────────────────────

    private static function salesTutorials(): array
    {
        return [
            'pos-transaction' => [
                'title' => 'عملية بيع (POS)',
                'subtitle' => 'إتمام عملية بيع من نقطة البيع',
                'icon' => 'shopping-bag',
                'color' => '#DC2626',
                'category' => 'operations',
                'order' => 1,
            ],
            'create-package' => [
                'title' => 'إنشاء باقة',
                'subtitle' => 'تعريف باقة منتجات أو خدمات بسعر خاص',
                'icon' => 'gift',
                'color' => '#7C3AED',
                'category' => 'setup',
                'order' => 2,
            ],
            'sales-commission' => [
                'title' => 'عمولات المبيعات',
                'subtitle' => 'حساب عمولات مندوبي المبيعات',
                'icon' => 'percent',
                'color' => '#059669',
                'category' => 'reports',
                'order' => 3,
            ],
            'daily-sales-report' => [
                'title' => 'تقرير المبيعات اليومي',
                'subtitle' => 'ملخص مبيعات اليوم حسب الفئة والمندوب',
                'icon' => 'trending-up',
                'color' => '#F59E0B',
                'category' => 'reports',
                'order' => 4,
            ],
            'referral-tracking' => [
                'title' => 'تتبع الإحالات',
                'subtitle' => 'ربط الأعضاء الجدد بموظف المبيعات المُحيل وحساب العمولة',
                'icon' => 'user-plus',
                'color' => '#0891B2',
                'category' => 'operations',
                'order' => 5,
            ],
        ];
    }

    private static function salesCategories(): array
    {
        return [
            'setup' => ['label' => 'الإعداد', 'icon' => 'settings', 'color' => '#7C3AED'],
            'operations' => ['label' => 'عمليات البيع', 'icon' => 'shopping-bag', 'color' => '#DC2626'],
            'reports' => ['label' => 'التقارير', 'icon' => 'trending-up', 'color' => '#F59E0B'],
        ];
    }

    // ─────────────────────────────────────────────────────────────────────
    // PAYMENTS
    // ─────────────────────────────────────────────────────────────────────

    private static function paymentsTutorials(): array
    {
        return [
            'payment-types-overview' => [
                'title' => 'أنواع المدفوعات',
                'subtitle' => 'استعراض طرق الدفع المتاحة وإعداداتها',
                'icon' => 'wallet',
                'color' => '#2563EB',
                'category' => 'setup',
                'order' => 1,
            ],
            'issue-receipt' => [
                'title' => 'إصدار إيصال',
                'subtitle' => 'إنشاء إيصال دفع وطباعته',
                'icon' => 'receipt',
                'color' => '#059669',
                'category' => 'operations',
                'order' => 2,
            ],
            'void-workflow' => [
                'title' => 'سير عمل الإلغاء',
                'subtitle' => 'إلغاء إيصال مع سلسلة الموافقات',
                'icon' => 'x-octagon',
                'color' => '#DC2626',
                'category' => 'operations',
                'order' => 3,
            ],
        ];
    }

    private static function paymentsCategories(): array
    {
        return [
            'setup' => ['label' => 'الإعداد', 'icon' => 'settings', 'color' => '#2563EB'],
            'operations' => ['label' => 'العمليات', 'icon' => 'credit-card', 'color' => '#059669'],
        ];
    }

    // ─────────────────────────────────────────────────────────────────────
    // COACHES
    // ─────────────────────────────────────────────────────────────────────

    private static function coachesTutorials(): array
    {
        return [
            'register-coach' => [
                'title' => 'تسجيل مدرب جديد',
                'subtitle' => 'إضافة مدرب مع بياناته وشهاداته',
                'icon' => 'user-plus',
                'color' => '#16A34A',
                'category' => 'setup',
                'order' => 1,
            ],
            'assign-discipline' => [
                'title' => 'تخصيص مدرب للعبة',
                'subtitle' => 'ربط المدرب بالألعاب الرياضية التي يدربها',
                'icon' => 'link',
                'color' => '#3B82F6',
                'category' => 'setup',
                'order' => 2,
            ],
            'coach-schedule' => [
                'title' => 'جدول المدرب',
                'subtitle' => 'إعداد أوقات التوفر والحجز',
                'icon' => 'calendar',
                'color' => '#F59E0B',
                'category' => 'operations',
                'order' => 3,
            ],
            'coach-performance' => [
                'title' => 'تقييم أداء المدرب',
                'subtitle' => 'مراجعة التقييمات وإحصائيات الحضور',
                'icon' => 'star',
                'color' => '#DC2626',
                'category' => 'reports',
                'order' => 4,
            ],
            'coach-type-academy' => [
                'title' => 'نوع المدرب وربط الأكاديمية',
                'subtitle' => 'تحديد مستقل/أكاديمية/موظف وربط بأكاديمية',
                'icon' => 'building-2',
                'color' => '#7C3AED',
                'category' => 'setup',
                'order' => 5,
            ],
            'guarantee-report' => [
                'title' => 'تقرير الحد الأدنى المضمون',
                'subtitle' => 'مقارنة إيرادات الأكاديميات بالحد المضمون',
                'icon' => 'shield-check',
                'color' => '#0284C7',
                'category' => 'reports',
                'order' => 6,
            ],
        ];
    }

    private static function coachesCategories(): array
    {
        return [
            'setup' => ['label' => 'التسجيل والإعداد', 'icon' => 'user-plus', 'color' => '#16A34A'],
            'operations' => ['label' => 'الجدولة', 'icon' => 'calendar', 'color' => '#F59E0B'],
            'reports' => ['label' => 'الأداء والتقارير', 'icon' => 'star', 'color' => '#DC2626'],
        ];
    }

    // ─────────────────────────────────────────────────────────────────────
    // CARNETS
    // ─────────────────────────────────────────────────────────────────────

    private static function carnetsTutorials(): array
    {
        return [
            'carnet-issuance-conditions' => [
                'title' => 'شروط إصدار الكارنيه',
                'subtitle' => 'المتطلبات الواجب استيفاؤها قبل الطباعة',
                'icon' => 'check-square',
                'color' => '#0284C7',
                'category' => 'setup',
                'order' => 1,
            ],
            'print-carnet' => [
                'title' => 'طباعة الكارنيه',
                'subtitle' => 'إصدار وطباعة كارنيه العضو',
                'icon' => 'printer',
                'color' => '#059669',
                'category' => 'operations',
                'order' => 2,
            ],
            'deactivate-carnet' => [
                'title' => 'إلغاء كارنيه',
                'subtitle' => 'إيقاف كارنيه مفقود أو تالف وإعادة إصدار',
                'icon' => 'ban',
                'color' => '#DC2626',
                'category' => 'operations',
                'order' => 3,
            ],
            'dependent-carnet-issuance' => [
                'title' => 'كارنيه التابعين',
                'subtitle' => 'إصدار كارنيه منفصل لزوج/أبناء/مؤقتين',
                'icon' => 'users',
                'color' => '#7C3AED',
                'category' => 'operations',
                'order' => 4,
            ],
            'guest-entry' => [
                'title' => 'دخول الزوار',
                'subtitle' => 'إصدار تصريح دخول مؤقت لضيف',
                'icon' => 'door-open',
                'color' => '#F59E0B',
                'category' => 'operations',
                'order' => 5,
            ],
        ];
    }

    private static function carnetsCategories(): array
    {
        return [
            'setup' => ['label' => 'الشروط والإعداد', 'icon' => 'check-square', 'color' => '#0284C7'],
            'operations' => ['label' => 'العمليات', 'icon' => 'printer', 'color' => '#059669'],
        ];
    }

    // ─────────────────────────────────────────────────────────────────────
    // FACILITIES
    // ─────────────────────────────────────────────────────────────────────

    private static function facilitiesTutorials(): array
    {
        return [
            'create-facility' => [
                'title' => 'إنشاء مرفق',
                'subtitle' => 'تعريف مرفق جديد (ملعب، صالة، حمام سباحة)',
                'icon' => 'building',
                'color' => '#4F46E5',
                'category' => 'setup',
                'order' => 1,
            ],
            'manage-units' => [
                'title' => 'إدارة الوحدات',
                'subtitle' => 'إضافة ملاعب فرعية أو حارات أو قاعات',
                'icon' => 'layers',
                'color' => '#059669',
                'category' => 'setup',
                'order' => 2,
            ],
            'maintenance-schedule' => [
                'title' => 'جدولة الصيانة',
                'subtitle' => 'إنشاء أمر صيانة وحجب المرفق مؤقتاً',
                'icon' => 'wrench',
                'color' => '#F59E0B',
                'category' => 'operations',
                'order' => 3,
            ],
            'booking-rules' => [
                'title' => 'قواعد الحجز',
                'subtitle' => 'إعداد سياسات الحجز والإلغاء والأولوية',
                'icon' => 'shield-check',
                'color' => '#DC2626',
                'category' => 'setup',
                'order' => 4,
            ],
            'locker-setup' => [
                'title' => 'إعداد اللوكرات',
                'subtitle' => 'تعريف اللوكرات وربطها بالرياضة أو المنشأة',
                'icon' => 'lock',
                'color' => '#7C3AED',
                'category' => 'setup',
                'order' => 5,
            ],
            'locker-rental' => [
                'title' => 'تأجير لوكر',
                'subtitle' => 'إنشاء عقد إيجار لوكر شهري أو سنوي',
                'icon' => 'key',
                'color' => '#059669',
                'category' => 'operations',
                'order' => 6,
            ],
            'locker-eviction' => [
                'title' => 'محضر فض لوكر',
                'subtitle' => 'إخلاء لوكر بعد انتهاء فترة السماح بدون تجديد',
                'icon' => 'alert-triangle',
                'color' => '#DC2626',
                'category' => 'operations',
                'order' => 7,
            ],
            'locker-payment' => [
                'title' => 'دفع إيجار لوكر',
                'subtitle' => 'تحصيل إيجار اللوكر عبر الخزنة الفرعية',
                'icon' => 'banknote',
                'color' => '#10B981',
                'category' => 'operations',
                'order' => 8,
            ],
            'locker-renewal' => [
                'title' => 'تجديد إيجار لوكر',
                'subtitle' => 'تمديد فترة الإيجار ودفع فرق التجديد',
                'icon' => 'refresh-cw',
                'color' => '#3B82F6',
                'category' => 'operations',
                'order' => 9,
            ],
        ];
    }

    private static function facilitiesCategories(): array
    {
        return [
            'setup' => ['label' => 'الإعداد والتهيئة', 'icon' => 'building', 'color' => '#4F46E5'],
            'operations' => ['label' => 'التشغيل والصيانة', 'icon' => 'wrench', 'color' => '#F59E0B'],
        ];
    }

    // ─────────────────────────────────────────────────────────────────────
    // TOURNAMENTS
    // ─────────────────────────────────────────────────────────────────────

    private static function tournamentsTutorials(): array
    {
        return [
            'create-tournament' => [
                'title' => 'إنشاء بطولة',
                'subtitle' => 'تعريف بطولة جديدة مع القوانين والجوائز',
                'icon' => 'trophy',
                'color' => '#CA8A04',
                'category' => 'setup',
                'order' => 1,
            ],
            'tournament-registration' => [
                'title' => 'تسجيل المشاركين',
                'subtitle' => 'فتح التسجيل وقبول اللاعبين أو الفرق',
                'icon' => 'user-plus',
                'color' => '#059669',
                'category' => 'operations',
                'order' => 2,
            ],
            'generate-bracket' => [
                'title' => 'توليد القرعة',
                'subtitle' => 'إنشاء شجرة المباريات تلقائياً',
                'icon' => 'git-branch',
                'color' => '#3B82F6',
                'category' => 'operations',
                'order' => 3,
            ],
            'record-match-result' => [
                'title' => 'تسجيل نتيجة مباراة',
                'subtitle' => 'إدخال النتيجة وتحديث الترتيب تلقائياً',
                'icon' => 'check-circle',
                'color' => '#DC2626',
                'category' => 'operations',
                'order' => 4,
            ],
        ];
    }

    private static function tournamentsCategories(): array
    {
        return [
            'setup' => ['label' => 'إعداد البطولة', 'icon' => 'trophy', 'color' => '#CA8A04'],
            'operations' => ['label' => 'إدارة المنافسات', 'icon' => 'swords', 'color' => '#3B82F6'],
        ];
    }

    // ─────────────────────────────────────────────────────────────────────
    // RENTALS
    // ─────────────────────────────────────────────────────────────────────

    private static function rentalsTutorials(): array
    {
        return [
            'setup-rental-entity' => [
                'title' => 'إعداد وحدة إيجارية',
                'subtitle' => 'تعريف محل أو مكتب قابل للإيجار',
                'icon' => 'home',
                'color' => '#9333EA',
                'category' => 'setup',
                'order' => 1,
            ],
            'create-rental-contract' => [
                'title' => 'إنشاء عقد إيجار',
                'subtitle' => 'تسجيل عقد مع المدة والقيمة والشروط',
                'icon' => 'file-signature',
                'color' => '#059669',
                'category' => 'operations',
                'order' => 2,
            ],
            'rental-deposit' => [
                'title' => 'التأمين والودائع',
                'subtitle' => 'تحصيل تأمين واستردادها عند انتهاء العقد',
                'icon' => 'lock',
                'color' => '#F59E0B',
                'category' => 'operations',
                'order' => 3,
            ],
            'rental-invoicing' => [
                'title' => 'فوترة الإيجار',
                'subtitle' => 'إصدار فواتير شهرية ومتابعة السداد',
                'icon' => 'receipt',
                'color' => '#DC2626',
                'category' => 'financial',
                'order' => 4,
            ],
        ];
    }

    private static function rentalsCategories(): array
    {
        return [
            'setup' => ['label' => 'الإعداد', 'icon' => 'home', 'color' => '#9333EA'],
            'operations' => ['label' => 'العقود', 'icon' => 'file-signature', 'color' => '#059669'],
            'financial' => ['label' => 'المالي', 'icon' => 'receipt', 'color' => '#DC2626'],
        ];
    }

    // ─────────────────────────────────────────────────────────────────────
    // SUPPORT
    // ─────────────────────────────────────────────────────────────────────

    private static function supportTutorials(): array
    {
        return [
            'create-ticket' => [
                'title' => 'إنشاء تذكرة دعم',
                'subtitle' => 'فتح تذكرة جديدة مع وصف المشكلة',
                'icon' => 'ticket',
                'color' => '#0D9488',
                'category' => 'operations',
                'order' => 1,
            ],
            'assign-ticket' => [
                'title' => 'تعيين التذكرة',
                'subtitle' => 'توزيع التذكرة على فني الدعم المناسب',
                'icon' => 'user-check',
                'color' => '#3B82F6',
                'category' => 'operations',
                'order' => 2,
            ],
            'resolve-ticket' => [
                'title' => 'حل التذكرة وإغلاقها',
                'subtitle' => 'تسجيل الحل وإغلاق التذكرة مع التقييم',
                'icon' => 'check-circle',
                'color' => '#059669',
                'category' => 'operations',
                'order' => 3,
            ],
            'sla-monitoring' => [
                'title' => 'متابعة مستوى الخدمة',
                'subtitle' => 'مراقبة الالتزام باتفاقية مستوى الخدمة (SLA)',
                'icon' => 'timer',
                'color' => '#DC2626',
                'category' => 'reports',
                'order' => 4,
            ],
        ];
    }

    private static function supportCategories(): array
    {
        return [
            'operations' => ['label' => 'إدارة التذاكر', 'icon' => 'ticket', 'color' => '#0D9488'],
            'reports' => ['label' => 'المتابعة', 'icon' => 'timer', 'color' => '#DC2626'],
        ];
    }

    // ─────────────────────────────────────────────────────────────────────
    // SETTINGS
    // ─────────────────────────────────────────────────────────────────────

    private static function settingsTutorials(): array
    {
        return [
            'system-configuration' => [
                'title' => 'الإعدادات العامة للنظام',
                'subtitle' => 'ضبط اسم النادي والمنطقة الزمنية والعملة',
                'icon' => 'sliders',
                'color' => '#6B7280',
                'category' => 'general',
                'order' => 1,
            ],
            'branding-setup' => [
                'title' => 'إعداد الهوية البصرية',
                'subtitle' => 'رفع الشعار وضبط الألوان والخطوط',
                'icon' => 'palette',
                'color' => '#8B5CF6',
                'category' => 'general',
                'order' => 2,
            ],
            'receipt-design' => [
                'title' => 'تصميم الإيصالات',
                'subtitle' => 'تخصيص تنسيق الإيصالات والفواتير المطبوعة',
                'icon' => 'printer',
                'color' => '#059669',
                'category' => 'customization',
                'order' => 3,
            ],
            'appearance' => [
                'title' => 'المظهر والتخصيص',
                'subtitle' => 'تغيير ألوان النظام ونمط القائمة والخطوط والحركات',
                'icon' => 'paintbrush',
                'color' => '#8B5CF6',
                'category' => 'customization',
                'order' => 4,
            ],
        ];
    }

    private static function settingsCategories(): array
    {
        return [
            'general' => ['label' => 'إعدادات عامة', 'icon' => 'sliders', 'color' => '#6B7280'],
            'customization' => ['label' => 'التخصيص', 'icon' => 'palette', 'color' => '#8B5CF6'],
        ];
    }

    // ─────────────────────────────────────────────────────────────────────
    // FINES
    // ─────────────────────────────────────────────────────────────────────

    private static function finesTutorials(): array
    {
        return [
            'impose-fine' => [
                'title' => 'فرض مخالفة',
                'subtitle' => 'تسجيل مخالفة على عضو مع النوع والمبلغ',
                'icon' => 'alert-triangle',
                'color' => '#DC2626',
                'category' => 'operations',
                'order' => 1,
            ],
            'fine-types-setup' => [
                'title' => 'إعداد أنواع المخالفات',
                'subtitle' => 'تعريف أنواع المخالفات ودرجات الخطورة',
                'icon' => 'list',
                'color' => '#F59E0B',
                'category' => 'setup',
                'order' => 2,
            ],
            'fine-escalation' => [
                'title' => 'تصعيد المخالفات',
                'subtitle' => 'التصعيد التلقائي عند تكرار المخالفة',
                'icon' => 'trending-up',
                'color' => '#7C3AED',
                'category' => 'operations',
                'order' => 3,
            ],
            'fine-payment' => [
                'title' => 'سداد المخالفة',
                'subtitle' => 'تحصيل قيمة المخالفة وإغلاقها',
                'icon' => 'banknote',
                'color' => '#059669',
                'category' => 'operations',
                'order' => 4,
            ],
        ];
    }

    private static function finesCategories(): array
    {
        return [
            'setup' => ['label' => 'الإعداد', 'icon' => 'settings', 'color' => '#F59E0B'],
            'operations' => ['label' => 'العمليات', 'icon' => 'alert-triangle', 'color' => '#DC2626'],
        ];
    }

    // ─────────────────────────────────────────────────────────────────────
    // ROLES
    // ─────────────────────────────────────────────────────────────────────

    private static function rolesTutorials(): array
    {
        return [
            'create-role' => [
                'title' => 'إنشاء دور جديد',
                'subtitle' => 'تعريف دور وظيفي مع وصفه',
                'icon' => 'shield-plus',
                'color' => '#7C3AED',
                'category' => 'setup',
                'order' => 1,
            ],
            'assign-permissions' => [
                'title' => 'تعيين الصلاحيات',
                'subtitle' => 'ربط الصلاحيات بالدور حسب الوحدات',
                'icon' => 'key',
                'color' => '#059669',
                'category' => 'setup',
                'order' => 2,
            ],
            'assign-role-to-user' => [
                'title' => 'تعيين دور لموظف',
                'subtitle' => 'ربط موظف بدور أو أكثر',
                'icon' => 'user-cog',
                'color' => '#3B82F6',
                'category' => 'operations',
                'order' => 3,
            ],
            'custom-permissions' => [
                'title' => 'صلاحيات مخصصة',
                'subtitle' => 'إضافة صلاحيات فردية خارج الدور',
                'icon' => 'lock',
                'color' => '#DC2626',
                'category' => 'operations',
                'order' => 4,
            ],
            'cashier-roles' => [
                'title' => 'أدوار أمناء الخزن',
                'subtitle' => 'أمين خزنة العضويات / أمين خزنة الأنشطة / أمين الخزنة الرئيسية',
                'icon' => 'landmark',
                'color' => '#059669',
                'category' => 'treasury',
                'order' => 5,
            ],
            'sports-roles' => [
                'title' => 'أدوار الأنشطة الرياضية',
                'subtitle' => 'موظف الأنشطة ومدير الأنشطة الرياضية',
                'icon' => 'activity',
                'color' => '#8B5CF6',
                'category' => 'treasury',
                'order' => 6,
            ],
        ];
    }

    private static function rolesCategories(): array
    {
        return [
            'setup' => ['label' => 'إعداد الأدوار', 'icon' => 'shield', 'color' => '#7C3AED'],
            'operations' => ['label' => 'التعيين والإدارة', 'icon' => 'user-cog', 'color' => '#3B82F6'],
            'treasury' => ['label' => 'أدوار الخزن والأنشطة', 'icon' => 'landmark', 'color' => '#059669'],
        ];
    }

    // ─────────────────────────────────────────────────────────────────────
    // INTERVIEWS
    // ─────────────────────────────────────────────────────────────────────

    private static function interviewsTutorials(): array
    {
        return [
            'schedule-interview' => [
                'title' => 'جدولة مقابلة',
                'subtitle' => 'تحديد موعد المقابلة واللجنة',
                'icon' => 'calendar-plus',
                'color' => '#0EA5E9',
                'category' => 'operations',
                'order' => 1,
            ],
            'conduct-interview' => [
                'title' => 'إجراء المقابلة',
                'subtitle' => 'تسجيل الملاحظات والتقييم أثناء المقابلة',
                'icon' => 'message-square',
                'color' => '#059669',
                'category' => 'operations',
                'order' => 2,
            ],
            'interview-results' => [
                'title' => 'نتائج المقابلات',
                'subtitle' => 'اعتماد النتائج وإخطار المتقدم',
                'icon' => 'check-circle',
                'color' => '#7C3AED',
                'category' => 'reports',
                'order' => 3,
            ],
        ];
    }

    private static function interviewsCategories(): array
    {
        return [
            'operations' => ['label' => 'إدارة المقابلات', 'icon' => 'message-square', 'color' => '#0EA5E9'],
            'reports' => ['label' => 'النتائج', 'icon' => 'check-circle', 'color' => '#7C3AED'],
        ];
    }

    // ─────────────────────────────────────────────────────────────────────
    // INSTALLMENTS
    // ─────────────────────────────────────────────────────────────────────

    private static function installmentsTutorials(): array
    {
        return [
            'create-installment-plan' => [
                'title' => 'إنشاء خطة تقسيط',
                'subtitle' => 'تعريف خطة مع المقدم وعدد الأقساط',
                'icon' => 'calendar-range',
                'color' => '#06B6D4',
                'category' => 'setup',
                'order' => 1,
            ],
            'payment-schedule' => [
                'title' => 'جدول السداد',
                'subtitle' => 'استعراض مواعيد الأقساط وحالتها',
                'icon' => 'table',
                'color' => '#3B82F6',
                'category' => 'operations',
                'order' => 2,
            ],
            'collect-installment' => [
                'title' => 'تحصيل قسط',
                'subtitle' => 'تسجيل دفع قسط مستحق',
                'icon' => 'banknote',
                'color' => '#059669',
                'category' => 'operations',
                'order' => 3,
            ],
            'overdue-monitoring' => [
                'title' => 'متابعة المتأخرات',
                'subtitle' => 'قائمة الأقساط المتأخرة والإجراءات',
                'icon' => 'alert-circle',
                'color' => '#DC2626',
                'category' => 'reports',
                'order' => 4,
            ],
            'cheque-submission' => [
                'title' => 'تسليم شيكات الأقساط',
                'subtitle' => 'رفع صور الشيكات كشرط لتفعيل العضوية',
                'icon' => 'file-check',
                'color' => '#EA580C',
                'category' => 'setup',
                'order' => 5,
            ],
        ];
    }

    private static function installmentsCategories(): array
    {
        return [
            'setup' => ['label' => 'إعداد الخطط', 'icon' => 'calendar-range', 'color' => '#06B6D4'],
            'operations' => ['label' => 'التحصيل', 'icon' => 'banknote', 'color' => '#059669'],
            'reports' => ['label' => 'المتابعة', 'icon' => 'alert-circle', 'color' => '#DC2626'],
        ];
    }

    // ─────────────────────────────────────────────────────────────────────
    // REPORTS
    // ─────────────────────────────────────────────────────────────────────

    private static function reportsTutorials(): array
    {
        return [
            'report-types' => [
                'title' => 'أنواع التقارير',
                'subtitle' => 'استعراض التقارير المتاحة حسب الوحدة',
                'icon' => 'layout-list',
                'color' => '#8B5CF6',
                'category' => 'overview',
                'order' => 1,
            ],
            'apply-filters' => [
                'title' => 'استخدام الفلاتر',
                'subtitle' => 'تصفية البيانات بالتاريخ والفرع والحالة',
                'icon' => 'filter',
                'color' => '#3B82F6',
                'category' => 'operations',
                'order' => 2,
            ],
            'export-report' => [
                'title' => 'تصدير التقارير',
                'subtitle' => 'تصدير البيانات إلى Excel أو PDF',
                'icon' => 'download',
                'color' => '#059669',
                'category' => 'operations',
                'order' => 3,
            ],
            'schedule-report' => [
                'title' => 'جدولة تقرير دوري',
                'subtitle' => 'إعداد تقرير يُرسل تلقائياً بشكل دوري',
                'icon' => 'clock',
                'color' => '#F59E0B',
                'category' => 'operations',
                'order' => 4,
            ],
        ];
    }

    private static function reportsCategories(): array
    {
        return [
            'overview' => ['label' => 'نظرة عامة', 'icon' => 'layout-list', 'color' => '#8B5CF6'],
            'operations' => ['label' => 'التشغيل', 'icon' => 'filter', 'color' => '#3B82F6'],
        ];
    }

    // ─────────────────────────────────────────────────────────────────────
    // SEASONAL
    // ─────────────────────────────────────────────────────────────────────

    private static function seasonalTutorials(): array
    {
        return [
            'setup-season' => [
                'title' => 'إعداد الموسم',
                'subtitle' => 'تعريف فترة الموسم والشروط والمرافق',
                'icon' => 'sun',
                'color' => '#F59E0B',
                'category' => 'setup',
                'order' => 1,
            ],
            'seasonal-pricing' => [
                'title' => 'تسعير الموسم',
                'subtitle' => 'ضبط الأسعار حسب الفئة والمدة',
                'icon' => 'tag',
                'color' => '#059669',
                'category' => 'setup',
                'order' => 2,
            ],
            'seasonal-registration' => [
                'title' => 'تسجيل في الموسم',
                'subtitle' => 'تسجيل عضو أو زائر في الاشتراك الموسمي',
                'icon' => 'user-plus',
                'color' => '#3B82F6',
                'category' => 'operations',
                'order' => 3,
            ],
            'seasonal-report' => [
                'title' => 'تقرير الموسم',
                'subtitle' => 'إحصائيات الإشغال والإيرادات الموسمية',
                'icon' => 'bar-chart-3',
                'color' => '#7C3AED',
                'category' => 'reports',
                'order' => 4,
            ],
        ];
    }

    private static function seasonalCategories(): array
    {
        return [
            'setup' => ['label' => 'الإعداد', 'icon' => 'sun', 'color' => '#F59E0B'],
            'operations' => ['label' => 'التسجيل', 'icon' => 'user-plus', 'color' => '#3B82F6'],
            'reports' => ['label' => 'التقارير', 'icon' => 'bar-chart-3', 'color' => '#7C3AED'],
        ];
    }

    // ─────────────────────────────────────────────────────────────────────
    // DOCUMENTS
    // ─────────────────────────────────────────────────────────────────────

    private static function documentsTutorials(): array
    {
        return [
            'upload-document' => [
                'title' => 'رفع مستند',
                'subtitle' => 'رفع مستند مع تحديد النوع والعضو المرتبط',
                'icon' => 'upload',
                'color' => '#475569',
                'category' => 'operations',
                'order' => 1,
            ],
            'categorize-document' => [
                'title' => 'تصنيف المستندات',
                'subtitle' => 'تنظيم المستندات حسب الفئة والحالة',
                'icon' => 'folder-open',
                'color' => '#3B82F6',
                'category' => 'operations',
                'order' => 2,
            ],
            'verify-document' => [
                'title' => 'التحقق والاعتماد',
                'subtitle' => 'مراجعة المستند واعتماده أو رفضه',
                'icon' => 'check-circle',
                'color' => '#059669',
                'category' => 'operations',
                'order' => 3,
            ],
        ];
    }

    private static function documentsCategories(): array
    {
        return [
            'operations' => ['label' => 'إدارة المستندات', 'icon' => 'file-text', 'color' => '#475569'],
        ];
    }

    // ─────────────────────────────────────────────────────────────────────
    // BRANCHES
    // ─────────────────────────────────────────────────────────────────────

    private static function branchesTutorials(): array
    {
        return [
            'create-branch' => [
                'title' => 'إنشاء فرع',
                'subtitle' => 'تعريف فرع جديد مع العنوان والمسؤول',
                'icon' => 'map-pin',
                'color' => '#EA580C',
                'category' => 'setup',
                'order' => 1,
            ],
            'branch-configuration' => [
                'title' => 'إعدادات الفرع',
                'subtitle' => 'ضبط ساعات العمل والخدمات المتاحة',
                'icon' => 'sliders',
                'color' => '#3B82F6',
                'category' => 'setup',
                'order' => 2,
            ],
            'branch-transfer' => [
                'title' => 'تحويل بين الفروع',
                'subtitle' => 'نقل عضو أو موظف بين الفروع',
                'icon' => 'arrow-right-left',
                'color' => '#7C3AED',
                'category' => 'operations',
                'order' => 3,
            ],
        ];
    }

    private static function branchesCategories(): array
    {
        return [
            'setup' => ['label' => 'الإعداد', 'icon' => 'map-pin', 'color' => '#EA580C'],
            'operations' => ['label' => 'العمليات', 'icon' => 'arrow-right-left', 'color' => '#7C3AED'],
        ];
    }

    // ─────────────────────────────────────────────────────────────────────
    // NEWS
    // ─────────────────────────────────────────────────────────────────────

    private static function newsTutorials(): array
    {
        return [
            'create-article' => [
                'title' => 'إنشاء مقال',
                'subtitle' => 'كتابة خبر أو إعلان مع الصور',
                'icon' => 'pen-line',
                'color' => '#2563EB',
                'category' => 'operations',
                'order' => 1,
            ],
            'publish-article' => [
                'title' => 'نشر المقال',
                'subtitle' => 'مراجعة ونشر المقال للأعضاء',
                'icon' => 'send',
                'color' => '#059669',
                'category' => 'operations',
                'order' => 2,
            ],
            'manage-categories' => [
                'title' => 'إدارة التصنيفات',
                'subtitle' => 'إنشاء وتنظيم تصنيفات الأخبار',
                'icon' => 'tags',
                'color' => '#F59E0B',
                'category' => 'setup',
                'order' => 3,
            ],
        ];
    }

    private static function newsCategories(): array
    {
        return [
            'setup' => ['label' => 'الإعداد', 'icon' => 'tags', 'color' => '#F59E0B'],
            'operations' => ['label' => 'إدارة المحتوى', 'icon' => 'newspaper', 'color' => '#2563EB'],
        ];
    }

    // ─────────────────────────────────────────────────────────────────────
    // WORKFLOW
    // ─────────────────────────────────────────────────────────────────────

    private static function workflowTutorials(): array
    {
        return [
            'create-workflow-rule' => [
                'title' => 'إنشاء قاعدة سير عمل',
                'subtitle' => 'تعريف شرط التشغيل والإجراء التلقائي',
                'icon' => 'git-pull-request',
                'color' => '#7C3AED',
                'category' => 'setup',
                'order' => 1,
            ],
            'approval-chain' => [
                'title' => 'سلسلة الموافقات',
                'subtitle' => 'إعداد مراحل الموافقة والمسؤولين',
                'icon' => 'git-merge',
                'color' => '#059669',
                'category' => 'setup',
                'order' => 2,
            ],
            'process-approval' => [
                'title' => 'معالجة طلب موافقة',
                'subtitle' => 'الموافقة أو الرفض مع التعليق',
                'icon' => 'check-square',
                'color' => '#3B82F6',
                'category' => 'operations',
                'order' => 3,
            ],
            'workflow-monitoring' => [
                'title' => 'متابعة سير العمل',
                'subtitle' => 'تتبع حالة الطلبات المعلقة والمنتهية',
                'icon' => 'eye',
                'color' => '#F59E0B',
                'category' => 'operations',
                'order' => 4,
            ],
        ];
    }

    private static function workflowCategories(): array
    {
        return [
            'setup' => ['label' => 'الإعداد', 'icon' => 'git-pull-request', 'color' => '#7C3AED'],
            'operations' => ['label' => 'التشغيل', 'icon' => 'check-square', 'color' => '#3B82F6'],
        ];
    }

    // ─────────────────────────────────────────────────────────────────────
    // SUBSCRIPTIONS
    // ─────────────────────────────────────────────────────────────────────

    private static function subscriptionsTutorials(): array
    {
        return [
            'generate-annual' => [
                'title' => 'توليد الاشتراكات السنوية',
                'subtitle' => 'إنشاء اشتراكات سنوية لجميع الأعضاء الفعالين',
                'icon' => 'calendar-check',
                'color' => '#059669',
                'category' => 'operations',
                'order' => 1,
            ],
            'collect-subscription' => [
                'title' => 'تحصيل اشتراك',
                'subtitle' => 'تسجيل دفع الاشتراك السنوي',
                'icon' => 'banknote',
                'color' => '#3B82F6',
                'category' => 'operations',
                'order' => 2,
            ],
            'subscription-tracking' => [
                'title' => 'متابعة الاشتراكات',
                'subtitle' => 'قائمة المسددين والمتأخرين والمعفيين',
                'icon' => 'list-checks',
                'color' => '#F59E0B',
                'category' => 'reports',
                'order' => 3,
            ],
            'subscription-exemption' => [
                'title' => 'إعفاء من الاشتراك',
                'subtitle' => 'إعفاء عضو من الاشتراك بقرار إداري',
                'icon' => 'badge-percent',
                'color' => '#7C3AED',
                'category' => 'operations',
                'order' => 4,
            ],
        ];
    }

    private static function subscriptionsCategories(): array
    {
        return [
            'operations' => ['label' => 'التوليد والتحصيل', 'icon' => 'calendar-check', 'color' => '#059669'],
            'reports' => ['label' => 'المتابعة', 'icon' => 'list-checks', 'color' => '#F59E0B'],
        ];
    }

    // ─────────────────────────────────────────────────────────────────────
    // RESERVATIONS
    // ─────────────────────────────────────────────────────────────────────

    private static function reservationsTutorials(): array
    {
        return [
            'create-booking' => [
                'title' => 'إنشاء حجز',
                'subtitle' => 'حجز مرفق أو وحدة لوقت محدد',
                'icon' => 'calendar-plus',
                'color' => '#3B82F6',
                'category' => 'operations',
                'order' => 1,
            ],
            'calendar-view' => [
                'title' => 'عرض التقويم',
                'subtitle' => 'استعراض الحجوزات على التقويم اليومي/الأسبوعي',
                'icon' => 'calendar',
                'color' => '#059669',
                'category' => 'operations',
                'order' => 2,
            ],
            'cancel-booking' => [
                'title' => 'إلغاء حجز',
                'subtitle' => 'إلغاء حجز مع تطبيق سياسة الاسترداد',
                'icon' => 'calendar-x',
                'color' => '#DC2626',
                'category' => 'operations',
                'order' => 3,
            ],
            'recurring-booking' => [
                'title' => 'حجز متكرر',
                'subtitle' => 'إنشاء حجز أسبوعي متكرر تلقائياً',
                'icon' => 'repeat',
                'color' => '#7C3AED',
                'category' => 'operations',
                'order' => 4,
            ],
        ];
    }

    private static function reservationsCategories(): array
    {
        return [
            'operations' => ['label' => 'إدارة الحجوزات', 'icon' => 'calendar', 'color' => '#3B82F6'],
        ];
    }

    // ─────────────────────────────────────────────────────────────────────
    // MATCH CENTER
    // ─────────────────────────────────────────────────────────────────────

    private static function matchCenterTutorials(): array
    {
        return [
            'create-live-match' => [
                'title' => 'إنشاء مباراة حية',
                'subtitle' => 'بدء مباراة مع الفرق والحكام',
                'icon' => 'play-circle',
                'color' => '#DC2626',
                'category' => 'operations',
                'order' => 1,
            ],
            'track-events' => [
                'title' => 'تسجيل الأحداث',
                'subtitle' => 'تسجيل الأهداف والبطاقات والتبديلات',
                'icon' => 'zap',
                'color' => '#F59E0B',
                'category' => 'operations',
                'order' => 2,
            ],
            'match-scoring' => [
                'title' => 'النتيجة والإحصائيات',
                'subtitle' => 'عرض النتيجة النهائية والإحصائيات التفصيلية',
                'icon' => 'bar-chart-3',
                'color' => '#3B82F6',
                'category' => 'reports',
                'order' => 3,
            ],
        ];
    }

    private static function matchCenterCategories(): array
    {
        return [
            'operations' => ['label' => 'إدارة المباريات', 'icon' => 'tv', 'color' => '#DC2626'],
            'reports' => ['label' => 'النتائج والإحصائيات', 'icon' => 'bar-chart-3', 'color' => '#3B82F6'],
        ];
    }

    // ─────────────────────────────────────────────────────────────────────
    // POOL MANAGEMENT
    // ─────────────────────────────────────────────────────────────────────

    private static function poolManagementTutorials(): array
    {
        return [
            'setup-pool' => [
                'title' => 'إعداد حمام السباحة',
                'subtitle' => 'تعريف حمام السباحة مع المواصفات والسعة',
                'icon' => 'waves',
                'color' => '#0EA5E9',
                'category' => 'setup',
                'order' => 1,
            ],
            'manage-lanes' => [
                'title' => 'إدارة الحارات',
                'subtitle' => 'تقسيم الحمام لحارات مع السعة لكل حارة',
                'icon' => 'columns',
                'color' => '#3B82F6',
                'category' => 'setup',
                'order' => 2,
            ],
            'pool-scheduling' => [
                'title' => 'جدولة الاستخدام',
                'subtitle' => 'تخصيص أوقات للتدريب والاستخدام الحر',
                'icon' => 'calendar-clock',
                'color' => '#059669',
                'category' => 'operations',
                'order' => 3,
            ],
            'pool-maintenance' => [
                'title' => 'صيانة الحمام',
                'subtitle' => 'جدولة الصيانة الدورية وتسجيل القراءات',
                'icon' => 'thermometer',
                'color' => '#F59E0B',
                'category' => 'operations',
                'order' => 4,
            ],
        ];
    }

    private static function poolManagementCategories(): array
    {
        return [
            'setup' => ['label' => 'الإعداد', 'icon' => 'waves', 'color' => '#0EA5E9'],
            'operations' => ['label' => 'التشغيل', 'icon' => 'calendar-clock', 'color' => '#059669'],
        ];
    }

    // ─────────────────────────────────────────────────────────────────────
    // USERS
    // ─────────────────────────────────────────────────────────────────────

    private static function usersTutorials(): array
    {
        return [
            'create-user' => [
                'title' => 'إنشاء مستخدم جديد',
                'subtitle' => 'إضافة حساب دخول للنظام مع البيانات الأساسية',
                'icon' => 'user-plus',
                'color' => '#6366F1',
                'category' => 'setup',
                'order' => 1,
            ],
            'edit-user' => [
                'title' => 'تعديل بيانات المستخدم',
                'subtitle' => 'تحديث المعلومات الشخصية وبيانات الاتصال',
                'icon' => 'user-cog',
                'color' => '#3B82F6',
                'category' => 'operations',
                'order' => 2,
            ],
            'manage-user-permissions' => [
                'title' => 'إدارة صلاحيات المستخدم',
                'subtitle' => 'تعيين أدوار وصلاحيات مخصصة للمستخدم',
                'icon' => 'shield',
                'color' => '#7C3AED',
                'category' => 'operations',
                'order' => 3,
            ],
            'user-activity-log' => [
                'title' => 'سجل نشاط المستخدم',
                'subtitle' => 'مراجعة العمليات التي قام بها المستخدم',
                'icon' => 'activity',
                'color' => '#059669',
                'category' => 'reports',
                'order' => 4,
            ],
        ];
    }

    private static function usersCategories(): array
    {
        return [
            'setup' => ['label' => 'إنشاء الحسابات', 'icon' => 'user-plus', 'color' => '#6366F1'],
            'operations' => ['label' => 'الإدارة', 'icon' => 'user-cog', 'color' => '#3B82F6'],
            'reports' => ['label' => 'المتابعة', 'icon' => 'activity', 'color' => '#059669'],
        ];
    }

    // ─────────────────────────────────────────────────────────────────────
    // NOTIFICATIONS
    // ─────────────────────────────────────────────────────────────────────

    private static function notificationsTutorials(): array
    {
        return [
            'create-template' => [
                'title' => 'إنشاء قالب إشعار',
                'subtitle' => 'تصميم قالب رسالة قابل لإعادة الاستخدام',
                'icon' => 'file-text',
                'color' => '#F97316',
                'category' => 'setup',
                'order' => 1,
            ],
            'setup-trigger' => [
                'title' => 'إعداد مشغل تلقائي',
                'subtitle' => 'ربط حدث بإشعار يُرسل تلقائياً',
                'icon' => 'zap',
                'color' => '#059669',
                'category' => 'setup',
                'order' => 2,
            ],
            'send-manual' => [
                'title' => 'إرسال إشعار يدوي',
                'subtitle' => 'إرسال رسالة لعضو أو مجموعة مختارة',
                'icon' => 'send',
                'color' => '#3B82F6',
                'category' => 'operations',
                'order' => 3,
            ],
            'notification-log' => [
                'title' => 'سجل الإشعارات',
                'subtitle' => 'مراجعة الإشعارات المرسلة وحالة التسليم',
                'icon' => 'list',
                'color' => '#7C3AED',
                'category' => 'reports',
                'order' => 4,
            ],
        ];
    }

    private static function notificationsCategories(): array
    {
        return [
            'setup' => ['label' => 'الإعداد', 'icon' => 'settings', 'color' => '#F97316'],
            'operations' => ['label' => 'الإرسال', 'icon' => 'send', 'color' => '#3B82F6'],
            'reports' => ['label' => 'السجل', 'icon' => 'list', 'color' => '#7C3AED'],
        ];
    }

    // ─────────────────────────────────────────────────────────────────────
    // PLAYER AFFAIRS
    // ─────────────────────────────────────────────────────────────────────

    private static function playerAffairsTutorials(): array
    {
        return [
            'register-player' => [
                'title' => 'تسجيل لاعب جديد',
                'subtitle' => 'إضافة لاعب مع البيانات الشخصية والرياضية',
                'icon' => 'user-plus',
                'color' => '#0D9488',
                'category' => 'setup',
                'order' => 1,
            ],
            'player-evaluation' => [
                'title' => 'تقييم اللاعب',
                'subtitle' => 'إجراء تقييم فني وبدني للاعب',
                'icon' => 'star',
                'color' => '#F59E0B',
                'category' => 'operations',
                'order' => 2,
            ],
            'record-injury' => [
                'title' => 'تسجيل إصابة',
                'subtitle' => 'تسجيل إصابة لاعب مع التفاصيل والمتابعة',
                'icon' => 'heart-pulse',
                'color' => '#DC2626',
                'category' => 'operations',
                'order' => 3,
            ],
            'fitness-test' => [
                'title' => 'اختبار لياقة بدنية',
                'subtitle' => 'تسجيل نتائج اختبارات اللياقة',
                'icon' => 'activity',
                'color' => '#059669',
                'category' => 'operations',
                'order' => 4,
            ],
            'medical-approval' => [
                'title' => 'الموافقة الطبية',
                'subtitle' => 'اعتماد اللاعب طبياً للمشاركة في التدريب',
                'icon' => 'stethoscope',
                'color' => '#3B82F6',
                'category' => 'medical',
                'order' => 5,
            ],
        ];
    }

    private static function playerAffairsCategories(): array
    {
        return [
            'setup' => ['label' => 'التسجيل', 'icon' => 'user-plus', 'color' => '#0D9488'],
            'operations' => ['label' => 'التقييم والمتابعة', 'icon' => 'star', 'color' => '#F59E0B'],
            'medical' => ['label' => 'الملف الطبي', 'icon' => 'stethoscope', 'color' => '#3B82F6'],
        ];
    }

    // ─────────────────────────────────────────────────────────────────────
    // FORMS
    // ─────────────────────────────────────────────────────────────────────

    private static function formsTutorials(): array
    {
        return [
            'build-form' => [
                'title' => 'بناء نموذج إلكتروني',
                'subtitle' => 'تصميم نموذج مخصص باستخدام أداة السحب والإفلات',
                'icon' => 'layout',
                'color' => '#8B5CF6',
                'category' => 'setup',
                'order' => 1,
            ],
            'fill-form' => [
                'title' => 'تعبئة نموذج',
                'subtitle' => 'ملء نموذج وإرساله',
                'icon' => 'edit',
                'color' => '#3B82F6',
                'category' => 'operations',
                'order' => 2,
            ],
            'review-submissions' => [
                'title' => 'مراجعة التقديمات',
                'subtitle' => 'عرض الردود المقدمة ومعالجتها',
                'icon' => 'inbox',
                'color' => '#059669',
                'category' => 'operations',
                'order' => 3,
            ],
            'print-form' => [
                'title' => 'طباعة نموذج',
                'subtitle' => 'طباعة نموذج فارغ أو معبأ',
                'icon' => 'printer',
                'color' => '#F59E0B',
                'category' => 'operations',
                'order' => 4,
            ],
        ];
    }

    private static function formsCategories(): array
    {
        return [
            'setup' => ['label' => 'تصميم النماذج', 'icon' => 'layout', 'color' => '#8B5CF6'],
            'operations' => ['label' => 'الاستخدام', 'icon' => 'edit', 'color' => '#3B82F6'],
        ];
    }

    // ─────────────────────────────────────────────────────────────────────
    // PRICING MANAGEMENT
    // ─────────────────────────────────────────────────────────────────────

    private static function pricingManagementTutorials(): array
    {
        return [
            'setup-pricing-rules' => [
                'title' => 'إعداد قواعد التسعير',
                'subtitle' => 'تحديد أسعار العضويات والخدمات',
                'icon' => 'tag',
                'color' => '#059669',
                'category' => 'setup',
                'order' => 1,
            ],
            'special-discounts' => [
                'title' => 'الخصومات الخاصة',
                'subtitle' => 'إنشاء خصم لفئة أو عضو محدد',
                'icon' => 'percent',
                'color' => '#DC2626',
                'category' => 'operations',
                'order' => 2,
            ],
            'edit-pricing' => [
                'title' => 'تعديل الأسعار',
                'subtitle' => 'تحديث أسعار الخدمات والاشتراكات',
                'icon' => 'edit',
                'color' => '#F59E0B',
                'category' => 'operations',
                'order' => 3,
            ],
        ];
    }

    private static function pricingManagementCategories(): array
    {
        return [
            'setup' => ['label' => 'الإعداد', 'icon' => 'tag', 'color' => '#059669'],
            'operations' => ['label' => 'العمليات', 'icon' => 'edit', 'color' => '#F59E0B'],
        ];
    }

    // ─────────────────────────────────────────────────────────────────────
    // AUDIT
    // ─────────────────────────────────────────────────────────────────────

    private static function auditTutorials(): array
    {
        return [
            'view-audit-log' => [
                'title' => 'عرض سجل المراجعة',
                'subtitle' => 'البحث في سجل التعديلات والعمليات',
                'icon' => 'scroll',
                'color' => '#64748B',
                'category' => 'operations',
                'order' => 1,
            ],
            'entity-history' => [
                'title' => 'تاريخ كيان محدد',
                'subtitle' => 'عرض كل التعديلات على عضو أو سجل',
                'icon' => 'history',
                'color' => '#3B82F6',
                'category' => 'operations',
                'order' => 2,
            ],
            'filter-audit' => [
                'title' => 'فلترة وتصدير السجل',
                'subtitle' => 'البحث بالتاريخ والمستخدم والنوع والتصدير',
                'icon' => 'filter',
                'color' => '#059669',
                'category' => 'reports',
                'order' => 3,
            ],
        ];
    }

    private static function auditCategories(): array
    {
        return [
            'operations' => ['label' => 'العرض والبحث', 'icon' => 'scroll', 'color' => '#64748B'],
            'reports' => ['label' => 'التقارير', 'icon' => 'filter', 'color' => '#059669'],
        ];
    }

    // ─────────────────────────────────────────────────────────────────────
    // PLAYGROUNDS
    // ─────────────────────────────────────────────────────────────────────

    private static function playgroundsTutorials(): array
    {
        return [
            'create-playground' => [
                'title' => 'إنشاء ملعب',
                'subtitle' => 'تعريف ملعب جديد مع المواصفات',
                'icon' => 'layout-grid',
                'color' => '#16A34A',
                'category' => 'setup',
                'order' => 1,
            ],
            'playground-schedule' => [
                'title' => 'جدول الملعب',
                'subtitle' => 'إنشاء جدول أسبوعي للتدريبات والمباريات',
                'icon' => 'calendar',
                'color' => '#3B82F6',
                'category' => 'operations',
                'order' => 2,
            ],
            'playground-mirror' => [
                'title' => 'المرآة الحية للملعب',
                'subtitle' => 'عرض حالة الملعب لحظياً مع الحجوزات',
                'icon' => 'monitor',
                'color' => '#7C3AED',
                'category' => 'operations',
                'order' => 3,
            ],
            'playground-attendance' => [
                'title' => 'حضور الملعب',
                'subtitle' => 'تسجيل حضور اللاعبين لكل حصة',
                'icon' => 'check-square',
                'color' => '#059669',
                'category' => 'operations',
                'order' => 4,
            ],
        ];
    }

    private static function playgroundsCategories(): array
    {
        return [
            'setup' => ['label' => 'الإعداد', 'icon' => 'layout-grid', 'color' => '#16A34A'],
            'operations' => ['label' => 'التشغيل', 'icon' => 'calendar', 'color' => '#3B82F6'],
        ];
    }

    // ─────────────────────────────────────────────────────────────────────
    // SA REGISTRATION
    // ─────────────────────────────────────────────────────────────────────

    private static function saRegistrationTutorials(): array
    {
        return [
            'registration-wizard' => [
                'title' => 'معالج التسجيل',
                'subtitle' => 'تسجيل لاعب جديد من البداية حتى إصدار الكارت',
                'icon' => 'clipboard-check',
                'color' => '#0891B2',
                'category' => 'registration',
                'order' => 1,
            ],
            'card-management' => [
                'title' => 'إدارة الكروت',
                'subtitle' => 'عرض وإيقاف وإلغاء وإعادة طباعة كروت اللاعبين',
                'icon' => 'id-card',
                'color' => '#2563EB',
                'category' => 'cards',
                'order' => 2,
            ],
            'gate-scanning' => [
                'title' => 'مسح البوابة',
                'subtitle' => 'التحقق من الكروت عند الدخول والخروج',
                'icon' => 'scan',
                'color' => '#059669',
                'category' => 'gate',
                'order' => 3,
            ],
            'registration-reports' => [
                'title' => 'تقارير التسجيل',
                'subtitle' => 'إحصائيات التسجيلات والإيرادات والكروت',
                'icon' => 'bar-chart-3',
                'color' => '#7C3AED',
                'category' => 'reports',
                'order' => 4,
            ],
            'temp-card-workflow' => [
                'title' => 'سير عمل الكارت المؤقت',
                'subtitle' => 'إصدار كارت مؤقت (7 أيام) وإدارة انتهاء الصلاحية',
                'icon' => 'clock',
                'color' => '#F59E0B',
                'category' => 'cards',
                'order' => 5,
            ],
            'booking-wizard' => [
                'title' => 'معالج الحجز بالساعة',
                'subtitle' => 'حجز ملاعب ومرافق بالساعة — اكتشاف العضوية التلقائي',
                'icon' => 'calendar-clock',
                'color' => '#0D7377',
                'category' => 'booking',
                'order' => 6,
            ],
            'academy-pricing' => [
                'title' => 'أسعار الأكاديميات',
                'subtitle' => 'عرض وحساب أسعار الاشتراكات والخصومات',
                'icon' => 'calculator',
                'color' => '#D97706',
                'category' => 'registration',
                'order' => 7,
            ],
        ];
    }

    private static function saRegistrationCategories(): array
    {
        return [
            'registration' => ['label' => 'التسجيل', 'icon' => 'clipboard-check', 'color' => '#0891B2'],
            'cards' => ['label' => 'الكروت', 'icon' => 'id-card', 'color' => '#2563EB'],
            'gate' => ['label' => 'البوابة', 'icon' => 'scan', 'color' => '#059669'],
            'booking' => ['label' => 'الحجز', 'icon' => 'calendar-clock', 'color' => '#0D7377'],
            'reports' => ['label' => 'التقارير', 'icon' => 'bar-chart-3', 'color' => '#7C3AED'],
        ];
    }

    private static function parentsTutorials(): array
    {
        return [
            'add-parent' => ['title' => 'إضافة ولي أمر', 'subtitle' => 'إنشاء حساب ولي أمر وربطه بلاعب', 'icon' => 'user-plus', 'color' => '#7C3AED', 'category' => 'management', 'order' => 1],
            'link-player' => ['title' => 'ربط لاعب بولي أمر', 'subtitle' => 'ربط لاعب مسجل بحساب ولي الأمر', 'icon' => 'link', 'color' => '#3B82F6', 'category' => 'management', 'order' => 2],
            'parent-portal' => ['title' => 'بوابة ولي الأمر', 'subtitle' => 'ما يراه ولي الأمر وما يمكنه فعله', 'icon' => 'monitor', 'color' => '#059669', 'category' => 'portal', 'order' => 3],
            'payment-history' => ['title' => 'سجل المدفوعات', 'subtitle' => 'عرض مدفوعات أبناء ولي الأمر', 'icon' => 'receipt', 'color' => '#F59E0B', 'category' => 'portal', 'order' => 4],
        ];
    }

    private static function parentsCategories(): array
    {
        return [
            'management' => ['label' => 'الإدارة', 'icon' => 'users', 'color' => '#7C3AED'],
            'portal' => ['label' => 'البوابة', 'icon' => 'monitor', 'color' => '#059669'],
        ];
    }

    private static function medicalBoardTutorials(): array
    {
        return [
            'review-medical-scan' => ['title' => 'مراجعة شهادة طبية', 'subtitle' => 'فحص واعتماد أو رفض شهادة مرفوعة', 'icon' => 'file-check', 'color' => '#059669', 'category' => 'approvals', 'order' => 1],
            'approve-player' => ['title' => 'اعتماد لياقة لاعب', 'subtitle' => 'الموافقة الطبية للسماح بالتدريب', 'icon' => 'check-circle', 'color' => '#10B981', 'category' => 'approvals', 'order' => 2],
            'reject-with-notes' => ['title' => 'رفض مع ملاحظات', 'subtitle' => 'رفض الشهادة وطلب إعادة الفحص', 'icon' => 'x-circle', 'color' => '#DC2626', 'category' => 'approvals', 'order' => 3],
            'medical-history' => ['title' => 'السجل الطبي', 'subtitle' => 'عرض تاريخ الفحوصات والموافقات', 'icon' => 'clipboard-list', 'color' => '#6366F1', 'category' => 'records', 'order' => 4],
        ];
    }

    private static function medicalBoardCategories(): array
    {
        return [
            'approvals' => ['label' => 'الموافقات', 'icon' => 'check-circle', 'color' => '#059669'],
            'records' => ['label' => 'السجلات', 'icon' => 'clipboard-list', 'color' => '#6366F1'],
        ];
    }

    private static function accessMatrixTutorials(): array
    {
        return [
            'view-matrix' => ['title' => 'عرض المصفوفة', 'subtitle' => 'عرض صلاحيات جميع الأدوار في جدول واحد', 'icon' => 'grid-3x3', 'color' => '#6366F1', 'category' => 'view', 'order' => 1],
            'compare-roles' => ['title' => 'مقارنة الأدوار', 'subtitle' => 'مقارنة صلاحيات دورين أو أكثر', 'icon' => 'columns', 'color' => '#8B5CF6', 'category' => 'view', 'order' => 2],
            'export-matrix' => ['title' => 'تصدير المصفوفة', 'subtitle' => 'تصدير المصفوفة كجدول Excel', 'icon' => 'download', 'color' => '#059669', 'category' => 'view', 'order' => 3],
        ];
    }

    private static function accessMatrixCategories(): array
    {
        return [
            'view' => ['label' => 'العرض والمقارنة', 'icon' => 'grid-3x3', 'color' => '#6366F1'],
        ];
    }

    private static function rulesTutorials(): array
    {
        return [
            'pricing-rules' => ['title' => 'قواعد التسعير', 'subtitle' => 'إعداد قواعد حساب الأسعار التلقائية', 'icon' => 'calculator', 'color' => '#059669', 'category' => 'pricing', 'order' => 1],
            'discount-rules' => ['title' => 'قواعد الخصومات', 'subtitle' => 'تعريف شروط الخصم التلقائي', 'icon' => 'badge-percent', 'color' => '#F59E0B', 'category' => 'pricing', 'order' => 2],
            'fee-calculation' => ['title' => 'حساب الرسوم', 'subtitle' => 'كيف يحسب النظام رسوم العضوية والأنشطة', 'icon' => 'banknote', 'color' => '#3B82F6', 'category' => 'rules', 'order' => 3],
            'rules-engine' => ['title' => 'محرك القواعد', 'subtitle' => 'إنشاء وتعديل القواعد العامة', 'icon' => 'sliders', 'color' => '#64748B', 'category' => 'rules', 'order' => 4],
        ];
    }

    private static function rulesCategories(): array
    {
        return [
            'pricing' => ['label' => 'التسعير والخصومات', 'icon' => 'calculator', 'color' => '#059669'],
            'rules' => ['label' => 'القواعد العامة', 'icon' => 'sliders', 'color' => '#64748B'],
        ];
    }
}
