From fc05248c28c5d255f20aab009e1a29537a784a75 Mon Sep 17 00:00:00 2001 From: Ashwin Kumar Date: Sat, 29 Nov 2025 10:07:50 +0530 Subject: [PATCH] revamp and upgrade to modern stack (#562) revamp and upgrade to modern stack --- .gitignore | 69 +- CLAUDE.md | 332 +- Dockerfile | 2 +- README.md | 8 +- accounts/migrations/0001_initial.py | 97 - accounts/migrations/0002_initial.py | 112 - .../0003_alter_account_created_by.py | 21 - accounts/models.py | 183 - ENV.md => backend/.env.example | 19 +- backend/README.md | 407 + {accounts => backend/accounts}/__init__.py | 0 {accounts => backend/accounts}/apps.py | 0 backend/accounts/migrations/0001_initial.py | 487 + backend/accounts/migrations/0002_initial.py | 202 + .../accounts}/migrations/__init__.py | 0 backend/accounts/models.py | 190 + {accounts => backend/accounts}/serializer.py | 141 +- .../accounts/swagger_params.py | 2 - {accounts => backend/accounts}/tasks.py | 20 +- .../accounts}/tests_celery_tasks.py | 0 {accounts => backend/accounts}/urls.py | 0 {accounts => backend/accounts}/views.py | 212 +- {cases => backend/cases}/__init__.py | 0 {cases => backend/cases}/apps.py | 0 backend/cases/migrations/0001_initial.py | 151 + backend/cases/migrations/0002_initial.py | 134 + .../cases}/migrations/__init__.py | 0 backend/cases/models.py | 110 + {cases => backend/cases}/serializer.py | 12 +- backend/cases/solution_serializers.py | 94 + backend/cases/solution_views.py | 236 + .../cases/swagger_params.py | 8 +- {cases => backend/cases}/tasks.py | 0 .../cases}/tests_celery_tasks.py | 0 backend/cases/urls.py | 32 + {cases => backend/cases}/views.py | 139 +- {cms => backend/common}/__init__.py | 0 .../common}/access_decorators_mixins.py | 0 backend/common/admin.py | 53 + .../common}/app_urls/__init__.py | 9 +- backend/common/apps.py | 9 + backend/common/audit_log.py | 307 + backend/common/base.py | 153 + backend/common/celery_utils.py | 280 + .../common/context_processors}/__init__.py | 0 .../common}/context_processors/common.py | 0 {common => backend/common}/custom_auth.py | 0 {common => backend/common}/custom_openapi.py | 2 +- {common => backend/common}/external_auth.py | 35 +- .../common/management}/__init__.py | 0 .../common/management/commands}/__init__.py | 0 .../management/commands/audit_org_fields.py | 227 + .../common/management/commands/manage_rls.py | 189 + .../commands/migrate_from_prisma.py | 1502 ++ {common => backend/common}/manager.py | 16 +- .../common}/middleware/__init__.py | 0 backend/common/middleware/get_company.py | 152 + backend/common/middleware/rls_context.py | 187 + backend/common/migrations/0001_initial.py | 1616 ++ backend/common/migrations/0002_enable_rls.py | 119 + .../common}/migrations/__init__.py | 0 backend/common/mixins.py | 422 + {common => backend/common}/models.py | 551 +- backend/common/permissions.py | 236 + backend/common/rls/__init__.py | 214 + backend/common/serializer.py | 682 + backend/common/signals.py | 146 + {common => backend/common}/status.py | 1 + {common => backend/common}/swagger-ui.html | 0 .../common/swagger_params.py | 15 +- {common => backend/common}/tasks.py | 164 +- .../common}/templates/comment_email.html | 0 .../templates/password_reset_email.html | 0 .../common}/templates/user_delete_email.html | 0 .../common}/templates/user_status.html | 0 .../templates/user_status_activate.html | 0 .../templates/user_status_deactivate.html | 0 .../common}/templates/user_status_in.html | 0 .../common}/templatetags/__init__.py | 0 .../common}/templatetags/common_tags.py | 0 .../common/tests}/__init__.py | 0 backend/common/tests/test_multitenancy.py | 616 + .../common}/tests_celery_tasks.py | 37 +- {common => backend/common}/token_generator.py | 0 backend/common/urls.py | 44 + {common => backend/common}/utils.py | 23 +- backend/common/views.py | 1755 ++ .../contacts}/__init__.py | 0 {contacts => backend/contacts}/admin.py | 0 {contacts => backend/contacts}/apps.py | 0 backend/contacts/migrations/0001_initial.py | 438 + .../contacts/migrations}/__init__.py | 0 backend/contacts/models.py | 76 + {contacts => backend/contacts}/serializer.py | 105 +- backend/contacts/swagger_params.py | 47 + {contacts => backend/contacts}/tasks.py | 0 .../contacts}/tests_celery_tasks.py | 0 {contacts => backend/contacts}/urls.py | 1 - {contacts => backend/contacts}/views.py | 248 +- {crm => backend/crm}/__init__.py | 0 {crm => backend/crm}/celery.py | 0 {crm => backend/crm}/server_settings.py | 0 {crm => backend/crm}/settings.py | 51 +- {crm => backend/crm}/urls.py | 14 +- {crm => backend/crm}/wsgi.py | 0 {emails => backend/invoices}/__init__.py | 0 backend/invoices/admin.py | 73 + {invoices => backend/invoices}/api_urls.py | 0 {invoices => backend/invoices}/api_views.py | 102 +- {invoices => backend/invoices}/apps.py | 0 {invoices => backend/invoices}/forms.py | 7 +- backend/invoices/migrations/0001_initial.py | 840 + .../invoices}/migrations/__init__.py | 0 {invoices => backend/invoices}/models.py | 123 +- {invoices => backend/invoices}/serializer.py | 96 +- backend/invoices/serializers.py | 79 + backend/invoices/swagger_params.py | 65 + {invoices => backend/invoices}/tasks.py | 0 .../templates/assigned_to_email_template.html | 0 .../templates/invoice_cancelled.html | 0 .../templates/invoice_detail_email.html | 0 {invoices => backend/invoices}/tests.py | 3 +- .../invoices}/tests_celery_tasks.py | 0 {invoices => backend/invoices}/urls.py | 0 backend/invoices/views.py | 2 + {events => backend/leads}/__init__.py | 0 {leads => backend/leads}/admin.py | 0 {leads => backend/leads}/apps.py | 0 {leads => backend/leads}/forms.py | 0 backend/leads/migrations/0001_initial.py | 632 + .../leads}/migrations/__init__.py | 0 {leads => backend/leads}/models.py | 111 +- {leads => backend/leads}/serializer.py | 175 +- .../leads/swagger_params.py | 0 {leads => backend/leads}/tasks.py | 14 +- .../leads}/tests_celery_tasks.py | 0 {leads => backend/leads}/urls.py | 7 +- {leads => backend/leads}/views.py | 451 +- manage.py => backend/manage.py | 0 {invoices => backend/opportunity}/__init__.py | 0 {opportunity => backend/opportunity}/admin.py | 0 {opportunity => backend/opportunity}/apps.py | 0 .../opportunity/migrations/0001_initial.py | 379 + .../opportunity}/migrations/__init__.py | 0 backend/opportunity/models.py | 97 + .../opportunity}/serializer.py | 95 +- .../opportunity/swagger_params.py | 14 +- {opportunity => backend/opportunity}/tasks.py | 0 .../opportunity}/tests_celery_tasks.py | 0 {opportunity => backend/opportunity}/urls.py | 0 {opportunity => backend/opportunity}/views.py | 117 +- pytest.ini => backend/pytest.ini | 0 backend/requirements.txt | 18 + setup.py => backend/setup.py | 0 leads/__init__.py => backend/static/.gitkeep | 0 .../migrations => backend/tasks}/__init__.py | 0 backend/tasks/admin.py | 52 + {tasks => backend/tasks}/apps.py | 0 {tasks => backend/tasks}/celery_tasks.py | 0 backend/tasks/migrations/0001_initial.py | 548 + .../tasks/migrations}/__init__.py | 0 backend/tasks/models.py | 268 + backend/tasks/serializer.py | 224 + .../tasks/swagger_params.py | 6 +- .../templates/tasks_email_template.html | 0 .../tasks}/tests_celery_tasks.py | 0 backend/tasks/urls.py | 33 + {tasks => backend/tasks}/utils.py | 0 backend/tasks/views.py | 891 + .../assigned_to/account_assigned.html | 0 .../assigned_to/cases_assigned.html | 0 .../assigned_to/contact_assigned.html | 0 .../assigned_to/leads_assigned.html | 0 .../assigned_to/opportunity_assigned.html | 0 .../common/user_activation_status.html | 0 {templates => backend/templates}/healthz.html | 0 .../registration/password_reset_email.html | 0 .../templates}/root_email_template.html | 0 .../templates}/root_email_template_new.html | 0 cases/migrations/0001_initial.py | 39 - cases/migrations/0002_initial.py | 51 - .../migrations/0003_alter_case_created_by.py | 21 - cases/models.py | 122 - cases/urls.py | 12 - cms/admin.py | 3 - cms/apps.py | 6 - cms/blocks.py | 221 - cms/migrations/0001_initial.py | 116 - cms/models.py | 297 - cms/templatetags/menus_tags.py | 10 - cms/tests.py | 3 - cms/views.py | 3 - common/admin.py | 10 - common/apps.py | 5 - common/base.py | 38 - common/middleware/get_company.py | 75 - common/migrations/0001_initial.py | 192 - common/migrations/0002_initial.py | 211 - .../migrations/0003_alter_user_profile_pic.py | 18 - .../0004_alter_profile_alternate_phone.py | 19 - common/migrations/0005_org_api_key.py | 19 - common/migrations/0006_alter_org_api_key.py | 30 - common/migrations/0007_org_is_active.py | 18 - common/migrations/0008_alter_user_managers.py | 18 - common/migrations/0009_user_is_staff.py | 18 - common/mixins.py | 50 - common/serializer.py | 379 - common/urls.py | 28 - common/views.py | 911 - contacts/migrations/0001_initial.py | 60 - .../0002_alter_contact_created_by.py | 21 - ...alter_contact_secondary_number_and_more.py | 24 - .../migrations/0004_alter_contact_address.py | 18 - .../migrations/0005_alter_contact_address.py | 20 - contacts/models.py | 83 - contacts/swagger_params1.py | 61 - docker/docker-compose.yml | 41 - docker/dockerfile | 37 - docker/entrypoint.sh | 7 - docker/wait-for-postgres.sh | 17 - docs/Makefile | 177 - docs/source/Accounts.rst | 38 - docs/source/Cases.rst | 18 - docs/source/Change Password.rst | 10 - docs/source/Contacts.rst | 21 - docs/source/Documents.rst | 16 - docs/source/Forget Password.rst | 37 - docs/source/Leads.rst | 16 - docs/source/Login.rst | 5 - docs/source/Opportunity.rst | 21 - docs/source/Profile.rst | 78 - docs/source/conf.py | 265 - docs/source/index.rst | 127 - emails/admin.py | 6 - emails/apps.py | 5 - emails/forms.py | 15 - emails/migrations/0001_initial.py | 42 - emails/models.py | 26 - emails/serializer.py | 9 - emails/templates/create_mail.html | 156 - emails/templates/emails.html | 154 - emails/templates/mail_all.html | 122 - emails/templates/mail_center.html | 75 - emails/templates/mail_drafts.html | 130 - emails/templates/mail_important.html | 130 - emails/templates/mail_sent.html | 133 - emails/templates/mail_trash.html | 130 - emails/tests.py | 177 - emails/urls.py | 39 - emails/views.py | 195 - events/admin.py | 3 - events/apps.py | 5 - events/migrations/0001_initial.py | 53 - events/models.py | 90 - events/serializer.py | 158 - events/swagger_params1.py | 37 - events/tasks.py | 89 - .../assigned_to_email_template_event.html | 32 - events/tests_celery_tasks.py | 16 - events/urls.py | 12 - events/views.py | 537 - frontend/.env.example | 9 + frontend/.gitignore | 27 + frontend/.npmrc | 1 + frontend/.prettierignore | 6 + frontend/.prettierrc | 15 + frontend/README.md | 229 + frontend/eslint.config.js | 26 + frontend/jsconfig.json | 22 + frontend/package.json | 53 + frontend/src/app.css | 4 + frontend/src/app.d.ts | 17 + frontend/src/app.html | 23 + frontend/src/hooks.server.js | 288 + frontend/src/lib/api-helpers.js | 233 + frontend/src/lib/api.js | 470 + frontend/src/lib/assets/images/banner.png | Bin 0 -> 2333508 bytes frontend/src/lib/assets/images/google.svg | 9 + frontend/src/lib/assets/images/img_login.png | Bin 0 -> 10914 bytes frontend/src/lib/assets/images/logo.png | Bin 0 -> 2595 bytes frontend/src/lib/data/accountOwnership.js | 9 + frontend/src/lib/data/accountTypes.js | 9 + frontend/src/lib/data/countries.js | 44 + frontend/src/lib/data/index.js | 8 + frontend/src/lib/data/industries.js | 16 + frontend/src/lib/data/leadSources.js | 11 + frontend/src/lib/data/leadStatuses.js | 8 + frontend/src/lib/data/ratings.js | 6 + frontend/src/lib/stores/auth.js | 17 + frontend/src/lib/utils/phone.js | 154 + frontend/src/lib/utils/pkce.js | 51 + frontend/src/routes/(app)/+layout.server.js | 10 + frontend/src/routes/(app)/+layout.svelte | 33 + frontend/src/routes/(app)/+page.server.js | 151 + frontend/src/routes/(app)/+page.svelte | 464 + frontend/src/routes/(app)/Sidebar.svelte | 447 + .../src/routes/(app)/accounts/+page.server.js | 158 + .../src/routes/(app)/accounts/+page.svelte | 549 + .../accounts/[accountId]/+page.server.js | 273 + .../(app)/accounts/[accountId]/+page.svelte | 1099 + .../accounts/[accountId]/edit/+page.server.js | 92 + .../accounts/[accountId]/edit/+page.svelte | 83 + .../routes/(app)/accounts/new/+page.server.js | 143 + .../routes/(app)/accounts/new/+page.svelte | 706 + .../src/routes/(app)/cases/+page.server.js | 272 + frontend/src/routes/(app)/cases/+page.svelte | 381 + .../(app)/cases/[caseId]/+page.server.js | 113 + .../routes/(app)/cases/[caseId]/+page.svelte | 335 + .../(app)/cases/[caseId]/edit/+page.server.js | 229 + .../(app)/cases/[caseId]/edit/+page.svelte | 426 + .../routes/(app)/cases/new/+page.server.js | 157 + .../src/routes/(app)/cases/new/+page.svelte | 195 + .../src/routes/(app)/contacts/+page.server.js | 164 + .../src/routes/(app)/contacts/+page.svelte | 520 + .../contacts/[contactId]/+page.server.js | 161 + .../(app)/contacts/[contactId]/+page.svelte | 473 + .../contacts/[contactId]/edit/+page.server.js | 191 + .../contacts/[contactId]/edit/+page.svelte | 461 + .../routes/(app)/contacts/new/+page.server.js | 146 + .../routes/(app)/contacts/new/+page.svelte | 567 + .../src/routes/(app)/invoices/+page.server.js | 138 + .../src/routes/(app)/invoices/+page.svelte | 190 + .../invoices/[invoiceId]/+page.server.js | 153 + .../(app)/invoices/[invoiceId]/+page.svelte | 185 + .../invoices/[invoiceId]/edit/+page.server.js | 220 + .../invoices/[invoiceId]/edit/+page.svelte | 0 .../routes/(app)/invoices/new/+page.server.js | 147 + .../routes/(app)/invoices/new/+page.svelte | 292 + .../(app)/leads/[lead_id]/+page.server.js | 233 + .../routes/(app)/leads/[lead_id]/+page.svelte | 862 + .../leads/[lead_id]/edit/+page.server.js | 220 + .../(app)/leads/[lead_id]/edit/+page.svelte | 531 + .../routes/(app)/leads/new/+page.server.js | 167 + .../src/routes/(app)/leads/new/+page.svelte | 824 + .../routes/(app)/leads/open/+page.server.js | 90 + .../src/routes/(app)/leads/open/+page.svelte | 684 + .../(app)/opportunities/+page.server.js | 148 + .../routes/(app)/opportunities/+page.svelte | 656 + .../[opportunityId]/+page.server.js | 92 + .../[opportunityId]/+page.svelte | 340 + .../[opportunityId]/close/+page.server.js | 145 + .../[opportunityId]/close/+page.svelte | 227 + .../[opportunityId]/delete/+page.server.js | 99 + .../[opportunityId]/delete/+page.svelte | 130 + .../[opportunityId]/edit/+page.server.js | 218 + .../[opportunityId]/edit/+page.svelte | 372 + .../(app)/opportunities/new/+page.server.js | 223 + .../(app)/opportunities/new/+page.svelte | 529 + .../src/routes/(app)/profile/+page.server.js | 126 + .../src/routes/(app)/profile/+page.svelte | 427 + .../src/routes/(app)/support/+page.svelte | 187 + .../src/routes/(app)/tasks/+page.server.js | 101 + frontend/src/routes/(app)/tasks/+page.svelte | 138 + .../(app)/tasks/[task_id]/+page.server.js | 148 + .../routes/(app)/tasks/[task_id]/+page.svelte | 303 + .../tasks/[task_id]/edit/+page.server.js | 190 + .../(app)/tasks/[task_id]/edit/+page.svelte | 274 + .../tasks/board/[boardId]/+page.server.js | 256 + .../(app)/tasks/board/[boardId]/+page.svelte | 549 + .../(app)/tasks/calendar/+page.server.js | 69 + .../routes/(app)/tasks/calendar/+page.svelte | 390 + .../routes/(app)/tasks/list/+page.server.js | 88 + .../src/routes/(app)/tasks/list/+page.svelte | 426 + .../routes/(app)/tasks/new/+page.server.js | 178 + .../src/routes/(app)/tasks/new/+page.svelte | 353 + .../src/routes/(app)/users/+page.server.js | 299 + frontend/src/routes/(app)/users/+page.svelte | 468 + .../routes/(no-layout)/bounce/+page.svelte | 9 + .../routes/(no-layout)/login/+page.server.js | 188 + .../src/routes/(no-layout)/login/+page.svelte | 254 + .../routes/(no-layout)/logout/+page.server.js | 35 + .../routes/(no-layout)/org/+page.server.js | 128 + .../src/routes/(no-layout)/org/+page.svelte | 116 + .../(no-layout)/org/new/+page.server.js | 113 + .../routes/(no-layout)/org/new/+page.svelte | 86 + frontend/static/funding.json | 122 + frontend/static/logo.png | Bin 0 -> 2595 bytes frontend/svelte.config.js | 5 + frontend/tailwind.config.ts | 5 + frontend/vite.config.js | 7 + installation.md | 59 - invoices/admin.py | 3 - invoices/migrations/0001_initial.py | 95 - invoices/swagger_params.py | 74 - invoices/swagger_params1.py | 79 - invoices/templates/invoice_create_1.html | 548 - invoices/templates/invoice_download_pdf.html | 176 - invoices/templates/invoices_create.html | 267 - invoices/templates/invoices_detail.html | 524 - invoices/templates/invoices_detail_1.html | 636 - invoices/templates/invoices_list.html | 605 - invoices/views.py | 678 - leads/migrations/0001_initial.py | 88 - .../migrations/0002_alter_lead_created_by.py | 21 - opportunity/migrations/0001_initial.py | 54 - .../0002_alter_opportunity_created_by.py | 21 - opportunity/models.py | 91 - planner/__init__.py | 0 planner/admin.py | 8 - planner/apps.py | 5 - planner/forms.py | 97 - planner/migrations/0001_initial.py | 74 - planner/migrations/__init__.py | 0 planner/models.py | 106 - planner/serializer.py | 0 planner/templates/calls.html | 570 - planner/templates/calls_list.html | 61 - planner/templates/contacts.html | 63 - planner/templates/dialog_models.html | 101 - planner/templates/events_base.html | 158 - planner/templates/leads.html | 63 - planner/templates/meetings.html | 519 - planner/templates/meetings_list.html | 81 - planner/templates/reminder.html | 13 - planner/templates/tasks.html | 405 - planner/templates/tasks_list.html | 66 - planner/templates/users.html | 64 - planner/tests.py | 282 - planner/urls.py | 38 - planner/views.py | 704 - requirements.txt | 22 - scripts/gunicorn.sh | 20 - scripts/migrate.sh | 13 - static/assets/css/animate.min.css | 7 - static/assets/css/bootstrap.min.css | 7 - static/assets/css/bootstrap.min.css.map | 0 static/assets/css/flaticon.css | 179 - static/assets/css/fontawesome.min.css | 5 - static/assets/css/magnific-popup.min.css | 1 - static/assets/css/meanmenu.min.css | 8 - static/assets/css/odometer.min.css | 2 - static/assets/css/owl.carousel.min.css | 6 - static/assets/css/owl.theme.default.min.css | 6 - static/assets/css/owl.video.play.png | Bin 4976 -> 0 bytes static/assets/css/rangeSlider.min.css | 4 - static/assets/css/responsive.css | 4956 ----- static/assets/css/responsive.css.map | 1 - static/assets/css/responsive.scss | 6664 ------- static/assets/css/showMoreItems-theme.min.css | 1 - static/assets/css/style.css | 15936 --------------- static/assets/css/style.css.map | 0 static/assets/css/style.scss | 16505 ---------------- static/assets/img/about/about-img1.jpg | Bin 9092 -> 0 bytes static/assets/img/about/about-img2.png | Bin 2673 -> 0 bytes static/assets/img/about/about-img3.png | Bin 2239 -> 0 bytes static/assets/img/about/about-img4.png | Bin 2238 -> 0 bytes static/assets/img/about/about-img5.png | Bin 1926 -> 0 bytes static/assets/img/about/about-img6.jpg | Bin 4813 -> 0 bytes static/assets/img/about/about-img7.jpg | Bin 5699 -> 0 bytes static/assets/img/app-banner.png | Bin 3147 -> 0 bytes static/assets/img/app-download.png | Bin 8101 -> 0 bytes static/assets/img/apple-store.png | Bin 5313 -> 0 bytes static/assets/img/bg1.jpg | Bin 48553 -> 0 bytes static/assets/img/bg10.jpg | Bin 16353 -> 0 bytes static/assets/img/bg11.jpg | Bin 18392 -> 0 bytes static/assets/img/bg12.png | Bin 148345 -> 0 bytes static/assets/img/bg2.jpg | Bin 29064 -> 0 bytes static/assets/img/bg3.jpg | Bin 51619 -> 0 bytes static/assets/img/bg4.jpg | Bin 20350 -> 0 bytes static/assets/img/bg5.jpg | Bin 38734 -> 0 bytes static/assets/img/bg6.jpg | Bin 38085 -> 0 bytes static/assets/img/bg7.jpg | Bin 32809 -> 0 bytes static/assets/img/bg8.jpg | Bin 25964 -> 0 bytes static/assets/img/bg9.jpg | Bin 27871 -> 0 bytes .../img/blog-banner/blog-banner-list1.jpg | Bin 11865 -> 0 bytes .../img/blog-banner/blog-banner-list2.jpg | Bin 11865 -> 0 bytes .../img/blog-banner/blog-banner-list3.jpg | Bin 11865 -> 0 bytes .../img/blog-banner/blog-banner-list4.jpg | Bin 11865 -> 0 bytes static/assets/img/blog-banner/blog-banner.jpg | Bin 12495 -> 0 bytes static/assets/img/blog/blog-img1.jpg | Bin 16524 -> 0 bytes static/assets/img/blog/blog-img10.jpg | Bin 11848 -> 0 bytes static/assets/img/blog/blog-img11.jpg | Bin 11848 -> 0 bytes static/assets/img/blog/blog-img12.jpg | Bin 11848 -> 0 bytes static/assets/img/blog/blog-img13.jpg | Bin 11848 -> 0 bytes static/assets/img/blog/blog-img14.jpg | Bin 11848 -> 0 bytes static/assets/img/blog/blog-img15.jpg | Bin 8757 -> 0 bytes static/assets/img/blog/blog-img16.jpg | Bin 12533 -> 0 bytes static/assets/img/blog/blog-img17.jpg | Bin 12533 -> 0 bytes static/assets/img/blog/blog-img18.jpg | Bin 12533 -> 0 bytes static/assets/img/blog/blog-img19.jpg | Bin 12533 -> 0 bytes static/assets/img/blog/blog-img2.jpg | Bin 16524 -> 0 bytes static/assets/img/blog/blog-img20.jpg | Bin 12533 -> 0 bytes static/assets/img/blog/blog-img21.jpg | Bin 12533 -> 0 bytes static/assets/img/blog/blog-img22.jpg | Bin 11865 -> 0 bytes static/assets/img/blog/blog-img23.jpg | Bin 11865 -> 0 bytes static/assets/img/blog/blog-img24.jpg | Bin 11865 -> 0 bytes static/assets/img/blog/blog-img25.jpg | Bin 10567 -> 0 bytes static/assets/img/blog/blog-img26.jpg | Bin 10567 -> 0 bytes static/assets/img/blog/blog-img27.jpg | Bin 10567 -> 0 bytes static/assets/img/blog/blog-img3.jpg | Bin 16524 -> 0 bytes static/assets/img/blog/blog-img4.jpg | Bin 10397 -> 0 bytes static/assets/img/blog/blog-img5.jpg | Bin 10397 -> 0 bytes static/assets/img/blog/blog-img6.jpg | Bin 11848 -> 0 bytes static/assets/img/blog/blog-img7.jpg | Bin 11848 -> 0 bytes static/assets/img/blog/blog-img8.jpg | Bin 11848 -> 0 bytes static/assets/img/blog/blog-img9.jpg | Bin 11848 -> 0 bytes static/assets/img/business-banner.jpg | Bin 7384 -> 0 bytes .../assets/img/categories/categories-img1.jpg | Bin 9609 -> 0 bytes .../img/categories/categories-img10.jpg | Bin 9855 -> 0 bytes .../img/categories/categories-img11.jpg | Bin 9855 -> 0 bytes .../assets/img/categories/categories-img2.jpg | Bin 9609 -> 0 bytes .../assets/img/categories/categories-img3.jpg | Bin 9609 -> 0 bytes .../assets/img/categories/categories-img4.jpg | Bin 7020 -> 0 bytes .../assets/img/categories/categories-img5.jpg | Bin 7020 -> 0 bytes .../assets/img/categories/categories-img6.jpg | Bin 7020 -> 0 bytes .../assets/img/categories/categories-img7.jpg | Bin 7020 -> 0 bytes .../assets/img/categories/categories-img8.jpg | Bin 7020 -> 0 bytes .../assets/img/categories/categories-img9.jpg | Bin 9855 -> 0 bytes static/assets/img/coming-soon.jpg | Bin 21464 -> 0 bytes static/assets/img/consulting-banner-bg.jpg | Bin 40767 -> 0 bytes static/assets/img/cta-bg1.jpg | Bin 40767 -> 0 bytes static/assets/img/custom-ads.jpg | Bin 44485 -> 0 bytes static/assets/img/error.png | Bin 52401 -> 0 bytes static/assets/img/facility-img.png | Bin 2398 -> 0 bytes static/assets/img/favicon.png | Bin 2227 -> 0 bytes .../img/featured-video/featured-video1.jpg | Bin 11470 -> 0 bytes .../img/featured-video/featured-video2.jpg | Bin 11470 -> 0 bytes .../img/featured-video/featured-video3.jpg | Bin 11470 -> 0 bytes .../img/featured-video/featured-video4.jpg | Bin 11470 -> 0 bytes .../img/featured-video/featured-video5.jpg | Bin 11470 -> 0 bytes static/assets/img/furniture-banner-bg1.jpg | Bin 40767 -> 0 bytes static/assets/img/furniture-banner-bg2.jpg | Bin 40767 -> 0 bytes static/assets/img/furniture-banner-bg3.jpg | Bin 40767 -> 0 bytes static/assets/img/gallery/gallery-img1.jpg | Bin 13856 -> 0 bytes static/assets/img/gallery/gallery-img2.jpg | Bin 13856 -> 0 bytes static/assets/img/gallery/gallery-img3.jpg | Bin 13856 -> 0 bytes static/assets/img/gallery/gallery-img4.jpg | Bin 13856 -> 0 bytes static/assets/img/gallery/gallery-img5.jpg | Bin 13856 -> 0 bytes static/assets/img/gallery/gallery-img6.jpg | Bin 13856 -> 0 bytes static/assets/img/gallery/gallery-img7.jpg | Bin 13856 -> 0 bytes static/assets/img/gallery/gallery-img8.jpg | Bin 13856 -> 0 bytes static/assets/img/gallery/gallery-img9.jpg | Bin 13856 -> 0 bytes static/assets/img/how-it-works.png | Bin 2078 -> 0 bytes .../assets/img/instagram/instagram-img1.jpg | Bin 6702 -> 0 bytes .../assets/img/instagram/instagram-img10.jpg | Bin 6702 -> 0 bytes .../assets/img/instagram/instagram-img11.jpg | Bin 6702 -> 0 bytes .../assets/img/instagram/instagram-img12.jpg | Bin 6702 -> 0 bytes .../assets/img/instagram/instagram-img13.jpg | Bin 6702 -> 0 bytes .../assets/img/instagram/instagram-img14.jpg | Bin 6702 -> 0 bytes .../assets/img/instagram/instagram-img15.jpg | Bin 6702 -> 0 bytes .../assets/img/instagram/instagram-img16.jpg | Bin 6702 -> 0 bytes .../assets/img/instagram/instagram-img2.jpg | Bin 6702 -> 0 bytes .../assets/img/instagram/instagram-img3.jpg | Bin 6702 -> 0 bytes .../assets/img/instagram/instagram-img4.jpg | Bin 6702 -> 0 bytes .../assets/img/instagram/instagram-img5.jpg | Bin 6702 -> 0 bytes .../assets/img/instagram/instagram-img6.jpg | Bin 6702 -> 0 bytes .../assets/img/instagram/instagram-img7.jpg | Bin 6702 -> 0 bytes .../assets/img/instagram/instagram-img8.jpg | Bin 6702 -> 0 bytes .../assets/img/instagram/instagram-img9.jpg | Bin 6702 -> 0 bytes static/assets/img/it-agency-banner-bg.jpg | Bin 40767 -> 0 bytes .../assets/img/latest-posts/latest-posts1.jpg | Bin 9850 -> 0 bytes .../assets/img/latest-posts/latest-posts2.jpg | Bin 9850 -> 0 bytes .../assets/img/latest-posts/latest-posts3.jpg | Bin 11848 -> 0 bytes .../assets/img/latest-posts/latest-posts4.jpg | Bin 11848 -> 0 bytes .../assets/img/latest-posts/latest-posts5.jpg | Bin 9749 -> 0 bytes static/assets/img/logo-app.png | Bin 4567 -> 0 bytes static/assets/img/logo-blog.png | Bin 3634 -> 0 bytes static/assets/img/logo-business.png | Bin 5289 -> 0 bytes static/assets/img/logo-consulting.png | Bin 4532 -> 0 bytes static/assets/img/logo-it-agency.png | Bin 4414 -> 0 bytes static/assets/img/logo-marketing.png | Bin 4632 -> 0 bytes static/assets/img/logo-personal-portfolio.png | Bin 3533 -> 0 bytes static/assets/img/logo-shop.png | Bin 3718 -> 0 bytes static/assets/img/logo-startup.png | Bin 4619 -> 0 bytes static/assets/img/logo-white-app.png | Bin 6977 -> 0 bytes static/assets/img/logo-white-blog.png | Bin 4580 -> 0 bytes static/assets/img/logo-white-business.png | Bin 5035 -> 0 bytes static/assets/img/logo-white-saas.png | Bin 3708 -> 0 bytes static/assets/img/logo-white-shop.png | Bin 3134 -> 0 bytes static/assets/img/logo-white-startup.png | Bin 4726 -> 0 bytes static/assets/img/marketing-banner.png | Bin 2474 -> 0 bytes .../img/page-title/page-title-bg-image1.jpg | Bin 27625 -> 0 bytes .../img/page-title/page-title-bg-image2.jpg | Bin 27625 -> 0 bytes .../img/page-title/page-title-bg-image3.jpg | Bin 27625 -> 0 bytes .../img/page-title/page-title-bg-image4.jpg | Bin 27625 -> 0 bytes .../img/page-title/page-title-bg-image5.jpg | Bin 27625 -> 0 bytes .../assets/img/page-title/page-title-bg1.jpg | Bin 22550 -> 0 bytes .../assets/img/page-title/page-title-bg2.jpg | Bin 22550 -> 0 bytes .../assets/img/page-title/page-title-bg3.jpg | Bin 22550 -> 0 bytes .../assets/img/page-title/page-title-bg4.jpg | Bin 22550 -> 0 bytes .../assets/img/page-title/page-title-bg5.jpg | Bin 22550 -> 0 bytes static/assets/img/partner/partner-white1.png | Bin 363 -> 0 bytes static/assets/img/partner/partner-white2.png | Bin 363 -> 0 bytes static/assets/img/partner/partner-white3.png | Bin 363 -> 0 bytes static/assets/img/partner/partner-white4.png | Bin 363 -> 0 bytes static/assets/img/partner/partner-white5.png | Bin 363 -> 0 bytes static/assets/img/partner/partner-white6.png | Bin 363 -> 0 bytes static/assets/img/partner/partner1.png | Bin 363 -> 0 bytes static/assets/img/partner/partner2.png | Bin 363 -> 0 bytes static/assets/img/partner/partner3.png | Bin 363 -> 0 bytes static/assets/img/partner/partner4.png | Bin 363 -> 0 bytes static/assets/img/partner/partner5.png | Bin 363 -> 0 bytes static/assets/img/partner/partner6.png | Bin 363 -> 0 bytes .../assets/img/personal-portfolio-banner.jpg | Bin 9137 -> 0 bytes static/assets/img/play-store.png | Bin 4297 -> 0 bytes .../assets/img/portfolio/portfolio-img1.jpg | Bin 13856 -> 0 bytes .../assets/img/portfolio/portfolio-img10.jpg | Bin 13856 -> 0 bytes .../assets/img/portfolio/portfolio-img11.jpg | Bin 13856 -> 0 bytes .../assets/img/portfolio/portfolio-img12.jpg | Bin 13856 -> 0 bytes .../assets/img/portfolio/portfolio-img2.jpg | Bin 13856 -> 0 bytes .../assets/img/portfolio/portfolio-img3.jpg | Bin 13856 -> 0 bytes .../assets/img/portfolio/portfolio-img4.jpg | Bin 13856 -> 0 bytes .../assets/img/portfolio/portfolio-img5.jpg | Bin 13856 -> 0 bytes .../assets/img/portfolio/portfolio-img6.jpg | Bin 13856 -> 0 bytes .../assets/img/portfolio/portfolio-img7.jpg | Bin 13856 -> 0 bytes .../assets/img/portfolio/portfolio-img8.jpg | Bin 13856 -> 0 bytes .../assets/img/portfolio/portfolio-img9.jpg | Bin 13856 -> 0 bytes static/assets/img/process/process1.png | Bin 1153 -> 0 bytes static/assets/img/process/process2.png | Bin 1153 -> 0 bytes static/assets/img/process/process3.png | Bin 1153 -> 0 bytes static/assets/img/products/products-img1.jpg | Bin 14276 -> 0 bytes static/assets/img/products/products-img10.jpg | Bin 14276 -> 0 bytes static/assets/img/products/products-img11.jpg | Bin 14276 -> 0 bytes static/assets/img/products/products-img12.jpg | Bin 14276 -> 0 bytes static/assets/img/products/products-img13.jpg | Bin 14276 -> 0 bytes static/assets/img/products/products-img14.jpg | Bin 14276 -> 0 bytes static/assets/img/products/products-img15.jpg | Bin 14276 -> 0 bytes static/assets/img/products/products-img16.jpg | Bin 14276 -> 0 bytes static/assets/img/products/products-img17.jpg | Bin 14276 -> 0 bytes static/assets/img/products/products-img18.jpg | Bin 14276 -> 0 bytes static/assets/img/products/products-img19.jpg | Bin 14276 -> 0 bytes static/assets/img/products/products-img2.jpg | Bin 14276 -> 0 bytes static/assets/img/products/products-img20.jpg | Bin 14276 -> 0 bytes static/assets/img/products/products-img3.jpg | Bin 14276 -> 0 bytes static/assets/img/products/products-img4.jpg | Bin 14276 -> 0 bytes static/assets/img/products/products-img5.jpg | Bin 14276 -> 0 bytes static/assets/img/products/products-img6.jpg | Bin 14276 -> 0 bytes static/assets/img/products/products-img7.jpg | Bin 14276 -> 0 bytes static/assets/img/products/products-img8.jpg | Bin 14276 -> 0 bytes static/assets/img/products/products-img9.jpg | Bin 14276 -> 0 bytes static/assets/img/saas-banner.png | Bin 3639 -> 0 bytes static/assets/img/screenshot/frame.png | Bin 8204 -> 0 bytes static/assets/img/screenshot/screenshot1.png | Bin 6853 -> 0 bytes static/assets/img/screenshot/screenshot2.png | Bin 6853 -> 0 bytes static/assets/img/screenshot/screenshot3.png | Bin 6757 -> 0 bytes static/assets/img/screenshot/screenshot4.png | Bin 27116 -> 0 bytes static/assets/img/screenshot/screenshot5.png | Bin 26461 -> 0 bytes static/assets/img/services/services-img1.jpg | Bin 9275 -> 0 bytes static/assets/img/services/services-img10.png | Bin 1945 -> 0 bytes static/assets/img/services/services-img11.png | Bin 1945 -> 0 bytes static/assets/img/services/services-img12.png | Bin 1945 -> 0 bytes static/assets/img/services/services-img13.jpg | Bin 10663 -> 0 bytes static/assets/img/services/services-img14.jpg | Bin 10663 -> 0 bytes static/assets/img/services/services-img15.jpg | Bin 10663 -> 0 bytes static/assets/img/services/services-img16.jpg | Bin 10663 -> 0 bytes static/assets/img/services/services-img17.jpg | Bin 10663 -> 0 bytes static/assets/img/services/services-img18.jpg | Bin 10663 -> 0 bytes static/assets/img/services/services-img2.jpg | Bin 9275 -> 0 bytes static/assets/img/services/services-img3.jpg | Bin 9275 -> 0 bytes static/assets/img/services/services-img4.jpg | Bin 9275 -> 0 bytes static/assets/img/services/services-img5.jpg | Bin 9275 -> 0 bytes static/assets/img/services/services-img6.jpg | Bin 9275 -> 0 bytes static/assets/img/services/services-img7.png | Bin 1945 -> 0 bytes static/assets/img/services/services-img8.png | Bin 1945 -> 0 bytes static/assets/img/services/services-img9.png | Bin 1945 -> 0 bytes static/assets/img/shape/border.png | Bin 4721 -> 0 bytes static/assets/img/shape/border2.png | Bin 5411 -> 0 bytes static/assets/img/shape/shape1.png | Bin 2883 -> 0 bytes static/assets/img/shape/shape10.png | Bin 11089 -> 0 bytes static/assets/img/shape/shape11.png | Bin 3764 -> 0 bytes static/assets/img/shape/shape12.png | Bin 4809 -> 0 bytes static/assets/img/shape/shape13.png | Bin 33580 -> 0 bytes static/assets/img/shape/shape14.png | Bin 9972 -> 0 bytes static/assets/img/shape/shape15.png | Bin 3521 -> 0 bytes static/assets/img/shape/shape16.png | Bin 2521 -> 0 bytes static/assets/img/shape/shape17.png | Bin 6926 -> 0 bytes static/assets/img/shape/shape18.png | Bin 6707 -> 0 bytes static/assets/img/shape/shape19.png | Bin 1922 -> 0 bytes static/assets/img/shape/shape2.png | Bin 1522 -> 0 bytes static/assets/img/shape/shape3.png | Bin 3701 -> 0 bytes static/assets/img/shape/shape4.png | Bin 2151 -> 0 bytes static/assets/img/shape/shape5.png | Bin 6004 -> 0 bytes static/assets/img/shape/shape6.png | Bin 833 -> 0 bytes static/assets/img/shape/shape7.png | Bin 5479 -> 0 bytes static/assets/img/shape/shape8.png | Bin 3081 -> 0 bytes static/assets/img/shape/shape9.png | Bin 1583 -> 0 bytes static/assets/img/shop-banner-bg.jpg | Bin 40767 -> 0 bytes static/assets/img/signature.png | Bin 2777 -> 0 bytes static/assets/img/skills/skills-img1.png | Bin 363 -> 0 bytes static/assets/img/skills/skills-img2.png | Bin 363 -> 0 bytes static/assets/img/skills/skills-img3.png | Bin 363 -> 0 bytes static/assets/img/skills/skills-img4.png | Bin 363 -> 0 bytes static/assets/img/startup-banner.jpg | Bin 11687 -> 0 bytes static/assets/img/team/team-img1.jpg | Bin 6996 -> 0 bytes static/assets/img/team/team-img2.jpg | Bin 6996 -> 0 bytes static/assets/img/team/team-img3.jpg | Bin 6996 -> 0 bytes static/assets/img/team/team-img4.jpg | Bin 6996 -> 0 bytes static/assets/img/team/team-img5.jpg | Bin 6996 -> 0 bytes static/assets/img/team/team-img6.jpg | Bin 6996 -> 0 bytes static/assets/img/team/team-img7.jpg | Bin 6996 -> 0 bytes static/assets/img/team/team-img8.jpg | Bin 6996 -> 0 bytes static/assets/img/team/team-img9.jpg | Bin 6996 -> 0 bytes .../img/testimonials/testimonials-img1.jpg | Bin 8889 -> 0 bytes .../img/testimonials/testimonials-img2.jpg | Bin 8889 -> 0 bytes .../img/testimonials/testimonials-img3.jpg | Bin 11565 -> 0 bytes .../img/testimonials/testimonials-img4.jpg | Bin 11565 -> 0 bytes .../img/testimonials/testimonials-img5.jpg | Bin 11565 -> 0 bytes .../img/testimonials/testimonials-img6.jpg | Bin 11565 -> 0 bytes static/assets/img/trending-img1.jpg | Bin 9111 -> 0 bytes static/assets/img/trending-img2.jpg | Bin 8590 -> 0 bytes static/assets/img/user/user1.jpg | Bin 3397 -> 0 bytes static/assets/img/user/user2.jpg | Bin 3397 -> 0 bytes static/assets/img/user/user3.jpg | Bin 3397 -> 0 bytes static/assets/img/user/user4.jpg | Bin 3397 -> 0 bytes static/assets/img/user/user5.jpg | Bin 3397 -> 0 bytes static/assets/img/video-img.jpg | Bin 13552 -> 0 bytes static/assets/img/video-img2.jpg | Bin 13552 -> 0 bytes static/assets/img/what-we-do.jpg | Bin 8728 -> 0 bytes static/assets/img/who-we-are.jpg | Bin 9893 -> 0 bytes static/assets/img/works/works-img1.jpg | Bin 9092 -> 0 bytes static/assets/img/works/works-img10.jpg | Bin 15996 -> 0 bytes static/assets/img/works/works-img11.jpg | Bin 15996 -> 0 bytes static/assets/img/works/works-img12.jpg | Bin 15996 -> 0 bytes static/assets/img/works/works-img13.jpg | Bin 15996 -> 0 bytes static/assets/img/works/works-img14.jpg | Bin 15996 -> 0 bytes static/assets/img/works/works-img15.jpg | Bin 14594 -> 0 bytes static/assets/img/works/works-img16.jpg | Bin 11566 -> 0 bytes static/assets/img/works/works-img17.jpg | Bin 11566 -> 0 bytes static/assets/img/works/works-img18.jpg | Bin 14594 -> 0 bytes static/assets/img/works/works-img2.jpg | Bin 9092 -> 0 bytes static/assets/img/works/works-img3.jpg | Bin 14594 -> 0 bytes static/assets/img/works/works-img4.jpg | Bin 11566 -> 0 bytes static/assets/img/works/works-img5.jpg | Bin 11566 -> 0 bytes static/assets/img/works/works-img6.jpg | Bin 14594 -> 0 bytes static/assets/img/works/works-img7.jpg | Bin 14594 -> 0 bytes static/assets/img/works/works-img8.jpg | Bin 11566 -> 0 bytes static/assets/img/works/works-img9.jpg | Bin 15996 -> 0 bytes static/assets/js/ajaxchimp.min.js | 1 - static/assets/js/appear.min.js | 14 - static/assets/js/bootstrap.bundle.min.js | 7 - static/assets/js/contact-form-script.js | 62 - static/assets/js/form-validator.min.js | 9 - static/assets/js/jquery.min.js | 2 - static/assets/js/magnific-popup.min.js | 4 - static/assets/js/main.js | 575 - static/assets/js/meanmenu.min.js | 1 - static/assets/js/mixitup.min.js | 14 - static/assets/js/odometer.min.js | 2 - static/assets/js/owl.carousel.min.js | 7 - static/assets/js/parallax.min.js | 381 - static/assets/js/rangeSlider.min.js | 2 - static/assets/js/showMoreItems.min.js | 6 - static/assets/js/smooth-scroll.js | 9 - static/assets/webfonts/Flaticon.eot | Bin 99654 -> 0 bytes static/assets/webfonts/Flaticon.svg | 3178 --- static/assets/webfonts/Flaticon.ttf | Bin 99476 -> 0 bytes static/assets/webfonts/Flaticon.woff | Bin 60280 -> 0 bytes static/assets/webfonts/Flaticon.woff2 | Bin 51648 -> 0 bytes static/assets/webfonts/fa-brands-400.eot | Bin 136822 -> 0 bytes static/assets/webfonts/fa-brands-400.svg | 3717 ---- static/assets/webfonts/fa-brands-400.ttf | Bin 136516 -> 0 bytes static/assets/webfonts/fa-brands-400.woff | Bin 92136 -> 0 bytes static/assets/webfonts/fa-brands-400.woff2 | Bin 78460 -> 0 bytes static/assets/webfonts/fa-regular-400.eot | Bin 34350 -> 0 bytes static/assets/webfonts/fa-regular-400.svg | 801 - static/assets/webfonts/fa-regular-400.ttf | Bin 34052 -> 0 bytes static/assets/webfonts/fa-regular-400.woff | Bin 16772 -> 0 bytes static/assets/webfonts/fa-regular-400.woff2 | Bin 13548 -> 0 bytes static/assets/webfonts/fa-solid-900.eot | Bin 204814 -> 0 bytes static/assets/webfonts/fa-solid-900.svg | 5028 ----- static/assets/webfonts/fa-solid-900.ttf | Bin 204528 -> 0 bytes static/assets/webfonts/fa-solid-900.woff | Bin 104280 -> 0 bytes static/assets/webfonts/fa-solid-900.woff2 | Bin 80300 -> 0 bytes system_requirements.txt | 9 - tasks/__init__.py | 0 tasks/admin.py | 7 - tasks/migrations/0001_initial.py | 47 - .../migrations/0002_alter_task_created_by.py | 21 - tasks/migrations/__init__.py | 0 tasks/models.py | 73 - tasks/serializer.py | 95 - tasks/urls.py | 12 - tasks/views.py | 424 - teams/__init__.py | 0 teams/admin.py | 3 - teams/apps.py | 5 - teams/migrations/0001_initial.py | 40 - teams/migrations/0002_alter_teams_table.py | 17 - .../migrations/0003_alter_teams_created_by.py | 21 - teams/migrations/__init__.py | 0 teams/models.py | 34 - teams/serializer.py | 67 - teams/swagger_params1.py | 17 - teams/tasks.py | 146 - teams/urls.py | 10 - teams/views.py | 191 - templates/base.html | 99 - templates/cms/blog/blog_detail_page.html | 46 - templates/cms/blog/blog_list_page.html | 65 - templates/cms/home_page.html | 14 - templates/cms/streams/aboutapp.html | 39 - templates/cms/streams/app_features.html | 25 - templates/cms/streams/blog/code_block.html | 2 - templates/cms/streams/blog/content_title.html | 1 - templates/cms/streams/blog/image.html | 4 - templates/cms/streams/blog/rich_text.html | 1 - templates/cms/streams/carousel.html | 25 - templates/cms/streams/count.html | 20 - templates/cms/streams/home_blog.html | 38 - .../cms/streams/left_image_right_content.html | 44 - templates/cms/streams/pricing.html | 36 - .../cms/streams/right_image_left_content.html | 42 - templates/cms_base.html | 325 - templates/root.html | 208 - 804 files changed, 42869 insertions(+), 76402 deletions(-) delete mode 100644 accounts/migrations/0001_initial.py delete mode 100644 accounts/migrations/0002_initial.py delete mode 100644 accounts/migrations/0003_alter_account_created_by.py delete mode 100644 accounts/models.py rename ENV.md => backend/.env.example (59%) create mode 100644 backend/README.md rename {accounts => backend/accounts}/__init__.py (100%) rename {accounts => backend/accounts}/apps.py (100%) create mode 100644 backend/accounts/migrations/0001_initial.py create mode 100644 backend/accounts/migrations/0002_initial.py rename {accounts => backend/accounts}/migrations/__init__.py (100%) create mode 100644 backend/accounts/models.py rename {accounts => backend/accounts}/serializer.py (62%) rename accounts/swagger_params1.py => backend/accounts/swagger_params.py (99%) rename {accounts => backend/accounts}/tasks.py (89%) rename {accounts => backend/accounts}/tests_celery_tasks.py (100%) rename {accounts => backend/accounts}/urls.py (100%) rename {accounts => backend/accounts}/views.py (79%) rename {cases => backend/cases}/__init__.py (100%) rename {cases => backend/cases}/apps.py (100%) create mode 100644 backend/cases/migrations/0001_initial.py create mode 100644 backend/cases/migrations/0002_initial.py rename {cases => backend/cases}/migrations/__init__.py (100%) create mode 100644 backend/cases/models.py rename {cases => backend/cases}/serializer.py (95%) create mode 100644 backend/cases/solution_serializers.py create mode 100644 backend/cases/solution_views.py rename cases/swagger_params1.py => backend/cases/swagger_params.py (58%) rename {cases => backend/cases}/tasks.py (100%) rename {cases => backend/cases}/tests_celery_tasks.py (100%) create mode 100644 backend/cases/urls.py rename {cases => backend/cases}/views.py (79%) rename {cms => backend/common}/__init__.py (100%) rename {common => backend/common}/access_decorators_mixins.py (100%) create mode 100644 backend/common/admin.py rename {common => backend/common}/app_urls/__init__.py (65%) create mode 100644 backend/common/apps.py create mode 100644 backend/common/audit_log.py create mode 100644 backend/common/base.py create mode 100644 backend/common/celery_utils.py rename {cms/migrations => backend/common/context_processors}/__init__.py (100%) rename {common => backend/common}/context_processors/common.py (100%) rename {common => backend/common}/custom_auth.py (100%) rename {common => backend/common}/custom_openapi.py (79%) rename {common => backend/common}/external_auth.py (62%) rename {common => backend/common/management}/__init__.py (100%) rename {common/context_processors => backend/common/management/commands}/__init__.py (100%) create mode 100644 backend/common/management/commands/audit_org_fields.py create mode 100644 backend/common/management/commands/manage_rls.py create mode 100644 backend/common/management/commands/migrate_from_prisma.py rename {common => backend/common}/manager.py (54%) rename {common => backend/common}/middleware/__init__.py (100%) create mode 100644 backend/common/middleware/get_company.py create mode 100644 backend/common/middleware/rls_context.py create mode 100644 backend/common/migrations/0001_initial.py create mode 100644 backend/common/migrations/0002_enable_rls.py rename {common => backend/common}/migrations/__init__.py (100%) create mode 100644 backend/common/mixins.py rename {common => backend/common}/models.py (53%) create mode 100644 backend/common/permissions.py create mode 100644 backend/common/rls/__init__.py create mode 100644 backend/common/serializer.py create mode 100644 backend/common/signals.py rename {common => backend/common}/status.py (99%) rename {common => backend/common}/swagger-ui.html (100%) rename common/swagger_params1.py => backend/common/swagger_params.py (52%) rename {common => backend/common}/tasks.py (61%) rename {common => backend/common}/templates/comment_email.html (100%) rename {common => backend/common}/templates/password_reset_email.html (100%) rename {common => backend/common}/templates/user_delete_email.html (100%) rename {common => backend/common}/templates/user_status.html (100%) rename {common => backend/common}/templates/user_status_activate.html (100%) rename {common => backend/common}/templates/user_status_deactivate.html (100%) rename {common => backend/common}/templates/user_status_in.html (100%) rename {common => backend/common}/templatetags/__init__.py (100%) rename {common => backend/common}/templatetags/common_tags.py (100%) rename {contacts => backend/common/tests}/__init__.py (100%) create mode 100644 backend/common/tests/test_multitenancy.py rename {common => backend/common}/tests_celery_tasks.py (90%) rename {common => backend/common}/token_generator.py (100%) create mode 100644 backend/common/urls.py rename {common => backend/common}/utils.py (97%) create mode 100644 backend/common/views.py rename {contacts/migrations => backend/contacts}/__init__.py (100%) rename {contacts => backend/contacts}/admin.py (100%) rename {contacts => backend/contacts}/apps.py (100%) create mode 100644 backend/contacts/migrations/0001_initial.py rename {docs => backend/contacts/migrations}/__init__.py (100%) create mode 100644 backend/contacts/models.py rename {contacts => backend/contacts}/serializer.py (60%) create mode 100644 backend/contacts/swagger_params.py rename {contacts => backend/contacts}/tasks.py (100%) rename {contacts => backend/contacts}/tests_celery_tasks.py (100%) rename {contacts => backend/contacts}/urls.py (99%) rename {contacts => backend/contacts}/views.py (68%) rename {crm => backend/crm}/__init__.py (100%) rename {crm => backend/crm}/celery.py (100%) rename {crm => backend/crm}/server_settings.py (100%) rename {crm => backend/crm}/settings.py (90%) rename {crm => backend/crm}/urls.py (77%) rename {crm => backend/crm}/wsgi.py (100%) rename {emails => backend/invoices}/__init__.py (100%) create mode 100644 backend/invoices/admin.py rename {invoices => backend/invoices}/api_urls.py (100%) rename {invoices => backend/invoices}/api_views.py (89%) rename {invoices => backend/invoices}/apps.py (100%) rename {invoices => backend/invoices}/forms.py (96%) create mode 100644 backend/invoices/migrations/0001_initial.py rename {emails => backend/invoices}/migrations/__init__.py (100%) rename {invoices => backend/invoices}/models.py (68%) rename {invoices => backend/invoices}/serializer.py (61%) create mode 100644 backend/invoices/serializers.py create mode 100644 backend/invoices/swagger_params.py rename {invoices => backend/invoices}/tasks.py (100%) rename {invoices => backend/invoices}/templates/assigned_to_email_template.html (100%) rename {invoices => backend/invoices}/templates/invoice_cancelled.html (100%) rename {invoices => backend/invoices}/templates/invoice_detail_email.html (100%) rename {invoices => backend/invoices}/tests.py (99%) rename {invoices => backend/invoices}/tests_celery_tasks.py (100%) rename {invoices => backend/invoices}/urls.py (100%) create mode 100644 backend/invoices/views.py rename {events => backend/leads}/__init__.py (100%) rename {leads => backend/leads}/admin.py (100%) rename {leads => backend/leads}/apps.py (100%) rename {leads => backend/leads}/forms.py (100%) create mode 100644 backend/leads/migrations/0001_initial.py rename {events => backend/leads}/migrations/__init__.py (100%) rename {leads => backend/leads}/models.py (56%) rename {leads => backend/leads}/serializer.py (62%) rename leads/swagger_params1.py => backend/leads/swagger_params.py (100%) rename {leads => backend/leads}/tasks.py (89%) rename {leads => backend/leads}/tests_celery_tasks.py (100%) rename {leads => backend/leads}/urls.py (78%) rename {leads => backend/leads}/views.py (66%) rename manage.py => backend/manage.py (100%) rename {invoices => backend/opportunity}/__init__.py (100%) rename {opportunity => backend/opportunity}/admin.py (100%) rename {opportunity => backend/opportunity}/apps.py (100%) create mode 100644 backend/opportunity/migrations/0001_initial.py rename {invoices => backend/opportunity}/migrations/__init__.py (100%) create mode 100644 backend/opportunity/models.py rename {opportunity => backend/opportunity}/serializer.py (67%) rename opportunity/swagger_params1.py => backend/opportunity/swagger_params.py (55%) rename {opportunity => backend/opportunity}/tasks.py (100%) rename {opportunity => backend/opportunity}/tests_celery_tasks.py (100%) rename {opportunity => backend/opportunity}/urls.py (100%) rename {opportunity => backend/opportunity}/views.py (83%) rename pytest.ini => backend/pytest.ini (100%) create mode 100644 backend/requirements.txt rename setup.py => backend/setup.py (100%) rename leads/__init__.py => backend/static/.gitkeep (100%) rename {leads/migrations => backend/tasks}/__init__.py (100%) create mode 100644 backend/tasks/admin.py rename {tasks => backend/tasks}/apps.py (100%) rename {tasks => backend/tasks}/celery_tasks.py (100%) create mode 100644 backend/tasks/migrations/0001_initial.py rename {opportunity => backend/tasks/migrations}/__init__.py (100%) create mode 100644 backend/tasks/models.py create mode 100644 backend/tasks/serializer.py rename tasks/swagger_params1.py => backend/tasks/swagger_params.py (63%) rename {tasks => backend/tasks}/templates/tasks_email_template.html (100%) rename {tasks => backend/tasks}/tests_celery_tasks.py (100%) create mode 100644 backend/tasks/urls.py rename {tasks => backend/tasks}/utils.py (100%) create mode 100644 backend/tasks/views.py rename {templates => backend/templates}/assigned_to/account_assigned.html (100%) rename {templates => backend/templates}/assigned_to/cases_assigned.html (100%) rename {templates => backend/templates}/assigned_to/contact_assigned.html (100%) rename {templates => backend/templates}/assigned_to/leads_assigned.html (100%) rename {templates => backend/templates}/assigned_to/opportunity_assigned.html (100%) rename {templates => backend/templates}/common/user_activation_status.html (100%) rename {templates => backend/templates}/healthz.html (100%) rename {templates => backend/templates}/registration/password_reset_email.html (100%) rename {templates => backend/templates}/root_email_template.html (100%) rename {templates => backend/templates}/root_email_template_new.html (100%) delete mode 100644 cases/migrations/0001_initial.py delete mode 100644 cases/migrations/0002_initial.py delete mode 100644 cases/migrations/0003_alter_case_created_by.py delete mode 100644 cases/models.py delete mode 100644 cases/urls.py delete mode 100644 cms/admin.py delete mode 100644 cms/apps.py delete mode 100644 cms/blocks.py delete mode 100644 cms/migrations/0001_initial.py delete mode 100644 cms/models.py delete mode 100644 cms/templatetags/menus_tags.py delete mode 100644 cms/tests.py delete mode 100644 cms/views.py delete mode 100644 common/admin.py delete mode 100644 common/apps.py delete mode 100644 common/base.py delete mode 100644 common/middleware/get_company.py delete mode 100644 common/migrations/0001_initial.py delete mode 100644 common/migrations/0002_initial.py delete mode 100644 common/migrations/0003_alter_user_profile_pic.py delete mode 100644 common/migrations/0004_alter_profile_alternate_phone.py delete mode 100644 common/migrations/0005_org_api_key.py delete mode 100644 common/migrations/0006_alter_org_api_key.py delete mode 100644 common/migrations/0007_org_is_active.py delete mode 100644 common/migrations/0008_alter_user_managers.py delete mode 100644 common/migrations/0009_user_is_staff.py delete mode 100644 common/mixins.py delete mode 100644 common/serializer.py delete mode 100644 common/urls.py delete mode 100644 common/views.py delete mode 100644 contacts/migrations/0001_initial.py delete mode 100644 contacts/migrations/0002_alter_contact_created_by.py delete mode 100644 contacts/migrations/0003_alter_contact_secondary_number_and_more.py delete mode 100644 contacts/migrations/0004_alter_contact_address.py delete mode 100644 contacts/migrations/0005_alter_contact_address.py delete mode 100644 contacts/models.py delete mode 100644 contacts/swagger_params1.py delete mode 100644 docker/docker-compose.yml delete mode 100644 docker/dockerfile delete mode 100644 docker/entrypoint.sh delete mode 100644 docker/wait-for-postgres.sh delete mode 100644 docs/Makefile delete mode 100644 docs/source/Accounts.rst delete mode 100644 docs/source/Cases.rst delete mode 100644 docs/source/Change Password.rst delete mode 100644 docs/source/Contacts.rst delete mode 100644 docs/source/Documents.rst delete mode 100644 docs/source/Forget Password.rst delete mode 100644 docs/source/Leads.rst delete mode 100644 docs/source/Login.rst delete mode 100644 docs/source/Opportunity.rst delete mode 100644 docs/source/Profile.rst delete mode 100644 docs/source/conf.py delete mode 100644 docs/source/index.rst delete mode 100644 emails/admin.py delete mode 100644 emails/apps.py delete mode 100644 emails/forms.py delete mode 100644 emails/migrations/0001_initial.py delete mode 100644 emails/models.py delete mode 100644 emails/serializer.py delete mode 100644 emails/templates/create_mail.html delete mode 100644 emails/templates/emails.html delete mode 100644 emails/templates/mail_all.html delete mode 100644 emails/templates/mail_center.html delete mode 100644 emails/templates/mail_drafts.html delete mode 100644 emails/templates/mail_important.html delete mode 100644 emails/templates/mail_sent.html delete mode 100644 emails/templates/mail_trash.html delete mode 100644 emails/tests.py delete mode 100644 emails/urls.py delete mode 100644 emails/views.py delete mode 100644 events/admin.py delete mode 100644 events/apps.py delete mode 100644 events/migrations/0001_initial.py delete mode 100644 events/models.py delete mode 100644 events/serializer.py delete mode 100644 events/swagger_params1.py delete mode 100644 events/tasks.py delete mode 100644 events/templates/assigned_to_email_template_event.html delete mode 100644 events/tests_celery_tasks.py delete mode 100644 events/urls.py delete mode 100644 events/views.py create mode 100644 frontend/.env.example create mode 100644 frontend/.gitignore create mode 100644 frontend/.npmrc create mode 100644 frontend/.prettierignore create mode 100644 frontend/.prettierrc create mode 100644 frontend/README.md create mode 100644 frontend/eslint.config.js create mode 100644 frontend/jsconfig.json create mode 100644 frontend/package.json create mode 100644 frontend/src/app.css create mode 100644 frontend/src/app.d.ts create mode 100644 frontend/src/app.html create mode 100644 frontend/src/hooks.server.js create mode 100644 frontend/src/lib/api-helpers.js create mode 100644 frontend/src/lib/api.js create mode 100644 frontend/src/lib/assets/images/banner.png create mode 100644 frontend/src/lib/assets/images/google.svg create mode 100644 frontend/src/lib/assets/images/img_login.png create mode 100644 frontend/src/lib/assets/images/logo.png create mode 100644 frontend/src/lib/data/accountOwnership.js create mode 100644 frontend/src/lib/data/accountTypes.js create mode 100644 frontend/src/lib/data/countries.js create mode 100644 frontend/src/lib/data/index.js create mode 100644 frontend/src/lib/data/industries.js create mode 100644 frontend/src/lib/data/leadSources.js create mode 100644 frontend/src/lib/data/leadStatuses.js create mode 100644 frontend/src/lib/data/ratings.js create mode 100644 frontend/src/lib/stores/auth.js create mode 100644 frontend/src/lib/utils/phone.js create mode 100644 frontend/src/lib/utils/pkce.js create mode 100644 frontend/src/routes/(app)/+layout.server.js create mode 100644 frontend/src/routes/(app)/+layout.svelte create mode 100644 frontend/src/routes/(app)/+page.server.js create mode 100644 frontend/src/routes/(app)/+page.svelte create mode 100644 frontend/src/routes/(app)/Sidebar.svelte create mode 100644 frontend/src/routes/(app)/accounts/+page.server.js create mode 100644 frontend/src/routes/(app)/accounts/+page.svelte create mode 100644 frontend/src/routes/(app)/accounts/[accountId]/+page.server.js create mode 100644 frontend/src/routes/(app)/accounts/[accountId]/+page.svelte create mode 100644 frontend/src/routes/(app)/accounts/[accountId]/edit/+page.server.js create mode 100644 frontend/src/routes/(app)/accounts/[accountId]/edit/+page.svelte create mode 100644 frontend/src/routes/(app)/accounts/new/+page.server.js create mode 100644 frontend/src/routes/(app)/accounts/new/+page.svelte create mode 100644 frontend/src/routes/(app)/cases/+page.server.js create mode 100644 frontend/src/routes/(app)/cases/+page.svelte create mode 100644 frontend/src/routes/(app)/cases/[caseId]/+page.server.js create mode 100644 frontend/src/routes/(app)/cases/[caseId]/+page.svelte create mode 100644 frontend/src/routes/(app)/cases/[caseId]/edit/+page.server.js create mode 100644 frontend/src/routes/(app)/cases/[caseId]/edit/+page.svelte create mode 100644 frontend/src/routes/(app)/cases/new/+page.server.js create mode 100644 frontend/src/routes/(app)/cases/new/+page.svelte create mode 100644 frontend/src/routes/(app)/contacts/+page.server.js create mode 100644 frontend/src/routes/(app)/contacts/+page.svelte create mode 100644 frontend/src/routes/(app)/contacts/[contactId]/+page.server.js create mode 100644 frontend/src/routes/(app)/contacts/[contactId]/+page.svelte create mode 100644 frontend/src/routes/(app)/contacts/[contactId]/edit/+page.server.js create mode 100644 frontend/src/routes/(app)/contacts/[contactId]/edit/+page.svelte create mode 100644 frontend/src/routes/(app)/contacts/new/+page.server.js create mode 100644 frontend/src/routes/(app)/contacts/new/+page.svelte create mode 100644 frontend/src/routes/(app)/invoices/+page.server.js create mode 100644 frontend/src/routes/(app)/invoices/+page.svelte create mode 100644 frontend/src/routes/(app)/invoices/[invoiceId]/+page.server.js create mode 100644 frontend/src/routes/(app)/invoices/[invoiceId]/+page.svelte create mode 100644 frontend/src/routes/(app)/invoices/[invoiceId]/edit/+page.server.js rename opportunity/migrations/__init__.py => frontend/src/routes/(app)/invoices/[invoiceId]/edit/+page.svelte (100%) create mode 100644 frontend/src/routes/(app)/invoices/new/+page.server.js create mode 100644 frontend/src/routes/(app)/invoices/new/+page.svelte create mode 100644 frontend/src/routes/(app)/leads/[lead_id]/+page.server.js create mode 100644 frontend/src/routes/(app)/leads/[lead_id]/+page.svelte create mode 100644 frontend/src/routes/(app)/leads/[lead_id]/edit/+page.server.js create mode 100644 frontend/src/routes/(app)/leads/[lead_id]/edit/+page.svelte create mode 100644 frontend/src/routes/(app)/leads/new/+page.server.js create mode 100644 frontend/src/routes/(app)/leads/new/+page.svelte create mode 100644 frontend/src/routes/(app)/leads/open/+page.server.js create mode 100644 frontend/src/routes/(app)/leads/open/+page.svelte create mode 100644 frontend/src/routes/(app)/opportunities/+page.server.js create mode 100644 frontend/src/routes/(app)/opportunities/+page.svelte create mode 100644 frontend/src/routes/(app)/opportunities/[opportunityId]/+page.server.js create mode 100644 frontend/src/routes/(app)/opportunities/[opportunityId]/+page.svelte create mode 100644 frontend/src/routes/(app)/opportunities/[opportunityId]/close/+page.server.js create mode 100644 frontend/src/routes/(app)/opportunities/[opportunityId]/close/+page.svelte create mode 100644 frontend/src/routes/(app)/opportunities/[opportunityId]/delete/+page.server.js create mode 100644 frontend/src/routes/(app)/opportunities/[opportunityId]/delete/+page.svelte create mode 100644 frontend/src/routes/(app)/opportunities/[opportunityId]/edit/+page.server.js create mode 100644 frontend/src/routes/(app)/opportunities/[opportunityId]/edit/+page.svelte create mode 100644 frontend/src/routes/(app)/opportunities/new/+page.server.js create mode 100644 frontend/src/routes/(app)/opportunities/new/+page.svelte create mode 100644 frontend/src/routes/(app)/profile/+page.server.js create mode 100644 frontend/src/routes/(app)/profile/+page.svelte create mode 100644 frontend/src/routes/(app)/support/+page.svelte create mode 100644 frontend/src/routes/(app)/tasks/+page.server.js create mode 100644 frontend/src/routes/(app)/tasks/+page.svelte create mode 100644 frontend/src/routes/(app)/tasks/[task_id]/+page.server.js create mode 100644 frontend/src/routes/(app)/tasks/[task_id]/+page.svelte create mode 100644 frontend/src/routes/(app)/tasks/[task_id]/edit/+page.server.js create mode 100644 frontend/src/routes/(app)/tasks/[task_id]/edit/+page.svelte create mode 100644 frontend/src/routes/(app)/tasks/board/[boardId]/+page.server.js create mode 100644 frontend/src/routes/(app)/tasks/board/[boardId]/+page.svelte create mode 100644 frontend/src/routes/(app)/tasks/calendar/+page.server.js create mode 100644 frontend/src/routes/(app)/tasks/calendar/+page.svelte create mode 100644 frontend/src/routes/(app)/tasks/list/+page.server.js create mode 100644 frontend/src/routes/(app)/tasks/list/+page.svelte create mode 100644 frontend/src/routes/(app)/tasks/new/+page.server.js create mode 100644 frontend/src/routes/(app)/tasks/new/+page.svelte create mode 100644 frontend/src/routes/(app)/users/+page.server.js create mode 100644 frontend/src/routes/(app)/users/+page.svelte create mode 100644 frontend/src/routes/(no-layout)/bounce/+page.svelte create mode 100644 frontend/src/routes/(no-layout)/login/+page.server.js create mode 100644 frontend/src/routes/(no-layout)/login/+page.svelte create mode 100644 frontend/src/routes/(no-layout)/logout/+page.server.js create mode 100644 frontend/src/routes/(no-layout)/org/+page.server.js create mode 100644 frontend/src/routes/(no-layout)/org/+page.svelte create mode 100644 frontend/src/routes/(no-layout)/org/new/+page.server.js create mode 100644 frontend/src/routes/(no-layout)/org/new/+page.svelte create mode 100644 frontend/static/funding.json create mode 100644 frontend/static/logo.png create mode 100644 frontend/svelte.config.js create mode 100644 frontend/tailwind.config.ts create mode 100644 frontend/vite.config.js delete mode 100644 installation.md delete mode 100644 invoices/admin.py delete mode 100644 invoices/migrations/0001_initial.py delete mode 100644 invoices/swagger_params.py delete mode 100644 invoices/swagger_params1.py delete mode 100644 invoices/templates/invoice_create_1.html delete mode 100644 invoices/templates/invoice_download_pdf.html delete mode 100644 invoices/templates/invoices_create.html delete mode 100644 invoices/templates/invoices_detail.html delete mode 100644 invoices/templates/invoices_detail_1.html delete mode 100644 invoices/templates/invoices_list.html delete mode 100644 invoices/views.py delete mode 100644 leads/migrations/0001_initial.py delete mode 100644 leads/migrations/0002_alter_lead_created_by.py delete mode 100644 opportunity/migrations/0001_initial.py delete mode 100644 opportunity/migrations/0002_alter_opportunity_created_by.py delete mode 100644 opportunity/models.py delete mode 100644 planner/__init__.py delete mode 100644 planner/admin.py delete mode 100644 planner/apps.py delete mode 100644 planner/forms.py delete mode 100644 planner/migrations/0001_initial.py delete mode 100644 planner/migrations/__init__.py delete mode 100644 planner/models.py delete mode 100644 planner/serializer.py delete mode 100644 planner/templates/calls.html delete mode 100644 planner/templates/calls_list.html delete mode 100644 planner/templates/contacts.html delete mode 100644 planner/templates/dialog_models.html delete mode 100644 planner/templates/events_base.html delete mode 100644 planner/templates/leads.html delete mode 100644 planner/templates/meetings.html delete mode 100644 planner/templates/meetings_list.html delete mode 100644 planner/templates/reminder.html delete mode 100644 planner/templates/tasks.html delete mode 100644 planner/templates/tasks_list.html delete mode 100644 planner/templates/users.html delete mode 100644 planner/tests.py delete mode 100644 planner/urls.py delete mode 100644 planner/views.py delete mode 100644 requirements.txt delete mode 100755 scripts/gunicorn.sh delete mode 100755 scripts/migrate.sh delete mode 100644 static/assets/css/animate.min.css delete mode 100644 static/assets/css/bootstrap.min.css delete mode 100644 static/assets/css/bootstrap.min.css.map delete mode 100644 static/assets/css/flaticon.css delete mode 100644 static/assets/css/fontawesome.min.css delete mode 100644 static/assets/css/magnific-popup.min.css delete mode 100644 static/assets/css/meanmenu.min.css delete mode 100644 static/assets/css/odometer.min.css delete mode 100644 static/assets/css/owl.carousel.min.css delete mode 100644 static/assets/css/owl.theme.default.min.css delete mode 100644 static/assets/css/owl.video.play.png delete mode 100644 static/assets/css/rangeSlider.min.css delete mode 100644 static/assets/css/responsive.css delete mode 100644 static/assets/css/responsive.css.map delete mode 100644 static/assets/css/responsive.scss delete mode 100644 static/assets/css/showMoreItems-theme.min.css delete mode 100644 static/assets/css/style.css delete mode 100644 static/assets/css/style.css.map delete mode 100644 static/assets/css/style.scss delete mode 100644 static/assets/img/about/about-img1.jpg delete mode 100644 static/assets/img/about/about-img2.png delete mode 100644 static/assets/img/about/about-img3.png delete mode 100644 static/assets/img/about/about-img4.png delete mode 100644 static/assets/img/about/about-img5.png delete mode 100644 static/assets/img/about/about-img6.jpg delete mode 100644 static/assets/img/about/about-img7.jpg delete mode 100644 static/assets/img/app-banner.png delete mode 100644 static/assets/img/app-download.png delete mode 100644 static/assets/img/apple-store.png delete mode 100644 static/assets/img/bg1.jpg delete mode 100644 static/assets/img/bg10.jpg delete mode 100644 static/assets/img/bg11.jpg delete mode 100644 static/assets/img/bg12.png delete mode 100644 static/assets/img/bg2.jpg delete mode 100644 static/assets/img/bg3.jpg delete mode 100644 static/assets/img/bg4.jpg delete mode 100644 static/assets/img/bg5.jpg delete mode 100644 static/assets/img/bg6.jpg delete mode 100644 static/assets/img/bg7.jpg delete mode 100644 static/assets/img/bg8.jpg delete mode 100644 static/assets/img/bg9.jpg delete mode 100644 static/assets/img/blog-banner/blog-banner-list1.jpg delete mode 100644 static/assets/img/blog-banner/blog-banner-list2.jpg delete mode 100644 static/assets/img/blog-banner/blog-banner-list3.jpg delete mode 100644 static/assets/img/blog-banner/blog-banner-list4.jpg delete mode 100644 static/assets/img/blog-banner/blog-banner.jpg delete mode 100644 static/assets/img/blog/blog-img1.jpg delete mode 100644 static/assets/img/blog/blog-img10.jpg delete mode 100644 static/assets/img/blog/blog-img11.jpg delete mode 100644 static/assets/img/blog/blog-img12.jpg delete mode 100644 static/assets/img/blog/blog-img13.jpg delete mode 100644 static/assets/img/blog/blog-img14.jpg delete mode 100644 static/assets/img/blog/blog-img15.jpg delete mode 100644 static/assets/img/blog/blog-img16.jpg delete mode 100644 static/assets/img/blog/blog-img17.jpg delete mode 100644 static/assets/img/blog/blog-img18.jpg delete mode 100644 static/assets/img/blog/blog-img19.jpg delete mode 100644 static/assets/img/blog/blog-img2.jpg delete mode 100644 static/assets/img/blog/blog-img20.jpg delete mode 100644 static/assets/img/blog/blog-img21.jpg delete mode 100644 static/assets/img/blog/blog-img22.jpg delete mode 100644 static/assets/img/blog/blog-img23.jpg delete mode 100644 static/assets/img/blog/blog-img24.jpg delete mode 100644 static/assets/img/blog/blog-img25.jpg delete mode 100644 static/assets/img/blog/blog-img26.jpg delete mode 100644 static/assets/img/blog/blog-img27.jpg delete mode 100644 static/assets/img/blog/blog-img3.jpg delete mode 100644 static/assets/img/blog/blog-img4.jpg delete mode 100644 static/assets/img/blog/blog-img5.jpg delete mode 100644 static/assets/img/blog/blog-img6.jpg delete mode 100644 static/assets/img/blog/blog-img7.jpg delete mode 100644 static/assets/img/blog/blog-img8.jpg delete mode 100644 static/assets/img/blog/blog-img9.jpg delete mode 100644 static/assets/img/business-banner.jpg delete mode 100644 static/assets/img/categories/categories-img1.jpg delete mode 100644 static/assets/img/categories/categories-img10.jpg delete mode 100644 static/assets/img/categories/categories-img11.jpg delete mode 100644 static/assets/img/categories/categories-img2.jpg delete mode 100644 static/assets/img/categories/categories-img3.jpg delete mode 100644 static/assets/img/categories/categories-img4.jpg delete mode 100644 static/assets/img/categories/categories-img5.jpg delete mode 100644 static/assets/img/categories/categories-img6.jpg delete mode 100644 static/assets/img/categories/categories-img7.jpg delete mode 100644 static/assets/img/categories/categories-img8.jpg delete mode 100644 static/assets/img/categories/categories-img9.jpg delete mode 100644 static/assets/img/coming-soon.jpg delete mode 100644 static/assets/img/consulting-banner-bg.jpg delete mode 100644 static/assets/img/cta-bg1.jpg delete mode 100644 static/assets/img/custom-ads.jpg delete mode 100644 static/assets/img/error.png delete mode 100644 static/assets/img/facility-img.png delete mode 100644 static/assets/img/favicon.png delete mode 100644 static/assets/img/featured-video/featured-video1.jpg delete mode 100644 static/assets/img/featured-video/featured-video2.jpg delete mode 100644 static/assets/img/featured-video/featured-video3.jpg delete mode 100644 static/assets/img/featured-video/featured-video4.jpg delete mode 100644 static/assets/img/featured-video/featured-video5.jpg delete mode 100644 static/assets/img/furniture-banner-bg1.jpg delete mode 100644 static/assets/img/furniture-banner-bg2.jpg delete mode 100644 static/assets/img/furniture-banner-bg3.jpg delete mode 100644 static/assets/img/gallery/gallery-img1.jpg delete mode 100644 static/assets/img/gallery/gallery-img2.jpg delete mode 100644 static/assets/img/gallery/gallery-img3.jpg delete mode 100644 static/assets/img/gallery/gallery-img4.jpg delete mode 100644 static/assets/img/gallery/gallery-img5.jpg delete mode 100644 static/assets/img/gallery/gallery-img6.jpg delete mode 100644 static/assets/img/gallery/gallery-img7.jpg delete mode 100644 static/assets/img/gallery/gallery-img8.jpg delete mode 100644 static/assets/img/gallery/gallery-img9.jpg delete mode 100644 static/assets/img/how-it-works.png delete mode 100644 static/assets/img/instagram/instagram-img1.jpg delete mode 100644 static/assets/img/instagram/instagram-img10.jpg delete mode 100644 static/assets/img/instagram/instagram-img11.jpg delete mode 100644 static/assets/img/instagram/instagram-img12.jpg delete mode 100644 static/assets/img/instagram/instagram-img13.jpg delete mode 100644 static/assets/img/instagram/instagram-img14.jpg delete mode 100644 static/assets/img/instagram/instagram-img15.jpg delete mode 100644 static/assets/img/instagram/instagram-img16.jpg delete mode 100644 static/assets/img/instagram/instagram-img2.jpg delete mode 100644 static/assets/img/instagram/instagram-img3.jpg delete mode 100644 static/assets/img/instagram/instagram-img4.jpg delete mode 100644 static/assets/img/instagram/instagram-img5.jpg delete mode 100644 static/assets/img/instagram/instagram-img6.jpg delete mode 100644 static/assets/img/instagram/instagram-img7.jpg delete mode 100644 static/assets/img/instagram/instagram-img8.jpg delete mode 100644 static/assets/img/instagram/instagram-img9.jpg delete mode 100644 static/assets/img/it-agency-banner-bg.jpg delete mode 100644 static/assets/img/latest-posts/latest-posts1.jpg delete mode 100644 static/assets/img/latest-posts/latest-posts2.jpg delete mode 100644 static/assets/img/latest-posts/latest-posts3.jpg delete mode 100644 static/assets/img/latest-posts/latest-posts4.jpg delete mode 100644 static/assets/img/latest-posts/latest-posts5.jpg delete mode 100644 static/assets/img/logo-app.png delete mode 100644 static/assets/img/logo-blog.png delete mode 100644 static/assets/img/logo-business.png delete mode 100644 static/assets/img/logo-consulting.png delete mode 100644 static/assets/img/logo-it-agency.png delete mode 100644 static/assets/img/logo-marketing.png delete mode 100644 static/assets/img/logo-personal-portfolio.png delete mode 100644 static/assets/img/logo-shop.png delete mode 100644 static/assets/img/logo-startup.png delete mode 100644 static/assets/img/logo-white-app.png delete mode 100644 static/assets/img/logo-white-blog.png delete mode 100644 static/assets/img/logo-white-business.png delete mode 100644 static/assets/img/logo-white-saas.png delete mode 100644 static/assets/img/logo-white-shop.png delete mode 100644 static/assets/img/logo-white-startup.png delete mode 100644 static/assets/img/marketing-banner.png delete mode 100644 static/assets/img/page-title/page-title-bg-image1.jpg delete mode 100644 static/assets/img/page-title/page-title-bg-image2.jpg delete mode 100644 static/assets/img/page-title/page-title-bg-image3.jpg delete mode 100644 static/assets/img/page-title/page-title-bg-image4.jpg delete mode 100644 static/assets/img/page-title/page-title-bg-image5.jpg delete mode 100644 static/assets/img/page-title/page-title-bg1.jpg delete mode 100644 static/assets/img/page-title/page-title-bg2.jpg delete mode 100644 static/assets/img/page-title/page-title-bg3.jpg delete mode 100644 static/assets/img/page-title/page-title-bg4.jpg delete mode 100644 static/assets/img/page-title/page-title-bg5.jpg delete mode 100644 static/assets/img/partner/partner-white1.png delete mode 100644 static/assets/img/partner/partner-white2.png delete mode 100644 static/assets/img/partner/partner-white3.png delete mode 100644 static/assets/img/partner/partner-white4.png delete mode 100644 static/assets/img/partner/partner-white5.png delete mode 100644 static/assets/img/partner/partner-white6.png delete mode 100644 static/assets/img/partner/partner1.png delete mode 100644 static/assets/img/partner/partner2.png delete mode 100644 static/assets/img/partner/partner3.png delete mode 100644 static/assets/img/partner/partner4.png delete mode 100644 static/assets/img/partner/partner5.png delete mode 100644 static/assets/img/partner/partner6.png delete mode 100644 static/assets/img/personal-portfolio-banner.jpg delete mode 100644 static/assets/img/play-store.png delete mode 100644 static/assets/img/portfolio/portfolio-img1.jpg delete mode 100644 static/assets/img/portfolio/portfolio-img10.jpg delete mode 100644 static/assets/img/portfolio/portfolio-img11.jpg delete mode 100644 static/assets/img/portfolio/portfolio-img12.jpg delete mode 100644 static/assets/img/portfolio/portfolio-img2.jpg delete mode 100644 static/assets/img/portfolio/portfolio-img3.jpg delete mode 100644 static/assets/img/portfolio/portfolio-img4.jpg delete mode 100644 static/assets/img/portfolio/portfolio-img5.jpg delete mode 100644 static/assets/img/portfolio/portfolio-img6.jpg delete mode 100644 static/assets/img/portfolio/portfolio-img7.jpg delete mode 100644 static/assets/img/portfolio/portfolio-img8.jpg delete mode 100644 static/assets/img/portfolio/portfolio-img9.jpg delete mode 100644 static/assets/img/process/process1.png delete mode 100644 static/assets/img/process/process2.png delete mode 100644 static/assets/img/process/process3.png delete mode 100644 static/assets/img/products/products-img1.jpg delete mode 100644 static/assets/img/products/products-img10.jpg delete mode 100644 static/assets/img/products/products-img11.jpg delete mode 100644 static/assets/img/products/products-img12.jpg delete mode 100644 static/assets/img/products/products-img13.jpg delete mode 100644 static/assets/img/products/products-img14.jpg delete mode 100644 static/assets/img/products/products-img15.jpg delete mode 100644 static/assets/img/products/products-img16.jpg delete mode 100644 static/assets/img/products/products-img17.jpg delete mode 100644 static/assets/img/products/products-img18.jpg delete mode 100644 static/assets/img/products/products-img19.jpg delete mode 100644 static/assets/img/products/products-img2.jpg delete mode 100644 static/assets/img/products/products-img20.jpg delete mode 100644 static/assets/img/products/products-img3.jpg delete mode 100644 static/assets/img/products/products-img4.jpg delete mode 100644 static/assets/img/products/products-img5.jpg delete mode 100644 static/assets/img/products/products-img6.jpg delete mode 100644 static/assets/img/products/products-img7.jpg delete mode 100644 static/assets/img/products/products-img8.jpg delete mode 100644 static/assets/img/products/products-img9.jpg delete mode 100644 static/assets/img/saas-banner.png delete mode 100644 static/assets/img/screenshot/frame.png delete mode 100644 static/assets/img/screenshot/screenshot1.png delete mode 100644 static/assets/img/screenshot/screenshot2.png delete mode 100644 static/assets/img/screenshot/screenshot3.png delete mode 100644 static/assets/img/screenshot/screenshot4.png delete mode 100644 static/assets/img/screenshot/screenshot5.png delete mode 100644 static/assets/img/services/services-img1.jpg delete mode 100644 static/assets/img/services/services-img10.png delete mode 100644 static/assets/img/services/services-img11.png delete mode 100644 static/assets/img/services/services-img12.png delete mode 100644 static/assets/img/services/services-img13.jpg delete mode 100644 static/assets/img/services/services-img14.jpg delete mode 100644 static/assets/img/services/services-img15.jpg delete mode 100644 static/assets/img/services/services-img16.jpg delete mode 100644 static/assets/img/services/services-img17.jpg delete mode 100644 static/assets/img/services/services-img18.jpg delete mode 100644 static/assets/img/services/services-img2.jpg delete mode 100644 static/assets/img/services/services-img3.jpg delete mode 100644 static/assets/img/services/services-img4.jpg delete mode 100644 static/assets/img/services/services-img5.jpg delete mode 100644 static/assets/img/services/services-img6.jpg delete mode 100644 static/assets/img/services/services-img7.png delete mode 100644 static/assets/img/services/services-img8.png delete mode 100644 static/assets/img/services/services-img9.png delete mode 100644 static/assets/img/shape/border.png delete mode 100644 static/assets/img/shape/border2.png delete mode 100644 static/assets/img/shape/shape1.png delete mode 100644 static/assets/img/shape/shape10.png delete mode 100644 static/assets/img/shape/shape11.png delete mode 100644 static/assets/img/shape/shape12.png delete mode 100644 static/assets/img/shape/shape13.png delete mode 100644 static/assets/img/shape/shape14.png delete mode 100644 static/assets/img/shape/shape15.png delete mode 100644 static/assets/img/shape/shape16.png delete mode 100644 static/assets/img/shape/shape17.png delete mode 100644 static/assets/img/shape/shape18.png delete mode 100644 static/assets/img/shape/shape19.png delete mode 100644 static/assets/img/shape/shape2.png delete mode 100644 static/assets/img/shape/shape3.png delete mode 100644 static/assets/img/shape/shape4.png delete mode 100644 static/assets/img/shape/shape5.png delete mode 100644 static/assets/img/shape/shape6.png delete mode 100644 static/assets/img/shape/shape7.png delete mode 100644 static/assets/img/shape/shape8.png delete mode 100644 static/assets/img/shape/shape9.png delete mode 100644 static/assets/img/shop-banner-bg.jpg delete mode 100644 static/assets/img/signature.png delete mode 100644 static/assets/img/skills/skills-img1.png delete mode 100644 static/assets/img/skills/skills-img2.png delete mode 100644 static/assets/img/skills/skills-img3.png delete mode 100644 static/assets/img/skills/skills-img4.png delete mode 100644 static/assets/img/startup-banner.jpg delete mode 100644 static/assets/img/team/team-img1.jpg delete mode 100644 static/assets/img/team/team-img2.jpg delete mode 100644 static/assets/img/team/team-img3.jpg delete mode 100644 static/assets/img/team/team-img4.jpg delete mode 100644 static/assets/img/team/team-img5.jpg delete mode 100644 static/assets/img/team/team-img6.jpg delete mode 100644 static/assets/img/team/team-img7.jpg delete mode 100644 static/assets/img/team/team-img8.jpg delete mode 100644 static/assets/img/team/team-img9.jpg delete mode 100644 static/assets/img/testimonials/testimonials-img1.jpg delete mode 100644 static/assets/img/testimonials/testimonials-img2.jpg delete mode 100644 static/assets/img/testimonials/testimonials-img3.jpg delete mode 100644 static/assets/img/testimonials/testimonials-img4.jpg delete mode 100644 static/assets/img/testimonials/testimonials-img5.jpg delete mode 100644 static/assets/img/testimonials/testimonials-img6.jpg delete mode 100644 static/assets/img/trending-img1.jpg delete mode 100644 static/assets/img/trending-img2.jpg delete mode 100644 static/assets/img/user/user1.jpg delete mode 100644 static/assets/img/user/user2.jpg delete mode 100644 static/assets/img/user/user3.jpg delete mode 100644 static/assets/img/user/user4.jpg delete mode 100644 static/assets/img/user/user5.jpg delete mode 100644 static/assets/img/video-img.jpg delete mode 100644 static/assets/img/video-img2.jpg delete mode 100644 static/assets/img/what-we-do.jpg delete mode 100644 static/assets/img/who-we-are.jpg delete mode 100644 static/assets/img/works/works-img1.jpg delete mode 100644 static/assets/img/works/works-img10.jpg delete mode 100644 static/assets/img/works/works-img11.jpg delete mode 100644 static/assets/img/works/works-img12.jpg delete mode 100644 static/assets/img/works/works-img13.jpg delete mode 100644 static/assets/img/works/works-img14.jpg delete mode 100644 static/assets/img/works/works-img15.jpg delete mode 100644 static/assets/img/works/works-img16.jpg delete mode 100644 static/assets/img/works/works-img17.jpg delete mode 100644 static/assets/img/works/works-img18.jpg delete mode 100644 static/assets/img/works/works-img2.jpg delete mode 100644 static/assets/img/works/works-img3.jpg delete mode 100644 static/assets/img/works/works-img4.jpg delete mode 100644 static/assets/img/works/works-img5.jpg delete mode 100644 static/assets/img/works/works-img6.jpg delete mode 100644 static/assets/img/works/works-img7.jpg delete mode 100644 static/assets/img/works/works-img8.jpg delete mode 100644 static/assets/img/works/works-img9.jpg delete mode 100644 static/assets/js/ajaxchimp.min.js delete mode 100644 static/assets/js/appear.min.js delete mode 100644 static/assets/js/bootstrap.bundle.min.js delete mode 100644 static/assets/js/contact-form-script.js delete mode 100644 static/assets/js/form-validator.min.js delete mode 100644 static/assets/js/jquery.min.js delete mode 100644 static/assets/js/magnific-popup.min.js delete mode 100644 static/assets/js/main.js delete mode 100644 static/assets/js/meanmenu.min.js delete mode 100644 static/assets/js/mixitup.min.js delete mode 100644 static/assets/js/odometer.min.js delete mode 100644 static/assets/js/owl.carousel.min.js delete mode 100644 static/assets/js/parallax.min.js delete mode 100644 static/assets/js/rangeSlider.min.js delete mode 100644 static/assets/js/showMoreItems.min.js delete mode 100644 static/assets/js/smooth-scroll.js delete mode 100644 static/assets/webfonts/Flaticon.eot delete mode 100644 static/assets/webfonts/Flaticon.svg delete mode 100644 static/assets/webfonts/Flaticon.ttf delete mode 100644 static/assets/webfonts/Flaticon.woff delete mode 100644 static/assets/webfonts/Flaticon.woff2 delete mode 100644 static/assets/webfonts/fa-brands-400.eot delete mode 100644 static/assets/webfonts/fa-brands-400.svg delete mode 100644 static/assets/webfonts/fa-brands-400.ttf delete mode 100644 static/assets/webfonts/fa-brands-400.woff delete mode 100644 static/assets/webfonts/fa-brands-400.woff2 delete mode 100644 static/assets/webfonts/fa-regular-400.eot delete mode 100644 static/assets/webfonts/fa-regular-400.svg delete mode 100644 static/assets/webfonts/fa-regular-400.ttf delete mode 100644 static/assets/webfonts/fa-regular-400.woff delete mode 100644 static/assets/webfonts/fa-regular-400.woff2 delete mode 100644 static/assets/webfonts/fa-solid-900.eot delete mode 100644 static/assets/webfonts/fa-solid-900.svg delete mode 100644 static/assets/webfonts/fa-solid-900.ttf delete mode 100644 static/assets/webfonts/fa-solid-900.woff delete mode 100644 static/assets/webfonts/fa-solid-900.woff2 delete mode 100644 system_requirements.txt delete mode 100644 tasks/__init__.py delete mode 100644 tasks/admin.py delete mode 100644 tasks/migrations/0001_initial.py delete mode 100644 tasks/migrations/0002_alter_task_created_by.py delete mode 100644 tasks/migrations/__init__.py delete mode 100644 tasks/models.py delete mode 100644 tasks/serializer.py delete mode 100644 tasks/urls.py delete mode 100644 tasks/views.py delete mode 100644 teams/__init__.py delete mode 100644 teams/admin.py delete mode 100644 teams/apps.py delete mode 100644 teams/migrations/0001_initial.py delete mode 100644 teams/migrations/0002_alter_teams_table.py delete mode 100644 teams/migrations/0003_alter_teams_created_by.py delete mode 100644 teams/migrations/__init__.py delete mode 100644 teams/models.py delete mode 100644 teams/serializer.py delete mode 100644 teams/swagger_params1.py delete mode 100644 teams/tasks.py delete mode 100644 teams/urls.py delete mode 100644 teams/views.py delete mode 100644 templates/base.html delete mode 100644 templates/cms/blog/blog_detail_page.html delete mode 100644 templates/cms/blog/blog_list_page.html delete mode 100644 templates/cms/home_page.html delete mode 100644 templates/cms/streams/aboutapp.html delete mode 100644 templates/cms/streams/app_features.html delete mode 100644 templates/cms/streams/blog/code_block.html delete mode 100644 templates/cms/streams/blog/content_title.html delete mode 100644 templates/cms/streams/blog/image.html delete mode 100644 templates/cms/streams/blog/rich_text.html delete mode 100644 templates/cms/streams/carousel.html delete mode 100644 templates/cms/streams/count.html delete mode 100644 templates/cms/streams/home_blog.html delete mode 100644 templates/cms/streams/left_image_right_content.html delete mode 100644 templates/cms/streams/pricing.html delete mode 100644 templates/cms/streams/right_image_left_content.html delete mode 100644 templates/cms_base.html delete mode 100644 templates/root.html diff --git a/.gitignore b/.gitignore index cee70fb6..eda06f2e 100644 --- a/.gitignore +++ b/.gitignore @@ -1,28 +1,59 @@ +# Python *.pyc *~ *.swo *.swp +__pycache__/ +*.py[cod] +*$py.class + +# Django db.sqlite3 -media -media-images -cache -.idea +*.log +media/ +media-images/ +cache/ static/CACHE -.sass-cache/ -main.css -main.css.map -ref.css -ref.css.map -.coverage -crm/dev_settings\.py -env -.env -docs/build +staticfiles/ celerybeat-schedule local_settings.py -media -.sass-cache +.env server.log -.vscode -staticfiles -.venv \ No newline at end of file +dump.rdb + +# Virtual Environment +env/ +venv/ +.venv/ +ENV/ + +# IDE +.idea/ +.vscode/ +*.swp +*.swo + +# Testing +.coverage +.pytest_cache/ +htmlcov/ + +# Documentation +docs/build/ + +# Node.js / Frontend +frontend/node_modules/ +frontend/.svelte-kit/ +frontend/build/ +frontend/.env +frontend/.env.local +frontend/package-lock.json +frontend/pnpm-lock.yaml + +# Logs +logs/ +*.log + +# OS +.DS_Store +Thumbs.db \ No newline at end of file diff --git a/CLAUDE.md b/CLAUDE.md index a354b16b..69797928 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -1,249 +1,145 @@ -# CLAUDE.md - AI Assistant Guide for BottleCRM +# CLAUDE.md -## Project Overview +BottleCRM is a SaaS CRM platform: Django REST API backend (`backend/`) + SvelteKit frontend (`frontend/`). -BottleCRM (Django-CRM) is an open-source CRM system built with Django and Django REST Framework. It provides customer relationship management for startups and small businesses. +## Quick Reference -**Status**: Maintenance mode - active development has moved to [MicroPyramid/opensource-startup-crm](https://github.com/MicroPyramid/opensource-startup-crm) (SvelteKit version). +```bash +# Backend +cd backend && source venv/bin/activate && python manage.py runserver +cd backend && source venv/bin/activate && celery -A crm worker --loglevel=INFO + +# Frontend +cd frontend && pnpm run dev +``` + +**API Docs**: http://localhost:8000/swagger-ui/ ## Tech Stack -- **Backend**: Django 4.2.1, Django REST Framework 3.14.0 -- **Database**: PostgreSQL -- **Authentication**: JWT (djangorestframework-simplejwt) -- **Task Queue**: Celery 5.2.7 with Redis -- **CMS**: Wagtail 5.0.1 -- **API Docs**: drf-spectacular (Swagger/OpenAPI) -- **Deployment**: Docker, Gunicorn +**Backend**: Django 5.x, DRF, PostgreSQL, Redis/Celery, JWT auth, AWS S3/SES +**Frontend**: SvelteKit, Svelte 5 (runes), TailwindCSS, shadcn-svelte, Zod, Axios, Lucide icons -## Project Structure +## Multi-Tenancy & RLS (CRITICAL) -``` -crm/ # Django project settings -common/ # Shared models, auth, utilities -accounts/ # Account/Company management -contacts/ # Contact management -leads/ # Lead management -opportunity/ # Sales pipeline -tasks/ # Task management -cases/ # Support/issue tracking -events/ # Calendar/events -teams/ # Team management -invoices/ # Invoice management -emails/ # Email management -cms/ # Wagtail CMS -templates/ # HTML templates -static/ # Static assets -docs/ # Sphinx documentation -scripts/ # Deployment scripts +Every request operates within an organization context. RLS provides database-level isolation, but **always filter at ORM level too** (defense-in-depth). + +### Required Patterns + +```python +# ALWAYS filter by org - never use .all() on org-scoped models +queryset = Model.objects.filter(org=request.profile.org) + +# ALWAYS include org in get_object +def get_object(self, pk): + return get_object_or_404(Lead, id=pk, org=self.request.profile.org) + +# ALWAYS set org when creating +obj = Model.objects.create(name="Example", org=request.profile.org) +serializer.save(org=request.profile.org) ``` -## Key Files +### RLS-Protected Tables (24) -| File | Purpose | -|------|---------| -| `manage.py` | Django CLI entry point | -| `crm/settings.py` | Main configuration | -| `crm/urls.py` | URL routing | -| `crm/celery.py` | Celery task queue setup | -| `common/models.py` | User, Org, Profile models | -| `common/utils.py` | Shared utilities and constants | -| `requirements.txt` | Python dependencies | +`lead`, `accounts`, `contacts`, `opportunity`, `case`, `task`, `invoice`, `comment`, `attachments`, `document`, `teams`, `activity`, `tags`, `address`, `solution`, `board`, `board_column`, `board_task`, `board_member`, `apiSettings`, `account_email`, `emailLogs`, `invoice_history`, `security_audit_log` -## Development Setup +### Adding New Org-Scoped Models -### Prerequisites -- Python 3.x -- PostgreSQL 9.4+ -- Redis server +1. Inherit from `BaseOrgModel` (includes org field automatically) +2. Add table to `ORG_SCOPED_TABLES` in `common/rls/__init__.py` +3. Create RLS migration using `get_enable_policy_sql('table_name')` +4. Always filter by org in views -### Quick Start +### Celery Tasks + +```python +from common.tasks import set_rls_context + +@app.task +def my_task(data_id, org_id): + set_rls_context(org_id) # REQUIRED before any query + obj = MyModel.objects.get(id=data_id) +``` + +### RLS Commands ```bash -# Install dependencies -pip install -r requirements.txt - -# Configure environment -cp ENV.md .env -# Edit .env with your database credentials - -# Run migrations -python manage.py migrate - -# Start server -python manage.py runserver - -# Start Celery worker (separate terminal) -celery -A crm worker --loglevel=INFO +python manage.py manage_rls --status # Check status +python manage.py manage_rls --verify-user # Verify non-superuser (superusers bypass RLS!) +python manage.py manage_rls --test # Test isolation ``` -### Docker Setup +## Architecture -```bash -docker build -t djcrm:1 -f docker/dockerfile . -docker-compose -f docker/docker-compose.yml up +### User Model + +User → Profile → Org (one user can have profiles in multiple orgs) +- Profile includes: role (ADMIN/USER), sales/marketing access flags +- Super Admin: @micropyramid.com email domain + +### BaseModel (`common/base.py`) + +All models inherit from `BaseModel`: UUID PKs, timestamps (`created_at`, `updated_at`), audit (`created_by`, `updated_by`) + +### AssignableMixin + +For models with team/user assignment: Account, Lead, Contact, Opportunity, Case, Task + +### Django Apps + +- `common` - User, Profile, Org, Teams, Tags, Comment, Attachments, Document, Activity +- `accounts`, `leads`, `contacts`, `opportunity`, `cases`, `tasks`, `invoices`, `marketing` + +### API Pattern + +``` +GET/POST /api// # List/Create +GET/PUT/DELETE /api/// # Detail/Update/Delete +GET/POST /api//comment// # Comments +GET/POST /api//attachment// # Attachments ``` -## Common Commands +### Celery Tasks (`common/tasks.py`) + +Email tasks: `send_email_to_new_user`, `send_email_user_mentions`, `send_email_user_status`, `send_email_user_delete`, `send_email_to_reset_password` +Team tasks: `remove_users`, `update_team_users` + +## Frontend + +### Structure + +- `src/routes/(app)/` - Main CRM (authenticated) +- `src/routes/(no-layout)/` - Auth pages +- `src/lib/` - Components and utilities + +### Key Files + +- `src/hooks.server.js` - Auth, org validation, route protection +- `src/lib/stores/auth.js` - Auth state + +### Standards + +- **Svelte 5**: Use runes (`$state`, `$derived`, `$effect`) +- **NO TypeScript**: JavaScript with JSDoc annotations only +- **Validation**: Zod for forms +- **Icons**: Lucide Svelte ```bash -# Run development server -python manage.py runserver - -# Run migrations -python manage.py migrate - -# Create migrations -python manage.py makemigrations - -# Run tests -pytest - -# Run tests with coverage -coverage run -m pytest -coverage report - -# Start Celery worker -celery -A crm worker --loglevel=INFO - -# Format code -black . +pnpm run check # Type check via JSDoc +pnpm run lint # Lint +pnpm run format # Format ``` ## Testing -- **Framework**: pytest with Django plugin -- **Config**: `pytest.ini` -- **Coverage**: `.coveragerc` - -### Test Locations -- `*/tests_celery_tasks.py` - Celery task tests (per app) -- `*/tests.py` - Unit tests - -### Run Tests ```bash -pytest # All tests -pytest accounts/ # Single app -pytest -x # Stop on first failure -coverage run -m pytest # With coverage +# Backend +cd backend && pytest && black . && isort . + +# Frontend +cd frontend && pnpm run check && pnpm run lint ``` -## API Structure +## Related Docs -### Base URL Patterns -- `/api/` - Common endpoints -- `/api/accounts/` - Account management -- `/api/contacts/` - Contact management -- `/api/leads/` - Lead management -- `/api/opportunities/` - Sales pipeline -- `/api/teams/` - Team management -- `/api/tasks/` - Task management -- `/api/events/` - Events -- `/api/cases/` - Case management - -### API Documentation -- `/swagger-ui/` - Swagger UI -- `/api/schema/redoc/` - ReDoc -- `/schema/` - OpenAPI schema - -## Code Conventions - -### Django App Pattern -Each app follows this structure: -- `models.py` - Database models -- `views.py` - API views (class-based) -- `serializer.py` - DRF serializers -- `tasks.py` - Celery async tasks -- `tests_celery_tasks.py` - Task tests - -### Model Pattern -Models inherit from `common.base.BaseModel` for timestamp fields: -```python -from common.base import BaseModel - -class MyModel(BaseModel): - # created_at and updated_at are automatic - name = models.CharField(max_length=255) -``` - -### View Pattern -Views use DRF class-based views with permissions: -```python -from rest_framework.views import APIView -from rest_framework.permissions import IsAuthenticated - -class MyView(APIView): - permission_classes = [IsAuthenticated] -``` - -### Serializer Naming -- Read serializers: `ModelSerializer` -- Write serializers: `CreateModelSerializer` - -### Code Quality -- **Formatter**: Black (configured in `.pre-commit-config.yaml`) -- **Pre-commit**: `pre-commit install` - -## Environment Variables - -Key variables (see `ENV.md` for full list): - -``` -SECRET_KEY # Django secret key -ENV_TYPE # dev/stage/live -DBNAME # PostgreSQL database name -DBUSER # Database user -DBPASSWORD # Database password -DBHOST # Database host -CELERY_BROKER_URL # Redis URL for Celery -``` - -## Multi-tenancy - -The app supports multiple organizations via the `Org` model in `common/models.py`. Middleware in `common/middleware/get_company.py` handles organization context. - -## Important Patterns - -### Authentication -JWT tokens via `djangorestframework-simplejwt`. Custom auth in `common/external_auth.py`. - -### Async Tasks -Celery tasks defined in `*/tasks.py` files. Example: -```python -from celery import shared_task - -@shared_task -def send_email_task(email_data): - # Task implementation - pass -``` - -### Tags and Relationships -Many-to-many relationships use through models. Tags are stored in `accounts/models.py`. - -## CI/CD - -- **GitHub Actions**: CodeQL security scanning -- **Travis CI**: Test execution and coverage -- **Jenkins**: Docker build and deployment - -## External Documentation - -- ReadTheDocs: http://django-crm.readthedocs.io -- Demo: https://bottlecrm.io/ -- Sphinx docs: `docs/source/` - -## When Making Changes - -1. **Follow existing patterns** - Check similar files in the same app -2. **Add tests** - Create tests in `tests_celery_tasks.py` or `tests.py` -3. **Run formatter** - Use `black .` before committing -4. **Update migrations** - Run `makemigrations` for model changes -5. **Check API docs** - Ensure serializers are documented with drf-spectacular - -## Common Issues - -- **Database connection**: Ensure PostgreSQL is running and `.env` is configured -- **Celery tasks not running**: Start Redis and Celery worker -- **Static files 404**: Run `python manage.py collectstatic` -- **Migration conflicts**: Check for unapplied migrations with `python manage.py showmigrations` +- `QUICKSTART.md` - Setup guide diff --git a/Dockerfile b/Dockerfile index 33b08500..41983bac 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -FROM ubuntu:20.04 +FROM ubuntu:24.04 # invalidate cache ARG APP_NAME diff --git a/README.md b/README.md index 5f55f927..5f70c00f 100644 --- a/README.md +++ b/README.md @@ -14,7 +14,7 @@ and feature requests via github. ### Moving Forward -To align with the project’s vision and address these challenges, I’ve shifted development to a new repository using **SvelteKit** and **Prisma** for a robust, fast, and feature-rich framework. A Minimum Viable Product (MVP) was released last week at [MicroPyramid/opensource-startup-crm](https://github.com/MicroPyramid/opensource-startup-crm). +To align with the project’s vision and address these challenges, I’ve shifted development to a new repository using **SvelteKit** and **Prisma** for a robust, fast, and feature-rich framework. A Minimum Viable Product (MVP) was released last week at [MicroPyramid/Django-CRM](https://github.com/MicroPyramid/Django-CRM). #### Key Updates: @@ -151,10 +151,10 @@ isort # to sort imports in python **Note: This repository is no longer actively maintained.** For the latest development and community support, please visit our new SvelteKit-based CRM project: -- **New Project**: [MicroPyramid/opensource-startup-crm](https://github.com/MicroPyramid/opensource-startup-crm) +- **New Project**: [MicroPyramid/Django-CRM](https://github.com/MicroPyramid/Django-CRM) - Follow [@micropyramid]() on Twitter - For questions about the legacy Django CRM, check [past issues]() -- For new feature requests and active development, visit the [new repository](https://github.com/MicroPyramid/opensource-startup-crm) +- For new feature requests and active development, visit the [new repository](https://github.com/MicroPyramid/Django-CRM) - For commercial support [Contact us](https://micropyramid.com/contact-us/) ## Credits @@ -167,7 +167,7 @@ This project exists thanks to all the people who contributed during its active d ### Legacy Project Notice -This Django CRM repository is now in maintenance mode. While we welcome your feedback and appreciate past contributions, active development has moved to our new SvelteKit-based CRM solution at [MicroPyramid/opensource-startup-crm](https://github.com/MicroPyramid/opensource-startup-crm). +This Django CRM repository is now in maintenance mode. While we welcome your feedback and appreciate past contributions, active development has moved to our new SvelteKit-based CRM solution at [MicroPyramid/Django-CRM](https://github.com/MicroPyramid/Django-CRM). For commercial support [Contact us](https://micropyramid.com/contact-us/) diff --git a/accounts/migrations/0001_initial.py b/accounts/migrations/0001_initial.py deleted file mode 100644 index 830bf379..00000000 --- a/accounts/migrations/0001_initial.py +++ /dev/null @@ -1,97 +0,0 @@ -# Generated by Django 4.2.1 on 2023-06-19 13:08 - -from django.db import migrations, models -import phonenumber_field.modelfields -import uuid - - -class Migration(migrations.Migration): - - initial = True - - dependencies = [ - ] - - operations = [ - migrations.CreateModel( - name='Account', - fields=[ - ('created_at', models.DateTimeField(auto_now_add=True, verbose_name='Created At')), - ('updated_at', models.DateTimeField(auto_now=True, verbose_name='Last Modified At')), - ('id', models.UUIDField(db_index=True, default=uuid.uuid4, editable=False, primary_key=True, serialize=False, unique=True)), - ('name', models.CharField(max_length=64, verbose_name='Name')), - ('email', models.EmailField(max_length=254)), - ('phone', phonenumber_field.modelfields.PhoneNumberField(max_length=128, null=True, region=None)), - ('industry', models.CharField(blank=True, choices=[('ADVERTISING', 'ADVERTISING'), ('AGRICULTURE', 'AGRICULTURE'), ('APPAREL & ACCESSORIES', 'APPAREL & ACCESSORIES'), ('AUTOMOTIVE', 'AUTOMOTIVE'), ('BANKING', 'BANKING'), ('BIOTECHNOLOGY', 'BIOTECHNOLOGY'), ('BUILDING MATERIALS & EQUIPMENT', 'BUILDING MATERIALS & EQUIPMENT'), ('CHEMICAL', 'CHEMICAL'), ('COMPUTER', 'COMPUTER'), ('EDUCATION', 'EDUCATION'), ('ELECTRONICS', 'ELECTRONICS'), ('ENERGY', 'ENERGY'), ('ENTERTAINMENT & LEISURE', 'ENTERTAINMENT & LEISURE'), ('FINANCE', 'FINANCE'), ('FOOD & BEVERAGE', 'FOOD & BEVERAGE'), ('GROCERY', 'GROCERY'), ('HEALTHCARE', 'HEALTHCARE'), ('INSURANCE', 'INSURANCE'), ('LEGAL', 'LEGAL'), ('MANUFACTURING', 'MANUFACTURING'), ('PUBLISHING', 'PUBLISHING'), ('REAL ESTATE', 'REAL ESTATE'), ('SERVICE', 'SERVICE'), ('SOFTWARE', 'SOFTWARE'), ('SPORTS', 'SPORTS'), ('TECHNOLOGY', 'TECHNOLOGY'), ('TELECOMMUNICATIONS', 'TELECOMMUNICATIONS'), ('TELEVISION', 'TELEVISION'), ('TRANSPORTATION', 'TRANSPORTATION'), ('VENTURE CAPITAL', 'VENTURE CAPITAL')], max_length=255, null=True, verbose_name='Industry Type')), - ('billing_address_line', models.CharField(blank=True, max_length=255, null=True, verbose_name='Address')), - ('billing_street', models.CharField(blank=True, max_length=55, null=True, verbose_name='Street')), - ('billing_city', models.CharField(blank=True, max_length=255, null=True, verbose_name='City')), - ('billing_state', models.CharField(blank=True, max_length=255, null=True, verbose_name='State')), - ('billing_postcode', models.CharField(blank=True, max_length=64, null=True, verbose_name='Post/Zip-code')), - ('billing_country', models.CharField(blank=True, choices=[('GB', 'United Kingdom'), ('AF', 'Afghanistan'), ('AX', 'Aland Islands'), ('AL', 'Albania'), ('DZ', 'Algeria'), ('AS', 'American Samoa'), ('AD', 'Andorra'), ('AO', 'Angola'), ('AI', 'Anguilla'), ('AQ', 'Antarctica'), ('AG', 'Antigua and Barbuda'), ('AR', 'Argentina'), ('AM', 'Armenia'), ('AW', 'Aruba'), ('AU', 'Australia'), ('AT', 'Austria'), ('AZ', 'Azerbaijan'), ('BS', 'Bahamas'), ('BH', 'Bahrain'), ('BD', 'Bangladesh'), ('BB', 'Barbados'), ('BY', 'Belarus'), ('BE', 'Belgium'), ('BZ', 'Belize'), ('BJ', 'Benin'), ('BM', 'Bermuda'), ('BT', 'Bhutan'), ('BO', 'Bolivia'), ('BA', 'Bosnia and Herzegovina'), ('BW', 'Botswana'), ('BV', 'Bouvet Island'), ('BR', 'Brazil'), ('IO', 'British Indian Ocean Territory'), ('BN', 'Brunei Darussalam'), ('BG', 'Bulgaria'), ('BF', 'Burkina Faso'), ('BI', 'Burundi'), ('KH', 'Cambodia'), ('CM', 'Cameroon'), ('CA', 'Canada'), ('CV', 'Cape Verde'), ('KY', 'Cayman Islands'), ('CF', 'Central African Republic'), ('TD', 'Chad'), ('CL', 'Chile'), ('CN', 'China'), ('CX', 'Christmas Island'), ('CC', 'Cocos (Keeling) Islands'), ('CO', 'Colombia'), ('KM', 'Comoros'), ('CG', 'Congo'), ('CD', 'Congo, The Democratic Republic of the'), ('CK', 'Cook Islands'), ('CR', 'Costa Rica'), ('CI', "Cote d'Ivoire"), ('HR', 'Croatia'), ('CU', 'Cuba'), ('CY', 'Cyprus'), ('CZ', 'Czech Republic'), ('DK', 'Denmark'), ('DJ', 'Djibouti'), ('DM', 'Dominica'), ('DO', 'Dominican Republic'), ('EC', 'Ecuador'), ('EG', 'Egypt'), ('SV', 'El Salvador'), ('GQ', 'Equatorial Guinea'), ('ER', 'Eritrea'), ('EE', 'Estonia'), ('ET', 'Ethiopia'), ('FK', 'Falkland Islands (Malvinas)'), ('FO', 'Faroe Islands'), ('FJ', 'Fiji'), ('FI', 'Finland'), ('FR', 'France'), ('GF', 'French Guiana'), ('PF', 'French Polynesia'), ('TF', 'French Southern Territories'), ('GA', 'Gabon'), ('GM', 'Gambia'), ('GE', 'Georgia'), ('DE', 'Germany'), ('GH', 'Ghana'), ('GI', 'Gibraltar'), ('GR', 'Greece'), ('GL', 'Greenland'), ('GD', 'Grenada'), ('GP', 'Guadeloupe'), ('GU', 'Guam'), ('GT', 'Guatemala'), ('GG', 'Guernsey'), ('GN', 'Guinea'), ('GW', 'Guinea-Bissau'), ('GY', 'Guyana'), ('HT', 'Haiti'), ('HM', 'Heard Island and McDonald Islands'), ('VA', 'Holy See (Vatican City State)'), ('HN', 'Honduras'), ('HK', 'Hong Kong'), ('HU', 'Hungary'), ('IS', 'Iceland'), ('IN', 'India'), ('ID', 'Indonesia'), ('IR', 'Iran, Islamic Republic of'), ('IQ', 'Iraq'), ('IE', 'Ireland'), ('IM', 'Isle of Man'), ('IL', 'Israel'), ('IT', 'Italy'), ('JM', 'Jamaica'), ('JP', 'Japan'), ('JE', 'Jersey'), ('JO', 'Jordan'), ('KZ', 'Kazakhstan'), ('KE', 'Kenya'), ('KI', 'Kiribati'), ('KP', "Korea, Democratic People's Republic of"), ('KR', 'Korea, Republic of'), ('KW', 'Kuwait'), ('KG', 'Kyrgyzstan'), ('LA', "Lao People's Democratic Republic"), ('LV', 'Latvia'), ('LB', 'Lebanon'), ('LS', 'Lesotho'), ('LR', 'Liberia'), ('LY', 'Libyan Arab Jamahiriya'), ('LI', 'Liechtenstein'), ('LT', 'Lithuania'), ('LU', 'Luxembourg'), ('MO', 'Macao'), ('MK', 'Macedonia, The Former Yugoslav Republic of'), ('MG', 'Madagascar'), ('MW', 'Malawi'), ('MY', 'Malaysia'), ('MV', 'Maldives'), ('ML', 'Mali'), ('MT', 'Malta'), ('MH', 'Marshall Islands'), ('MQ', 'Martinique'), ('MR', 'Mauritania'), ('MU', 'Mauritius'), ('YT', 'Mayotte'), ('MX', 'Mexico'), ('FM', 'Micronesia, Federated States of'), ('MD', 'Moldova'), ('MC', 'Monaco'), ('MN', 'Mongolia'), ('ME', 'Montenegro'), ('MS', 'Montserrat'), ('MA', 'Morocco'), ('MZ', 'Mozambique'), ('MM', 'Myanmar'), ('NA', 'Namibia'), ('NR', 'Nauru'), ('NP', 'Nepal'), ('NL', 'Netherlands'), ('AN', 'Netherlands Antilles'), ('NC', 'New Caledonia'), ('NZ', 'New Zealand'), ('NI', 'Nicaragua'), ('NE', 'Niger'), ('NG', 'Nigeria'), ('NU', 'Niue'), ('NF', 'Norfolk Island'), ('MP', 'Northern Mariana Islands'), ('NO', 'Norway'), ('OM', 'Oman'), ('PK', 'Pakistan'), ('PW', 'Palau'), ('PS', 'Palestinian Territory, Occupied'), ('PA', 'Panama'), ('PG', 'Papua New Guinea'), ('PY', 'Paraguay'), ('PE', 'Peru'), ('PH', 'Philippines'), ('PN', 'Pitcairn'), ('PL', 'Poland'), ('PT', 'Portugal'), ('PR', 'Puerto Rico'), ('QA', 'Qatar'), ('RE', 'Reunion'), ('RO', 'Romania'), ('RU', 'Russian Federation'), ('RW', 'Rwanda'), ('BL', 'Saint Barthelemy'), ('SH', 'Saint Helena'), ('KN', 'Saint Kitts and Nevis'), ('LC', 'Saint Lucia'), ('MF', 'Saint Martin'), ('PM', 'Saint Pierre and Miquelon'), ('VC', 'Saint Vincent and the Grenadines'), ('WS', 'Samoa'), ('SM', 'San Marino'), ('ST', 'Sao Tome and Principe'), ('SA', 'Saudi Arabia'), ('SN', 'Senegal'), ('RS', 'Serbia'), ('SC', 'Seychelles'), ('SL', 'Sierra Leone'), ('SG', 'Singapore'), ('SK', 'Slovakia'), ('SI', 'Slovenia'), ('SB', 'Solomon Islands'), ('SO', 'Somalia'), ('ZA', 'South Africa'), ('GS', 'South Georgia and the South Sandwich Islands'), ('ES', 'Spain'), ('LK', 'Sri Lanka'), ('SD', 'Sudan'), ('SR', 'Suriname'), ('SJ', 'Svalbard and Jan Mayen'), ('SZ', 'Swaziland'), ('SE', 'Sweden'), ('CH', 'Switzerland'), ('SY', 'Syrian Arab Republic'), ('TW', 'Taiwan, Province of China'), ('TJ', 'Tajikistan'), ('TZ', 'Tanzania, United Republic of'), ('TH', 'Thailand'), ('TL', 'Timor-Leste'), ('TG', 'Togo'), ('TK', 'Tokelau'), ('TO', 'Tonga'), ('TT', 'Trinidad and Tobago'), ('TN', 'Tunisia'), ('TR', 'Turkey'), ('TM', 'Turkmenistan'), ('TC', 'Turks and Caicos Islands'), ('TV', 'Tuvalu'), ('UG', 'Uganda'), ('UA', 'Ukraine'), ('AE', 'United Arab Emirates'), ('US', 'United States'), ('UM', 'United States Minor Outlying Islands'), ('UY', 'Uruguay'), ('UZ', 'Uzbekistan'), ('VU', 'Vanuatu'), ('VE', 'Venezuela'), ('VN', 'Viet Nam'), ('VG', 'Virgin Islands, British'), ('VI', 'Virgin Islands, U.S.'), ('WF', 'Wallis and Futuna'), ('EH', 'Western Sahara'), ('YE', 'Yemen'), ('ZM', 'Zambia'), ('ZW', 'Zimbabwe')], max_length=3, null=True)), - ('website', models.URLField(blank=True, null=True, verbose_name='Website')), - ('description', models.TextField(blank=True, null=True)), - ('is_active', models.BooleanField(default=False)), - ('status', models.CharField(choices=[('open', 'Open'), ('close', 'Close')], default='open', max_length=64)), - ('contact_name', models.CharField(max_length=120, verbose_name='Contact Name')), - ], - options={ - 'verbose_name': 'Account', - 'verbose_name_plural': 'Accounts', - 'db_table': 'accounts', - 'ordering': ('-created_at',), - }, - ), - migrations.CreateModel( - name='AccountEmail', - fields=[ - ('created_at', models.DateTimeField(auto_now_add=True, verbose_name='Created At')), - ('updated_at', models.DateTimeField(auto_now=True, verbose_name='Last Modified At')), - ('id', models.UUIDField(db_index=True, default=uuid.uuid4, editable=False, primary_key=True, serialize=False, unique=True)), - ('message_subject', models.TextField(null=True)), - ('message_body', models.TextField(null=True)), - ('timezone', models.CharField(default='UTC', max_length=100)), - ('scheduled_date_time', models.DateTimeField(null=True)), - ('scheduled_later', models.BooleanField(default=False)), - ('from_email', models.EmailField(max_length=254)), - ('rendered_message_body', models.TextField(null=True)), - ], - options={ - 'verbose_name': 'Account Email', - 'verbose_name_plural': 'Account Emails', - 'db_table': 'account_email', - 'ordering': ('-created_at',), - }, - ), - migrations.CreateModel( - name='AccountEmailLog', - fields=[ - ('created_at', models.DateTimeField(auto_now_add=True, verbose_name='Created At')), - ('updated_at', models.DateTimeField(auto_now=True, verbose_name='Last Modified At')), - ('id', models.UUIDField(db_index=True, default=uuid.uuid4, editable=False, primary_key=True, serialize=False, unique=True)), - ('is_sent', models.BooleanField(default=False)), - ], - options={ - 'verbose_name': 'EmailLog', - 'verbose_name_plural': 'EmailLogs', - 'db_table': 'emailLogs', - 'ordering': ('-created_at',), - }, - ), - migrations.CreateModel( - name='Tags', - fields=[ - ('created_at', models.DateTimeField(auto_now_add=True, verbose_name='Created At')), - ('updated_at', models.DateTimeField(auto_now=True, verbose_name='Last Modified At')), - ('id', models.UUIDField(db_index=True, default=uuid.uuid4, editable=False, primary_key=True, serialize=False, unique=True)), - ('name', models.CharField(max_length=20)), - ('slug', models.CharField(blank=True, max_length=20, unique=True)), - ], - options={ - 'verbose_name': 'Tag', - 'verbose_name_plural': 'Tags', - 'db_table': 'tags', - 'ordering': ('-created_at',), - }, - ), - ] diff --git a/accounts/migrations/0002_initial.py b/accounts/migrations/0002_initial.py deleted file mode 100644 index 580d3659..00000000 --- a/accounts/migrations/0002_initial.py +++ /dev/null @@ -1,112 +0,0 @@ -# Generated by Django 4.2.1 on 2023-06-19 13:08 - -from django.conf import settings -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - initial = True - - dependencies = [ - ('leads', '0001_initial'), - ('teams', '0001_initial'), - ('accounts', '0001_initial'), - ('contacts', '0001_initial'), - migrations.swappable_dependency(settings.AUTH_USER_MODEL), - ('common', '0001_initial'), - ] - - operations = [ - migrations.AddField( - model_name='tags', - name='created_by', - field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='%(class)s_created_by', to=settings.AUTH_USER_MODEL, verbose_name='Created By'), - ), - migrations.AddField( - model_name='tags', - name='updated_by', - field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='%(class)s_updated_by', to=settings.AUTH_USER_MODEL, verbose_name='Last Modified By'), - ), - migrations.AddField( - model_name='accountemaillog', - name='contact', - field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='contact_email_log', to='contacts.contact'), - ), - migrations.AddField( - model_name='accountemaillog', - name='created_by', - field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='%(class)s_created_by', to=settings.AUTH_USER_MODEL, verbose_name='Created By'), - ), - migrations.AddField( - model_name='accountemaillog', - name='email', - field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='email_log', to='accounts.accountemail'), - ), - migrations.AddField( - model_name='accountemaillog', - name='updated_by', - field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='%(class)s_updated_by', to=settings.AUTH_USER_MODEL, verbose_name='Last Modified By'), - ), - migrations.AddField( - model_name='accountemail', - name='created_by', - field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='%(class)s_created_by', to=settings.AUTH_USER_MODEL, verbose_name='Created By'), - ), - migrations.AddField( - model_name='accountemail', - name='from_account', - field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='sent_email', to='accounts.account'), - ), - migrations.AddField( - model_name='accountemail', - name='recipients', - field=models.ManyToManyField(related_name='recieved_email', to='contacts.contact'), - ), - migrations.AddField( - model_name='accountemail', - name='updated_by', - field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='%(class)s_updated_by', to=settings.AUTH_USER_MODEL, verbose_name='Last Modified By'), - ), - migrations.AddField( - model_name='account', - name='assigned_to', - field=models.ManyToManyField(related_name='account_assigned_users', to='common.profile'), - ), - migrations.AddField( - model_name='account', - name='contacts', - field=models.ManyToManyField(related_name='account_contacts', to='contacts.contact'), - ), - migrations.AddField( - model_name='account', - name='created_by', - field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='account_created_by', to='common.profile'), - ), - migrations.AddField( - model_name='account', - name='lead', - field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='account_leads', to='leads.lead'), - ), - migrations.AddField( - model_name='account', - name='org', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='account_org', to='common.org'), - ), - migrations.AddField( - model_name='account', - name='tags', - field=models.ManyToManyField(blank=True, to='accounts.tags'), - ), - migrations.AddField( - model_name='account', - name='teams', - field=models.ManyToManyField(related_name='account_teams', to='teams.teams'), - ), - migrations.AddField( - model_name='account', - name='updated_by', - field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='%(class)s_updated_by', to=settings.AUTH_USER_MODEL, verbose_name='Last Modified By'), - ), - ] diff --git a/accounts/migrations/0003_alter_account_created_by.py b/accounts/migrations/0003_alter_account_created_by.py deleted file mode 100644 index d13a2698..00000000 --- a/accounts/migrations/0003_alter_account_created_by.py +++ /dev/null @@ -1,21 +0,0 @@ -# Generated by Django 4.2.1 on 2023-10-13 08:16 - -from django.conf import settings -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - migrations.swappable_dependency(settings.AUTH_USER_MODEL), - ('accounts', '0002_initial'), - ] - - operations = [ - migrations.AlterField( - model_name='account', - name='created_by', - field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='%(class)s_created_by', to=settings.AUTH_USER_MODEL, verbose_name='Created By'), - ), - ] diff --git a/accounts/models.py b/accounts/models.py deleted file mode 100644 index 8b42ad14..00000000 --- a/accounts/models.py +++ /dev/null @@ -1,183 +0,0 @@ -import arrow -from django.db import models -from django.utils.text import slugify -from django.utils.translation import gettext_lazy as _ -from django.utils.translation import pgettext_lazy -from phonenumber_field.modelfields import PhoneNumberField - -from common import utils -from common.models import Org, Profile -from common.utils import COUNTRIES, INDCHOICES -from contacts.models import Contact -from teams.models import Teams -from common.base import BaseModel - - -class Tags(BaseModel): - name = models.CharField(max_length=20) - slug = models.CharField(max_length=20, unique=True, blank=True) - - - class Meta: - verbose_name = "Tag" - verbose_name_plural = "Tags" - db_table = "tags" - ordering = ("-created_at",) - - def __str__(self): - return f"{self.name}" - - - def save(self, *args, **kwargs): - self.slug = slugify(self.name) - super().save(*args, **kwargs) - - -class Account(BaseModel): - - ACCOUNT_STATUS_CHOICE = (("open", "Open"), ("close", "Close")) - - name = models.CharField(pgettext_lazy("Name of Account", "Name"), max_length=64) - email = models.EmailField() - phone = PhoneNumberField(null=True) - industry = models.CharField( - _("Industry Type"), max_length=255, choices=INDCHOICES, blank=True, null=True - ) - # billing_address = models.ForeignKey( - # Address, related_name='account_billing_address', on_delete=models.CASCADE, blank=True, null=True) - # shipping_address = models.ForeignKey( - # Address, related_name='account_shipping_address', on_delete=models.CASCADE, blank=True, null=True) - billing_address_line = models.CharField( - _("Address"), max_length=255, blank=True, null=True - ) - billing_street = models.CharField(_("Street"), max_length=55, blank=True, null=True) - billing_city = models.CharField(_("City"), max_length=255, blank=True, null=True) - billing_state = models.CharField(_("State"), max_length=255, blank=True, null=True) - billing_postcode = models.CharField( - _("Post/Zip-code"), max_length=64, blank=True, null=True - ) - billing_country = models.CharField( - max_length=3, choices=COUNTRIES, blank=True, null=True - ) - website = models.URLField(_("Website"), blank=True, null=True) - description = models.TextField(blank=True, null=True) - # created_by = models.ForeignKey( - # Profile, related_name="account_created_by", on_delete=models.SET_NULL, null=True - # ) - is_active = models.BooleanField(default=False) - tags = models.ManyToManyField(Tags, blank=True) - status = models.CharField( - choices=ACCOUNT_STATUS_CHOICE, max_length=64, default="open" - ) - lead = models.ForeignKey( - "leads.Lead", related_name="account_leads", on_delete=models.SET_NULL, null=True - ) - contact_name = models.CharField( - pgettext_lazy("Name of Contact", "Contact Name"), max_length=120 - ) - contacts = models.ManyToManyField( - "contacts.Contact", related_name="account_contacts" - ) - assigned_to = models.ManyToManyField(Profile, related_name="account_assigned_users") - teams = models.ManyToManyField(Teams, related_name="account_teams") - org = models.ForeignKey( - Org, - on_delete=models.SET_NULL, - null=True, - blank=True, - related_name="account_org", - ) - - class Meta: - verbose_name = "Account" - verbose_name_plural = "Accounts" - db_table = "accounts" - ordering = ("-created_at",) - - def __str__(self): - return f"{self.name}" - - def get_complete_address(self): - """Concatenates complete address.""" - address = "" - add_to_address = [ - self.billing_street, - self.billing_city, - self.billing_state, - self.billing_postcode, - self.get_billing_country_display(), - ] - address = utils.append_str_to(address, *add_to_address) - - return address - - @property - def created_on_arrow(self): - return arrow.get(self.created_at).humanize() - - @property - def contact_values(self): - contacts = list(self.contacts.values_list("id", flat=True)) - return ",".join(str(contact) for contact in contacts) - - @property - def get_team_users(self): - team_user_ids = list(self.teams.values_list("users__id", flat=True)) - return Profile.objects.filter(id__in=team_user_ids) - - @property - def get_team_and_assigned_users(self): - team_user_ids = list(self.teams.values_list("users__id", flat=True)) - assigned_user_ids = list(self.assigned_to.values_list("id", flat=True)) - user_ids = team_user_ids + assigned_user_ids - return Profile.objects.filter(id__in=user_ids) - - @property - def get_assigned_users_not_in_teams(self): - team_user_ids = list(self.teams.values_list("users__id", flat=True)) - assigned_user_ids = list(self.assigned_to.values_list("id", flat=True)) - user_ids = set(assigned_user_ids) - set(team_user_ids) - return Profile.objects.filter(id__in=list(user_ids)) - - -class AccountEmail(BaseModel): - from_account = models.ForeignKey( - Account, related_name="sent_email", on_delete=models.SET_NULL, null=True - ) - recipients = models.ManyToManyField(Contact, related_name="recieved_email") - message_subject = models.TextField(null=True) - message_body = models.TextField(null=True) - timezone = models.CharField(max_length=100, default="UTC") - scheduled_date_time = models.DateTimeField(null=True) - scheduled_later = models.BooleanField(default=False) - from_email = models.EmailField() - rendered_message_body = models.TextField(null=True) - - class Meta: - verbose_name = "Account Email" - verbose_name_plural = "Account Emails" - db_table = "account_email" - ordering = ("-created_at",) - - def __str__(self): - return f"{self.message_subject}" - -class AccountEmailLog(BaseModel): - """this model is used to track if the email is sent or not""" - - email = models.ForeignKey( - AccountEmail, related_name="email_log", on_delete=models.SET_NULL, null=True - ) - contact = models.ForeignKey( - Contact, related_name="contact_email_log", on_delete=models.SET_NULL, null=True - ) - is_sent = models.BooleanField(default=False) - - class Meta: - verbose_name = "EmailLog" - verbose_name_plural = "EmailLogs" - db_table = "emailLogs" - ordering = ("-created_at",) - - def __str__(self): - return f"{self.email.message_subject}" diff --git a/ENV.md b/backend/.env.example similarity index 59% rename from ENV.md rename to backend/.env.example index 67ab5b9c..e2fe8f25 100644 --- a/ENV.md +++ b/backend/.env.example @@ -1,6 +1,6 @@ # Environment variables -SECRET_KEY="mco934$@)NHUYTC%6789" +SECRET_KEY="" ENV_TYPE="dev" DOMAIN_NAME="" @@ -14,24 +14,25 @@ AWS_SES_REGION_ENDPOINT="" # DB -DBNAME="bottlecrm" -DBUSER="postgres" -DBPASSWORD="root" -DBHOST="localhost" +DBNAME="" +DBUSER="" +DBPASSWORD="" +DBHOST="" DBPORT="" # Sentry SENTRY_DSN="" # Celery -CELERY_BROKER_URL="" -CELERY_RESULT_BACKEND="" +CELERY_BROKER_URL="redis://localhost:6379/0" +CELERY_RESULT_BACKEND="redis://localhost:6379/0" # Swagger SWAGGER_ROOT_URL="" -#CACHES -MEMCACHELOCATION="" +# Google OAuth +GOOGLE_CLIENT_ID="" +GOOGLE_CLIENT_SECRET="" # Email DEFAULT_FROM_EMAIL="" diff --git a/backend/README.md b/backend/README.md new file mode 100644 index 00000000..6a501449 --- /dev/null +++ b/backend/README.md @@ -0,0 +1,407 @@ +# BottleCRM Backend - Django REST API + +The backend for BottleCRM, a multi-tenant CRM platform built with Django REST Framework. + +## Tech Stack + +- **Django 4.2.1** - Web framework +- **Django REST Framework 3.14.0** - API toolkit +- **PostgreSQL** - Database (psycopg2-binary 2.9.11) +- **Celery 5.5.3** - Async task queue +- **Redis 4.6.0** - Message broker for Celery +- **djangorestframework-simplejwt 5.2.2** - JWT authentication +- **drf-spectacular 0.26.2** - OpenAPI/Swagger documentation +- **django-ses 3.5.0** - AWS SES email backend +- **Sentry SDK 1.24.0** - Error tracking + +## Django Apps + +| App | Description | +|-----|-------------| +| `common` | User, Organization, Profile, Comments, Attachments, Document models | +| `accounts` | Customer account management | +| `leads` | Lead tracking and conversion | +| `contacts` | Contact management | +| `opportunity` | Sales pipeline and deal tracking | +| `cases` | Customer support tickets | +| `tasks` | Task management | +| `invoices` | Invoicing system | +| `events` | Calendar events | +| `teams` | Team management | +| `emails` | Email handling | +| `planner` | Planner events | +| `boards` | Kanban board system | +| `marketing` | Newsletter and contact forms | + +## Prerequisites + +- **Python 3.8+** +- **PostgreSQL** +- **Redis** (for Celery) +- **virtualenv** + +## Installation + +### 1. Create and activate virtual environment + +```bash +cd backend +python -m venv venv +source venv/bin/activate # On Windows: venv\Scripts\activate +``` + +### 2. Install dependencies + +```bash +pip install -r requirements.txt +``` + +### 3. Configure environment variables + +Create a `.env` file in the `backend/` directory: + +```env +# Django +SECRET_KEY=your-secret-key-here +ENV_TYPE=dev + +# Database +DBNAME=bottlecrm +DBUSER=postgres +DBPASSWORD=root +DBHOST=localhost +DBPORT=5432 + +# Email +DEFAULT_FROM_EMAIL=noreply@bottlecrm.com +ADMIN_EMAIL=admin@bottlecrm.com + +# Celery +CELERY_BROKER_URL=redis://localhost:6379/0 +CELERY_RESULT_BACKEND=redis://localhost:6379/0 + +# Domain +DOMAIN_NAME=http://localhost:8000 +SWAGGER_ROOT_URL=http://localhost:8000 +``` + +### 4. Set up database + +```bash +# Create PostgreSQL database +sudo -u postgres psql +CREATE DATABASE bottlecrm WITH OWNER = postgres; +ALTER USER postgres WITH PASSWORD 'root'; +\q + +# Run migrations +python manage.py migrate + +# Create superuser (optional) +python manage.py createsuperuser +``` + +### 5. Run the development server + +```bash +python manage.py runserver +``` + +The API will be available at `http://localhost:8000` + +## Running Celery + +For background tasks (emails, notifications), run the Celery worker: + +```bash +celery -A crm worker --loglevel=INFO +``` + +## API Documentation + +- **Swagger UI**: http://localhost:8000/swagger-ui/ +- **ReDoc**: http://localhost:8000/api/schema/redoc/ +- **Django Admin**: http://localhost:8000/admin/ + +## Architecture + +### Multi-Tenancy + +Every request operates within an organization context: + +- **Organization (Org)**: Top-level tenant container +- **Users**: Regular members with USER role +- **Admins**: Organization administrators with ADMIN role +- **Super Admin**: Users with @micropyramid.com email domain have platform-wide access + +### Authentication + +JWT-based authentication: + +``` +Authorization: Bearer +``` + +- Organization ID is embedded in the JWT token (not sent as header) +- Access token lifetime: 1 day +- Refresh token lifetime: 365 days + +### Middleware + +The middleware chain provides security: + +1. **`GetProfileAndOrg`** (`common.middleware.get_company`): + - Extracts org_id from JWT token claims (not headers - prevents spoofing) + - Validates user has active membership in the organization + - Sets `request.profile` and `request.org` + +2. **`RequireOrgContext`** (`common.middleware.rls_context`): + - Sets PostgreSQL session variable `app.current_org` for RLS + - Resets context after each request + +### Row-Level Security (RLS) + +PostgreSQL RLS provides database-level tenant isolation as defense-in-depth. + +#### How It Works + +1. **Middleware sets context**: `SET app.current_org = ''` +2. **RLS policies filter queries**: Only rows matching `org_id` are visible +3. **Fail-safe design**: Empty context returns zero rows (NULLIF pattern) + +#### Protected Tables (24 total) + +| Category | Tables | +|----------|--------| +| Core Business | `lead`, `accounts`, `contacts`, `opportunity`, `case`, `task`, `invoice` | +| Supporting | `comment`, `attachments`, `document`, `teams`, `activity`, `tags`, `address`, `solution` | +| Boards | `board`, `board_column`, `board_task`, `board_member` | +| Other | `apiSettings`, `account_email`, `emailLogs`, `invoice_history`, `security_audit_log` | + +#### Configuration + +RLS is configured in `common/rls/__init__.py`: + +```python +from common.rls import RLS_CONFIG, get_enable_policy_sql + +# List of protected tables +tables = RLS_CONFIG['tables'] + +# Enable RLS on a table +cursor.execute(get_enable_policy_sql('my_table')) +``` + +#### Management Commands + +```bash +# Check RLS status on all tables +python manage.py manage_rls --status + +# Verify database user is non-superuser (required for RLS) +python manage.py manage_rls --verify-user + +# Test RLS isolation between organizations +python manage.py manage_rls --test + +# Enable RLS on all configured tables +python manage.py manage_rls --enable + +# Disable RLS (for debugging only) +python manage.py manage_rls --disable +``` + +#### Critical: Database User Setup + +**PostgreSQL superusers bypass ALL RLS policies.** You must use a non-superuser: + +```sql +-- Create application user +CREATE USER crm_app WITH PASSWORD 'your_secure_password'; + +-- Grant permissions +GRANT CONNECT ON DATABASE bottlecrm TO crm_app; +GRANT USAGE ON SCHEMA public TO crm_app; +GRANT SELECT, INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA public TO crm_app; +GRANT USAGE, SELECT ON ALL SEQUENCES IN SCHEMA public TO crm_app; + +-- Future tables inherit permissions +ALTER DEFAULT PRIVILEGES IN SCHEMA public +GRANT SELECT, INSERT, UPDATE, DELETE ON TABLES TO crm_app; +``` + +Update `.env`: +```env +DBUSER=crm_app +DBPASSWORD=your_secure_password +``` + +#### Celery Tasks & RLS + +Background tasks don't go through middleware, so set RLS context manually: + +```python +from common.tasks import set_rls_context + +@app.task +def my_background_task(data_id, org_id): + set_rls_context(org_id) # Required! + obj = MyModel.objects.get(id=data_id) + # ... process +``` + +#### Adding RLS to New Tables + +1. Add table name to `ORG_SCOPED_TABLES` in `common/rls/__init__.py` +2. Create migration using `get_enable_policy_sql()` +3. Ensure model has `org = models.ForeignKey(Org, ...)` + +### BaseModel Pattern + +All models inherit from `BaseModel` (`common.base.BaseModel`): + +- UUID primary keys (not integer IDs) +- Automatic timestamps: `created_at`, `updated_at` +- Audit trail: `created_by`, `updated_by` +- Organization isolation: `org = models.ForeignKey(Org)` + +### API Endpoint Pattern + +``` +GET/POST /api// # List/Create +GET/PUT/DELETE /api/// # Detail/Update/Delete +GET/POST /api//comment// # Comments +GET/POST /api//attachment// # Attachments +``` + +## Project Structure + +``` +backend/ +├── manage.py +├── requirements.txt +├── crm/ # Django project settings +│ ├── settings.py +│ ├── urls.py +│ ├── celery.py +│ └── wsgi.py +├── common/ # Core models and utilities +│ ├── models.py # User, Org, Profile, etc. +│ ├── base.py # BaseModel +│ ├── middleware/ +│ └── tasks.py # Celery tasks +├── accounts/ +├── leads/ +├── contacts/ +├── opportunity/ +├── cases/ +├── tasks/ +├── invoices/ +├── events/ +├── teams/ +├── emails/ +├── planner/ +├── boards/ +├── marketing/ +├── templates/ +└── static/ +``` + +## Development + +### Code Quality + +```bash +# Format code +black . + +# Sort imports +isort . + +# Run tests +pytest +``` + +### Creating a New App + +1. Create the app: + ```bash + python manage.py startapp myapp + ``` + +2. Add to `INSTALLED_APPS` in `crm/settings.py` + +3. Create models inheriting from `BaseModel`: + ```python + from common.base import BaseModel + from common.models import Org + + class MyModel(BaseModel): + org = models.ForeignKey(Org, on_delete=models.CASCADE) + # ... other fields + ``` + +4. Always filter queries by organization: + ```python + queryset = MyModel.objects.filter(org=request.profile.org) + ``` + +5. Run migrations: + ```bash + python manage.py makemigrations + python manage.py migrate + ``` + +## Environment Variables Reference + +| Variable | Description | +|----------|-------------| +| `SECRET_KEY` | Django secret key | +| `ENV_TYPE` | Environment type (`dev` or `prod`) | +| `DBNAME` | PostgreSQL database name | +| `DBUSER` | PostgreSQL username | +| `DBPASSWORD` | PostgreSQL password | +| `DBHOST` | PostgreSQL host | +| `DBPORT` | PostgreSQL port | +| `DEFAULT_FROM_EMAIL` | Default sender email | +| `ADMIN_EMAIL` | Admin notification email | +| `CELERY_BROKER_URL` | Redis URL for Celery broker | +| `CELERY_RESULT_BACKEND` | Redis URL for Celery results | +| `DOMAIN_NAME` | Application domain | +| `SWAGGER_ROOT_URL` | Swagger documentation root URL | + +## Troubleshooting + +### Database Connection Issues + +```bash +# Check PostgreSQL is running +sudo systemctl status postgresql + +# Verify database exists +sudo -u postgres psql -l +``` + +### Migration Issues + +```bash +# Show migration status +python manage.py showmigrations + +# Reset migrations (development only) +python manage.py migrate --fake zero +``` + +### Celery Not Processing Tasks + +```bash +# Check Redis is running +redis-cli ping + +# Check Celery worker logs +celery -A crm worker --loglevel=DEBUG +``` + +## License + +MIT License - see [LICENSE](../LICENSE) for details. diff --git a/accounts/__init__.py b/backend/accounts/__init__.py similarity index 100% rename from accounts/__init__.py rename to backend/accounts/__init__.py diff --git a/accounts/apps.py b/backend/accounts/apps.py similarity index 100% rename from accounts/apps.py rename to backend/accounts/apps.py diff --git a/backend/accounts/migrations/0001_initial.py b/backend/accounts/migrations/0001_initial.py new file mode 100644 index 00000000..0f4e87fe --- /dev/null +++ b/backend/accounts/migrations/0001_initial.py @@ -0,0 +1,487 @@ +# Generated by Django 5.2.8 on 2025-11-27 12:17 + +import uuid + +import phonenumber_field.modelfields +from django.db import migrations, models + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [] + + operations = [ + migrations.CreateModel( + name="Account", + fields=[ + ( + "created_at", + models.DateTimeField(auto_now_add=True, verbose_name="Created At"), + ), + ( + "updated_at", + models.DateTimeField( + auto_now=True, verbose_name="Last Modified At" + ), + ), + ( + "id", + models.UUIDField( + db_index=True, + default=uuid.uuid4, + editable=False, + primary_key=True, + serialize=False, + unique=True, + ), + ), + ("name", models.CharField(max_length=255, verbose_name="Account Name")), + ( + "email", + models.EmailField( + blank=True, max_length=254, null=True, verbose_name="Email" + ), + ), + ( + "phone", + phonenumber_field.modelfields.PhoneNumberField( + blank=True, + max_length=128, + null=True, + region=None, + verbose_name="Phone", + ), + ), + ( + "website", + models.URLField(blank=True, null=True, verbose_name="Website"), + ), + ( + "industry", + models.CharField( + blank=True, + choices=[ + ("ADVERTISING", "ADVERTISING"), + ("AGRICULTURE", "AGRICULTURE"), + ("APPAREL & ACCESSORIES", "APPAREL & ACCESSORIES"), + ("AUTOMOTIVE", "AUTOMOTIVE"), + ("BANKING", "BANKING"), + ("BIOTECHNOLOGY", "BIOTECHNOLOGY"), + ( + "BUILDING MATERIALS & EQUIPMENT", + "BUILDING MATERIALS & EQUIPMENT", + ), + ("CHEMICAL", "CHEMICAL"), + ("COMPUTER", "COMPUTER"), + ("EDUCATION", "EDUCATION"), + ("ELECTRONICS", "ELECTRONICS"), + ("ENERGY", "ENERGY"), + ("ENTERTAINMENT & LEISURE", "ENTERTAINMENT & LEISURE"), + ("FINANCE", "FINANCE"), + ("FOOD & BEVERAGE", "FOOD & BEVERAGE"), + ("GROCERY", "GROCERY"), + ("HEALTHCARE", "HEALTHCARE"), + ("INSURANCE", "INSURANCE"), + ("LEGAL", "LEGAL"), + ("MANUFACTURING", "MANUFACTURING"), + ("PUBLISHING", "PUBLISHING"), + ("REAL ESTATE", "REAL ESTATE"), + ("SERVICE", "SERVICE"), + ("SOFTWARE", "SOFTWARE"), + ("SPORTS", "SPORTS"), + ("TECHNOLOGY", "TECHNOLOGY"), + ("TELECOMMUNICATIONS", "TELECOMMUNICATIONS"), + ("TELEVISION", "TELEVISION"), + ("TRANSPORTATION", "TRANSPORTATION"), + ("VENTURE CAPITAL", "VENTURE CAPITAL"), + ], + max_length=255, + null=True, + verbose_name="Industry", + ), + ), + ( + "number_of_employees", + models.PositiveIntegerField( + blank=True, null=True, verbose_name="Number of Employees" + ), + ), + ( + "annual_revenue", + models.DecimalField( + blank=True, + decimal_places=2, + max_digits=15, + null=True, + verbose_name="Annual Revenue", + ), + ), + ( + "address_line", + models.CharField( + blank=True, max_length=255, null=True, verbose_name="Address" + ), + ), + ( + "city", + models.CharField( + blank=True, max_length=255, null=True, verbose_name="City" + ), + ), + ( + "state", + models.CharField( + blank=True, max_length=255, null=True, verbose_name="State" + ), + ), + ( + "postcode", + models.CharField( + blank=True, max_length=64, null=True, verbose_name="Postal Code" + ), + ), + ( + "country", + models.CharField( + blank=True, + choices=[ + ("GB", "United Kingdom"), + ("AF", "Afghanistan"), + ("AX", "Aland Islands"), + ("AL", "Albania"), + ("DZ", "Algeria"), + ("AS", "American Samoa"), + ("AD", "Andorra"), + ("AO", "Angola"), + ("AI", "Anguilla"), + ("AQ", "Antarctica"), + ("AG", "Antigua and Barbuda"), + ("AR", "Argentina"), + ("AM", "Armenia"), + ("AW", "Aruba"), + ("AU", "Australia"), + ("AT", "Austria"), + ("AZ", "Azerbaijan"), + ("BS", "Bahamas"), + ("BH", "Bahrain"), + ("BD", "Bangladesh"), + ("BB", "Barbados"), + ("BY", "Belarus"), + ("BE", "Belgium"), + ("BZ", "Belize"), + ("BJ", "Benin"), + ("BM", "Bermuda"), + ("BT", "Bhutan"), + ("BO", "Bolivia"), + ("BA", "Bosnia and Herzegovina"), + ("BW", "Botswana"), + ("BV", "Bouvet Island"), + ("BR", "Brazil"), + ("IO", "British Indian Ocean Territory"), + ("BN", "Brunei Darussalam"), + ("BG", "Bulgaria"), + ("BF", "Burkina Faso"), + ("BI", "Burundi"), + ("KH", "Cambodia"), + ("CM", "Cameroon"), + ("CA", "Canada"), + ("CV", "Cape Verde"), + ("KY", "Cayman Islands"), + ("CF", "Central African Republic"), + ("TD", "Chad"), + ("CL", "Chile"), + ("CN", "China"), + ("CX", "Christmas Island"), + ("CC", "Cocos (Keeling) Islands"), + ("CO", "Colombia"), + ("KM", "Comoros"), + ("CG", "Congo"), + ("CD", "Congo, The Democratic Republic of the"), + ("CK", "Cook Islands"), + ("CR", "Costa Rica"), + ("CI", "Cote d'Ivoire"), + ("HR", "Croatia"), + ("CU", "Cuba"), + ("CY", "Cyprus"), + ("CZ", "Czech Republic"), + ("DK", "Denmark"), + ("DJ", "Djibouti"), + ("DM", "Dominica"), + ("DO", "Dominican Republic"), + ("EC", "Ecuador"), + ("EG", "Egypt"), + ("SV", "El Salvador"), + ("GQ", "Equatorial Guinea"), + ("ER", "Eritrea"), + ("EE", "Estonia"), + ("ET", "Ethiopia"), + ("FK", "Falkland Islands (Malvinas)"), + ("FO", "Faroe Islands"), + ("FJ", "Fiji"), + ("FI", "Finland"), + ("FR", "France"), + ("GF", "French Guiana"), + ("PF", "French Polynesia"), + ("TF", "French Southern Territories"), + ("GA", "Gabon"), + ("GM", "Gambia"), + ("GE", "Georgia"), + ("DE", "Germany"), + ("GH", "Ghana"), + ("GI", "Gibraltar"), + ("GR", "Greece"), + ("GL", "Greenland"), + ("GD", "Grenada"), + ("GP", "Guadeloupe"), + ("GU", "Guam"), + ("GT", "Guatemala"), + ("GG", "Guernsey"), + ("GN", "Guinea"), + ("GW", "Guinea-Bissau"), + ("GY", "Guyana"), + ("HT", "Haiti"), + ("HM", "Heard Island and McDonald Islands"), + ("VA", "Holy See (Vatican City State)"), + ("HN", "Honduras"), + ("HK", "Hong Kong"), + ("HU", "Hungary"), + ("IS", "Iceland"), + ("IN", "India"), + ("ID", "Indonesia"), + ("IR", "Iran, Islamic Republic of"), + ("IQ", "Iraq"), + ("IE", "Ireland"), + ("IM", "Isle of Man"), + ("IL", "Israel"), + ("IT", "Italy"), + ("JM", "Jamaica"), + ("JP", "Japan"), + ("JE", "Jersey"), + ("JO", "Jordan"), + ("KZ", "Kazakhstan"), + ("KE", "Kenya"), + ("KI", "Kiribati"), + ("KP", "Korea, Democratic People's Republic of"), + ("KR", "Korea, Republic of"), + ("KW", "Kuwait"), + ("KG", "Kyrgyzstan"), + ("LA", "Lao People's Democratic Republic"), + ("LV", "Latvia"), + ("LB", "Lebanon"), + ("LS", "Lesotho"), + ("LR", "Liberia"), + ("LY", "Libyan Arab Jamahiriya"), + ("LI", "Liechtenstein"), + ("LT", "Lithuania"), + ("LU", "Luxembourg"), + ("MO", "Macao"), + ("MK", "Macedonia, The Former Yugoslav Republic of"), + ("MG", "Madagascar"), + ("MW", "Malawi"), + ("MY", "Malaysia"), + ("MV", "Maldives"), + ("ML", "Mali"), + ("MT", "Malta"), + ("MH", "Marshall Islands"), + ("MQ", "Martinique"), + ("MR", "Mauritania"), + ("MU", "Mauritius"), + ("YT", "Mayotte"), + ("MX", "Mexico"), + ("FM", "Micronesia, Federated States of"), + ("MD", "Moldova"), + ("MC", "Monaco"), + ("MN", "Mongolia"), + ("ME", "Montenegro"), + ("MS", "Montserrat"), + ("MA", "Morocco"), + ("MZ", "Mozambique"), + ("MM", "Myanmar"), + ("NA", "Namibia"), + ("NR", "Nauru"), + ("NP", "Nepal"), + ("NL", "Netherlands"), + ("AN", "Netherlands Antilles"), + ("NC", "New Caledonia"), + ("NZ", "New Zealand"), + ("NI", "Nicaragua"), + ("NE", "Niger"), + ("NG", "Nigeria"), + ("NU", "Niue"), + ("NF", "Norfolk Island"), + ("MP", "Northern Mariana Islands"), + ("NO", "Norway"), + ("OM", "Oman"), + ("PK", "Pakistan"), + ("PW", "Palau"), + ("PS", "Palestinian Territory, Occupied"), + ("PA", "Panama"), + ("PG", "Papua New Guinea"), + ("PY", "Paraguay"), + ("PE", "Peru"), + ("PH", "Philippines"), + ("PN", "Pitcairn"), + ("PL", "Poland"), + ("PT", "Portugal"), + ("PR", "Puerto Rico"), + ("QA", "Qatar"), + ("RE", "Reunion"), + ("RO", "Romania"), + ("RU", "Russian Federation"), + ("RW", "Rwanda"), + ("BL", "Saint Barthelemy"), + ("SH", "Saint Helena"), + ("KN", "Saint Kitts and Nevis"), + ("LC", "Saint Lucia"), + ("MF", "Saint Martin"), + ("PM", "Saint Pierre and Miquelon"), + ("VC", "Saint Vincent and the Grenadines"), + ("WS", "Samoa"), + ("SM", "San Marino"), + ("ST", "Sao Tome and Principe"), + ("SA", "Saudi Arabia"), + ("SN", "Senegal"), + ("RS", "Serbia"), + ("SC", "Seychelles"), + ("SL", "Sierra Leone"), + ("SG", "Singapore"), + ("SK", "Slovakia"), + ("SI", "Slovenia"), + ("SB", "Solomon Islands"), + ("SO", "Somalia"), + ("ZA", "South Africa"), + ("GS", "South Georgia and the South Sandwich Islands"), + ("ES", "Spain"), + ("LK", "Sri Lanka"), + ("SD", "Sudan"), + ("SR", "Suriname"), + ("SJ", "Svalbard and Jan Mayen"), + ("SZ", "Swaziland"), + ("SE", "Sweden"), + ("CH", "Switzerland"), + ("SY", "Syrian Arab Republic"), + ("TW", "Taiwan, Province of China"), + ("TJ", "Tajikistan"), + ("TZ", "Tanzania, United Republic of"), + ("TH", "Thailand"), + ("TL", "Timor-Leste"), + ("TG", "Togo"), + ("TK", "Tokelau"), + ("TO", "Tonga"), + ("TT", "Trinidad and Tobago"), + ("TN", "Tunisia"), + ("TR", "Turkey"), + ("TM", "Turkmenistan"), + ("TC", "Turks and Caicos Islands"), + ("TV", "Tuvalu"), + ("UG", "Uganda"), + ("UA", "Ukraine"), + ("AE", "United Arab Emirates"), + ("US", "United States"), + ("UM", "United States Minor Outlying Islands"), + ("UY", "Uruguay"), + ("UZ", "Uzbekistan"), + ("VU", "Vanuatu"), + ("VE", "Venezuela"), + ("VN", "Viet Nam"), + ("VG", "Virgin Islands, British"), + ("VI", "Virgin Islands, U.S."), + ("WF", "Wallis and Futuna"), + ("EH", "Western Sahara"), + ("YE", "Yemen"), + ("ZM", "Zambia"), + ("ZW", "Zimbabwe"), + ], + max_length=3, + null=True, + verbose_name="Country", + ), + ), + ( + "description", + models.TextField(blank=True, null=True, verbose_name="Notes"), + ), + ("is_active", models.BooleanField(default=True)), + ], + options={ + "verbose_name": "Account", + "verbose_name_plural": "Accounts", + "db_table": "accounts", + "ordering": ("-created_at",), + }, + ), + migrations.CreateModel( + name="AccountEmail", + fields=[ + ( + "created_at", + models.DateTimeField(auto_now_add=True, verbose_name="Created At"), + ), + ( + "updated_at", + models.DateTimeField( + auto_now=True, verbose_name="Last Modified At" + ), + ), + ( + "id", + models.UUIDField( + db_index=True, + default=uuid.uuid4, + editable=False, + primary_key=True, + serialize=False, + unique=True, + ), + ), + ("message_subject", models.TextField(null=True)), + ("message_body", models.TextField(null=True)), + ("timezone", models.CharField(default="UTC", max_length=100)), + ("scheduled_date_time", models.DateTimeField(null=True)), + ("scheduled_later", models.BooleanField(default=False)), + ("from_email", models.EmailField(max_length=254)), + ("rendered_message_body", models.TextField(null=True)), + ], + options={ + "verbose_name": "Account Email", + "verbose_name_plural": "Account Emails", + "db_table": "account_email", + "ordering": ("-created_at",), + }, + ), + migrations.CreateModel( + name="AccountEmailLog", + fields=[ + ( + "created_at", + models.DateTimeField(auto_now_add=True, verbose_name="Created At"), + ), + ( + "updated_at", + models.DateTimeField( + auto_now=True, verbose_name="Last Modified At" + ), + ), + ( + "id", + models.UUIDField( + db_index=True, + default=uuid.uuid4, + editable=False, + primary_key=True, + serialize=False, + unique=True, + ), + ), + ("is_sent", models.BooleanField(default=False)), + ], + options={ + "verbose_name": "EmailLog", + "verbose_name_plural": "EmailLogs", + "db_table": "emailLogs", + "ordering": ("-created_at",), + }, + ), + ] diff --git a/backend/accounts/migrations/0002_initial.py b/backend/accounts/migrations/0002_initial.py new file mode 100644 index 00000000..cd492c60 --- /dev/null +++ b/backend/accounts/migrations/0002_initial.py @@ -0,0 +1,202 @@ +# Generated by Django 5.2.8 on 2025-11-27 12:17 + +import django.db.models.deletion +from django.conf import settings +from django.db import migrations, models + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ("accounts", "0001_initial"), + ("common", "0001_initial"), + ("contacts", "0001_initial"), + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ] + + operations = [ + migrations.AddField( + model_name="account", + name="assigned_to", + field=models.ManyToManyField( + related_name="account_assigned_users", to="common.profile" + ), + ), + migrations.AddField( + model_name="account", + name="contacts", + field=models.ManyToManyField( + related_name="account_contacts", to="contacts.contact" + ), + ), + migrations.AddField( + model_name="account", + name="created_by", + field=models.ForeignKey( + null=True, + on_delete=django.db.models.deletion.SET_NULL, + related_name="%(class)s_created_by", + to=settings.AUTH_USER_MODEL, + verbose_name="Created By", + ), + ), + migrations.AddField( + model_name="account", + name="org", + field=models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, + related_name="accounts", + to="common.org", + ), + ), + migrations.AddField( + model_name="account", + name="tags", + field=models.ManyToManyField(blank=True, to="common.tags"), + ), + migrations.AddField( + model_name="account", + name="teams", + field=models.ManyToManyField( + related_name="account_teams", to="common.teams" + ), + ), + migrations.AddField( + model_name="account", + name="updated_by", + field=models.ForeignKey( + null=True, + on_delete=django.db.models.deletion.SET_NULL, + related_name="%(class)s_updated_by", + to=settings.AUTH_USER_MODEL, + verbose_name="Last Modified By", + ), + ), + migrations.AddField( + model_name="accountemail", + name="created_by", + field=models.ForeignKey( + null=True, + on_delete=django.db.models.deletion.SET_NULL, + related_name="%(class)s_created_by", + to=settings.AUTH_USER_MODEL, + verbose_name="Created By", + ), + ), + migrations.AddField( + model_name="accountemail", + name="from_account", + field=models.ForeignKey( + null=True, + on_delete=django.db.models.deletion.SET_NULL, + related_name="sent_email", + to="accounts.account", + ), + ), + migrations.AddField( + model_name="accountemail", + name="org", + field=models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, + related_name="account_emails", + to="common.org", + ), + ), + migrations.AddField( + model_name="accountemail", + name="recipients", + field=models.ManyToManyField( + related_name="recieved_email", to="contacts.contact" + ), + ), + migrations.AddField( + model_name="accountemail", + name="updated_by", + field=models.ForeignKey( + null=True, + on_delete=django.db.models.deletion.SET_NULL, + related_name="%(class)s_updated_by", + to=settings.AUTH_USER_MODEL, + verbose_name="Last Modified By", + ), + ), + migrations.AddField( + model_name="accountemaillog", + name="contact", + field=models.ForeignKey( + null=True, + on_delete=django.db.models.deletion.SET_NULL, + related_name="contact_email_log", + to="contacts.contact", + ), + ), + migrations.AddField( + model_name="accountemaillog", + name="created_by", + field=models.ForeignKey( + null=True, + on_delete=django.db.models.deletion.SET_NULL, + related_name="%(class)s_created_by", + to=settings.AUTH_USER_MODEL, + verbose_name="Created By", + ), + ), + migrations.AddField( + model_name="accountemaillog", + name="email", + field=models.ForeignKey( + null=True, + on_delete=django.db.models.deletion.SET_NULL, + related_name="email_log", + to="accounts.accountemail", + ), + ), + migrations.AddField( + model_name="accountemaillog", + name="org", + field=models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, + related_name="account_email_logs", + to="common.org", + ), + ), + migrations.AddField( + model_name="accountemaillog", + name="updated_by", + field=models.ForeignKey( + null=True, + on_delete=django.db.models.deletion.SET_NULL, + related_name="%(class)s_updated_by", + to=settings.AUTH_USER_MODEL, + verbose_name="Last Modified By", + ), + ), + migrations.AddIndex( + model_name="account", + index=models.Index(fields=["name"], name="accounts_name_94ecef_idx"), + ), + migrations.AddIndex( + model_name="account", + index=models.Index(fields=["industry"], name="accounts_industr_6498ca_idx"), + ), + migrations.AddIndex( + model_name="account", + index=models.Index( + fields=["org", "-created_at"], name="accounts_org_id_6f0889_idx" + ), + ), + migrations.AddIndex( + model_name="accountemail", + index=models.Index( + fields=["org", "-created_at"], name="account_ema_org_id_3bbcd2_idx" + ), + ), + migrations.AddIndex( + model_name="accountemaillog", + index=models.Index( + fields=["org", "-created_at"], name="emailLogs_org_id_84814f_idx" + ), + ), + ] diff --git a/accounts/migrations/__init__.py b/backend/accounts/migrations/__init__.py similarity index 100% rename from accounts/migrations/__init__.py rename to backend/accounts/migrations/__init__.py diff --git a/backend/accounts/models.py b/backend/accounts/models.py new file mode 100644 index 00000000..a40d151f --- /dev/null +++ b/backend/accounts/models.py @@ -0,0 +1,190 @@ +import arrow +from django.core.exceptions import ValidationError +from django.db import models +from django.utils.translation import gettext_lazy as _ +from django.utils.translation import pgettext_lazy +from phonenumber_field.modelfields import PhoneNumberField + +from common.base import AssignableMixin, BaseModel +from common.models import Org, Profile, Tags, Teams +from common.utils import COUNTRIES, INDCHOICES +from contacts.models import Contact + + +class Account(AssignableMixin, BaseModel): + """ + Account model for CRM - Streamlined for modern sales workflow + Based on Twenty CRM and Salesforce patterns + """ + + # Core Account Information + name = models.CharField(_("Account Name"), max_length=255) + email = models.EmailField(_("Email"), blank=True, null=True) + phone = PhoneNumberField(_("Phone"), null=True, blank=True) + website = models.URLField(_("Website"), blank=True, null=True) + + # Business Information + industry = models.CharField( + _("Industry"), max_length=255, choices=INDCHOICES, blank=True, null=True + ) + number_of_employees = models.PositiveIntegerField( + _("Number of Employees"), blank=True, null=True + ) + annual_revenue = models.DecimalField( + _("Annual Revenue"), max_digits=15, decimal_places=2, blank=True, null=True + ) + + # Address (flat fields like Lead and Contact models) + address_line = models.CharField(_("Address"), max_length=255, blank=True, null=True) + city = models.CharField(_("City"), max_length=255, blank=True, null=True) + state = models.CharField(_("State"), max_length=255, blank=True, null=True) + postcode = models.CharField(_("Postal Code"), max_length=64, blank=True, null=True) + country = models.CharField( + _("Country"), max_length=3, choices=COUNTRIES, blank=True, null=True + ) + + # Assignment + assigned_to = models.ManyToManyField(Profile, related_name="account_assigned_users") + teams = models.ManyToManyField(Teams, related_name="account_teams") + contacts = models.ManyToManyField( + "contacts.Contact", related_name="account_contacts" + ) + + # Tags + tags = models.ManyToManyField(Tags, blank=True) + + # Notes + description = models.TextField(_("Notes"), blank=True, null=True) + + # System Fields + is_active = models.BooleanField(default=True) + org = models.ForeignKey( + Org, + on_delete=models.CASCADE, + related_name="accounts", + ) + + class Meta: + verbose_name = "Account" + verbose_name_plural = "Accounts" + db_table = "accounts" + ordering = ("-created_at",) + indexes = [ + models.Index(fields=["name"]), + models.Index(fields=["industry"]), + models.Index(fields=["org", "-created_at"]), + ] + + def __str__(self): + return f"{self.name}" + + def get_complete_address(self): + """Concatenates complete address.""" + address_parts = [ + self.address_line, + self.city, + self.state, + self.postcode, + self.get_country_display() if self.country else None, + ] + return ", ".join(part for part in address_parts if part) + + @property + def created_on_arrow(self): + return arrow.get(self.created_at).humanize() + + @property + def contact_values(self): + contacts = list(self.contacts.values_list("id", flat=True)) + return ",".join(str(contact) for contact in contacts) + + +class AccountEmail(BaseModel): + from_account = models.ForeignKey( + Account, related_name="sent_email", on_delete=models.SET_NULL, null=True + ) + recipients = models.ManyToManyField(Contact, related_name="recieved_email") + message_subject = models.TextField(null=True) + message_body = models.TextField(null=True) + timezone = models.CharField(max_length=100, default="UTC") + scheduled_date_time = models.DateTimeField(null=True) + scheduled_later = models.BooleanField(default=False) + from_email = models.EmailField() + rendered_message_body = models.TextField(null=True) + org = models.ForeignKey( + Org, + on_delete=models.CASCADE, + related_name="account_emails", + ) + + class Meta: + verbose_name = "Account Email" + verbose_name_plural = "Account Emails" + db_table = "account_email" + ordering = ("-created_at",) + indexes = [ + models.Index(fields=["org", "-created_at"]), + ] + + def __str__(self): + return f"{self.message_subject}" + + def save(self, *args, **kwargs): + """ + Ensure org follows the parent account; fallback to the first recipient's org. + + This guards against missing org assignment, which would violate multi-tenant isolation. + """ + if not self.org_id: + if self.from_account and self.from_account.org_id: + self.org_id = self.from_account.org_id + else: + # For unsaved m2m, recipients may not be available until after save + recipient = self.recipients.first() if self.pk else None + if recipient and recipient.org_id: + self.org_id = recipient.org_id + if not self.org_id: + raise ValidationError("Organization is required for AccountEmail") + super().save(*args, **kwargs) + + +class AccountEmailLog(BaseModel): + """this model is used to track if the email is sent or not""" + + email = models.ForeignKey( + AccountEmail, related_name="email_log", on_delete=models.SET_NULL, null=True + ) + contact = models.ForeignKey( + Contact, related_name="contact_email_log", on_delete=models.SET_NULL, null=True + ) + is_sent = models.BooleanField(default=False) + org = models.ForeignKey( + Org, + on_delete=models.CASCADE, + related_name="account_email_logs", + ) + + class Meta: + verbose_name = "EmailLog" + verbose_name_plural = "EmailLogs" + db_table = "emailLogs" + ordering = ("-created_at",) + indexes = [ + models.Index(fields=["org", "-created_at"]), + ] + + def __str__(self): + return f"{self.email.message_subject}" + + def save(self, *args, **kwargs): + """ + Align log org with parent email (preferred) or contact org. + """ + if not self.org_id: + if self.email and self.email.org_id: + self.org_id = self.email.org_id + elif self.contact and self.contact.org_id: + self.org_id = self.contact.org_id + if not self.org_id: + raise ValidationError("Organization is required for AccountEmailLog") + super().save(*args, **kwargs) diff --git a/accounts/serializer.py b/backend/accounts/serializer.py similarity index 62% rename from accounts/serializer.py rename to backend/accounts/serializer.py index 922247d1..659e496f 100644 --- a/accounts/serializer.py +++ b/backend/accounts/serializer.py @@ -1,15 +1,15 @@ from rest_framework import serializers -from accounts.models import Account, AccountEmail, Tags, AccountEmailLog +from accounts.models import Account, AccountEmail, AccountEmailLog +from common.models import Tags from common.serializer import ( AttachmentsSerializer, OrganizationSerializer, ProfileSerializer, - UserSerializer + TeamsSerializer, + UserSerializer, ) from contacts.serializer import ContactSerializer -from leads.serializer import LeadSerializer -from teams.serializer import TeamsSerializer class TagsSerailizer(serializers.ModelSerializer): @@ -19,44 +19,61 @@ class TagsSerailizer(serializers.ModelSerializer): class AccountSerializer(serializers.ModelSerializer): + """Serializer for reading Account data""" + created_by = UserSerializer() - lead = LeadSerializer() org = OrganizationSerializer() tags = TagsSerailizer(read_only=True, many=True) assigned_to = ProfileSerializer(read_only=True, many=True) contacts = ContactSerializer(read_only=True, many=True) teams = TeamsSerializer(read_only=True, many=True) account_attachment = AttachmentsSerializer(read_only=True, many=True) + get_team_users = ProfileSerializer(read_only=True, many=True) + get_team_and_assigned_users = ProfileSerializer(read_only=True, many=True) + get_assigned_users_not_in_teams = ProfileSerializer(read_only=True, many=True) + country = serializers.SerializerMethodField() + + def get_country(self, obj): + return obj.get_country_display() if obj.country else None class Meta: model = Account - # fields = ‘__all__’ fields = ( "id", + # Core Account Information "name", "email", "phone", - "industry", - "billing_address_line", - "billing_street", - "billing_city", - "billing_state", - "billing_postcode", - "billing_country", "website", + # Business Information + "industry", + "number_of_employees", + "annual_revenue", + # Address + "address_line", + "city", + "state", + "postcode", + "country", + # Assignment + "assigned_to", + "teams", + "contacts", + # Tags + "tags", + # Notes "description", + # Related "account_attachment", + # System "created_by", "created_at", "is_active", - "tags", - "status", - "lead", - "contact_name", - "contacts", - "assigned_to", - "teams", "org", + "created_on_arrow", + "get_team_users", + "get_team_and_assigned_users", + "get_assigned_users_not_in_teams", ) @@ -107,33 +124,44 @@ class AccountReadSerializer(serializers.ModelSerializer): class Meta: model = Account - fields = ["name", "billing_city", "tags"] + fields = ["name", "city", "tags"] + class AccountWriteSerializer(serializers.ModelSerializer): - + class Meta: model = Account - fields = ["name","phone", "email", "billing_address_line","billing_street","billing_city", "billing_state", "billing_postcode","billing_country","contacts", "teams", "assigned_to","tags","account_attachment", "website", "status","lead"] + fields = [ + "name", + "phone", + "email", + "website", + "industry", + "number_of_employees", + "annual_revenue", + "address_line", + "city", + "state", + "postcode", + "country", + "contacts", + "teams", + "assigned_to", + "tags", + "account_attachment", + "description", + ] class AccountCreateSerializer(serializers.ModelSerializer): - def __init__(self, *args, **kwargs): - account_view = kwargs.pop("account", False) - request_obj = kwargs.pop("request_obj", None) - super().__init__(*args, **kwargs) - self.fields["status"].required = False - if account_view: - self.fields["billing_address_line"].required = True - self.fields["billing_street"].required = True - self.fields["billing_city"].required = True - self.fields["billing_state"].required = True - self.fields["billing_postcode"].required = True - self.fields["billing_country"].required = True + """Serializer for creating/updating Account data""" - if self.instance: - self.fields["lead"].required = False - self.fields["lead"].required = False - self.org = request_obj.profile.org + def __init__(self, *args, **kwargs): + request_obj = kwargs.pop("request_obj", None) + kwargs.pop("account", None) # Remove unused 'account' parameter passed by views + super().__init__(*args, **kwargs) + if request_obj: + self.org = request_obj.profile.org def validate_name(self, name): if self.instance: @@ -151,31 +179,44 @@ class AccountCreateSerializer(serializers.ModelSerializer): class Meta: model = Account fields = ( + # Core Account Information "name", - "phone", "email", + "phone", "website", + # Business Information "industry", + "number_of_employees", + "annual_revenue", + # Address + "address_line", + "city", + "state", + "postcode", + "country", + # Notes "description", - "status", - "billing_address_line", - "billing_street", - "billing_city", - "billing_state", - "billing_postcode", - "billing_country", - "lead", - "contact_name", ) + class AccountDetailEditSwaggerSerializer(serializers.Serializer): comment = serializers.CharField() account_attachment = serializers.FileField() + class AccountCommentEditSwaggerSerializer(serializers.Serializer): comment = serializers.CharField() + class EmailWriteSerializer(serializers.ModelSerializer): class Meta: model = AccountEmail - fields = ("from_email", "recipients", "message_subject","scheduled_later","timezone","scheduled_date_time","message_body") \ No newline at end of file + fields = ( + "from_email", + "recipients", + "message_subject", + "scheduled_later", + "timezone", + "scheduled_date_time", + "message_body", + ) diff --git a/accounts/swagger_params1.py b/backend/accounts/swagger_params.py similarity index 99% rename from accounts/swagger_params1.py rename to backend/accounts/swagger_params.py index 297e81dd..91714642 100644 --- a/accounts/swagger_params1.py +++ b/backend/accounts/swagger_params.py @@ -15,5 +15,3 @@ account_get_params = [ OpenApiParameter("city", OpenApiTypes.STR, OpenApiParameter.QUERY), OpenApiParameter("tags", OpenApiTypes.STR, OpenApiParameter.QUERY), ] - - diff --git a/accounts/tasks.py b/backend/accounts/tasks.py similarity index 89% rename from accounts/tasks.py rename to backend/accounts/tasks.py index 8834beb5..5dea1ef1 100644 --- a/accounts/tasks.py +++ b/backend/accounts/tasks.py @@ -26,14 +26,16 @@ def send_email(email_obj_id): ).exists(): html = email_obj.message_body context_data = { - "email": contact_obj.primary_email - if contact_obj.primary_email - else "", - "name": contact_obj.first_name - if contact_obj.first_name - else "" + " " + contact_obj.last_name - if contact_obj.last_name - else "", + "email": contact_obj.email if contact_obj.email else "", + "name": ( + contact_obj.first_name + if contact_obj.first_name + else ( + "" + " " + contact_obj.last_name + if contact_obj.last_name + else "" + ) + ), } try: html_content = Template(html).render(Context(context_data)) @@ -43,7 +45,7 @@ def send_email(email_obj_id): html_content, from_email=from_email, to=[ - contact_obj.primary_email, + contact_obj.email, ], ) msg.content_subtype = "html" diff --git a/accounts/tests_celery_tasks.py b/backend/accounts/tests_celery_tasks.py similarity index 100% rename from accounts/tests_celery_tasks.py rename to backend/accounts/tests_celery_tasks.py diff --git a/accounts/urls.py b/backend/accounts/urls.py similarity index 100% rename from accounts/urls.py rename to backend/accounts/urls.py diff --git a/accounts/views.py b/backend/accounts/views.py similarity index 79% rename from accounts/views.py rename to backend/accounts/views.py index c8b90889..2ddee10b 100644 --- a/accounts/views.py +++ b/backend/accounts/views.py @@ -1,43 +1,39 @@ import json +from django.contrib.contenttypes.models import ContentType from django.db.models import Q from django.shortcuts import get_object_or_404 - -from drf_rw_serializers import generics - from drf_spectacular.utils import OpenApiExample, OpenApiParameter, extend_schema from rest_framework import status +from rest_framework.generics import GenericAPIView from rest_framework.pagination import LimitOffsetPagination from rest_framework.permissions import IsAuthenticated from rest_framework.response import Response from rest_framework.views import APIView -from rest_framework.generics import GenericAPIView -from accounts import swagger_params1 -from accounts.models import Account, Tags +from accounts import swagger_params +from accounts.models import Account from accounts.serializer import ( - AccountCreateSerializer, - AccountSerializer, - EmailSerializer, - TagsSerailizer, - AccountReadSerializer, - AccountWriteSerializer, - AccountDetailEditSwaggerSerializer, AccountCommentEditSwaggerSerializer, - EmailWriteSerializer + AccountCreateSerializer, + AccountDetailEditSwaggerSerializer, + AccountReadSerializer, + AccountSerializer, + AccountWriteSerializer, + EmailSerializer, + EmailWriteSerializer, + TagsSerailizer, ) -from teams.serializer import TeamsSerializer from accounts.tasks import send_email, send_email_to_assigned_user from cases.serializer import CaseSerializer -from common.models import Attachments, Comment, Profile -from leads.models import Lead -from leads.serializer import LeadSerializer +from common.models import Attachments, Comment, Profile, Tags, Teams -#from common.external_auth import CustomDualAuthentication +# from common.external_auth import CustomDualAuthentication from common.serializer import ( AttachmentsSerializer, CommentSerializer, ProfileSerializer, + TeamsSerializer, ) from common.utils import ( CASE_TYPE, @@ -50,71 +46,79 @@ from common.utils import ( from contacts.models import Contact from contacts.serializer import ContactSerializer from invoices.serializer import InvoiceSerailizer +from leads.models import Lead +from leads.serializer import LeadSerializer from opportunity.models import SOURCES, STAGES, Opportunity from opportunity.serializer import OpportunitySerializer from tasks.serializer import TaskSerializer -from teams.models import Teams class AccountsListView(APIView, LimitOffsetPagination): - #authentication_classes = (CustomDualAuthentication,) + # authentication_classes = (CustomDualAuthentication,) permission_classes = (IsAuthenticated,) model = Account serializer_class = AccountReadSerializer def get_context_data(self, **kwargs): params = self.request.query_params - queryset = self.model.objects.filter(org=self.request.profile.org).order_by("-id") + queryset = self.model.objects.filter(org=self.request.profile.org).order_by( + "-id" + ) if self.request.profile.role != "ADMIN" and not self.request.profile.is_admin: queryset = queryset.filter( - Q(created_by=self.request.profile.user) | Q(assigned_to=self.request.profile) + Q(created_by=self.request.profile.user) + | Q(assigned_to=self.request.profile) ).distinct() if params: if params.get("name"): queryset = queryset.filter(name__icontains=params.get("name")) if params.get("city"): - queryset = queryset.filter(billing_city__contains=params.get("city")) + queryset = queryset.filter(city__icontains=params.get("city")) if params.get("industry"): queryset = queryset.filter(industry__icontains=params.get("industry")) if params.get("tags"): - queryset = queryset.filter( - tags__in=params.get("tags") - ).distinct() + queryset = queryset.filter(tags__in=params.get("tags")).distinct() context = {} - queryset_open = queryset.filter(status="open") - results_accounts_open = self.paginate_queryset( - queryset_open.distinct(), self.request, view=self + + # Account model no longer has status field, return all accounts + # Filter by is_active instead + queryset_active = queryset.filter(is_active=True) + results_accounts_active = self.paginate_queryset( + queryset_active.distinct(), self.request, view=self ) - if results_accounts_open: - offset = queryset_open.filter(id__gte=results_accounts_open[-1].id).count() - if offset == queryset_open.count(): + if results_accounts_active: + offset = queryset_active.filter( + id__gte=results_accounts_active[-1].id + ).count() + if offset == queryset_active.count(): offset = None else: offset = 0 - accounts_open = AccountSerializer(results_accounts_open, many=True).data + accounts_active = AccountSerializer(results_accounts_active, many=True).data context["per_page"] = 10 page_number = (int(self.offset / 10) + 1,) context["page_number"] = page_number context["active_accounts"] = { "offset": offset, - "open_accounts": accounts_open, + "open_accounts": accounts_active, } - queryset_close = queryset.filter(status="close") - results_accounts_close = self.paginate_queryset( - queryset_close.distinct(), self.request, view=self + # Inactive accounts + queryset_inactive = queryset.filter(is_active=False) + results_accounts_inactive = self.paginate_queryset( + queryset_inactive.distinct(), self.request, view=self ) - if results_accounts_close: - offset = queryset_close.filter( - id__gte=results_accounts_close[-1].id + if results_accounts_inactive: + offset = queryset_inactive.filter( + id__gte=results_accounts_inactive[-1].id ).count() - if offset == queryset_close.count(): + if offset == queryset_inactive.count(): offset = None else: offset = 0 - accounts_close = AccountSerializer(results_accounts_close, many=True).data + accounts_inactive = AccountSerializer(results_accounts_inactive, many=True).data contacts = Contact.objects.filter(org=self.request.profile.org).values( "id", "first_name" @@ -122,7 +126,7 @@ class AccountsListView(APIView, LimitOffsetPagination): context["contacts"] = contacts context["closed_accounts"] = { "offset": offset, - "close_accounts": accounts_close, + "close_accounts": accounts_inactive, } context["teams"] = TeamsSerializer( Teams.objects.filter(org=self.request.profile.org), many=True @@ -130,28 +134,32 @@ class AccountsListView(APIView, LimitOffsetPagination): context["countries"] = COUNTRIES context["industries"] = INDCHOICES - tags = Tags.objects.all() + tags = Tags.objects.filter(org=self.request.profile.org) tags = TagsSerailizer(tags, many=True).data context["tags"] = tags - users = Profile.objects.filter(is_active=True, org=self.request.profile.org).values( - "id", "user__email" - ) + users = Profile.objects.filter( + is_active=True, org=self.request.profile.org + ).values("id", "user__email") context["users"] = users leads = Lead.objects.filter(org=self.request.profile.org).exclude( Q(status="converted") | Q(status="closed") ) context["users"] = users context["leads"] = LeadSerializer(leads, many=True).data - context["status"] = ["open","close"] + context["status"] = ["active", "inactive"] # Maps to is_active field return context - @extend_schema(tags=["Accounts"], parameters=swagger_params1.account_get_params) + @extend_schema(tags=["Accounts"], parameters=swagger_params.account_get_params) def get(self, request, *args, **kwargs): context = self.get_context_data(**kwargs) return Response(context) - @extend_schema(tags=["Accounts"], parameters=swagger_params1.organization_params,request=AccountWriteSerializer) + @extend_schema( + tags=["Accounts"], + parameters=swagger_params.organization_params, + request=AccountWriteSerializer, + ) def post(self, request, *args, **kwargs): data = request.data serializer = AccountCreateSerializer( @@ -159,12 +167,12 @@ class AccountsListView(APIView, LimitOffsetPagination): ) # Save Account if serializer.is_valid(): - account_object = serializer.save( - org=request.profile.org - ) + account_object = serializer.save(org=request.profile.org) if data.get("contacts"): contacts_list = json.loads(data.get("contacts")) - contacts = Contact.objects.filter(id__in=contacts_list, org=request.profile.org) + contacts = Contact.objects.filter( + id__in=contacts_list, org=request.profile.org + ) if contacts: account_object.contacts.add(*contacts) if data.get("tags"): @@ -215,14 +223,18 @@ class AccountsListView(APIView, LimitOffsetPagination): class AccountDetailView(APIView): - #authentication_classes = (CustomDualAuthentication,) + # authentication_classes = (CustomDualAuthentication,) permission_classes = (IsAuthenticated,) serializer_class = AccountReadSerializer def get_object(self, pk): - return get_object_or_404(Account, id=pk) + return get_object_or_404(Account, id=pk, org=self.request.profile.org) - @extend_schema(tags=["Accounts"], parameters=swagger_params1.organization_params,request=AccountWriteSerializer) + @extend_schema( + tags=["Accounts"], + parameters=swagger_params.organization_params, + request=AccountWriteSerializer, + ) def put(self, request, pk, format=None): data = request.data account_object = self.get_object(pk=pk) @@ -259,7 +271,9 @@ class AccountDetailView(APIView): account_object.contacts.clear() if data.get("contacts"): contacts_list = json.loads(data.get("contacts")) - contacts = Contact.objects.filter(id__in=contacts_list, org=request.profile.org) + contacts = Contact.objects.filter( + id__in=contacts_list, org=request.profile.org + ) if contacts: account_object.contacts.add(*contacts) @@ -315,7 +329,7 @@ class AccountDetailView(APIView): status=status.HTTP_400_BAD_REQUEST, ) - @extend_schema(tags=["Accounts"], parameters=swagger_params1.organization_params) + @extend_schema(tags=["Accounts"], parameters=swagger_params.organization_params) def delete(self, request, pk, format=None): self.object = self.get_object(pk) if self.object.org != request.profile.org: @@ -338,7 +352,7 @@ class AccountDetailView(APIView): status=status.HTTP_200_OK, ) - @extend_schema(tags=["Accounts"], parameters=swagger_params1.organization_params) + @extend_schema(tags=["Accounts"], parameters=swagger_params.organization_params) def get(self, request, pk, format=None): self.account = self.get_object(pk=pk) if self.account.org != request.profile.org: @@ -371,9 +385,9 @@ class AccountDetailView(APIView): if self.request.profile.is_admin or self.request.profile.role == "ADMIN": users_mention = list( - Profile.objects.filter(is_active=True, org=self.request.profile.org).values( - "user__email" - ) + Profile.objects.filter( + is_active=True, org=self.request.profile.org + ).values("user__email") ) elif self.request.profile != self.account.created_by: if self.account.created_by: @@ -385,14 +399,21 @@ class AccountDetailView(APIView): leads = Lead.objects.filter(org=self.request.profile.org).exclude( Q(status="converted") | Q(status="closed") ) + account_content_type = ContentType.objects.get_for_model(Account) + comments = Comment.objects.filter( + content_type=account_content_type, + object_id=self.account.id, + org=self.request.profile.org, + ).order_by("-id") + attachments = Attachments.objects.filter( + content_type=account_content_type, + object_id=self.account.id, + org=self.request.profile.org, + ).order_by("-id") context.update( { - "attachments": AttachmentsSerializer( - self.account.account_attachment.all(), many=True - ).data, - "comments": CommentSerializer( - self.account.accounts_comments.all(), many=True - ).data, + "attachments": AttachmentsSerializer(attachments, many=True).data, + "comments": CommentSerializer(comments, many=True).data, "contacts": ContactSerializer( self.account.contacts.all(), many=True ).data, @@ -408,7 +429,7 @@ class AccountDetailView(APIView): "cases": CaseSerializer( self.account.accounts_cases.all(), many=True ).data, - "teams" : TeamsSerializer( + "teams": TeamsSerializer( Teams.objects.filter(org=self.request.profile.org), many=True ).data, "stages": STAGES, @@ -429,19 +450,21 @@ class AccountDetailView(APIView): self.account.sent_email.all(), many=True ).data, "users_mention": users_mention, - "leads" : LeadSerializer(leads, many=True).data, - "status" : ["open","close"] + "leads": LeadSerializer(leads, many=True).data, + "status": ["open", "close"], } ) return Response(context) @extend_schema( - tags=["Accounts"], parameters=swagger_params1.organization_params,request=AccountDetailEditSwaggerSerializer + tags=["Accounts"], + parameters=swagger_params.organization_params, + request=AccountDetailEditSwaggerSerializer, ) def post(self, request, pk, **kwargs): data = request.data context = {} - self.account_obj = Account.objects.get(pk=pk) + self.account_obj = Account.objects.get(pk=pk, org=request.profile.org) if self.account_obj.org != request.profile.org: return Response( { @@ -478,11 +501,16 @@ class AccountDetailView(APIView): attachment.attachment = self.request.FILES.get("account_attachment") attachment.save() - comments = Comment.objects.filter(account__id=self.account_obj.id).order_by( - "-id" - ) + account_content_type = ContentType.objects.get_for_model(Account) + comments = Comment.objects.filter( + content_type=account_content_type, + object_id=self.account_obj.id, + org=request.profile.org, + ).order_by("-id") attachments = Attachments.objects.filter( - account__id=self.account_obj.id + content_type=account_content_type, + object_id=self.account_obj.id, + org=request.profile.org, ).order_by("-id") context.update( { @@ -496,15 +524,17 @@ class AccountDetailView(APIView): class AccountCommentView(APIView): model = Comment - #authentication_classes = (CustomDualAuthentication,) + # authentication_classes = (CustomDualAuthentication,) permission_classes = (IsAuthenticated,) serializer_class = AccountCommentEditSwaggerSerializer def get_object(self, pk): - return self.model.objects.get(pk=pk) + return self.model.objects.get(pk=pk, org=self.request.profile.org) @extend_schema( - tags=["Accounts"], parameters=swagger_params1.organization_params,request=AccountCommentEditSwaggerSerializer + tags=["Accounts"], + parameters=swagger_params.organization_params, + request=AccountCommentEditSwaggerSerializer, ) def put(self, request, pk, format=None): data = request.data @@ -534,7 +564,7 @@ class AccountCommentView(APIView): status=status.HTTP_403_FORBIDDEN, ) - @extend_schema(tags=["Accounts"], parameters=swagger_params1.organization_params) + @extend_schema(tags=["Accounts"], parameters=swagger_params.organization_params) def delete(self, request, pk, format=None): self.object = self.get_object(pk) if ( @@ -558,11 +588,11 @@ class AccountCommentView(APIView): class AccountAttachmentView(APIView): model = Attachments - #authentication_classes = (CustomDualAuthentication,) + # authentication_classes = (CustomDualAuthentication,) permission_classes = (IsAuthenticated,) serializer_class = AccountDetailEditSwaggerSerializer - @extend_schema(tags=["Accounts"], parameters=swagger_params1.organization_params) + @extend_schema(tags=["Accounts"], parameters=swagger_params.organization_params) def delete(self, request, pk, format=None): self.object = self.model.objects.get(pk=pk) if ( @@ -585,12 +615,16 @@ class AccountAttachmentView(APIView): class AccountCreateMailView(APIView): - #authentication_classes = (CustomDualAuthentication,) + # authentication_classes = (CustomDualAuthentication,) permission_classes = (IsAuthenticated,) model = Account serializer_class = EmailWriteSerializer - @extend_schema(tags=["Accounts"], parameters=swagger_params1.organization_params,request=EmailWriteSerializer) + @extend_schema( + tags=["Accounts"], + parameters=swagger_params.organization_params, + request=EmailWriteSerializer, + ) def post(self, request, pk, *args, **kwargs): data = request.data scheduled_later = data.get("scheduled_later") @@ -614,7 +648,9 @@ class AccountCreateMailView(APIView): if data.get("recipients"): contacts = json.loads(data.get("recipients")) for contact in contacts: - obj_contact = Contact.objects.filter(id=contact, org=request.profile.org) + obj_contact = Contact.objects.filter( + id=contact, org=request.profile.org + ) if obj_contact.exists(): email_obj.recipients.add(contact) else: diff --git a/cases/__init__.py b/backend/cases/__init__.py similarity index 100% rename from cases/__init__.py rename to backend/cases/__init__.py diff --git a/cases/apps.py b/backend/cases/apps.py similarity index 100% rename from cases/apps.py rename to backend/cases/apps.py diff --git a/backend/cases/migrations/0001_initial.py b/backend/cases/migrations/0001_initial.py new file mode 100644 index 00000000..10a0a713 --- /dev/null +++ b/backend/cases/migrations/0001_initial.py @@ -0,0 +1,151 @@ +# Generated by Django 5.2.8 on 2025-11-27 12:17 + +import uuid + +import django.db.models.deletion +from django.db import migrations, models + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ("accounts", "0001_initial"), + ] + + operations = [ + migrations.CreateModel( + name="Solution", + fields=[ + ( + "created_at", + models.DateTimeField(auto_now_add=True, verbose_name="Created At"), + ), + ( + "updated_at", + models.DateTimeField( + auto_now=True, verbose_name="Last Modified At" + ), + ), + ( + "id", + models.UUIDField( + db_index=True, + default=uuid.uuid4, + editable=False, + primary_key=True, + serialize=False, + unique=True, + ), + ), + ("title", models.CharField(max_length=255)), + ("description", models.TextField()), + ( + "status", + models.CharField( + choices=[ + ("draft", "Draft"), + ("reviewed", "Reviewed"), + ("approved", "Approved"), + ], + default="draft", + max_length=20, + ), + ), + ("is_published", models.BooleanField(default=False)), + ], + options={ + "verbose_name": "Solution", + "verbose_name_plural": "Solutions", + "db_table": "solution", + "ordering": ("-created_at",), + }, + ), + migrations.CreateModel( + name="Case", + fields=[ + ( + "created_at", + models.DateTimeField(auto_now_add=True, verbose_name="Created At"), + ), + ( + "updated_at", + models.DateTimeField( + auto_now=True, verbose_name="Last Modified At" + ), + ), + ( + "id", + models.UUIDField( + db_index=True, + default=uuid.uuid4, + editable=False, + primary_key=True, + serialize=False, + unique=True, + ), + ), + ("name", models.CharField(max_length=64, verbose_name="Name")), + ( + "status", + models.CharField( + choices=[ + ("New", "New"), + ("Assigned", "Assigned"), + ("Pending", "Pending"), + ("Closed", "Closed"), + ("Rejected", "Rejected"), + ("Duplicate", "Duplicate"), + ], + max_length=64, + ), + ), + ( + "priority", + models.CharField( + choices=[ + ("Low", "Low"), + ("Normal", "Normal"), + ("High", "High"), + ("Urgent", "Urgent"), + ], + max_length=64, + ), + ), + ( + "case_type", + models.CharField( + blank=True, + choices=[ + ("Question", "Question"), + ("Incident", "Incident"), + ("Problem", "Problem"), + ], + default="", + max_length=255, + null=True, + ), + ), + ("closed_on", models.DateField(blank=True, null=True)), + ("description", models.TextField(blank=True, null=True)), + ("is_active", models.BooleanField(default=True)), + ( + "account", + models.ForeignKey( + blank=True, + null=True, + on_delete=django.db.models.deletion.CASCADE, + related_name="accounts_cases", + to="accounts.account", + ), + ), + ], + options={ + "verbose_name": "Case", + "verbose_name_plural": "Cases", + "db_table": "case", + "ordering": ("-created_at",), + }, + ), + ] diff --git a/backend/cases/migrations/0002_initial.py b/backend/cases/migrations/0002_initial.py new file mode 100644 index 00000000..cdb26a7f --- /dev/null +++ b/backend/cases/migrations/0002_initial.py @@ -0,0 +1,134 @@ +# Generated by Django 5.2.8 on 2025-11-27 12:17 + +import django.db.models.deletion +from django.conf import settings +from django.db import migrations, models + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ("cases", "0001_initial"), + ("common", "0001_initial"), + ("contacts", "0001_initial"), + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ] + + operations = [ + migrations.AddField( + model_name="case", + name="assigned_to", + field=models.ManyToManyField( + related_name="case_assigned_users", to="common.profile" + ), + ), + migrations.AddField( + model_name="case", + name="contacts", + field=models.ManyToManyField(to="contacts.contact"), + ), + migrations.AddField( + model_name="case", + name="created_by", + field=models.ForeignKey( + null=True, + on_delete=django.db.models.deletion.SET_NULL, + related_name="%(class)s_created_by", + to=settings.AUTH_USER_MODEL, + verbose_name="Created By", + ), + ), + migrations.AddField( + model_name="case", + name="org", + field=models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, + related_name="cases", + to="common.org", + ), + ), + migrations.AddField( + model_name="case", + name="teams", + field=models.ManyToManyField(related_name="cases_teams", to="common.teams"), + ), + migrations.AddField( + model_name="case", + name="updated_by", + field=models.ForeignKey( + null=True, + on_delete=django.db.models.deletion.SET_NULL, + related_name="%(class)s_updated_by", + to=settings.AUTH_USER_MODEL, + verbose_name="Last Modified By", + ), + ), + migrations.AddField( + model_name="solution", + name="cases", + field=models.ManyToManyField( + blank=True, related_name="solutions", to="cases.case" + ), + ), + migrations.AddField( + model_name="solution", + name="created_by", + field=models.ForeignKey( + null=True, + on_delete=django.db.models.deletion.SET_NULL, + related_name="%(class)s_created_by", + to=settings.AUTH_USER_MODEL, + verbose_name="Created By", + ), + ), + migrations.AddField( + model_name="solution", + name="org", + field=models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, + related_name="solutions", + to="common.org", + ), + ), + migrations.AddField( + model_name="solution", + name="updated_by", + field=models.ForeignKey( + null=True, + on_delete=django.db.models.deletion.SET_NULL, + related_name="%(class)s_updated_by", + to=settings.AUTH_USER_MODEL, + verbose_name="Last Modified By", + ), + ), + migrations.AddIndex( + model_name="case", + index=models.Index(fields=["status"], name="case_status_deb121_idx"), + ), + migrations.AddIndex( + model_name="case", + index=models.Index(fields=["priority"], name="case_priorit_bccbdf_idx"), + ), + migrations.AddIndex( + model_name="case", + index=models.Index( + fields=["org", "-created_at"], name="case_org_id_9c4eb6_idx" + ), + ), + migrations.AddIndex( + model_name="solution", + index=models.Index(fields=["status"], name="solution_status_c9b160_idx"), + ), + migrations.AddIndex( + model_name="solution", + index=models.Index( + fields=["is_published"], name="solution_is_publ_2f7331_idx" + ), + ), + migrations.AddIndex( + model_name="solution", + index=models.Index(fields=["org"], name="solution_org_id_577c5c_idx"), + ), + ] diff --git a/cases/migrations/__init__.py b/backend/cases/migrations/__init__.py similarity index 100% rename from cases/migrations/__init__.py rename to backend/cases/migrations/__init__.py diff --git a/backend/cases/models.py b/backend/cases/models.py new file mode 100644 index 00000000..a46df4ae --- /dev/null +++ b/backend/cases/models.py @@ -0,0 +1,110 @@ +import arrow +from django.db import models +from django.utils.translation import gettext_lazy as _ +from django.utils.translation import pgettext_lazy + +from accounts.models import Account +from common.base import AssignableMixin, BaseModel +from common.models import Org, Profile, Teams +from common.utils import CASE_TYPE, PRIORITY_CHOICE, STATUS_CHOICE +from contacts.models import Contact + + +class Case(AssignableMixin, BaseModel): + name = models.CharField(pgettext_lazy("Name of the case", "Name"), max_length=64) + status = models.CharField(choices=STATUS_CHOICE, max_length=64) + priority = models.CharField(choices=PRIORITY_CHOICE, max_length=64) + case_type = models.CharField( + choices=CASE_TYPE, max_length=255, blank=True, null=True, default="" + ) + account = models.ForeignKey( + Account, + on_delete=models.CASCADE, + blank=True, + null=True, + related_name="accounts_cases", + ) + contacts = models.ManyToManyField(Contact) + # closed_on = models.DateTimeField() + closed_on = models.DateField(blank=True, null=True) + description = models.TextField(blank=True, null=True) + assigned_to = models.ManyToManyField(Profile, related_name="case_assigned_users") + # created_by = models.ForeignKey( + # Profile, related_name="case_created_by", on_delete=models.SET_NULL, null=True + # ) + is_active = models.BooleanField(default=True) + teams = models.ManyToManyField(Teams, related_name="cases_teams") + org = models.ForeignKey(Org, on_delete=models.CASCADE, related_name="cases") + + class Meta: + verbose_name = "Case" + verbose_name_plural = "Cases" + db_table = "case" + ordering = ("-created_at",) + indexes = [ + models.Index(fields=["status"]), + models.Index(fields=["priority"]), + models.Index(fields=["org", "-created_at"]), + ] + + def __str__(self): + return f"{self.name}" + + @property + def created_on_arrow(self): + return arrow.get(self.created_at).humanize() + + +class Solution(BaseModel): + """ + Knowledge Base Solution + + Solutions are reusable answers/guides that can be linked to cases. + They form a knowledge base for common issues and their resolutions. + """ + + title = models.CharField(max_length=255) + description = models.TextField() + + STATUS_CHOICES = [ + ("draft", "Draft"), + ("reviewed", "Reviewed"), + ("approved", "Approved"), + ] + status = models.CharField(max_length=20, choices=STATUS_CHOICES, default="draft") + is_published = models.BooleanField(default=False) + + # Organization relation + org = models.ForeignKey(Org, on_delete=models.CASCADE, related_name="solutions") + + # Cases that use this solution + cases = models.ManyToManyField(Case, related_name="solutions", blank=True) + + class Meta: + verbose_name = "Solution" + verbose_name_plural = "Solutions" + db_table = "solution" + ordering = ("-created_at",) + indexes = [ + models.Index(fields=["status"]), + models.Index(fields=["is_published"]), + models.Index(fields=["org"]), + ] + + def __str__(self): + return self.title + + def publish(self): + """Publish the solution (must be approved first)""" + if self.status == "approved": + self.is_published = True + self.save() + + def unpublish(self): + """Unpublish the solution""" + self.is_published = False + self.save() + + @property + def created_on_arrow(self): + return arrow.get(self.created_at).humanize() diff --git a/cases/serializer.py b/backend/cases/serializer.py similarity index 95% rename from cases/serializer.py rename to backend/cases/serializer.py index b0926249..b1b5a1c8 100644 --- a/cases/serializer.py +++ b/backend/cases/serializer.py @@ -2,9 +2,13 @@ from rest_framework import serializers from accounts.serializer import AccountSerializer from cases.models import Case -from common.serializer import OrganizationSerializer, ProfileSerializer,UserSerializer +from common.serializer import ( + OrganizationSerializer, + ProfileSerializer, + TeamsSerializer, + UserSerializer, +) from contacts.serializer import ContactSerializer -from teams.serializer import TeamsSerializer class CaseSerializer(serializers.ModelSerializer): @@ -74,6 +78,7 @@ class CaseCreateSerializer(serializers.ModelSerializer): "created_on_arrow", ) + class CaseCreateSwaggerSerializer(serializers.ModelSerializer): class Meta: model = Case @@ -91,10 +96,11 @@ class CaseCreateSwaggerSerializer(serializers.ModelSerializer): "description", ) + class CaseDetailEditSwaggerSerializer(serializers.Serializer): comment = serializers.CharField() case_attachment = serializers.FileField() + class CaseCommentEditSwaggerSerializer(serializers.Serializer): comment = serializers.CharField() - diff --git a/backend/cases/solution_serializers.py b/backend/cases/solution_serializers.py new file mode 100644 index 00000000..4cf45577 --- /dev/null +++ b/backend/cases/solution_serializers.py @@ -0,0 +1,94 @@ +""" +Solution (Knowledge Base) Serializers +""" + +from rest_framework import serializers + +from cases.models import Case, Solution +from common.serializer import OrganizationSerializer + + +class SolutionSerializer(serializers.ModelSerializer): + """Serializer for Solution model""" + + org = OrganizationSerializer(read_only=True) + case_count = serializers.SerializerMethodField() + + class Meta: + model = Solution + fields = [ + "id", + "title", + "description", + "status", + "is_published", + "org", + "case_count", + "created_at", + "updated_at", + "created_by", + "updated_by", + ] + read_only_fields = [ + "id", + "org", + "created_at", + "updated_at", + "created_by", + "updated_by", + ] + + def get_case_count(self, obj): + """Get number of cases using this solution""" + return obj.cases.count() + + +class SolutionCreateUpdateSerializer(serializers.ModelSerializer): + """Serializer for creating/updating solutions""" + + class Meta: + model = Solution + fields = [ + "title", + "description", + "status", + "is_published", + ] + + def validate_is_published(self, value): + """Only approved solutions can be published""" + if value and self.instance: + if self.instance.status != "approved": + raise serializers.ValidationError( + "Only approved solutions can be published. Please set status to 'approved' first." + ) + return value + + +class SolutionDetailSerializer(serializers.ModelSerializer): + """Detailed serializer for solution with linked cases""" + + org = OrganizationSerializer(read_only=True) + linked_cases = serializers.SerializerMethodField() + + class Meta: + model = Solution + fields = [ + "id", + "title", + "description", + "status", + "is_published", + "org", + "linked_cases", + "created_at", + "updated_at", + "created_by", + "updated_by", + ] + + def get_linked_cases(self, obj): + """Get cases that use this solution""" + from cases.serializer import CaseSerializer + + return CaseSerializer(obj.cases.all()[:10], many=True).data diff --git a/backend/cases/solution_views.py b/backend/cases/solution_views.py new file mode 100644 index 00000000..b6e97067 --- /dev/null +++ b/backend/cases/solution_views.py @@ -0,0 +1,236 @@ +""" +Solution (Knowledge Base) Views +""" + +from drf_spectacular.utils import OpenApiParameter, extend_schema +from rest_framework import status +from rest_framework.pagination import LimitOffsetPagination +from rest_framework.permissions import IsAuthenticated +from rest_framework.response import Response +from rest_framework.views import APIView + +from cases.models import Solution +from cases.solution_serializers import ( + SolutionCreateUpdateSerializer, + SolutionDetailSerializer, + SolutionSerializer, +) + + +class SolutionListView(APIView, LimitOffsetPagination): + """ + List and create solutions (Knowledge Base) + """ + + permission_classes = [IsAuthenticated] + + @extend_schema( + tags=["Solutions (Knowledge Base)"], + description="List all solutions with filters", + parameters=[ + OpenApiParameter( + "status", str, description="Filter by status (draft/reviewed/approved)" + ), + OpenApiParameter( + "is_published", bool, description="Filter by published status" + ), + OpenApiParameter( + "search", str, description="Search in title and description" + ), + ], + responses={200: SolutionSerializer(many=True)}, + ) + def get(self, request): + """List solutions with filters""" + queryset = Solution.objects.filter(org=request.profile.org).order_by( + "-created_at" + ) + + # Filters + status_filter = request.query_params.get("status") + is_published = request.query_params.get("is_published") + search = request.query_params.get("search") + + if status_filter: + queryset = queryset.filter(status=status_filter) + + if is_published is not None: + queryset = queryset.filter(is_published=is_published.lower() == "true") + + if search: + queryset = queryset.filter(title__icontains=search) | queryset.filter( + description__icontains=search + ) + + # Paginate + results = self.paginate_queryset(queryset, request, view=self) + serializer = SolutionSerializer(results, many=True) + + return self.get_paginated_response(serializer.data) + + @extend_schema( + tags=["Solutions (Knowledge Base)"], + description="Create a new solution", + request=SolutionCreateUpdateSerializer, + responses={201: SolutionSerializer}, + ) + def post(self, request): + """Create a new solution""" + serializer = SolutionCreateUpdateSerializer(data=request.data) + + if serializer.is_valid(): + solution = serializer.save(org=request.profile.org, created_by=request.user) + + response_serializer = SolutionSerializer(solution) + return Response(response_serializer.data, status=status.HTTP_201_CREATED) + + return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST) + + +class SolutionDetailView(APIView): + """ + Get, update, or delete a solution + """ + + permission_classes = [IsAuthenticated] + + @extend_schema( + tags=["Solutions (Knowledge Base)"], + description="Get solution details", + responses={200: SolutionDetailSerializer}, + ) + def get(self, request, pk): + """Get solution details""" + try: + solution = Solution.objects.get(pk=pk, org=request.profile.org) + serializer = SolutionDetailSerializer(solution) + return Response(serializer.data) + except Solution.DoesNotExist: + return Response( + {"error": "Solution not found"}, status=status.HTTP_404_NOT_FOUND + ) + + @extend_schema( + tags=["Solutions (Knowledge Base)"], + description="Update solution", + request=SolutionCreateUpdateSerializer, + responses={200: SolutionSerializer}, + ) + def put(self, request, pk): + """Update solution""" + try: + solution = Solution.objects.get(pk=pk, org=request.profile.org) + + serializer = SolutionCreateUpdateSerializer(solution, data=request.data) + if serializer.is_valid(): + solution = serializer.save(updated_by=request.user) + response_serializer = SolutionSerializer(solution) + return Response(response_serializer.data) + + return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST) + except Solution.DoesNotExist: + return Response( + {"error": "Solution not found"}, status=status.HTTP_404_NOT_FOUND + ) + + @extend_schema( + tags=["Solutions (Knowledge Base)"], + description="Partially update solution", + request=SolutionCreateUpdateSerializer, + responses={200: SolutionSerializer}, + ) + def patch(self, request, pk): + """Partially update solution""" + try: + solution = Solution.objects.get(pk=pk, org=request.profile.org) + + serializer = SolutionCreateUpdateSerializer( + solution, data=request.data, partial=True + ) + if serializer.is_valid(): + solution = serializer.save(updated_by=request.user) + response_serializer = SolutionSerializer(solution) + return Response(response_serializer.data) + + return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST) + except Solution.DoesNotExist: + return Response( + {"error": "Solution not found"}, status=status.HTTP_404_NOT_FOUND + ) + + @extend_schema( + tags=["Solutions (Knowledge Base)"], + description="Delete solution", + responses={204: None}, + ) + def delete(self, request, pk): + """Delete solution""" + try: + solution = Solution.objects.get(pk=pk, org=request.profile.org) + solution.delete() + return Response(status=status.HTTP_204_NO_CONTENT) + except Solution.DoesNotExist: + return Response( + {"error": "Solution not found"}, status=status.HTTP_404_NOT_FOUND + ) + + +class SolutionPublishView(APIView): + """ + Publish or unpublish a solution + """ + + permission_classes = [IsAuthenticated] + + @extend_schema( + tags=["Solutions (Knowledge Base)"], + description="Publish an approved solution", + responses={200: SolutionSerializer}, + ) + def post(self, request, pk): + """Publish solution""" + try: + solution = Solution.objects.get(pk=pk, org=request.profile.org) + + if solution.status != "approved": + return Response( + { + "error": "Only approved solutions can be published. Please approve it first." + }, + status=status.HTTP_400_BAD_REQUEST, + ) + + solution.publish() + serializer = SolutionSerializer(solution) + return Response(serializer.data) + + except Solution.DoesNotExist: + return Response( + {"error": "Solution not found"}, status=status.HTTP_404_NOT_FOUND + ) + + +class SolutionUnpublishView(APIView): + """ + Unpublish a solution + """ + + permission_classes = [IsAuthenticated] + + @extend_schema( + tags=["Solutions (Knowledge Base)"], + description="Unpublish a solution", + responses={200: SolutionSerializer}, + ) + def post(self, request, pk): + """Unpublish solution""" + try: + solution = Solution.objects.get(pk=pk, org=request.profile.org) + solution.unpublish() + serializer = SolutionSerializer(solution) + return Response(serializer.data) + + except Solution.DoesNotExist: + return Response( + {"error": "Solution not found"}, status=status.HTTP_404_NOT_FOUND + ) diff --git a/cases/swagger_params1.py b/backend/cases/swagger_params.py similarity index 58% rename from cases/swagger_params1.py rename to backend/cases/swagger_params.py index 13b1dc67..4380edaf 100644 --- a/cases/swagger_params1.py +++ b/backend/cases/swagger_params.py @@ -11,8 +11,8 @@ organization_params = [ cases_list_get_params = [ organization_params_in_header, - OpenApiParameter("name", OpenApiTypes.STR,OpenApiParameter.QUERY), - OpenApiParameter("status", OpenApiTypes.STR,OpenApiParameter.QUERY), - OpenApiParameter("priority", OpenApiTypes.STR,OpenApiParameter.QUERY), - OpenApiParameter("account", OpenApiTypes.STR,OpenApiParameter.QUERY), + OpenApiParameter("name", OpenApiTypes.STR, OpenApiParameter.QUERY), + OpenApiParameter("status", OpenApiTypes.STR, OpenApiParameter.QUERY), + OpenApiParameter("priority", OpenApiTypes.STR, OpenApiParameter.QUERY), + OpenApiParameter("account", OpenApiTypes.STR, OpenApiParameter.QUERY), ] diff --git a/cases/tasks.py b/backend/cases/tasks.py similarity index 100% rename from cases/tasks.py rename to backend/cases/tasks.py diff --git a/cases/tests_celery_tasks.py b/backend/cases/tests_celery_tasks.py similarity index 100% rename from cases/tests_celery_tasks.py rename to backend/cases/tests_celery_tasks.py diff --git a/backend/cases/urls.py b/backend/cases/urls.py new file mode 100644 index 00000000..42430090 --- /dev/null +++ b/backend/cases/urls.py @@ -0,0 +1,32 @@ +from django.urls import path + +from cases import solution_views, views + +app_name = "api_cases" + +urlpatterns = [ + # Cases endpoints + path("", views.CaseListView.as_view()), + path("/", views.CaseDetailView.as_view()), + path("comment//", views.CaseCommentView.as_view()), + path("attachment//", views.CaseAttachmentView.as_view()), + # Solutions (Knowledge Base) endpoints + path( + "solutions/", solution_views.SolutionListView.as_view(), name="solutions_list" + ), + path( + "solutions//", + solution_views.SolutionDetailView.as_view(), + name="solution_detail", + ), + path( + "solutions//publish/", + solution_views.SolutionPublishView.as_view(), + name="solution_publish", + ), + path( + "solutions//unpublish/", + solution_views.SolutionUnpublishView.as_view(), + name="solution_unpublish", + ), +] diff --git a/cases/views.py b/backend/cases/views.py similarity index 79% rename from cases/views.py rename to backend/cases/views.py index 9d1d1bb9..8b47022a 100644 --- a/cases/views.py +++ b/backend/cases/views.py @@ -1,5 +1,6 @@ import json +from django.contrib.contenttypes.models import ContentType from django.db.models import Q from drf_spectacular.utils import OpenApiExample, OpenApiParameter, extend_schema from rest_framework import status @@ -10,40 +11,50 @@ from rest_framework.views import APIView from accounts.models import Account from accounts.serializer import AccountSerializer -from cases import swagger_params1 +from cases import swagger_params from cases.models import Case -from cases.serializer import CaseCreateSerializer, CaseSerializer,CaseCreateSwaggerSerializer,CaseDetailEditSwaggerSerializer,CaseCommentEditSwaggerSerializer +from cases.serializer import ( + CaseCommentEditSwaggerSerializer, + CaseCreateSerializer, + CaseCreateSwaggerSerializer, + CaseDetailEditSwaggerSerializer, + CaseSerializer, +) from cases.tasks import send_email_to_assigned_user -from common.models import Attachments, Comment, Profile +from common.models import Attachments, Comment, Profile, Teams -#from common.external_auth import CustomDualAuthentication +# from common.external_auth import CustomDualAuthentication from common.serializer import AttachmentsSerializer, CommentSerializer from common.utils import CASE_TYPE, PRIORITY_CHOICE, STATUS_CHOICE from contacts.models import Contact from contacts.serializer import ContactSerializer -from teams.models import Teams class CaseListView(APIView, LimitOffsetPagination): - #authentication_classes = (CustomDualAuthentication,) + # authentication_classes = (CustomDualAuthentication,) permission_classes = (IsAuthenticated,) model = Case def get_context_data(self, **kwargs): params = self.request.query_params - queryset = self.model.objects.filter(org=self.request.profile.org).order_by("-id") + queryset = self.model.objects.filter(org=self.request.profile.org).order_by( + "-id" + ) accounts = Account.objects.filter(org=self.request.profile.org).order_by("-id") contacts = Contact.objects.filter(org=self.request.profile.org).order_by("-id") profiles = Profile.objects.filter(is_active=True, org=self.request.profile.org) if self.request.profile.role != "ADMIN" and not self.request.profile.is_admin: queryset = queryset.filter( - Q(created_by=self.request.profile.user) | Q(assigned_to=self.request.profile) + Q(created_by=self.request.profile.user) + | Q(assigned_to=self.request.profile) ).distinct() accounts = accounts.filter( - Q(created_by=self.request.profile.user) | Q(assigned_to=self.request.profile) + Q(created_by=self.request.profile.user) + | Q(assigned_to=self.request.profile) ).distinct() contacts = contacts.filter( - Q(created_by=self.request.profile.user) | Q(assigned_to=self.request.profile) + Q(created_by=self.request.profile.user) + | Q(assigned_to=self.request.profile) ).distinct() profiles = profiles.filter(role="ADMIN") @@ -82,15 +93,15 @@ class CaseListView(APIView, LimitOffsetPagination): context["contacts_list"] = ContactSerializer(contacts, many=True).data return context - @extend_schema( - tags=["Cases"], parameters=swagger_params1.cases_list_get_params - ) + @extend_schema(tags=["Cases"], parameters=swagger_params.cases_list_get_params) def get(self, request, *args, **kwargs): context = self.get_context_data(**kwargs) return Response(context) @extend_schema( - tags=["Cases"], parameters=swagger_params1.organization_params,request=CaseCreateSwaggerSerializer + tags=["Cases"], + parameters=swagger_params.organization_params, + request=CaseCreateSwaggerSerializer, ) def post(self, request, *args, **kwargs): params = request.data @@ -105,7 +116,9 @@ class CaseListView(APIView, LimitOffsetPagination): if params.get("contacts"): contacts_list = params.get("contacts") - contacts = Contact.objects.filter(id__in=contacts_list, org=request.profile.org) + contacts = Contact.objects.filter( + id__in=contacts_list, org=request.profile.org + ) if contacts: cases_obj.contacts.add(*contacts) @@ -137,7 +150,12 @@ class CaseListView(APIView, LimitOffsetPagination): cases_obj.id, ) return Response( - {"error": False, "message": "Case Created Successfully"}, + { + "error": False, + "message": "Case Created Successfully", + "id": str(cases_obj.id), + "cases_obj": CaseSerializer(cases_obj).data, + }, status=status.HTTP_200_OK, ) @@ -148,15 +166,17 @@ class CaseListView(APIView, LimitOffsetPagination): class CaseDetailView(APIView): - #authentication_classes = (CustomDualAuthentication,) + # authentication_classes = (CustomDualAuthentication,) permission_classes = (IsAuthenticated,) model = Case def get_object(self, pk): - return self.model.objects.filter(id=pk).first() + return self.model.objects.filter(id=pk, org=self.request.profile.org).first() @extend_schema( - tags=["Cases"], parameters=swagger_params1.organization_params,request=CaseCreateSwaggerSerializer + tags=["Cases"], + parameters=swagger_params.organization_params, + request=CaseCreateSwaggerSerializer, ) def put(self, request, pk, format=None): params = request.data @@ -168,7 +188,7 @@ class CaseDetailView(APIView): ) if self.request.profile.role != "ADMIN" and not self.request.profile.is_admin: if not ( - (self.request.profile == cases_object.created_by) + (self.request.profile.user == cases_object.created_by) or (self.request.profile in cases_object.assigned_to.all()) ): return Response( @@ -195,7 +215,9 @@ class CaseDetailView(APIView): cases_object.contacts.clear() if params.get("contacts"): contacts_list = params.get("contacts") - contacts = Contact.objects.filter(id__in=contacts_list, org=request.profile.org) + contacts = Contact.objects.filter( + id__in=contacts_list, org=request.profile.org + ) if contacts: cases_object.contacts.add(*contacts) @@ -240,9 +262,7 @@ class CaseDetailView(APIView): status=status.HTTP_400_BAD_REQUEST, ) - @extend_schema( - tags=["Cases"], parameters=swagger_params1.organization_params - ) + @extend_schema(tags=["Cases"], parameters=swagger_params.organization_params) def delete(self, request, pk, format=None): self.object = self.get_object(pk) if self.object.org != request.profile.org: @@ -265,11 +285,14 @@ class CaseDetailView(APIView): status=status.HTTP_200_OK, ) - @extend_schema( - tags=["Cases"], parameters=swagger_params1.organization_params - ) + @extend_schema(tags=["Cases"], parameters=swagger_params.organization_params) def get(self, request, pk, format=None): self.cases = self.get_object(pk=pk) + if not self.cases: + return Response( + {"error": True, "errors": "Case not found"}, + status=status.HTTP_404_NOT_FOUND, + ) if self.cases.org != request.profile.org: return Response( {"error": True, "errors": "User company doesnot match with header...."}, @@ -279,7 +302,7 @@ class CaseDetailView(APIView): context["cases_obj"] = CaseSerializer(self.cases).data if self.request.profile.role != "ADMIN" and not self.request.profile.is_admin: if not ( - (self.request.profile == self.cases.created_by) + (self.request.profile.user == self.cases.created_by) or (self.request.profile in self.cases.assigned_to.all()) ): return Response( @@ -293,7 +316,7 @@ class CaseDetailView(APIView): comment_permission = False if ( - self.request.profile == self.cases.created_by + self.request.profile.user == self.cases.created_by or self.request.profile.is_admin or self.request.profile.role == "ADMIN" ): @@ -301,9 +324,9 @@ class CaseDetailView(APIView): if self.request.profile.is_admin or self.request.profile.role == "ADMIN": users_mention = list( - Profile.objects.filter(is_active=True, org=self.request.profile.org).values( - "user__email" - ) + Profile.objects.filter( + is_active=True, org=self.request.profile.org + ).values("user__email") ) elif self.request.profile != self.cases.created_by: if self.cases.created_by: @@ -313,8 +336,17 @@ class CaseDetailView(APIView): else: users_mention = [] - attachments = Attachments.objects.filter(case=self.cases).order_by("-id") - comments = Comment.objects.filter(case=self.cases).order_by("-id") + case_content_type = ContentType.objects.get_for_model(Case) + attachments = Attachments.objects.filter( + content_type=case_content_type, + object_id=self.cases.id, + org=self.request.profile.org, + ).order_by("-id") + comments = Comment.objects.filter( + content_type=case_content_type, + object_id=self.cases.id, + org=self.request.profile.org, + ).order_by("-id") context.update( { @@ -333,11 +365,13 @@ class CaseDetailView(APIView): return Response(context) @extend_schema( - tags=["Cases"], parameters=swagger_params1.organization_params,request=CaseDetailEditSwaggerSerializer + tags=["Cases"], + parameters=swagger_params.organization_params, + request=CaseDetailEditSwaggerSerializer, ) def post(self, request, pk, **kwargs): params = request.data - self.cases_obj = Case.objects.get(pk=pk) + self.cases_obj = Case.objects.get(pk=pk, org=request.profile.org) if self.cases_obj.org != request.profile.org: return Response( {"error": True, "errors": "User company doesnot match with header...."}, @@ -347,7 +381,7 @@ class CaseDetailView(APIView): comment_serializer = CommentSerializer(data=params) if self.request.profile.role != "ADMIN" and not self.request.profile.is_admin: if not ( - (self.request.profile == self.cases_obj.created_by) + (self.request.profile.user == self.cases_obj.created_by) or (self.request.profile in self.cases_obj.assigned_to.all()) ): return Response( @@ -372,8 +406,17 @@ class CaseDetailView(APIView): attachment.attachment = self.request.FILES.get("case_attachment") attachment.save() - attachments = Attachments.objects.filter(case=self.cases_obj).order_by("-id") - comments = Comment.objects.filter(case=self.cases_obj).order_by("-id") + case_content_type = ContentType.objects.get_for_model(Case) + attachments = Attachments.objects.filter( + content_type=case_content_type, + object_id=self.cases_obj.id, + org=request.profile.org, + ).order_by("-id") + comments = Comment.objects.filter( + content_type=case_content_type, + object_id=self.cases_obj.id, + org=request.profile.org, + ).order_by("-id") context.update( { @@ -387,14 +430,16 @@ class CaseDetailView(APIView): class CaseCommentView(APIView): model = Comment - #authentication_classes = (CustomDualAuthentication,) + # authentication_classes = (CustomDualAuthentication,) permission_classes = (IsAuthenticated,) def get_object(self, pk): - return self.model.objects.get(pk=pk) + return self.model.objects.get(pk=pk, org=self.request.profile.org) @extend_schema( - tags=["Cases"], parameters=swagger_params1.organization_params,request=CaseCommentEditSwaggerSerializer + tags=["Cases"], + parameters=swagger_params.organization_params, + request=CaseCommentEditSwaggerSerializer, ) def put(self, request, pk, format=None): params = request.data @@ -424,9 +469,7 @@ class CaseCommentView(APIView): status=status.HTTP_403_FORBIDDEN, ) - @extend_schema( - tags=["Cases"], parameters=swagger_params1.organization_params - ) + @extend_schema(tags=["Cases"], parameters=swagger_params.organization_params) def delete(self, request, pk, format=None): self.object = self.get_object(pk) if ( @@ -450,12 +493,10 @@ class CaseCommentView(APIView): class CaseAttachmentView(APIView): model = Attachments - #authentication_classes = (CustomDualAuthentication,) + # authentication_classes = (CustomDualAuthentication,) permission_classes = (IsAuthenticated,) - @extend_schema( - tags=["Cases"], parameters=swagger_params1.organization_params - ) + @extend_schema(tags=["Cases"], parameters=swagger_params.organization_params) def delete(self, request, pk, format=None): self.object = self.model.objects.get(pk=pk) if ( diff --git a/cms/__init__.py b/backend/common/__init__.py similarity index 100% rename from cms/__init__.py rename to backend/common/__init__.py diff --git a/common/access_decorators_mixins.py b/backend/common/access_decorators_mixins.py similarity index 100% rename from common/access_decorators_mixins.py rename to backend/common/access_decorators_mixins.py diff --git a/backend/common/admin.py b/backend/common/admin.py new file mode 100644 index 00000000..2b4118ba --- /dev/null +++ b/backend/common/admin.py @@ -0,0 +1,53 @@ +from django.contrib import admin + +from common.models import Address, Comment, CommentFiles, SessionToken, User + +# Register your models here. + +admin.site.register(User) +admin.site.register(Address) +admin.site.register(Comment) +admin.site.register(CommentFiles) + + +@admin.register(SessionToken) +class SessionTokenAdmin(admin.ModelAdmin): + list_display = ( + "user", + "token_jti_short", + "is_active", + "expires_at", + "last_used_at", + "created_at", + ) + list_filter = ("is_active", "expires_at", "created_at") + search_fields = ("user__email", "token_jti", "ip_address") + raw_id_fields = ("user",) + readonly_fields = ( + "token_jti", + "refresh_token_jti", + "created_at", + "last_used_at", + "revoked_at", + ) + date_hierarchy = "created_at" + ordering = ("-created_at",) + actions = ["revoke_tokens", "cleanup_expired"] + + def token_jti_short(self, obj): + return f"{obj.token_jti[:16]}..." + + token_jti_short.short_description = "Token JTI" + + def revoke_tokens(self, request, queryset): + for token in queryset: + token.revoke() + self.message_user(request, f"{queryset.count()} tokens revoked successfully.") + + revoke_tokens.short_description = "Revoke selected tokens" + + def cleanup_expired(self, request, queryset): + count, _ = SessionToken.cleanup_expired() + self.message_user(request, f"{count} expired tokens cleaned up.") + + cleanup_expired.short_description = "Cleanup expired tokens" diff --git a/common/app_urls/__init__.py b/backend/common/app_urls/__init__.py similarity index 65% rename from common/app_urls/__init__.py rename to backend/common/app_urls/__init__.py index 87267c87..2ef9fd50 100644 --- a/common/app_urls/__init__.py +++ b/backend/common/app_urls/__init__.py @@ -1,5 +1,7 @@ from django.urls import include, path +from tasks.urls import board_urlpatterns + app_name = "common_urls" urlpatterns = [ path("", include(("common.urls"))), @@ -7,8 +9,11 @@ urlpatterns = [ path("contacts/", include("contacts.urls", namespace="api_contacts")), path("leads/", include("leads.urls", namespace="api_leads")), path("opportunities/", include("opportunity.urls", namespace="api_opportunities")), - path("teams/", include("teams.urls", namespace="api_teams")), + # Teams URLs are now in common app at /api/teams/ path("tasks/", include("tasks.urls", namespace="api_tasks")), - path("events/", include("events.urls", namespace="api_events")), path("cases/", include("cases.urls", namespace="api_cases")), + path("invoices/", include("invoices.api_urls", namespace="api_invoices")), + path( + "boards/", include((board_urlpatterns, "api_boards")) + ), # Kanban Boards (merged into tasks app) ] diff --git a/backend/common/apps.py b/backend/common/apps.py new file mode 100644 index 00000000..5447e19c --- /dev/null +++ b/backend/common/apps.py @@ -0,0 +1,9 @@ +from django.apps import AppConfig + + +class CommonConfig(AppConfig): + name = "common" + + def ready(self): + # Import signals to register them + import common.signals # noqa: F401 diff --git a/backend/common/audit_log.py b/backend/common/audit_log.py new file mode 100644 index 00000000..70f69000 --- /dev/null +++ b/backend/common/audit_log.py @@ -0,0 +1,307 @@ +""" +Security Audit Logging for Multi-Tenancy + +Tracks security-relevant events for compliance and incident investigation: +- Login attempts (success/failure) +- Org switches +- Permission denials +- API key usage +- Suspicious activities + +Usage: + from common.audit_log import audit_log + + audit_log.login_success(user, org, request) + audit_log.org_switch(user, from_org, to_org, request) + audit_log.permission_denied(user, org, action, resource, request) +""" + +import logging + +from django.db import models +from django.utils import timezone + +from common.base import BaseModel + +logger = logging.getLogger("security.audit") + + +class SecurityAuditLog(BaseModel): + """ + Model to store security audit events. + + This is separate from Activity model which tracks business operations. + SecurityAuditLog tracks authentication and authorization events. + """ + + EVENT_TYPES = ( + ("LOGIN_SUCCESS", "Login Success"), + ("LOGIN_FAILURE", "Login Failure"), + ("LOGOUT", "Logout"), + ("ORG_SWITCH", "Organization Switch"), + ("TOKEN_REFRESH", "Token Refresh"), + ("TOKEN_REVOKED", "Token Revoked"), + ("PERMISSION_DENIED", "Permission Denied"), + ("CROSS_ORG_ATTEMPT", "Cross-Org Access Attempt"), + ("API_KEY_USED", "API Key Used"), + ("API_KEY_INVALID", "Invalid API Key"), + ("MEMBERSHIP_REVOKED", "Membership Revoked"), + ("SUSPICIOUS_ACTIVITY", "Suspicious Activity"), + ) + + event_type = models.CharField(max_length=50, choices=EVENT_TYPES, db_index=True) + user = models.ForeignKey( + "common.User", + on_delete=models.SET_NULL, + null=True, + blank=True, + related_name="security_audit_logs", + ) + org = models.ForeignKey( + "common.Org", + on_delete=models.SET_NULL, + null=True, + blank=True, + related_name="security_audit_logs", + ) + + # Event details + description = models.TextField(blank=True, default="") + metadata = models.JSONField(default=dict, blank=True) + + # Request information + ip_address = models.GenericIPAddressField(null=True, blank=True) + user_agent = models.TextField(blank=True, default="") + request_path = models.CharField(max_length=500, blank=True, default="") + request_method = models.CharField(max_length=10, blank=True, default="") + + # Outcome + success = models.BooleanField(default=True) + + class Meta: + verbose_name = "Security Audit Log" + verbose_name_plural = "Security Audit Logs" + db_table = "security_audit_log" + ordering = ("-created_at",) + indexes = [ + models.Index(fields=["event_type", "-created_at"]), + models.Index(fields=["user", "-created_at"]), + models.Index(fields=["org", "-created_at"]), + models.Index(fields=["ip_address"]), + models.Index(fields=["success", "-created_at"]), + ] + + def __str__(self): + return f"{self.event_type} - {self.user} - {self.created_at}" + + +class AuditLogger: + """ + Helper class for logging security events. + + Logs to both database (SecurityAuditLog) and Python logger. + """ + + def _get_request_info(self, request): + """Extract request information for logging.""" + if not request: + return {} + + # Get IP address + ip = request.META.get("HTTP_X_FORWARDED_FOR") + if ip: + ip = ip.split(",")[0].strip() + else: + ip = request.META.get("REMOTE_ADDR") + + return { + "ip_address": ip, + "user_agent": request.META.get("HTTP_USER_AGENT", "")[:500], + "request_path": request.path[:500], + "request_method": request.method, + } + + def _log( + self, + event_type, + user=None, + org=None, + description="", + metadata=None, + success=True, + request=None, + ): + """ + Internal method to create audit log entry. + """ + request_info = self._get_request_info(request) + + # Log to database + try: + SecurityAuditLog.objects.create( + event_type=event_type, + user=user, + org=org, + description=description, + metadata=metadata or {}, + success=success, + **request_info, + ) + except Exception as e: + logger.error(f"Failed to create audit log: {e}") + + # Log to Python logger + log_level = logging.INFO if success else logging.WARNING + user_email = user.email if user else "anonymous" + org_name = org.name if org else "none" + + logger.log( + log_level, + f"{event_type} | user={user_email} | org={org_name} | " + f"ip={request_info.get('ip_address')} | {description}", + ) + + def login_success(self, user, org, request=None): + """Log successful login.""" + self._log( + "LOGIN_SUCCESS", + user=user, + org=org, + description=f"User logged in to {org.name if org else 'platform'}", + request=request, + ) + + def login_failure(self, email, reason, request=None): + """Log failed login attempt.""" + from common.models import User + + user = User.objects.filter(email=email).first() + + self._log( + "LOGIN_FAILURE", + user=user, + description=f"Login failed for {email}: {reason}", + metadata={"email": email, "reason": reason}, + success=False, + request=request, + ) + + def logout(self, user, org, request=None): + """Log user logout.""" + self._log( + "LOGOUT", + user=user, + org=org, + description=f"User logged out", + request=request, + ) + + def org_switch(self, user, from_org, to_org, request=None): + """Log organization switch.""" + self._log( + "ORG_SWITCH", + user=user, + org=to_org, + description=f"Switched from {from_org.name if from_org else 'none'} to {to_org.name}", + metadata={ + "from_org_id": str(from_org.id) if from_org else None, + "to_org_id": str(to_org.id), + }, + request=request, + ) + + def token_refresh(self, user, org, request=None): + """Log token refresh.""" + self._log( + "TOKEN_REFRESH", + user=user, + org=org, + description="Token refreshed", + request=request, + ) + + def token_revoked(self, user, org, reason, request=None): + """Log token revocation.""" + self._log( + "TOKEN_REVOKED", + user=user, + org=org, + description=f"Token revoked: {reason}", + metadata={"reason": reason}, + request=request, + ) + + def permission_denied(self, user, org, action, resource, request=None): + """Log permission denial.""" + self._log( + "PERMISSION_DENIED", + user=user, + org=org, + description=f"Permission denied for {action} on {resource}", + metadata={"action": action, "resource": resource}, + success=False, + request=request, + ) + + def cross_org_attempt(self, user, user_org, target_org, resource, request=None): + """Log attempted cross-org data access.""" + self._log( + "CROSS_ORG_ATTEMPT", + user=user, + org=user_org, + description=f"Attempted to access {resource} in org {target_org.name if target_org else 'unknown'}", + metadata={ + "user_org_id": str(user_org.id) if user_org else None, + "target_org_id": str(target_org.id) if target_org else None, + "resource": resource, + }, + success=False, + request=request, + ) + + def api_key_used(self, org, endpoint, request=None): + """Log API key usage.""" + self._log( + "API_KEY_USED", + org=org, + description=f"API key used for {endpoint}", + metadata={"endpoint": endpoint}, + request=request, + ) + + def api_key_invalid(self, api_key_prefix, request=None): + """Log invalid API key attempt.""" + self._log( + "API_KEY_INVALID", + description=f"Invalid API key attempted: {api_key_prefix}...", + metadata={"api_key_prefix": api_key_prefix}, + success=False, + request=request, + ) + + def membership_revoked(self, user, org, revoked_by=None, request=None): + """Log when user's org membership is revoked.""" + self._log( + "MEMBERSHIP_REVOKED", + user=user, + org=org, + description=f"Membership revoked by {revoked_by.email if revoked_by else 'system'}", + metadata={"revoked_by": str(revoked_by.id) if revoked_by else None}, + request=request, + ) + + def suspicious_activity(self, user, org, activity_type, details, request=None): + """Log suspicious activity for security review.""" + self._log( + "SUSPICIOUS_ACTIVITY", + user=user, + org=org, + description=f"Suspicious activity: {activity_type}", + metadata={"activity_type": activity_type, "details": details}, + success=False, + request=request, + ) + + +# Global audit logger instance +audit_log = AuditLogger() diff --git a/backend/common/base.py b/backend/common/base.py new file mode 100644 index 00000000..baaf49ef --- /dev/null +++ b/backend/common/base.py @@ -0,0 +1,153 @@ +import uuid + +# Third party imports +from crum import get_current_user + +# Django imports +from django.db import models + +# Module imports +from common.mixins import AuditModel + + +class AssignableMixin(models.Model): + """ + Mixin for models that have assigned_to (Profile) and teams (Teams) fields. + + Provides helper methods for getting users from teams and assignments. + Models using this mixin must define: + - assigned_to = ManyToManyField(Profile, ...) + - teams = ManyToManyField(Teams, ...) + """ + + class Meta: + abstract = True + + @property + def get_team_users(self): + """Get all users who are members of assigned teams.""" + from common.models import Profile + + team_user_ids = list(self.teams.values_list("users__id", flat=True)) + return Profile.objects.filter(id__in=team_user_ids) + + @property + def get_team_and_assigned_users(self): + """Get all users from both teams and direct assignments.""" + from common.models import Profile + + team_user_ids = list(self.teams.values_list("users__id", flat=True)) + assigned_user_ids = list(self.assigned_to.values_list("id", flat=True)) + user_ids = team_user_ids + assigned_user_ids + return Profile.objects.filter(id__in=user_ids) + + @property + def get_assigned_users_not_in_teams(self): + """Get users who are directly assigned but not part of any assigned team.""" + from common.models import Profile + + team_user_ids = list(self.teams.values_list("users__id", flat=True)) + assigned_user_ids = list(self.assigned_to.values_list("id", flat=True)) + user_ids = set(assigned_user_ids) - set(team_user_ids) + return Profile.objects.filter(id__in=list(user_ids)) + + +class BaseModel(AuditModel): + id = models.UUIDField( + default=uuid.uuid4, unique=True, editable=False, db_index=True, primary_key=True + ) + + class Meta: + abstract = True + + def save(self, *args, **kwargs): + user = get_current_user() + if user is None or user.is_anonymous: + self.created_by = None + self.updated_by = None + super(BaseModel, self).save(*args, **kwargs) + else: + # Check if the model is being created or updated + if self._state.adding: + # If created only set created_by value: set updated_by to None + self.created_by = user + self.updated_by = None + # If updated only set updated_by value don't touch created_by + self.updated_by = user + super(BaseModel, self).save(*args, **kwargs) + + def __str__(self): + return str(self.id) + + +class OrgScopedQuerySet(models.QuerySet): + """QuerySet with automatic organization filtering support""" + + def for_org(self, org): + """Filter queryset by organization""" + return self.filter(org=org) + + def for_request(self, request): + """Filter queryset by organization from request""" + if hasattr(request, "profile") and request.profile: + return self.filter(org=request.profile.org) + return self.none() + + +class OrgScopedManager(models.Manager): + """Manager that uses OrgScopedQuerySet""" + + def get_queryset(self): + return OrgScopedQuerySet(self.model, using=self._db) + + def for_org(self, org): + return self.get_queryset().for_org(org) + + def for_request(self, request): + return self.get_queryset().for_request(request) + + +class BaseOrgModel(BaseModel): + """ + Base model for all organization-scoped entities. + + All tenant-owned models should inherit from this instead of BaseModel. + This ensures: + - Required org field (no null values) + - Per-org indexes for performance + - OrgScopedManager for easier filtering + + RLS Protection: + --------------- + Models inheriting from BaseOrgModel are protected by PostgreSQL Row-Level + Security (RLS) policies. The database automatically filters rows by the + current organization context (app.current_org session variable). + + RLS Configuration: See common/rls/__init__.py for policy definitions. + Management: Use `python manage.py manage_rls --status` to check status. + + IMPORTANT: RLS is bypassed if the database user is a superuser. + """ + + org = models.ForeignKey( + "common.Org", + on_delete=models.CASCADE, + related_name="%(class)s_set", + help_text="Organization this record belongs to", + ) + + objects = OrgScopedManager() + + class Meta: + abstract = True + indexes = [ + models.Index(fields=["org", "-created_at"]), + ] + + def save(self, *args, **kwargs): + # Validate org is set + if not self.org_id: + from django.core.exceptions import ValidationError + + raise ValidationError("Organization (org) is required for this model") + super().save(*args, **kwargs) diff --git a/backend/common/celery_utils.py b/backend/common/celery_utils.py new file mode 100644 index 00000000..64bd2001 --- /dev/null +++ b/backend/common/celery_utils.py @@ -0,0 +1,280 @@ +""" +Celery utilities for multi-tenancy support. + +Provides org-aware task execution to ensure background tasks +respect organization context and data isolation. +""" + +import logging +from functools import wraps + +from celery import shared_task +from django.db import connection + +logger = logging.getLogger(__name__) + + +class OrgContext: + """ + Context manager for setting organization context in background tasks. + + Usage: + with OrgContext(org_id): + # All queries here will have org context + leads = Lead.objects.filter(org_id=org_id) + + For RLS (when implemented): + Sets PostgreSQL app.current_org parameter for Row-Level Security. + """ + + def __init__(self, org_id): + self.org_id = str(org_id) if org_id else None + + def __enter__(self): + if self.org_id: + # Set PostgreSQL session variable for RLS (future use) + # This will be used when Row-Level Security is enabled + try: + with connection.cursor() as cursor: + cursor.execute("SET app.current_org = %s", [self.org_id]) + except Exception as e: + # RLS might not be configured yet - this is expected + logger.debug(f"Could not set app.current_org: {e}") + + return self + + def __exit__(self, exc_type, exc_val, exc_tb): + # Reset the context + if self.org_id: + try: + with connection.cursor() as cursor: + cursor.execute("RESET app.current_org") + except Exception: + pass + + return False + + +def org_aware_task(func): + """ + Decorator for Celery tasks that require organization context. + + The first argument to the task must be org_id. + + Usage: + @shared_task + @org_aware_task + def my_task(org_id, other_arg): + # org_id is automatically validated and context is set + pass + + Example: + @shared_task + @org_aware_task + def send_org_report(org_id, report_type): + org = Org.objects.get(id=org_id) + # Generate report for this org + pass + """ + + @wraps(func) + def wrapper(org_id, *args, **kwargs): + from common.models import Org + + # Validate org exists + try: + org = Org.objects.get(id=org_id, is_active=True) + except Org.DoesNotExist: + logger.error( + f"Task {func.__name__} failed: Org {org_id} not found or inactive" + ) + raise ValueError(f"Invalid org_id: {org_id}") + + # Execute with org context + with OrgContext(org_id): + logger.info(f"Executing {func.__name__} for org {org_id}") + return func(org_id, *args, **kwargs) + + return wrapper + + +def require_org_id(func): + """ + Simple decorator that ensures org_id is provided to a task. + + Usage: + @shared_task + @require_org_id + def my_task(org_id, data): + pass + """ + + @wraps(func) + def wrapper(*args, **kwargs): + org_id = kwargs.get("org_id") or (args[0] if args else None) + + if not org_id: + raise ValueError(f"Task {func.__name__} requires org_id parameter") + + return func(*args, **kwargs) + + return wrapper + + +# Example org-aware tasks + + +@shared_task +@org_aware_task +def cleanup_expired_sessions(org_id): + """ + Clean up expired session tokens for an organization. + + Usage: + cleanup_expired_sessions.delay(org_id=str(org.id)) + """ + from common.models import SessionToken + + deleted_count, _ = SessionToken.objects.filter( + user__profiles__org_id=org_id, is_active=False + ).delete() + + logger.info(f"Cleaned up {deleted_count} expired sessions for org {org_id}") + return deleted_count + + +@shared_task +@org_aware_task +def generate_org_activity_report(org_id, days=30): + """ + Generate activity report for an organization. + + Usage: + generate_org_activity_report.delay(org_id=str(org.id), days=30) + """ + from datetime import timedelta + + from django.utils import timezone + + from common.models import Activity + + start_date = timezone.now() - timedelta(days=days) + + activities = Activity.objects.filter(org_id=org_id, created_at__gte=start_date) + + report = { + "org_id": org_id, + "period_days": days, + "total_activities": activities.count(), + "by_action": {}, + "by_entity": {}, + } + + for activity in activities: + # Count by action + action = activity.action + report["by_action"][action] = report["by_action"].get(action, 0) + 1 + + # Count by entity type + entity = activity.entity_type + report["by_entity"][entity] = report["by_entity"].get(entity, 0) + 1 + + logger.info( + f"Generated activity report for org {org_id}: {report['total_activities']} activities" + ) + return report + + +@shared_task +def send_email_with_org_context(org_id, user_id, template_name, subject, context): + """ + Send email with organization branding/context. + + Usage: + send_email_with_org_context.delay( + org_id=str(org.id), + user_id=str(user.id), + template_name='welcome_email.html', + subject='Welcome to Our CRM', + context={'custom_key': 'value'} + ) + """ + from django.conf import settings + from django.core.mail import EmailMessage + from django.template.loader import render_to_string + + from common.models import Org, User + + try: + org = Org.objects.get(id=org_id) + user = User.objects.get(id=user_id) + except (Org.DoesNotExist, User.DoesNotExist) as e: + logger.error(f"Email send failed: {e}") + raise + + # Add org context to email template + email_context = { + "org_name": org.name, + "user_email": user.email, + "domain": settings.DOMAIN_NAME, + **context, + } + + html_content = render_to_string(template_name, context=email_context) + + msg = EmailMessage( + subject, + html_content, + from_email=settings.DEFAULT_FROM_EMAIL, + to=[user.email], + ) + msg.content_subtype = "html" + msg.send() + + logger.info(f"Sent email '{subject}' to {user.email} for org {org.name}") + + +# Batch processing utilities + + +@shared_task +@org_aware_task +def batch_process_org_data(org_id, model_name, processor_func, batch_size=100): + """ + Process org data in batches to avoid memory issues. + + Usage: + batch_process_org_data.delay( + org_id=str(org.id), + model_name='leads.Lead', + processor_func='leads.tasks.process_lead', + batch_size=100 + ) + """ + from importlib import import_module + + from django.apps import apps + + # Get model + app_label, model_class = model_name.rsplit(".", 1) + Model = apps.get_model(app_label, model_class) + + # Get processor function + module_path, func_name = processor_func.rsplit(".", 1) + module = import_module(module_path) + processor = getattr(module, func_name) + + # Process in batches + queryset = Model.objects.filter(org_id=org_id) + total = queryset.count() + processed = 0 + + for i in range(0, total, batch_size): + batch = queryset[i : i + batch_size] + for obj in batch: + processor(obj) + processed += 1 + + logger.info(f"Processed {processed}/{total} {model_name} for org {org_id}") + + return processed diff --git a/cms/migrations/__init__.py b/backend/common/context_processors/__init__.py similarity index 100% rename from cms/migrations/__init__.py rename to backend/common/context_processors/__init__.py diff --git a/common/context_processors/common.py b/backend/common/context_processors/common.py similarity index 100% rename from common/context_processors/common.py rename to backend/common/context_processors/common.py diff --git a/common/custom_auth.py b/backend/common/custom_auth.py similarity index 100% rename from common/custom_auth.py rename to backend/common/custom_auth.py diff --git a/common/custom_openapi.py b/backend/common/custom_openapi.py similarity index 79% rename from common/custom_openapi.py rename to backend/common/custom_openapi.py index 8cef92a0..31a9c28d 100644 --- a/common/custom_openapi.py +++ b/backend/common/custom_openapi.py @@ -1,6 +1,6 @@ def preprocessing_filter_spec(endpoints): filtered = [] - for (path, path_regex, method, callback) in endpoints: + for path, path_regex, method, callback in endpoints: # Remove all but DRF API endpoints if path.startswith("/api/"): filtered.append((path, path_regex, method, callback)) diff --git a/common/external_auth.py b/backend/common/external_auth.py similarity index 62% rename from common/external_auth.py rename to backend/common/external_auth.py index 1a9e499f..2813cdba 100644 --- a/common/external_auth.py +++ b/backend/common/external_auth.py @@ -1,20 +1,27 @@ import jwt +from django.conf import settings from rest_framework.authentication import BaseAuthentication from rest_framework.exceptions import AuthenticationFailed from rest_framework.request import Request -from common.models import Org,Profile,User -from django.conf import settings + +from common.models import Org, Profile, User + def verify_jwt_token(token): - secret_key = (settings.SECRET_KEY) # Replace with your secret key used for token encoding/decoding + secret_key = ( + settings.SECRET_KEY + ) # Replace with your secret key used for token encoding/decoding try: - payload = jwt.decode(token, (settings.SECRET_KEY), algorithms=[settings.JWT_ALGO]) + payload = jwt.decode( + token, (settings.SECRET_KEY), algorithms=[settings.JWT_ALGO] + ) return True, payload except jwt.ExpiredSignatureError: return False, "Token is expired" except jwt.InvalidTokenError: return False, "Invalid token" + class CustomDualAuthentication(BaseAuthentication): def authenticate(self, request): @@ -22,31 +29,37 @@ class CustomDualAuthentication(BaseAuthentication): profile = None # Check JWT authentication - jwt_token = request.headers.get('Authorization', '').split(' ')[1] if 'Authorization' in request.headers else None + jwt_token = ( + request.headers.get("Authorization", "").split(" ")[1] + if "Authorization" in request.headers + else None + ) if jwt_token: is_valid, jwt_payload = verify_jwt_token(jwt_token) if is_valid: - jwt_user = (User.objects.get(id=jwt_payload['user_id']), True) - if jwt_payload['user_id'] is not None: + jwt_user = (User.objects.get(id=jwt_payload["user_id"]), True) + if jwt_payload["user_id"] is not None: if request.headers.get("org"): profile = Profile.objects.get( - user_id=jwt_payload['user_id'], org=request.headers.get("org"), is_active=True + user_id=jwt_payload["user_id"], + org=request.headers.get("org"), + is_active=True, ) if profile: request.profile = profile # Check API key authentication - api_key = request.headers.get('Token') # Get API key from request query params + api_key = request.headers.get("Token") # Get API key from request query params if api_key: try: organization = Org.objects.get(api_key=api_key) api_key_user = organization - request.META['org'] = api_key_user.id + request.META["org"] = api_key_user.id profile = Profile.objects.filter(org=api_key_user, role="ADMIN").first() request.profile = profile profile = (profile.user, True) except Org.DoesNotExist: - raise AuthenticationFailed('Invalid API Key') + raise AuthenticationFailed("Invalid API Key") # Select the appropriate user based on authentication method # Return the user if any authentication method succeeded diff --git a/common/__init__.py b/backend/common/management/__init__.py similarity index 100% rename from common/__init__.py rename to backend/common/management/__init__.py diff --git a/common/context_processors/__init__.py b/backend/common/management/commands/__init__.py similarity index 100% rename from common/context_processors/__init__.py rename to backend/common/management/commands/__init__.py diff --git a/backend/common/management/commands/audit_org_fields.py b/backend/common/management/commands/audit_org_fields.py new file mode 100644 index 00000000..53182fa1 --- /dev/null +++ b/backend/common/management/commands/audit_org_fields.py @@ -0,0 +1,227 @@ +""" +Management command to audit and fix nullable org fields. + +This is part of Phase 1 multi-tenancy hardening - ensures all org-scoped +models have proper org field values before adding NOT NULL constraints. + +Usage: + python manage.py audit_org_fields --check # Just check for issues + python manage.py audit_org_fields --fix # Attempt to fix issues + python manage.py audit_org_fields --verbose # Show detailed output +""" + +from django.apps import apps +from django.core.management.base import BaseCommand +from django.db import connection + + +class Command(BaseCommand): + help = "Audit and report on models with nullable org fields" + + def add_arguments(self, parser): + parser.add_argument( + "--check", + action="store_true", + help="Check for null org values without making changes", + ) + parser.add_argument( + "--fix", + action="store_true", + help="Attempt to backfill null org values from related objects", + ) + parser.add_argument( + "--verbose", + action="store_true", + help="Show detailed information about each model", + ) + + def handle(self, *args, **options): + check_only = options["check"] + fix = options["fix"] + verbose = options["verbose"] + + self.stdout.write( + self.style.NOTICE("\n=== Multi-Tenancy Org Field Audit ===\n") + ) + + # Models that should have org but currently allow null + models_with_nullable_org = [ + ("common", "Address"), + ("common", "Tags"), + ] + + # Models with proper org fields (for reference) + models_with_required_org = [ + ("common", "Comment"), + ("common", "Attachments"), + ("common", "Document"), + ("common", "Activity"), + ("common", "Teams"), + ("common", "APISettings"), + ("accounts", "Account"), + ("leads", "Lead"), + ("contacts", "Contact"), + ("opportunity", "Opportunity"), + ("cases", "Case"), + ("tasks", "Task"), + ("invoices", "Invoice"), + ] + + issues_found = [] + + # Check models with nullable org + self.stdout.write( + self.style.WARNING("Checking models with nullable org fields:\n") + ) + + for app_label, model_name in models_with_nullable_org: + try: + model = apps.get_model(app_label, model_name) + total_count = model.objects.count() + null_count = model.objects.filter(org__isnull=True).count() + + if null_count > 0: + issues_found.append( + (app_label, model_name, null_count, total_count) + ) + self.stdout.write( + f" ❌ {app_label}.{model_name}: " + f"{null_count}/{total_count} records have NULL org" + ) + else: + self.stdout.write( + f" ✅ {app_label}.{model_name}: " + f"All {total_count} records have org set" + ) + + if verbose: + self._show_model_details(model) + + except LookupError: + self.stdout.write( + self.style.ERROR(f" ⚠️ {app_label}.{model_name}: Model not found") + ) + + # Check models with required org + self.stdout.write( + self.style.SUCCESS("\nChecking models with required org fields:\n") + ) + + for app_label, model_name in models_with_required_org: + try: + model = apps.get_model(app_label, model_name) + total_count = model.objects.count() + + # Check if any null orgs exist (shouldn't happen but let's verify) + if hasattr(model, "org"): + null_count = model.objects.filter(org__isnull=True).count() + if null_count > 0: + issues_found.append( + (app_label, model_name, null_count, total_count) + ) + self.stdout.write( + f" ❌ {app_label}.{model_name}: " + f"{null_count}/{total_count} records have NULL org (UNEXPECTED)" + ) + else: + self.stdout.write( + f" ✅ {app_label}.{model_name}: {total_count} records OK" + ) + + except LookupError: + if verbose: + self.stdout.write( + self.style.WARNING( + f" ⚠️ {app_label}.{model_name}: Model not found" + ) + ) + + # Summary + self.stdout.write(self.style.NOTICE("\n=== Summary ===\n")) + + if issues_found: + self.stdout.write( + self.style.ERROR( + f"Found {len(issues_found)} models with NULL org values:\n" + ) + ) + for app_label, model_name, null_count, total_count in issues_found: + self.stdout.write(f" - {app_label}.{model_name}: {null_count} records") + + if fix: + self.stdout.write(self.style.WARNING("\nAttempting to fix issues...\n")) + self._fix_null_orgs(issues_found) + else: + self.stdout.write( + self.style.NOTICE( + "\nRun with --fix to attempt automatic backfill, " + "or manually update records before adding NOT NULL constraints." + ) + ) + else: + self.stdout.write( + self.style.SUCCESS( + "All models have proper org values! Ready for NOT NULL migration." + ) + ) + + # Recommendations + self.stdout.write(self.style.NOTICE("\n=== Next Steps ===\n")) + self.stdout.write( + "1. Fix any NULL org values using --fix or manually\n" + "2. Create migration to set org fields to NOT NULL:\n" + " - Address.org: null=False, blank=False\n" + " - Tags.org: null=False, blank=False\n" + "3. Run: python manage.py makemigrations common\n" + "4. Run: python manage.py migrate\n" + ) + + def _show_model_details(self, model): + """Show detailed information about a model's org field configuration.""" + org_field = model._meta.get_field("org") + self.stdout.write( + f" Field config: null={org_field.null}, blank={org_field.blank}, " + f"related_name='{org_field.related_query_name()}'" + ) + + def _fix_null_orgs(self, issues): + """Attempt to fix NULL org values by inferring from related objects.""" + from common.models import Address, Profile, Tags + + for app_label, model_name, null_count, total_count in issues: + model = apps.get_model(app_label, model_name) + + if model_name == "Address": + # Address can be inferred from Profile.address relationship + fixed = 0 + for address in Address.objects.filter(org__isnull=True): + # Find profile that references this address + profile = Profile.objects.filter(address=address).first() + if profile and profile.org: + address.org = profile.org + address.save() + fixed += 1 + + self.stdout.write(f" Fixed {fixed}/{null_count} Address records") + if fixed < null_count: + self.stdout.write( + self.style.WARNING( + f" {null_count - fixed} records couldn't be fixed - " + "no related Profile found. Consider deleting orphaned records." + ) + ) + + elif model_name == "Tags": + # Tags are harder - might need to check which entities use them + self.stdout.write( + self.style.WARNING( + f" Tags with NULL org need manual review. " + "Consider checking Account.tags, Lead.tags, etc. for usage." + ) + ) + + else: + self.stdout.write( + f" {model_name}: Automatic fix not implemented. " + "Please fix manually." + ) diff --git a/backend/common/management/commands/manage_rls.py b/backend/common/management/commands/manage_rls.py new file mode 100644 index 00000000..f11cbda6 --- /dev/null +++ b/backend/common/management/commands/manage_rls.py @@ -0,0 +1,189 @@ +""" +Management command to check Row-Level Security (RLS) status. + +Usage: + python manage.py manage_rls --status # Check RLS status + python manage.py manage_rls --test # Test RLS is working + python manage.py manage_rls --verify-user # Verify DB user is not superuser + +RLS Configuration: See common/rls/__init__.py for centralized policy definitions. +RLS is enabled/disabled via Django migrations, not this command. +""" + +from django.core.management.base import BaseCommand +from django.db import connection + +from common.rls import RLS_CONFIG, get_check_rls_status_sql, get_set_context_sql + + +class Command(BaseCommand): + help = "Check Row-Level Security (RLS) status for multi-tenancy" + + # Use centralized RLS configuration + ORG_SCOPED_TABLES = RLS_CONFIG["tables"] + + def add_arguments(self, parser): + parser.add_argument( + "--status", action="store_true", help="Check RLS status for all tables" + ) + parser.add_argument( + "--test", action="store_true", help="Test that RLS is working correctly" + ) + parser.add_argument( + "--verify-user", + action="store_true", + help="Verify database user is not a superuser", + ) + + def handle(self, *args, **options): + if connection.vendor != "postgresql": + self.stderr.write(self.style.ERROR("RLS is only supported on PostgreSQL")) + return + + if options["status"]: + self.check_status() + elif options["test"]: + self.test_rls() + elif options["verify_user"]: + self.verify_user() + else: + self.check_status() + + def check_status(self): + """Check RLS status for all org-scoped tables.""" + self.stdout.write(self.style.MIGRATE_HEADING("RLS Status:")) + self.stdout.write("") + + with connection.cursor() as cursor: + # Check if current user is superuser + cursor.execute( + "SELECT current_user, usesuper FROM pg_user WHERE usename = current_user" + ) + user, is_super = cursor.fetchone() + + if is_super: + self.stdout.write( + self.style.WARNING( + f' Database user "{user}" is a SUPERUSER - RLS will be bypassed!' + ) + ) + else: + self.stdout.write( + self.style.SUCCESS( + f' Database user "{user}" is not a superuser - RLS will be enforced' + ) + ) + + self.stdout.write("") + + enabled_count = 0 + disabled_count = 0 + + for table in self.ORG_SCOPED_TABLES: + cursor.execute(get_check_rls_status_sql(), [table]) + + result = cursor.fetchone() + if result: + rls_enabled, rls_forced = result + if rls_enabled: + status = self.style.SUCCESS("ENABLED") + if rls_forced: + status += " (forced)" + enabled_count += 1 + else: + status = self.style.WARNING("disabled") + disabled_count += 1 + else: + status = self.style.ERROR("TABLE NOT FOUND") + + self.stdout.write(f" {table}: {status}") + + self.stdout.write("") + self.stdout.write(f" Enabled: {enabled_count}, Disabled: {disabled_count}") + + def test_rls(self): + """Test that RLS is working correctly.""" + self.stdout.write(self.style.MIGRATE_HEADING("Testing RLS...")) + + set_context_sql = get_set_context_sql() + + with connection.cursor() as cursor: + # Get two different orgs + cursor.execute("SELECT id FROM company LIMIT 2") + orgs = cursor.fetchall() + + if len(orgs) < 2: + self.stdout.write( + self.style.WARNING("Need at least 2 orgs to test RLS. Skipping.") + ) + return + + org_a = str(orgs[0][0]) + org_b = str(orgs[1][0]) + + # Test with org_a context + cursor.execute(set_context_sql, [org_a]) + cursor.execute("SELECT COUNT(*) FROM lead") + count_a = cursor.fetchone()[0] + + # Test with org_b context + cursor.execute(set_context_sql, [org_b]) + cursor.execute("SELECT COUNT(*) FROM lead") + count_b = cursor.fetchone()[0] + + # Test with no context + cursor.execute(set_context_sql, [""]) + cursor.execute("SELECT COUNT(*) FROM lead") + count_none = cursor.fetchone()[0] + + self.stdout.write(f" Leads with org_a context: {count_a}") + self.stdout.write(f" Leads with org_b context: {count_b}") + self.stdout.write(f" Leads with no context: {count_none}") + + if count_none == 0 and (count_a > 0 or count_b > 0): + self.stdout.write( + self.style.SUCCESS("RLS is working - no data without context") + ) + elif count_none > 0: + self.stdout.write( + self.style.WARNING( + "RLS may not be fully enabled - data visible without context. " + "This is expected if the policy allows empty context." + ) + ) + + def verify_user(self): + """Verify the database user is not a superuser.""" + self.stdout.write(self.style.MIGRATE_HEADING("Verifying database user...")) + + with connection.cursor() as cursor: + cursor.execute( + """ + SELECT usename, usesuper, usecreatedb + FROM pg_user + WHERE usename = current_user + """ + ) + user, is_super, can_create_db = cursor.fetchone() + + self.stdout.write(f" Current user: {user}") + self.stdout.write(f" Is superuser: {is_super}") + self.stdout.write(f" Can create DB: {can_create_db}") + + if is_super: + self.stdout.write("") + self.stdout.write( + self.style.ERROR( + "WARNING: Superusers bypass RLS!\n" + "Create a non-superuser for the application:\n\n" + " CREATE USER crm_app WITH PASSWORD 'secure_password';\n" + " GRANT CONNECT ON DATABASE bottlecrm TO crm_app;\n" + " GRANT USAGE ON SCHEMA public TO crm_app;\n" + " GRANT SELECT, INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA public TO crm_app;\n" + " GRANT USAGE, SELECT ON ALL SEQUENCES IN SCHEMA public TO crm_app;\n" + ) + ) + else: + self.stdout.write( + self.style.SUCCESS("Database user is properly configured for RLS") + ) diff --git a/backend/common/management/commands/migrate_from_prisma.py b/backend/common/management/commands/migrate_from_prisma.py new file mode 100644 index 00000000..dba696c0 --- /dev/null +++ b/backend/common/management/commands/migrate_from_prisma.py @@ -0,0 +1,1502 @@ +""" +Django management command to migrate data from Prisma/PostgreSQL to Django. + +Usage: + python manage.py migrate_from_prisma --db-host= --db-name= --db-user= --db-password= + + Options: + --dry-run: Validate data without inserting + --batch-size: Number of records per batch (default: 1000) + --skip-existing: Skip records that already exist + --only: Comma-separated list of models to migrate (e.g., "User,Account,Contact") +""" + +import logging +import uuid +from datetime import datetime +from decimal import Decimal + +import psycopg2 +from django.contrib.contenttypes.models import ContentType +from django.core.management.base import BaseCommand +from django.db import connection, transaction +from django.utils import timezone +from psycopg2.extras import RealDictCursor + +from accounts.models import Account +from cases.models import Case, Solution + +# Import Django models +from common.models import ( + Activity, + Address, + Attachments, + Comment, + CommentFiles, + ContactFormSubmission, + Document, + Org, + Profile, + SessionToken, + Tags, + Teams, + User, +) +from contacts.models import Contact +from invoices.models import Invoice, Product +from leads.models import Company, Lead +from opportunity.models import Opportunity +from tasks.models import Board, BoardColumn, BoardMember, BoardTask, Task + +logger = logging.getLogger(__name__) + + +# ============================================================================= +# ENUM MAPPINGS: Prisma → Django +# ============================================================================= + +LEAD_STATUS_MAP = { + "NEW": "assigned", + "PENDING": "assigned", + "CONTACTED": "in process", + "QUALIFIED": "converted", + "UNQUALIFIED": "recycled", + "CONVERTED": "closed", +} + +LEAD_SOURCE_MAP = { + "WEB": "email", + "PHONE_INQUIRY": "call", + "PARTNER_REFERRAL": "partner", + "COLD_CALL": "call", + "TRADE_SHOW": "compaign", + "EMPLOYEE_REFERRAL": "existing customer", + "ADVERTISEMENT": "compaign", + "OTHER": "other", +} + +OPPORTUNITY_STAGE_MAP = { + "PROSPECTING": "PROSPECTING", + "QUALIFICATION": "QUALIFICATION", + "PROPOSAL": "PROPOSAL", + "NEGOTIATION": "NEGOTIATION", + "CLOSED_WON": "CLOSED_WON", + "CLOSED_LOST": "CLOSED_LOST", +} + +CASE_STATUS_MAP = { + "OPEN": "New", + "IN_PROGRESS": "Pending", + "CLOSED": "Closed", +} + +TASK_STATUS_MAP = { + "Not Started": "New", + "In Progress": "In Progress", + "Completed": "Completed", +} + +TASK_PRIORITY_MAP = { + "High": "High", + "Normal": "Medium", + "Low": "Low", +} + + +class Command(BaseCommand): + help = "Migrate data from Prisma PostgreSQL database to Django" + + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + self.prisma_conn = None + self.dry_run = False + self.batch_size = 1000 + self.skip_existing = False + self.stats = { + "migrated": {}, + "skipped": {}, + "errors": {}, + } + # ID mappings for relationship resolution + self.user_to_profile = {} # user_id -> {org_id: profile_id} + self.org_map = {} # old_org_id -> new_org_id + + def add_arguments(self, parser): + parser.add_argument( + "--db-host", type=str, required=True, help="Prisma database host" + ) + parser.add_argument( + "--db-port", type=int, default=5432, help="Prisma database port" + ) + parser.add_argument( + "--db-name", type=str, required=True, help="Prisma database name" + ) + parser.add_argument( + "--db-user", type=str, required=True, help="Prisma database user" + ) + parser.add_argument( + "--db-password", type=str, required=True, help="Prisma database password" + ) + parser.add_argument( + "--dry-run", action="store_true", help="Validate without inserting" + ) + parser.add_argument( + "--batch-size", type=int, default=1000, help="Batch size for inserts" + ) + parser.add_argument( + "--skip-existing", action="store_true", help="Skip existing records" + ) + parser.add_argument( + "--only", type=str, help="Comma-separated list of models to migrate" + ) + + def handle(self, *args, **options): + self.dry_run = options["dry_run"] + self.batch_size = options["batch_size"] + self.skip_existing = options["skip_existing"] + only_models = options.get("only") + + if only_models: + only_models = [m.strip().lower() for m in only_models.split(",")] + + self.stdout.write(self.style.NOTICE("Starting Prisma → Django migration")) + + if self.dry_run: + self.stdout.write( + self.style.WARNING("DRY RUN MODE - No data will be inserted") + ) + + # Connect to Prisma database + try: + self.prisma_conn = psycopg2.connect( + host=options["db_host"], + port=options["db_port"], + database=options["db_name"], + user=options["db_user"], + password=options["db_password"], + cursor_factory=RealDictCursor, + ) + self.stdout.write(self.style.SUCCESS("Connected to Prisma database")) + except Exception as e: + self.stdout.write( + self.style.ERROR(f"Failed to connect to Prisma database: {e}") + ) + return + + try: + # Migration order (respects dependencies) + migrations = [ + ("organization", self.migrate_organizations), + ("user", self.migrate_users), + ("profile", self.migrate_profiles), + ("teams", self.migrate_teams), + ("account", self.migrate_accounts), + ("contact", self.migrate_contacts), + ("accountcontacts", self.migrate_account_contacts), + ("lead", self.migrate_leads), + ("opportunity", self.migrate_opportunities), + ("case", self.migrate_cases), + ("solution", self.migrate_solutions), + ("task", self.migrate_tasks), + ("product", self.migrate_products), + ("comment", self.migrate_comments), + ("board", self.migrate_boards), + ("boardmember", self.migrate_board_members), + ("boardcolumn", self.migrate_board_columns), + ("boardtask", self.migrate_board_tasks), + ("contactsubmission", self.migrate_contact_submissions), + ] + + for model_name, migration_func in migrations: + if only_models and model_name not in only_models: + continue + + self.stdout.write(f"\nMigrating {model_name}...") + try: + migration_func() + except Exception as e: + self.stdout.write( + self.style.ERROR(f"Error migrating {model_name}: {e}") + ) + logger.exception(f"Error migrating {model_name}") + self.stats["errors"][model_name] = str(e) + + # Print summary + self.print_summary() + + finally: + if self.prisma_conn: + self.prisma_conn.close() + + def print_summary(self): + self.stdout.write("\n" + "=" * 60) + self.stdout.write(self.style.SUCCESS("MIGRATION SUMMARY")) + self.stdout.write("=" * 60) + + for model, count in self.stats["migrated"].items(): + self.stdout.write(f" {model}: {count} migrated") + + if self.stats["skipped"]: + self.stdout.write("\nSkipped:") + for model, count in self.stats["skipped"].items(): + self.stdout.write(f" {model}: {count} skipped") + + if self.stats["errors"]: + self.stdout.write(self.style.ERROR("\nErrors:")) + for model, error in self.stats["errors"].items(): + self.stdout.write(f" {model}: {error}") + + def execute_query(self, query, params=None): + """Execute a query on Prisma database and return results""" + with self.prisma_conn.cursor() as cursor: + cursor.execute(query, params) + return cursor.fetchall() + + def get_or_none(self, model, **kwargs): + """Get object or return None""" + try: + return model.objects.get(**kwargs) + except model.DoesNotExist: + return None + + # ========================================================================= + # MIGRATION FUNCTIONS + # ========================================================================= + + def migrate_organizations(self): + """Migrate Organization → Org""" + query = """ + SELECT id, name, "createdAt", "updatedAt", "isActive" + FROM "Organization" + """ + rows = self.execute_query(query) + migrated = 0 + skipped = 0 + + for row in rows: + if self.skip_existing and Org.objects.filter(id=row["id"]).exists(): + skipped += 1 + continue + + if not self.dry_run: + import uuid + + api_key = str(uuid.uuid4()) + with connection.cursor() as cursor: + cursor.execute( + """ + INSERT INTO organization (id, name, api_key, is_active, created_at, updated_at) + VALUES (%s, %s, %s, %s, %s, %s) + ON CONFLICT (id) DO UPDATE SET + name = EXCLUDED.name, + is_active = EXCLUDED.is_active, + updated_at = EXCLUDED.updated_at + """, + [ + row["id"], + row["name"], + api_key, + row["isActive"], + row["createdAt"], + row["updatedAt"], + ], + ) + + self.org_map[row["id"]] = row["id"] + migrated += 1 + + self.stats["migrated"]["Organization"] = migrated + self.stats["skipped"]["Organization"] = skipped + self.stdout.write(self.style.SUCCESS(f" Migrated {migrated} organizations")) + + def migrate_users(self): + """Migrate User → User (Django)""" + query = """ + SELECT id, email, name, "profilePhoto", "isActive", + "createdAt", "updatedAt" + FROM "User" + """ + rows = self.execute_query(query) + migrated = 0 + skipped = 0 + + for row in rows: + if self.skip_existing and User.objects.filter(id=row["id"]).exists(): + skipped += 1 + continue + + # Split name into first/last (Django User doesn't have name field directly) + name = row["name"] or "" + name_parts = name.split(" ", 1) + + if not self.dry_run: + # Truncate profile_pic to 1000 chars if needed + profile_pic = row["profilePhoto"] + if profile_pic and len(profile_pic) > 1000: + profile_pic = profile_pic[:1000] + + with connection.cursor() as cursor: + cursor.execute( + """ + INSERT INTO users (id, email, profile_pic, is_active, is_staff, is_superuser, password, last_login) + VALUES (%s, %s, %s, %s, %s, %s, %s, %s) + ON CONFLICT (id) DO UPDATE SET + email = EXCLUDED.email, + profile_pic = EXCLUDED.profile_pic, + is_active = EXCLUDED.is_active + """, + [ + row["id"], + row["email"], + profile_pic, + row["isActive"], + False, # is_staff + False, # is_superuser + "", # password (needs to be reset) + None, # last_login + ], + ) + + migrated += 1 + + self.stats["migrated"]["User"] = migrated + self.stats["skipped"]["User"] = skipped + self.stdout.write(self.style.SUCCESS(f" Migrated {migrated} users")) + + def migrate_profiles(self): + """Migrate UserOrganization → Profile""" + query = """ + SELECT uo.id, uo."userId", uo."organizationId", uo.role, uo."joinedAt", + u.phone, u.email + FROM "UserOrganization" uo + JOIN "User" u ON u.id = uo."userId" + """ + rows = self.execute_query(query) + migrated = 0 + skipped = 0 + + for row in rows: + profile_id = row["id"] + + if self.skip_existing and Profile.objects.filter(id=profile_id).exists(): + skipped += 1 + continue + + # Map role + role = "ADMIN" if row["role"] == "ADMIN" else "USER" + is_org_admin = row["role"] == "ADMIN" + + if not self.dry_run: + with connection.cursor() as cursor: + cursor.execute( + """ + INSERT INTO profile ( + id, user_id, org_id, role, is_active, + is_organization_admin, has_sales_access, has_marketing_access, + created_at, updated_at + ) + VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s) + ON CONFLICT (id) DO UPDATE SET + role = EXCLUDED.role, + is_organization_admin = EXCLUDED.is_organization_admin + """, + [ + profile_id, + row["userId"], + row["organizationId"], + role, + True, # is_active + is_org_admin, + True, # has_sales_access + True, # has_marketing_access + row["joinedAt"], + row["joinedAt"], + ], + ) + + # Store mapping for later use + if row["userId"] not in self.user_to_profile: + self.user_to_profile[row["userId"]] = {} + self.user_to_profile[row["userId"]][row["organizationId"]] = profile_id + + migrated += 1 + + self.stats["migrated"]["Profile"] = migrated + self.stats["skipped"]["Profile"] = skipped + self.stdout.write(self.style.SUCCESS(f" Migrated {migrated} profiles")) + + def migrate_teams(self): + """Teams don't exist in Prisma - skip""" + self.stats["migrated"]["Teams"] = 0 + self.stdout.write(" No teams in Prisma schema - skipping") + + def migrate_accounts(self): + """Migrate Account → Account""" + query = """ + SELECT id, name, industry, website, phone, + street, city, state, "postalCode", country, + "annualRevenue", description, "numberOfEmployees", + "createdAt", "updatedAt", "ownerId", "organizationId", "isActive" + FROM "Account" + WHERE "isDeleted" = false + """ + rows = self.execute_query(query) + migrated = 0 + skipped = 0 + + for row in rows: + if self.skip_existing and Account.objects.filter(id=row["id"]).exists(): + skipped += 1 + continue + + if not self.dry_run: + with connection.cursor() as cursor: + cursor.execute( + """ + INSERT INTO accounts ( + id, name, industry, website, phone, + address_line, city, state, postcode, country, + annual_revenue, description, number_of_employees, + created_at, updated_at, org_id, is_active + ) + VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s) + ON CONFLICT (id) DO UPDATE SET + name = EXCLUDED.name, + updated_at = EXCLUDED.updated_at + """, + [ + row["id"], + row["name"], + row["industry"].upper() if row["industry"] else None, + row["website"], + row["phone"], + row["street"], + row["city"], + row["state"], + row["postalCode"], + ( + row["country"][:2] if row["country"] else None + ), # Convert to 2-letter code + row["annualRevenue"], + row["description"], + row["numberOfEmployees"], + row["createdAt"], + row["updatedAt"], + row["organizationId"], + row["isActive"], + ], + ) + + # Add owner to assigned_to M2M + owner_profile_id = self.user_to_profile.get(row["ownerId"], {}).get( + row["organizationId"] + ) + if owner_profile_id: + with connection.cursor() as cursor: + cursor.execute( + """ + INSERT INTO accounts_assigned_to (account_id, profile_id) + VALUES (%s, %s) + ON CONFLICT DO NOTHING + """, + [row["id"], owner_profile_id], + ) + + migrated += 1 + + self.stats["migrated"]["Account"] = migrated + self.stats["skipped"]["Account"] = skipped + self.stdout.write(self.style.SUCCESS(f" Migrated {migrated} accounts")) + + def migrate_contacts(self): + """Migrate Contact → Contact""" + query = """ + SELECT id, "firstName", "lastName", email, phone, + title, department, street, city, state, "postalCode", country, + description, "createdAt", "updatedAt", "ownerId", "organizationId" + FROM "Contact" + """ + rows = self.execute_query(query) + migrated = 0 + skipped = 0 + + for row in rows: + if self.skip_existing and Contact.objects.filter(id=row["id"]).exists(): + skipped += 1 + continue + + # Skip contacts without organization + if not row["organizationId"]: + skipped += 1 + continue + + if not self.dry_run: + with connection.cursor() as cursor: + cursor.execute( + """ + INSERT INTO contacts ( + id, first_name, last_name, email, phone, + title, department, address_line, city, state, postcode, country, + description, created_at, updated_at, org_id, is_active, do_not_call + ) + VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s) + ON CONFLICT (id) DO UPDATE SET + first_name = EXCLUDED.first_name, + last_name = EXCLUDED.last_name, + updated_at = EXCLUDED.updated_at + """, + [ + row["id"], + row["firstName"], + row["lastName"], + row["email"], + row["phone"], + row["title"], + row["department"], + row["street"], + row["city"], + row["state"], + row["postalCode"], + row["country"][:2] if row["country"] else None, + row["description"], + row["createdAt"], + row["updatedAt"], + row["organizationId"], + True, # is_active + False, # do_not_call + ], + ) + + # Add owner to assigned_to M2M + if row["organizationId"]: + owner_profile_id = self.user_to_profile.get(row["ownerId"], {}).get( + row["organizationId"] + ) + if owner_profile_id: + with connection.cursor() as cursor: + cursor.execute( + """ + INSERT INTO contacts_assigned_to (contact_id, profile_id) + VALUES (%s, %s) + ON CONFLICT DO NOTHING + """, + [row["id"], owner_profile_id], + ) + + migrated += 1 + + self.stats["migrated"]["Contact"] = migrated + self.stats["skipped"]["Contact"] = skipped + self.stdout.write(self.style.SUCCESS(f" Migrated {migrated} contacts")) + + def migrate_account_contacts(self): + """Migrate AccountContactRelationship → Account.contacts M2M""" + query = """ + SELECT "accountId", "contactId" + FROM "AccountContactRelationship" + """ + rows = self.execute_query(query) + migrated = 0 + + for row in rows: + if not self.dry_run: + with connection.cursor() as cursor: + cursor.execute( + """ + INSERT INTO accounts_contacts (account_id, contact_id) + VALUES (%s, %s) + ON CONFLICT DO NOTHING + """, + [row["accountId"], row["contactId"]], + ) + migrated += 1 + + self.stats["migrated"]["AccountContacts"] = migrated + self.stdout.write( + self.style.SUCCESS(f" Migrated {migrated} account-contact relationships") + ) + + def migrate_leads(self): + """Migrate Lead → Lead""" + query = """ + SELECT id, "firstName", "lastName", email, phone, company, title, + status, "leadSource", industry, rating, description, + "createdAt", "updatedAt", "ownerId", "organizationId" + FROM "Lead" + """ + rows = self.execute_query(query) + migrated = 0 + skipped = 0 + + for row in rows: + if self.skip_existing and Lead.objects.filter(id=row["id"]).exists(): + skipped += 1 + continue + + # Map status and source + status = LEAD_STATUS_MAP.get(row["status"], "assigned") + source = ( + LEAD_SOURCE_MAP.get(row["leadSource"], "other") + if row["leadSource"] + else None + ) + + if not self.dry_run: + with connection.cursor() as cursor: + cursor.execute( + """ + INSERT INTO lead ( + id, title, first_name, last_name, email, phone, + status, source, industry, rating, description, + created_at, updated_at, org_id, is_active, created_from_site + ) + VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s) + ON CONFLICT (id) DO UPDATE SET + first_name = EXCLUDED.first_name, + last_name = EXCLUDED.last_name, + status = EXCLUDED.status, + updated_at = EXCLUDED.updated_at + """, + [ + row["id"], + row["title"] or f"{row['firstName']} {row['lastName']}", + row["firstName"], + row["lastName"], + row["email"], + row["phone"], + status, + source, + row["industry"].upper() if row["industry"] else None, + row["rating"], + row["description"], + row["createdAt"], + row["updatedAt"], + row["organizationId"], + True, # is_active + False, # created_from_site + ], + ) + + # Add owner to assigned_to M2M + owner_profile_id = self.user_to_profile.get(row["ownerId"], {}).get( + row["organizationId"] + ) + if owner_profile_id: + with connection.cursor() as cursor: + cursor.execute( + """ + INSERT INTO lead_assigned_to (lead_id, profile_id) + VALUES (%s, %s) + ON CONFLICT DO NOTHING + """, + [row["id"], owner_profile_id], + ) + + migrated += 1 + + self.stats["migrated"]["Lead"] = migrated + self.stats["skipped"]["Lead"] = skipped + self.stdout.write(self.style.SUCCESS(f" Migrated {migrated} leads")) + + def migrate_opportunities(self): + """Migrate Opportunity → Opportunity""" + query = """ + SELECT id, name, amount, stage, "closeDate", probability, + type, description, "leadSource", + "createdAt", "updatedAt", "accountId", "ownerId", "organizationId" + FROM "Opportunity" + """ + rows = self.execute_query(query) + migrated = 0 + skipped = 0 + + for row in rows: + if self.skip_existing and Opportunity.objects.filter(id=row["id"]).exists(): + skipped += 1 + continue + + # Map stage + stage = OPPORTUNITY_STAGE_MAP.get(row["stage"], "PROSPECTING") + + if not self.dry_run: + with connection.cursor() as cursor: + cursor.execute( + """ + INSERT INTO opportunity ( + id, name, amount, stage, closed_on, probability, + opportunity_type, description, lead_source, + created_at, updated_at, account_id, org_id, is_active + ) + VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s) + ON CONFLICT (id) DO UPDATE SET + name = EXCLUDED.name, + stage = EXCLUDED.stage, + updated_at = EXCLUDED.updated_at + """, + [ + row["id"], + row["name"], + row["amount"], + stage, + row["closeDate"], + int(row["probability"]) if row["probability"] else 0, + row["type"], + row["description"], + row["leadSource"], + row["createdAt"], + row["updatedAt"], + row["accountId"], + row["organizationId"], + True, # is_active + ], + ) + + # Add owner to assigned_to M2M + owner_profile_id = self.user_to_profile.get(row["ownerId"], {}).get( + row["organizationId"] + ) + if owner_profile_id: + with connection.cursor() as cursor: + cursor.execute( + """ + INSERT INTO opportunity_assigned_to (opportunity_id, profile_id) + VALUES (%s, %s) + ON CONFLICT DO NOTHING + """, + [row["id"], owner_profile_id], + ) + + migrated += 1 + + # Migrate opportunity contacts M2M + self.migrate_opportunity_contacts() + + self.stats["migrated"]["Opportunity"] = migrated + self.stats["skipped"]["Opportunity"] = skipped + self.stdout.write(self.style.SUCCESS(f" Migrated {migrated} opportunities")) + + def migrate_opportunity_contacts(self): + """Migrate Opportunity-Contact M2M relationship""" + query = """ + SELECT "A" as opportunity_id, "B" as contact_id + FROM "_ContactToOpportunity" + """ + try: + rows = self.execute_query(query) + for row in rows: + if not self.dry_run: + with connection.cursor() as cursor: + cursor.execute( + """ + INSERT INTO opportunity_contacts (opportunity_id, contact_id) + VALUES (%s, %s) + ON CONFLICT DO NOTHING + """, + [row["opportunity_id"], row["contact_id"]], + ) + except Exception as e: + logger.warning(f"Could not migrate opportunity contacts: {e}") + + def migrate_cases(self): + """Migrate Case → Case""" + query = """ + SELECT id, subject, status, description, priority, type, "closedAt", + "createdAt", "updatedAt", "accountId", "contactId", "ownerId", "organizationId" + FROM "Case" + """ + rows = self.execute_query(query) + migrated = 0 + skipped = 0 + + for row in rows: + if self.skip_existing and Case.objects.filter(id=row["id"]).exists(): + skipped += 1 + continue + + # Map status + status = CASE_STATUS_MAP.get(row["status"], "New") + + # Map priority + priority = ( + row["priority"] + if row["priority"] in ["Low", "Normal", "High", "Urgent"] + else "Normal" + ) + + # Map case type + case_type = "" + if row["type"]: + type_lower = row["type"].lower() + if "question" in type_lower: + case_type = "Question" + elif "problem" in type_lower: + case_type = "Problem" + else: + case_type = "Incident" + + if not self.dry_run: + # Truncate name to 64 chars if needed + case_name = row["subject"] + if case_name and len(case_name) > 64: + case_name = case_name[:64] + + with connection.cursor() as cursor: + cursor.execute( + """ + INSERT INTO "case" ( + id, name, status, description, priority, case_type, closed_on, + created_at, updated_at, account_id, org_id, is_active + ) + VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s) + ON CONFLICT (id) DO UPDATE SET + name = EXCLUDED.name, + status = EXCLUDED.status, + updated_at = EXCLUDED.updated_at + """, + [ + row["id"], + case_name, + status, + row["description"], + priority, + case_type, + row["closedAt"].date() if row["closedAt"] else None, + row["createdAt"], + row["updatedAt"], + row["accountId"], + row["organizationId"], + True, # is_active + ], + ) + + # Add owner to assigned_to M2M + owner_profile_id = self.user_to_profile.get(row["ownerId"], {}).get( + row["organizationId"] + ) + if owner_profile_id: + with connection.cursor() as cursor: + cursor.execute( + """ + INSERT INTO case_assigned_to (case_id, profile_id) + VALUES (%s, %s) + ON CONFLICT DO NOTHING + """, + [row["id"], owner_profile_id], + ) + + # Add contact to contacts M2M + if row["contactId"]: + with connection.cursor() as cursor: + cursor.execute( + """ + INSERT INTO case_contacts (case_id, contact_id) + VALUES (%s, %s) + ON CONFLICT DO NOTHING + """, + [row["id"], row["contactId"]], + ) + + migrated += 1 + + self.stats["migrated"]["Case"] = migrated + self.stats["skipped"]["Case"] = skipped + self.stdout.write(self.style.SUCCESS(f" Migrated {migrated} cases")) + + def migrate_solutions(self): + """Migrate Solution → Solution""" + query = """ + SELECT id, title, description, status, "isPublished", + "createdAt", "updatedAt", "organizationId" + FROM "Solution" + """ + rows = self.execute_query(query) + migrated = 0 + skipped = 0 + + for row in rows: + if self.skip_existing and Solution.objects.filter(id=row["id"]).exists(): + skipped += 1 + continue + + # Map status + status = row["status"].lower() if row["status"] else "draft" + if status not in ["draft", "reviewed", "approved"]: + status = "draft" + + if not self.dry_run: + with connection.cursor() as cursor: + cursor.execute( + """ + INSERT INTO solution ( + id, title, description, status, is_published, + created_at, updated_at, org_id + ) + VALUES (%s, %s, %s, %s, %s, %s, %s, %s) + ON CONFLICT (id) DO UPDATE SET + title = EXCLUDED.title, + status = EXCLUDED.status, + updated_at = EXCLUDED.updated_at + """, + [ + row["id"], + row["title"], + row["description"], + status, + row["isPublished"], + row["createdAt"], + row["updatedAt"], + row["organizationId"], + ], + ) + + migrated += 1 + + # Migrate solution-case M2M + self.migrate_solution_cases() + + self.stats["migrated"]["Solution"] = migrated + self.stats["skipped"]["Solution"] = skipped + self.stdout.write(self.style.SUCCESS(f" Migrated {migrated} solutions")) + + def migrate_solution_cases(self): + """Migrate Solution-Case M2M relationship""" + query = """ + SELECT "A" as case_id, "B" as solution_id + FROM "_CaseToSolution" + """ + try: + rows = self.execute_query(query) + for row in rows: + if not self.dry_run: + with connection.cursor() as cursor: + cursor.execute( + """ + INSERT INTO solution_cases (solution_id, case_id) + VALUES (%s, %s) + ON CONFLICT DO NOTHING + """, + [row["solution_id"], row["case_id"]], + ) + except Exception as e: + logger.warning(f"Could not migrate solution cases: {e}") + + def migrate_tasks(self): + """Migrate Task → Task""" + query = """ + SELECT id, subject, status, priority, "dueDate", description, + "createdAt", "updatedAt", "accountId", "contactId", + "ownerId", "organizationId" + FROM "Task" + """ + rows = self.execute_query(query) + migrated = 0 + skipped = 0 + + for row in rows: + if self.skip_existing and Task.objects.filter(id=row["id"]).exists(): + skipped += 1 + continue + + # Map status and priority + status = TASK_STATUS_MAP.get(row["status"], "New") + priority = TASK_PRIORITY_MAP.get(row["priority"], "Medium") + + if not self.dry_run: + with connection.cursor() as cursor: + cursor.execute( + """ + INSERT INTO task ( + id, title, status, priority, due_date, description, + created_at, updated_at, account_id, org_id + ) + VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s) + ON CONFLICT (id) DO UPDATE SET + title = EXCLUDED.title, + status = EXCLUDED.status, + updated_at = EXCLUDED.updated_at + """, + [ + row["id"], + row["subject"], + status, + priority, + row["dueDate"].date() if row["dueDate"] else None, + row["description"], + row["createdAt"], + row["updatedAt"], + row["accountId"], + row["organizationId"], + ], + ) + + # Add owner to assigned_to M2M + owner_profile_id = self.user_to_profile.get(row["ownerId"], {}).get( + row["organizationId"] + ) + if owner_profile_id: + with connection.cursor() as cursor: + cursor.execute( + """ + INSERT INTO task_assigned_to (task_id, profile_id) + VALUES (%s, %s) + ON CONFLICT DO NOTHING + """, + [row["id"], owner_profile_id], + ) + + # Add contact to contacts M2M + if row["contactId"]: + with connection.cursor() as cursor: + cursor.execute( + """ + INSERT INTO task_contacts (task_id, contact_id) + VALUES (%s, %s) + ON CONFLICT DO NOTHING + """, + [row["id"], row["contactId"]], + ) + + migrated += 1 + + self.stats["migrated"]["Task"] = migrated + self.stats["skipped"]["Task"] = skipped + self.stdout.write(self.style.SUCCESS(f" Migrated {migrated} tasks")) + + def migrate_products(self): + """Migrate Product → Product""" + query = """ + SELECT id, name, code, description, "unitPrice", active, + "createdAt", "updatedAt", "organizationId" + FROM "Product" + """ + rows = self.execute_query(query) + migrated = 0 + skipped = 0 + + for row in rows: + if self.skip_existing and Product.objects.filter(id=row["id"]).exists(): + skipped += 1 + continue + + if not self.dry_run: + with connection.cursor() as cursor: + cursor.execute( + """ + INSERT INTO product ( + id, name, sku, description, price, is_active, + created_at, updated_at, org_id + ) + VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s) + ON CONFLICT (id) DO UPDATE SET + name = EXCLUDED.name, + price = EXCLUDED.price, + updated_at = EXCLUDED.updated_at + """, + [ + row["id"], + row["name"], + row["code"], + row["description"], + row["unitPrice"], + row["active"], + row["createdAt"], + row["updatedAt"], + row["organizationId"], + ], + ) + + migrated += 1 + + self.stats["migrated"]["Product"] = migrated + self.stats["skipped"]["Product"] = skipped + self.stdout.write(self.style.SUCCESS(f" Migrated {migrated} products")) + + def migrate_comments(self): + """Migrate Comment → Comment (using GenericFK)""" + query = """ + SELECT id, body, "createdAt", "updatedAt", "authorId", "organizationId", + "caseId", "opportunityId", "leadId", "accountId", "contactId", "taskId" + FROM "Comment" + """ + rows = self.execute_query(query) + migrated = 0 + skipped = 0 + + # Get content types + content_types = { + "case": ContentType.objects.get_for_model(Case), + "opportunity": ContentType.objects.get_for_model(Opportunity), + "lead": ContentType.objects.get_for_model(Lead), + "account": ContentType.objects.get_for_model(Account), + "contact": ContentType.objects.get_for_model(Contact), + "task": ContentType.objects.get_for_model(Task), + } + + for row in rows: + if self.skip_existing and Comment.objects.filter(id=row["id"]).exists(): + skipped += 1 + continue + + # Determine content type and object ID + content_type = None + object_id = None + + if row["caseId"]: + content_type = content_types["case"] + object_id = row["caseId"] + elif row["opportunityId"]: + content_type = content_types["opportunity"] + object_id = row["opportunityId"] + elif row["leadId"]: + content_type = content_types["lead"] + object_id = row["leadId"] + elif row["accountId"]: + content_type = content_types["account"] + object_id = row["accountId"] + elif row["contactId"]: + content_type = content_types["contact"] + object_id = row["contactId"] + elif row["taskId"]: + content_type = content_types["task"] + object_id = row["taskId"] + else: + skipped += 1 + continue + + # Get profile ID for author + author_profile_id = self.user_to_profile.get(row["authorId"], {}).get( + row["organizationId"] + ) + + if not self.dry_run: + with connection.cursor() as cursor: + cursor.execute( + """ + INSERT INTO comment ( + id, content_type_id, object_id, comment, commented_on, + commented_by_id, org_id, created_at, updated_at + ) + VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s) + ON CONFLICT (id) DO UPDATE SET + comment = EXCLUDED.comment, + updated_at = EXCLUDED.updated_at + """, + [ + row["id"], + content_type.id, + object_id, + ( + row["body"][:255] if row["body"] else "" + ), # Truncate to 255 chars + row["createdAt"], + author_profile_id, + row["organizationId"], + row["createdAt"], + row["updatedAt"], + ], + ) + + migrated += 1 + + self.stats["migrated"]["Comment"] = migrated + self.stats["skipped"]["Comment"] = skipped + self.stdout.write(self.style.SUCCESS(f" Migrated {migrated} comments")) + + def migrate_boards(self): + """Migrate Board → Board""" + query = """ + SELECT id, name, description, "createdAt", "updatedAt", + "ownerId", "organizationId" + FROM "Board" + """ + rows = self.execute_query(query) + migrated = 0 + skipped = 0 + + for row in rows: + if self.skip_existing and Board.objects.filter(id=row["id"]).exists(): + skipped += 1 + continue + + # Get owner profile + owner_profile_id = self.user_to_profile.get(row["ownerId"], {}).get( + row["organizationId"] + ) + + if not owner_profile_id: + skipped += 1 + continue + + if not self.dry_run: + with connection.cursor() as cursor: + cursor.execute( + """ + INSERT INTO board ( + id, name, description, is_archived, + created_at, updated_at, owner_id, org_id + ) + VALUES (%s, %s, %s, %s, %s, %s, %s, %s) + ON CONFLICT (id) DO UPDATE SET + name = EXCLUDED.name, + description = EXCLUDED.description, + updated_at = EXCLUDED.updated_at + """, + [ + row["id"], + row["name"], + row["description"], + False, # is_archived + row["createdAt"], + row["updatedAt"], + owner_profile_id, + row["organizationId"], + ], + ) + + migrated += 1 + + self.stats["migrated"]["Board"] = migrated + self.stats["skipped"]["Board"] = skipped + self.stdout.write(self.style.SUCCESS(f" Migrated {migrated} boards")) + + def migrate_board_members(self): + """Migrate BoardMember → BoardMember""" + query = """ + SELECT bm.id, bm."boardId", bm."userId", bm.role, bm."createdAt", + b."organizationId" + FROM "BoardMember" bm + JOIN "Board" b ON b.id = bm."boardId" + """ + rows = self.execute_query(query) + migrated = 0 + skipped = 0 + + for row in rows: + if self.skip_existing and BoardMember.objects.filter(id=row["id"]).exists(): + skipped += 1 + continue + + # Get profile ID for user + profile_id = self.user_to_profile.get(row["userId"], {}).get( + row["organizationId"] + ) + + if not profile_id: + skipped += 1 + continue + + # Map role + role = row["role"].lower() if row["role"] else "member" + if role not in ["owner", "admin", "member"]: + role = "member" + + if not self.dry_run: + with connection.cursor() as cursor: + cursor.execute( + """ + INSERT INTO board_member ( + id, board_id, profile_id, role, created_at, updated_at + ) + VALUES (%s, %s, %s, %s, %s, %s) + ON CONFLICT (id) DO UPDATE SET + role = EXCLUDED.role + """, + [ + row["id"], + row["boardId"], + profile_id, + role, + row["createdAt"], + row["createdAt"], + ], + ) + + migrated += 1 + + self.stats["migrated"]["BoardMember"] = migrated + self.stats["skipped"]["BoardMember"] = skipped + self.stdout.write(self.style.SUCCESS(f" Migrated {migrated} board members")) + + def migrate_board_columns(self): + """Migrate BoardColumn → BoardColumn""" + query = """ + SELECT id, name, "order", "boardId", "createdAt", "updatedAt" + FROM "BoardColumn" + """ + rows = self.execute_query(query) + migrated = 0 + skipped = 0 + + for row in rows: + if self.skip_existing and BoardColumn.objects.filter(id=row["id"]).exists(): + skipped += 1 + continue + + if not self.dry_run: + with connection.cursor() as cursor: + cursor.execute( + """ + INSERT INTO board_column ( + id, name, "order", color, board_id, created_at, updated_at + ) + VALUES (%s, %s, %s, %s, %s, %s, %s) + ON CONFLICT (id) DO UPDATE SET + name = EXCLUDED.name, + "order" = EXCLUDED."order", + updated_at = EXCLUDED.updated_at + """, + [ + row["id"], + row["name"], + row["order"], + "#6B7280", # default color + row["boardId"], + row["createdAt"], + row["updatedAt"], + ], + ) + + migrated += 1 + + self.stats["migrated"]["BoardColumn"] = migrated + self.stats["skipped"]["BoardColumn"] = skipped + self.stdout.write(self.style.SUCCESS(f" Migrated {migrated} board columns")) + + def migrate_board_tasks(self): + """Migrate BoardTask → BoardTask""" + query = """ + SELECT id, title, description, "order", "dueDate", completed, + "columnId", "assigneeId", "createdAt", "updatedAt" + FROM "BoardTask" + """ + rows = self.execute_query(query) + migrated = 0 + skipped = 0 + + for row in rows: + if self.skip_existing and BoardTask.objects.filter(id=row["id"]).exists(): + skipped += 1 + continue + + # Get board org to find profile + board_org_query = """ + SELECT b."organizationId" + FROM "BoardColumn" bc + JOIN "Board" b ON b.id = bc."boardId" + WHERE bc.id = %s + """ + org_rows = self.execute_query(board_org_query, [row["columnId"]]) + org_id = org_rows[0]["organizationId"] if org_rows else None + + if not self.dry_run: + completed_at = row["createdAt"] if row["completed"] else None + + with connection.cursor() as cursor: + cursor.execute( + """ + INSERT INTO board_task ( + id, title, description, "order", priority, + due_date, completed_at, column_id, created_at, updated_at + ) + VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s) + ON CONFLICT (id) DO UPDATE SET + title = EXCLUDED.title, + description = EXCLUDED.description, + updated_at = EXCLUDED.updated_at + """, + [ + row["id"], + row["title"], + row["description"], + row["order"], + "medium", # default priority + row["dueDate"], + completed_at, + row["columnId"], + row["createdAt"], + row["updatedAt"], + ], + ) + + # Add assignee to assigned_to M2M + if row["assigneeId"] and org_id: + profile_id = self.user_to_profile.get(row["assigneeId"], {}).get( + org_id + ) + if profile_id: + with connection.cursor() as cursor: + cursor.execute( + """ + INSERT INTO board_task_assigned_to (boardtask_id, profile_id) + VALUES (%s, %s) + ON CONFLICT DO NOTHING + """, + [row["id"], profile_id], + ) + + migrated += 1 + + self.stats["migrated"]["BoardTask"] = migrated + self.stats["skipped"]["BoardTask"] = skipped + self.stdout.write(self.style.SUCCESS(f" Migrated {migrated} board tasks")) + + def migrate_contact_submissions(self): + """Migrate ContactSubmission → ContactFormSubmission""" + query = """ + SELECT id, name, email, message, reason, + "ipAddress", "userAgent", referrer, "createdAt" + FROM "ContactSubmission" + """ + rows = self.execute_query(query) + migrated = 0 + skipped = 0 + + for row in rows: + if ( + self.skip_existing + and ContactFormSubmission.objects.filter(id=row["id"]).exists() + ): + skipped += 1 + continue + + # Map reason + reason = row["reason"].lower() if row["reason"] else "general" + valid_reasons = ["general", "sales", "support", "partnership", "other"] + if reason not in valid_reasons: + reason = "other" + + if not self.dry_run: + with connection.cursor() as cursor: + cursor.execute( + """ + INSERT INTO contact_form_submission ( + id, name, email, message, reason, + ip_address, user_agent, referrer, status, created_at, updated_at + ) + VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s) + ON CONFLICT (id) DO UPDATE SET + name = EXCLUDED.name, + email = EXCLUDED.email + """, + [ + row["id"], + row["name"], + row["email"], + row["message"], + reason, + row["ipAddress"], + row["userAgent"], + row["referrer"], + "new", # status + row["createdAt"], + row["createdAt"], + ], + ) + + migrated += 1 + + self.stats["migrated"]["ContactSubmission"] = migrated + self.stats["skipped"]["ContactSubmission"] = skipped + self.stdout.write( + self.style.SUCCESS(f" Migrated {migrated} contact submissions") + ) diff --git a/common/manager.py b/backend/common/manager.py similarity index 54% rename from common/manager.py rename to backend/common/manager.py index f29cc2f4..87cf6ca2 100644 --- a/common/manager.py +++ b/backend/common/manager.py @@ -1,9 +1,10 @@ from django.contrib.auth.models import BaseUserManager + class UserManager(BaseUserManager): def create_user(self, email, password=None, **extra_fields): if not email: - raise ValueError('The Email field must be set') + raise ValueError("The Email field must be set") email = self.normalize_email(email) user = self.model(email=email, **extra_fields) user.set_password(password) @@ -11,14 +12,13 @@ class UserManager(BaseUserManager): return user def create_superuser(self, email, password=None, **extra_fields): - extra_fields.setdefault('is_superuser', True) - extra_fields.setdefault('is_staff', True) + extra_fields.setdefault("is_superuser", True) + extra_fields.setdefault("is_staff", True) - if extra_fields.get('is_staff') is not True: - raise ValueError('Superuser must have is_staff=True.') - + if extra_fields.get("is_staff") is not True: + raise ValueError("Superuser must have is_staff=True.") - if extra_fields.get('is_superuser') is not True: - raise ValueError('Superuser must have is_superuser=True.') + if extra_fields.get("is_superuser") is not True: + raise ValueError("Superuser must have is_superuser=True.") return self.create_user(email, password, **extra_fields) diff --git a/common/middleware/__init__.py b/backend/common/middleware/__init__.py similarity index 100% rename from common/middleware/__init__.py rename to backend/common/middleware/__init__.py diff --git a/backend/common/middleware/get_company.py b/backend/common/middleware/get_company.py new file mode 100644 index 00000000..ae1600ae --- /dev/null +++ b/backend/common/middleware/get_company.py @@ -0,0 +1,152 @@ +import logging + +import jwt +from crum import get_current_user +from django.conf import settings +from django.contrib.auth import logout +from django.core.exceptions import PermissionDenied, ValidationError +from django.utils.functional import SimpleLazyObject +from rest_framework import status +from rest_framework.exceptions import AuthenticationFailed +from rest_framework.response import Response + +from common.models import Org, Profile, User + +logger = logging.getLogger(__name__) + + +def get_actual_value(request): + if request.user is None: + return None + return request.user + + +class GetProfileAndOrg(object): + """ + Middleware to extract and validate organization context from JWT tokens. + + SECURITY: This middleware validates org_id from the SIGNED JWT token, + not from client-provided headers. This prevents org spoofing attacks. + + The org context is cryptographically verified as part of the JWT signature. + """ + + def __init__(self, get_response): + self.get_response = get_response + + def __call__(self, request): + self.process_request(request) + return self.get_response(request) + + def process_request(self, request): + # Skip JWT validation for authentication endpoints that don't need org context + auth_skip_paths = [ + "/api/auth/login/", + "/api/auth/google/", + "/api/auth/register/", + "/api/auth/refresh-token/", + "/api/auth/me/", + "/api/auth/switch-org/", + ] + if request.path in auth_skip_paths: + return + + # Initialize request attributes + request.profile = None + request.org = None + + # Try JWT token first (primary authentication) + if request.headers.get("Authorization"): + self._process_jwt_auth(request) + return + + # Fall back to API key authentication + api_key = request.headers.get("Token") + if api_key: + self._process_api_key_auth(request, api_key) + return + + def _process_jwt_auth(self, request): + """ + Process JWT authentication and extract org context from token. + + SECURITY: Org ID is extracted from the signed JWT payload, not headers. + """ + from rest_framework_simplejwt.tokens import AccessToken + + try: + auth_header = request.headers.get("Authorization") + token_value = auth_header.split(" ")[1] + + # Validate and decode token + access_token = AccessToken(token_value) + user_id = access_token["user_id"] + + # Get org_id from JWT claim (SECURE - cryptographically signed) + org_id = access_token.get("org_id") + + if not org_id: + # Token doesn't have org context - this is allowed for some endpoints + # like /api/auth/me/ or initial login + logger.debug(f"JWT token for user {user_id} has no org_id claim") + return + + # Validate user membership in the org + try: + profile = Profile.objects.select_related("org").get( + user_id=user_id, org_id=org_id, is_active=True + ) + request.profile = profile + request.org = profile.org + logger.debug(f"Set org context from JWT: user={user_id}, org={org_id}") + + except Profile.DoesNotExist: + # User doesn't have access to this org anymore + # This can happen if membership was revoked after token was issued + logger.warning( + f"User {user_id} no longer has access to org {org_id}. " + "Token may be stale." + ) + raise PermissionDenied( + "You no longer have access to this organization. " + "Please login again." + ) + + except (IndexError, KeyError) as e: + logger.warning(f"Malformed Authorization header: {e}") + # Let DRF authentication handle this + return + + except Exception as e: + logger.warning(f"JWT validation failed: {e}") + # Let DRF authentication handle invalid tokens + return + + def _process_api_key_auth(self, request, api_key): + """ + Process API key authentication. + + Note: API keys are scoped to a specific org and use an admin profile. + TODO: Create dedicated API key model with granular permissions. + """ + try: + organization = Org.objects.get(api_key=api_key, is_active=True) + + # Get an admin profile for this org + profile = Profile.objects.filter( + org=organization, role="ADMIN", is_active=True + ).first() + + if not profile: + logger.error(f"No active admin profile found for org {organization.id}") + raise AuthenticationFailed("Invalid API Key configuration") + + request.profile = profile + request.org = organization + request.META["org"] = str(organization.id) + + logger.debug(f"Set org context from API key: org={organization.id}") + + except Org.DoesNotExist: + logger.warning(f"Invalid API key attempted: {api_key[:8]}...") + raise AuthenticationFailed("Invalid API Key") diff --git a/backend/common/middleware/rls_context.py b/backend/common/middleware/rls_context.py new file mode 100644 index 00000000..6d1b2098 --- /dev/null +++ b/backend/common/middleware/rls_context.py @@ -0,0 +1,187 @@ +""" +Database middleware for Row-Level Security (RLS) context. + +This middleware sets the PostgreSQL session variable `app.current_org` +which is used by RLS policies to filter data at the database level. + +Enable RLS policies after this middleware is in place: + + ALTER TABLE leads ENABLE ROW LEVEL SECURITY; + CREATE POLICY org_isolation ON leads + USING (org_id = current_setting('app.current_org', true)::uuid); + +Usage in settings.py: + MIDDLEWARE = [ + ... + 'common.middleware.get_company.GetProfileAndOrg', + 'common.middleware.rls_context.SetOrgContext', # After GetProfileAndOrg + ... + ] +""" + +import logging + +from django.db import connection + +logger = logging.getLogger(__name__) + + +class SetOrgContext: + """ + Middleware to set PostgreSQL session variable for Row-Level Security. + + This sets `app.current_org` to the user's organization ID, which is + used by RLS policies to automatically filter data at the database level. + + Security: This provides defense-in-depth. Even if application code + forgets to filter by org, the database will enforce isolation. + """ + + def __init__(self, get_response): + self.get_response = get_response + + def __call__(self, request): + # Set org context before processing request + self._set_org_context(request) + + response = self.get_response(request) + + # Reset context after request + self._reset_org_context() + + return response + + def _set_org_context(self, request): + """ + Set the PostgreSQL session variable for RLS. + + Args: + request: Django request object with profile attached + """ + if not hasattr(request, "org") or request.org is None: + return + + org_id = str(request.org.id) + + try: + with connection.cursor() as cursor: + # Set the session variable + cursor.execute( + "SELECT set_config('app.current_org', %s, true)", [org_id] + ) + logger.debug(f"Set RLS context: app.current_org = {org_id}") + + except Exception as e: + # RLS might not be configured - log but don't fail + logger.debug(f"Could not set RLS context: {e}") + + def _reset_org_context(self): + """ + Reset the PostgreSQL session variable after request. + """ + try: + with connection.cursor() as cursor: + cursor.execute("SELECT set_config('app.current_org', '', true)") + except Exception: + pass + + +class RequireOrgContext: + """ + Stricter middleware that fails if org context is not set. + + Use this instead of SetOrgContext when you want to ensure + all requests have proper org context (after RLS is fully enabled). + + Usage in settings.py: + MIDDLEWARE = [ + ... + 'common.middleware.get_company.GetProfileAndOrg', + 'common.middleware.rls_context.RequireOrgContext', + ... + ] + """ + + # Paths that don't require org context + EXEMPT_PATHS = [ + "/api/auth/login/", + "/api/auth/register/", + "/api/auth/refresh-token/", + "/api/auth/me/", + "/api/auth/switch-org/", + "/api/auth/google/", + "/admin/", + "/swagger-ui/", + "/api/schema/", + ] + + def __init__(self, get_response): + self.get_response = get_response + + def __call__(self, request): + # Check if path requires org context + if not self._is_exempt(request.path): + if not hasattr(request, "org") or request.org is None: + from rest_framework.exceptions import PermissionDenied + + raise PermissionDenied( + "Organization context is required. Please login again." + ) + + # Set org context + self._set_org_context(request) + + response = self.get_response(request) + + # Reset context + self._reset_org_context() + + return response + + def _is_exempt(self, path): + """Check if path is exempt from org context requirement.""" + return any(path.startswith(exempt) for exempt in self.EXEMPT_PATHS) + + def _set_org_context(self, request): + """Set PostgreSQL session variable.""" + if not hasattr(request, "org") or request.org is None: + return + + org_id = str(request.org.id) + + try: + with connection.cursor() as cursor: + cursor.execute( + "SELECT set_config('app.current_org', %s, true)", [org_id] + ) + except Exception as e: + logger.warning(f"Failed to set RLS context: {e}") + + def _reset_org_context(self): + """Reset PostgreSQL session variable.""" + try: + with connection.cursor() as cursor: + cursor.execute("SELECT set_config('app.current_org', '', true)") + except Exception: + pass + + +# SQL to enable RLS on all org-scoped tables +RLS_SETUP_SQL = """ +-- Enable RLS on main tables +-- Run this after all org-scoped tables are identified + +-- Example for leads table: +-- ALTER TABLE lead ENABLE ROW LEVEL SECURITY; +-- ALTER TABLE lead FORCE ROW LEVEL SECURITY; -- Apply to table owner too +-- CREATE POLICY org_isolation ON lead +-- USING (org_id = NULLIF(current_setting('app.current_org', true), '')::uuid); + +-- Tables that need RLS policies: +-- lead, accounts, contacts, opportunity, cases, tasks, invoices, +-- comment, attachments, document, teams, activity, tags, address, +-- api_settings, board, board_column, board_task, board_member + +-- Note: Use NULLIF to handle empty string when context is not set +-- This makes the policy return no rows when context is not set (fail-safe) +""" diff --git a/backend/common/migrations/0001_initial.py b/backend/common/migrations/0001_initial.py new file mode 100644 index 00000000..4a6405d5 --- /dev/null +++ b/backend/common/migrations/0001_initial.py @@ -0,0 +1,1616 @@ +# Generated by Django 5.2.8 on 2025-11-27 12:17 + +import uuid + +import django.db.models.deletion +import phonenumber_field.modelfields +from django.conf import settings +from django.db import migrations, models + +import common.models + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ("auth", "0012_alter_user_first_name_max_length"), + ("contenttypes", "0002_remove_content_type_name"), + ] + + operations = [ + migrations.CreateModel( + name="User", + fields=[ + ("password", models.CharField(max_length=128, verbose_name="password")), + ( + "last_login", + models.DateTimeField( + blank=True, null=True, verbose_name="last login" + ), + ), + ( + "is_superuser", + models.BooleanField( + default=False, + help_text="Designates that this user has all permissions without explicitly assigning them.", + verbose_name="superuser status", + ), + ), + ( + "id", + models.UUIDField( + db_index=True, + default=uuid.uuid4, + editable=False, + primary_key=True, + serialize=False, + unique=True, + ), + ), + ( + "email", + models.EmailField( + blank=True, + max_length=254, + unique=True, + verbose_name="email address", + ), + ), + ( + "profile_pic", + models.CharField(blank=True, max_length=1000, null=True), + ), + ( + "activation_key", + models.CharField(blank=True, max_length=150, null=True), + ), + ("key_expires", models.DateTimeField(blank=True, null=True)), + ("is_active", models.BooleanField(default=True)), + ( + "is_staff", + models.BooleanField(default=False, verbose_name="staff status"), + ), + ( + "groups", + models.ManyToManyField( + blank=True, + help_text="The groups this user belongs to. A user will get all permissions granted to each of their groups.", + related_name="user_set", + related_query_name="user", + to="auth.group", + verbose_name="groups", + ), + ), + ( + "user_permissions", + models.ManyToManyField( + blank=True, + help_text="Specific permissions for this user.", + related_name="user_set", + related_query_name="user", + to="auth.permission", + verbose_name="user permissions", + ), + ), + ], + options={ + "verbose_name": "User", + "verbose_name_plural": "Users", + "db_table": "users", + "ordering": ("-is_active",), + }, + ), + migrations.CreateModel( + name="Comment", + fields=[ + ( + "created_at", + models.DateTimeField(auto_now_add=True, verbose_name="Created At"), + ), + ( + "updated_at", + models.DateTimeField( + auto_now=True, verbose_name="Last Modified At" + ), + ), + ( + "id", + models.UUIDField( + db_index=True, + default=uuid.uuid4, + editable=False, + primary_key=True, + serialize=False, + unique=True, + ), + ), + ("object_id", models.UUIDField()), + ("comment", models.CharField(max_length=255)), + ("commented_on", models.DateTimeField(auto_now_add=True)), + ( + "content_type", + models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, + related_name="comments", + to="contenttypes.contenttype", + ), + ), + ( + "created_by", + models.ForeignKey( + null=True, + on_delete=django.db.models.deletion.SET_NULL, + related_name="%(class)s_created_by", + to=settings.AUTH_USER_MODEL, + verbose_name="Created By", + ), + ), + ( + "updated_by", + models.ForeignKey( + null=True, + on_delete=django.db.models.deletion.SET_NULL, + related_name="%(class)s_updated_by", + to=settings.AUTH_USER_MODEL, + verbose_name="Last Modified By", + ), + ), + ], + options={ + "verbose_name": "Comment", + "verbose_name_plural": "Comments", + "db_table": "comment", + "ordering": ("-created_at",), + }, + ), + migrations.CreateModel( + name="CommentFiles", + fields=[ + ( + "created_at", + models.DateTimeField(auto_now_add=True, verbose_name="Created At"), + ), + ( + "updated_at", + models.DateTimeField( + auto_now=True, verbose_name="Last Modified At" + ), + ), + ( + "id", + models.UUIDField( + db_index=True, + default=uuid.uuid4, + editable=False, + primary_key=True, + serialize=False, + unique=True, + ), + ), + ( + "comment_file", + models.FileField( + blank=True, + null=True, + upload_to="CommentFiles", + verbose_name="File", + ), + ), + ( + "comment", + models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, to="common.comment" + ), + ), + ( + "created_by", + models.ForeignKey( + null=True, + on_delete=django.db.models.deletion.SET_NULL, + related_name="%(class)s_created_by", + to=settings.AUTH_USER_MODEL, + verbose_name="Created By", + ), + ), + ( + "updated_by", + models.ForeignKey( + null=True, + on_delete=django.db.models.deletion.SET_NULL, + related_name="%(class)s_updated_by", + to=settings.AUTH_USER_MODEL, + verbose_name="Last Modified By", + ), + ), + ], + options={ + "verbose_name": "CommentFile", + "verbose_name_plural": "CommentFiles", + "db_table": "commentFiles", + "ordering": ("-created_at",), + }, + ), + migrations.CreateModel( + name="Org", + fields=[ + ( + "created_at", + models.DateTimeField(auto_now_add=True, verbose_name="Created At"), + ), + ( + "updated_at", + models.DateTimeField( + auto_now=True, verbose_name="Last Modified At" + ), + ), + ( + "id", + models.UUIDField( + db_index=True, + default=uuid.uuid4, + editable=False, + primary_key=True, + serialize=False, + unique=True, + ), + ), + ("name", models.CharField(blank=True, max_length=100, null=True)), + ( + "api_key", + models.TextField( + default=common.models.generate_unique_key, + editable=False, + unique=True, + ), + ), + ("is_active", models.BooleanField(default=True)), + ( + "created_by", + models.ForeignKey( + null=True, + on_delete=django.db.models.deletion.SET_NULL, + related_name="%(class)s_created_by", + to=settings.AUTH_USER_MODEL, + verbose_name="Created By", + ), + ), + ( + "updated_by", + models.ForeignKey( + null=True, + on_delete=django.db.models.deletion.SET_NULL, + related_name="%(class)s_updated_by", + to=settings.AUTH_USER_MODEL, + verbose_name="Last Modified By", + ), + ), + ], + options={ + "verbose_name": "Organization", + "verbose_name_plural": "Organizations", + "db_table": "organization", + "ordering": ("-created_at",), + }, + ), + migrations.AddField( + model_name="comment", + name="org", + field=models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, + related_name="comments", + to="common.org", + ), + ), + migrations.CreateModel( + name="Address", + fields=[ + ( + "created_at", + models.DateTimeField(auto_now_add=True, verbose_name="Created At"), + ), + ( + "updated_at", + models.DateTimeField( + auto_now=True, verbose_name="Last Modified At" + ), + ), + ( + "id", + models.UUIDField( + db_index=True, + default=uuid.uuid4, + editable=False, + primary_key=True, + serialize=False, + unique=True, + ), + ), + ( + "address_line", + models.CharField( + blank=True, default="", max_length=255, verbose_name="Address" + ), + ), + ( + "street", + models.CharField( + blank=True, default="", max_length=55, verbose_name="Street" + ), + ), + ( + "city", + models.CharField( + blank=True, default="", max_length=255, verbose_name="City" + ), + ), + ( + "state", + models.CharField( + blank=True, default="", max_length=255, verbose_name="State" + ), + ), + ( + "postcode", + models.CharField( + blank=True, + default="", + max_length=64, + verbose_name="Post/Zip-code", + ), + ), + ( + "country", + models.CharField( + blank=True, + choices=[ + ("GB", "United Kingdom"), + ("AF", "Afghanistan"), + ("AX", "Aland Islands"), + ("AL", "Albania"), + ("DZ", "Algeria"), + ("AS", "American Samoa"), + ("AD", "Andorra"), + ("AO", "Angola"), + ("AI", "Anguilla"), + ("AQ", "Antarctica"), + ("AG", "Antigua and Barbuda"), + ("AR", "Argentina"), + ("AM", "Armenia"), + ("AW", "Aruba"), + ("AU", "Australia"), + ("AT", "Austria"), + ("AZ", "Azerbaijan"), + ("BS", "Bahamas"), + ("BH", "Bahrain"), + ("BD", "Bangladesh"), + ("BB", "Barbados"), + ("BY", "Belarus"), + ("BE", "Belgium"), + ("BZ", "Belize"), + ("BJ", "Benin"), + ("BM", "Bermuda"), + ("BT", "Bhutan"), + ("BO", "Bolivia"), + ("BA", "Bosnia and Herzegovina"), + ("BW", "Botswana"), + ("BV", "Bouvet Island"), + ("BR", "Brazil"), + ("IO", "British Indian Ocean Territory"), + ("BN", "Brunei Darussalam"), + ("BG", "Bulgaria"), + ("BF", "Burkina Faso"), + ("BI", "Burundi"), + ("KH", "Cambodia"), + ("CM", "Cameroon"), + ("CA", "Canada"), + ("CV", "Cape Verde"), + ("KY", "Cayman Islands"), + ("CF", "Central African Republic"), + ("TD", "Chad"), + ("CL", "Chile"), + ("CN", "China"), + ("CX", "Christmas Island"), + ("CC", "Cocos (Keeling) Islands"), + ("CO", "Colombia"), + ("KM", "Comoros"), + ("CG", "Congo"), + ("CD", "Congo, The Democratic Republic of the"), + ("CK", "Cook Islands"), + ("CR", "Costa Rica"), + ("CI", "Cote d'Ivoire"), + ("HR", "Croatia"), + ("CU", "Cuba"), + ("CY", "Cyprus"), + ("CZ", "Czech Republic"), + ("DK", "Denmark"), + ("DJ", "Djibouti"), + ("DM", "Dominica"), + ("DO", "Dominican Republic"), + ("EC", "Ecuador"), + ("EG", "Egypt"), + ("SV", "El Salvador"), + ("GQ", "Equatorial Guinea"), + ("ER", "Eritrea"), + ("EE", "Estonia"), + ("ET", "Ethiopia"), + ("FK", "Falkland Islands (Malvinas)"), + ("FO", "Faroe Islands"), + ("FJ", "Fiji"), + ("FI", "Finland"), + ("FR", "France"), + ("GF", "French Guiana"), + ("PF", "French Polynesia"), + ("TF", "French Southern Territories"), + ("GA", "Gabon"), + ("GM", "Gambia"), + ("GE", "Georgia"), + ("DE", "Germany"), + ("GH", "Ghana"), + ("GI", "Gibraltar"), + ("GR", "Greece"), + ("GL", "Greenland"), + ("GD", "Grenada"), + ("GP", "Guadeloupe"), + ("GU", "Guam"), + ("GT", "Guatemala"), + ("GG", "Guernsey"), + ("GN", "Guinea"), + ("GW", "Guinea-Bissau"), + ("GY", "Guyana"), + ("HT", "Haiti"), + ("HM", "Heard Island and McDonald Islands"), + ("VA", "Holy See (Vatican City State)"), + ("HN", "Honduras"), + ("HK", "Hong Kong"), + ("HU", "Hungary"), + ("IS", "Iceland"), + ("IN", "India"), + ("ID", "Indonesia"), + ("IR", "Iran, Islamic Republic of"), + ("IQ", "Iraq"), + ("IE", "Ireland"), + ("IM", "Isle of Man"), + ("IL", "Israel"), + ("IT", "Italy"), + ("JM", "Jamaica"), + ("JP", "Japan"), + ("JE", "Jersey"), + ("JO", "Jordan"), + ("KZ", "Kazakhstan"), + ("KE", "Kenya"), + ("KI", "Kiribati"), + ("KP", "Korea, Democratic People's Republic of"), + ("KR", "Korea, Republic of"), + ("KW", "Kuwait"), + ("KG", "Kyrgyzstan"), + ("LA", "Lao People's Democratic Republic"), + ("LV", "Latvia"), + ("LB", "Lebanon"), + ("LS", "Lesotho"), + ("LR", "Liberia"), + ("LY", "Libyan Arab Jamahiriya"), + ("LI", "Liechtenstein"), + ("LT", "Lithuania"), + ("LU", "Luxembourg"), + ("MO", "Macao"), + ("MK", "Macedonia, The Former Yugoslav Republic of"), + ("MG", "Madagascar"), + ("MW", "Malawi"), + ("MY", "Malaysia"), + ("MV", "Maldives"), + ("ML", "Mali"), + ("MT", "Malta"), + ("MH", "Marshall Islands"), + ("MQ", "Martinique"), + ("MR", "Mauritania"), + ("MU", "Mauritius"), + ("YT", "Mayotte"), + ("MX", "Mexico"), + ("FM", "Micronesia, Federated States of"), + ("MD", "Moldova"), + ("MC", "Monaco"), + ("MN", "Mongolia"), + ("ME", "Montenegro"), + ("MS", "Montserrat"), + ("MA", "Morocco"), + ("MZ", "Mozambique"), + ("MM", "Myanmar"), + ("NA", "Namibia"), + ("NR", "Nauru"), + ("NP", "Nepal"), + ("NL", "Netherlands"), + ("AN", "Netherlands Antilles"), + ("NC", "New Caledonia"), + ("NZ", "New Zealand"), + ("NI", "Nicaragua"), + ("NE", "Niger"), + ("NG", "Nigeria"), + ("NU", "Niue"), + ("NF", "Norfolk Island"), + ("MP", "Northern Mariana Islands"), + ("NO", "Norway"), + ("OM", "Oman"), + ("PK", "Pakistan"), + ("PW", "Palau"), + ("PS", "Palestinian Territory, Occupied"), + ("PA", "Panama"), + ("PG", "Papua New Guinea"), + ("PY", "Paraguay"), + ("PE", "Peru"), + ("PH", "Philippines"), + ("PN", "Pitcairn"), + ("PL", "Poland"), + ("PT", "Portugal"), + ("PR", "Puerto Rico"), + ("QA", "Qatar"), + ("RE", "Reunion"), + ("RO", "Romania"), + ("RU", "Russian Federation"), + ("RW", "Rwanda"), + ("BL", "Saint Barthelemy"), + ("SH", "Saint Helena"), + ("KN", "Saint Kitts and Nevis"), + ("LC", "Saint Lucia"), + ("MF", "Saint Martin"), + ("PM", "Saint Pierre and Miquelon"), + ("VC", "Saint Vincent and the Grenadines"), + ("WS", "Samoa"), + ("SM", "San Marino"), + ("ST", "Sao Tome and Principe"), + ("SA", "Saudi Arabia"), + ("SN", "Senegal"), + ("RS", "Serbia"), + ("SC", "Seychelles"), + ("SL", "Sierra Leone"), + ("SG", "Singapore"), + ("SK", "Slovakia"), + ("SI", "Slovenia"), + ("SB", "Solomon Islands"), + ("SO", "Somalia"), + ("ZA", "South Africa"), + ("GS", "South Georgia and the South Sandwich Islands"), + ("ES", "Spain"), + ("LK", "Sri Lanka"), + ("SD", "Sudan"), + ("SR", "Suriname"), + ("SJ", "Svalbard and Jan Mayen"), + ("SZ", "Swaziland"), + ("SE", "Sweden"), + ("CH", "Switzerland"), + ("SY", "Syrian Arab Republic"), + ("TW", "Taiwan, Province of China"), + ("TJ", "Tajikistan"), + ("TZ", "Tanzania, United Republic of"), + ("TH", "Thailand"), + ("TL", "Timor-Leste"), + ("TG", "Togo"), + ("TK", "Tokelau"), + ("TO", "Tonga"), + ("TT", "Trinidad and Tobago"), + ("TN", "Tunisia"), + ("TR", "Turkey"), + ("TM", "Turkmenistan"), + ("TC", "Turks and Caicos Islands"), + ("TV", "Tuvalu"), + ("UG", "Uganda"), + ("UA", "Ukraine"), + ("AE", "United Arab Emirates"), + ("US", "United States"), + ("UM", "United States Minor Outlying Islands"), + ("UY", "Uruguay"), + ("UZ", "Uzbekistan"), + ("VU", "Vanuatu"), + ("VE", "Venezuela"), + ("VN", "Viet Nam"), + ("VG", "Virgin Islands, British"), + ("VI", "Virgin Islands, U.S."), + ("WF", "Wallis and Futuna"), + ("EH", "Western Sahara"), + ("YE", "Yemen"), + ("ZM", "Zambia"), + ("ZW", "Zimbabwe"), + ], + default="", + max_length=3, + ), + ), + ( + "created_by", + models.ForeignKey( + null=True, + on_delete=django.db.models.deletion.SET_NULL, + related_name="%(class)s_created_by", + to=settings.AUTH_USER_MODEL, + verbose_name="Created By", + ), + ), + ( + "updated_by", + models.ForeignKey( + null=True, + on_delete=django.db.models.deletion.SET_NULL, + related_name="%(class)s_updated_by", + to=settings.AUTH_USER_MODEL, + verbose_name="Last Modified By", + ), + ), + ( + "org", + models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, + related_name="addresses", + to="common.org", + ), + ), + ], + options={ + "verbose_name": "Address", + "verbose_name_plural": "Addresses", + "db_table": "address", + "ordering": ("-created_at",), + }, + ), + migrations.CreateModel( + name="Profile", + fields=[ + ( + "created_at", + models.DateTimeField(auto_now_add=True, verbose_name="Created At"), + ), + ( + "updated_at", + models.DateTimeField( + auto_now=True, verbose_name="Last Modified At" + ), + ), + ( + "id", + models.UUIDField( + db_index=True, + default=uuid.uuid4, + editable=False, + primary_key=True, + serialize=False, + unique=True, + ), + ), + ( + "phone", + phonenumber_field.modelfields.PhoneNumberField( + blank=True, max_length=128, null=True, region=None + ), + ), + ( + "alternate_phone", + phonenumber_field.modelfields.PhoneNumberField( + blank=True, max_length=128, null=True, region=None + ), + ), + ( + "role", + models.CharField( + choices=[("ADMIN", "ADMIN"), ("USER", "USER")], + default="USER", + max_length=50, + ), + ), + ("has_sales_access", models.BooleanField(default=False)), + ("has_marketing_access", models.BooleanField(default=False)), + ("is_active", models.BooleanField(default=True)), + ("is_organization_admin", models.BooleanField(default=False)), + ("date_of_joining", models.DateField(blank=True, null=True)), + ( + "address", + models.ForeignKey( + blank=True, + null=True, + on_delete=django.db.models.deletion.CASCADE, + related_name="address_users", + to="common.address", + ), + ), + ( + "created_by", + models.ForeignKey( + null=True, + on_delete=django.db.models.deletion.SET_NULL, + related_name="%(class)s_created_by", + to=settings.AUTH_USER_MODEL, + verbose_name="Created By", + ), + ), + ( + "org", + models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, + related_name="profiles", + to="common.org", + ), + ), + ( + "updated_by", + models.ForeignKey( + null=True, + on_delete=django.db.models.deletion.SET_NULL, + related_name="%(class)s_updated_by", + to=settings.AUTH_USER_MODEL, + verbose_name="Last Modified By", + ), + ), + ( + "user", + models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, + related_name="profiles", + to=settings.AUTH_USER_MODEL, + ), + ), + ], + options={ + "verbose_name": "Profile", + "verbose_name_plural": "Profiles", + "db_table": "profile", + "ordering": ("-created_at",), + "unique_together": {("phone", "org"), ("user", "org")}, + }, + ), + migrations.AddField( + model_name="comment", + name="commented_by", + field=models.ForeignKey( + blank=True, + null=True, + on_delete=django.db.models.deletion.CASCADE, + to="common.profile", + ), + ), + migrations.CreateModel( + name="Activity", + fields=[ + ( + "created_at", + models.DateTimeField(auto_now_add=True, verbose_name="Created At"), + ), + ( + "updated_at", + models.DateTimeField( + auto_now=True, verbose_name="Last Modified At" + ), + ), + ( + "id", + models.UUIDField( + db_index=True, + default=uuid.uuid4, + editable=False, + primary_key=True, + serialize=False, + unique=True, + ), + ), + ( + "action", + models.CharField( + choices=[ + ("CREATE", "Created"), + ("UPDATE", "Updated"), + ("DELETE", "Deleted"), + ("VIEW", "Viewed"), + ("COMMENT", "Commented"), + ("ASSIGN", "Assigned"), + ], + max_length=20, + ), + ), + ( + "entity_type", + models.CharField( + choices=[ + ("Account", "Account"), + ("Lead", "Lead"), + ("Contact", "Contact"), + ("Opportunity", "Opportunity"), + ("Case", "Case"), + ("Task", "Task"), + ("Invoice", "Invoice"), + ("Event", "Event"), + ("Document", "Document"), + ("Team", "Team"), + ], + max_length=50, + ), + ), + ("entity_id", models.UUIDField()), + ( + "entity_name", + models.CharField(blank=True, default="", max_length=255), + ), + ("description", models.TextField(blank=True, default="")), + ( + "created_by", + models.ForeignKey( + null=True, + on_delete=django.db.models.deletion.SET_NULL, + related_name="%(class)s_created_by", + to=settings.AUTH_USER_MODEL, + verbose_name="Created By", + ), + ), + ( + "updated_by", + models.ForeignKey( + null=True, + on_delete=django.db.models.deletion.SET_NULL, + related_name="%(class)s_updated_by", + to=settings.AUTH_USER_MODEL, + verbose_name="Last Modified By", + ), + ), + ( + "org", + models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, + related_name="activities", + to="common.org", + ), + ), + ( + "user", + models.ForeignKey( + blank=True, + null=True, + on_delete=django.db.models.deletion.SET_NULL, + related_name="activities", + to="common.profile", + ), + ), + ], + options={ + "verbose_name": "Activity", + "verbose_name_plural": "Activities", + "db_table": "activity", + "ordering": ("-created_at",), + }, + ), + migrations.CreateModel( + name="SecurityAuditLog", + fields=[ + ( + "created_at", + models.DateTimeField(auto_now_add=True, verbose_name="Created At"), + ), + ( + "updated_at", + models.DateTimeField( + auto_now=True, verbose_name="Last Modified At" + ), + ), + ( + "id", + models.UUIDField( + db_index=True, + default=uuid.uuid4, + editable=False, + primary_key=True, + serialize=False, + unique=True, + ), + ), + ( + "event_type", + models.CharField( + choices=[ + ("LOGIN_SUCCESS", "Login Success"), + ("LOGIN_FAILURE", "Login Failure"), + ("LOGOUT", "Logout"), + ("ORG_SWITCH", "Organization Switch"), + ("TOKEN_REFRESH", "Token Refresh"), + ("TOKEN_REVOKED", "Token Revoked"), + ("PERMISSION_DENIED", "Permission Denied"), + ("CROSS_ORG_ATTEMPT", "Cross-Org Access Attempt"), + ("API_KEY_USED", "API Key Used"), + ("API_KEY_INVALID", "Invalid API Key"), + ("MEMBERSHIP_REVOKED", "Membership Revoked"), + ("SUSPICIOUS_ACTIVITY", "Suspicious Activity"), + ], + db_index=True, + max_length=50, + ), + ), + ("description", models.TextField(blank=True, default="")), + ("metadata", models.JSONField(blank=True, default=dict)), + ("ip_address", models.GenericIPAddressField(blank=True, null=True)), + ("user_agent", models.TextField(blank=True, default="")), + ( + "request_path", + models.CharField(blank=True, default="", max_length=500), + ), + ( + "request_method", + models.CharField(blank=True, default="", max_length=10), + ), + ("success", models.BooleanField(default=True)), + ( + "created_by", + models.ForeignKey( + null=True, + on_delete=django.db.models.deletion.SET_NULL, + related_name="%(class)s_created_by", + to=settings.AUTH_USER_MODEL, + verbose_name="Created By", + ), + ), + ( + "org", + models.ForeignKey( + blank=True, + null=True, + on_delete=django.db.models.deletion.SET_NULL, + related_name="security_audit_logs", + to="common.org", + ), + ), + ( + "updated_by", + models.ForeignKey( + null=True, + on_delete=django.db.models.deletion.SET_NULL, + related_name="%(class)s_updated_by", + to=settings.AUTH_USER_MODEL, + verbose_name="Last Modified By", + ), + ), + ( + "user", + models.ForeignKey( + blank=True, + null=True, + on_delete=django.db.models.deletion.SET_NULL, + related_name="security_audit_logs", + to=settings.AUTH_USER_MODEL, + ), + ), + ], + options={ + "verbose_name": "Security Audit Log", + "verbose_name_plural": "Security Audit Logs", + "db_table": "security_audit_log", + "ordering": ("-created_at",), + }, + ), + migrations.CreateModel( + name="SessionToken", + fields=[ + ( + "created_at", + models.DateTimeField(auto_now_add=True, verbose_name="Created At"), + ), + ( + "updated_at", + models.DateTimeField( + auto_now=True, verbose_name="Last Modified At" + ), + ), + ( + "id", + models.UUIDField( + db_index=True, + default=uuid.uuid4, + editable=False, + primary_key=True, + serialize=False, + unique=True, + ), + ), + ( + "token_jti", + models.CharField(db_index=True, max_length=255, unique=True), + ), + ( + "refresh_token_jti", + models.CharField( + blank=True, + db_index=True, + max_length=255, + null=True, + unique=True, + ), + ), + ("ip_address", models.GenericIPAddressField(blank=True, null=True)), + ("user_agent", models.TextField(blank=True, null=True)), + ("expires_at", models.DateTimeField()), + ("is_active", models.BooleanField(default=True)), + ("revoked_at", models.DateTimeField(blank=True, null=True)), + ("last_used_at", models.DateTimeField(auto_now=True)), + ( + "created_by", + models.ForeignKey( + null=True, + on_delete=django.db.models.deletion.SET_NULL, + related_name="%(class)s_created_by", + to=settings.AUTH_USER_MODEL, + verbose_name="Created By", + ), + ), + ( + "updated_by", + models.ForeignKey( + null=True, + on_delete=django.db.models.deletion.SET_NULL, + related_name="%(class)s_updated_by", + to=settings.AUTH_USER_MODEL, + verbose_name="Last Modified By", + ), + ), + ( + "user", + models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, + related_name="session_tokens", + to=settings.AUTH_USER_MODEL, + ), + ), + ], + options={ + "verbose_name": "Session Token", + "verbose_name_plural": "Session Tokens", + "db_table": "session_token", + "ordering": ("-created_at",), + }, + ), + migrations.CreateModel( + name="Tags", + fields=[ + ( + "created_at", + models.DateTimeField(auto_now_add=True, verbose_name="Created At"), + ), + ( + "updated_at", + models.DateTimeField( + auto_now=True, verbose_name="Last Modified At" + ), + ), + ( + "id", + models.UUIDField( + db_index=True, + default=uuid.uuid4, + editable=False, + primary_key=True, + serialize=False, + unique=True, + ), + ), + ("name", models.CharField(max_length=20)), + ("slug", models.CharField(blank=True, max_length=20)), + ( + "created_by", + models.ForeignKey( + null=True, + on_delete=django.db.models.deletion.SET_NULL, + related_name="%(class)s_created_by", + to=settings.AUTH_USER_MODEL, + verbose_name="Created By", + ), + ), + ( + "org", + models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, + related_name="tags", + to="common.org", + ), + ), + ( + "updated_by", + models.ForeignKey( + null=True, + on_delete=django.db.models.deletion.SET_NULL, + related_name="%(class)s_updated_by", + to=settings.AUTH_USER_MODEL, + verbose_name="Last Modified By", + ), + ), + ], + options={ + "verbose_name": "Tag", + "verbose_name_plural": "Tags", + "db_table": "tags", + "ordering": ("-created_at",), + }, + ), + migrations.CreateModel( + name="APISettings", + fields=[ + ( + "created_at", + models.DateTimeField(auto_now_add=True, verbose_name="Created At"), + ), + ( + "updated_at", + models.DateTimeField( + auto_now=True, verbose_name="Last Modified At" + ), + ), + ( + "id", + models.UUIDField( + db_index=True, + default=uuid.uuid4, + editable=False, + primary_key=True, + serialize=False, + unique=True, + ), + ), + ("title", models.TextField()), + ("apikey", models.CharField(blank=True, max_length=16)), + ("website", models.URLField(max_length=255, null=True)), + ( + "created_by", + models.ForeignKey( + null=True, + on_delete=django.db.models.deletion.SET_NULL, + related_name="%(class)s_created_by", + to=settings.AUTH_USER_MODEL, + verbose_name="Created By", + ), + ), + ( + "updated_by", + models.ForeignKey( + null=True, + on_delete=django.db.models.deletion.SET_NULL, + related_name="%(class)s_updated_by", + to=settings.AUTH_USER_MODEL, + verbose_name="Last Modified By", + ), + ), + ( + "org", + models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, + related_name="api_settings", + to="common.org", + ), + ), + ( + "lead_assigned_to", + models.ManyToManyField( + related_name="lead_assignee_users", to="common.profile" + ), + ), + ("tags", models.ManyToManyField(blank=True, to="common.tags")), + ], + options={ + "verbose_name": "APISetting", + "verbose_name_plural": "APISettings", + "db_table": "apiSettings", + "ordering": ("-created_at",), + }, + ), + migrations.CreateModel( + name="Teams", + fields=[ + ( + "created_at", + models.DateTimeField(auto_now_add=True, verbose_name="Created At"), + ), + ( + "updated_at", + models.DateTimeField( + auto_now=True, verbose_name="Last Modified At" + ), + ), + ( + "id", + models.UUIDField( + db_index=True, + default=uuid.uuid4, + editable=False, + primary_key=True, + serialize=False, + unique=True, + ), + ), + ("name", models.CharField(max_length=100)), + ("description", models.TextField()), + ( + "created_by", + models.ForeignKey( + null=True, + on_delete=django.db.models.deletion.SET_NULL, + related_name="%(class)s_created_by", + to=settings.AUTH_USER_MODEL, + verbose_name="Created By", + ), + ), + ( + "org", + models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, + related_name="teams", + to="common.org", + ), + ), + ( + "updated_by", + models.ForeignKey( + null=True, + on_delete=django.db.models.deletion.SET_NULL, + related_name="%(class)s_updated_by", + to=settings.AUTH_USER_MODEL, + verbose_name="Last Modified By", + ), + ), + ( + "users", + models.ManyToManyField( + related_name="user_teams", to="common.profile" + ), + ), + ], + options={ + "verbose_name": "Team", + "verbose_name_plural": "Teams", + "db_table": "teams", + "ordering": ("-created_at",), + }, + ), + migrations.CreateModel( + name="Document", + fields=[ + ( + "created_at", + models.DateTimeField(auto_now_add=True, verbose_name="Created At"), + ), + ( + "updated_at", + models.DateTimeField( + auto_now=True, verbose_name="Last Modified At" + ), + ), + ( + "id", + models.UUIDField( + db_index=True, + default=uuid.uuid4, + editable=False, + primary_key=True, + serialize=False, + unique=True, + ), + ), + ("title", models.TextField(blank=True, null=True)), + ( + "document_file", + models.FileField( + max_length=5000, upload_to=common.models.document_path + ), + ), + ( + "status", + models.CharField( + choices=[("active", "active"), ("inactive", "inactive")], + default="active", + max_length=64, + ), + ), + ( + "created_by", + models.ForeignKey( + null=True, + on_delete=django.db.models.deletion.SET_NULL, + related_name="%(class)s_created_by", + to=settings.AUTH_USER_MODEL, + verbose_name="Created By", + ), + ), + ( + "updated_by", + models.ForeignKey( + null=True, + on_delete=django.db.models.deletion.SET_NULL, + related_name="%(class)s_updated_by", + to=settings.AUTH_USER_MODEL, + verbose_name="Last Modified By", + ), + ), + ( + "org", + models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, + related_name="documents", + to="common.org", + ), + ), + ( + "shared_to", + models.ManyToManyField( + related_name="document_shared_to", to="common.profile" + ), + ), + ( + "teams", + models.ManyToManyField( + related_name="document_teams", to="common.teams" + ), + ), + ], + options={ + "verbose_name": "Document", + "verbose_name_plural": "Documents", + "db_table": "document", + "ordering": ("-created_at",), + }, + ), + migrations.CreateModel( + name="ContactFormSubmission", + fields=[ + ( + "created_at", + models.DateTimeField(auto_now_add=True, verbose_name="Created At"), + ), + ( + "updated_at", + models.DateTimeField( + auto_now=True, verbose_name="Last Modified At" + ), + ), + ( + "id", + models.UUIDField( + db_index=True, + default=uuid.uuid4, + editable=False, + primary_key=True, + serialize=False, + unique=True, + ), + ), + ("name", models.CharField(max_length=255)), + ("email", models.EmailField(max_length=254)), + ("message", models.TextField()), + ( + "reason", + models.CharField( + choices=[ + ("general", "General Inquiry"), + ("sales", "Sales Question"), + ("support", "Technical Support"), + ("partnership", "Partnership Opportunity"), + ("other", "Other"), + ], + default="general", + max_length=100, + ), + ), + ("ip_address", models.GenericIPAddressField(blank=True, null=True)), + ("user_agent", models.TextField(blank=True, null=True)), + ("referrer", models.URLField(blank=True, max_length=500, null=True)), + ( + "status", + models.CharField( + choices=[ + ("new", "New"), + ("read", "Read"), + ("replied", "Replied"), + ("closed", "Closed"), + ], + default="new", + max_length=20, + ), + ), + ("replied_at", models.DateTimeField(blank=True, null=True)), + ( + "created_by", + models.ForeignKey( + null=True, + on_delete=django.db.models.deletion.SET_NULL, + related_name="%(class)s_created_by", + to=settings.AUTH_USER_MODEL, + verbose_name="Created By", + ), + ), + ( + "replied_by", + models.ForeignKey( + blank=True, + null=True, + on_delete=django.db.models.deletion.SET_NULL, + related_name="contact_replies", + to=settings.AUTH_USER_MODEL, + ), + ), + ( + "updated_by", + models.ForeignKey( + null=True, + on_delete=django.db.models.deletion.SET_NULL, + related_name="%(class)s_updated_by", + to=settings.AUTH_USER_MODEL, + verbose_name="Last Modified By", + ), + ), + ], + options={ + "verbose_name": "Contact Form Submission", + "verbose_name_plural": "Contact Form Submissions", + "db_table": "contact_form_submission", + "ordering": ["-created_at"], + "indexes": [ + models.Index(fields=["email"], name="contact_for_email_534ce8_idx"), + models.Index( + fields=["status"], name="contact_for_status_b48047_idx" + ), + models.Index( + fields=["created_at"], name="contact_for_created_f54fb1_idx" + ), + ], + }, + ), + migrations.CreateModel( + name="Attachments", + fields=[ + ( + "created_at", + models.DateTimeField(auto_now_add=True, verbose_name="Created At"), + ), + ( + "updated_at", + models.DateTimeField( + auto_now=True, verbose_name="Last Modified At" + ), + ), + ( + "id", + models.UUIDField( + db_index=True, + default=uuid.uuid4, + editable=False, + primary_key=True, + serialize=False, + unique=True, + ), + ), + ("object_id", models.UUIDField()), + ("file_name", models.CharField(max_length=60)), + ( + "attachment", + models.FileField(max_length=1001, upload_to="attachments/%Y/%m/"), + ), + ( + "content_type", + models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, + related_name="attachments", + to="contenttypes.contenttype", + ), + ), + ( + "created_by", + models.ForeignKey( + null=True, + on_delete=django.db.models.deletion.SET_NULL, + related_name="%(class)s_created_by", + to=settings.AUTH_USER_MODEL, + verbose_name="Created By", + ), + ), + ( + "updated_by", + models.ForeignKey( + null=True, + on_delete=django.db.models.deletion.SET_NULL, + related_name="%(class)s_updated_by", + to=settings.AUTH_USER_MODEL, + verbose_name="Last Modified By", + ), + ), + ( + "org", + models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, + related_name="attachments", + to="common.org", + ), + ), + ], + options={ + "verbose_name": "Attachment", + "verbose_name_plural": "Attachments", + "db_table": "attachments", + "ordering": ("-created_at",), + "indexes": [ + models.Index( + fields=["content_type", "object_id"], + name="attachments_content_7c0e26_idx", + ), + models.Index( + fields=["org", "-created_at"], + name="attachments_org_id_432f7a_idx", + ), + ], + }, + ), + migrations.AddIndex( + model_name="comment", + index=models.Index( + fields=["content_type", "object_id"], name="comment_content_3076b0_idx" + ), + ), + migrations.AddIndex( + model_name="comment", + index=models.Index( + fields=["org", "-created_at"], name="comment_org_id_ae4e49_idx" + ), + ), + migrations.AddIndex( + model_name="activity", + index=models.Index( + fields=["org", "-created_at"], name="activity_org_id_832f39_idx" + ), + ), + migrations.AddIndex( + model_name="activity", + index=models.Index( + fields=["entity_type", "entity_id"], name="activity_entity__e33c9a_idx" + ), + ), + migrations.AddIndex( + model_name="securityauditlog", + index=models.Index( + fields=["event_type", "-created_at"], + name="security_au_event_t_5c4296_idx", + ), + ), + migrations.AddIndex( + model_name="securityauditlog", + index=models.Index( + fields=["user", "-created_at"], name="security_au_user_id_ab6fd5_idx" + ), + ), + migrations.AddIndex( + model_name="securityauditlog", + index=models.Index( + fields=["org", "-created_at"], name="security_au_org_id_d5d1da_idx" + ), + ), + migrations.AddIndex( + model_name="securityauditlog", + index=models.Index( + fields=["ip_address"], name="security_au_ip_addr_a572f5_idx" + ), + ), + migrations.AddIndex( + model_name="securityauditlog", + index=models.Index( + fields=["success", "-created_at"], name="security_au_success_c444de_idx" + ), + ), + migrations.AddIndex( + model_name="sessiontoken", + index=models.Index( + fields=["user", "is_active"], name="session_tok_user_id_ce3d01_idx" + ), + ), + migrations.AddIndex( + model_name="sessiontoken", + index=models.Index( + fields=["token_jti"], name="session_tok_token_j_a0ab6c_idx" + ), + ), + migrations.AddIndex( + model_name="sessiontoken", + index=models.Index( + fields=["expires_at"], name="session_tok_expires_08e0bc_idx" + ), + ), + migrations.AlterUniqueTogether( + name="tags", + unique_together={("slug", "org")}, + ), + ] diff --git a/backend/common/migrations/0002_enable_rls.py b/backend/common/migrations/0002_enable_rls.py new file mode 100644 index 00000000..2d269978 --- /dev/null +++ b/backend/common/migrations/0002_enable_rls.py @@ -0,0 +1,119 @@ +# Row-Level Security (RLS) Migration +# Enables PostgreSQL RLS on all org-scoped tables for multi-tenant isolation +# +# RLS Configuration: See common/rls/__init__.py for centralized policy definitions + +from django.db import migrations + +from common.rls import ( + RLS_CONFIG, + get_check_table_exists_sql, + get_disable_policy_sql, + get_enable_policy_sql, +) + + +def check_column_exists(cursor, table, column): + """Check if a column exists in a table.""" + cursor.execute( + """ + SELECT EXISTS ( + SELECT FROM information_schema.columns + WHERE table_schema = 'public' + AND table_name = %s + AND column_name = %s + ) + """, + [table, column], + ) + return cursor.fetchone()[0] + + +def enable_rls(apps, schema_editor): + """Enable RLS on all org-scoped tables.""" + if schema_editor.connection.vendor != "postgresql": + print("RLS is only supported on PostgreSQL. Skipping.") + return + + isolation_policy = RLS_CONFIG["policies"]["isolation"] + + with schema_editor.connection.cursor() as cursor: + for table in RLS_CONFIG["tables"]: + # Check if table exists + cursor.execute(get_check_table_exists_sql(), [table]) + if not cursor.fetchone()[0]: + print(f" Skipping {table} (table does not exist)") + continue + + # Check if org_id column exists + if not check_column_exists(cursor, table, "org_id"): + print(f" Skipping {table} (no org_id column)") + continue + + # Check if policy already exists + cursor.execute( + """ + SELECT COUNT(*) FROM pg_policies + WHERE tablename = %s AND policyname = %s + """, + [table, isolation_policy], + ) + + if cursor.fetchone()[0] == 0: + cursor.execute(get_enable_policy_sql(table)) + print(f" Enabled RLS on {table}") + else: + print(f" RLS already enabled on {table}") + + +def disable_rls(apps, schema_editor): + """Disable RLS on all org-scoped tables (rollback).""" + if schema_editor.connection.vendor != "postgresql": + return + + with schema_editor.connection.cursor() as cursor: + for table in RLS_CONFIG["tables"]: + cursor.execute(get_check_table_exists_sql(), [table]) + if not cursor.fetchone()[0]: + continue + + if not check_column_exists(cursor, table, "org_id"): + continue + + cursor.execute(get_disable_policy_sql(table)) + print(f" Disabled RLS on {table}") + + +class Migration(migrations.Migration): + """ + Enable Row-Level Security (RLS) on all organization-scoped tables. + + This provides database-level isolation ensuring that: + 1. Queries automatically filter by current org + 2. Even if application code misses a filter, data is protected + 3. Direct SQL access respects org boundaries + + Prerequisites: + - PostgreSQL 9.5+ + - Database user must NOT be a superuser (superusers bypass RLS) + - Application must set app.current_org before queries + + Configuration: + - Table list and policy SQL are defined in common/rls/__init__.py + - Use `python manage.py manage_rls --status` to check RLS status + """ + + dependencies = [ + ("common", "0001_initial"), + ("accounts", "0002_initial"), + ("cases", "0002_initial"), + ("contacts", "0001_initial"), + ("invoices", "0001_initial"), + ("leads", "0001_initial"), + ("opportunity", "0001_initial"), + ("tasks", "0001_initial"), + ] + + operations = [ + migrations.RunPython(enable_rls, disable_rls), + ] diff --git a/common/migrations/__init__.py b/backend/common/migrations/__init__.py similarity index 100% rename from common/migrations/__init__.py rename to backend/common/migrations/__init__.py diff --git a/backend/common/mixins.py b/backend/common/mixins.py new file mode 100644 index 00000000..cc15149e --- /dev/null +++ b/backend/common/mixins.py @@ -0,0 +1,422 @@ +# Python imports +import uuid + +# Django imports +from common.models import models + + +class TimeAuditModel(models.Model): + """To path when the record was created and last modified""" + + created_at = models.DateTimeField( + auto_now_add=True, + verbose_name="Created At", + ) + updated_at = models.DateTimeField(auto_now=True, verbose_name="Last Modified At") + + class Meta: + abstract = True + + +class UserAuditModel(models.Model): + """To path when the record was created and last modified""" + + created_by = models.ForeignKey( + "common.User", + on_delete=models.SET_NULL, + related_name="%(class)s_created_by", + verbose_name="Created By", + null=True, + ) + updated_by = models.ForeignKey( + "common.User", + on_delete=models.SET_NULL, + related_name="%(class)s_updated_by", + verbose_name="Last Modified By", + null=True, + ) + + class Meta: + abstract = True + + +class AuditModel(TimeAuditModel, UserAuditModel): + """To path when the record was created and last modified""" + + class Meta: + abstract = True + + +# ============================================================================= +# View Mixins for Organization-Scoped Access +# ============================================================================= + +from django.db.models import Q +from rest_framework.exceptions import NotFound, PermissionDenied + + +class OrgFilterMixin: + """ + Mixin for API views that automatically filters querysets by organization. + + Usage: + class LeadListView(OrgFilterMixin, APIView): + model = Lead + + def get(self, request): + queryset = self.get_org_queryset() + # queryset is already filtered by org + """ + + model = None # Override in subclass + + def get_org_queryset(self): + """ + Get queryset filtered by the user's organization. + + Returns: + QuerySet filtered by org, or empty queryset if no org context + """ + if not hasattr(self, "model") or self.model is None: + raise NotImplementedError("OrgFilterMixin requires 'model' attribute") + + if not hasattr(self.request, "profile") or self.request.profile is None: + return self.model.objects.none() + + return self.model.objects.filter(org=self.request.profile.org) + + def get_org_object(self, pk): + """ + Get a single object by pk, ensuring it belongs to user's org. + + Args: + pk: Primary key of the object + + Returns: + Model instance + + Raises: + NotFound: If object doesn't exist or belongs to different org + """ + try: + obj = self.model.objects.get(pk=pk) + except self.model.DoesNotExist: + raise NotFound(f"{self.model.__name__} not found") + + # Verify org ownership + if hasattr(obj, "org_id"): + if obj.org_id != self.request.profile.org_id: + raise NotFound(f"{self.model.__name__} not found") + + return obj + + def filter_by_role(self, queryset): + """ + Apply role-based filtering to queryset. + + Admins see all org data, users see only assigned/created items. + + Args: + queryset: QuerySet already filtered by org + + Returns: + QuerySet with role-based filtering applied + """ + if self.request.profile.role == "ADMIN": + return queryset + + # Non-admins see items they created or are assigned to + filters = Q(created_by=self.request.profile.user) + + if hasattr(self.model, "assigned_to"): + filters |= Q(assigned_to=self.request.profile) + + if hasattr(self.model, "teams"): + user_team_ids = self.request.profile.user_teams.values_list("id", flat=True) + filters |= Q(teams__id__in=user_team_ids) + + return queryset.filter(filters).distinct() + + +class OrgCreateMixin: + """ + Mixin for API views that automatically sets org on object creation. + + Usage: + class LeadCreateView(OrgCreateMixin, APIView): + model = Lead + serializer_class = LeadSerializer + + def post(self, request): + serializer = self.serializer_class(data=request.data) + if serializer.is_valid(): + instance = self.perform_org_create(serializer) + return Response(...) + """ + + def perform_org_create(self, serializer): + """ + Save serializer with org and created_by set automatically. + + Args: + serializer: Valid serializer instance + + Returns: + Created model instance + """ + return serializer.save( + org=self.request.profile.org, created_by=self.request.profile.user + ) + + def get_org_context(self): + """ + Get org-related context for serializer. + + Returns: + Dict with org and profile for serializer context + """ + return { + "org": self.request.profile.org, + "profile": self.request.profile, + "user": self.request.profile.user, + } + + +class OrgUpdateMixin: + """ + Mixin for API views that validates org ownership on update. + + Usage: + class LeadUpdateView(OrgUpdateMixin, OrgFilterMixin, APIView): + model = Lead + + def put(self, request, pk): + instance = self.get_org_object(pk) + self.validate_update_permission(instance) + # proceed with update + """ + + def validate_update_permission(self, instance): + """ + Validate user has permission to update this instance. + + Args: + instance: Model instance to update + + Raises: + PermissionDenied: If user cannot update this instance + """ + # Verify org ownership + if hasattr(instance, "org_id"): + if instance.org_id != self.request.profile.org_id: + raise PermissionDenied("Cannot update object from another organization") + + # Admins can update anything in their org + if self.request.profile.role == "ADMIN": + return + + # Check if user created the object + if hasattr(instance, "created_by_id"): + if instance.created_by_id == self.request.profile.user_id: + return + + # Check if user is assigned + if hasattr(instance, "assigned_to"): + if self.request.profile in instance.assigned_to.all(): + return + + raise PermissionDenied("You don't have permission to update this object") + + +class OrgDeleteMixin: + """ + Mixin for API views that validates org ownership on delete. + + Usage: + class LeadDeleteView(OrgDeleteMixin, OrgFilterMixin, APIView): + model = Lead + + def delete(self, request, pk): + instance = self.get_org_object(pk) + self.validate_delete_permission(instance) + instance.delete() + """ + + def validate_delete_permission(self, instance): + """ + Validate user has permission to delete this instance. + + Args: + instance: Model instance to delete + + Raises: + PermissionDenied: If user cannot delete this instance + """ + # Verify org ownership + if hasattr(instance, "org_id"): + if instance.org_id != self.request.profile.org_id: + raise PermissionDenied("Cannot delete object from another organization") + + # Only admins and creators can delete + if self.request.profile.role == "ADMIN": + return + + if hasattr(instance, "created_by_id"): + if instance.created_by_id == self.request.profile.user_id: + return + + raise PermissionDenied("You don't have permission to delete this object") + + +class OrgViewMixin(OrgFilterMixin, OrgCreateMixin, OrgUpdateMixin, OrgDeleteMixin): + """ + Combined mixin for standard CRUD operations with org isolation. + + Usage: + class LeadView(OrgViewMixin, APIView): + model = Lead + serializer_class = LeadSerializer + + def get(self, request, pk=None): + if pk: + instance = self.get_org_object(pk) + return Response(self.serializer_class(instance).data) + queryset = self.filter_by_role(self.get_org_queryset()) + return Response(self.serializer_class(queryset, many=True).data) + + def post(self, request): + serializer = self.serializer_class(data=request.data) + if serializer.is_valid(): + instance = self.perform_org_create(serializer) + return Response(self.serializer_class(instance).data) + + def put(self, request, pk): + instance = self.get_org_object(pk) + self.validate_update_permission(instance) + serializer = self.serializer_class(instance, data=request.data) + if serializer.is_valid(): + serializer.save() + return Response(serializer.data) + + def delete(self, request, pk): + instance = self.get_org_object(pk) + self.validate_delete_permission(instance) + instance.delete() + return Response(status=204) + """ + + pass + + +class ActivityTrackingMixin: + """ + Mixin to automatically track activities on CRUD operations. + + Usage: + class LeadView(ActivityTrackingMixin, OrgViewMixin, APIView): + model = Lead + entity_type = 'Lead' + """ + + entity_type = None # Override in subclass + + def track_activity(self, action, instance, description=""): + """ + Create an activity record for the action. + + Args: + action: Action type (CREATE, UPDATE, DELETE, VIEW) + instance: Model instance + description: Optional description + """ + from common.models import Activity + + if not self.entity_type: + return + + entity_name = "" + if hasattr(instance, "name"): + entity_name = instance.name + elif hasattr(instance, "title"): + entity_name = instance.title + elif hasattr(instance, "first_name"): + entity_name = f"{instance.first_name} {getattr(instance, 'last_name', '')}" + + Activity.objects.create( + user=self.request.profile, + action=action, + entity_type=self.entity_type, + entity_id=instance.id, + entity_name=entity_name[:255], + description=description[:500] if description else "", + org=self.request.profile.org, + ) + + +class BulkOperationMixin: + """ + Mixin for bulk operations with org validation. + + Usage: + class LeadBulkView(BulkOperationMixin, OrgFilterMixin, APIView): + model = Lead + + def post(self, request): + ids = request.data.get('ids', []) + instances = self.get_bulk_objects(ids) + # perform bulk operation + """ + + def get_bulk_objects(self, ids): + """ + Get multiple objects by ids, ensuring all belong to user's org. + + Args: + ids: List of primary keys + + Returns: + QuerySet of objects + + Raises: + PermissionDenied: If any object belongs to different org + """ + queryset = self.model.objects.filter(pk__in=ids) + + # Verify all objects belong to user's org + for obj in queryset: + if hasattr(obj, "org_id"): + if obj.org_id != self.request.profile.org_id: + raise PermissionDenied( + "One or more objects do not belong to your organization" + ) + + return queryset + + def bulk_update(self, ids, update_data): + """ + Bulk update objects with org validation. + + Args: + ids: List of primary keys + update_data: Dict of fields to update + + Returns: + Number of updated objects + """ + queryset = self.get_bulk_objects(ids) + return queryset.update(**update_data) + + def bulk_delete(self, ids): + """ + Bulk delete objects with org validation. + + Args: + ids: List of primary keys + + Returns: + Number of deleted objects + """ + queryset = self.get_bulk_objects(ids) + count = queryset.count() + queryset.delete() + return count diff --git a/common/models.py b/backend/common/models.py similarity index 53% rename from common/models.py rename to backend/common/models.py index ad158fe7..fbef3bed 100644 --- a/common/models.py +++ b/backend/common/models.py @@ -3,15 +3,18 @@ import datetime import os import time import uuid + import arrow -from django.contrib.auth.models import AbstractUser -from django.contrib.auth.models import AbstractBaseUser, PermissionsMixin -from .manager import UserManager +from django.contrib.auth.models import AbstractBaseUser, AbstractUser, PermissionsMixin +from django.contrib.contenttypes.fields import GenericForeignKey +from django.contrib.contenttypes.models import ContentType from django.db import models from django.utils import timezone +from django.utils.text import slugify from django.utils.translation import gettext_lazy as _ from phonenumber_field.modelfields import PhoneNumberField +from common.base import BaseModel from common.templatetags.common_tags import ( is_document_file_audio, is_document_file_code, @@ -23,7 +26,8 @@ from common.templatetags.common_tags import ( is_document_file_zip, ) from common.utils import COUNTRIES, ROLES -from common.base import BaseModel + +from .manager import UserManager def img_url(self, filename): @@ -36,18 +40,15 @@ class User(AbstractBaseUser, PermissionsMixin): default=uuid.uuid4, unique=True, editable=False, db_index=True, primary_key=True ) email = models.EmailField(_("email address"), blank=True, unique=True) - profile_pic = models.CharField( - max_length=1000, null=True, blank=True - ) + profile_pic = models.CharField(max_length=1000, null=True, blank=True) activation_key = models.CharField(max_length=150, null=True, blank=True) key_expires = models.DateTimeField(null=True, blank=True) is_active = models.BooleanField(default=True) - is_staff = models.BooleanField(_('staff status'),default=False) + is_staff = models.BooleanField(_("staff status"), default=False) USERNAME_FIELD = "email" REQUIRED_FIELDS = [] - objects = UserManager() class Meta: @@ -64,6 +65,7 @@ class User(AbstractBaseUser, PermissionsMixin): # self.key_expires = timezone.now() + datetime.timedelta(hours=2) # super().save(*args, **kwargs) + class Address(BaseModel): address_line = models.CharField( _("Address"), max_length=255, blank=True, default="" @@ -75,6 +77,11 @@ class Address(BaseModel): _("Post/Zip-code"), max_length=64, blank=True, default="" ) country = models.CharField(max_length=3, choices=COUNTRIES, blank=True, default="") + org = models.ForeignKey( + "Org", + on_delete=models.CASCADE, + related_name="addresses", + ) class Meta: verbose_name = "Address" @@ -116,14 +123,14 @@ class Address(BaseModel): address += self.get_country_display() return address + def generate_unique_key(): return str(uuid.uuid4()) + class Org(BaseModel): name = models.CharField(max_length=100, blank=True, null=True) - api_key = models.TextField( - default=generate_unique_key, unique=True, editable=False - ) + api_key = models.TextField(default=generate_unique_key, unique=True, editable=False) is_active = models.BooleanField(default=True) # address = models.TextField(blank=True, null=True) # user_limit = models.IntegerField(default=5) @@ -139,6 +146,32 @@ class Org(BaseModel): return str(self.name) +class Tags(BaseModel): + """Tags for categorizing CRM entities (Accounts, Leads, Opportunities)""" + + name = models.CharField(max_length=20) + slug = models.CharField(max_length=20, blank=True) + org = models.ForeignKey( + "Org", + on_delete=models.CASCADE, + related_name="tags", + ) + + class Meta: + verbose_name = "Tag" + verbose_name_plural = "Tags" + db_table = "tags" + ordering = ("-created_at",) + unique_together = ["slug", "org"] + + def __str__(self): + return f"{self.name}" + + def save(self, *args, **kwargs): + self.slug = slugify(self.name) + super().save(*args, **kwargs) + + # class User(AbstractBaseUser, PermissionsMixin): # email = models.EmailField(_("email address"), blank=True, unique=True) # profile_pic = models.FileField( @@ -185,18 +218,14 @@ class Org(BaseModel): # super().save(*args, **kwargs) - - class Profile(BaseModel): - user = models.ForeignKey(User, on_delete=models.CASCADE) - org = models.ForeignKey( - Org, null=True, on_delete=models.CASCADE, blank=True, related_name="user_org" - ) - phone = PhoneNumberField(null=True, unique=True) - alternate_phone = PhoneNumberField(null=True,blank=True) + user = models.ForeignKey(User, on_delete=models.CASCADE, related_name="profiles") + org = models.ForeignKey(Org, on_delete=models.CASCADE, related_name="profiles") + phone = PhoneNumberField(null=True, blank=True) + alternate_phone = PhoneNumberField(null=True, blank=True) address = models.ForeignKey( Address, - related_name="adress_users", + related_name="address_users", on_delete=models.CASCADE, blank=True, null=True, @@ -213,7 +242,7 @@ class Profile(BaseModel): verbose_name_plural = "Profiles" db_table = "profile" ordering = ("-created_at",) - unique_together = ["user", "org"] + unique_together = [["user", "org"], ["phone", "org"]] def __str__(self): return f"{self.user.email} <{self.org.name}>" @@ -224,85 +253,37 @@ class Profile(BaseModel): @property def user_details(self): - return { - 'email' : self.user.email, - 'id' : self.user.id, - 'is_active' : self.user.is_active, - 'profile_pic' : self.user.profile_pic + return { + "email": self.user.email, + "id": self.user.id, + "is_active": self.user.is_active, + "profile_pic": self.user.profile_pic, + "last_login": self.user.last_login, } class Comment(BaseModel): - case = models.ForeignKey( - "cases.Case", - blank=True, - null=True, - related_name="cases", - on_delete=models.CASCADE, + """ + Generic comment model using ContentType framework. + Can be attached to any model (Account, Lead, Contact, Opportunity, Case, Task, Invoice, Profile). + """ + + # Generic relation to any model + content_type = models.ForeignKey( + ContentType, on_delete=models.CASCADE, related_name="comments" ) + object_id = models.UUIDField() + content_object = GenericForeignKey("content_type", "object_id") + comment = models.CharField(max_length=255) commented_on = models.DateTimeField(auto_now_add=True) commented_by = models.ForeignKey( Profile, on_delete=models.CASCADE, blank=True, null=True ) - account = models.ForeignKey( - "accounts.Account", - blank=True, - null=True, - related_name="accounts_comments", - on_delete=models.CASCADE, - ) - lead = models.ForeignKey( - "leads.Lead", - blank=True, - null=True, - related_name="leads_comments", - on_delete=models.CASCADE, - ) - opportunity = models.ForeignKey( - "opportunity.Opportunity", - blank=True, - null=True, - related_name="opportunity_comments", - on_delete=models.CASCADE, - ) - contact = models.ForeignKey( - "contacts.Contact", - blank=True, - null=True, - related_name="contact_comments", - on_delete=models.CASCADE, - ) - profile = models.ForeignKey( - "Profile", - blank=True, - null=True, - related_name="user_comments", - on_delete=models.CASCADE, - ) - - task = models.ForeignKey( - "tasks.Task", - blank=True, - null=True, - related_name="tasks_comments", - on_delete=models.CASCADE, - ) - - invoice = models.ForeignKey( - "invoices.Invoice", - blank=True, - null=True, - related_name="invoice_comments", - on_delete=models.CASCADE, - ) - - event = models.ForeignKey( - "events.Event", - blank=True, - null=True, - related_name="events_comments", + org = models.ForeignKey( + "Org", on_delete=models.CASCADE, + related_name="comments", ) class Meta: @@ -310,6 +291,10 @@ class Comment(BaseModel): verbose_name_plural = "Comments" db_table = "comment" ordering = ("-created_at",) + indexes = [ + models.Index(fields=["content_type", "object_id"]), + models.Index(fields=["org", "-created_at"]), + ] def __str__(self): return f"{self.comment}" @@ -321,10 +306,30 @@ class Comment(BaseModel): def commented_on_arrow(self): return arrow.get(self.commented_on).humanize() + def clean(self): + """ + Validate that the comment's org matches the content object's org. + + SECURITY: This prevents cross-org data references where a comment + in org_a could reference an object in org_b. + """ + from django.core.exceptions import ValidationError + + if self.content_object and hasattr(self.content_object, "org"): + if self.content_object.org_id != self.org_id: + raise ValidationError( + { + "org": "Comment organization must match the referenced object's organization." + } + ) + + def save(self, *args, **kwargs): + self.full_clean() + super().save(*args, **kwargs) + class CommentFiles(BaseModel): comment = models.ForeignKey(Comment, on_delete=models.CASCADE) - updated_on = models.DateTimeField(auto_now_add=True) comment_file = models.FileField( "File", upload_to="CommentFiles", null=True, blank=True ) @@ -346,72 +351,24 @@ class CommentFiles(BaseModel): class Attachments(BaseModel): - created_by = models.ForeignKey( - User, - related_name="attachment_created_by", - on_delete=models.SET_NULL, - null=True, - blank=True, + """ + Generic attachment model using ContentType framework. + Can be attached to any model (Account, Lead, Contact, Opportunity, Case, Task, Invoice). + """ + + # Generic relation to any model + content_type = models.ForeignKey( + ContentType, on_delete=models.CASCADE, related_name="attachments" ) + object_id = models.UUIDField() + content_object = GenericForeignKey("content_type", "object_id") + file_name = models.CharField(max_length=60) attachment = models.FileField(max_length=1001, upload_to="attachments/%Y/%m/") - lead = models.ForeignKey( - "leads.Lead", - null=True, - blank=True, - related_name="lead_attachment", - on_delete=models.CASCADE, - ) - account = models.ForeignKey( - "accounts.Account", - null=True, - blank=True, - related_name="account_attachment", - on_delete=models.CASCADE, - ) - contact = models.ForeignKey( - "contacts.Contact", - on_delete=models.CASCADE, - related_name="contact_attachment", - blank=True, - null=True, - ) - opportunity = models.ForeignKey( - "opportunity.Opportunity", - blank=True, - null=True, - on_delete=models.CASCADE, - related_name="opportunity_attachment", - ) - case = models.ForeignKey( - "cases.Case", - blank=True, - null=True, - on_delete=models.CASCADE, - related_name="case_attachment", - ) - - task = models.ForeignKey( - "tasks.Task", - blank=True, - null=True, - related_name="tasks_attachment", - on_delete=models.CASCADE, - ) - - invoice = models.ForeignKey( - "invoices.Invoice", - blank=True, - null=True, - related_name="invoice_attachment", - on_delete=models.CASCADE, - ) - event = models.ForeignKey( - "events.Event", - blank=True, - null=True, - related_name="events_attachment", + org = models.ForeignKey( + "Org", on_delete=models.CASCADE, + related_name="attachments", ) class Meta: @@ -419,6 +376,10 @@ class Attachments(BaseModel): verbose_name_plural = "Attachments" db_table = "attachments" ordering = ("-created_at",) + indexes = [ + models.Index(fields=["content_type", "object_id"]), + models.Index(fields=["org", "-created_at"]), + ] def __str__(self): return f"{self.file_name}" @@ -455,6 +416,27 @@ class Attachments(BaseModel): def created_on_arrow(self): return arrow.get(self.created_at).humanize() + def clean(self): + """ + Validate that the attachment's org matches the content object's org. + + SECURITY: This prevents cross-org data references where an attachment + in org_a could reference an object in org_b. + """ + from django.core.exceptions import ValidationError + + if self.content_object and hasattr(self.content_object, "org"): + if self.content_object.org_id != self.org_id: + raise ValidationError( + { + "org": "Attachment organization must match the referenced object's organization." + } + ) + + def save(self, *args, **kwargs): + self.full_clean() + super().save(*args, **kwargs) + def document_path(self, filename): hash_ = int(time.time()) @@ -467,25 +449,15 @@ class Document(BaseModel): title = models.TextField(blank=True, null=True) document_file = models.FileField(upload_to=document_path, max_length=5000) - created_by = models.ForeignKey( - Profile, - related_name="document_uploaded", - on_delete=models.SET_NULL, - null=True, - blank=True, - ) - status = models.CharField( choices=DOCUMENT_STATUS_CHOICE, max_length=64, default="active" ) shared_to = models.ManyToManyField(Profile, related_name="document_shared_to") - teams = models.ManyToManyField("teams.Teams", related_name="document_teams") + teams = models.ManyToManyField("Teams", related_name="document_teams") org = models.ForeignKey( Org, - on_delete=models.SET_NULL, - null=True, - blank=True, - related_name="document_org", + on_delete=models.CASCADE, + related_name="documents", ) class Meta: @@ -496,7 +468,7 @@ class Document(BaseModel): def __str__(self): return f"{self.title}" - + def file_type(self): name_ext_list = self.document_file.url.split(".") if len(name_ext_list) > 1: @@ -555,22 +527,12 @@ class APISettings(BaseModel): lead_assigned_to = models.ManyToManyField( Profile, related_name="lead_assignee_users" ) - tags = models.ManyToManyField("accounts.Tags", blank=True) - created_by = models.ForeignKey( - Profile, - related_name="settings_created_by", - on_delete=models.SET_NULL, - null=True, - blank=True, - ) + tags = models.ManyToManyField(Tags, blank=True) org = models.ForeignKey( Org, - blank=True, - on_delete=models.SET_NULL, - null=True, - related_name="org_api_settings", + on_delete=models.CASCADE, + related_name="api_settings", ) - class Meta: verbose_name = "APISetting" @@ -580,9 +542,236 @@ class APISettings(BaseModel): def __str__(self): return f"{self.title}" - def save(self, *args, **kwargs): if not self.apikey or self.apikey is None or self.apikey == "": self.apikey = generate_key() super().save(*args, **kwargs) + + +# Phase 3: JWT Token Tracking + + +class SessionToken(BaseModel): + """Track active JWT sessions for security""" + + user = models.ForeignKey( + User, on_delete=models.CASCADE, related_name="session_tokens" + ) + token_jti = models.CharField(max_length=255, unique=True, db_index=True) # JWT ID + refresh_token_jti = models.CharField( + max_length=255, unique=True, db_index=True, null=True, blank=True + ) + ip_address = models.GenericIPAddressField(null=True, blank=True) + user_agent = models.TextField(blank=True, null=True) + expires_at = models.DateTimeField() + is_active = models.BooleanField(default=True) + revoked_at = models.DateTimeField(null=True, blank=True) + last_used_at = models.DateTimeField(auto_now=True) + + class Meta: + verbose_name = "Session Token" + verbose_name_plural = "Session Tokens" + db_table = "session_token" + ordering = ("-created_at",) + indexes = [ + models.Index(fields=["user", "is_active"]), + models.Index(fields=["token_jti"]), + models.Index(fields=["expires_at"]), + ] + + def __str__(self): + return f"{self.user.email} - {self.token_jti[:8]}..." + + def revoke(self): + """Revoke this session token""" + from django.utils import timezone + + self.is_active = False + self.revoked_at = timezone.now() + self.save() + + @property + def is_expired(self): + """Check if token is expired""" + from django.utils import timezone + + return timezone.now() > self.expires_at + + @classmethod + def cleanup_expired(cls): + """Remove expired tokens (call via cron/celery)""" + from django.utils import timezone + + return cls.objects.filter(expires_at__lt=timezone.now()).delete() + + +# Activity Tracking for Recent Activities Dashboard + + +class Activity(BaseModel): + """Track user activities across all CRM entities""" + + ACTION_CHOICES = ( + ("CREATE", "Created"), + ("UPDATE", "Updated"), + ("DELETE", "Deleted"), + ("VIEW", "Viewed"), + ("COMMENT", "Commented"), + ("ASSIGN", "Assigned"), + ) + + ENTITY_TYPE_CHOICES = ( + ("Account", "Account"), + ("Lead", "Lead"), + ("Contact", "Contact"), + ("Opportunity", "Opportunity"), + ("Case", "Case"), + ("Task", "Task"), + ("Invoice", "Invoice"), + ("Event", "Event"), + ("Document", "Document"), + ("Team", "Team"), + ) + + user = models.ForeignKey( + Profile, + on_delete=models.SET_NULL, + null=True, + blank=True, + related_name="activities", + ) + action = models.CharField(max_length=20, choices=ACTION_CHOICES) + entity_type = models.CharField(max_length=50, choices=ENTITY_TYPE_CHOICES) + entity_id = models.UUIDField() + entity_name = models.CharField(max_length=255, blank=True, default="") + description = models.TextField(blank=True, default="") + org = models.ForeignKey(Org, on_delete=models.CASCADE, related_name="activities") + + class Meta: + verbose_name = "Activity" + verbose_name_plural = "Activities" + db_table = "activity" + ordering = ("-created_at",) + indexes = [ + models.Index(fields=["org", "-created_at"]), + models.Index(fields=["entity_type", "entity_id"]), + ] + + def __str__(self): + return f"{self.user} {self.get_action_display()} {self.entity_type}: {self.entity_name}" + + @property + def created_on_arrow(self): + return arrow.get(self.created_at).humanize() + + +# ============================================================================= +# Teams Model (merged from teams app) +# ============================================================================= + + +class Teams(BaseModel): + name = models.CharField(max_length=100) + description = models.TextField() + users = models.ManyToManyField(Profile, related_name="user_teams") + org = models.ForeignKey(Org, on_delete=models.CASCADE, related_name="teams") + + class Meta: + verbose_name = "Team" + verbose_name_plural = "Teams" + db_table = "teams" + ordering = ("-created_at",) + + def __str__(self): + return f"{self.name}" + + @property + def created_on_arrow(self): + return arrow.get(self.created_at).humanize() + + def get_users(self): + return ",".join( + [str(_id) for _id in list(self.users.values_list("id", flat=True))] + ) + + +# ============================================================================= +# Contact Form Submission (for public website) +# ============================================================================= + + +class ContactFormSubmission(BaseModel): + """ + Contact form submission from public website. + Stores inquiries from potential customers via contact forms. + Not org-scoped as these are platform-level submissions. + """ + + name = models.CharField(max_length=255) + email = models.EmailField() + message = models.TextField() + reason = models.CharField( + max_length=100, + choices=[ + ("general", "General Inquiry"), + ("sales", "Sales Question"), + ("support", "Technical Support"), + ("partnership", "Partnership Opportunity"), + ("other", "Other"), + ], + default="general", + ) + + # Tracking fields + ip_address = models.GenericIPAddressField(null=True, blank=True) + user_agent = models.TextField(null=True, blank=True) + referrer = models.URLField(max_length=500, null=True, blank=True) + + # Status tracking + STATUS_CHOICES = [ + ("new", "New"), + ("read", "Read"), + ("replied", "Replied"), + ("closed", "Closed"), + ] + status = models.CharField(max_length=20, choices=STATUS_CHOICES, default="new") + replied_by = models.ForeignKey( + User, + on_delete=models.SET_NULL, + null=True, + blank=True, + related_name="contact_replies", + ) + replied_at = models.DateTimeField(null=True, blank=True) + + class Meta: + verbose_name = "Contact Form Submission" + verbose_name_plural = "Contact Form Submissions" + db_table = "contact_form_submission" + ordering = ["-created_at"] + indexes = [ + models.Index(fields=["email"]), + models.Index(fields=["status"]), + models.Index(fields=["created_at"]), + ] + + def __str__(self): + return f"{self.name} - {self.email} ({self.reason})" + + def mark_as_read(self): + """Mark submission as read""" + if self.status == "new": + self.status = "read" + self.save() + + def mark_as_replied(self, user): + """Mark submission as replied""" + self.status = "replied" + self.replied_by = user + self.replied_at = timezone.now() + self.save() + + +# Import SecurityAuditLog so Django discovers it for migrations +from common.audit_log import SecurityAuditLog diff --git a/backend/common/permissions.py b/backend/common/permissions.py new file mode 100644 index 00000000..e9bfa3be --- /dev/null +++ b/backend/common/permissions.py @@ -0,0 +1,236 @@ +""" +Custom Permission Classes for Multi-Tenancy Security + +These permission classes enforce organization context and access control +across all API endpoints. +""" + +from rest_framework import permissions +from rest_framework.exceptions import PermissionDenied + + +class HasOrgContext(permissions.BasePermission): + """ + Permission class that requires valid organization context. + + This should be used on all endpoints that require org-scoped data access. + It verifies that: + 1. User is authenticated + 2. request.profile is set (from middleware) + 3. request.org is set (from JWT or API key) + + Usage: + class MyView(APIView): + permission_classes = [IsAuthenticated, HasOrgContext] + """ + + message = "Organization context is required. Please login again." + + def has_permission(self, request, view): + # Must have profile set by middleware + if not hasattr(request, "profile") or request.profile is None: + return False + + # Must have org set + if not hasattr(request, "org") or request.org is None: + return False + + # Profile must be active + if not request.profile.is_active: + return False + + return True + + +class IsOrgAdmin(permissions.BasePermission): + """ + Permission class that requires user to be an organization admin. + + Usage: + class AdminOnlyView(APIView): + permission_classes = [IsAuthenticated, HasOrgContext, IsOrgAdmin] + """ + + message = "You must be an organization administrator to perform this action." + + def has_permission(self, request, view): + if not hasattr(request, "profile") or request.profile is None: + return False + + return request.profile.role == "ADMIN" or request.profile.is_organization_admin + + +class IsOrgMember(permissions.BasePermission): + """ + Permission class that verifies user belongs to the organization. + + This is a safety check that complements the middleware validation. + """ + + message = "You are not a member of this organization." + + def has_permission(self, request, view): + if not hasattr(request, "profile") or request.profile is None: + return False + + if not hasattr(request, "org") or request.org is None: + return False + + # Verify profile org matches request org + return request.profile.org_id == request.org.id + + +class HasSalesAccess(permissions.BasePermission): + """ + Permission class that requires sales module access. + + Usage: + class LeadsView(APIView): + permission_classes = [IsAuthenticated, HasOrgContext, HasSalesAccess] + """ + + message = "You do not have access to the sales module." + + def has_permission(self, request, view): + if not hasattr(request, "profile") or request.profile is None: + return False + + # Admins always have access + if request.profile.role == "ADMIN": + return True + + return request.profile.has_sales_access + + +class HasMarketingAccess(permissions.BasePermission): + """ + Permission class that requires marketing module access. + + Usage: + class CampaignsView(APIView): + permission_classes = [IsAuthenticated, HasOrgContext, HasMarketingAccess] + """ + + message = "You do not have access to the marketing module." + + def has_permission(self, request, view): + if not hasattr(request, "profile") or request.profile is None: + return False + + # Admins always have access + if request.profile.role == "ADMIN": + return True + + return request.profile.has_marketing_access + + +class CanAccessObject(permissions.BasePermission): + """ + Object-level permission that verifies user can access specific object. + + Checks that: + 1. Object belongs to user's organization + 2. User is assigned to object OR is admin OR created the object + + Usage: + class LeadDetailView(APIView): + permission_classes = [IsAuthenticated, HasOrgContext, CanAccessObject] + + def get_object(self): + return Lead.objects.get(pk=self.kwargs['pk']) + """ + + message = "You do not have permission to access this object." + + def has_object_permission(self, request, view, obj): + # Object must belong to same org + if hasattr(obj, "org_id"): + if obj.org_id != request.org.id: + return False + + # Admins can access all objects in their org + if request.profile.role == "ADMIN": + return True + + # Check if user created the object + if hasattr(obj, "created_by_id"): + if obj.created_by_id == request.profile.user_id: + return True + + # Check if user is assigned to the object + if hasattr(obj, "assigned_to"): + if request.profile in obj.assigned_to.all(): + return True + + # Check if user is in a team assigned to the object + if hasattr(obj, "teams"): + user_team_ids = request.profile.user_teams.values_list("id", flat=True) + if obj.teams.filter(id__in=user_team_ids).exists(): + return True + + return False + + +class IsSuperAdmin(permissions.BasePermission): + """ + Permission class for platform-level super admins. + + Super admins are identified by @micropyramid.com email domain. + They have access to admin panel and can manage all organizations. + """ + + message = "Super admin access required." + + def has_permission(self, request, view): + if not request.user or not request.user.is_authenticated: + return False + + # Check for super admin email domain + return request.user.email.endswith("@micropyramid.com") + + +def get_org_filtered_queryset(model, request): + """ + Helper function to get organization-filtered queryset. + + Usage: + queryset = get_org_filtered_queryset(Lead, request) + + Args: + model: Django model class with org field + request: DRF request object with profile attached + + Returns: + QuerySet filtered by organization + """ + if not hasattr(request, "profile") or request.profile is None: + return model.objects.none() + + return model.objects.filter(org=request.profile.org) + + +def validate_org_ownership(obj, request): + """ + Helper function to validate object belongs to user's org. + + Raises PermissionDenied if object doesn't belong to user's org. + + Usage: + lead = Lead.objects.get(pk=pk) + validate_org_ownership(lead, request) + + Args: + obj: Model instance with org field + request: DRF request object + + Raises: + PermissionDenied: If object doesn't belong to user's org + """ + if not hasattr(request, "profile") or request.profile is None: + raise PermissionDenied("Organization context required") + + if not hasattr(obj, "org_id"): + return # Object doesn't have org field + + if obj.org_id != request.profile.org_id: + raise PermissionDenied("Object does not belong to your organization") diff --git a/backend/common/rls/__init__.py b/backend/common/rls/__init__.py new file mode 100644 index 00000000..d37c64f8 --- /dev/null +++ b/backend/common/rls/__init__.py @@ -0,0 +1,214 @@ +""" +Row-Level Security (RLS) Configuration for PostgreSQL. + +This module provides centralized configuration and SQL generators for +database-level multi-tenancy using PostgreSQL Row-Level Security. + +RLS ensures that: +1. Queries automatically filter by current org +2. Even if application code misses a filter, data is protected +3. Direct SQL access respects org boundaries + +Usage: + from common.rls import RLS_CONFIG, get_enable_policy_sql + + # Enable RLS on a table + cursor.execute(get_enable_policy_sql('lead')) + + # Check config + tables = RLS_CONFIG['tables'] +""" + +# PostgreSQL session variable for org context +# Set via: SELECT set_config('app.current_org', '', true) +CONTEXT_VARIABLE = "app.current_org" + +# Policy names +ISOLATION_POLICY = "org_isolation" +INSERT_POLICY = "org_insert_check" + +# All org-scoped tables that need RLS policies +# Add new org-scoped tables here +# NOTE: Only include tables that have an org_id column directly +# Table names must match actual PostgreSQL table names (check via \dt) +ORG_SCOPED_TABLES = [ + # Core business entities + "lead", + "accounts", # Note: plural + "contacts", # Note: plural + "opportunity", + "case", # Note: singular + "task", + "invoice", + # Supporting entities + "comment", + "attachments", + "document", + "teams", + "activity", + "tags", + "address", + "solution", + # Boards (Kanban) + "board", + "board_column", + "board_task", + "board_member", + # Settings + "apiSettings", # Note: camelCase + # Email & Invoicing + "account_email", + "emailLogs", + "invoice_history", + # Security & Audit + "security_audit_log", +] + +# Centralized RLS configuration +RLS_CONFIG = { + "context_variable": CONTEXT_VARIABLE, + "tables": ORG_SCOPED_TABLES, + "policies": { + "isolation": ISOLATION_POLICY, + "insert": INSERT_POLICY, + }, +} + + +def get_check_table_exists_sql(): + """ + Returns SQL to check if a table exists. + + Usage: + cursor.execute(get_check_table_exists_sql(), [table_name]) + exists = cursor.fetchone()[0] + """ + return """ + SELECT EXISTS ( + SELECT FROM information_schema.tables + WHERE table_schema = 'public' + AND table_name = %s + ) + """ + + +def get_check_rls_status_sql(): + """ + Returns SQL to check RLS status for a table. + + Usage: + cursor.execute(get_check_rls_status_sql(), [table_name]) + rls_enabled, rls_forced = cursor.fetchone() + """ + return """ + SELECT relrowsecurity, relforcerowsecurity + FROM pg_class + WHERE relname = %s AND relnamespace = 'public'::regnamespace + """ + + +def get_set_context_sql(): + """ + Returns SQL to set the org context. + + Usage: + cursor.execute(get_set_context_sql(), [org_id]) + """ + return f"SELECT set_config('{CONTEXT_VARIABLE}', %s, true)" + + +def get_enable_policy_sql(table): + """ + Returns SQL to enable RLS on a table with proper policies. + + This creates: + 1. Enables RLS on the table + 2. Forces RLS for table owner + 3. Creates isolation policy for SELECT/UPDATE/DELETE + 4. Creates insert check policy + + Args: + table: Table name + + Returns: + SQL string to execute + """ + return f""" + -- Enable RLS on table + ALTER TABLE "{table}" ENABLE ROW LEVEL SECURITY; + ALTER TABLE "{table}" FORCE ROW LEVEL SECURITY; + + -- Drop existing policies if any + DROP POLICY IF EXISTS {ISOLATION_POLICY} ON "{table}"; + DROP POLICY IF EXISTS {INSERT_POLICY} ON "{table}"; + + -- Create isolation policy (SELECT, UPDATE, DELETE) + -- Uses NULLIF to return no rows when context is not set (fail-safe) + CREATE POLICY {ISOLATION_POLICY} ON "{table}" + FOR ALL + USING ( + org_id::text = NULLIF(current_setting('{CONTEXT_VARIABLE}', true), '') + ); + + -- Create insert check policy + CREATE POLICY {INSERT_POLICY} ON "{table}" + FOR INSERT + WITH CHECK ( + org_id::text = NULLIF(current_setting('{CONTEXT_VARIABLE}', true), '') + ); + """ + + +def get_disable_policy_sql(table): + """ + Returns SQL to disable RLS on a table. + + Args: + table: Table name + + Returns: + SQL string to execute + """ + return f""" + -- Drop policies + DROP POLICY IF EXISTS {ISOLATION_POLICY} ON "{table}"; + DROP POLICY IF EXISTS {INSERT_POLICY} ON "{table}"; + + -- Disable RLS + ALTER TABLE "{table}" DISABLE ROW LEVEL SECURITY; + """ + + +def get_update_policy_sql(table): + """ + Returns SQL to update RLS policies with secure defaults. + + This fixes the security issue where empty context allowed all data. + Uses NULLIF() to ensure no rows are returned when context is missing. + + Args: + table: Table name + + Returns: + SQL string to execute + """ + return f""" + -- Drop existing policies + DROP POLICY IF EXISTS {ISOLATION_POLICY} ON "{table}"; + DROP POLICY IF EXISTS {INSERT_POLICY} ON "{table}"; + + -- Create secure isolation policy + -- NULLIF returns NULL when context is empty, causing comparison to fail + CREATE POLICY {ISOLATION_POLICY} ON "{table}" + FOR ALL + USING ( + org_id::text = NULLIF(current_setting('{CONTEXT_VARIABLE}', true), '') + ); + + -- Create secure insert check policy + CREATE POLICY {INSERT_POLICY} ON "{table}" + FOR INSERT + WITH CHECK ( + org_id::text = NULLIF(current_setting('{CONTEXT_VARIABLE}', true), '') + ); + """ diff --git a/backend/common/serializer.py b/backend/common/serializer.py new file mode 100644 index 00000000..7f298995 --- /dev/null +++ b/backend/common/serializer.py @@ -0,0 +1,682 @@ +import re + +from django.contrib.auth import authenticate +from django.contrib.auth.hashers import check_password +from django.contrib.auth.tokens import default_token_generator +from django.utils.http import urlsafe_base64_decode +from rest_framework import serializers +from rest_framework_simplejwt.tokens import AccessToken, RefreshToken + +from common.models import ( + Activity, + Address, + APISettings, + Attachments, + Comment, + Document, + Org, + Profile, + Teams, + User, +) + + +class OrgAwareRefreshToken(RefreshToken): + """ + Custom RefreshToken that includes org_id in the token payload. + + This ensures the org context is cryptographically signed and cannot be + forged by the client. The middleware should validate org_id from this + token instead of trusting the org header. + """ + + @classmethod + def for_user_and_org(cls, user, org): + """ + Generate a refresh token for a user with org context. + + Args: + user: User instance + org: Org instance or org_id UUID + + Returns: + OrgAwareRefreshToken with org_id claim + """ + token = cls.for_user(user) + + # Add org_id to the token payload + if org: + org_id = str(org.id) if hasattr(org, "id") else str(org) + token["org_id"] = org_id + + return token + + +class OrganizationSerializer(serializers.ModelSerializer): + class Meta: + model = Org + fields = ("id", "name", "api_key") + + +class SocialLoginSerializer(serializers.Serializer): + token = serializers.CharField() + + +class CommentSerializer(serializers.ModelSerializer): + """Serializer for Comment model using ContentType""" + + content_type = serializers.SlugRelatedField(slug_field="model", read_only=True) + + class Meta: + model = Comment + fields = ( + "id", + "comment", + "commented_on", + "commented_by", + "content_type", + "object_id", + "org", + ) + + +class CommentCreateSerializer(serializers.ModelSerializer): + """Serializer for creating comments with ContentType""" + + content_type = serializers.CharField(write_only=True) + object_id = serializers.UUIDField(write_only=True) + + class Meta: + model = Comment + fields = ( + "comment", + "content_type", + "object_id", + ) + + def create(self, validated_data): + from django.contrib.contenttypes.models import ContentType + + content_type_str = validated_data.pop("content_type") + try: + content_type = ContentType.objects.get(model=content_type_str.lower()) + except ContentType.DoesNotExist: + raise serializers.ValidationError( + f"Invalid content type: {content_type_str}" + ) + + validated_data["content_type"] = content_type + return super().create(validated_data) + + +class LeadCommentSerializer(serializers.ModelSerializer): + class Meta: + model = Comment + fields = ( + "id", + "comment", + "commented_on", + "commented_by", + ) + + +class OrgProfileCreateSerializer(serializers.ModelSerializer): + """ + It is for creating organization + """ + + name = serializers.CharField(max_length=255) + + class Meta: + model = Org + fields = ["name"] + extra_kwargs = {"name": {"required": True}} + + def validate_name(self, name): + if bool(re.search(r"[~\!_.@#\$%\^&\*\ \(\)\+{}\":;'/\[\]]", name)): + raise serializers.ValidationError( + "organization name should not contain any special characters" + ) + if Org.objects.filter(name=name).exists(): + raise serializers.ValidationError( + "Organization already exists with this name" + ) + return name + + +class ShowOrganizationListSerializer(serializers.ModelSerializer): + """ + we are using it for show orjanization list + """ + + org = OrganizationSerializer() + + class Meta: + model = Profile + fields = ( + "role", + "alternate_phone", + "has_sales_access", + "has_marketing_access", + "is_organization_admin", + "org", + ) + + +class BillingAddressSerializer(serializers.ModelSerializer): + country = serializers.SerializerMethodField() + + def get_country(self, obj): + return obj.get_country_display() + + class Meta: + model = Address + fields = ("address_line", "street", "city", "state", "postcode", "country") + + def __init__(self, *args, **kwargs): + account_view = kwargs.pop("account", False) + + super().__init__(*args, **kwargs) + + if account_view: + self.fields["address_line"].required = True + self.fields["street"].required = True + self.fields["city"].required = True + self.fields["state"].required = True + self.fields["postcode"].required = True + self.fields["country"].required = True + + +class CreateUserSerializer(serializers.ModelSerializer): + + class Meta: + model = User + fields = ( + "email", + "profile_pic", + ) + + def __init__(self, *args, **kwargs): + self.org = kwargs.pop("org", None) + super().__init__(*args, **kwargs) + self.fields["email"].required = True + + def validate_email(self, email): + if self.instance: + if self.instance.email != email: + if not Profile.objects.filter(user__email=email, org=self.org).exists(): + return email + raise serializers.ValidationError("Email already exists") + return email + if not Profile.objects.filter(user__email=email.lower(), org=self.org).exists(): + return email + raise serializers.ValidationError("Given Email id already exists") + + +class CreateProfileSerializer(serializers.ModelSerializer): + class Meta: + model = Profile + fields = ( + "role", + "phone", + "alternate_phone", + "has_sales_access", + "has_marketing_access", + "is_organization_admin", + ) + + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + self.fields["alternate_phone"].required = False + self.fields["role"].required = True + self.fields["phone"].required = True + + +class UserSerializer(serializers.ModelSerializer): + + class Meta: + model = User + fields = ["id", "email", "profile_pic"] + + +class ProfileSerializer(serializers.ModelSerializer): + # address = BillingAddressSerializer() + + class Meta: + model = Profile + fields = ( + "id", + "user_details", + "role", + "address", + "has_marketing_access", + "has_sales_access", + "phone", + "date_of_joining", + "is_active", + "created_at", + ) + + +class AttachmentsSerializer(serializers.ModelSerializer): + """Serializer for Attachments model using ContentType""" + + file_path = serializers.SerializerMethodField() + content_type = serializers.SlugRelatedField(slug_field="model", read_only=True) + + def get_file_path(self, obj): + if obj.attachment: + return obj.attachment.url + return None + + class Meta: + model = Attachments + fields = [ + "id", + "created_by", + "file_name", + "created_at", + "file_path", + "content_type", + "object_id", + "org", + ] + + +class AttachmentsCreateSerializer(serializers.ModelSerializer): + """Serializer for creating attachments with ContentType""" + + content_type = serializers.CharField(write_only=True) + object_id = serializers.UUIDField(write_only=True) + + class Meta: + model = Attachments + fields = ( + "file_name", + "attachment", + "content_type", + "object_id", + ) + + def create(self, validated_data): + from django.contrib.contenttypes.models import ContentType + + content_type_str = validated_data.pop("content_type") + try: + content_type = ContentType.objects.get(model=content_type_str.lower()) + except ContentType.DoesNotExist: + raise serializers.ValidationError( + f"Invalid content type: {content_type_str}" + ) + + validated_data["content_type"] = content_type + return super().create(validated_data) + + +class DocumentSerializer(serializers.ModelSerializer): + shared_to = ProfileSerializer(read_only=True, many=True) + teams = serializers.SerializerMethodField() + created_by = UserSerializer() + org = OrganizationSerializer() + + def get_teams(self, obj): + return obj.teams.all().values() + + class Meta: + model = Document + fields = [ + "id", + "title", + "document_file", + "status", + "shared_to", + "teams", + "created_at", + "created_by", + "org", + ] + + +class DocumentCreateSerializer(serializers.ModelSerializer): + def __init__(self, *args, **kwargs): + request_obj = kwargs.pop("request_obj", None) + super().__init__(*args, **kwargs) + self.fields["title"].required = True + self.org = request_obj.profile.org + + def validate_title(self, title): + if self.instance: + if ( + Document.objects.filter(title__iexact=title, org=self.org) + .exclude(id=self.instance.id) + .exists() + ): + raise serializers.ValidationError( + "Document with this Title already exists" + ) + if Document.objects.filter(title__iexact=title, org=self.org).exists(): + raise serializers.ValidationError("Document with this Title already exists") + return title + + class Meta: + model = Document + fields = ["title", "document_file", "status", "org"] + + +def find_urls(string): + # website_regex = "^((http|https)://)?([A-Za-z0-9.-]+\.[A-Za-z]{2,63})?$" # (http(s)://)google.com or google.com + # website_regex = "^https?://([A-Za-z0-9.-]+\.[A-Za-z]{2,63})?$" # (http(s)://)google.com + # http(s)://google.com + website_regex = r"^https?://[A-Za-z0-9.-]+\.[A-Za-z]{2,63}$" + # http(s)://google.com:8000 + website_regex_port = r"^https?://[A-Za-z0-9.-]+\.[A-Za-z]{2,63}:[0-9]{2,4}$" + url = re.findall(website_regex, string) + url_port = re.findall(website_regex_port, string) + if url and url[0] != "": + return url + return url_port + + +class APISettingsSerializer(serializers.ModelSerializer): + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + + class Meta: + model = APISettings + fields = ("title", "website") + + def validate_website(self, website): + if website and not ( + website.startswith("http://") or website.startswith("https://") + ): + raise serializers.ValidationError("Please provide valid schema") + if not len(find_urls(website)) > 0: + raise serializers.ValidationError( + "Please provide a valid URL with schema and without trailing slash - Example: http://google.com" + ) + return website + + +class APISettingsListSerializer(serializers.ModelSerializer): + created_by = UserSerializer() + lead_assigned_to = ProfileSerializer(read_only=True, many=True) + tags = serializers.SerializerMethodField() + org = OrganizationSerializer() + + def get_tags(self, obj): + return obj.tags.all().values() + + class Meta: + model = APISettings + fields = [ + "title", + "apikey", + "website", + "created_at", + "created_by", + "lead_assigned_to", + "tags", + "org", + ] + + +class APISettingsSwaggerSerializer(serializers.ModelSerializer): + class Meta: + model = APISettings + fields = [ + "title", + "website", + "lead_assigned_to", + "tags", + ] + + +class DocumentCreateSwaggerSerializer(serializers.ModelSerializer): + class Meta: + model = Document + fields = [ + "title", + "document_file", + "teams", + "shared_to", + ] + + +class DocumentEditSwaggerSerializer(serializers.ModelSerializer): + class Meta: + model = Document + fields = ["title", "document_file", "teams", "shared_to", "status"] + + +class UserCreateSwaggerSerializer(serializers.Serializer): + """ + It is swagger for creating or updating user + """ + + ROLE_CHOICES = ["ADMIN", "USER"] + + email = serializers.CharField(max_length=1000, required=True) + role = serializers.ChoiceField(choices=ROLE_CHOICES, required=True) + phone = serializers.CharField(max_length=12) + alternate_phone = serializers.CharField(max_length=12) + address_line = serializers.CharField(max_length=10000, required=True) + street = serializers.CharField(max_length=1000) + city = serializers.CharField(max_length=1000) + state = serializers.CharField(max_length=1000) + pincode = serializers.CharField(max_length=1000) + country = serializers.CharField(max_length=1000) + + +class UserUpdateStatusSwaggerSerializer(serializers.Serializer): + + STATUS_CHOICES = ["Active", "Inactive"] + + status = serializers.ChoiceField(choices=STATUS_CHOICES, required=True) + + +# JWT Authentication Serializers for SvelteKit Integration + + +class LoginSerializer(serializers.Serializer): + """Serializer for user login with email and password""" + + email = serializers.EmailField(required=True) + password = serializers.CharField(required=True, write_only=True) + + def validate(self, attrs): + email = attrs.get("email") + password = attrs.get("password") + + if email and password: + user = authenticate(username=email, password=password) + if not user: + raise serializers.ValidationError("Invalid email or password") + if not user.is_active: + raise serializers.ValidationError("User account is disabled") + else: + raise serializers.ValidationError('Must include "email" and "password"') + + attrs["user"] = user + return attrs + + +class RegisterSerializer(serializers.ModelSerializer): + """Serializer for user registration""" + + password = serializers.CharField(write_only=True, required=True, min_length=8) + confirm_password = serializers.CharField(write_only=True, required=True) + + class Meta: + model = User + fields = ["email", "password", "confirm_password"] + + def validate(self, attrs): + if attrs["password"] != attrs["confirm_password"]: + raise serializers.ValidationError( + {"password": "Password fields didn't match."} + ) + return attrs + + def create(self, validated_data): + validated_data.pop("confirm_password") + user = User.objects.create_user( + email=validated_data["email"], + password=validated_data["password"], + is_active=False, # User needs to activate account + ) + return user + + +class UserDetailSerializer(serializers.ModelSerializer): + """Detailed user serializer with profile and organizations""" + + organizations = serializers.SerializerMethodField() + + class Meta: + model = User + fields = ["id", "email", "profile_pic", "is_active", "organizations"] + + def get_organizations(self, obj): + """Get all organizations the user belongs to""" + profiles = Profile.objects.filter(user=obj, is_active=True) + return [ + { + "id": str(profile.org.id), + "name": profile.org.name, + "role": profile.role, + "is_organization_admin": profile.is_organization_admin, + "has_sales_access": profile.has_sales_access, + "has_marketing_access": profile.has_marketing_access, + } + for profile in profiles + ] + + +class ProfileDetailSerializer(serializers.ModelSerializer): + """Detailed profile serializer for authenticated user""" + + user = UserSerializer(read_only=True) + org = OrganizationSerializer(read_only=True) + + class Meta: + model = Profile + fields = [ + "id", + "user", + "org", + "role", + "is_organization_admin", + "has_sales_access", + "has_marketing_access", + "phone", + "date_of_joining", + "is_active", + ] + + +# Activity Serializers for Dashboard Recent Activities + + +class ActivityUserSerializer(serializers.Serializer): + """Simplified user info for activity display""" + + id = serializers.UUIDField(source="user.id") + email = serializers.EmailField(source="user.email") + name = serializers.SerializerMethodField() + profile_pic = serializers.CharField(source="user.profile_pic", allow_null=True) + + def get_name(self, obj): + """Get display name from email""" + return obj.user.email.split("@")[0] + + +class ActivitySerializer(serializers.ModelSerializer): + """Serializer for recent activities""" + + user = ActivityUserSerializer(read_only=True) + action_display = serializers.CharField(source="get_action_display", read_only=True) + timestamp = serializers.DateTimeField(source="created_at", read_only=True) + humanized_time = serializers.CharField(source="created_on_arrow", read_only=True) + + class Meta: + model = Activity + fields = [ + "id", + "user", + "action", + "action_display", + "entity_type", + "entity_id", + "entity_name", + "description", + "timestamp", + "humanized_time", + ] + + +# ============================================================================= +# Teams Serializers (merged from teams app) +# ============================================================================= + + +class TeamsSerializer(serializers.ModelSerializer): + users = ProfileSerializer(read_only=True, many=True) + created_by = UserSerializer() + + class Meta: + model = Teams + fields = ( + "id", + "name", + "description", + "users", + "created_at", + "created_by", + "created_on_arrow", + ) + + +class TeamCreateSerializer(serializers.ModelSerializer): + + def __init__(self, *args, **kwargs): + request_obj = kwargs.pop("request_obj", None) + super().__init__(*args, **kwargs) + self.org = request_obj.profile.org + + self.fields["name"].required = True + self.fields["description"].required = False + + def validate_name(self, name): + if self.instance: + if ( + Teams.objects.filter(name__iexact=name, org=self.org) + .exclude(id=self.instance.id) + .exists() + ): + raise serializers.ValidationError("Team already exists with this name") + else: + if Teams.objects.filter(name__iexact=name).exists(): + raise serializers.ValidationError("Team already exists with this name") + return name + + class Meta: + model = Teams + fields = ( + "name", + "description", + "created_at", + "created_by", + "created_on_arrow", + "org", + ) + + +class TeamswaggerCreateSerializer(serializers.ModelSerializer): + + class Meta: + model = Teams + fields = ( + "name", + "description", + "users", + ) diff --git a/backend/common/signals.py b/backend/common/signals.py new file mode 100644 index 00000000..85204c81 --- /dev/null +++ b/backend/common/signals.py @@ -0,0 +1,146 @@ +""" +Django signals for automatic activity tracking across CRM entities. + +This module registers post_save and post_delete signals on all major CRM models +to automatically create Activity records when entities are created, updated, or deleted. +""" + +from crum import get_current_request +from django.db.models.signals import post_delete, post_save +from django.dispatch import receiver + +from common.models import Activity + + +def get_entity_name(instance): + """Get a display name for an entity instance""" + # Try common name attributes + if hasattr(instance, "name") and instance.name: + return str(instance.name) + if hasattr(instance, "title") and instance.title: + return str(instance.title) + if hasattr(instance, "first_name"): + name = f"{instance.first_name or ''} {instance.last_name or ''}".strip() + if name: + return name + if hasattr(instance, "email") and instance.email: + return str(instance.email) + if hasattr(instance, "subject") and instance.subject: + return str(instance.subject) + # Fallback to string representation + return str(instance)[:100] + + +def create_activity(instance, action, entity_type): + """Create an activity record for a model instance""" + request = get_current_request() + + # Skip if no request context (e.g., management commands) + if not request: + return + + # Get profile from request + profile = getattr(request, "profile", None) + if not profile: + return + + # Get org from instance or profile + org = getattr(instance, "org", None) + if not org: + org = getattr(profile, "org", None) + if not org: + return + + # Create activity record + Activity.objects.create( + user=profile, + action=action, + entity_type=entity_type, + entity_id=instance.id, + entity_name=get_entity_name(instance), + org=org, + ) + + +# Account signals +@receiver(post_save, sender="accounts.Account") +def account_post_save(sender, instance, created, **kwargs): + action = "CREATE" if created else "UPDATE" + create_activity(instance, action, "Account") + + +@receiver(post_delete, sender="accounts.Account") +def account_post_delete(sender, instance, **kwargs): + create_activity(instance, "DELETE", "Account") + + +# Lead signals +@receiver(post_save, sender="leads.Lead") +def lead_post_save(sender, instance, created, **kwargs): + action = "CREATE" if created else "UPDATE" + create_activity(instance, action, "Lead") + + +@receiver(post_delete, sender="leads.Lead") +def lead_post_delete(sender, instance, **kwargs): + create_activity(instance, "DELETE", "Lead") + + +# Contact signals +@receiver(post_save, sender="contacts.Contact") +def contact_post_save(sender, instance, created, **kwargs): + action = "CREATE" if created else "UPDATE" + create_activity(instance, action, "Contact") + + +@receiver(post_delete, sender="contacts.Contact") +def contact_post_delete(sender, instance, **kwargs): + create_activity(instance, "DELETE", "Contact") + + +# Opportunity signals +@receiver(post_save, sender="opportunity.Opportunity") +def opportunity_post_save(sender, instance, created, **kwargs): + action = "CREATE" if created else "UPDATE" + create_activity(instance, action, "Opportunity") + + +@receiver(post_delete, sender="opportunity.Opportunity") +def opportunity_post_delete(sender, instance, **kwargs): + create_activity(instance, "DELETE", "Opportunity") + + +# Case signals +@receiver(post_save, sender="cases.Case") +def case_post_save(sender, instance, created, **kwargs): + action = "CREATE" if created else "UPDATE" + create_activity(instance, action, "Case") + + +@receiver(post_delete, sender="cases.Case") +def case_post_delete(sender, instance, **kwargs): + create_activity(instance, "DELETE", "Case") + + +# Task signals +@receiver(post_save, sender="tasks.Task") +def task_post_save(sender, instance, created, **kwargs): + action = "CREATE" if created else "UPDATE" + create_activity(instance, action, "Task") + + +@receiver(post_delete, sender="tasks.Task") +def task_post_delete(sender, instance, **kwargs): + create_activity(instance, "DELETE", "Task") + + +# Invoice signals +@receiver(post_save, sender="invoices.Invoice") +def invoice_post_save(sender, instance, created, **kwargs): + action = "CREATE" if created else "UPDATE" + create_activity(instance, action, "Invoice") + + +@receiver(post_delete, sender="invoices.Invoice") +def invoice_post_delete(sender, instance, **kwargs): + create_activity(instance, "DELETE", "Invoice") diff --git a/common/status.py b/backend/common/status.py similarity index 99% rename from common/status.py rename to backend/common/status.py index d4522df3..6adebb07 100644 --- a/common/status.py +++ b/backend/common/status.py @@ -5,6 +5,7 @@ See RFC 2616 - http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html And RFC 6585 - http://tools.ietf.org/html/rfc6585 And RFC 4918 - https://tools.ietf.org/html/rfc4918 """ + from __future__ import unicode_literals diff --git a/common/swagger-ui.html b/backend/common/swagger-ui.html similarity index 100% rename from common/swagger-ui.html rename to backend/common/swagger-ui.html diff --git a/common/swagger_params1.py b/backend/common/swagger_params.py similarity index 52% rename from common/swagger_params1.py rename to backend/common/swagger_params.py index 4c41c3a4..5a7642e8 100644 --- a/common/swagger_params1.py +++ b/backend/common/swagger_params.py @@ -11,9 +11,9 @@ organization_params = [ user_list_params = [ organization_params_in_header, - OpenApiParameter("email", OpenApiTypes.STR,OpenApiParameter.QUERY), + OpenApiParameter("email", OpenApiTypes.STR, OpenApiParameter.QUERY), OpenApiParameter( - "role", OpenApiTypes.STR, OpenApiParameter.QUERY,enum=["ADMIN", "USER"] + "role", OpenApiTypes.STR, OpenApiParameter.QUERY, enum=["ADMIN", "USER"] ), OpenApiParameter( "status", @@ -25,13 +25,20 @@ user_list_params = [ document_get_params = [ organization_params_in_header, - OpenApiParameter("title", OpenApiTypes.STR,OpenApiParameter.QUERY), + OpenApiParameter("title", OpenApiTypes.STR, OpenApiParameter.QUERY), OpenApiParameter( "status", OpenApiTypes.STR, OpenApiParameter.QUERY, enum=["Active", "In Active"], ), - OpenApiParameter("shared_to", OpenApiTypes.STR,OpenApiParameter.QUERY), + OpenApiParameter("shared_to", OpenApiTypes.STR, OpenApiParameter.QUERY), ] +# Teams params (merged from teams app) +teams_list_get_params = [ + organization_params_in_header, + OpenApiParameter("team_name", OpenApiTypes.STR, OpenApiParameter.QUERY), + OpenApiParameter("created_by", OpenApiTypes.STR, OpenApiParameter.QUERY), + OpenApiParameter("assigned_users", OpenApiTypes.STR, OpenApiParameter.QUERY), +] diff --git a/common/tasks.py b/backend/common/tasks.py similarity index 61% rename from common/tasks.py rename to backend/common/tasks.py index f6654c81..ee4598bc 100644 --- a/common/tasks.py +++ b/backend/common/tasks.py @@ -4,20 +4,37 @@ from celery import Celery from django.conf import settings from django.contrib.auth.tokens import default_token_generator from django.core.mail import EmailMessage +from django.db import connection from django.template.loader import render_to_string from django.utils import timezone from django.utils.encoding import force_bytes from django.utils.http import urlsafe_base64_encode -from common.models import Comment, Profile, User +from common.models import Comment, Profile, Teams, User from common.token_generator import account_activation_token app = Celery("redis://") +def set_rls_context(org_id): + """ + Set RLS context for Celery tasks that query org-scoped tables. + + Celery workers don't go through Django middleware, so RLS context + must be set explicitly before querying org-scoped data. + + Args: + org_id: Organization UUID (string or UUID object) + """ + if org_id: + with connection.cursor() as cursor: + cursor.execute( + "SELECT set_config('app.current_org', %s, false)", [str(org_id)] + ) + + @app.task def send_email_to_new_user(user_id): - """Send Mail To Users When their account is created""" user_obj = User.objects.filter(id=user_id).first() @@ -62,8 +79,12 @@ def send_email_to_new_user(user_id): def send_email_user_mentions( comment_id, called_from, + org_id=None, ): """Send Mail To Mentioned Users In The Comment""" + # Set RLS context for org-scoped queries + set_rls_context(org_id) + comment = Comment.objects.filter(id=comment_id).first() if comment: comment_text = comment.comment @@ -102,8 +123,6 @@ def send_email_user_mentions( subject = "New comment on Task. " elif called_from == "invoices": subject = "New comment on Invoice. " - elif called_from == "events": - subject = "New comment on Event. " if subject: context["url"] = settings.DOMAIN_NAME else: @@ -269,3 +288,140 @@ def send_email_to_reset_password(user_email): ) msg.content_subtype = "html" msg.send() + + +# ============================================================================= +# Teams Celery Tasks (merged from teams app) +# ============================================================================= + + +@app.task +def remove_users(removed_users_list, team_id, org_id=None): + # Set RLS context for org-scoped queries + set_rls_context(org_id) + + removed_users_list = [i for i in removed_users_list if i.isdigit()] + users_list = Profile.objects.filter(id__in=removed_users_list) + if users_list.exists(): + team = Teams.objects.filter(id=team_id).first() + if team: + accounts = team.account_teams.all() + for account in accounts: + for user in users_list: + account.assigned_to.remove(user) + + # for contacts + contacts = team.contact_teams.all() + for contact in contacts: + for user in users_list: + contact.assigned_to.remove(user) + + # for leads + leads = team.lead_teams.all() + for lead in leads: + for user in users_list: + lead.assigned_to.remove(user) + + # for opportunities + opportunities = team.oppurtunity_teams.all() + for opportunity in opportunities: + for user in users_list: + opportunity.assigned_to.remove(user) + + # for cases + cases = team.cases_teams.all() + for case in cases: + for user in users_list: + case.assigned_to.remove(user) + + # for documents + docs = team.document_teams.all() + for doc in docs: + for user in users_list: + doc.shared_to.remove(user) + + # for tasks + tasks = team.tasks_teams.all() + for task in tasks: + for user in users_list: + task.assigned_to.remove(user) + + # for invoices + invoices = team.invoices_teams.all() + for invoice in invoices: + for user in users_list: + invoice.assigned_to.remove(user) + + +@app.task +def update_team_users(team_id, org_id=None): + """this function updates assigned_to field on all models when a team is updated""" + # Set RLS context for org-scoped queries + set_rls_context(org_id) + + team = Teams.objects.filter(id=team_id).first() + if team: + teams_members = team.users.all() + # for accounts + accounts = team.account_teams.all() + for account in accounts: + account_assigned_to_users = account.assigned_to.all() + for team_member in teams_members: + if team_member not in account_assigned_to_users: + account.assigned_to.add(team_member) + + # for contacts + contacts = team.contact_teams.all() + for contact in contacts: + contact_assigned_to_users = contact.assigned_to.all() + for team_member in teams_members: + if team_member not in contact_assigned_to_users: + contact.assigned_to.add(team_member) + + # for leads + leads = team.lead_teams.all() + for lead in leads: + lead_assigned_to_users = lead.assigned_to.all() + for team_member in teams_members: + if team_member not in lead_assigned_to_users: + lead.assigned_to.add(team_member) + + # for opportunities + opportunities = team.oppurtunity_teams.all() + for opportunity in opportunities: + opportunity_assigned_to_users = opportunity.assigned_to.all() + for team_member in teams_members: + if team_member not in opportunity_assigned_to_users: + opportunity.assigned_to.add(team_member) + + # for cases + cases = team.cases_teams.all() + for case in cases: + case_assigned_to_users = case.assigned_to.all() + for team_member in teams_members: + if team_member not in case_assigned_to_users: + case.assigned_to.add(team_member) + + # for documents + docs = team.document_teams.all() + for doc in docs: + doc_assigned_to_users = doc.shared_to.all() + for team_member in teams_members: + if team_member not in doc_assigned_to_users: + doc.shared_to.add(team_member) + + # for tasks + tasks = team.tasks_teams.all() + for task in tasks: + task_assigned_to_users = task.assigned_to.all() + for team_member in teams_members: + if team_member not in task_assigned_to_users: + task.assigned_to.add(team_member) + + # for invoices + invoices = team.invoices_teams.all() + for invoice in invoices: + invoice_assigned_to_users = invoice.assigned_to.all() + for team_member in teams_members: + if team_member not in invoice_assigned_to_users: + invoice.assigned_to.add(team_member) diff --git a/common/templates/comment_email.html b/backend/common/templates/comment_email.html similarity index 100% rename from common/templates/comment_email.html rename to backend/common/templates/comment_email.html diff --git a/common/templates/password_reset_email.html b/backend/common/templates/password_reset_email.html similarity index 100% rename from common/templates/password_reset_email.html rename to backend/common/templates/password_reset_email.html diff --git a/common/templates/user_delete_email.html b/backend/common/templates/user_delete_email.html similarity index 100% rename from common/templates/user_delete_email.html rename to backend/common/templates/user_delete_email.html diff --git a/common/templates/user_status.html b/backend/common/templates/user_status.html similarity index 100% rename from common/templates/user_status.html rename to backend/common/templates/user_status.html diff --git a/common/templates/user_status_activate.html b/backend/common/templates/user_status_activate.html similarity index 100% rename from common/templates/user_status_activate.html rename to backend/common/templates/user_status_activate.html diff --git a/common/templates/user_status_deactivate.html b/backend/common/templates/user_status_deactivate.html similarity index 100% rename from common/templates/user_status_deactivate.html rename to backend/common/templates/user_status_deactivate.html diff --git a/common/templates/user_status_in.html b/backend/common/templates/user_status_in.html similarity index 100% rename from common/templates/user_status_in.html rename to backend/common/templates/user_status_in.html diff --git a/common/templatetags/__init__.py b/backend/common/templatetags/__init__.py similarity index 100% rename from common/templatetags/__init__.py rename to backend/common/templatetags/__init__.py diff --git a/common/templatetags/common_tags.py b/backend/common/templatetags/common_tags.py similarity index 100% rename from common/templatetags/common_tags.py rename to backend/common/templatetags/common_tags.py diff --git a/contacts/__init__.py b/backend/common/tests/__init__.py similarity index 100% rename from contacts/__init__.py rename to backend/common/tests/__init__.py diff --git a/backend/common/tests/test_multitenancy.py b/backend/common/tests/test_multitenancy.py new file mode 100644 index 00000000..abe9780a --- /dev/null +++ b/backend/common/tests/test_multitenancy.py @@ -0,0 +1,616 @@ +""" +Multi-Tenancy Security Tests + +These tests verify that the multi-tenancy implementation properly isolates +data between organizations and prevents cross-org data access. + +Run with: pytest common/tests/test_multitenancy.py -v +""" + +from unittest.mock import MagicMock, patch + +import pytest +from django.core.exceptions import PermissionDenied, ValidationError +from django.test import RequestFactory, TestCase +from rest_framework import status +from rest_framework.test import APIClient + +from accounts.models import Account +from common.middleware.get_company import GetProfileAndOrg +from common.models import Address, Attachments, Comment, Org, Profile, Tags, Teams, User +from common.serializer import OrgAwareRefreshToken +from leads.models import Lead + + +class MultiTenancyBaseTestCase(TestCase): + """Base test case with common setup for multi-tenancy tests""" + + def setUp(self): + # Create two organizations + self.org_a = Org.objects.create(name="Organization A") + self.org_b = Org.objects.create(name="Organization B") + + # Create users + self.user_a = User.objects.create_user( + email="user_a@test.com", password="testpass123" + ) + self.user_b = User.objects.create_user( + email="user_b@test.com", password="testpass123" + ) + + # Create profiles (user membership in orgs) + self.profile_a = Profile.objects.create( + user=self.user_a, org=self.org_a, role="ADMIN", is_active=True + ) + self.profile_b = Profile.objects.create( + user=self.user_b, org=self.org_b, role="ADMIN", is_active=True + ) + + # API client + self.client = APIClient() + self.factory = RequestFactory() + + +class TestOrgAwareRefreshToken(MultiTenancyBaseTestCase): + """Test JWT token generation with org context""" + + def test_token_includes_org_id(self): + """Token should include org_id in payload""" + token = OrgAwareRefreshToken.for_user_and_org(self.user_a, self.org_a) + + # Access token should have org_id + access_token = token.access_token + self.assertEqual(str(access_token["org_id"]), str(self.org_a.id)) + + def test_token_without_org(self): + """Token can be generated without org for initial login""" + token = OrgAwareRefreshToken.for_user_and_org(self.user_a, None) + + # Should not have org_id claim + access_token = token.access_token + self.assertNotIn("org_id", access_token) + + def test_different_orgs_different_tokens(self): + """Different orgs should produce different token claims""" + token_a = OrgAwareRefreshToken.for_user_and_org(self.user_a, self.org_a) + token_b = OrgAwareRefreshToken.for_user_and_org(self.user_a, self.org_b) + + self.assertNotEqual( + str(token_a.access_token["org_id"]), str(token_b.access_token["org_id"]) + ) + + +class TestMiddlewareOrgValidation(MultiTenancyBaseTestCase): + """Test middleware extracts org from JWT, not headers""" + + def test_org_extracted_from_jwt_not_header(self): + """Middleware should use org_id from JWT, ignoring org header""" + # Generate token for org_a + token = OrgAwareRefreshToken.for_user_and_org(self.user_a, self.org_a) + + # Make request with JWT for org_a but header claiming org_b + request = self.factory.get( + "/api/leads/", + HTTP_AUTHORIZATION=f"Bearer {token.access_token}", + HTTP_ORG=str(self.org_b.id), # Attempt to spoof org + ) + + middleware = GetProfileAndOrg(lambda r: r) + middleware(request) + + # Should use org from JWT (org_a), not header (org_b) + self.assertEqual(request.profile.org, self.org_a) + self.assertEqual(request.org, self.org_a) + + def test_revoked_membership_denied(self): + """User whose membership was revoked should be denied""" + # Generate token + token = OrgAwareRefreshToken.for_user_and_org(self.user_a, self.org_a) + + # Revoke membership (deactivate profile) + self.profile_a.is_active = False + self.profile_a.save() + + # Make request + request = self.factory.get( + "/api/leads/", HTTP_AUTHORIZATION=f"Bearer {token.access_token}" + ) + + middleware = GetProfileAndOrg(lambda r: r) + middleware(request) + + # Middleware should not set profile when membership is revoked + self.assertIsNone(getattr(request, "profile", None)) + + def test_api_key_scoped_to_org(self): + """API key authentication should be scoped to specific org""" + request = self.factory.get("/api/leads/", HTTP_TOKEN=self.org_a.api_key) + + middleware = GetProfileAndOrg(lambda r: r) + middleware(request) + + self.assertEqual(request.org, self.org_a) + + +class TestCrossOrgDataAccess(MultiTenancyBaseTestCase): + """Test that cross-org data access is prevented""" + + def setUp(self): + super().setUp() + + # Create data in each org + self.account_a = Account.objects.create(name="Account in Org A", org=self.org_a) + self.account_b = Account.objects.create(name="Account in Org B", org=self.org_b) + + self.lead_a = Lead.objects.create( + first_name="Lead", + last_name="In Org A", + email="lead_a@test.com", + org=self.org_a, + ) + self.lead_b = Lead.objects.create( + first_name="Lead", + last_name="In Org B", + email="lead_b@test.com", + org=self.org_b, + ) + + def test_queryset_filters_by_org(self): + """QuerySet should only return data for the specified org""" + # Filter for org_a + accounts_a = Account.objects.filter(org=self.org_a) + self.assertEqual(accounts_a.count(), 1) + self.assertEqual(accounts_a.first().name, "Account in Org A") + + # Filter for org_b + accounts_b = Account.objects.filter(org=self.org_b) + self.assertEqual(accounts_b.count(), 1) + self.assertEqual(accounts_b.first().name, "Account in Org B") + + def test_api_returns_only_org_data(self): + """API endpoints should only return data for user's org""" + # Login as user_a + token = OrgAwareRefreshToken.for_user_and_org(self.user_a, self.org_a) + self.client.credentials(HTTP_AUTHORIZATION=f"Bearer {token.access_token}") + + # Get accounts - should only see org_a data + response = self.client.get("/api/accounts/") + + if response.status_code == 200: + data = response.json() + # Verify all returned accounts belong to org_a + if "results" in data: + for account in data["results"]: + self.assertEqual(account.get("org"), str(self.org_a.id)) + + +class TestGenericFKOrgValidation(MultiTenancyBaseTestCase): + """Test that Comment and Attachments validate org matches content object""" + + def setUp(self): + super().setUp() + + self.lead_a = Lead.objects.create( + first_name="Lead", + last_name="In Org A", + email="lead_a@test.com", + org=self.org_a, + ) + + def test_comment_org_must_match_content_object(self): + """Comment org must match the referenced object's org""" + from django.contrib.contenttypes.models import ContentType + + lead_content_type = ContentType.objects.get_for_model(Lead) + + # Try to create comment with different org than lead + comment = Comment( + content_type=lead_content_type, + object_id=self.lead_a.id, + comment="Cross-org comment attempt", + org=self.org_b, # Different org than lead + commented_by=self.profile_b, + ) + + with self.assertRaises(ValidationError) as context: + comment.save() + + self.assertIn("org", context.exception.message_dict) + + def test_comment_same_org_succeeds(self): + """Comment with same org as content object should succeed""" + from django.contrib.contenttypes.models import ContentType + + lead_content_type = ContentType.objects.get_for_model(Lead) + + comment = Comment( + content_type=lead_content_type, + object_id=self.lead_a.id, + comment="Same-org comment", + org=self.org_a, # Same org as lead + commented_by=self.profile_a, + created_by=self.user_a, + updated_by=self.user_a, + ) + + # Should not raise + comment.save() + self.assertIsNotNone(comment.id) + + def test_attachment_org_must_match_content_object(self): + """Attachment org must match the referenced object's org""" + from django.contrib.contenttypes.models import ContentType + from django.core.files.uploadedfile import SimpleUploadedFile + + lead_content_type = ContentType.objects.get_for_model(Lead) + + attachment = Attachments( + content_type=lead_content_type, + object_id=self.lead_a.id, + file_name="test.txt", + attachment=SimpleUploadedFile("test.txt", b"content"), + org=self.org_b, # Different org than lead + ) + + with self.assertRaises(ValidationError) as context: + attachment.save() + + self.assertIn("org", context.exception.message_dict) + + +class TestOrgSwitching(MultiTenancyBaseTestCase): + """Test organization switching functionality""" + + def setUp(self): + super().setUp() + + # Give user_a access to both orgs + self.profile_a_in_b = Profile.objects.create( + user=self.user_a, org=self.org_b, role="USER", is_active=True + ) + + def test_switch_org_success(self): + """User with access to multiple orgs can switch""" + # Login to org_a first + token = OrgAwareRefreshToken.for_user_and_org(self.user_a, self.org_a) + self.client.credentials(HTTP_AUTHORIZATION=f"Bearer {token.access_token}") + + # Switch to org_b + response = self.client.post( + "/api/auth/switch-org/", {"org_id": str(self.org_b.id)} + ) + + self.assertEqual(response.status_code, 200) + data = response.json() + + # Should have new tokens with org_b + self.assertIn("access_token", data) + self.assertEqual(data["current_org"]["id"], str(self.org_b.id)) + + def test_switch_to_unauthorized_org_fails(self): + """User cannot switch to org they don't have access to""" + # user_b only has access to org_b + token = OrgAwareRefreshToken.for_user_and_org(self.user_b, self.org_b) + self.client.credentials(HTTP_AUTHORIZATION=f"Bearer {token.access_token}") + + # Try to switch to org_a + response = self.client.post( + "/api/auth/switch-org/", {"org_id": str(self.org_a.id)} + ) + + self.assertEqual(response.status_code, 403) + + +class TestLoginWithOrgContext(MultiTenancyBaseTestCase): + """Test login endpoint includes org context""" + + def test_login_returns_current_org(self): + """Login should return current_org in response""" + response = self.client.post( + "/api/auth/login/", {"email": "user_a@test.com", "password": "testpass123"} + ) + + self.assertEqual(response.status_code, 200) + data = response.json() + + self.assertIn("current_org", data) + self.assertEqual(data["current_org"]["id"], str(self.org_a.id)) + + def test_login_with_specific_org(self): + """Login can specify which org to use""" + # Give user_a access to org_b + Profile.objects.create( + user=self.user_a, org=self.org_b, role="USER", is_active=True + ) + + response = self.client.post( + "/api/auth/login/", + { + "email": "user_a@test.com", + "password": "testpass123", + "org_id": str(self.org_b.id), + }, + ) + + self.assertEqual(response.status_code, 200) + data = response.json() + + self.assertEqual(data["current_org"]["id"], str(self.org_b.id)) + + def test_login_with_invalid_org_fails(self): + """Login with org user doesn't have access to should fail""" + response = self.client.post( + "/api/auth/login/", + { + "email": "user_a@test.com", + "password": "testpass123", + "org_id": str(self.org_b.id), # user_a doesn't have access + }, + ) + + self.assertEqual(response.status_code, 403) + + +class TestBaseOrgModel(TestCase): + """Test BaseOrgModel validation""" + + def test_org_required_on_save(self): + """BaseOrgModel descendants should require org on save""" + from common.base import BaseOrgModel + + # This is tested indirectly through models like Teams + org = Org.objects.create(name="Test Org") + + team = Teams(name="Test Team", description="Test Description", org=org) + team.save() # Should succeed + + self.assertIsNotNone(team.id) + + +class TestOrgScopedQuerySet(MultiTenancyBaseTestCase): + """Test OrgScopedQuerySet helper methods""" + + def setUp(self): + super().setUp() + + # Create teams in each org + self.team_a = Teams.objects.create( + name="Team A", description="In Org A", org=self.org_a + ) + self.team_b = Teams.objects.create( + name="Team B", description="In Org B", org=self.org_b + ) + + def test_for_org_filters_correctly(self): + """for_org() should filter by organization""" + teams = Teams.objects.filter(org=self.org_a) + self.assertEqual(teams.count(), 1) + self.assertEqual(teams.first().name, "Team A") + + def test_for_request_uses_profile_org(self): + """for_request() should use org from request.profile""" + # Create mock request + request = MagicMock() + request.profile = self.profile_a + + # This would be used with OrgScopedManager + # Teams.objects.for_request(request) + + +class TestNullOrgPrevention(MultiTenancyBaseTestCase): + """Test that models properly handle org field""" + + def test_comment_requires_org(self): + """Comment should require org field""" + from django.contrib.contenttypes.models import ContentType + + lead = Lead.objects.create( + first_name="Test", last_name="Lead", email="test@test.com", org=self.org_a + ) + + lead_content_type = ContentType.objects.get_for_model(Lead) + + # Try to create comment without org + comment = Comment( + content_type=lead_content_type, + object_id=lead.id, + comment="No org comment", + # org not set + ) + + with self.assertRaises(Exception): + comment.save() + + +class TestRLSIntegration(MultiTenancyBaseTestCase): + """ + Test Row-Level Security at the database level. + + These tests verify that PostgreSQL RLS policies properly isolate + data between organizations. They require: + - PostgreSQL database + - Non-superuser database connection (superusers bypass RLS) + - RLS migrations applied + """ + + @classmethod + def setUpClass(cls): + """Check if RLS testing is possible.""" + super().setUpClass() + from django.db import connection + + # Check if using PostgreSQL + cls.is_postgres = connection.vendor == "postgresql" + + if cls.is_postgres: + # Check if database user is a superuser (which bypasses RLS) + with connection.cursor() as cursor: + cursor.execute( + "SELECT usesuper FROM pg_user WHERE usename = current_user" + ) + result = cursor.fetchone() + cls.is_superuser = result[0] if result else True + + def setUp(self): + super().setUp() + + # Create test data in each org + self.lead_a = Lead.objects.create( + first_name="Lead", last_name="OrgA", email="lead_a@test.com", org=self.org_a + ) + self.lead_b = Lead.objects.create( + first_name="Lead", last_name="OrgB", email="lead_b@test.com", org=self.org_b + ) + + self.account_a = Account.objects.create( + name="Account A", email="account_a@test.com", org=self.org_a + ) + self.account_b = Account.objects.create( + name="Account B", email="account_b@test.com", org=self.org_b + ) + + def test_empty_context_returns_no_rows(self): + """With empty RLS context, queries should return zero rows (fail-safe).""" + if not self.is_postgres: + self.skipTest("RLS requires PostgreSQL") + + if self.is_superuser: + self.skipTest( + "RLS is bypassed for superusers - use non-superuser for testing" + ) + + from django.db import connection + + with connection.cursor() as cursor: + # Clear the org context (empty string means no context) + cursor.execute("SELECT set_config('app.current_org', '', true)") + + # Query should return no rows due to NULLIF fail-safe + cursor.execute("SELECT COUNT(*) FROM lead") + count = cursor.fetchone()[0] + + self.assertEqual(count, 0, "Empty context should return zero rows") + + def test_rls_isolates_between_orgs(self): + """RLS should isolate data between organizations.""" + if not self.is_postgres: + self.skipTest("RLS requires PostgreSQL") + + if self.is_superuser: + self.skipTest( + "RLS is bypassed for superusers - use non-superuser for testing" + ) + + from django.db import connection + + with connection.cursor() as cursor: + # Set context to org_a + cursor.execute( + "SELECT set_config('app.current_org', %s, true)", [str(self.org_a.id)] + ) + + # Should only see org_a's lead + cursor.execute("SELECT id, first_name FROM lead") + leads = cursor.fetchall() + + self.assertEqual(len(leads), 1, "Should only see one lead") + self.assertEqual(str(leads[0][0]), str(self.lead_a.id)) + + # Now switch to org_b + cursor.execute( + "SELECT set_config('app.current_org', %s, true)", [str(self.org_b.id)] + ) + + cursor.execute("SELECT id, first_name FROM lead") + leads = cursor.fetchall() + + self.assertEqual(len(leads), 1, "Should only see one lead") + self.assertEqual(str(leads[0][0]), str(self.lead_b.id)) + + def test_rls_prevents_insert_to_wrong_org(self): + """RLS should prevent inserting records with wrong org_id.""" + if not self.is_postgres: + self.skipTest("RLS requires PostgreSQL") + + if self.is_superuser: + self.skipTest( + "RLS is bypassed for superusers - use non-superuser for testing" + ) + + import uuid + + from django.db import connection + + with connection.cursor() as cursor: + # Set context to org_a + cursor.execute( + "SELECT set_config('app.current_org', %s, true)", [str(self.org_a.id)] + ) + + # Try to insert lead with org_b's ID (should fail due to WITH CHECK) + new_id = uuid.uuid4() + try: + cursor.execute( + """ + INSERT INTO lead (id, first_name, last_name, email, org_id, created_at, updated_at) + VALUES (%s, 'Test', 'Wrong Org', 'wrong@test.com', %s, NOW(), NOW()) + """, + [str(new_id), str(self.org_b.id)], + ) + self.fail("Should not be able to insert record with wrong org_id") + except Exception: + # Expected - RLS should prevent this insert + pass + + def test_celery_task_rls_context(self): + """Celery tasks should be able to set RLS context.""" + if not self.is_postgres: + self.skipTest("RLS requires PostgreSQL") + + if self.is_superuser: + self.skipTest( + "RLS is bypassed for superusers - use non-superuser for testing" + ) + + from django.db import connection + + from common.tasks import set_rls_context + + # Simulate Celery task setting RLS context + set_rls_context(str(self.org_a.id)) + + with connection.cursor() as cursor: + cursor.execute("SELECT current_setting('app.current_org', true)") + context = cursor.fetchone()[0] + + self.assertEqual(context, str(self.org_a.id)) + + def test_rls_status_check(self): + """Verify RLS is enabled on key tables.""" + if not self.is_postgres: + self.skipTest("RLS requires PostgreSQL") + + from django.db import connection + + from common.rls import RLS_CONFIG + + with connection.cursor() as cursor: + for table in ["lead", "accounts", "contacts"]: + cursor.execute( + """ + SELECT relrowsecurity, relforcerowsecurity + FROM pg_class + WHERE relname = %s AND relnamespace = 'public'::regnamespace + """, + [table], + ) + result = cursor.fetchone() + + if result: + rls_enabled, rls_forced = result + # Just check that RLS is enabled + if not rls_enabled: + self.fail(f"RLS not enabled on {table}") + + +# Run tests with: pytest common/tests/test_multitenancy.py -v diff --git a/common/tests_celery_tasks.py b/backend/common/tests_celery_tasks.py similarity index 90% rename from common/tests_celery_tasks.py rename to backend/common/tests_celery_tasks.py index c7dea2dd..8a09e6ea 100644 --- a/common/tests_celery_tasks.py +++ b/backend/common/tests_celery_tasks.py @@ -15,7 +15,6 @@ from common.tasks import ( ) from common.tests import ObjectsCreation from contacts.tests import ContactObjectsCreation -from events.tests import EventObjectTest from invoices.tests import InvoiceCreateTest from leads.tests import TestLeadModel from opportunity.tests import OpportunityModel @@ -105,6 +104,7 @@ class TestUserMentionsForAccountComments(AccountCreateTest, TestCase): ( self.comment.id, "accounts", + str(self.comment.org.id), ), ) self.assertEqual("SUCCESS", task.state) @@ -134,6 +134,7 @@ class TestUserMentionsForContactsComments(ContactObjectsCreation, TestCase): ( self.comment.id, "contacts", + str(self.comment.org.id), ), ) self.assertEqual("SUCCESS", task.state) @@ -163,6 +164,7 @@ class TestUserMentionsForLeadsComments(TestLeadModel, TestCase): ( self.comment.id, "leads", + str(self.comment.org.id), ), ) self.assertEqual("SUCCESS", task.state) @@ -192,6 +194,7 @@ class TestUserMentionsForOpportunityComments(OpportunityModel, TestCase): ( self.comment.id, "opportunity", + str(self.comment.org.id), ), ) self.assertEqual("SUCCESS", task.state) @@ -221,6 +224,7 @@ class TestUserMentionsForCasesComments(CaseCreation, TestCase): ( self.comment.id, "cases", + str(self.comment.org.id), ), ) self.assertEqual("SUCCESS", task.state) @@ -250,6 +254,7 @@ class TestUserMentionsForTasksComments(TaskCreateTest, TestCase): ( self.comment.id, "tasks", + str(self.comment.org.id), ), ) self.assertEqual("SUCCESS", task.state) @@ -279,35 +284,7 @@ class TestUserMentionsForInvoiceComments(InvoiceCreateTest, TestCase): ( self.comment.id, "invoices", - ), - ) - self.assertEqual("SUCCESS", task.state) - - -class TestUserMentionsForEventsComments(EventObjectTest, TestCase): - @override_settings( - CELERY_EAGER_PROPAGATES_EXCEPTIONS=True, - CELERY_ALWAYS_EAGER=True, - BROKER_BACKEND="memory", - ) - def test_user_mentions_for_events_comments(self): - self.user_comment = User.objects.create( - first_name="johnComment", - username="johnDoeComment", - email="johnDoeComment@example.com", - role="ADMIN", - ) - self.user_comment.set_password("password") - self.user_comment.save() - - self.comment.comment = "content @{}".format(self.user_comment.username) - self.comment.event = self.event - self.comment.save() - - task = send_email_user_mentions.apply( - ( - self.comment.id, - "events", + str(self.comment.org.id), ), ) self.assertEqual("SUCCESS", task.state) diff --git a/common/token_generator.py b/backend/common/token_generator.py similarity index 100% rename from common/token_generator.py rename to backend/common/token_generator.py diff --git a/backend/common/urls.py b/backend/common/urls.py new file mode 100644 index 00000000..da427fb6 --- /dev/null +++ b/backend/common/urls.py @@ -0,0 +1,44 @@ +from django.urls import path +from rest_framework_simplejwt import views as jwt_views + +from common import views + +app_name = "api_common" + + +urlpatterns = [ + path("dashboard/", views.ApiHomeView.as_view()), + # JWT Authentication endpoints for SvelteKit integration + path("auth/login/", views.LoginView.as_view(), name="login"), + path("auth/register/", views.RegisterView.as_view(), name="register"), + path( + "auth/refresh-token/", + views.OrgAwareTokenRefreshView.as_view(), + name="token_refresh", + ), + path("auth/me/", views.MeView.as_view(), name="me"), + path("auth/profile/", views.ProfileDetailView.as_view(), name="profile_detail"), + path("auth/switch-org/", views.OrgSwitchView.as_view(), name="switch_org"), + # Google OAuth callback with PKCE (secure implementation) + path("auth/google/callback/", views.GoogleOAuthCallbackView.as_view()), + # Organization and profile management + path("org/", views.OrgProfileCreateView.as_view()), + path("org//", views.OrgUpdateView.as_view()), + path("profile/", views.ProfileView.as_view()), + # User management + path("users/get-teams-and-users/", views.GetTeamsAndUsersView.as_view()), + path("users/", views.UsersListView.as_view()), + path("user//", views.UserDetailView.as_view()), + path("user//status/", views.UserStatusView.as_view()), + # Documents + path("documents/", views.DocumentListView.as_view()), + path("documents//", views.DocumentDetailView.as_view()), + # API Settings + path("api-settings/", views.DomainList.as_view()), + path("api-settings//", views.DomainDetailView.as_view()), + # Activities (for dashboard recent activities) + path("activities/", views.ActivityListView.as_view(), name="activities"), + # Teams (merged from teams app) + path("teams/", views.TeamsListView.as_view()), + path("teams//", views.TeamsDetailView.as_view()), +] diff --git a/common/utils.py b/backend/common/utils.py similarity index 97% rename from common/utils.py rename to backend/common/utils.py index 908169c9..50201ce8 100644 --- a/common/utils.py +++ b/backend/common/utils.py @@ -108,15 +108,20 @@ PRIORITY_CHOICE = ( CASE_TYPE = (("Question", "Question"), ("Incident", "Incident"), ("Problem", "Problem")) STAGES = ( - ("QUALIFICATION", "QUALIFICATION"), - ("NEEDS ANALYSIS", "NEEDS ANALYSIS"), - ("VALUE PROPOSITION", "VALUE PROPOSITION"), - ("ID.DECISION MAKERS", "ID.DECISION MAKERS"), - ("PERCEPTION ANALYSIS", "PERCEPTION ANALYSIS"), - ("PROPOSAL/PRICE QUOTE", "PROPOSAL/PRICE QUOTE"), - ("NEGOTIATION/REVIEW", "NEGOTIATION/REVIEW"), - ("CLOSED WON", "CLOSED WON"), - ("CLOSED LOST", "CLOSED LOST"), + ("PROSPECTING", "Prospecting"), + ("QUALIFICATION", "Qualification"), + ("PROPOSAL", "Proposal"), + ("NEGOTIATION", "Negotiation"), + ("CLOSED_WON", "Closed Won"), + ("CLOSED_LOST", "Closed Lost"), +) + +OPPORTUNITY_TYPES = ( + ("NEW_BUSINESS", "New Business"), + ("EXISTING_BUSINESS", "Existing Business"), + ("RENEWAL", "Renewal"), + ("UPSELL", "Upsell"), + ("CROSS_SELL", "Cross-sell"), ) SOURCES = ( diff --git a/backend/common/views.py b/backend/common/views.py new file mode 100644 index 00000000..b4237946 --- /dev/null +++ b/backend/common/views.py @@ -0,0 +1,1755 @@ +import json +import secrets +from multiprocessing import context +from re import template + +import requests +from django.conf import settings +from django.contrib.auth import authenticate, login +from django.contrib.auth.base_user import BaseUserManager +from django.contrib.auth.hashers import make_password +from django.db import transaction +from django.db.models import Q +from django.http.response import JsonResponse +from django.shortcuts import get_object_or_404, render +from django.utils import timezone +from django.utils.encoding import force_str +from django.utils.http import urlsafe_base64_decode +from django.utils.translation import gettext as _ +from django.views import View +from django.views.decorators.csrf import csrf_exempt +from django.views.decorators.http import require_http_methods +from drf_spectacular.types import OpenApiTypes +from drf_spectacular.utils import OpenApiExample, OpenApiParameter, extend_schema + +# from common.external_auth import CustomDualAuthentication +from rest_framework import status +from rest_framework.authtoken.models import Token +from rest_framework.pagination import LimitOffsetPagination +from rest_framework.permissions import IsAuthenticated +from rest_framework.response import Response +from rest_framework.utils import json +from rest_framework.views import APIView +from rest_framework_simplejwt.authentication import JWTAuthentication +from rest_framework_simplejwt.tokens import RefreshToken + +from accounts.models import Account +from accounts.serializer import AccountSerializer +from cases.models import Case +from cases.serializer import CaseSerializer + +##from common.custom_auth import JSONWebTokenAuthentication +from common import serializer, swagger_params +from common.models import ( + Activity, + APISettings, + Document, + Org, + Profile, + Tags, + Teams, + User, +) +from common.serializer import * +from common.serializer import OrgAwareRefreshToken + +# from common.serializer import ( +# CreateUserSerializer, +# PasswordChangeSerializer, +# RegisterOrganizationSerializer, +# ) +from common.tasks import ( + remove_users, + resend_activation_link_to_user, + send_email_to_new_user, + send_email_to_reset_password, + send_email_user_delete, + update_team_users, +) +from common.token_generator import account_activation_token + +# from rest_framework_jwt.serializers import jwt_encode_handler +from common.utils import COUNTRIES, ROLES, jwt_payload_handler +from contacts.models import Contact +from contacts.serializer import ContactSerializer +from leads.models import Lead +from leads.serializer import LeadSerializer +from opportunity.models import Opportunity +from opportunity.serializer import OpportunitySerializer + + +class GetTeamsAndUsersView(APIView): + + permission_classes = (IsAuthenticated,) + + @extend_schema(tags=["users"], parameters=swagger_params.organization_params) + def get(self, request, *args, **kwargs): + data = {} + teams = Teams.objects.filter(org=request.profile.org).order_by("-id") + teams_data = TeamsSerializer(teams, many=True).data + profiles = Profile.objects.filter( + is_active=True, org=request.profile.org + ).order_by("user__email") + profiles_data = ProfileSerializer(profiles, many=True).data + data["teams"] = teams_data + data["profiles"] = profiles_data + return Response(data) + + +class UsersListView(APIView, LimitOffsetPagination): + + permission_classes = (IsAuthenticated,) + + @extend_schema( + parameters=swagger_params.organization_params, + request=UserCreateSwaggerSerializer, + ) + def post(self, request, format=None): + print(request.profile.role, request.user.is_superuser) + if self.request.profile.role != "ADMIN" and not self.request.user.is_superuser: + return Response( + {"error": True, "errors": "Permission Denied"}, + status=status.HTTP_403_FORBIDDEN, + ) + else: + params = request.data + if params: + user_serializer = CreateUserSerializer( + data=params, org=request.profile.org + ) + address_serializer = BillingAddressSerializer(data=params) + profile_serializer = CreateProfileSerializer(data=params) + data = {} + if not user_serializer.is_valid(): + data["user_errors"] = dict(user_serializer.errors) + if not profile_serializer.is_valid(): + data["profile_errors"] = profile_serializer.errors + if not address_serializer.is_valid(): + data["address_errors"] = (address_serializer.errors,) + if data: + return Response( + {"error": True, "errors": data}, + status=status.HTTP_400_BAD_REQUEST, + ) + if address_serializer.is_valid(): + address_obj = address_serializer.save() + user = user_serializer.save( + is_active=True, + ) + user.email = user.email + user.save() + # if params.get("password"): + # user.set_password(params.get("password")) + # user.save() + profile = Profile.objects.create( + user=user, + date_of_joining=timezone.now(), + role=params.get("role"), + address=address_obj, + org=request.profile.org, + ) + + # send_email_to_new_user.delay( + # profile.id, + # request.profile.org.id, + # ) + return Response( + {"error": False, "message": "User Created Successfully"}, + status=status.HTTP_201_CREATED, + ) + + @extend_schema(parameters=swagger_params.user_list_params) + def get(self, request, format=None): + # Check if profile exists and user has permission + if not self.request.profile: + return Response( + {"error": True, "errors": "Organization context required"}, + status=status.HTTP_400_BAD_REQUEST, + ) + + if self.request.profile.role != "ADMIN" and not self.request.user.is_superuser: + return Response( + {"error": True, "errors": "Permission Denied"}, + status=status.HTTP_403_FORBIDDEN, + ) + queryset = Profile.objects.filter(org=request.profile.org).order_by("-id") + params = request.query_params + if params: + if params.get("email"): + queryset = queryset.filter(user__email__icontains=params.get("email")) + if params.get("role"): + queryset = queryset.filter(role=params.get("role")) + if params.get("status"): + queryset = queryset.filter(is_active=params.get("status")) + + context = {} + queryset_active_users = queryset.filter(is_active=True) + results_active_users = self.paginate_queryset( + queryset_active_users.distinct(), self.request, view=self + ) + active_users = ProfileSerializer(results_active_users, many=True).data + if results_active_users: + offset = queryset_active_users.filter( + id__gte=results_active_users[-1].id + ).count() + if offset == queryset_active_users.count(): + offset = None + else: + offset = 0 + context["active_users"] = { + "active_users_count": self.count, + "active_users": active_users, + "offset": offset, + } + + queryset_inactive_users = queryset.filter(is_active=False) + results_inactive_users = self.paginate_queryset( + queryset_inactive_users.distinct(), self.request, view=self + ) + inactive_users = ProfileSerializer(results_inactive_users, many=True).data + if results_inactive_users: + offset = queryset_inactive_users.filter( + id__gte=results_inactive_users[-1].id + ).count() + if offset == queryset_inactive_users.count(): + offset = None + else: + offset = 0 + context["inactive_users"] = { + "inactive_users_count": self.count, + "inactive_users": inactive_users, + "offset": offset, + } + + context["admin_email"] = settings.ADMIN_EMAIL + context["roles"] = ROLES + context["status"] = [("True", "Active"), ("False", "In Active")] + return Response(context) + + +class UserDetailView(APIView): + permission_classes = (IsAuthenticated,) + + def get_object(self, pk): + profile = get_object_or_404(Profile, pk=pk) + return profile + + @extend_schema(tags=["users"], parameters=swagger_params.organization_params) + def get(self, request, pk, format=None): + profile_obj = self.get_object(pk) + if ( + self.request.profile.role != "ADMIN" + and not self.request.profile.is_admin + and self.request.profile.id != profile_obj.id + ): + return Response( + {"error": True, "errors": "Permission Denied"}, + status=status.HTTP_403_FORBIDDEN, + ) + if profile_obj.org != request.profile.org: + return Response( + {"error": True, "errors": "User company doesnot match with header...."}, + status=status.HTTP_403_FORBIDDEN, + ) + assigned_data = Profile.objects.filter( + org=request.profile.org, is_active=True + ).values("id", "user__email") + context = {} + context["profile_obj"] = ProfileSerializer(profile_obj).data + opportunity_list = Opportunity.objects.filter(assigned_to=profile_obj) + context["opportunity_list"] = OpportunitySerializer( + opportunity_list, many=True + ).data + contacts = Contact.objects.filter(assigned_to=profile_obj) + context["contacts"] = ContactSerializer(contacts, many=True).data + cases = Case.objects.filter(assigned_to=profile_obj) + context["cases"] = CaseSerializer(cases, many=True).data + context["assigned_data"] = assigned_data + comments = profile_obj.user_comments.all() + context["comments"] = CommentSerializer(comments, many=True).data + context["countries"] = COUNTRIES + return Response( + {"error": False, "data": context}, + status=status.HTTP_200_OK, + ) + + @extend_schema( + tags=["users"], + parameters=swagger_params.organization_params, + request=UserCreateSwaggerSerializer, + ) + def put(self, request, pk, format=None): + params = request.data + profile = self.get_object(pk) + address_obj = profile.address + if ( + self.request.profile.role != "ADMIN" + and not self.request.user.is_superuser + and self.request.profile.id != profile.id + ): + return Response( + {"error": True, "errors": "Permission Denied"}, + status=status.HTTP_403_FORBIDDEN, + ) + + if profile.org != request.profile.org: + return Response( + {"error": True, "errors": "User company doesnot match with header...."}, + status=status.HTTP_403_FORBIDDEN, + ) + serializer = CreateUserSerializer( + data=params, instance=profile.user, org=request.profile.org + ) + address_serializer = BillingAddressSerializer(data=params, instance=address_obj) + profile_serializer = CreateProfileSerializer(data=params, instance=profile) + data = {} + if not serializer.is_valid(): + data["contact_errors"] = serializer.errors + if not address_serializer.is_valid(): + data["address_errors"] = (address_serializer.errors,) + if not profile_serializer.is_valid(): + data["profile_errors"] = (profile_serializer.errors,) + if data: + data["error"] = True + return Response( + data, + status=status.HTTP_400_BAD_REQUEST, + ) + if address_serializer.is_valid(): + address_obj = address_serializer.save() + user = serializer.save() + user.email = user.email + user.save() + if profile_serializer.is_valid(): + profile = profile_serializer.save() + return Response( + {"error": False, "message": "User Updated Successfully"}, + status=status.HTTP_200_OK, + ) + return Response( + {"error": True, "errors": serializer.errors}, + status=status.HTTP_400_BAD_REQUEST, + ) + + @extend_schema(tags=["users"], parameters=swagger_params.organization_params) + def delete(self, request, pk, format=None): + if self.request.profile.role != "ADMIN" and not self.request.profile.is_admin: + return Response( + {"error": True, "errors": "Permission Denied"}, + status=status.HTTP_403_FORBIDDEN, + ) + self.object = self.get_object(pk) + if self.object.id == request.profile.id: + return Response( + {"error": True, "errors": "Permission Denied"}, + status=status.HTTP_403_FORBIDDEN, + ) + deleted_by = self.request.profile.user.email + send_email_user_delete.delay( + self.object.user.email, + deleted_by=deleted_by, + ) + self.object.delete() + return Response({"status": "success"}, status=status.HTTP_200_OK) + + +# check_header not working +class ApiHomeView(APIView): + + permission_classes = (IsAuthenticated,) + + @extend_schema(parameters=swagger_params.organization_params) + def get(self, request, format=None): + accounts = Account.objects.filter(is_active=True, org=request.profile.org) + contacts = Contact.objects.filter(org=request.profile.org) + leads = Lead.objects.filter(org=request.profile.org).exclude( + Q(status="converted") | Q(status="closed") + ) + opportunities = Opportunity.objects.filter(org=request.profile.org) + + if self.request.profile.role != "ADMIN" and not self.request.user.is_superuser: + accounts = accounts.filter( + Q(assigned_to=self.request.profile) + | Q(created_by=self.request.profile.user) + ) + contacts = contacts.filter( + Q(assigned_to__id__in=self.request.profile) + | Q(created_by=self.request.profile.user) + ) + leads = leads.filter( + Q(assigned_to__id__in=self.request.profile) + | Q(created_by=self.request.profile.user) + ).exclude(status="closed") + opportunities = opportunities.filter( + Q(assigned_to__id__in=self.request.profile) + | Q(created_by=self.request.profile.user) + ) + context = {} + context["accounts_count"] = accounts.count() + context["contacts_count"] = contacts.count() + context["leads_count"] = leads.count() + context["opportunities_count"] = opportunities.count() + context["accounts"] = AccountSerializer(accounts, many=True).data + context["contacts"] = ContactSerializer(contacts, many=True).data + context["leads"] = LeadSerializer(leads, many=True).data + context["opportunities"] = OpportunitySerializer(opportunities, many=True).data + return Response(context, status=status.HTTP_200_OK) + + +class OrgProfileCreateView(APIView): + # authentication_classes = (CustomDualAuthentication,) + permission_classes = (IsAuthenticated,) + + model1 = Org + model2 = Profile + serializer_class = OrgProfileCreateSerializer + profile_serializer = CreateProfileSerializer + + @extend_schema( + description="Organization and profile Creation api", + request=OrgProfileCreateSerializer, + ) + def post(self, request, format=None): + data = request.data + data["api_key"] = secrets.token_hex(16) + serializer = self.serializer_class(data=data) + if serializer.is_valid(): + org_obj = serializer.save() + + # now creating the profile + profile_obj = self.model2.objects.create(user=request.user, org=org_obj) + # now the current user is the admin of the newly created organisation + profile_obj.is_organization_admin = True + profile_obj.role = "ADMIN" + profile_obj.save() + + return Response( + { + "error": False, + "message": "New Org is Created.", + "org": self.serializer_class(org_obj).data, + "status": status.HTTP_201_CREATED, + } + ) + else: + return Response( + { + "error": True, + "errors": serializer.errors, + "status": status.HTTP_400_BAD_REQUEST, + } + ) + + @extend_schema( + description="Just Pass the token, will return ORG list, associated with user" + ) + def get(self, request, format=None): + """ + here we are passing profile list of the user, where org details also included + """ + profile_list = Profile.objects.filter(user=request.user) + serializer = ShowOrganizationListSerializer(profile_list, many=True) + return Response( + { + "error": False, + "status": status.HTTP_200_OK, + "profile_org_list": serializer.data, + } + ) + + +class OrgUpdateView(APIView): + """ + Update organization details + Only organization admins can update + """ + + permission_classes = (IsAuthenticated,) + + @extend_schema( + description="Update organization details", + request=OrganizationSerializer, + responses={200: OrganizationSerializer}, + ) + def put(self, request, pk, format=None): + # Check if user has admin access to this organization + if not request.profile: + return Response( + {"error": True, "errors": "Organization context required"}, + status=status.HTTP_400_BAD_REQUEST, + ) + + # Verify the organization matches the current context + if str(request.profile.org.id) != str(pk): + return Response( + {"error": True, "errors": "Cannot update a different organization"}, + status=status.HTTP_403_FORBIDDEN, + ) + + # Check if user is admin + if ( + request.profile.role != "ADMIN" + and not request.profile.is_organization_admin + ): + return Response( + { + "error": True, + "errors": "Only organization admins can update organization details", + }, + status=status.HTTP_403_FORBIDDEN, + ) + + try: + org = Org.objects.get(id=pk) + except Org.DoesNotExist: + return Response( + {"error": True, "errors": "Organization not found"}, + status=status.HTTP_404_NOT_FOUND, + ) + + # Update fields + data = request.data + if "name" in data: + org.name = data["name"] + + org.save() + + return Response( + { + "error": False, + "message": "Organization updated successfully", + "org": OrganizationSerializer(org).data, + }, + status=status.HTTP_200_OK, + ) + + @extend_schema( + description="Get organization details", responses={200: OrganizationSerializer} + ) + def get(self, request, pk, format=None): + # Check if user has access to this organization + if not request.profile: + return Response( + {"error": True, "errors": "Organization context required"}, + status=status.HTTP_400_BAD_REQUEST, + ) + + # Verify the organization matches the current context + if str(request.profile.org.id) != str(pk): + return Response( + {"error": True, "errors": "Cannot access a different organization"}, + status=status.HTTP_403_FORBIDDEN, + ) + + try: + org = Org.objects.get(id=pk) + except Org.DoesNotExist: + return Response( + {"error": True, "errors": "Organization not found"}, + status=status.HTTP_404_NOT_FOUND, + ) + + return Response( + {"error": False, "org": OrganizationSerializer(org).data}, + status=status.HTTP_200_OK, + ) + + +class ProfileView(APIView): + permission_classes = (IsAuthenticated,) + + @extend_schema(parameters=swagger_params.organization_params) + def get(self, request, format=None): + # profile=Profile.objects.get(user=request.user) + context = {} + context["user_obj"] = ProfileSerializer(self.request.profile).data + return Response(context, status=status.HTTP_200_OK) + + @extend_schema(parameters=swagger_params.organization_params) + def patch(self, request, format=None): + profile = request.profile + data = request.data + + # Update phone on Profile if provided + if "phone" in data: + profile.phone = data.get("phone") + profile.save() + + # Note: name field is not available on User model + # If name updates are needed, the User model would need to be extended + + return Response( + { + "message": "Profile updated successfully", + "user_obj": ProfileSerializer(profile).data, + }, + status=status.HTTP_200_OK, + ) + + +class DocumentListView(APIView, LimitOffsetPagination): + # authentication_classes = (CustomDualAuthentication,) + permission_classes = (IsAuthenticated,) + model = Document + + def get_context_data(self, **kwargs): + params = self.request.query_params + queryset = self.model.objects.filter(org=self.request.profile.org).order_by( + "-id" + ) + if self.request.user.is_superuser or self.request.profile.role == "ADMIN": + queryset = queryset + else: + if self.request.profile.documents(): + doc_ids = self.request.profile.documents().values_list("id", flat=True) + shared_ids = queryset.filter( + Q(status="active") & Q(shared_to__id__in=[self.request.profile.id]) + ).values_list("id", flat=True) + queryset = queryset.filter(Q(id__in=doc_ids) | Q(id__in=shared_ids)) + else: + queryset = queryset.filter( + Q(status="active") & Q(shared_to__id__in=[self.request.profile.id]) + ) + + request_post = params + if request_post: + if request_post.get("title"): + queryset = queryset.filter(title__icontains=request_post.get("title")) + if request_post.get("status"): + queryset = queryset.filter(status=request_post.get("status")) + + if request_post.get("shared_to"): + queryset = queryset.filter( + shared_to__id__in=json.loads(request_post.get("shared_to")) + ) + + context = {} + profile_list = Profile.objects.filter( + is_active=True, org=self.request.profile.org + ) + if self.request.profile.role == "ADMIN" or self.request.profile.is_admin: + profiles = profile_list.order_by("user__email") + else: + profiles = profile_list.filter(role="ADMIN").order_by("user__email") + search = False + if ( + params.get("document_file") + or params.get("status") + or params.get("shared_to") + ): + search = True + context["search"] = search + + queryset_documents_active = queryset.filter(status="active") + results_documents_active = self.paginate_queryset( + queryset_documents_active.distinct(), self.request, view=self + ) + documents_active = DocumentSerializer(results_documents_active, many=True).data + if results_documents_active: + offset = queryset_documents_active.filter( + id__gte=results_documents_active[-1].id + ).count() + if offset == queryset_documents_active.count(): + offset = None + else: + offset = 0 + context["documents_active"] = { + "documents_active_count": self.count, + "documents_active": documents_active, + "offset": offset, + } + + queryset_documents_inactive = queryset.filter(status="inactive") + results_documents_inactive = self.paginate_queryset( + queryset_documents_inactive.distinct(), self.request, view=self + ) + documents_inactive = DocumentSerializer( + results_documents_inactive, many=True + ).data + if results_documents_inactive: + offset = queryset_documents_inactive.filter( + id__gte=results_documents_active[-1].id + ).count() + if offset == queryset_documents_inactive.count(): + offset = None + else: + offset = 0 + context["documents_inactive"] = { + "documents_inactive_count": self.count, + "documents_inactive": documents_inactive, + "offset": offset, + } + + context["users"] = ProfileSerializer(profiles, many=True).data + context["status_choices"] = Document.DOCUMENT_STATUS_CHOICE + return context + + @extend_schema(tags=["documents"], parameters=swagger_params.document_get_params) + def get(self, request, *args, **kwargs): + context = self.get_context_data(**kwargs) + return Response(context) + + @extend_schema( + tags=["documents"], + parameters=swagger_params.organization_params, + request=DocumentCreateSwaggerSerializer, + ) + def post(self, request, *args, **kwargs): + params = request.data + serializer = DocumentCreateSerializer(data=params, request_obj=request) + if serializer.is_valid(): + doc = serializer.save( + created_by=request.profile.user, + org=request.profile.org, + document_file=request.FILES.get("document_file"), + ) + if params.get("shared_to"): + assinged_to_list = params.get("shared_to") + profiles = Profile.objects.filter( + id__in=assinged_to_list, org=request.profile.org, is_active=True + ) + if profiles: + doc.shared_to.add(*profiles) + if params.get("teams"): + teams_list = params.get("teams") + teams = Teams.objects.filter(id__in=teams_list, org=request.profile.org) + if teams: + doc.teams.add(*teams) + + return Response( + {"error": False, "message": "Document Created Successfully"}, + status=status.HTTP_201_CREATED, + ) + return Response( + {"error": True, "errors": serializer.errors}, + status=status.HTTP_400_BAD_REQUEST, + ) + + +class DocumentDetailView(APIView): + # authentication_classes = (CustomDualAuthentication,) + permission_classes = (IsAuthenticated,) + + def get_object(self, pk): + return Document.objects.filter(id=pk).first() + + @extend_schema(tags=["documents"], parameters=swagger_params.organization_params) + def get(self, request, pk, format=None): + self.object = self.get_object(pk) + if not self.object: + return Response( + {"error": True, "errors": "Document does not exist"}, + status=status.HTTP_403_FORBIDDEN, + ) + if self.object.org != self.request.profile.org: + return Response( + {"error": True, "errors": "User company doesnot match with header...."}, + status=status.HTTP_403_FORBIDDEN, + ) + if self.request.profile.role != "ADMIN" and not self.request.user.is_superuser: + if not ( + (self.request.profile == self.object.created_by) + or (self.request.profile in self.object.shared_to.all()) + ): + return Response( + { + "error": True, + "errors": "You do not have Permission to perform this action", + }, + status=status.HTTP_403_FORBIDDEN, + ) + profile_list = Profile.objects.filter(org=self.request.profile.org) + if request.profile.role == "ADMIN" or request.user.is_superuser: + profiles = profile_list.order_by("user__email") + else: + profiles = profile_list.filter(role="ADMIN").order_by("user__email") + context = {} + context.update( + { + "doc_obj": DocumentSerializer(self.object).data, + "file_type_code": self.object.file_type()[1], + "users": ProfileSerializer(profiles, many=True).data, + } + ) + return Response(context, status=status.HTTP_200_OK) + + @extend_schema(tags=["documents"], parameters=swagger_params.organization_params) + def delete(self, request, pk, format=None): + document = self.get_object(pk) + if not document: + return Response( + {"error": True, "errors": "Documdnt does not exist"}, + status=status.HTTP_403_FORBIDDEN, + ) + if document.org != self.request.profile.org: + return Response( + {"error": True, "errors": "User company doesnot match with header...."}, + status=status.HTTP_403_FORBIDDEN, + ) + + if self.request.profile.role != "ADMIN" and not self.request.user.is_superuser: + if ( + self.request.profile != document.created_by + ): # or (self.request.profile not in document.shared_to.all()): + return Response( + { + "error": True, + "errors": "You do not have Permission to perform this action", + }, + status=status.HTTP_403_FORBIDDEN, + ) + document.delete() + return Response( + {"error": False, "message": "Document deleted Successfully"}, + status=status.HTTP_200_OK, + ) + + @extend_schema( + tags=["documents"], + parameters=swagger_params.organization_params, + request=DocumentEditSwaggerSerializer, + ) + def put(self, request, pk, format=None): + self.object = self.get_object(pk) + params = request.data + if not self.object: + return Response( + {"error": True, "errors": "Document does not exist"}, + status=status.HTTP_403_FORBIDDEN, + ) + if self.object.org != self.request.profile.org: + return Response( + {"error": True, "errors": "User company doesnot match with header...."}, + status=status.HTTP_403_FORBIDDEN, + ) + if self.request.profile.role != "ADMIN" and not self.request.user.is_superuser: + if not ( + (self.request.profile == self.object.created_by) + or (self.request.profile in self.object.shared_to.all()) + ): + return Response( + { + "error": True, + "errors": "You do not have Permission to perform this action", + }, + status=status.HTTP_403_FORBIDDEN, + ) + serializer = DocumentCreateSerializer( + data=params, instance=self.object, request_obj=request + ) + if serializer.is_valid(): + doc = serializer.save( + document_file=request.FILES.get("document_file"), + status=params.get("status"), + org=request.profile.org, + ) + doc.shared_to.clear() + if params.get("shared_to"): + assinged_to_list = params.get("shared_to") + profiles = Profile.objects.filter( + id__in=assinged_to_list, org=request.profile.org, is_active=True + ) + if profiles: + doc.shared_to.add(*profiles) + + doc.teams.clear() + if params.get("teams"): + teams_list = params.get("teams") + teams = Teams.objects.filter(id__in=teams_list, org=request.profile.org) + if teams: + doc.teams.add(*teams) + return Response( + {"error": False, "message": "Document Updated Successfully"}, + status=status.HTTP_200_OK, + ) + return Response( + {"error": True, "errors": serializer.errors}, + status=status.HTTP_400_BAD_REQUEST, + ) + + +class UserStatusView(APIView): + permission_classes = (IsAuthenticated,) + + @extend_schema( + description="User Status View", + parameters=swagger_params.organization_params, + request=UserUpdateStatusSwaggerSerializer, + ) + def post(self, request, pk, format=None): + if self.request.profile.role != "ADMIN" and not self.request.user.is_superuser: + return Response( + { + "error": True, + "errors": "You do not have permission to perform this action", + }, + status=status.HTTP_403_FORBIDDEN, + ) + params = request.data + profiles = Profile.objects.filter(org=request.profile.org) + profile = profiles.get(id=pk) + + if params.get("status"): + user_status = params.get("status") + if user_status == "Active": + profile.is_active = True + elif user_status == "Inactive": + profile.is_active = False + else: + return Response( + {"error": True, "errors": "Please enter Valid Status for user"}, + status=status.HTTP_400_BAD_REQUEST, + ) + profile.save() + + context = {} + active_profiles = profiles.filter(is_active=True) + inactive_profiles = profiles.filter(is_active=False) + context["active_profiles"] = ProfileSerializer(active_profiles, many=True).data + context["inactive_profiles"] = ProfileSerializer( + inactive_profiles, many=True + ).data + return Response(context) + + +class DomainList(APIView): + model = APISettings + permission_classes = (IsAuthenticated,) + + @extend_schema(tags=["Settings"], parameters=swagger_params.organization_params) + def get(self, request, *args, **kwargs): + api_settings = APISettings.objects.filter(org=request.profile.org) + users = Profile.objects.filter( + is_active=True, org=request.profile.org + ).order_by("user__email") + return Response( + { + "error": False, + "api_settings": APISettingsListSerializer(api_settings, many=True).data, + "users": ProfileSerializer(users, many=True).data, + }, + status=status.HTTP_200_OK, + ) + + @extend_schema( + tags=["Settings"], + parameters=swagger_params.organization_params, + request=APISettingsSwaggerSerializer, + ) + def post(self, request, *args, **kwargs): + params = request.data + assign_to_list = [] + if params.get("lead_assigned_to"): + assign_to_list = params.get("lead_assigned_to") + serializer = APISettingsSerializer(data=params) + if serializer.is_valid(): + settings_obj = serializer.save( + created_by=request.profile.user, org=request.profile.org + ) + if params.get("tags"): + tags = params.get("tags") + for tag in tags: + tag_obj = Tags.objects.filter(name=tag).first() + if not tag_obj: + tag_obj = Tags.objects.create(name=tag) + settings_obj.tags.add(tag_obj) + if assign_to_list: + settings_obj.lead_assigned_to.add(*assign_to_list) + return Response( + {"error": False, "message": "API key added sucessfully"}, + status=status.HTTP_201_CREATED, + ) + return Response( + {"error": True, "errors": serializer.errors}, + status=status.HTTP_400_BAD_REQUEST, + ) + + +class DomainDetailView(APIView): + model = APISettings + # authentication_classes = (CustomDualAuthentication,) + permission_classes = (IsAuthenticated,) + + @extend_schema(tags=["Settings"], parameters=swagger_params.organization_params) + def get(self, request, pk, format=None): + api_setting = self.get_object(pk) + return Response( + {"error": False, "domain": APISettingsListSerializer(api_setting).data}, + status=status.HTTP_200_OK, + ) + + @extend_schema( + tags=["Settings"], + parameters=swagger_params.organization_params, + request=APISettingsSwaggerSerializer, + ) + def put(self, request, pk, **kwargs): + api_setting = self.get_object(pk) + params = request.data + assign_to_list = [] + if params.get("lead_assigned_to"): + assign_to_list = params.get("lead_assigned_to") + serializer = APISettingsSerializer(data=params, instance=api_setting) + if serializer.is_valid(): + api_setting = serializer.save() + api_setting.tags.clear() + api_setting.lead_assigned_to.clear() + if params.get("tags"): + tags = params.get("tags") + for tag in tags: + tag_obj = Tags.objects.filter(name=tag).first() + if not tag_obj: + tag_obj = Tags.objects.create(name=tag) + api_setting.tags.add(tag_obj) + if assign_to_list: + api_setting.lead_assigned_to.add(*assign_to_list) + return Response( + {"error": False, "message": "API setting Updated sucessfully"}, + status=status.HTTP_200_OK, + ) + return Response( + {"error": True, "errors": serializer.errors}, + status=status.HTTP_400_BAD_REQUEST, + ) + + @extend_schema(tags=["Settings"], parameters=swagger_params.organization_params) + def delete(self, request, pk, **kwargs): + api_setting = self.get_object(pk) + if api_setting: + api_setting.delete() + return Response( + {"error": False, "message": "API setting deleted sucessfully"}, + status=status.HTTP_200_OK, + ) + + +class GoogleOAuthCallbackView(APIView): + """ + Handle Google OAuth authorization code exchange with PKCE. + """ + + permission_classes = [] + authentication_classes = [] + + def post(self, request): + import base64 + + from django.conf import settings as django_settings + from django.utils import timezone + + code = request.data.get("code") + code_verifier = request.data.get("code_verifier") + redirect_uri = request.data.get("redirect_uri") + + if not all([code, code_verifier, redirect_uri]): + return Response( + {"error": "Missing required parameters"}, + status=status.HTTP_400_BAD_REQUEST, + ) + + # Exchange code for tokens with Google + try: + token_response = requests.post( + "https://oauth2.googleapis.com/token", + data={ + "code": code, + "client_id": django_settings.GOOGLE_CLIENT_ID, + "client_secret": django_settings.GOOGLE_CLIENT_SECRET, + "redirect_uri": redirect_uri, + "grant_type": "authorization_code", + "code_verifier": code_verifier, + }, + timeout=30, + ) + except requests.RequestException: + return Response( + {"error": "Failed to communicate with Google"}, + status=status.HTTP_502_BAD_GATEWAY, + ) + + if token_response.status_code != 200: + error_data = token_response.json() if token_response.content else {} + return Response( + {"error": error_data.get("error_description", "Token exchange failed")}, + status=status.HTTP_400_BAD_REQUEST, + ) + + token_data = token_response.json() + id_token = token_data.get("id_token") + if not id_token: + return Response( + {"error": "No ID token received"}, + status=status.HTTP_400_BAD_REQUEST, + ) + + # Decode ID token payload (no verification needed - we just got it from Google over HTTPS) + try: + payload_part = id_token.split(".")[1] + # Add padding if needed + payload_part += "=" * (4 - len(payload_part) % 4) + payload = json.loads(base64.urlsafe_b64decode(payload_part)) + email = payload.get("email") + picture = payload.get("picture", "") + except (IndexError, ValueError, json.JSONDecodeError): + return Response( + {"error": "Invalid ID token format"}, + status=status.HTTP_400_BAD_REQUEST, + ) + + if not email: + return Response( + {"error": "No email in token"}, + status=status.HTTP_400_BAD_REQUEST, + ) + + # Get or create user + try: + user = User.objects.get(email=email) + except User.DoesNotExist: + user = User.objects.create( + email=email, + profile_pic=picture, + password=make_password(secrets.token_urlsafe(32)), + ) + + user.last_login = timezone.now() + user.save(update_fields=["last_login"]) + + # Generate JWT tokens + token = RefreshToken.for_user(user) + + return Response({ + "access_token": str(token.access_token), + "refresh_token": str(token), + "user": {"id": str(user.id), "email": user.email}, + }) + + +# JWT Authentication Views for SvelteKit Integration + + +class LoginView(APIView): + """ + Login with email and password, returns JWT tokens + """ + + permission_classes = [] + authentication_classes = [] + + @extend_schema( + description="Login with email and password", + request=serializer.LoginSerializer, + responses={ + 200: { + "type": "object", + "properties": { + "access_token": {"type": "string"}, + "refresh_token": {"type": "string"}, + "user": { + "type": "object", + "properties": { + "id": {"type": "string"}, + "email": {"type": "string"}, + "organizations": {"type": "array"}, + }, + }, + }, + } + }, + ) + def post(self, request): + from django.utils import timezone + + from common.audit_log import audit_log + + serializer_obj = serializer.LoginSerializer(data=request.data) + if serializer_obj.is_valid(): + user = serializer_obj.validated_data["user"] + + # Update last_login timestamp + user.last_login = timezone.now() + user.save(update_fields=["last_login"]) + + # Get user's organizations + profiles = Profile.objects.filter(user=user, is_active=True) + + # Get the default org (first org or from request) + org_id = request.data.get("org_id") + default_org = None + + if org_id: + # Use specified org if user has access + try: + profile = profiles.get(org_id=org_id) + default_org = profile.org + except Profile.DoesNotExist: + audit_log.login_failure( + user.email, f"No access to org {org_id}", request + ) + return Response( + { + "error": "User does not have access to specified organization" + }, + status=status.HTTP_403_FORBIDDEN, + ) + elif profiles.exists(): + # Use first available org + default_org = profiles.first().org + + # Generate JWT tokens with org context + if default_org: + token = OrgAwareRefreshToken.for_user_and_org(user, default_org) + else: + # User has no orgs - generate token without org context + token = RefreshToken.for_user(user) + + # Audit log successful login + audit_log.login_success(user, default_org, request) + + # Get user details with organizations + user_serializer = serializer.UserDetailSerializer(user) + + response_data = { + "access_token": str(token.access_token), + "refresh_token": str(token), + "user": user_serializer.data, + } + + # Include current org info if available + if default_org: + response_data["current_org"] = { + "id": str(default_org.id), + "name": default_org.name, + } + + return Response(response_data, status=status.HTTP_200_OK) + + # Log failed login + email = request.data.get("email", "unknown") + audit_log.login_failure(email, str(serializer_obj.errors), request) + return Response(serializer_obj.errors, status=status.HTTP_400_BAD_REQUEST) + + +class RegisterView(APIView): + """ + Register a new user account + """ + + permission_classes = [] + authentication_classes = [] + + @extend_schema( + description="Register a new user account", + request=serializer.RegisterSerializer, + responses={ + 201: { + "type": "object", + "properties": { + "message": {"type": "string"}, + "user_id": {"type": "string"}, + "email": {"type": "string"}, + }, + } + }, + ) + def post(self, request): + serializer_obj = serializer.RegisterSerializer(data=request.data) + if serializer_obj.is_valid(): + user = serializer_obj.save() + + # TODO: Send activation email + # send_email_to_new_user.delay(user.email, user.id) + + return Response( + { + "message": "User registered successfully. Please check your email for activation link.", + "user_id": str(user.id), + "email": user.email, + }, + status=status.HTTP_201_CREATED, + ) + + return Response(serializer_obj.errors, status=status.HTTP_400_BAD_REQUEST) + + +class MeView(APIView): + """ + Get current authenticated user details + """ + + authentication_classes = [JWTAuthentication] + permission_classes = [IsAuthenticated] + + @extend_schema( + description="Get current authenticated user with organizations", + responses={200: serializer.UserDetailSerializer}, + ) + def get(self, request): + user_serializer = serializer.UserDetailSerializer(request.user) + return Response(user_serializer.data, status=status.HTTP_200_OK) + + +class OrgAwareTokenRefreshView(APIView): + """ + Custom token refresh that validates org membership. + + When refreshing a token, this view: + 1. Validates the refresh token + 2. Checks that user still has access to the org in the token + 3. Issues new tokens with the same org context + + If membership was revoked, returns 403 and user must login again. + """ + + permission_classes = [] + authentication_classes = [] + + @extend_schema( + description="Refresh access token with org membership validation", + request={ + "type": "object", + "properties": { + "refresh": {"type": "string", "description": "Refresh token"} + }, + "required": ["refresh"], + }, + responses={ + 200: { + "type": "object", + "properties": { + "access": {"type": "string"}, + "refresh": {"type": "string"}, + }, + } + }, + ) + def post(self, request): + from rest_framework_simplejwt.exceptions import TokenError + from rest_framework_simplejwt.tokens import RefreshToken as BaseRefreshToken + + from common.audit_log import audit_log + + refresh_token = request.data.get("refresh") + + if not refresh_token: + return Response( + {"error": "Refresh token is required"}, + status=status.HTTP_400_BAD_REQUEST, + ) + + try: + # Decode and validate refresh token + token = BaseRefreshToken(refresh_token) + user_id = token["user_id"] + org_id = token.get("org_id") + + # Get user + user = User.objects.get(id=user_id) + + if not user.is_active: + return Response( + {"error": "User account is disabled"}, + status=status.HTTP_403_FORBIDDEN, + ) + + # If token has org context, validate membership + if org_id: + try: + profile = Profile.objects.get( + user=user, org_id=org_id, is_active=True + ) + org = profile.org + except Profile.DoesNotExist: + # Membership revoked - user must login again + audit_log.token_revoked( + user, None, f"Membership revoked for org {org_id}", request + ) + return Response( + { + "error": "Organization membership revoked. Please login again." + }, + status=status.HTTP_403_FORBIDDEN, + ) + + # Generate new tokens with same org context + new_token = OrgAwareRefreshToken.for_user_and_org(user, org) + audit_log.token_refresh(user, org, request) + else: + # No org context - standard refresh + new_token = BaseRefreshToken.for_user(user) + audit_log.token_refresh(user, None, request) + + return Response( + {"access": str(new_token.access_token), "refresh": str(new_token)}, + status=status.HTTP_200_OK, + ) + + except TokenError as e: + return Response({"error": str(e)}, status=status.HTTP_401_UNAUTHORIZED) + except User.DoesNotExist: + return Response( + {"error": "User not found"}, status=status.HTTP_401_UNAUTHORIZED + ) + + +class OrgSwitchView(APIView): + """ + Switch to a different organization and get new JWT tokens. + + This endpoint validates that the user has access to the target + organization and issues new tokens with the org_id claim. + """ + + authentication_classes = [JWTAuthentication] + permission_classes = [IsAuthenticated] + + @extend_schema( + description="Switch to a different organization and get new JWT tokens", + request={ + "type": "object", + "properties": { + "org_id": { + "type": "string", + "format": "uuid", + "description": "Target organization ID", + } + }, + "required": ["org_id"], + }, + responses={ + 200: { + "type": "object", + "properties": { + "access_token": {"type": "string"}, + "refresh_token": {"type": "string"}, + "current_org": { + "type": "object", + "properties": { + "id": {"type": "string"}, + "name": {"type": "string"}, + }, + }, + }, + } + }, + ) + def post(self, request): + from common.audit_log import audit_log + + org_id = request.data.get("org_id") + + if not org_id: + return Response( + {"error": "org_id is required"}, status=status.HTTP_400_BAD_REQUEST + ) + + # Get current org for audit logging + from_org = getattr(request, "org", None) + + # Validate user has access to the target org + try: + profile = Profile.objects.get( + user=request.user, org_id=org_id, is_active=True + ) + except Profile.DoesNotExist: + audit_log.permission_denied( + request.user, from_org, "ORG_SWITCH", f"org:{org_id}", request + ) + return Response( + {"error": "User does not have access to this organization"}, + status=status.HTTP_403_FORBIDDEN, + ) + + # Generate new tokens with the target org + token = OrgAwareRefreshToken.for_user_and_org(request.user, profile.org) + + # Audit log the org switch + audit_log.org_switch(request.user, from_org, profile.org, request) + + return Response( + { + "access_token": str(token.access_token), + "refresh_token": str(token), + "current_org": {"id": str(profile.org.id), "name": profile.org.name}, + "profile": { + "id": str(profile.id), + "role": profile.role, + "is_organization_admin": profile.is_organization_admin, + }, + }, + status=status.HTTP_200_OK, + ) + + +class ProfileDetailView(APIView): + """ + Get profile details for a specific organization + Requires org header + """ + + authentication_classes = [JWTAuthentication] + permission_classes = [IsAuthenticated] + + @extend_schema( + description="Get profile for current user in specified organization", + parameters=[ + { + "name": "org", + "in": "header", + "required": True, + "schema": {"type": "string", "format": "uuid"}, + "description": "Organization ID", + } + ], + responses={200: serializer.ProfileDetailSerializer}, + ) + def get(self, request): + # request.profile is set by middleware based on org header + if not hasattr(request, "profile") or request.profile is None: + return Response( + {"error": "Organization header required"}, + status=status.HTTP_400_BAD_REQUEST, + ) + + profile_serializer = serializer.ProfileDetailSerializer(request.profile) + return Response(profile_serializer.data, status=status.HTTP_200_OK) + + +# Activity Views for Dashboard Recent Activities + + +class ActivityListView(APIView): + """ + Get recent activities for the organization + Returns the last 10 activities by default + """ + + permission_classes = (IsAuthenticated,) + + @extend_schema( + tags=["activities"], + parameters=swagger_params.organization_params + + [ + OpenApiParameter( + name="limit", + type=int, + location=OpenApiParameter.QUERY, + description="Number of activities to return (default: 10, max: 50)", + ), + OpenApiParameter( + name="entity_type", + type=str, + location=OpenApiParameter.QUERY, + description="Filter by entity type (Account, Lead, Contact, etc.)", + ), + ], + responses={200: serializer.ActivitySerializer(many=True)}, + ) + def get(self, request, *args, **kwargs): + if not request.profile: + return Response( + {"error": True, "errors": "Organization context required"}, + status=status.HTTP_400_BAD_REQUEST, + ) + + # Get query params + limit = min(int(request.query_params.get("limit", 10)), 50) + entity_type = request.query_params.get("entity_type", None) + + # Query activities for this organization + queryset = Activity.objects.filter(org=request.profile.org) + + # Filter by entity type if specified + if entity_type: + queryset = queryset.filter(entity_type=entity_type) + + # Get most recent activities + activities = queryset.select_related("user", "user__user")[:limit] + + # Serialize + activities_data = serializer.ActivitySerializer(activities, many=True).data + + return Response( + { + "error": False, + "count": len(activities_data), + "activities": activities_data, + }, + status=status.HTTP_200_OK, + ) + + +# ============================================================================= +# Teams Views (merged from teams app) +# ============================================================================= + + +class TeamsListView(APIView, LimitOffsetPagination): + model = Teams + permission_classes = (IsAuthenticated,) + + def get_context_data(self, **kwargs): + params = self.request.query_params + queryset = self.model.objects.filter(org=self.request.profile.org).order_by( + "-id" + ) + if params: + if params.get("team_name"): + queryset = queryset.filter(name__icontains=params.get("team_name")) + if params.get("created_by"): + queryset = queryset.filter(created_by=params.get("created_by")) + if params.get("assigned_users"): + queryset = queryset.filter(users__id__in=params.get("assigned_users")) + + context = {} + results_teams = self.paginate_queryset( + queryset.distinct(), self.request, view=self + ) + teams = TeamsSerializer(results_teams, many=True).data + if results_teams: + offset = queryset.filter(id__gte=results_teams[-1].id).count() + if offset == queryset.count(): + offset = None + else: + offset = 0 + context["per_page"] = 10 + page_number = (int(self.offset / 10) + 1,) + context["page_number"] = page_number + context.update({"teams_count": self.count, "offset": offset}) + context["teams"] = teams + return context + + @extend_schema(tags=["Teams"], parameters=swagger_params.teams_list_get_params) + def get(self, *args, **kwargs): + if self.request.profile.role != "ADMIN" and not self.request.profile.is_admin: + return Response( + { + "error": True, + "errors": "You don't have permission to perform this action.", + }, + status=status.HTTP_403_FORBIDDEN, + ) + context = self.get_context_data(**kwargs) + return Response(context) + + @extend_schema( + tags=["Teams"], + request=TeamswaggerCreateSerializer, + parameters=swagger_params.organization_params, + ) + def post(self, request, *args, **kwargs): + if self.request.profile.role != "ADMIN" and not self.request.profile.is_admin: + return Response( + { + "error": True, + "errors": "You don't have permission to perform this action.", + }, + status=status.HTTP_403_FORBIDDEN, + ) + params = self.request.data + serializer = TeamCreateSerializer(data=params, request_obj=request) + if serializer.is_valid(): + team_obj = serializer.save(org=request.profile.org) + + if params.get("assign_users"): + assinged_to_list = params.get("users") + profiles = Profile.objects.filter( + id__in=assinged_to_list, org=request.profile.org + ) + if profiles: + team_obj.users.add(*profiles) + return Response( + {"error": False, "message": "Team Created Successfully"}, + status=status.HTTP_200_OK, + ) + return Response( + {"error": True, "errors": serializer.errors}, + status=status.HTTP_400_BAD_REQUEST, + ) + + +class TeamsDetailView(APIView): + model = Teams + permission_classes = (IsAuthenticated,) + + def get_object(self, pk): + return self.model.objects.get(pk=pk, org=self.request.profile.org) + + @extend_schema(tags=["Teams"], parameters=swagger_params.organization_params) + def get(self, request, pk, **kwargs): + if self.request.profile.role != "ADMIN" and not self.request.profile.is_admin: + return Response( + { + "error": True, + "errors": "You don't have permission to perform this action.", + }, + status=status.HTTP_403_FORBIDDEN, + ) + self.team_obj = self.get_object(pk) + context = {} + context["team"] = TeamsSerializer(self.team_obj).data + return Response(context) + + @extend_schema( + tags=["Teams"], + request=TeamswaggerCreateSerializer, + parameters=swagger_params.organization_params, + ) + def put(self, request, pk, *args, **kwargs): + if self.request.profile.role != "ADMIN" and not self.request.profile.is_admin: + return Response( + { + "error": True, + "errors": "You don't have permission to perform this action.", + }, + status=status.HTTP_403_FORBIDDEN, + ) + params = request.data + self.team = self.get_object(pk) + actual_users = self.team.get_users() + removed_users = [] + serializer = TeamCreateSerializer( + data=params, instance=self.team, request_obj=request + ) + if serializer.is_valid(): + team_obj = serializer.save() + + team_obj.users.clear() + if params.get("assign_users"): + assinged_to_list = params.get("assign_users") + profiles = Profile.objects.filter( + id__in=assinged_to_list, org=request.profile.org + ) + if profiles: + team_obj.users.add(*profiles) + update_team_users.delay(pk, str(request.profile.org.id)) + latest_users = team_obj.get_users() + for user in actual_users: + if user not in latest_users: + removed_users.append(user) + remove_users.delay(removed_users, pk, str(request.profile.org.id)) + return Response( + {"error": False, "message": "Team Updated Successfully"}, + status=status.HTTP_200_OK, + ) + return Response( + {"error": True, "errors": serializer.errors}, + status=status.HTTP_400_BAD_REQUEST, + ) + + @extend_schema(tags=["Teams"], parameters=swagger_params.organization_params) + def delete(self, request, pk, **kwargs): + if self.request.profile.role != "ADMIN" and not self.request.profile.is_admin: + return Response( + { + "error": True, + "errors": "You don't have permission to perform this action.", + }, + status=status.HTTP_403_FORBIDDEN, + ) + self.team_obj = self.get_object(pk) + self.team_obj.delete() + return Response( + {"error": False, "message": "Team Deleted Successfully"}, + status=status.HTTP_200_OK, + ) diff --git a/contacts/migrations/__init__.py b/backend/contacts/__init__.py similarity index 100% rename from contacts/migrations/__init__.py rename to backend/contacts/__init__.py diff --git a/contacts/admin.py b/backend/contacts/admin.py similarity index 100% rename from contacts/admin.py rename to backend/contacts/admin.py diff --git a/contacts/apps.py b/backend/contacts/apps.py similarity index 100% rename from contacts/apps.py rename to backend/contacts/apps.py diff --git a/backend/contacts/migrations/0001_initial.py b/backend/contacts/migrations/0001_initial.py new file mode 100644 index 00000000..024c97b4 --- /dev/null +++ b/backend/contacts/migrations/0001_initial.py @@ -0,0 +1,438 @@ +# Generated by Django 5.2.8 on 2025-11-27 12:17 + +import uuid + +import django.db.models.deletion +import phonenumber_field.modelfields +from django.conf import settings +from django.db import migrations, models + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ("common", "0001_initial"), + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ] + + operations = [ + migrations.CreateModel( + name="Contact", + fields=[ + ( + "created_at", + models.DateTimeField(auto_now_add=True, verbose_name="Created At"), + ), + ( + "updated_at", + models.DateTimeField( + auto_now=True, verbose_name="Last Modified At" + ), + ), + ( + "id", + models.UUIDField( + db_index=True, + default=uuid.uuid4, + editable=False, + primary_key=True, + serialize=False, + unique=True, + ), + ), + ( + "first_name", + models.CharField(max_length=255, verbose_name="First name"), + ), + ( + "last_name", + models.CharField(max_length=255, verbose_name="Last name"), + ), + ( + "email", + models.EmailField( + blank=True, max_length=254, null=True, verbose_name="Email" + ), + ), + ( + "phone", + phonenumber_field.modelfields.PhoneNumberField( + blank=True, + max_length=128, + null=True, + region=None, + verbose_name="Phone", + ), + ), + ( + "organization", + models.CharField( + blank=True, max_length=255, null=True, verbose_name="Company" + ), + ), + ( + "title", + models.CharField( + blank=True, max_length=255, null=True, verbose_name="Job Title" + ), + ), + ( + "department", + models.CharField( + blank=True, max_length=255, null=True, verbose_name="Department" + ), + ), + ( + "do_not_call", + models.BooleanField(default=False, verbose_name="Do Not Call"), + ), + ( + "linked_in_url", + models.URLField(blank=True, null=True, verbose_name="LinkedIn URL"), + ), + ( + "address_line", + models.CharField( + blank=True, max_length=255, null=True, verbose_name="Address" + ), + ), + ( + "city", + models.CharField( + blank=True, max_length=255, null=True, verbose_name="City" + ), + ), + ( + "state", + models.CharField( + blank=True, max_length=255, null=True, verbose_name="State" + ), + ), + ( + "postcode", + models.CharField( + blank=True, max_length=64, null=True, verbose_name="Postal Code" + ), + ), + ( + "country", + models.CharField( + blank=True, + choices=[ + ("GB", "United Kingdom"), + ("AF", "Afghanistan"), + ("AX", "Aland Islands"), + ("AL", "Albania"), + ("DZ", "Algeria"), + ("AS", "American Samoa"), + ("AD", "Andorra"), + ("AO", "Angola"), + ("AI", "Anguilla"), + ("AQ", "Antarctica"), + ("AG", "Antigua and Barbuda"), + ("AR", "Argentina"), + ("AM", "Armenia"), + ("AW", "Aruba"), + ("AU", "Australia"), + ("AT", "Austria"), + ("AZ", "Azerbaijan"), + ("BS", "Bahamas"), + ("BH", "Bahrain"), + ("BD", "Bangladesh"), + ("BB", "Barbados"), + ("BY", "Belarus"), + ("BE", "Belgium"), + ("BZ", "Belize"), + ("BJ", "Benin"), + ("BM", "Bermuda"), + ("BT", "Bhutan"), + ("BO", "Bolivia"), + ("BA", "Bosnia and Herzegovina"), + ("BW", "Botswana"), + ("BV", "Bouvet Island"), + ("BR", "Brazil"), + ("IO", "British Indian Ocean Territory"), + ("BN", "Brunei Darussalam"), + ("BG", "Bulgaria"), + ("BF", "Burkina Faso"), + ("BI", "Burundi"), + ("KH", "Cambodia"), + ("CM", "Cameroon"), + ("CA", "Canada"), + ("CV", "Cape Verde"), + ("KY", "Cayman Islands"), + ("CF", "Central African Republic"), + ("TD", "Chad"), + ("CL", "Chile"), + ("CN", "China"), + ("CX", "Christmas Island"), + ("CC", "Cocos (Keeling) Islands"), + ("CO", "Colombia"), + ("KM", "Comoros"), + ("CG", "Congo"), + ("CD", "Congo, The Democratic Republic of the"), + ("CK", "Cook Islands"), + ("CR", "Costa Rica"), + ("CI", "Cote d'Ivoire"), + ("HR", "Croatia"), + ("CU", "Cuba"), + ("CY", "Cyprus"), + ("CZ", "Czech Republic"), + ("DK", "Denmark"), + ("DJ", "Djibouti"), + ("DM", "Dominica"), + ("DO", "Dominican Republic"), + ("EC", "Ecuador"), + ("EG", "Egypt"), + ("SV", "El Salvador"), + ("GQ", "Equatorial Guinea"), + ("ER", "Eritrea"), + ("EE", "Estonia"), + ("ET", "Ethiopia"), + ("FK", "Falkland Islands (Malvinas)"), + ("FO", "Faroe Islands"), + ("FJ", "Fiji"), + ("FI", "Finland"), + ("FR", "France"), + ("GF", "French Guiana"), + ("PF", "French Polynesia"), + ("TF", "French Southern Territories"), + ("GA", "Gabon"), + ("GM", "Gambia"), + ("GE", "Georgia"), + ("DE", "Germany"), + ("GH", "Ghana"), + ("GI", "Gibraltar"), + ("GR", "Greece"), + ("GL", "Greenland"), + ("GD", "Grenada"), + ("GP", "Guadeloupe"), + ("GU", "Guam"), + ("GT", "Guatemala"), + ("GG", "Guernsey"), + ("GN", "Guinea"), + ("GW", "Guinea-Bissau"), + ("GY", "Guyana"), + ("HT", "Haiti"), + ("HM", "Heard Island and McDonald Islands"), + ("VA", "Holy See (Vatican City State)"), + ("HN", "Honduras"), + ("HK", "Hong Kong"), + ("HU", "Hungary"), + ("IS", "Iceland"), + ("IN", "India"), + ("ID", "Indonesia"), + ("IR", "Iran, Islamic Republic of"), + ("IQ", "Iraq"), + ("IE", "Ireland"), + ("IM", "Isle of Man"), + ("IL", "Israel"), + ("IT", "Italy"), + ("JM", "Jamaica"), + ("JP", "Japan"), + ("JE", "Jersey"), + ("JO", "Jordan"), + ("KZ", "Kazakhstan"), + ("KE", "Kenya"), + ("KI", "Kiribati"), + ("KP", "Korea, Democratic People's Republic of"), + ("KR", "Korea, Republic of"), + ("KW", "Kuwait"), + ("KG", "Kyrgyzstan"), + ("LA", "Lao People's Democratic Republic"), + ("LV", "Latvia"), + ("LB", "Lebanon"), + ("LS", "Lesotho"), + ("LR", "Liberia"), + ("LY", "Libyan Arab Jamahiriya"), + ("LI", "Liechtenstein"), + ("LT", "Lithuania"), + ("LU", "Luxembourg"), + ("MO", "Macao"), + ("MK", "Macedonia, The Former Yugoslav Republic of"), + ("MG", "Madagascar"), + ("MW", "Malawi"), + ("MY", "Malaysia"), + ("MV", "Maldives"), + ("ML", "Mali"), + ("MT", "Malta"), + ("MH", "Marshall Islands"), + ("MQ", "Martinique"), + ("MR", "Mauritania"), + ("MU", "Mauritius"), + ("YT", "Mayotte"), + ("MX", "Mexico"), + ("FM", "Micronesia, Federated States of"), + ("MD", "Moldova"), + ("MC", "Monaco"), + ("MN", "Mongolia"), + ("ME", "Montenegro"), + ("MS", "Montserrat"), + ("MA", "Morocco"), + ("MZ", "Mozambique"), + ("MM", "Myanmar"), + ("NA", "Namibia"), + ("NR", "Nauru"), + ("NP", "Nepal"), + ("NL", "Netherlands"), + ("AN", "Netherlands Antilles"), + ("NC", "New Caledonia"), + ("NZ", "New Zealand"), + ("NI", "Nicaragua"), + ("NE", "Niger"), + ("NG", "Nigeria"), + ("NU", "Niue"), + ("NF", "Norfolk Island"), + ("MP", "Northern Mariana Islands"), + ("NO", "Norway"), + ("OM", "Oman"), + ("PK", "Pakistan"), + ("PW", "Palau"), + ("PS", "Palestinian Territory, Occupied"), + ("PA", "Panama"), + ("PG", "Papua New Guinea"), + ("PY", "Paraguay"), + ("PE", "Peru"), + ("PH", "Philippines"), + ("PN", "Pitcairn"), + ("PL", "Poland"), + ("PT", "Portugal"), + ("PR", "Puerto Rico"), + ("QA", "Qatar"), + ("RE", "Reunion"), + ("RO", "Romania"), + ("RU", "Russian Federation"), + ("RW", "Rwanda"), + ("BL", "Saint Barthelemy"), + ("SH", "Saint Helena"), + ("KN", "Saint Kitts and Nevis"), + ("LC", "Saint Lucia"), + ("MF", "Saint Martin"), + ("PM", "Saint Pierre and Miquelon"), + ("VC", "Saint Vincent and the Grenadines"), + ("WS", "Samoa"), + ("SM", "San Marino"), + ("ST", "Sao Tome and Principe"), + ("SA", "Saudi Arabia"), + ("SN", "Senegal"), + ("RS", "Serbia"), + ("SC", "Seychelles"), + ("SL", "Sierra Leone"), + ("SG", "Singapore"), + ("SK", "Slovakia"), + ("SI", "Slovenia"), + ("SB", "Solomon Islands"), + ("SO", "Somalia"), + ("ZA", "South Africa"), + ("GS", "South Georgia and the South Sandwich Islands"), + ("ES", "Spain"), + ("LK", "Sri Lanka"), + ("SD", "Sudan"), + ("SR", "Suriname"), + ("SJ", "Svalbard and Jan Mayen"), + ("SZ", "Swaziland"), + ("SE", "Sweden"), + ("CH", "Switzerland"), + ("SY", "Syrian Arab Republic"), + ("TW", "Taiwan, Province of China"), + ("TJ", "Tajikistan"), + ("TZ", "Tanzania, United Republic of"), + ("TH", "Thailand"), + ("TL", "Timor-Leste"), + ("TG", "Togo"), + ("TK", "Tokelau"), + ("TO", "Tonga"), + ("TT", "Trinidad and Tobago"), + ("TN", "Tunisia"), + ("TR", "Turkey"), + ("TM", "Turkmenistan"), + ("TC", "Turks and Caicos Islands"), + ("TV", "Tuvalu"), + ("UG", "Uganda"), + ("UA", "Ukraine"), + ("AE", "United Arab Emirates"), + ("US", "United States"), + ("UM", "United States Minor Outlying Islands"), + ("UY", "Uruguay"), + ("UZ", "Uzbekistan"), + ("VU", "Vanuatu"), + ("VE", "Venezuela"), + ("VN", "Viet Nam"), + ("VG", "Virgin Islands, British"), + ("VI", "Virgin Islands, U.S."), + ("WF", "Wallis and Futuna"), + ("EH", "Western Sahara"), + ("YE", "Yemen"), + ("ZM", "Zambia"), + ("ZW", "Zimbabwe"), + ], + max_length=3, + null=True, + verbose_name="Country", + ), + ), + ( + "description", + models.TextField(blank=True, null=True, verbose_name="Notes"), + ), + ("is_active", models.BooleanField(default=True)), + ( + "assigned_to", + models.ManyToManyField( + related_name="contact_assigned_users", to="common.profile" + ), + ), + ( + "created_by", + models.ForeignKey( + null=True, + on_delete=django.db.models.deletion.SET_NULL, + related_name="%(class)s_created_by", + to=settings.AUTH_USER_MODEL, + verbose_name="Created By", + ), + ), + ( + "org", + models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, + related_name="contacts", + to="common.org", + ), + ), + ("tags", models.ManyToManyField(blank=True, to="common.tags")), + ( + "teams", + models.ManyToManyField( + related_name="contact_teams", to="common.teams" + ), + ), + ( + "updated_by", + models.ForeignKey( + null=True, + on_delete=django.db.models.deletion.SET_NULL, + related_name="%(class)s_updated_by", + to=settings.AUTH_USER_MODEL, + verbose_name="Last Modified By", + ), + ), + ], + options={ + "verbose_name": "Contact", + "verbose_name_plural": "Contacts", + "db_table": "contacts", + "ordering": ("-created_at",), + "indexes": [ + models.Index( + fields=["organization"], name="contacts_organiz_8cebf0_idx" + ), + models.Index( + fields=["org", "-created_at"], name="contacts_org_id_f280a0_idx" + ), + ], + }, + ), + ] diff --git a/docs/__init__.py b/backend/contacts/migrations/__init__.py similarity index 100% rename from docs/__init__.py rename to backend/contacts/migrations/__init__.py diff --git a/backend/contacts/models.py b/backend/contacts/models.py new file mode 100644 index 00000000..1d9c859c --- /dev/null +++ b/backend/contacts/models.py @@ -0,0 +1,76 @@ +import arrow +from django.db import models +from django.utils.translation import gettext_lazy as _ +from phonenumber_field.modelfields import PhoneNumberField + +from common.base import AssignableMixin, BaseModel +from common.models import Org, Profile, Tags, Teams +from common.utils import COUNTRIES + + +class Contact(AssignableMixin, BaseModel): + """ + Contact model for CRM - Streamlined for modern sales workflow + Based on Twenty CRM and Salesforce patterns + """ + + # Core Contact Information + first_name = models.CharField(_("First name"), max_length=255) + last_name = models.CharField(_("Last name"), max_length=255) + email = models.EmailField(_("Email"), blank=True, null=True) + phone = PhoneNumberField(_("Phone"), null=True, blank=True) + + # Professional Information + organization = models.CharField(_("Company"), max_length=255, blank=True, null=True) + title = models.CharField(_("Job Title"), max_length=255, blank=True, null=True) + department = models.CharField( + _("Department"), max_length=255, blank=True, null=True + ) + + # Communication Preferences + do_not_call = models.BooleanField(_("Do Not Call"), default=False) + linked_in_url = models.URLField(_("LinkedIn URL"), blank=True, null=True) + + # Address (flat fields like Lead model) + address_line = models.CharField(_("Address"), max_length=255, blank=True, null=True) + city = models.CharField(_("City"), max_length=255, blank=True, null=True) + state = models.CharField(_("State"), max_length=255, blank=True, null=True) + postcode = models.CharField(_("Postal Code"), max_length=64, blank=True, null=True) + country = models.CharField( + _("Country"), max_length=3, choices=COUNTRIES, blank=True, null=True + ) + + # Assignment + assigned_to = models.ManyToManyField(Profile, related_name="contact_assigned_users") + teams = models.ManyToManyField(Teams, related_name="contact_teams") + + # Tags + tags = models.ManyToManyField(Tags, blank=True) + + # Notes + description = models.TextField(_("Notes"), blank=True, null=True) + + # System Fields + is_active = models.BooleanField(default=True) + org = models.ForeignKey(Org, on_delete=models.CASCADE, related_name="contacts") + + class Meta: + verbose_name = "Contact" + verbose_name_plural = "Contacts" + db_table = "contacts" + ordering = ("-created_at",) + indexes = [ + models.Index(fields=["organization"]), + models.Index(fields=["org", "-created_at"]), + ] + + def __str__(self): + return self.first_name + + @property + def created_on_arrow(self): + return arrow.get(self.created_at).humanize() + + @property + def created_on(self): + return self.created_at diff --git a/contacts/serializer.py b/backend/contacts/serializer.py similarity index 60% rename from contacts/serializer.py rename to backend/contacts/serializer.py index d9a4b545..375ed362 100644 --- a/contacts/serializer.py +++ b/backend/contacts/serializer.py @@ -2,23 +2,22 @@ from rest_framework import serializers from common.serializer import ( AttachmentsSerializer, - BillingAddressSerializer, OrganizationSerializer, ProfileSerializer, + TeamsSerializer, ) from contacts.models import Contact -from teams.serializer import TeamsSerializer class ContactSerializer(serializers.ModelSerializer): + """Serializer for reading Contact data""" + teams = TeamsSerializer(read_only=True, many=True) assigned_to = ProfileSerializer(read_only=True, many=True) - address = BillingAddressSerializer(read_only=True) get_team_users = ProfileSerializer(read_only=True, many=True) get_team_and_assigned_users = ProfileSerializer(read_only=True, many=True) get_assigned_users_not_in_teams = ProfileSerializer(read_only=True, many=True) contact_attachment = AttachmentsSerializer(read_only=True, many=True) - date_of_birth = serializers.DateField() org = OrganizationSerializer() country = serializers.SerializerMethodField() @@ -29,87 +28,94 @@ class ContactSerializer(serializers.ModelSerializer): model = Contact fields = ( "id", - "salutation", + # Core Contact Information "first_name", "last_name", - "date_of_birth", + "email", + "phone", + # Professional Information "organization", "title", - "primary_email", - "secondary_email", - "mobile_number", - "secondary_number", "department", - "country", - "language", + # Communication Preferences "do_not_call", - "address", - "description", "linked_in_url", - "facebook_url", - "twitter_username", - "contact_attachment", + # Address + "address_line", + "city", + "state", + "postcode", + "country", + # Assignment "assigned_to", + "teams", + # Tags + "tags", + # Notes + "description", + # System "created_by", "created_at", "is_active", - "teams", + "org", "created_on_arrow", "get_team_users", "get_team_and_assigned_users", "get_assigned_users_not_in_teams", - "org", + "contact_attachment", ) class CreateContactSerializer(serializers.ModelSerializer): + """Serializer for creating/updating Contact data""" + def __init__(self, *args, **kwargs): request_obj = kwargs.pop("request_obj", None) super().__init__(*args, **kwargs) if request_obj: self.org = request_obj.profile.org - def validate_first_name(self, first_name): - if self.instance: - if ( - Contact.objects.filter(first_name__iexact=first_name, org=self.org) - .exclude(id=self.instance.id) - .exists() - ): - raise serializers.ValidationError( - "Contact already exists with this name" - ) - - else: - if Contact.objects.filter( - first_name__iexact=first_name, org=self.org - ).exists(): - raise serializers.ValidationError( - "Contact already exists with this name" - ) - return first_name + def validate_email(self, email): + if email: + if self.instance: + if ( + Contact.objects.filter(email__iexact=email, org=self.org) + .exclude(id=self.instance.id) + .exists() + ): + raise serializers.ValidationError( + "Contact already exists with this email" + ) + else: + if Contact.objects.filter(email__iexact=email, org=self.org).exists(): + raise serializers.ValidationError( + "Contact already exists with this email" + ) + return email class Meta: model = Contact fields = ( - "salutation", + # Core Contact Information "first_name", "last_name", + "email", + "phone", + # Professional Information "organization", "title", - "primary_email", - "secondary_email", - "mobile_number", - "secondary_number", "department", - "country", - "language", + # Communication Preferences "do_not_call", - "address", - "description", "linked_in_url", - "facebook_url", - "twitter_username", + # Address + "address_line", + "city", + "state", + "postcode", + "country", + # Notes + "description", ) @@ -117,5 +123,6 @@ class ContactDetailEditSwaggerSerializer(serializers.Serializer): comment = serializers.CharField() contact_attachment = serializers.FileField() + class ContactCommentEditSwaggerSerializer(serializers.Serializer): comment = serializers.CharField() diff --git a/backend/contacts/swagger_params.py b/backend/contacts/swagger_params.py new file mode 100644 index 00000000..9bb751c1 --- /dev/null +++ b/backend/contacts/swagger_params.py @@ -0,0 +1,47 @@ +from drf_spectacular.types import OpenApiTypes +from drf_spectacular.utils import OpenApiParameter + +organization_params_in_header = organization_params_in_header = OpenApiParameter( + "org", OpenApiTypes.STR, OpenApiParameter.HEADER +) + +organization_params = [ + organization_params_in_header, +] + +contact_list_get_params = [ + organization_params_in_header, + OpenApiParameter("name", OpenApiTypes.STR, OpenApiParameter.QUERY), + OpenApiParameter("city", OpenApiTypes.STR, OpenApiParameter.QUERY), + OpenApiParameter("assigned_to", OpenApiTypes.STR, OpenApiParameter.QUERY), +] + +contact_create_post_params = [ + organization_params_in_header, + OpenApiParameter("salutation", OpenApiParameter.QUERY, OpenApiTypes.STR), + OpenApiParameter("first_name", OpenApiParameter.QUERY, OpenApiTypes.STR), + OpenApiParameter("last_name", OpenApiParameter.QUERY, OpenApiTypes.STR), + OpenApiParameter("date_of_birth", OpenApiParameter.QUERY, OpenApiTypes.STR), + OpenApiParameter("organization", OpenApiTypes.STR, OpenApiParameter.QUERY), + OpenApiParameter("title", OpenApiParameter.QUERY, OpenApiTypes.STR), + OpenApiParameter("email", OpenApiTypes.STR, OpenApiParameter.QUERY), + OpenApiParameter("secondary_email", OpenApiTypes.STR, OpenApiParameter.QUERY), + OpenApiParameter("phone", OpenApiTypes.STR, OpenApiParameter.QUERY), + OpenApiParameter("secondary_number", OpenApiTypes.STR, OpenApiParameter.QUERY), + OpenApiParameter("department", OpenApiTypes.STR, OpenApiParameter.QUERY), + OpenApiParameter("language", OpenApiTypes.STR, OpenApiParameter.QUERY), + OpenApiParameter("do_not_call", OpenApiParameter.QUERY, OpenApiTypes.BOOL), + OpenApiParameter("address_line", OpenApiParameter.QUERY, OpenApiTypes.STR), + OpenApiParameter("street", OpenApiTypes.STR, OpenApiParameter.QUERY), + OpenApiParameter("city", OpenApiTypes.STR, OpenApiParameter.QUERY), + OpenApiParameter("state", OpenApiTypes.STR, OpenApiParameter.QUERY), + OpenApiParameter("pincode", OpenApiTypes.STR, OpenApiParameter.QUERY), + OpenApiParameter("country", OpenApiTypes.STR, OpenApiParameter.QUERY), + OpenApiParameter("description", OpenApiTypes.STR, OpenApiParameter.QUERY), + OpenApiParameter("linked_in_url", OpenApiTypes.STR, OpenApiParameter.QUERY), + OpenApiParameter("facebook_url", OpenApiTypes.STR, OpenApiParameter.QUERY), + OpenApiParameter("twitter_username", OpenApiTypes.STR, OpenApiParameter.QUERY), + OpenApiParameter("teams", OpenApiTypes.STR, OpenApiParameter.QUERY), + OpenApiParameter("assigned_to", OpenApiTypes.STR, OpenApiParameter.QUERY), + OpenApiParameter("contact_attachment", OpenApiParameter.QUERY, OpenApiTypes.BINARY), +] diff --git a/contacts/tasks.py b/backend/contacts/tasks.py similarity index 100% rename from contacts/tasks.py rename to backend/contacts/tasks.py diff --git a/contacts/tests_celery_tasks.py b/backend/contacts/tests_celery_tasks.py similarity index 100% rename from contacts/tests_celery_tasks.py rename to backend/contacts/tests_celery_tasks.py diff --git a/contacts/urls.py b/backend/contacts/urls.py similarity index 99% rename from contacts/urls.py rename to backend/contacts/urls.py index 6b9bb344..b9ec8b92 100644 --- a/contacts/urls.py +++ b/backend/contacts/urls.py @@ -10,4 +10,3 @@ urlpatterns = [ path("comment//", views.ContactCommentView.as_view()), path("attachment//", views.ContactAttachmentView.as_view()), ] - \ No newline at end of file diff --git a/contacts/views.py b/backend/contacts/views.py similarity index 68% rename from contacts/views.py rename to backend/contacts/views.py index 2adafdb1..e870e0ae 100644 --- a/contacts/views.py +++ b/backend/contacts/views.py @@ -1,5 +1,6 @@ import json +from django.contrib.contenttypes.models import ContentType from django.db.models import Q from django.shortcuts import get_object_or_404 from drf_spectacular.utils import OpenApiExample, OpenApiParameter, extend_schema @@ -9,31 +10,28 @@ from rest_framework.permissions import IsAuthenticated from rest_framework.response import Response from rest_framework.views import APIView -from common.models import Attachments, Comment, Profile -from common.serializer import ( - AttachmentsSerializer, - BillingAddressSerializer, - CommentSerializer, -) +from common.models import Attachments, Comment, Profile, Teams +from common.serializer import AttachmentsSerializer, CommentSerializer from common.utils import COUNTRIES -#from common.external_auth import CustomDualAuthentication -from contacts import swagger_params1 +# from common.external_auth import CustomDualAuthentication +from contacts import swagger_params from contacts.models import Contact, Profile from contacts.serializer import * from contacts.tasks import send_email_to_assigned_user from tasks.serializer import TaskSerializer -from teams.models import Teams class ContactsListView(APIView, LimitOffsetPagination): - #authentication_classes = (CustomDualAuthentication,) + # authentication_classes = (CustomDualAuthentication,) permission_classes = (IsAuthenticated,) model = Contact def get_context_data(self, **kwargs): params = self.request.query_params - queryset = self.model.objects.filter(org=self.request.profile.org).order_by("-id") + queryset = self.model.objects.filter(org=self.request.profile.org).order_by( + "-id" + ) if self.request.profile.role != "ADMIN" and not self.request.profile.is_admin: queryset = queryset.filter( Q(assigned_to__in=[self.request.profile]) @@ -46,9 +44,9 @@ class ContactsListView(APIView, LimitOffsetPagination): if params.get("city"): queryset = queryset.filter(address__city__icontains=params.get("city")) if params.get("phone"): - queryset = queryset.filter(mobile_number__icontains=params.get("phone")) + queryset = queryset.filter(phone__icontains=params.get("phone")) if params.get("email"): - queryset = queryset.filter(primary_email__icontains=params.get("email")) + queryset = queryset.filter(email__icontains=params.get("email")) if params.getlist("assigned_to"): queryset = queryset.filter( assigned_to__id__in=params.get("assigned_to") @@ -68,45 +66,42 @@ class ContactsListView(APIView, LimitOffsetPagination): context["per_page"] = 10 page_number = (int(self.offset / 10) + 1,) context["page_number"] = page_number - context.update({"contacts_count": self.count, "offset": offset}) + # Standard DRF pagination format for frontend compatibility + context["count"] = self.count + context["results"] = contacts + # Legacy format for backwards compatibility + context["contacts_count"] = self.count + context["offset"] = offset context["contact_obj_list"] = contacts context["countries"] = COUNTRIES - users = Profile.objects.filter(is_active=True, org=self.request.profile.org).values( - "id", "user__email" - ) + users = Profile.objects.filter( + is_active=True, org=self.request.profile.org + ).values("id", "user__email") context["users"] = users return context - @extend_schema( - tags=["contacts"], parameters=swagger_params1.contact_list_get_params - ) + @extend_schema(tags=["contacts"], parameters=swagger_params.contact_list_get_params) def get(self, request, *args, **kwargs): context = self.get_context_data(**kwargs) return Response(context) @extend_schema( - tags=["contacts"], parameters=swagger_params1.organization_params,request=CreateContactSerializer + tags=["contacts"], + parameters=swagger_params.organization_params, + request=CreateContactSerializer, ) def post(self, request, *args, **kwargs): params = request.data contact_serializer = CreateContactSerializer(data=params, request_obj=request) - address_serializer = BillingAddressSerializer(data=params) - data = {} if not contact_serializer.is_valid(): - data["contact_errors"] = contact_serializer.errors - if not address_serializer.is_valid(): - data["address_errors"] = (address_serializer.errors,) - if data: return Response( - {"error": True, "errors": data}, + {"error": True, "errors": contact_serializer.errors}, status=status.HTTP_400_BAD_REQUEST, ) - # if contact_serializer.is_valid() and address_serializer.is_valid(): - address_obj = address_serializer.save() - contact_obj = contact_serializer.save(date_of_birth=params.get("date_of_birth")) - contact_obj.address = address_obj + # Contact model uses flat address fields, no separate Address object needed + contact_obj = contact_serializer.save() contact_obj.org = request.profile.org contact_obj.save() @@ -117,7 +112,9 @@ class ContactsListView(APIView, LimitOffsetPagination): if params.get("assigned_to"): assinged_to_list = params.get("assigned_to") - profiles = Profile.objects.filter(id__in=assinged_to_list, org=request.profile.org) + profiles = Profile.objects.filter( + id__in=assinged_to_list, org=request.profile.org + ) contact_obj.assigned_to.add(*profiles) recipients = list(contact_obj.assigned_to.all().values_list("id", flat=True)) @@ -145,15 +142,16 @@ class ContactDetailView(APIView): model = Contact def get_object(self, pk): - return get_object_or_404(Contact, pk=pk) + return get_object_or_404(Contact, pk=pk, org=self.request.profile.org) @extend_schema( - tags=["contacts"], parameters=swagger_params1.contact_create_post_params,request=CreateContactSerializer + tags=["contacts"], + parameters=swagger_params.contact_create_post_params, + request=CreateContactSerializer, ) def put(self, request, pk, format=None): data = request.data contact_obj = self.get_object(pk=pk) - address_obj = contact_obj.address if contact_obj.org != request.profile.org: return Response( {"error": True, "errors": "User company doesnot match with header...."}, @@ -162,84 +160,65 @@ class ContactDetailView(APIView): contact_serializer = CreateContactSerializer( data=data, instance=contact_obj, request_obj=request ) - address_serializer = BillingAddressSerializer(data=data, instance=address_obj) - data = {} if not contact_serializer.is_valid(): - data["contact_errors"] = contact_serializer.errors - if not address_serializer.is_valid(): - data["address_errors"] = (address_serializer.errors,) - if data: - data["error"] = True return Response( - data, + {"error": True, "errors": contact_serializer.errors}, status=status.HTTP_400_BAD_REQUEST, ) - if contact_serializer.is_valid(): - if ( - self.request.profile.role != "ADMIN" - and not self.request.profile.is_admin + if self.request.profile.role != "ADMIN" and not self.request.profile.is_admin: + if not ( + (self.request.profile == contact_obj.created_by) + or (self.request.profile in contact_obj.assigned_to.all()) ): - if not ( - (self.request.profile == contact_obj.created_by) - or (self.request.profile in contact_obj.assigned_to.all()) - ): - return Response( - { - "error": True, - "errors": "You do not have Permission to perform this action", - }, - status=status.HTTP_403_FORBIDDEN, - ) - - address_obj = address_serializer.save() - contact_obj = contact_serializer.save( - date_of_birth=data.get("date_of_birth") - ) - contact_obj.address = address_obj - contact_obj.save() - contact_obj = contact_serializer.save() - contact_obj.teams.clear() - if data.get("teams"): - teams_list = json.loads(data.get("teams")) - teams = Teams.objects.filter(id__in=teams_list, org=request.profile.org) - contact_obj.teams.add(*teams) - - contact_obj.assigned_to.clear() - if data.get("assigned_to"): - assinged_to_list = json.loads(data.get("assigned_to")) - profiles = Profile.objects.filter( - id__in=assinged_to_list, org=request.profile.org + return Response( + { + "error": True, + "errors": "You do not have Permission to perform this action", + }, + status=status.HTTP_403_FORBIDDEN, ) - contact_obj.assigned_to.add(*profiles) - previous_assigned_to_users = list( - contact_obj.assigned_to.all().values_list("id", flat=True) - ) + contact_obj = contact_serializer.save() + contact_obj.teams.clear() + if data.get("teams"): + teams_list = json.loads(data.get("teams")) + teams = Teams.objects.filter(id__in=teams_list, org=request.profile.org) + contact_obj.teams.add(*teams) - assigned_to_list = list( - contact_obj.assigned_to.all().values_list("id", flat=True) - ) - recipients = list(set(assigned_to_list) - set(previous_assigned_to_users)) - send_email_to_assigned_user.delay( - recipients, - contact_obj.id, - ) - if request.FILES.get("contact_attachment"): - attachment = Attachments() - attachment.created_by = request.profile.user - attachment.file_name = request.FILES.get("contact_attachment").name - attachment.contact = contact_obj - attachment.attachment = request.FILES.get("contact_attachment") - attachment.save() - return Response( - {"error": False, "message": "Contact Updated Successfully"}, - status=status.HTTP_200_OK, + contact_obj.assigned_to.clear() + if data.get("assigned_to"): + assinged_to_list = json.loads(data.get("assigned_to")) + profiles = Profile.objects.filter( + id__in=assinged_to_list, org=request.profile.org ) + contact_obj.assigned_to.add(*profiles) - @extend_schema( - tags=["contacts"], parameters=swagger_params1.organization_params - ) + previous_assigned_to_users = list( + contact_obj.assigned_to.all().values_list("id", flat=True) + ) + + assigned_to_list = list( + contact_obj.assigned_to.all().values_list("id", flat=True) + ) + recipients = list(set(assigned_to_list) - set(previous_assigned_to_users)) + send_email_to_assigned_user.delay( + recipients, + contact_obj.id, + ) + if request.FILES.get("contact_attachment"): + attachment = Attachments() + attachment.created_by = request.profile.user + attachment.file_name = request.FILES.get("contact_attachment").name + attachment.contact = contact_obj + attachment.attachment = request.FILES.get("contact_attachment") + attachment.save() + return Response( + {"error": False, "message": "Contact Updated Successfully"}, + status=status.HTTP_200_OK, + ) + + @extend_schema(tags=["contacts"], parameters=swagger_params.organization_params) def get(self, request, pk, format=None): context = {} contact_obj = self.get_object(pk) @@ -287,16 +266,30 @@ class ContactDetailView(APIView): if request.profile == contact_obj.created_by: user_assgn_list.append(self.request.profile.id) - context["address_obj"] = BillingAddressSerializer(contact_obj.address).data + # Address is now flat fields on Contact model + context["address_obj"] = { + "address_line": contact_obj.address_line, + "city": contact_obj.city, + "state": contact_obj.state, + "postcode": contact_obj.postcode, + "country": contact_obj.country, + } context["countries"] = COUNTRIES + contact_content_type = ContentType.objects.get_for_model(Contact) + comments = Comment.objects.filter( + content_type=contact_content_type, + object_id=contact_obj.id, + org=request.profile.org, + ).order_by("-id") + attachments = Attachments.objects.filter( + content_type=contact_content_type, + object_id=contact_obj.id, + org=request.profile.org, + ).order_by("-id") context.update( { - "comments": CommentSerializer( - contact_obj.contact_comments.all(), many=True - ).data, - "attachments": AttachmentsSerializer( - contact_obj.contact_attachment.all(), many=True - ).data, + "comments": CommentSerializer(comments, many=True).data, + "attachments": AttachmentsSerializer(attachments, many=True).data, "assigned_data": assigned_data, "tasks": TaskSerializer( contact_obj.contacts_tasks.all(), many=True @@ -306,9 +299,7 @@ class ContactDetailView(APIView): ) return Response(context) - @extend_schema( - tags=["contacts"], parameters=swagger_params1.organization_params - ) + @extend_schema(tags=["contacts"], parameters=swagger_params.organization_params) def delete(self, request, pk, format=None): self.object = self.get_object(pk) if self.object.org != request.profile.org: @@ -337,7 +328,9 @@ class ContactDetailView(APIView): ) @extend_schema( - tags=["contacts"], parameters=swagger_params1.organization_params,request=ContactDetailEditSwaggerSerializer + tags=["contacts"], + parameters=swagger_params.organization_params, + request=ContactDetailEditSwaggerSerializer, ) def post(self, request, pk, **kwargs): params = request.data @@ -372,11 +365,16 @@ class ContactDetailView(APIView): attachment.attachment = self.request.FILES.get("contact_attachment") attachment.save() - comments = Comment.objects.filter(contact__id=self.contact_obj.id).order_by( - "-id" - ) + contact_content_type = ContentType.objects.get_for_model(Contact) + comments = Comment.objects.filter( + content_type=contact_content_type, + object_id=self.contact_obj.id, + org=self.request.profile.org, + ).order_by("-id") attachments = Attachments.objects.filter( - contact__id=self.contact_obj.id + content_type=contact_content_type, + object_id=self.contact_obj.id, + org=self.request.profile.org, ).order_by("-id") context.update( { @@ -394,10 +392,12 @@ class ContactCommentView(APIView): permission_classes = (IsAuthenticated,) def get_object(self, pk): - return self.model.objects.get(pk=pk) + return self.model.objects.get(pk=pk, org=self.request.profile.org) @extend_schema( - tags=["contacts"], parameters=swagger_params1.organization_params,request=ContactCommentEditSwaggerSerializer + tags=["contacts"], + parameters=swagger_params.organization_params, + request=ContactCommentEditSwaggerSerializer, ) def put(self, request, pk, format=None): params = request.data @@ -426,9 +426,7 @@ class ContactCommentView(APIView): status=status.HTTP_403_FORBIDDEN, ) - @extend_schema( - tags=["contacts"], parameters=swagger_params1.organization_params - ) + @extend_schema(tags=["contacts"], parameters=swagger_params.organization_params) def delete(self, request, pk, format=None): self.object = self.get_object(pk) if ( @@ -455,9 +453,7 @@ class ContactAttachmentView(APIView): # #authentication_classes = (CustomDualAuthentication,) permission_classes = (IsAuthenticated,) - @extend_schema( - tags=["contacts"], parameters=swagger_params1.organization_params - ) + @extend_schema(tags=["contacts"], parameters=swagger_params.organization_params) def delete(self, request, pk, format=None): self.object = self.model.objects.get(pk=pk) if ( diff --git a/crm/__init__.py b/backend/crm/__init__.py similarity index 100% rename from crm/__init__.py rename to backend/crm/__init__.py diff --git a/crm/celery.py b/backend/crm/celery.py similarity index 100% rename from crm/celery.py rename to backend/crm/celery.py diff --git a/crm/server_settings.py b/backend/crm/server_settings.py similarity index 100% rename from crm/server_settings.py rename to backend/crm/server_settings.py diff --git a/crm/settings.py b/backend/crm/settings.py similarity index 90% rename from crm/settings.py rename to backend/crm/settings.py index aa2b8b23..7951533c 100644 --- a/crm/settings.py +++ b/backend/crm/settings.py @@ -37,21 +37,6 @@ DEBUG = True ALLOWED_HOSTS = ["*"] INSTALLED_APPS = [ - "wagtail.contrib.forms", - "wagtail.contrib.redirects", - "wagtail.embeds", - "wagtail.sites", - "wagtail.users", - "wagtail.snippets", - "wagtail.documents", - "wagtail.images", - "wagtail.search", - "wagtail.admin", - "wagtail", - "cms", - "wagtail.contrib.settings", - "modelcluster", - "taggit", "django.contrib.auth", "django.contrib.admin", "django.contrib.contenttypes", @@ -68,14 +53,11 @@ INSTALLED_APPS = [ "accounts", "cases", "contacts", - "emails", "leads", "opportunity", - "planner", "tasks", "invoices", - "events", - "teams", + # "teams", # Merged into common app ] MIDDLEWARE = [ @@ -90,7 +72,7 @@ MIDDLEWARE = [ "crum.CurrentRequestUserMiddleware", # "common.external_auth.CustomDualAuthentication" "common.middleware.get_company.GetProfileAndOrg", - "wagtail.contrib.redirects.middleware.RedirectMiddleware", + "common.middleware.rls_context.RequireOrgContext", # RLS: Enforce org context + set PostgreSQL session variable ] ROOT_URLCONF = "crm.urls" @@ -110,7 +92,6 @@ TEMPLATES = [ "django.contrib.messages.context_processors.messages", "common.context_processors.common.app_name", # "django_settings_export.settings_export", - "wagtail.contrib.settings.context_processors.settings", ], }, }, @@ -201,7 +182,11 @@ LOGGING = { "django.server": { "()": "django.utils.log.ServerFormatter", "format": "[%(server_time)s] %(message)s", - } + }, + "security": { + "format": "%(asctime)s | %(levelname)s | %(message)s", + "datefmt": "%Y-%m-%d %H:%M:%S", + }, }, "handlers": { "console": { @@ -228,6 +213,11 @@ LOGGING = { "class": "logging.FileHandler", "filename": "server.log", }, + "security_audit": { + "class": "logging.FileHandler", + "filename": "security_audit.log", + "formatter": "security", + }, }, "loggers": { "django": { @@ -243,22 +233,23 @@ LOGGING = { "level": "INFO", "propagate": False, }, + "security.audit": { + "handlers": ["security_audit", "console"], + "level": "INFO", + "propagate": False, + }, }, } APPLICATION_NAME = "bottlecrm" -WAGTAIL_SITE_NAME = "bottlecrm" - -WAGTAILADMIN_BASE_URL = "https://bottlecrm.com" - SETTINGS_EXPORT = ["APPLICATION_NAME"] REST_FRAMEWORK = { "EXCEPTION_HANDLER": "rest_framework.views.exception_handler", "DEFAULT_AUTHENTICATION_CLASSES": ( "rest_framework_simplejwt.authentication.JWTAuthentication", - "common.external_auth.CustomDualAuthentication" + "common.external_auth.CustomDualAuthentication", # "rest_framework.authentication.SessionAuthentication", # "rest_framework.authentication.BasicAuthentication", ), @@ -275,7 +266,6 @@ SPECTACULAR_SETTINGS = { "SERVE_INCLUDE_SCHEMA": False, "COMPONENT_SPLIT_REQUEST": True, "PREPROCESSING_HOOKS": ["common.custom_openapi.preprocessing_filter_spec"], - } # JWT_SETTINGS = { @@ -333,3 +323,8 @@ JWT_ALGO = "HS256" DOMAIN_NAME = os.environ["DOMAIN_NAME"] SWAGGER_ROOT_URL = os.environ["SWAGGER_ROOT_URL"] + +# Google OAuth Configuration +GOOGLE_CLIENT_ID = os.environ.get("GOOGLE_CLIENT_ID", "") +GOOGLE_CLIENT_SECRET = os.environ.get("GOOGLE_CLIENT_SECRET", "") +GOOGLE_REDIRECT_URI = os.environ.get("GOOGLE_REDIRECT_URI", "") diff --git a/crm/urls.py b/backend/crm/urls.py similarity index 77% rename from crm/urls.py rename to backend/crm/urls.py index 2c215711..cc2d9c76 100644 --- a/crm/urls.py +++ b/backend/crm/urls.py @@ -1,7 +1,6 @@ -import os -from django.contrib import admin from django.conf import settings from django.conf.urls.static import static +from django.contrib import admin from django.contrib.auth import views from django.urls import include, path from django.urls import re_path as url @@ -11,12 +10,7 @@ from drf_spectacular.views import ( SpectacularRedocView, SpectacularSwaggerView, ) -# from drf_yasg import openapi -# from drf_yasg.views import get_schema_view from rest_framework import permissions -from wagtail import urls as wagtail_urls -from wagtail.admin import urls as wagtailadmin_urls -from wagtail.documents import urls as wagtaildocs_urls app_name = "crm" @@ -30,10 +24,7 @@ urlpatterns = [ path( "logout/", views.LogoutView.as_view(), {"next_page": "/login/"}, name="logout" ), - path("admin/", include(wagtailadmin_urls)), - - path("django/admin/", admin.site.urls), - path("documents/", include(wagtaildocs_urls)), + path("admin/", admin.site.urls), path("schema/", SpectacularAPIView.as_view(), name="schema"), # Optional UI: path( @@ -46,7 +37,6 @@ urlpatterns = [ SpectacularRedocView.as_view(url_name="schema"), name="redoc", ), - path("", include(wagtail_urls)), ] diff --git a/crm/wsgi.py b/backend/crm/wsgi.py similarity index 100% rename from crm/wsgi.py rename to backend/crm/wsgi.py diff --git a/emails/__init__.py b/backend/invoices/__init__.py similarity index 100% rename from emails/__init__.py rename to backend/invoices/__init__.py diff --git a/backend/invoices/admin.py b/backend/invoices/admin.py new file mode 100644 index 00000000..724f683a --- /dev/null +++ b/backend/invoices/admin.py @@ -0,0 +1,73 @@ +from django.contrib import admin + +from invoices.models import Invoice, InvoiceHistory, InvoiceLineItem, Product + + +class InvoiceLineItemInline(admin.TabularInline): + model = InvoiceLineItem + extra = 1 + fields = ("product", "description", "quantity", "unit_price", "total", "order") + readonly_fields = ("total",) + + +@admin.register(Invoice) +class InvoiceAdmin(admin.ModelAdmin): + list_display = ( + "invoice_number", + "invoice_title", + "name", + "status", + "total_amount", + "due_date", + "created_at", + ) + list_filter = ("status", "created_at", "due_date") + search_fields = ("invoice_number", "invoice_title", "name", "email") + raw_id_fields = ("created_by", "org", "from_address", "to_address") + filter_horizontal = ("assigned_to", "accounts", "teams") + inlines = [InvoiceLineItemInline] + date_hierarchy = "created_at" + ordering = ("-created_at",) + + +@admin.register(InvoiceHistory) +class InvoiceHistoryAdmin(admin.ModelAdmin): + list_display = ("invoice", "invoice_number", "status", "updated_by", "created_at") + list_filter = ("status", "created_at") + search_fields = ("invoice_number", "invoice_title") + raw_id_fields = ("invoice", "updated_by") + ordering = ("-created_at",) + + +@admin.register(Product) +class ProductAdmin(admin.ModelAdmin): + list_display = ( + "name", + "sku", + "price", + "category", + "is_active", + "org", + "created_at", + ) + list_filter = ("is_active", "category", "org", "created_at") + search_fields = ("name", "sku", "description") + raw_id_fields = ("org",) + ordering = ("name",) + + +@admin.register(InvoiceLineItem) +class InvoiceLineItemAdmin(admin.ModelAdmin): + list_display = ( + "invoice", + "description", + "product", + "quantity", + "unit_price", + "total", + "order", + ) + list_filter = ("invoice__status", "created_at") + search_fields = ("description", "invoice__invoice_number", "product__name") + raw_id_fields = ("invoice", "product") + ordering = ("invoice", "order") diff --git a/invoices/api_urls.py b/backend/invoices/api_urls.py similarity index 100% rename from invoices/api_urls.py rename to backend/invoices/api_urls.py diff --git a/invoices/api_views.py b/backend/invoices/api_views.py similarity index 89% rename from invoices/api_views.py rename to backend/invoices/api_views.py index bd478be0..a5b77816 100644 --- a/invoices/api_views.py +++ b/backend/invoices/api_views.py @@ -2,9 +2,10 @@ import json import pytz from django.conf import settings +from django.contrib.contenttypes.models import ContentType from django.contrib.sites.shortcuts import get_current_site from django.db.models import Q -from drf_yasg.utils import swagger_auto_schema +from drf_spectacular.utils import extend_schema from rest_framework import status from rest_framework.pagination import LimitOffsetPagination from rest_framework.permissions import IsAuthenticated @@ -13,22 +14,24 @@ from rest_framework.views import APIView from accounts.models import Account from accounts.serializer import AccountSerializer -from common.models import Attachments, Comment, User +from common.models import Attachments, Comment, Teams, User -#from common.external_auth import CustomDualAuthentication +# from common.external_auth import CustomDualAuthentication from common.serializer import ( AttachmentsSerializer, BillingAddressSerializer, CommentSerializer, + TeamsSerializer, UserSerializer, ) from common.utils import COUNTRIES, CURRENCY_CODES -from invoices import swagger_params1 +from invoices import swagger_params from invoices.models import Invoice from invoices.serializer import ( InvoiceCreateSerializer, InvoiceHistorySerializer, InvoiceSerailizer, + InvoiceSwaggerSerailizer, ) from invoices.tasks import ( create_invoice_history, @@ -36,8 +39,6 @@ from invoices.tasks import ( send_invoice_email, send_invoice_email_cancel, ) -from teams.models import Teams -from teams.serializer import TeamsSerializer INVOICE_STATUS = ( ("Draft", "Draft"), @@ -50,7 +51,7 @@ INVOICE_STATUS = ( class InvoiceListView(APIView, LimitOffsetPagination): - #authentication_classes = (CustomDualAuthentication,) + # authentication_classes = (CustomDualAuthentication,) permission_classes = (IsAuthenticated,) model = Invoice @@ -76,9 +77,7 @@ class InvoiceListView(APIView, LimitOffsetPagination): if params.get("created_by"): queryset = queryset.filter(created_by=params.get("created_by")) if params.get("assigned_users"): - queryset = queryset.filter( - assigned_to__in=params.get("assigned_users") - ) + queryset = queryset.filter(assigned_to__in=params.get("assigned_users")) if params.get("status"): queryset = queryset.filter(status=params.get("status")) if params.get("total_amount"): @@ -131,12 +130,19 @@ class InvoiceListView(APIView, LimitOffsetPagination): return context - @extend_schema(tags=["Invoices"], parameters=swagger_params1.invoice_list_get_params) + @extend_schema( + tags=["Invoices"], + parameters=swagger_params.invoice_list_get_params, + ) def get(self, request, *args, **kwargs): context = self.get_context_data(**kwargs) return Response(context) - @extend_schema(tags=["Invoices"], parameters=swagger_params1.organization_params,request=InvoiceSwaggerSerailizer) + @extend_schema( + tags=["Invoices"], + parameters=swagger_params.invoice_create_post_params, + request=InvoiceSwaggerSerailizer, + ) def post(self, request, *args, **kwargs): params = request.data data = {} @@ -240,15 +246,17 @@ class InvoiceListView(APIView, LimitOffsetPagination): class InvoiceDetailView(APIView): - #authentication_classes = (CustomDualAuthentication,) + # authentication_classes = (CustomDualAuthentication,) permission_classes = (IsAuthenticated,) model = Invoice def get_object(self, pk): - return self.model.objects.filter(id=pk).first() + return self.model.objects.filter(id=pk, org=self.request.profile.org).first() - @swagger_auto_schema( - tags=["Invoices"], manual_parameters=swagger_params1.invoice_create_post_params + @extend_schema( + tags=["Invoices"], + parameters=swagger_params.invoice_create_post_params, + request=InvoiceSwaggerSerailizer, ) def put(self, request, pk, format=None): params = request.data @@ -380,9 +388,7 @@ class InvoiceDetailView(APIView): status=status.HTTP_400_BAD_REQUEST, ) - @swagger_auto_schema( - tags=["Invoices"], manual_parameters=swagger_params1.invoice_delete_params - ) + @extend_schema(tags=["Invoices"], parameters=swagger_params.invoice_delete_params) def delete(self, request, pk, format=None): self.object = self.get_object(pk) if self.object.company != request.company: @@ -407,9 +413,7 @@ class InvoiceDetailView(APIView): status=status.HTTP_200_OK, ) - @swagger_auto_schema( - tags=["Invoices"], manual_parameters=swagger_params1.invoice_delete_params - ) + @extend_schema(tags=["Invoices"], parameters=swagger_params.organization_params) def get(self, request, pk, format=None): self.invoice = self.get_object(pk=pk) if self.invoice.company != request.company: @@ -456,8 +460,17 @@ class InvoiceDetailView(APIView): else: users_mention = [] - attachments = Attachments.objects.filter(invoice=self.invoice).order_by("-id") - comments = Comment.objects.filter(invoice=self.invoice).order_by("-id") + invoice_content_type = ContentType.objects.get_for_model(Invoice) + attachments = Attachments.objects.filter( + content_type=invoice_content_type, + object_id=self.invoice.id, + org=self.request.profile.org, + ).order_by("-id") + comments = Comment.objects.filter( + content_type=invoice_content_type, + object_id=self.invoice.id, + org=self.request.profile.org, + ).order_by("-id") context.update( { "attachments": AttachmentsSerializer(attachments, many=True).data, @@ -484,8 +497,10 @@ class InvoiceDetailView(APIView): ) return Response(context) - @swagger_auto_schema( - tags=["Invoices"], manual_parameters=swagger_params1.invoice_detail_post_params + @extend_schema( + tags=["Invoices"], + parameters=swagger_params.invoice_detail_post_params, + request=CommentSerializer, ) def post(self, request, pk, **kwargs): params = request.data @@ -524,10 +539,17 @@ class InvoiceDetailView(APIView): attachment.attachment = self.request.FILES.get("invoice_attachment") attachment.save() - comments = Comment.objects.filter(invoice=self.invoice_obj).order_by("-id") - attachments = Attachments.objects.filter(invoice=self.invoice_obj).order_by( - "-id" - ) + invoice_content_type = ContentType.objects.get_for_model(Invoice) + comments = Comment.objects.filter( + content_type=invoice_content_type, + object_id=self.invoice_obj.id, + org=request.profile.org, + ).order_by("-id") + attachments = Attachments.objects.filter( + content_type=invoice_content_type, + object_id=self.invoice_obj.id, + org=request.profile.org, + ).order_by("-id") context.update( { "invoice_obj": InvoiceSerailizer(self.invoice_obj).data, @@ -540,14 +562,16 @@ class InvoiceDetailView(APIView): class InvoiceCommentView(APIView): model = Comment - #authentication_classes = (CustomDualAuthentication,) + # authentication_classes = (CustomDualAuthentication,) permission_classes = (IsAuthenticated,) def get_object(self, pk): - return self.model.objects.get(pk=pk) + return self.model.objects.get(pk=pk, org=self.request.profile.org) - @swagger_auto_schema( - tags=["Invoices"], manual_parameters=swagger_params1.invoice_comment_edit_params + @extend_schema( + tags=["Invoices"], + parameters=swagger_params.invoice_comment_edit_params, + request=CommentSerializer, ) def put(self, request, pk, format=None): params = request.data @@ -577,9 +601,7 @@ class InvoiceCommentView(APIView): } ) - @swagger_auto_schema( - tags=["Invoices"], manual_parameters=swagger_params1.invoice_delete_params - ) + @extend_schema(tags=["Invoices"], parameters=swagger_params.organization_params) def delete(self, request, pk, format=None): self.object = self.get_object(pk) if ( @@ -603,12 +625,10 @@ class InvoiceCommentView(APIView): class InvoiceAttachmentView(APIView): model = Attachments - #authentication_classes = (CustomDualAuthentication,) + # authentication_classes = (CustomDualAuthentication,) permission_classes = (IsAuthenticated,) - @swagger_auto_schema( - tags=["Invoices"], manual_parameters=swagger_params1.invoice_delete_params - ) + @extend_schema(tags=["Invoices"], parameters=swagger_params.organization_params) def delete(self, request, pk, format=None): self.object = self.model.objects.get(pk=pk) if ( diff --git a/invoices/apps.py b/backend/invoices/apps.py similarity index 100% rename from invoices/apps.py rename to backend/invoices/apps.py diff --git a/invoices/forms.py b/backend/invoices/forms.py similarity index 96% rename from invoices/forms.py rename to backend/invoices/forms.py index 250d707b..1623e7a3 100644 --- a/invoices/forms.py +++ b/backend/invoices/forms.py @@ -2,9 +2,8 @@ from django import forms from django.db.models import Q from accounts.models import Account -from common.models import Address, Attachments, Comment, User +from common.models import Address, Attachments, Comment, Teams, User from invoices.models import Invoice -from teams.models import Teams class InvoiceForm(forms.ModelForm): @@ -117,6 +116,8 @@ class InvoiceAddressForm(forms.ModelForm): self.fields["city"].widget.attrs.update({"placeholder": "City"}) self.fields["state"].widget.attrs.update({"placeholder": "State"}) self.fields["postcode"].widget.attrs.update({"placeholder": "Postcode"}) - self.fields["country"].choices = [("", "--Country--"),] + list( + self.fields["country"].choices = [ + ("", "--Country--"), + ] + list( self.fields["country"].choices )[1:] diff --git a/backend/invoices/migrations/0001_initial.py b/backend/invoices/migrations/0001_initial.py new file mode 100644 index 00000000..60305d74 --- /dev/null +++ b/backend/invoices/migrations/0001_initial.py @@ -0,0 +1,840 @@ +# Generated by Django 5.2.8 on 2025-11-27 12:17 + +import uuid + +import django.db.models.deletion +import phonenumber_field.modelfields +from django.conf import settings +from django.db import migrations, models + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ("accounts", "0001_initial"), + ("common", "0001_initial"), + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ] + + operations = [ + migrations.CreateModel( + name="Invoice", + fields=[ + ( + "created_at", + models.DateTimeField(auto_now_add=True, verbose_name="Created At"), + ), + ( + "updated_at", + models.DateTimeField( + auto_now=True, verbose_name="Last Modified At" + ), + ), + ( + "id", + models.UUIDField( + db_index=True, + default=uuid.uuid4, + editable=False, + primary_key=True, + serialize=False, + unique=True, + ), + ), + ( + "invoice_title", + models.CharField(max_length=50, verbose_name="Invoice Title"), + ), + ( + "invoice_number", + models.CharField(max_length=50, verbose_name="Invoice Number"), + ), + ("name", models.CharField(max_length=100, verbose_name="Name")), + ("email", models.EmailField(max_length=254, verbose_name="Email")), + ("quantity", models.PositiveIntegerField(default=0)), + ( + "rate", + models.DecimalField(decimal_places=2, default=0, max_digits=12), + ), + ( + "total_amount", + models.DecimalField( + blank=True, decimal_places=2, max_digits=12, null=True + ), + ), + ( + "tax", + models.DecimalField( + blank=True, decimal_places=2, max_digits=12, null=True + ), + ), + ( + "currency", + models.CharField( + blank=True, + choices=[ + ("AED", "AED, Dirham"), + ("AFN", "AFN, Afghani"), + ("ALL", "ALL, Lek"), + ("AMD", "AMD, Dram"), + ("ANG", "ANG, Guilder"), + ("AOA", "AOA, Kwanza"), + ("ARS", "ARS, Peso"), + ("AUD", "AUD, Dollar"), + ("AWG", "AWG, Guilder"), + ("AZN", "AZN, Manat"), + ("BAM", "BAM, Marka"), + ("BBD", "BBD, Dollar"), + ("BDT", "BDT, Taka"), + ("BGN", "BGN, Lev"), + ("BHD", "BHD, Dinar"), + ("BIF", "BIF, Franc"), + ("BMD", "BMD, Dollar"), + ("BND", "BND, Dollar"), + ("BOB", "BOB, Boliviano"), + ("BRL", "BRL, Real"), + ("BSD", "BSD, Dollar"), + ("BTN", "BTN, Ngultrum"), + ("BWP", "BWP, Pula"), + ("BYR", "BYR, Ruble"), + ("BZD", "BZD, Dollar"), + ("CAD", "CAD, Dollar"), + ("CDF", "CDF, Franc"), + ("CHF", "CHF, Franc"), + ("CLP", "CLP, Peso"), + ("CNY", "CNY, Yuan Renminbi"), + ("COP", "COP, Peso"), + ("CRC", "CRC, Colon"), + ("CUP", "CUP, Peso"), + ("CVE", "CVE, Escudo"), + ("CZK", "CZK, Koruna"), + ("DJF", "DJF, Franc"), + ("DKK", "DKK, Krone"), + ("DOP", "DOP, Peso"), + ("DZD", "DZD, Dinar"), + ("EGP", "EGP, Pound"), + ("ERN", "ERN, Nakfa"), + ("ETB", "ETB, Birr"), + ("EUR", "EUR, Euro"), + ("FJD", "FJD, Dollar"), + ("FKP", "FKP, Pound"), + ("GBP", "GBP, Pound"), + ("GEL", "GEL, Lari"), + ("GHS", "GHS, Cedi"), + ("GIP", "GIP, Pound"), + ("GMD", "GMD, Dalasi"), + ("GNF", "GNF, Franc"), + ("GTQ", "GTQ, Quetzal"), + ("GYD", "GYD, Dollar"), + ("HKD", "HKD, Dollar"), + ("HNL", "HNL, Lempira"), + ("HRK", "HRK, Kuna"), + ("HTG", "HTG, Gourde"), + ("HUF", "HUF, Forint"), + ("IDR", "IDR, Rupiah"), + ("ILS", "ILS, Shekel"), + ("INR", "INR, Rupee"), + ("IQD", "IQD, Dinar"), + ("IRR", "IRR, Rial"), + ("ISK", "ISK, Krona"), + ("JMD", "JMD, Dollar"), + ("JOD", "JOD, Dinar"), + ("JPY", "JPY, Yen"), + ("KES", "KES, Shilling"), + ("KGS", "KGS, Som"), + ("KHR", "KHR, Riels"), + ("KMF", "KMF, Franc"), + ("KPW", "KPW, Won"), + ("KRW", "KRW, Won"), + ("KWD", "KWD, Dinar"), + ("KYD", "KYD, Dollar"), + ("KZT", "KZT, Tenge"), + ("LAK", "LAK, Kip"), + ("LBP", "LBP, Pound"), + ("LKR", "LKR, Rupee"), + ("LRD", "LRD, Dollar"), + ("LSL", "LSL, Loti"), + ("LTL", "LTL, Litas"), + ("LVL", "LVL, Lat"), + ("LYD", "LYD, Dinar"), + ("MAD", "MAD, Dirham"), + ("MDL", "MDL, Leu"), + ("MGA", "MGA, Ariary"), + ("MKD", "MKD, Denar"), + ("MMK", "MMK, Kyat"), + ("MNT", "MNT, Tugrik"), + ("MOP", "MOP, Pataca"), + ("MRO", "MRO, Ouguiya"), + ("MUR", "MUR, Rupee"), + ("MVR", "MVR, Rufiyaa"), + ("MWK", "MWK, Kwacha"), + ("MXN", "MXN, Peso"), + ("MYR", "MYR, Ringgit"), + ("MZN", "MZN, Metical"), + ("NAD", "NAD, Dollar"), + ("NGN", "NGN, Naira"), + ("NIO", "NIO, Cordoba"), + ("NOK", "NOK, Krone"), + ("NPR", "NPR, Rupee"), + ("NZD", "NZD, Dollar"), + ("OMR", "OMR, Rial"), + ("PAB", "PAB, Balboa"), + ("PEN", "PEN, Sol"), + ("PGK", "PGK, Kina"), + ("PHP", "PHP, Peso"), + ("PKR", "PKR, Rupee"), + ("PLN", "PLN, Zloty"), + ("PYG", "PYG, Guarani"), + ("QAR", "QAR, Rial"), + ("RON", "RON, Leu"), + ("RSD", "RSD, Dinar"), + ("RUB", "RUB, Ruble"), + ("RWF", "RWF, Franc"), + ("SAR", "SAR, Rial"), + ("SBD", "SBD, Dollar"), + ("SCR", "SCR, Rupee"), + ("SDG", "SDG, Pound"), + ("SEK", "SEK, Krona"), + ("SGD", "SGD, Dollar"), + ("SHP", "SHP, Pound"), + ("SLL", "SLL, Leone"), + ("SOS", "SOS, Shilling"), + ("SRD", "SRD, Dollar"), + ("SSP", "SSP, Pound"), + ("STD", "STD, Dobra"), + ("SYP", "SYP, Pound"), + ("SZL", "SZL, Lilangeni"), + ("THB", "THB, Baht"), + ("TJS", "TJS, Somoni"), + ("TMT", "TMT, Manat"), + ("TND", "TND, Dinar"), + ("TOP", "TOP, Paanga"), + ("TRY", "TRY, Lira"), + ("TTD", "TTD, Dollar"), + ("TWD", "TWD, Dollar"), + ("TZS", "TZS, Shilling"), + ("UAH", "UAH, Hryvnia"), + ("UGX", "UGX, Shilling"), + ("USD", "$, Dollar"), + ("UYU", "UYU, Peso"), + ("UZS", "UZS, Som"), + ("VEF", "VEF, Bolivar"), + ("VND", "VND, Dong"), + ("VUV", "VUV, Vatu"), + ("WST", "WST, Tala"), + ("XAF", "XAF, Franc"), + ("XCD", "XCD, Dollar"), + ("XOF", "XOF, Franc"), + ("XPF", "XPF, Franc"), + ("YER", "YER, Rial"), + ("ZAR", "ZAR, Rand"), + ("ZMK", "ZMK, Kwacha"), + ("ZWL", "ZWL, Dollar"), + ], + max_length=3, + null=True, + ), + ), + ( + "phone", + phonenumber_field.modelfields.PhoneNumberField( + blank=True, max_length=128, null=True, region=None + ), + ), + ( + "amount_due", + models.DecimalField( + blank=True, decimal_places=2, max_digits=12, null=True + ), + ), + ( + "amount_paid", + models.DecimalField( + blank=True, decimal_places=2, max_digits=12, null=True + ), + ), + ("is_email_sent", models.BooleanField(default=False)), + ( + "status", + models.CharField( + choices=[ + ("Draft", "Draft"), + ("Sent", "Sent"), + ("Paid", "Paid"), + ("Pending", "Pending"), + ("Cancelled", "Cancel"), + ], + default="Draft", + max_length=15, + ), + ), + ( + "details", + models.TextField(blank=True, null=True, verbose_name="Details"), + ), + ("due_date", models.DateField(blank=True, null=True)), + ( + "accounts", + models.ManyToManyField( + related_name="accounts_invoices", to="accounts.account" + ), + ), + ( + "assigned_to", + models.ManyToManyField( + related_name="invoice_assigned_to", to="common.profile" + ), + ), + ( + "created_by", + models.ForeignKey( + null=True, + on_delete=django.db.models.deletion.SET_NULL, + related_name="%(class)s_created_by", + to=settings.AUTH_USER_MODEL, + verbose_name="Created By", + ), + ), + ( + "from_address", + models.ForeignKey( + null=True, + on_delete=django.db.models.deletion.SET_NULL, + related_name="invoice_from_address", + to="common.address", + ), + ), + ( + "org", + models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, + related_name="invoices", + to="common.org", + ), + ), + ( + "teams", + models.ManyToManyField( + related_name="invoices_teams", to="common.teams" + ), + ), + ( + "to_address", + models.ForeignKey( + null=True, + on_delete=django.db.models.deletion.SET_NULL, + related_name="invoice_to_address", + to="common.address", + ), + ), + ( + "updated_by", + models.ForeignKey( + null=True, + on_delete=django.db.models.deletion.SET_NULL, + related_name="%(class)s_updated_by", + to=settings.AUTH_USER_MODEL, + verbose_name="Last Modified By", + ), + ), + ], + options={ + "verbose_name": "Invoice", + "verbose_name_plural": "Invoices", + "db_table": "invoice", + "ordering": ("-created_at",), + }, + ), + migrations.CreateModel( + name="Product", + fields=[ + ( + "created_at", + models.DateTimeField(auto_now_add=True, verbose_name="Created At"), + ), + ( + "updated_at", + models.DateTimeField( + auto_now=True, verbose_name="Last Modified At" + ), + ), + ( + "id", + models.UUIDField( + db_index=True, + default=uuid.uuid4, + editable=False, + primary_key=True, + serialize=False, + unique=True, + ), + ), + ("name", models.CharField(max_length=255)), + ("description", models.TextField(blank=True, null=True)), + ("sku", models.CharField(blank=True, max_length=100, null=True)), + ( + "price", + models.DecimalField(decimal_places=2, default=0, max_digits=12), + ), + ("category", models.CharField(blank=True, max_length=100, null=True)), + ("is_active", models.BooleanField(default=True)), + ( + "created_by", + models.ForeignKey( + null=True, + on_delete=django.db.models.deletion.SET_NULL, + related_name="%(class)s_created_by", + to=settings.AUTH_USER_MODEL, + verbose_name="Created By", + ), + ), + ( + "org", + models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, + related_name="products", + to="common.org", + ), + ), + ( + "updated_by", + models.ForeignKey( + null=True, + on_delete=django.db.models.deletion.SET_NULL, + related_name="%(class)s_updated_by", + to=settings.AUTH_USER_MODEL, + verbose_name="Last Modified By", + ), + ), + ], + options={ + "verbose_name": "Product", + "verbose_name_plural": "Products", + "db_table": "product", + "ordering": ("name",), + "unique_together": {("sku", "org")}, + }, + ), + migrations.CreateModel( + name="InvoiceHistory", + fields=[ + ( + "created_at", + models.DateTimeField(auto_now_add=True, verbose_name="Created At"), + ), + ( + "updated_at", + models.DateTimeField( + auto_now=True, verbose_name="Last Modified At" + ), + ), + ( + "id", + models.UUIDField( + db_index=True, + default=uuid.uuid4, + editable=False, + primary_key=True, + serialize=False, + unique=True, + ), + ), + ( + "invoice_title", + models.CharField(max_length=50, verbose_name="Invoice Title"), + ), + ( + "invoice_number", + models.CharField(max_length=50, verbose_name="Invoice Number"), + ), + ("name", models.CharField(max_length=100, verbose_name="Name")), + ("email", models.EmailField(max_length=254, verbose_name="Email")), + ("quantity", models.PositiveIntegerField(default=0)), + ( + "rate", + models.DecimalField(decimal_places=2, default=0, max_digits=12), + ), + ( + "total_amount", + models.DecimalField( + blank=True, decimal_places=2, max_digits=12, null=True + ), + ), + ( + "currency", + models.CharField( + blank=True, + choices=[ + ("AED", "AED, Dirham"), + ("AFN", "AFN, Afghani"), + ("ALL", "ALL, Lek"), + ("AMD", "AMD, Dram"), + ("ANG", "ANG, Guilder"), + ("AOA", "AOA, Kwanza"), + ("ARS", "ARS, Peso"), + ("AUD", "AUD, Dollar"), + ("AWG", "AWG, Guilder"), + ("AZN", "AZN, Manat"), + ("BAM", "BAM, Marka"), + ("BBD", "BBD, Dollar"), + ("BDT", "BDT, Taka"), + ("BGN", "BGN, Lev"), + ("BHD", "BHD, Dinar"), + ("BIF", "BIF, Franc"), + ("BMD", "BMD, Dollar"), + ("BND", "BND, Dollar"), + ("BOB", "BOB, Boliviano"), + ("BRL", "BRL, Real"), + ("BSD", "BSD, Dollar"), + ("BTN", "BTN, Ngultrum"), + ("BWP", "BWP, Pula"), + ("BYR", "BYR, Ruble"), + ("BZD", "BZD, Dollar"), + ("CAD", "CAD, Dollar"), + ("CDF", "CDF, Franc"), + ("CHF", "CHF, Franc"), + ("CLP", "CLP, Peso"), + ("CNY", "CNY, Yuan Renminbi"), + ("COP", "COP, Peso"), + ("CRC", "CRC, Colon"), + ("CUP", "CUP, Peso"), + ("CVE", "CVE, Escudo"), + ("CZK", "CZK, Koruna"), + ("DJF", "DJF, Franc"), + ("DKK", "DKK, Krone"), + ("DOP", "DOP, Peso"), + ("DZD", "DZD, Dinar"), + ("EGP", "EGP, Pound"), + ("ERN", "ERN, Nakfa"), + ("ETB", "ETB, Birr"), + ("EUR", "EUR, Euro"), + ("FJD", "FJD, Dollar"), + ("FKP", "FKP, Pound"), + ("GBP", "GBP, Pound"), + ("GEL", "GEL, Lari"), + ("GHS", "GHS, Cedi"), + ("GIP", "GIP, Pound"), + ("GMD", "GMD, Dalasi"), + ("GNF", "GNF, Franc"), + ("GTQ", "GTQ, Quetzal"), + ("GYD", "GYD, Dollar"), + ("HKD", "HKD, Dollar"), + ("HNL", "HNL, Lempira"), + ("HRK", "HRK, Kuna"), + ("HTG", "HTG, Gourde"), + ("HUF", "HUF, Forint"), + ("IDR", "IDR, Rupiah"), + ("ILS", "ILS, Shekel"), + ("INR", "INR, Rupee"), + ("IQD", "IQD, Dinar"), + ("IRR", "IRR, Rial"), + ("ISK", "ISK, Krona"), + ("JMD", "JMD, Dollar"), + ("JOD", "JOD, Dinar"), + ("JPY", "JPY, Yen"), + ("KES", "KES, Shilling"), + ("KGS", "KGS, Som"), + ("KHR", "KHR, Riels"), + ("KMF", "KMF, Franc"), + ("KPW", "KPW, Won"), + ("KRW", "KRW, Won"), + ("KWD", "KWD, Dinar"), + ("KYD", "KYD, Dollar"), + ("KZT", "KZT, Tenge"), + ("LAK", "LAK, Kip"), + ("LBP", "LBP, Pound"), + ("LKR", "LKR, Rupee"), + ("LRD", "LRD, Dollar"), + ("LSL", "LSL, Loti"), + ("LTL", "LTL, Litas"), + ("LVL", "LVL, Lat"), + ("LYD", "LYD, Dinar"), + ("MAD", "MAD, Dirham"), + ("MDL", "MDL, Leu"), + ("MGA", "MGA, Ariary"), + ("MKD", "MKD, Denar"), + ("MMK", "MMK, Kyat"), + ("MNT", "MNT, Tugrik"), + ("MOP", "MOP, Pataca"), + ("MRO", "MRO, Ouguiya"), + ("MUR", "MUR, Rupee"), + ("MVR", "MVR, Rufiyaa"), + ("MWK", "MWK, Kwacha"), + ("MXN", "MXN, Peso"), + ("MYR", "MYR, Ringgit"), + ("MZN", "MZN, Metical"), + ("NAD", "NAD, Dollar"), + ("NGN", "NGN, Naira"), + ("NIO", "NIO, Cordoba"), + ("NOK", "NOK, Krone"), + ("NPR", "NPR, Rupee"), + ("NZD", "NZD, Dollar"), + ("OMR", "OMR, Rial"), + ("PAB", "PAB, Balboa"), + ("PEN", "PEN, Sol"), + ("PGK", "PGK, Kina"), + ("PHP", "PHP, Peso"), + ("PKR", "PKR, Rupee"), + ("PLN", "PLN, Zloty"), + ("PYG", "PYG, Guarani"), + ("QAR", "QAR, Rial"), + ("RON", "RON, Leu"), + ("RSD", "RSD, Dinar"), + ("RUB", "RUB, Ruble"), + ("RWF", "RWF, Franc"), + ("SAR", "SAR, Rial"), + ("SBD", "SBD, Dollar"), + ("SCR", "SCR, Rupee"), + ("SDG", "SDG, Pound"), + ("SEK", "SEK, Krona"), + ("SGD", "SGD, Dollar"), + ("SHP", "SHP, Pound"), + ("SLL", "SLL, Leone"), + ("SOS", "SOS, Shilling"), + ("SRD", "SRD, Dollar"), + ("SSP", "SSP, Pound"), + ("STD", "STD, Dobra"), + ("SYP", "SYP, Pound"), + ("SZL", "SZL, Lilangeni"), + ("THB", "THB, Baht"), + ("TJS", "TJS, Somoni"), + ("TMT", "TMT, Manat"), + ("TND", "TND, Dinar"), + ("TOP", "TOP, Paanga"), + ("TRY", "TRY, Lira"), + ("TTD", "TTD, Dollar"), + ("TWD", "TWD, Dollar"), + ("TZS", "TZS, Shilling"), + ("UAH", "UAH, Hryvnia"), + ("UGX", "UGX, Shilling"), + ("USD", "$, Dollar"), + ("UYU", "UYU, Peso"), + ("UZS", "UZS, Som"), + ("VEF", "VEF, Bolivar"), + ("VND", "VND, Dong"), + ("VUV", "VUV, Vatu"), + ("WST", "WST, Tala"), + ("XAF", "XAF, Franc"), + ("XCD", "XCD, Dollar"), + ("XOF", "XOF, Franc"), + ("XPF", "XPF, Franc"), + ("YER", "YER, Rial"), + ("ZAR", "ZAR, Rand"), + ("ZMK", "ZMK, Kwacha"), + ("ZWL", "ZWL, Dollar"), + ], + max_length=3, + null=True, + ), + ), + ( + "phone", + phonenumber_field.modelfields.PhoneNumberField( + blank=True, max_length=128, null=True, region=None + ), + ), + ( + "amount_due", + models.DecimalField( + blank=True, decimal_places=2, max_digits=12, null=True + ), + ), + ( + "amount_paid", + models.DecimalField( + blank=True, decimal_places=2, max_digits=12, null=True + ), + ), + ("is_email_sent", models.BooleanField(default=False)), + ( + "status", + models.CharField( + choices=[ + ("Draft", "Draft"), + ("Sent", "Sent"), + ("Paid", "Paid"), + ("Pending", "Pending"), + ("Cancelled", "Cancel"), + ], + default="Draft", + max_length=15, + ), + ), + ( + "details", + models.TextField(blank=True, null=True, verbose_name="Details"), + ), + ("due_date", models.DateField(blank=True, null=True)), + ( + "assigned_to", + models.ManyToManyField( + related_name="invoice_history_assigned_to", to="common.profile" + ), + ), + ( + "created_by", + models.ForeignKey( + null=True, + on_delete=django.db.models.deletion.SET_NULL, + related_name="%(class)s_created_by", + to=settings.AUTH_USER_MODEL, + verbose_name="Created By", + ), + ), + ( + "from_address", + models.ForeignKey( + null=True, + on_delete=django.db.models.deletion.SET_NULL, + related_name="invoice_history_from_address", + to="common.address", + ), + ), + ( + "invoice", + models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, + related_name="invoice_history", + to="invoices.invoice", + ), + ), + ( + "org", + models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, + related_name="invoice_histories", + to="common.org", + ), + ), + ( + "to_address", + models.ForeignKey( + null=True, + on_delete=django.db.models.deletion.SET_NULL, + related_name="invoice_history_to_address", + to="common.address", + ), + ), + ( + "updated_by", + models.ForeignKey( + null=True, + on_delete=django.db.models.deletion.SET_NULL, + related_name="invoice_history_updated_by", + to="common.profile", + ), + ), + ], + options={ + "verbose_name": "InvoiceHistory", + "verbose_name_plural": "InvoiceHistories", + "db_table": "invoice_history", + "ordering": ("-created_at",), + "indexes": [ + models.Index( + fields=["org", "-created_at"], + name="invoice_his_org_id_45400e_idx", + ) + ], + }, + ), + migrations.CreateModel( + name="InvoiceLineItem", + fields=[ + ( + "created_at", + models.DateTimeField(auto_now_add=True, verbose_name="Created At"), + ), + ( + "updated_at", + models.DateTimeField( + auto_now=True, verbose_name="Last Modified At" + ), + ), + ( + "id", + models.UUIDField( + db_index=True, + default=uuid.uuid4, + editable=False, + primary_key=True, + serialize=False, + unique=True, + ), + ), + ("description", models.CharField(max_length=500)), + ( + "quantity", + models.DecimalField(decimal_places=2, default=1, max_digits=10), + ), + ( + "unit_price", + models.DecimalField(decimal_places=2, default=0, max_digits=12), + ), + ( + "total", + models.DecimalField(decimal_places=2, default=0, max_digits=12), + ), + ("order", models.PositiveIntegerField(default=0)), + ( + "created_by", + models.ForeignKey( + null=True, + on_delete=django.db.models.deletion.SET_NULL, + related_name="%(class)s_created_by", + to=settings.AUTH_USER_MODEL, + verbose_name="Created By", + ), + ), + ( + "invoice", + models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, + related_name="line_items", + to="invoices.invoice", + ), + ), + ( + "org", + models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, + related_name="invoice_line_items", + to="common.org", + ), + ), + ( + "updated_by", + models.ForeignKey( + null=True, + on_delete=django.db.models.deletion.SET_NULL, + related_name="%(class)s_updated_by", + to=settings.AUTH_USER_MODEL, + verbose_name="Last Modified By", + ), + ), + ( + "product", + models.ForeignKey( + blank=True, + null=True, + on_delete=django.db.models.deletion.SET_NULL, + related_name="invoice_line_items", + to="invoices.product", + ), + ), + ], + options={ + "verbose_name": "Invoice Line Item", + "verbose_name_plural": "Invoice Line Items", + "db_table": "invoice_line_item", + "ordering": ("order",), + "indexes": [ + models.Index( + fields=["org", "order"], name="invoice_lin_org_id_474821_idx" + ) + ], + }, + ), + ] diff --git a/emails/migrations/__init__.py b/backend/invoices/migrations/__init__.py similarity index 100% rename from emails/migrations/__init__.py rename to backend/invoices/migrations/__init__.py diff --git a/invoices/models.py b/backend/invoices/models.py similarity index 68% rename from invoices/models.py rename to backend/invoices/models.py index 68fc8ff0..25d9649a 100644 --- a/invoices/models.py +++ b/backend/invoices/models.py @@ -6,10 +6,9 @@ from django.utils.translation import gettext_lazy as _ from phonenumber_field.modelfields import PhoneNumberField from accounts.models import Account -from common.models import Address, Org, User from common.base import BaseModel +from common.models import Address, Org, Profile, Teams, User from common.utils import CURRENCY_CODES -from teams.models import Teams class Invoice(BaseModel): @@ -36,7 +35,7 @@ class Invoice(BaseModel): ) name = models.CharField(_("Name"), max_length=100) email = models.EmailField(_("Email")) - assigned_to = models.ManyToManyField(User, related_name="invoice_assigned_to") + assigned_to = models.ManyToManyField(Profile, related_name="invoice_assigned_to") # quantity is the number of hours worked quantity = models.PositiveIntegerField(default=0) # rate is the rate charged @@ -50,9 +49,6 @@ class Invoice(BaseModel): max_length=3, choices=CURRENCY_CODES, blank=True, null=True ) phone = PhoneNumberField(null=True, blank=True) - created_by = models.ForeignKey( - User, related_name="invoice_created_by", on_delete=models.SET_NULL, null=True - ) amount_due = models.DecimalField( blank=True, null=True, max_digits=12, decimal_places=2 @@ -67,8 +63,7 @@ class Invoice(BaseModel): accounts = models.ManyToManyField(Account, related_name="accounts_invoices") teams = models.ManyToManyField(Teams, related_name="invoices_teams") - org = models.ForeignKey(Org, on_delete=models.SET_NULL, null=True, blank=True) - tax = models.DecimalField(blank=True, null=True, max_digits=12, decimal_places=2) + org = models.ForeignKey(Org, on_delete=models.CASCADE, related_name="invoices") class Meta: verbose_name = "Invoice" @@ -136,26 +131,27 @@ class Invoice(BaseModel): @property def get_team_users(self): team_user_ids = list(self.teams.values_list("users__id", flat=True)) - return User.objects.filter(id__in=team_user_ids) + return Profile.objects.filter(id__in=team_user_ids) @property def get_team_and_assigned_users(self): team_user_ids = list(self.teams.values_list("users__id", flat=True)) assigned_user_ids = list(self.assigned_to.values_list("id", flat=True)) user_ids = team_user_ids + assigned_user_ids - return User.objects.filter(id__in=user_ids) + return Profile.objects.filter(id__in=user_ids) @property def get_assigned_users_not_in_teams(self): team_user_ids = list(self.teams.values_list("users__id", flat=True)) assigned_user_ids = list(self.assigned_to.values_list("id", flat=True)) user_ids = set(assigned_user_ids) - set(team_user_ids) - return User.objects.filter(id__in=list(user_ids)) + return Profile.objects.filter(id__in=list(user_ids)) class InvoiceHistory(BaseModel): """Model definition for InvoiceHistory. - This model is used to track/keep a record of the updates made to original invoice object.""" + This model is used to track/keep a record of the updates made to original invoice object. + """ INVOICE_STATUS = ( ("Draft", "Draft"), @@ -184,7 +180,7 @@ class InvoiceHistory(BaseModel): name = models.CharField(_("Name"), max_length=100) email = models.EmailField(_("Email")) assigned_to = models.ManyToManyField( - User, related_name="invoice_history_assigned_to" + Profile, related_name="invoice_history_assigned_to" ) # quantity is the number of hours worked quantity = models.PositiveIntegerField(default=0) @@ -198,12 +194,9 @@ class InvoiceHistory(BaseModel): max_length=3, choices=CURRENCY_CODES, blank=True, null=True ) phone = PhoneNumberField(null=True, blank=True) - # created_by = models.ForeignKey( - # User, related_name='invoice_history_created_by', - # on_delete=models.SET_NULL, null=True) updated_by = models.ForeignKey( - User, - related_name="invoice_history_created_by", + Profile, + related_name="invoice_history_updated_by", on_delete=models.SET_NULL, null=True, ) @@ -219,17 +212,30 @@ class InvoiceHistory(BaseModel): # details or description here stores the fields changed in the original invoice object details = models.TextField(_("Details"), null=True, blank=True) due_date = models.DateField(blank=True, null=True) + org = models.ForeignKey( + Org, + on_delete=models.CASCADE, + related_name="invoice_histories", + ) class Meta: verbose_name = "InvoiceHistory" verbose_name_plural = "InvoiceHistories" db_table = "invoice_history" ordering = ("-created_at",) + indexes = [ + models.Index(fields=["org", "-created_at"]), + ] def __str__(self): """Unicode representation of Invoice.""" return self.invoice_number + def save(self, *args, **kwargs): + if not self.org_id and self.invoice_id: + self.org_id = self.invoice.org_id + super().save(*args, **kwargs) + def formatted_total_amount(self): return self.currency + " " + str(self.total_amount) @@ -242,3 +248,84 @@ class InvoiceHistory(BaseModel): @property def created_on_arrow(self): return arrow.get(self.created_at).humanize() + + +# Phase 3: Enhanced Quotes with Line Items + + +class Product(BaseModel): + """Product Catalog for Line Items""" + + name = models.CharField(max_length=255) + description = models.TextField(blank=True, null=True) + sku = models.CharField(max_length=100, blank=True, null=True) + price = models.DecimalField(max_digits=12, decimal_places=2, default=0) + category = models.CharField(max_length=100, blank=True, null=True) + is_active = models.BooleanField(default=True) + org = models.ForeignKey(Org, on_delete=models.CASCADE, related_name="products") + + class Meta: + verbose_name = "Product" + verbose_name_plural = "Products" + db_table = "product" + ordering = ("name",) + unique_together = [["sku", "org"]] + + def __str__(self): + return self.name + + +class InvoiceLineItem(BaseModel): + """Line Item for Invoices""" + + invoice = models.ForeignKey( + Invoice, on_delete=models.CASCADE, related_name="line_items" + ) + product = models.ForeignKey( + Product, + on_delete=models.SET_NULL, + null=True, + blank=True, + related_name="invoice_line_items", + ) + description = models.CharField(max_length=500) + quantity = models.DecimalField(max_digits=10, decimal_places=2, default=1) + unit_price = models.DecimalField(max_digits=12, decimal_places=2, default=0) + total = models.DecimalField(max_digits=12, decimal_places=2, default=0) + order = models.PositiveIntegerField(default=0) + org = models.ForeignKey( + Org, + on_delete=models.CASCADE, + related_name="invoice_line_items", + ) + + class Meta: + verbose_name = "Invoice Line Item" + verbose_name_plural = "Invoice Line Items" + db_table = "invoice_line_item" + ordering = ("order",) + indexes = [ + models.Index(fields=["org", "order"]), + ] + + def __str__(self): + return f"{self.invoice.invoice_number} - {self.description}" + + def save(self, *args, **kwargs): + # Auto-calculate total + self.total = self.quantity * self.unit_price + if not self.org_id and self.invoice_id: + self.org_id = self.invoice.org_id + super().save(*args, **kwargs) + + @property + def formatted_unit_price(self): + if self.invoice and self.invoice.currency: + return f"{self.invoice.currency} {self.unit_price}" + return str(self.unit_price) + + @property + def formatted_total(self): + if self.invoice and self.invoice.currency: + return f"{self.invoice.currency} {self.total}" + return str(self.total) diff --git a/invoices/serializer.py b/backend/invoices/serializer.py similarity index 61% rename from invoices/serializer.py rename to backend/invoices/serializer.py index 856e23cb..e185f63a 100644 --- a/invoices/serializer.py +++ b/backend/invoices/serializer.py @@ -3,19 +3,20 @@ from rest_framework import serializers from common.serializer import ( BillingAddressSerializer, OrganizationSerializer, + ProfileSerializer, + TeamsSerializer, UserSerializer, ) from invoices.models import Invoice, InvoiceHistory -from teams.serializer import TeamsSerializer class InvoiceSerailizer(serializers.ModelSerializer): from_address = BillingAddressSerializer() to_address = BillingAddressSerializer() - created_by = UserSerializer() + created_by = ProfileSerializer() org = OrganizationSerializer() teams = TeamsSerializer(read_only=True, many=True) - assigned_to = UserSerializer(read_only=True, many=True) + assigned_to = ProfileSerializer(read_only=True, many=True) class Meta: model = Invoice @@ -48,7 +49,7 @@ class InvoiceSerailizer(serializers.ModelSerializer): class InvoiceHistorySerializer(serializers.ModelSerializer): - updated_by = UserSerializer() + updated_by = ProfileSerializer() class Meta: model = InvoiceHistory @@ -127,12 +128,14 @@ class InvoiceCreateSerializer(serializers.ModelSerializer): "org", ) + class InvoiceSwaggerSerailizer(serializers.ModelSerializer): from_address = BillingAddressSerializer() to_address = BillingAddressSerializer() - assigned_to = UserSerializer(read_only=True, many=True) + assigned_to = ProfileSerializer(read_only=True, many=True) quality_hours = serializers.CharField() + class Meta: model = Invoice fields = ( @@ -153,7 +156,88 @@ class InvoiceSwaggerSerailizer(serializers.ModelSerializer): "assigned_to", "currency", "accounts", - "quality_hours" + "quality_hours", ) +# Phase 3: Product and Line Item Serializers + +from invoices.models import InvoiceLineItem, Product + + +class ProductSerializer(serializers.ModelSerializer): + """Serializer for Product""" + + class Meta: + model = Product + fields = "__all__" + read_only_fields = ( + "id", + "created_at", + "updated_at", + "created_by", + "updated_by", + "org", + ) + + +class InvoiceLineItemSerializer(serializers.ModelSerializer): + """Serializer for Invoice Line Items""" + + product_name = serializers.CharField(source="product.name", read_only=True) + formatted_unit_price = serializers.CharField(read_only=True) + formatted_total = serializers.CharField(read_only=True) + + class Meta: + model = InvoiceLineItem + fields = "__all__" + read_only_fields = ( + "id", + "created_at", + "updated_at", + "created_by", + "updated_by", + "total", + ) + + +class InvoiceWithLineItemsSerializer(serializers.ModelSerializer): + """Enhanced Invoice Serializer with Line Items""" + + line_items = InvoiceLineItemSerializer(many=True, read_only=True) + created_by = ProfileSerializer(read_only=True) + org = OrganizationSerializer(read_only=True) + teams = TeamsSerializer(read_only=True, many=True) + assigned_to = ProfileSerializer(read_only=True, many=True) + line_items_total = serializers.DecimalField( + max_digits=12, decimal_places=2, read_only=True + ) + line_items_count = serializers.IntegerField(read_only=True) + + class Meta: + model = Invoice + fields = ( + "id", + "invoice_title", + "invoice_number", + "status", + "due_date", + "name", + "email", + "phone", + "created_at", + "created_by", + "currency", + "tax", + "total_amount", + "amount_due", + "amount_paid", + "is_email_sent", + "details", + "teams", + "assigned_to", + "org", + "line_items", + "line_items_total", + "line_items_count", + ) diff --git a/backend/invoices/serializers.py b/backend/invoices/serializers.py new file mode 100644 index 00000000..3c5c9bf5 --- /dev/null +++ b/backend/invoices/serializers.py @@ -0,0 +1,79 @@ +from rest_framework import serializers + +from accounts.serializer import AccountSerializer +from common.serializer import ProfileSerializer, TeamsSerializer, UserSerializer +from invoices.models import Invoice, InvoiceHistory + + +class InvoiceSerializer(serializers.ModelSerializer): + """Serializer for Invoice model""" + + assigned_to = ProfileSerializer(many=True, read_only=True) + created_by = UserSerializer(read_only=True) + accounts = AccountSerializer(many=True, read_only=True) + teams = TeamsSerializer(many=True, read_only=True) + + # Write fields + assigned_to_ids = serializers.ListField( + child=serializers.UUIDField(), write_only=True, required=False + ) + account_ids = serializers.ListField( + child=serializers.UUIDField(), write_only=True, required=False + ) + team_ids = serializers.ListField( + child=serializers.UUIDField(), write_only=True, required=False + ) + + class Meta: + model = Invoice + fields = "__all__" + read_only_fields = ( + "id", + "created_at", + "updated_at", + "created_by", + "invoice_number", + ) + + +class InvoiceListSerializer(serializers.ModelSerializer): + """Simplified serializer for invoice lists""" + + assigned_to_count = serializers.SerializerMethodField() + accounts_count = serializers.SerializerMethodField() + + class Meta: + model = Invoice + fields = [ + "id", + "invoice_title", + "invoice_number", + "name", + "email", + "total_amount", + "amount_due", + "amount_paid", + "status", + "due_date", + "created_at", + "updated_at", + "assigned_to_count", + "accounts_count", + ] + + def get_assigned_to_count(self, obj): + return obj.assigned_to.count() + + def get_accounts_count(self, obj): + return obj.accounts.count() + + +class InvoiceHistorySerializer(serializers.ModelSerializer): + """Serializer for Invoice History""" + + updated_by = UserSerializer(read_only=True) + + class Meta: + model = InvoiceHistory + fields = "__all__" + read_only_fields = ("id", "created_at", "updated_at") diff --git a/backend/invoices/swagger_params.py b/backend/invoices/swagger_params.py new file mode 100644 index 00000000..53e3b2cd --- /dev/null +++ b/backend/invoices/swagger_params.py @@ -0,0 +1,65 @@ +from drf_spectacular.types import OpenApiTypes +from drf_spectacular.utils import OpenApiParameter + +company_params_in_header = OpenApiParameter( + "org", OpenApiTypes.STR, OpenApiParameter.HEADER, required=True +) + +organization_params = [company_params_in_header] + +invoice_list_get_params = organization_params + [ + OpenApiParameter( + "invoice_title_or_number", OpenApiTypes.STR, OpenApiParameter.QUERY + ), + OpenApiParameter("created_by", OpenApiTypes.INT, OpenApiParameter.QUERY), + OpenApiParameter("assigned_users", OpenApiTypes.STR, OpenApiParameter.QUERY), + OpenApiParameter("status", OpenApiTypes.STR, OpenApiParameter.QUERY), + OpenApiParameter("total_amount", OpenApiTypes.STR, OpenApiParameter.QUERY), +] + +invoice_detail_post_params = organization_params + [ + OpenApiParameter("invoice_attachment", OpenApiTypes.BINARY, OpenApiParameter.QUERY), + OpenApiParameter("comment", OpenApiTypes.STR, OpenApiParameter.QUERY), +] + +invoice_delete_params = organization_params + +invoice_create_post_params = organization_params + [ + OpenApiParameter( + "invoice_title", OpenApiTypes.STR, OpenApiParameter.QUERY, required=True + ), + OpenApiParameter("status", OpenApiTypes.STR, OpenApiParameter.QUERY), + OpenApiParameter("from_address_line", OpenApiTypes.STR, OpenApiParameter.QUERY), + OpenApiParameter("from_street", OpenApiTypes.STR, OpenApiParameter.QUERY), + OpenApiParameter("from_city", OpenApiTypes.STR, OpenApiParameter.QUERY), + OpenApiParameter("from_state", OpenApiTypes.STR, OpenApiParameter.QUERY), + OpenApiParameter("from_postcode", OpenApiTypes.STR, OpenApiParameter.QUERY), + OpenApiParameter("from_country", OpenApiTypes.STR, OpenApiParameter.QUERY), + OpenApiParameter("to_address_line", OpenApiTypes.STR, OpenApiParameter.QUERY), + OpenApiParameter("to_street", OpenApiTypes.STR, OpenApiParameter.QUERY), + OpenApiParameter("to_city", OpenApiTypes.STR, OpenApiParameter.QUERY), + OpenApiParameter("to_state", OpenApiTypes.STR, OpenApiParameter.QUERY), + OpenApiParameter("to_postcode", OpenApiTypes.STR, OpenApiParameter.QUERY), + OpenApiParameter("to_country", OpenApiTypes.STR, OpenApiParameter.QUERY), + OpenApiParameter("name", OpenApiTypes.STR, OpenApiParameter.QUERY), + OpenApiParameter("email", OpenApiTypes.STR, OpenApiParameter.QUERY, required=True), + OpenApiParameter("phone", OpenApiTypes.STR, OpenApiParameter.QUERY), + OpenApiParameter( + "due_date", OpenApiTypes.DATE, OpenApiParameter.QUERY, examples=["2021-02-28"] + ), + OpenApiParameter( + "currency", OpenApiTypes.STR, OpenApiParameter.QUERY, required=True + ), + OpenApiParameter("teams", OpenApiTypes.STR, OpenApiParameter.QUERY), + OpenApiParameter("assigned_to", OpenApiTypes.STR, OpenApiParameter.QUERY), + OpenApiParameter("accounts", OpenApiTypes.STR, OpenApiParameter.QUERY), + OpenApiParameter("quality_hours", OpenApiTypes.INT, OpenApiParameter.QUERY), + OpenApiParameter("rate", OpenApiTypes.INT, OpenApiParameter.QUERY), + OpenApiParameter("tax", OpenApiTypes.INT, OpenApiParameter.QUERY), + OpenApiParameter("total_amount", OpenApiTypes.INT, OpenApiParameter.QUERY), + OpenApiParameter("details", OpenApiTypes.STR, OpenApiParameter.QUERY), +] + +invoice_comment_edit_params = organization_params + [ + OpenApiParameter("comment", OpenApiTypes.STR, OpenApiParameter.QUERY), +] diff --git a/invoices/tasks.py b/backend/invoices/tasks.py similarity index 100% rename from invoices/tasks.py rename to backend/invoices/tasks.py diff --git a/invoices/templates/assigned_to_email_template.html b/backend/invoices/templates/assigned_to_email_template.html similarity index 100% rename from invoices/templates/assigned_to_email_template.html rename to backend/invoices/templates/assigned_to_email_template.html diff --git a/invoices/templates/invoice_cancelled.html b/backend/invoices/templates/invoice_cancelled.html similarity index 100% rename from invoices/templates/invoice_cancelled.html rename to backend/invoices/templates/invoice_cancelled.html diff --git a/invoices/templates/invoice_detail_email.html b/backend/invoices/templates/invoice_detail_email.html similarity index 100% rename from invoices/templates/invoice_detail_email.html rename to backend/invoices/templates/invoice_detail_email.html diff --git a/invoices/tests.py b/backend/invoices/tests.py similarity index 99% rename from invoices/tests.py rename to backend/invoices/tests.py index ee970f1a..90ede27a 100644 --- a/invoices/tests.py +++ b/backend/invoices/tests.py @@ -5,9 +5,8 @@ from django.test import TestCase from django.urls import reverse from accounts.models import Account -from common.models import Address, Attachments, Comment, Company, User +from common.models import Address, Attachments, Comment, Company, Teams, User from invoices.models import Invoice, InvoiceHistory -from teams.models import Teams class InvoiceCreateTest(object): diff --git a/invoices/tests_celery_tasks.py b/backend/invoices/tests_celery_tasks.py similarity index 100% rename from invoices/tests_celery_tasks.py rename to backend/invoices/tests_celery_tasks.py diff --git a/invoices/urls.py b/backend/invoices/urls.py similarity index 100% rename from invoices/urls.py rename to backend/invoices/urls.py diff --git a/backend/invoices/views.py b/backend/invoices/views.py new file mode 100644 index 00000000..979732b9 --- /dev/null +++ b/backend/invoices/views.py @@ -0,0 +1,2 @@ +# Invoice views removed - invoice functionality is now handled via API +# Email templates for invoices are still used by Celery tasks diff --git a/events/__init__.py b/backend/leads/__init__.py similarity index 100% rename from events/__init__.py rename to backend/leads/__init__.py diff --git a/leads/admin.py b/backend/leads/admin.py similarity index 100% rename from leads/admin.py rename to backend/leads/admin.py diff --git a/leads/apps.py b/backend/leads/apps.py similarity index 100% rename from leads/apps.py rename to backend/leads/apps.py diff --git a/leads/forms.py b/backend/leads/forms.py similarity index 100% rename from leads/forms.py rename to backend/leads/forms.py diff --git a/backend/leads/migrations/0001_initial.py b/backend/leads/migrations/0001_initial.py new file mode 100644 index 00000000..9361dc2b --- /dev/null +++ b/backend/leads/migrations/0001_initial.py @@ -0,0 +1,632 @@ +# Generated by Django 5.2.8 on 2025-11-27 12:17 + +import uuid + +import django.db.models.deletion +import phonenumber_field.modelfields +from django.conf import settings +from django.db import migrations, models + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ("common", "0001_initial"), + ("contacts", "0001_initial"), + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ] + + operations = [ + migrations.CreateModel( + name="Company", + fields=[ + ( + "created_at", + models.DateTimeField(auto_now_add=True, verbose_name="Created At"), + ), + ( + "updated_at", + models.DateTimeField( + auto_now=True, verbose_name="Last Modified At" + ), + ), + ( + "id", + models.UUIDField( + db_index=True, + default=uuid.uuid4, + editable=False, + primary_key=True, + serialize=False, + unique=True, + ), + ), + ("name", models.CharField(blank=True, max_length=100, null=True)), + ( + "created_by", + models.ForeignKey( + null=True, + on_delete=django.db.models.deletion.SET_NULL, + related_name="%(class)s_created_by", + to=settings.AUTH_USER_MODEL, + verbose_name="Created By", + ), + ), + ( + "org", + models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, + related_name="companies", + to="common.org", + ), + ), + ( + "updated_by", + models.ForeignKey( + null=True, + on_delete=django.db.models.deletion.SET_NULL, + related_name="%(class)s_updated_by", + to=settings.AUTH_USER_MODEL, + verbose_name="Last Modified By", + ), + ), + ], + options={ + "verbose_name": "Company", + "verbose_name_plural": "Companies", + "db_table": "company", + "ordering": ("-created_at",), + }, + ), + migrations.CreateModel( + name="Lead", + fields=[ + ( + "created_at", + models.DateTimeField(auto_now_add=True, verbose_name="Created At"), + ), + ( + "updated_at", + models.DateTimeField( + auto_now=True, verbose_name="Last Modified At" + ), + ), + ( + "id", + models.UUIDField( + db_index=True, + default=uuid.uuid4, + editable=False, + primary_key=True, + serialize=False, + unique=True, + ), + ), + ("title", models.CharField(max_length=64, verbose_name="Title")), + ( + "first_name", + models.CharField( + max_length=255, null=True, verbose_name="First name" + ), + ), + ( + "last_name", + models.CharField( + max_length=255, null=True, verbose_name="Last name" + ), + ), + ("email", models.EmailField(blank=True, max_length=254, null=True)), + ( + "phone", + phonenumber_field.modelfields.PhoneNumberField( + blank=True, max_length=128, null=True, region=None + ), + ), + ( + "contact_title", + models.CharField( + blank=True, max_length=255, null=True, verbose_name="Job Title" + ), + ), + ( + "website", + models.CharField( + blank=True, max_length=255, null=True, verbose_name="Website" + ), + ), + ( + "linkedin_url", + models.URLField( + blank=True, + max_length=500, + null=True, + verbose_name="LinkedIn URL", + ), + ), + ( + "status", + models.CharField( + blank=True, + choices=[ + ("assigned", "Assigned"), + ("in process", "In Process"), + ("converted", "Converted"), + ("recycled", "Recycled"), + ("closed", "Closed"), + ], + max_length=255, + null=True, + verbose_name="Status", + ), + ), + ( + "source", + models.CharField( + blank=True, + choices=[ + ("call", "Call"), + ("email", "Email"), + ("existing customer", "Existing Customer"), + ("partner", "Partner"), + ("public relations", "Public Relations"), + ("compaign", "Campaign"), + ("other", "Other"), + ], + max_length=255, + null=True, + verbose_name="Source", + ), + ), + ( + "industry", + models.CharField( + blank=True, + choices=[ + ("ADVERTISING", "ADVERTISING"), + ("AGRICULTURE", "AGRICULTURE"), + ("APPAREL & ACCESSORIES", "APPAREL & ACCESSORIES"), + ("AUTOMOTIVE", "AUTOMOTIVE"), + ("BANKING", "BANKING"), + ("BIOTECHNOLOGY", "BIOTECHNOLOGY"), + ( + "BUILDING MATERIALS & EQUIPMENT", + "BUILDING MATERIALS & EQUIPMENT", + ), + ("CHEMICAL", "CHEMICAL"), + ("COMPUTER", "COMPUTER"), + ("EDUCATION", "EDUCATION"), + ("ELECTRONICS", "ELECTRONICS"), + ("ENERGY", "ENERGY"), + ("ENTERTAINMENT & LEISURE", "ENTERTAINMENT & LEISURE"), + ("FINANCE", "FINANCE"), + ("FOOD & BEVERAGE", "FOOD & BEVERAGE"), + ("GROCERY", "GROCERY"), + ("HEALTHCARE", "HEALTHCARE"), + ("INSURANCE", "INSURANCE"), + ("LEGAL", "LEGAL"), + ("MANUFACTURING", "MANUFACTURING"), + ("PUBLISHING", "PUBLISHING"), + ("REAL ESTATE", "REAL ESTATE"), + ("SERVICE", "SERVICE"), + ("SOFTWARE", "SOFTWARE"), + ("SPORTS", "SPORTS"), + ("TECHNOLOGY", "TECHNOLOGY"), + ("TELECOMMUNICATIONS", "TELECOMMUNICATIONS"), + ("TELEVISION", "TELEVISION"), + ("TRANSPORTATION", "TRANSPORTATION"), + ("VENTURE CAPITAL", "VENTURE CAPITAL"), + ], + max_length=255, + null=True, + verbose_name="Industry", + ), + ), + ( + "rating", + models.CharField( + blank=True, + choices=[("HOT", "Hot"), ("WARM", "Warm"), ("COLD", "Cold")], + max_length=10, + null=True, + verbose_name="Rating", + ), + ), + ( + "opportunity_amount", + models.DecimalField( + blank=True, + decimal_places=2, + max_digits=12, + null=True, + verbose_name="Deal Value", + ), + ), + ( + "probability", + models.IntegerField( + blank=True, + default=0, + null=True, + verbose_name="Win Probability %", + ), + ), + ( + "close_date", + models.DateField( + default=None, null=True, verbose_name="Expected Close Date" + ), + ), + ( + "address_line", + models.CharField( + blank=True, max_length=255, null=True, verbose_name="Address" + ), + ), + ( + "city", + models.CharField( + blank=True, max_length=255, null=True, verbose_name="City" + ), + ), + ( + "state", + models.CharField( + blank=True, max_length=255, null=True, verbose_name="State" + ), + ), + ( + "postcode", + models.CharField( + blank=True, max_length=64, null=True, verbose_name="Postal Code" + ), + ), + ( + "country", + models.CharField( + blank=True, + choices=[ + ("GB", "United Kingdom"), + ("AF", "Afghanistan"), + ("AX", "Aland Islands"), + ("AL", "Albania"), + ("DZ", "Algeria"), + ("AS", "American Samoa"), + ("AD", "Andorra"), + ("AO", "Angola"), + ("AI", "Anguilla"), + ("AQ", "Antarctica"), + ("AG", "Antigua and Barbuda"), + ("AR", "Argentina"), + ("AM", "Armenia"), + ("AW", "Aruba"), + ("AU", "Australia"), + ("AT", "Austria"), + ("AZ", "Azerbaijan"), + ("BS", "Bahamas"), + ("BH", "Bahrain"), + ("BD", "Bangladesh"), + ("BB", "Barbados"), + ("BY", "Belarus"), + ("BE", "Belgium"), + ("BZ", "Belize"), + ("BJ", "Benin"), + ("BM", "Bermuda"), + ("BT", "Bhutan"), + ("BO", "Bolivia"), + ("BA", "Bosnia and Herzegovina"), + ("BW", "Botswana"), + ("BV", "Bouvet Island"), + ("BR", "Brazil"), + ("IO", "British Indian Ocean Territory"), + ("BN", "Brunei Darussalam"), + ("BG", "Bulgaria"), + ("BF", "Burkina Faso"), + ("BI", "Burundi"), + ("KH", "Cambodia"), + ("CM", "Cameroon"), + ("CA", "Canada"), + ("CV", "Cape Verde"), + ("KY", "Cayman Islands"), + ("CF", "Central African Republic"), + ("TD", "Chad"), + ("CL", "Chile"), + ("CN", "China"), + ("CX", "Christmas Island"), + ("CC", "Cocos (Keeling) Islands"), + ("CO", "Colombia"), + ("KM", "Comoros"), + ("CG", "Congo"), + ("CD", "Congo, The Democratic Republic of the"), + ("CK", "Cook Islands"), + ("CR", "Costa Rica"), + ("CI", "Cote d'Ivoire"), + ("HR", "Croatia"), + ("CU", "Cuba"), + ("CY", "Cyprus"), + ("CZ", "Czech Republic"), + ("DK", "Denmark"), + ("DJ", "Djibouti"), + ("DM", "Dominica"), + ("DO", "Dominican Republic"), + ("EC", "Ecuador"), + ("EG", "Egypt"), + ("SV", "El Salvador"), + ("GQ", "Equatorial Guinea"), + ("ER", "Eritrea"), + ("EE", "Estonia"), + ("ET", "Ethiopia"), + ("FK", "Falkland Islands (Malvinas)"), + ("FO", "Faroe Islands"), + ("FJ", "Fiji"), + ("FI", "Finland"), + ("FR", "France"), + ("GF", "French Guiana"), + ("PF", "French Polynesia"), + ("TF", "French Southern Territories"), + ("GA", "Gabon"), + ("GM", "Gambia"), + ("GE", "Georgia"), + ("DE", "Germany"), + ("GH", "Ghana"), + ("GI", "Gibraltar"), + ("GR", "Greece"), + ("GL", "Greenland"), + ("GD", "Grenada"), + ("GP", "Guadeloupe"), + ("GU", "Guam"), + ("GT", "Guatemala"), + ("GG", "Guernsey"), + ("GN", "Guinea"), + ("GW", "Guinea-Bissau"), + ("GY", "Guyana"), + ("HT", "Haiti"), + ("HM", "Heard Island and McDonald Islands"), + ("VA", "Holy See (Vatican City State)"), + ("HN", "Honduras"), + ("HK", "Hong Kong"), + ("HU", "Hungary"), + ("IS", "Iceland"), + ("IN", "India"), + ("ID", "Indonesia"), + ("IR", "Iran, Islamic Republic of"), + ("IQ", "Iraq"), + ("IE", "Ireland"), + ("IM", "Isle of Man"), + ("IL", "Israel"), + ("IT", "Italy"), + ("JM", "Jamaica"), + ("JP", "Japan"), + ("JE", "Jersey"), + ("JO", "Jordan"), + ("KZ", "Kazakhstan"), + ("KE", "Kenya"), + ("KI", "Kiribati"), + ("KP", "Korea, Democratic People's Republic of"), + ("KR", "Korea, Republic of"), + ("KW", "Kuwait"), + ("KG", "Kyrgyzstan"), + ("LA", "Lao People's Democratic Republic"), + ("LV", "Latvia"), + ("LB", "Lebanon"), + ("LS", "Lesotho"), + ("LR", "Liberia"), + ("LY", "Libyan Arab Jamahiriya"), + ("LI", "Liechtenstein"), + ("LT", "Lithuania"), + ("LU", "Luxembourg"), + ("MO", "Macao"), + ("MK", "Macedonia, The Former Yugoslav Republic of"), + ("MG", "Madagascar"), + ("MW", "Malawi"), + ("MY", "Malaysia"), + ("MV", "Maldives"), + ("ML", "Mali"), + ("MT", "Malta"), + ("MH", "Marshall Islands"), + ("MQ", "Martinique"), + ("MR", "Mauritania"), + ("MU", "Mauritius"), + ("YT", "Mayotte"), + ("MX", "Mexico"), + ("FM", "Micronesia, Federated States of"), + ("MD", "Moldova"), + ("MC", "Monaco"), + ("MN", "Mongolia"), + ("ME", "Montenegro"), + ("MS", "Montserrat"), + ("MA", "Morocco"), + ("MZ", "Mozambique"), + ("MM", "Myanmar"), + ("NA", "Namibia"), + ("NR", "Nauru"), + ("NP", "Nepal"), + ("NL", "Netherlands"), + ("AN", "Netherlands Antilles"), + ("NC", "New Caledonia"), + ("NZ", "New Zealand"), + ("NI", "Nicaragua"), + ("NE", "Niger"), + ("NG", "Nigeria"), + ("NU", "Niue"), + ("NF", "Norfolk Island"), + ("MP", "Northern Mariana Islands"), + ("NO", "Norway"), + ("OM", "Oman"), + ("PK", "Pakistan"), + ("PW", "Palau"), + ("PS", "Palestinian Territory, Occupied"), + ("PA", "Panama"), + ("PG", "Papua New Guinea"), + ("PY", "Paraguay"), + ("PE", "Peru"), + ("PH", "Philippines"), + ("PN", "Pitcairn"), + ("PL", "Poland"), + ("PT", "Portugal"), + ("PR", "Puerto Rico"), + ("QA", "Qatar"), + ("RE", "Reunion"), + ("RO", "Romania"), + ("RU", "Russian Federation"), + ("RW", "Rwanda"), + ("BL", "Saint Barthelemy"), + ("SH", "Saint Helena"), + ("KN", "Saint Kitts and Nevis"), + ("LC", "Saint Lucia"), + ("MF", "Saint Martin"), + ("PM", "Saint Pierre and Miquelon"), + ("VC", "Saint Vincent and the Grenadines"), + ("WS", "Samoa"), + ("SM", "San Marino"), + ("ST", "Sao Tome and Principe"), + ("SA", "Saudi Arabia"), + ("SN", "Senegal"), + ("RS", "Serbia"), + ("SC", "Seychelles"), + ("SL", "Sierra Leone"), + ("SG", "Singapore"), + ("SK", "Slovakia"), + ("SI", "Slovenia"), + ("SB", "Solomon Islands"), + ("SO", "Somalia"), + ("ZA", "South Africa"), + ("GS", "South Georgia and the South Sandwich Islands"), + ("ES", "Spain"), + ("LK", "Sri Lanka"), + ("SD", "Sudan"), + ("SR", "Suriname"), + ("SJ", "Svalbard and Jan Mayen"), + ("SZ", "Swaziland"), + ("SE", "Sweden"), + ("CH", "Switzerland"), + ("SY", "Syrian Arab Republic"), + ("TW", "Taiwan, Province of China"), + ("TJ", "Tajikistan"), + ("TZ", "Tanzania, United Republic of"), + ("TH", "Thailand"), + ("TL", "Timor-Leste"), + ("TG", "Togo"), + ("TK", "Tokelau"), + ("TO", "Tonga"), + ("TT", "Trinidad and Tobago"), + ("TN", "Tunisia"), + ("TR", "Turkey"), + ("TM", "Turkmenistan"), + ("TC", "Turks and Caicos Islands"), + ("TV", "Tuvalu"), + ("UG", "Uganda"), + ("UA", "Ukraine"), + ("AE", "United Arab Emirates"), + ("US", "United States"), + ("UM", "United States Minor Outlying Islands"), + ("UY", "Uruguay"), + ("UZ", "Uzbekistan"), + ("VU", "Vanuatu"), + ("VE", "Venezuela"), + ("VN", "Viet Nam"), + ("VG", "Virgin Islands, British"), + ("VI", "Virgin Islands, U.S."), + ("WF", "Wallis and Futuna"), + ("EH", "Western Sahara"), + ("YE", "Yemen"), + ("ZM", "Zambia"), + ("ZW", "Zimbabwe"), + ], + max_length=3, + null=True, + verbose_name="Country", + ), + ), + ( + "last_contacted", + models.DateField( + blank=True, null=True, verbose_name="Last Contacted" + ), + ), + ( + "next_follow_up", + models.DateField( + blank=True, null=True, verbose_name="Next Follow-up" + ), + ), + ( + "description", + models.TextField(blank=True, null=True, verbose_name="Notes"), + ), + ("is_active", models.BooleanField(default=True)), + ("created_from_site", models.BooleanField(default=False)), + ( + "assigned_to", + models.ManyToManyField( + related_name="lead_assigned_users", to="common.profile" + ), + ), + ( + "company", + models.ForeignKey( + blank=True, + null=True, + on_delete=django.db.models.deletion.SET_NULL, + related_name="lead_company", + to="leads.company", + ), + ), + ( + "contacts", + models.ManyToManyField( + related_name="lead_contacts", to="contacts.contact" + ), + ), + ( + "created_by", + models.ForeignKey( + null=True, + on_delete=django.db.models.deletion.SET_NULL, + related_name="%(class)s_created_by", + to=settings.AUTH_USER_MODEL, + verbose_name="Created By", + ), + ), + ( + "org", + models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, + related_name="leads", + to="common.org", + ), + ), + ("tags", models.ManyToManyField(blank=True, to="common.tags")), + ( + "teams", + models.ManyToManyField( + related_name="lead_teams", to="common.teams" + ), + ), + ( + "updated_by", + models.ForeignKey( + null=True, + on_delete=django.db.models.deletion.SET_NULL, + related_name="%(class)s_updated_by", + to=settings.AUTH_USER_MODEL, + verbose_name="Last Modified By", + ), + ), + ], + options={ + "verbose_name": "Lead", + "verbose_name_plural": "Leads", + "db_table": "lead", + "ordering": ("-created_at",), + "indexes": [ + models.Index(fields=["status"], name="lead_status_e8cfda_idx"), + models.Index(fields=["source"], name="lead_source_b6a91c_idx"), + models.Index( + fields=["org", "-created_at"], name="lead_org_id_efd8ea_idx" + ), + ], + }, + ), + ] diff --git a/events/migrations/__init__.py b/backend/leads/migrations/__init__.py similarity index 100% rename from events/migrations/__init__.py rename to backend/leads/migrations/__init__.py diff --git a/leads/models.py b/backend/leads/models.py similarity index 56% rename from leads/models.py rename to backend/leads/models.py index 7294d5c4..725bf314 100644 --- a/leads/models.py +++ b/backend/leads/models.py @@ -4,9 +4,8 @@ from django.utils.translation import gettext_lazy as _ from django.utils.translation import pgettext_lazy from phonenumber_field.modelfields import PhoneNumberField -from accounts.models import Tags -from common.models import Org, Profile -from common.base import BaseModel +from common.base import AssignableMixin, BaseModel +from common.models import Org, Profile, Tags, Teams from common.utils import ( COUNTRIES, INDCHOICES, @@ -15,12 +14,11 @@ from common.utils import ( return_complete_address, ) from contacts.models import Contact -from teams.models import Teams class Company(BaseModel): name = models.CharField(max_length=100, blank=True, null=True) - org = models.ForeignKey(Org, on_delete=models.SET_NULL, null=True, blank=True) + org = models.ForeignKey(Org, on_delete=models.CASCADE, related_name="companies") class Meta: verbose_name = "Company" @@ -31,7 +29,14 @@ class Company(BaseModel): def __str__(self): return f"{self.name}" -class Lead(BaseModel): + +class Lead(AssignableMixin, BaseModel): + """ + Lead model for CRM - Streamlined for modern sales workflow + Based on Twenty CRM and Salesforce patterns + """ + + # Core Lead Information title = models.CharField( pgettext_lazy("Treatment Pronouns for the customer", "Title"), max_length=64 ) @@ -39,36 +44,63 @@ class Lead(BaseModel): last_name = models.CharField(_("Last name"), null=True, max_length=255) email = models.EmailField(null=True, blank=True) phone = PhoneNumberField(null=True, blank=True) + contact_title = models.CharField( + _("Job Title"), max_length=255, blank=True, null=True + ) + website = models.CharField(_("Website"), max_length=255, blank=True, null=True) + linkedin_url = models.URLField( + _("LinkedIn URL"), max_length=500, blank=True, null=True + ) + + # Sales Pipeline status = models.CharField( - _("Status of Lead"), max_length=255, blank=True, null=True, choices=LEAD_STATUS + _("Status"), max_length=255, blank=True, null=True, choices=LEAD_STATUS ) source = models.CharField( - _("Source of Lead"), max_length=255, blank=True, null=True, choices=LEAD_SOURCE + _("Source"), max_length=255, blank=True, null=True, choices=LEAD_SOURCE ) + industry = models.CharField( + _("Industry"), max_length=255, choices=INDCHOICES, blank=True, null=True + ) + rating = models.CharField( + _("Rating"), + max_length=10, + blank=True, + null=True, + choices=[("HOT", "Hot"), ("WARM", "Warm"), ("COLD", "Cold")], + ) + opportunity_amount = models.DecimalField( + _("Deal Value"), decimal_places=2, max_digits=12, blank=True, null=True + ) + probability = models.IntegerField( + _("Win Probability %"), default=0, blank=True, null=True + ) + close_date = models.DateField(_("Expected Close Date"), default=None, null=True) + + # Address address_line = models.CharField(_("Address"), max_length=255, blank=True, null=True) - street = models.CharField(_("Street"), max_length=55, blank=True, null=True) city = models.CharField(_("City"), max_length=255, blank=True, null=True) state = models.CharField(_("State"), max_length=255, blank=True, null=True) - postcode = models.CharField( - _("Post/Zip-code"), max_length=64, blank=True, null=True + postcode = models.CharField(_("Postal Code"), max_length=64, blank=True, null=True) + country = models.CharField( + _("Country"), max_length=3, choices=COUNTRIES, blank=True, null=True ) - country = models.CharField(max_length=3, choices=COUNTRIES, blank=True, null=True) - website = models.CharField(_("Website"), max_length=255, blank=True, null=True) - description = models.TextField(blank=True, null=True) + + # Assignment assigned_to = models.ManyToManyField(Profile, related_name="lead_assigned_users") - account_name = models.CharField(max_length=255, null=True, blank=True) - opportunity_amount = models.DecimalField( - _("Opportunity Amount"), decimal_places=2, max_digits=12, blank=True, null=True - ) - is_active = models.BooleanField(default=False) - enquiry_type = models.CharField(max_length=255, blank=True, null=True) + teams = models.ManyToManyField(Teams, related_name="lead_teams") + + # Activity Tracking + last_contacted = models.DateField(_("Last Contacted"), blank=True, null=True) + next_follow_up = models.DateField(_("Next Follow-up"), blank=True, null=True) + description = models.TextField(_("Notes"), blank=True, null=True) + + # System Fields + is_active = models.BooleanField(default=True) tags = models.ManyToManyField(Tags, blank=True) contacts = models.ManyToManyField(Contact, related_name="lead_contacts") created_from_site = models.BooleanField(default=False) - teams = models.ManyToManyField(Teams, related_name="lead_teams") - org = models.ForeignKey( - Org, on_delete=models.SET_NULL, null=True, blank=True, related_name="lead_org" - ) + org = models.ForeignKey(Org, on_delete=models.CASCADE, related_name="leads") company = models.ForeignKey( Company, on_delete=models.SET_NULL, @@ -76,19 +108,17 @@ class Lead(BaseModel): blank=True, related_name="lead_company", ) - skype_ID = models.CharField(max_length=100, null=True, blank=True) - industry = models.CharField( - _("Industry Type"), max_length=255, choices=INDCHOICES, blank=True, null=True - ) - organization = models.CharField(_("Organization"), max_length=255, null=True) - probability = models.IntegerField(default=0, blank=True, null=True) - close_date = models.DateField(default=None, null=True) class Meta: verbose_name = "Lead" verbose_name_plural = "Leads" db_table = "lead" ordering = ("-created_at",) + indexes = [ + models.Index(fields=["status"]), + models.Index(fields=["source"]), + models.Index(fields=["org", "-created_at"]), + ] def __str__(self): return f"{self.title}" @@ -106,25 +136,6 @@ class Lead(BaseModel): def created_on_arrow(self): return arrow.get(self.created_at).humanize() - @property - def get_team_users(self): - team_user_ids = list(self.teams.values_list("users__id", flat=True)) - return Profile.objects.filter(id__in=team_user_ids) - - @property - def get_team_and_assigned_users(self): - team_user_ids = list(self.teams.values_list("users__id", flat=True)) - assigned_user_ids = list(self.assigned_to.values_list("id", flat=True)) - user_ids = team_user_ids + assigned_user_ids - return Profile.objects.filter(id__in=user_ids) - - @property - def get_assigned_users_not_in_teams(self): - team_user_ids = list(self.teams.values_list("users__id", flat=True)) - assigned_user_ids = list(self.assigned_to.values_list("id", flat=True)) - user_ids = set(assigned_user_ids) - set(team_user_ids) - return Profile.objects.filter(id__in=list(user_ids)) - # def save(self, *args, **kwargs): # super(Lead, self).save(*args, **kwargs) # queryset = Lead.objects.all().exclude(status='converted').select_related('created_by' diff --git a/leads/serializer.py b/backend/leads/serializer.py similarity index 62% rename from leads/serializer.py rename to backend/leads/serializer.py index fd766ac5..d5988381 100644 --- a/leads/serializer.py +++ b/backend/leads/serializer.py @@ -1,16 +1,17 @@ from rest_framework import serializers -from accounts.models import Account, Tags +from accounts.models import Account +from common.models import Tags from common.serializer import ( AttachmentsSerializer, LeadCommentSerializer, OrganizationSerializer, ProfileSerializer, + TeamsSerializer, UserSerializer, ) from contacts.serializer import ContactSerializer from leads.models import Company, Lead -from teams.serializer import TeamsSerializer class TagsSerializer(serializers.ModelSerializer): @@ -24,6 +25,7 @@ class CompanySwaggerSerializer(serializers.ModelSerializer): model = Company fields = ("name",) + class CompanySerializer(serializers.ModelSerializer): class Meta: model = Company @@ -45,54 +47,65 @@ class LeadSerializer(serializers.ModelSerializer): class Meta: model = Lead - # fields = ‘__all__’ fields = ( "id", + # Core Lead Information "title", "first_name", "last_name", - "phone", "email", + "phone", + "contact_title", + "website", + "linkedin_url", + # Sales Pipeline "status", "source", + "industry", + "rating", + "opportunity_amount", + "probability", + "close_date", + # Address "address_line", - "contacts", - "street", "city", "state", "postcode", "country", - "website", + # Assignment + "assigned_to", + "teams", + # Activity + "last_contacted", + "next_follow_up", "description", + # Related + "contacts", "lead_attachment", "lead_comments", - "assigned_to", - "account_name", - "opportunity_amount", + "tags", + # System "created_by", "created_at", "is_active", - "enquiry_type", - "tags", "created_from_site", - "teams", - "skype_ID", - "industry", "company", - "organization", - "probability", - "close_date", ) class LeadCreateSerializer(serializers.ModelSerializer): - probability = serializers.IntegerField(max_value=100) + probability = serializers.IntegerField( + max_value=100, required=False, allow_null=True + ) + opportunity_amount = serializers.DecimalField( + max_digits=12, decimal_places=2, required=False, allow_null=True + ) + close_date = serializers.DateField(required=False, allow_null=True) def __init__(self, *args, **kwargs): request_obj = kwargs.pop("request_obj", None) super().__init__(*args, **kwargs) if self.initial_data and self.initial_data.get("status") == "converted": - self.fields["account_name"].required = True self.fields["email"].required = True self.fields["first_name"].required = False self.fields["last_name"].required = False @@ -105,93 +118,103 @@ class LeadCreateSerializer(serializers.ModelSerializer): prev_choices = prev_choices + [("micropyramid", "Micropyramid")] self.fields["source"]._set_choices(prev_choices) - def validate_account_name(self, account_name): - if self.instance: - if ( - Account.objects.filter(name__iexact=account_name, org=self.org) - .exclude(id=self.instance.id) - .exists() - ): - raise serializers.ValidationError( - "Account already exists with this name" - ) - else: - if Account.objects.filter(name__iexact=account_name, org=self.org).exists(): - raise serializers.ValidationError( - "Account already exists with this name" - ) - return account_name - - def validate_title(self, title): - if self.instance: - if ( - Lead.objects.filter(title__iexact=title, org=self.org) - .exclude(id=self.instance.id) - .exists() - ): - raise serializers.ValidationError("Lead already exists with this title") - else: - if Lead.objects.filter(title__iexact=title, org=self.org).exists(): - raise serializers.ValidationError("Lead already exists with this title") - return title - class Meta: model = Lead fields = ( + # Core Lead Information + "title", "first_name", "last_name", - "account_name", - "title", - "phone", "email", + "phone", + "contact_title", + "website", + "linkedin_url", + # Sales Pipeline "status", "source", - "website", - "description", + "industry", + "rating", + "opportunity_amount", + "probability", + "close_date", + # Address "address_line", - # "contacts", - "street", "city", "state", "postcode", - "opportunity_amount", "country", + # Activity + "last_contacted", + "next_follow_up", + "description", + # System "org", - "skype_ID", - "industry", "company", - "organization", - "probability", - "close_date", - # "lead_attachment", ) + class LeadCreateSwaggerSerializer(serializers.ModelSerializer): class Meta: model = Lead - fields = ["title","first_name","last_name","account_name","phone","email","lead_attachment","opportunity_amount","website", - "description","teams","assigned_to","contacts","status","source","address_line","street","city","state","postcode", - "country","tags","company","probability","industry","skype_ID"] + fields = [ + # Core Lead Information + "title", + "first_name", + "last_name", + "email", + "phone", + "contact_title", + "website", + "linkedin_url", + # Sales Pipeline + "status", + "source", + "industry", + "rating", + "opportunity_amount", + "probability", + "close_date", + # Address + "address_line", + "city", + "state", + "postcode", + "country", + # Assignment & Related + "assigned_to", + "teams", + "contacts", + "tags", + # Activity + "last_contacted", + "next_follow_up", + "description", + # System + "company", + "lead_attachment", + ] class CreateLeadFromSiteSwaggerSerializer(serializers.Serializer): - apikey=serializers.CharField() - title=serializers.CharField() - first_name=serializers.CharField() - last_name=serializers.CharField() - phone=serializers.CharField() - email=serializers.CharField() - source=serializers.CharField() - description=serializers.CharField() + apikey = serializers.CharField() + title = serializers.CharField() + first_name = serializers.CharField() + last_name = serializers.CharField() + phone = serializers.CharField() + email = serializers.CharField() + source = serializers.CharField() + description = serializers.CharField() class LeadDetailEditSwaggerSerializer(serializers.Serializer): comment = serializers.CharField() lead_attachment = serializers.FileField() + class LeadCommentEditSwaggerSerializer(serializers.Serializer): comment = serializers.CharField() + class LeadUploadSwaggerSerializer(serializers.Serializer): leads_file = serializers.FileField() - diff --git a/leads/swagger_params1.py b/backend/leads/swagger_params.py similarity index 100% rename from leads/swagger_params1.py rename to backend/leads/swagger_params.py diff --git a/leads/tasks.py b/backend/leads/tasks.py similarity index 89% rename from leads/tasks.py rename to backend/leads/tasks.py index 30fcbd5a..5808a880 100644 --- a/leads/tasks.py +++ b/backend/leads/tasks.py @@ -7,6 +7,7 @@ from django.core.mail import EmailMessage, EmailMultiAlternatives from django.db.models import Q from django.template.loader import render_to_string +from accounts.models import Account from common.models import Org, Profile from leads.models import Lead @@ -55,7 +56,7 @@ def send_lead_assigned_emails(lead_id, new_assigned_to_list, site_address): users = Profile.objects.filter(id__in=new_assigned_to_list).distinct() subject = "Lead '%s' has been assigned to you" % lead_instance from_email = settings.DEFAULT_FROM_EMAIL - template_name = "lead_assigned.html" + template_name = "assigned_to/leads_assigned.html" url = site_address url += "/leads/" + str(lead_instance.id) + "/view/" @@ -104,7 +105,7 @@ def create_lead_from_file(validated_rows, invalid_rows, user_id, source, company """Parameters : validated_rows, invalid_rows, user_id. This function is used to create leads from a given file. """ - email_regex = "^[_a-zA-Z0-9-]+(\.[_a-zA-Z0-9-]+)*@[a-zA-Z0-9-]+(\.[a-zA-Z0-9-]+)*(\.[a-zA-Z]{2,4})$" + email_regex = r"^[_a-zA-Z0-9-]+(\.[_a-zA-Z0-9-]+)*@[a-zA-Z0-9-]+(\.[a-zA-Z0-9-]+)*(\.[a-zA-Z]{2,4})$" profile = Profile.objects.get(id=user_id) org = Org.objects.filter(id=company_id).first() for row in validated_rows: @@ -125,7 +126,14 @@ def create_lead_from_file(validated_rows, invalid_rows, user_id, source, company lead.country = row.get("country", "")[:3] lead.description = row.get("description", "") lead.status = row.get("status", "") - lead.account_name = row.get("account_name", "")[:255] + # Look up company by name if provided in CSV + account_name = row.get("account_name", "").strip()[:255] + if account_name: + company = Account.objects.filter( + name__iexact=account_name, org=org + ).first() + if company: + lead.company = company lead.created_from_site = False lead.created_by = profile lead.org = org diff --git a/leads/tests_celery_tasks.py b/backend/leads/tests_celery_tasks.py similarity index 100% rename from leads/tests_celery_tasks.py rename to backend/leads/tests_celery_tasks.py diff --git a/leads/urls.py b/backend/leads/urls.py similarity index 78% rename from leads/urls.py rename to backend/leads/urls.py index 55d27049..f418e373 100644 --- a/leads/urls.py +++ b/backend/leads/urls.py @@ -1,7 +1,8 @@ from django.urls import path from leads import views -from .import views + +from . import views app_name = "api_leads" @@ -16,6 +17,6 @@ urlpatterns = [ path("upload/", views.LeadUploadView.as_view()), path("comment//", views.LeadCommentView.as_view()), path("attachment//", views.LeadAttachmentView.as_view()), - path("companies",views.CompaniesView.as_view()), - path('company/', views.CompanyDetail.as_view()), + path("companies", views.CompaniesView.as_view()), + path("company/", views.CompanyDetail.as_view()), ] diff --git a/leads/views.py b/backend/leads/views.py similarity index 66% rename from leads/views.py rename to backend/leads/views.py index fcd7f03a..3c40dd86 100644 --- a/leads/views.py +++ b/backend/leads/views.py @@ -1,3 +1,4 @@ +from django.contrib.contenttypes.models import ContentType from django.db.models import Q from django.shortcuts import get_object_or_404 from drf_spectacular.utils import OpenApiExample, OpenApiParameter, extend_schema @@ -7,43 +8,42 @@ from rest_framework.permissions import IsAuthenticated from rest_framework.response import Response from rest_framework.views import APIView -from accounts.models import Account, Tags -from common.models import APISettings, Attachments, Comment, Profile +from accounts.models import Account +from common.models import APISettings, Attachments, Comment, Profile, Tags, Teams, User -#from common.external_auth import CustomDualAuthentication +# from common.external_auth import CustomDualAuthentication from common.serializer import ( AttachmentsSerializer, CommentSerializer, LeadCommentSerializer, ProfileSerializer, + TeamsSerializer, ) -from .forms import LeadListForm -from .models import Company,Lead from common.utils import COUNTRIES, INDCHOICES, LEAD_SOURCE, LEAD_STATUS from contacts.models import Contact -from leads import swagger_params1 +from leads import swagger_params from leads.forms import LeadListForm from leads.models import Company, Lead from leads.serializer import ( CompanySerializer, CompanySwaggerSerializer, + CreateLeadFromSiteSwaggerSerializer, + LeadCommentEditSwaggerSerializer, LeadCreateSerializer, - LeadSerializer, - TagsSerializer, LeadCreateSwaggerSerializer, LeadDetailEditSwaggerSerializer, - LeadCommentEditSwaggerSerializer, - CreateLeadFromSiteSwaggerSerializer, - LeadUploadSwaggerSerializer + LeadSerializer, + LeadUploadSwaggerSerializer, + TagsSerializer, ) -from common.models import User from leads.tasks import ( create_lead_from_file, send_email_to_assigned_user, send_lead_assigned_emails, ) -from teams.models import Teams -from teams.serializer import TeamsSerializer + +from .forms import LeadListForm +from .models import Company, Lead class LeadListView(APIView, LimitOffsetPagination): @@ -56,7 +56,7 @@ class LeadListView(APIView, LimitOffsetPagination): self.model.objects.filter(org=self.request.profile.org) .exclude(status="converted") .select_related("created_by") - .prefetch_related( + .prefetch_related( "tags", "assigned_to", ) @@ -137,33 +137,39 @@ class LeadListView(APIView, LimitOffsetPagination): context["companies"] = CompanySerializer( Company.objects.filter(org=self.request.profile.org), many=True ).data - context["tags"] = TagsSerializer(Tags.objects.all(), many=True).data + context["tags"] = TagsSerializer( + Tags.objects.filter(org=self.request.profile.org), many=True + ).data - users = Profile.objects.filter(is_active=True, org=self.request.profile.org).values( - "id", "user__email" - ) + users = Profile.objects.filter( + is_active=True, org=self.request.profile.org + ).values("id", "user__email") context["users"] = users context["countries"] = COUNTRIES context["industries"] = INDCHOICES return context - @extend_schema(tags=["Leads"], parameters=swagger_params1.lead_list_get_params) + @extend_schema(tags=["Leads"], parameters=swagger_params.lead_list_get_params) def get(self, request, *args, **kwargs): context = self.get_context_data(**kwargs) return Response(context) @extend_schema( - tags=["Leads"],description="Leads Create", parameters=swagger_params1.organization_params,request=LeadCreateSwaggerSerializer + tags=["Leads"], + description="Leads Create", + parameters=swagger_params.organization_params, + request=LeadCreateSwaggerSerializer, ) def post(self, request, *args, **kwargs): - print('test') + print("test") data = request.data serializer = LeadCreateSerializer(data=data, request_obj=request) if serializer.is_valid(): - lead_obj = serializer.save(created_by=request.profile.user - , org=request.profile.org) - if data.get("tags",None): + lead_obj = serializer.save( + created_by=request.profile.user, org=request.profile.org + ) + if data.get("tags", None): tags = data.get("tags") for t in tags: tag = Tags.objects.filter(slug=t.lower()) @@ -173,7 +179,7 @@ class LeadListView(APIView, LimitOffsetPagination): tag = Tags.objects.create(name=t) lead_obj.tags.add(tag) - if data.get("contacts",None): + if data.get("contacts", None): obj_contact = Contact.objects.filter( id__in=data.get("contacts"), org=request.profile.org ) @@ -193,12 +199,12 @@ class LeadListView(APIView, LimitOffsetPagination): attachment.attachment = request.FILES.get("lead_attachment") attachment.save() - if data.get("teams",None): + if data.get("teams", None): teams_list = data.get("teams") teams = Teams.objects.filter(id__in=teams_list, org=request.profile.org) lead_obj.teams.add(*teams) - if data.get("assigned_to",None): + if data.get("assigned_to", None): assinged_to_list = data.get("assigned_to") profiles = Profile.objects.filter( id__in=assinged_to_list, org=request.profile.org @@ -208,7 +214,11 @@ class LeadListView(APIView, LimitOffsetPagination): if data.get("status") == "converted": account_object = Account.objects.create( created_by=request.profile.user, - name=lead_obj.account_name, + name=( + lead_obj.company.name + if lead_obj.company + else f"{lead_obj.first_name} {lead_obj.last_name}" + ), email=lead_obj.email, phone=lead_obj.phone, description=data.get("description"), @@ -222,18 +232,32 @@ class LeadListView(APIView, LimitOffsetPagination): account_object.billing_state = lead_obj.state account_object.billing_postcode = lead_obj.postcode account_object.billing_country = lead_obj.country - comments = Comment.objects.filter(lead=self.lead_obj) + lead_content_type = ContentType.objects.get_for_model(Lead) + account_content_type = ContentType.objects.get_for_model(Account) + comments = Comment.objects.filter( + content_type=lead_content_type, + object_id=self.lead_obj.id, + org=request.profile.org, + ) if comments.exists(): for comment in comments: - comment.account_id = account_object.id - attachments = Attachments.objects.filter(lead=self.lead_obj) + comment.content_type = account_content_type + comment.object_id = account_object.id + comment.save() + attachments = Attachments.objects.filter( + content_type=lead_content_type, + object_id=self.lead_obj.id, + org=request.profile.org, + ) if attachments.exists(): for attachment in attachments: - attachment.account_id = account_object.id + attachment.content_type = account_content_type + attachment.object_id = account_object.id + attachment.save() for tag in lead_obj.tags.all(): account_object.tags.add(tag) - if data.get("assigned_to",None): + if data.get("assigned_to", None): assigned_to_list = data.getlist("assigned_to") recipients = assigned_to_list send_email_to_assigned_user.delay( @@ -259,11 +283,11 @@ class LeadListView(APIView, LimitOffsetPagination): class LeadDetailView(APIView): model = Lead - #authentication_classes = (CustomDualAuthentication,) + # authentication_classes = (CustomDualAuthentication,) permission_classes = (IsAuthenticated,) def get_object(self, pk): - return get_object_or_404(Lead, id=pk) + return get_object_or_404(Lead, id=pk, org=self.request.profile.org) def get_context_data(self, **kwargs): params = self.request.query_params @@ -283,8 +307,13 @@ class LeadDetailView(APIView): status=status.HTTP_403_FORBIDDEN, ) - comments = Comment.objects.filter(lead=self.lead_obj).order_by("-id") - attachments = Attachments.objects.filter(lead=self.lead_obj).order_by("-id") + lead_content_type = ContentType.objects.get_for_model(Lead) + comments = Comment.objects.filter( + content_type=lead_content_type, object_id=self.lead_obj.id + ).order_by("-id") + attachments = Attachments.objects.filter( + content_type=lead_content_type, object_id=self.lead_obj.id + ).order_by("-id") assigned_data = [] for each in self.lead_obj.assigned_to.all(): assigned_dict = {} @@ -294,24 +323,33 @@ class LeadDetailView(APIView): if self.request.user.is_superuser or self.request.profile.role == "ADMIN": users_mention = list( - Profile.objects.filter(is_active=True, org=self.request.profile.org).values( - "user__email" - ) + Profile.objects.filter( + is_active=True, org=self.request.profile.org + ).values("user__email") ) elif self.request.profile.user != self.lead_obj.created_by: users_mention = [{"username": self.lead_obj.created_by.username}] else: - users_mention = list( - self.lead_obj.assigned_to.all().values("user__email") - ) + users_mention = list(self.lead_obj.assigned_to.all().values("user__email")) + lead_content_type = ContentType.objects.get_for_model(Lead) + comments = Comment.objects.filter( + content_type=lead_content_type, + object_id=self.lead_obj.id, + org=self.request.profile.org, + ).order_by("-id") + attachments = Attachments.objects.filter( + content_type=lead_content_type, + object_id=self.lead_obj.id, + org=self.request.profile.org, + ).order_by("-id") if self.request.profile.role == "ADMIN" or self.request.user.is_superuser: users = Profile.objects.filter( is_active=True, org=self.request.profile.org ).order_by("user__email") else: - users = Profile.objects.filter(role="ADMIN", org=self.request.profile.org).order_by( - "user__email" - ) + users = Profile.objects.filter( + role="ADMIN", org=self.request.profile.org + ).order_by("user__email") user_assgn_list = [ assigned_to.id for assigned_to in self.lead_obj.get_assigned_users_not_in_teams @@ -354,13 +392,21 @@ class LeadDetailView(APIView): return context - @extend_schema(tags=["Leads"],parameters=swagger_params1.organization_params,description="Lead Detail") + @extend_schema( + tags=["Leads"], + parameters=swagger_params.organization_params, + description="Lead Detail", + ) def get(self, request, pk, **kwargs): self.lead_obj = self.get_object(pk) context = self.get_context_data(**kwargs) return Response(context) - @extend_schema(tags=["Leads"], parameters=swagger_params1.organization_params,request=LeadDetailEditSwaggerSerializer) + @extend_schema( + tags=["Leads"], + parameters=swagger_params.organization_params, + request=LeadDetailEditSwaggerSerializer, + ) def post(self, request, pk, **kwargs): params = request.data @@ -393,17 +439,26 @@ class LeadDetailView(APIView): if self.request.FILES.get("lead_attachment"): attachment = Attachments() - attachment.created_by = User.objects.get(id=self.request.profile.user.id) + attachment.created_by = User.objects.get( + id=self.request.profile.user.id + ) attachment.file_name = self.request.FILES.get("lead_attachment").name attachment.lead = self.lead_obj attachment.attachment = self.request.FILES.get("lead_attachment") attachment.save() - comments = Comment.objects.filter(lead__id=self.lead_obj.id).order_by("-id") - attachments = Attachments.objects.filter(lead__id=self.lead_obj.id).order_by( - "-id" - ) + lead_content_type = ContentType.objects.get_for_model(Lead) + comments = Comment.objects.filter( + content_type=lead_content_type, + object_id=self.lead_obj.id, + org=self.request.profile.org, + ).order_by("-id") + attachments = Attachments.objects.filter( + content_type=lead_content_type, + object_id=self.lead_obj.id, + org=self.request.profile.org, + ).order_by("-id") context.update( { "lead_obj": LeadSerializer(self.lead_obj).data, @@ -413,7 +468,11 @@ class LeadDetailView(APIView): ) return Response(context) - @extend_schema(tags=["Leads"], parameters=swagger_params1.organization_params,request=LeadCreateSwaggerSerializer) + @extend_schema( + tags=["Leads"], + parameters=swagger_params.organization_params, + request=LeadCreateSwaggerSerializer, + ) def put(self, request, pk, **kwargs): params = request.data self.lead_obj = self.get_object(pk) @@ -489,7 +548,11 @@ class LeadDetailView(APIView): if params.get("status") == "converted": account_object = Account.objects.create( created_by=request.profile.user, - name=lead_obj.account_name, + name=( + lead_obj.company.name + if lead_obj.company + else f"{lead_obj.first_name} {lead_obj.last_name}" + ), email=lead_obj.email, phone=lead_obj.phone, description=params.get("description"), @@ -503,14 +566,28 @@ class LeadDetailView(APIView): account_object.billing_state = lead_obj.state account_object.billing_postcode = lead_obj.postcode account_object.billing_country = lead_obj.country - comments = Comment.objects.filter(lead=self.lead_obj) + lead_content_type = ContentType.objects.get_for_model(Lead) + account_content_type = ContentType.objects.get_for_model(Account) + comments = Comment.objects.filter( + content_type=lead_content_type, + object_id=self.lead_obj.id, + org=request.profile.org, + ) if comments.exists(): for comment in comments: - comment.account_id = account_object.id - attachments = Attachments.objects.filter(lead=self.lead_obj) + comment.content_type = account_content_type + comment.object_id = account_object.id + comment.save() + attachments = Attachments.objects.filter( + content_type=lead_content_type, + object_id=self.lead_obj.id, + org=request.profile.org, + ) if attachments.exists(): for attachment in attachments: - attachment.account_id = account_object.id + attachment.content_type = account_content_type + attachment.object_id = account_object.id + attachment.save() for tag in lead_obj.tags.all(): account_object.tags.add(tag) if params.get("assigned_to"): @@ -522,9 +599,7 @@ class LeadDetailView(APIView): lead_obj.id, ) - for comment in lead_obj.leads_comments.all(): - comment.account = account_object - comment.save() + # Comments and attachments already migrated above account_object.save() return Response( { @@ -542,14 +617,163 @@ class LeadDetailView(APIView): status=status.HTTP_400_BAD_REQUEST, ) - @extend_schema(tags=["Leads"],parameters=swagger_params1.organization_params, description="Lead Delete") + @extend_schema( + tags=["Leads"], + parameters=swagger_params.organization_params, + request=LeadDetailEditSwaggerSerializer, + description="Partial Lead Update", + ) + def patch(self, request, pk, **kwargs): + """Handle partial updates to a lead, including conversion.""" + params = request.data + self.lead_obj = self.get_object(pk) + + if self.lead_obj.org != request.profile.org: + return Response( + { + "error": True, + "errors": "User company does not match with header....", + }, + status=status.HTTP_403_FORBIDDEN, + ) + + if self.request.profile.role != "ADMIN" and not self.request.user.is_superuser: + if not ( + (self.request.profile.user == self.lead_obj.created_by) + or (self.request.profile in self.lead_obj.assigned_to.all()) + ): + return Response( + { + "error": True, + "errors": "You do not have Permission to perform this action", + }, + status=status.HTTP_403_FORBIDDEN, + ) + + # Handle conversion if status is being set to converted + if params.get("status") == "converted" or params.get("is_converted"): + # Create Account from Lead + account_object = Account.objects.create( + created_by=request.profile.user, + name=( + self.lead_obj.company.name + if self.lead_obj.company + else f"{self.lead_obj.first_name} {self.lead_obj.last_name}" + ), + email=self.lead_obj.email, + phone=self.lead_obj.phone, + description=self.lead_obj.description, + website=self.lead_obj.website, + org=request.profile.org, + is_active=True, # Set as active when converted from lead + # Copy address fields + address_line=self.lead_obj.address_line, + city=self.lead_obj.city, + state=self.lead_obj.state, + postcode=self.lead_obj.postcode, + country=self.lead_obj.country, + ) + + # Copy tags + for tag in self.lead_obj.tags.all(): + account_object.tags.add(tag) + + # Move comments to account + lead_content_type = ContentType.objects.get_for_model(Lead) + account_content_type = ContentType.objects.get_for_model(Account) + comments = Comment.objects.filter( + content_type=lead_content_type, + object_id=self.lead_obj.id, + org=request.profile.org, + ) + for comment in comments: + comment.content_type = account_content_type + comment.object_id = account_object.id + comment.save() + + # Move attachments to account + attachments = Attachments.objects.filter( + content_type=lead_content_type, + object_id=self.lead_obj.id, + org=request.profile.org, + ) + for attachment in attachments: + attachment.content_type = account_content_type + attachment.object_id = account_object.id + attachment.save() + + # Copy assigned users + for profile in self.lead_obj.assigned_to.all(): + account_object.assigned_to.add(profile) + + account_object.save() + + # Update lead status + self.lead_obj.status = "converted" + self.lead_obj.save() + + # Create Contact from Lead + contact_obj = None + if self.lead_obj.email: + contact_obj = Contact.objects.create( + first_name=self.lead_obj.first_name or "", + last_name=self.lead_obj.last_name or "", + email=self.lead_obj.email, + phone=self.lead_obj.phone, + organization=( + self.lead_obj.company.name if self.lead_obj.company else "" + ), + title=self.lead_obj.contact_title, + description=self.lead_obj.description, + address_line=self.lead_obj.address_line, + city=self.lead_obj.city, + state=self.lead_obj.state, + postcode=self.lead_obj.postcode, + country=self.lead_obj.country, + created_by=request.profile.user, + org=request.profile.org, + ) + contact_obj.assigned_to.set(self.lead_obj.assigned_to.all()) + + return Response( + { + "error": False, + "message": "Lead Converted to Account Successfully", + "account_id": str(account_object.id), + "contact_id": str(contact_obj.id) if contact_obj else None, + }, + status=status.HTTP_200_OK, + ) + + # Handle regular partial updates + serializer = LeadCreateSerializer( + data=params, + instance=self.lead_obj, + request_obj=request, + partial=True, + ) + if serializer.is_valid(): + lead_obj = serializer.save() + return Response( + {"error": False, "message": "Lead updated Successfully"}, + status=status.HTTP_200_OK, + ) + return Response( + {"error": True, "errors": serializer.errors}, + status=status.HTTP_400_BAD_REQUEST, + ) + + @extend_schema( + tags=["Leads"], + parameters=swagger_params.organization_params, + description="Lead Delete", + ) def delete(self, request, pk, **kwargs): self.object = self.get_object(pk) if ( request.profile.role == "ADMIN" or request.user.is_superuser - or request.profile.user - == self.object.created_by + or request.profile.user == self.object.created_by ) and self.object.org == request.profile.org: self.object.delete() return Response( @@ -564,10 +788,14 @@ class LeadDetailView(APIView): class LeadUploadView(APIView): model = Lead - #authentication_classes = (CustomDualAuthentication,) + # authentication_classes = (CustomDualAuthentication,) permission_classes = (IsAuthenticated,) - @extend_schema(tags=["Leads"], parameters=swagger_params1.organization_params,request=LeadUploadSwaggerSerializer) + @extend_schema( + tags=["Leads"], + parameters=swagger_params.organization_params, + request=LeadUploadSwaggerSerializer, + ) def post(self, request, *args, **kwargs): lead_form = LeadListForm(request.POST, request.FILES) if lead_form.is_valid(): @@ -590,13 +818,17 @@ class LeadUploadView(APIView): class LeadCommentView(APIView): model = Comment - #authentication_classes = (CustomDualAuthentication,) + # authentication_classes = (CustomDualAuthentication,) permission_classes = (IsAuthenticated,) def get_object(self, pk): - return self.model.objects.get(pk=pk) + return self.model.objects.get(pk=pk, org=self.request.profile.org) - @extend_schema(tags=["Leads"], parameters=swagger_params1.organization_params,request=LeadCommentEditSwaggerSerializer) + @extend_schema( + tags=["Leads"], + parameters=swagger_params.organization_params, + request=LeadCommentEditSwaggerSerializer, + ) def put(self, request, pk, format=None): params = request.data obj = self.get_object(pk) @@ -624,7 +856,7 @@ class LeadCommentView(APIView): status=status.HTTP_403_FORBIDDEN, ) - @extend_schema(tags=["Leads"], parameters=swagger_params1.organization_params) + @extend_schema(tags=["Leads"], parameters=swagger_params.organization_params) def delete(self, request, pk, format=None): self.object = self.get_object(pk) if ( @@ -649,10 +881,10 @@ class LeadCommentView(APIView): class LeadAttachmentView(APIView): model = Attachments - #authentication_classes = (CustomDualAuthentication,) + # authentication_classes = (CustomDualAuthentication,) permission_classes = (IsAuthenticated,) - @extend_schema(tags=["Leads"], parameters=swagger_params1.organization_params) + @extend_schema(tags=["Leads"], parameters=swagger_params.organization_params) def delete(self, request, pk, format=None): self.object = self.model.objects.get(pk=pk) if ( @@ -677,7 +909,8 @@ class LeadAttachmentView(APIView): class CreateLeadFromSite(APIView): @extend_schema( tags=["Leads"], - parameters=swagger_params1.organization_params,request=CreateLeadFromSiteSwaggerSerializer + parameters=swagger_params.organization_params, + request=CreateLeadFromSiteSwaggerSerializer, ) def post(self, request, *args, **kwargs): params = request.data @@ -745,29 +978,31 @@ class CompaniesView(APIView): permission_classes = (IsAuthenticated,) - @extend_schema(tags=["Company"],parameters=swagger_params1.organization_params) + @extend_schema(tags=["Company"], parameters=swagger_params.organization_params) def get(self, request, *args, **kwargs): try: - companies=Company.objects.filter(org=request.profile.org) - serializer=CompanySerializer(companies,many=True) + companies = Company.objects.filter(org=request.profile.org) + serializer = CompanySerializer(companies, many=True) return Response( - {"error": False, "data": serializer.data}, - status=status.HTTP_200_OK, - ) + {"error": False, "data": serializer.data}, + status=status.HTTP_200_OK, + ) except: return Response( {"error": True, "message": "Organization is missing"}, status=status.HTTP_400_BAD_REQUEST, ) - @extend_schema( - tags=["Company"],description="Company Create",parameters=swagger_params1.organization_params,request=CompanySwaggerSerializer + tags=["Company"], + description="Company Create", + parameters=swagger_params.organization_params, + request=CompanySwaggerSerializer, ) def post(self, request, *args, **kwargs): - request.data['org'] = request.profile.org.id + request.data["org"] = request.profile.org.id print(request.data) - company=CompanySerializer(data=request.data) + company = CompanySerializer(data=request.data) if Company.objects.filter(**request.data).exists(): return Response( {"error": True, "message": "This data already exists"}, @@ -785,47 +1020,55 @@ class CompaniesView(APIView): status=status.HTTP_400_BAD_REQUEST, ) + class CompanyDetail(APIView): - + permission_classes = (IsAuthenticated,) - def get_object(self, pk): try: - return Company.objects.get( - pk=pk - ) + return Company.objects.get(pk=pk) except Company.DoesNotExist: raise Http404 - @extend_schema(tags=["Company"],parameters=swagger_params1.organization_params) + @extend_schema(tags=["Company"], parameters=swagger_params.organization_params) def get(self, request, pk, format=None): company = self.get_object(pk) serializer = CompanySerializer(company) return Response( - {"error": False, "data": serializer.data}, - status=status.HTTP_200_OK, - ) - @extend_schema(tags=["Company"],description="Company Update",parameters=swagger_params1.organization_params,request=CompanySerializer) + {"error": False, "data": serializer.data}, + status=status.HTTP_200_OK, + ) + + @extend_schema( + tags=["Company"], + description="Company Update", + parameters=swagger_params.organization_params, + request=CompanySerializer, + ) def put(self, request, pk, format=None): company = self.get_object(pk) serializer = CompanySerializer(company, data=request.data) if serializer.is_valid(): serializer.save() return Response( - {"error": False, "data": serializer.data,'message': 'Updated Successfully'}, + { + "error": False, + "data": serializer.data, + "message": "Updated Successfully", + }, status=status.HTTP_200_OK, ) return Response( - {"error": True,'message': serializer.errors}, - status=status.HTTP_400_BAD_REQUEST, - ) - @extend_schema(tags=["Company"],parameters=swagger_params1.organization_params) + {"error": True, "message": serializer.errors}, + status=status.HTTP_400_BAD_REQUEST, + ) + + @extend_schema(tags=["Company"], parameters=swagger_params.organization_params) def delete(self, request, pk, format=None): company = self.get_object(pk) company.delete() return Response( - {"error": False, 'message': 'Deleted successfully'}, - status=status.HTTP_200_OK, - ) - \ No newline at end of file + {"error": False, "message": "Deleted successfully"}, + status=status.HTTP_200_OK, + ) diff --git a/manage.py b/backend/manage.py similarity index 100% rename from manage.py rename to backend/manage.py diff --git a/invoices/__init__.py b/backend/opportunity/__init__.py similarity index 100% rename from invoices/__init__.py rename to backend/opportunity/__init__.py diff --git a/opportunity/admin.py b/backend/opportunity/admin.py similarity index 100% rename from opportunity/admin.py rename to backend/opportunity/admin.py diff --git a/opportunity/apps.py b/backend/opportunity/apps.py similarity index 100% rename from opportunity/apps.py rename to backend/opportunity/apps.py diff --git a/backend/opportunity/migrations/0001_initial.py b/backend/opportunity/migrations/0001_initial.py new file mode 100644 index 00000000..771cc1b8 --- /dev/null +++ b/backend/opportunity/migrations/0001_initial.py @@ -0,0 +1,379 @@ +# Generated by Django 5.2.8 on 2025-11-27 12:17 + +import uuid + +import django.db.models.deletion +from django.conf import settings +from django.db import migrations, models + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ("accounts", "0001_initial"), + ("common", "0001_initial"), + ("contacts", "0001_initial"), + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ] + + operations = [ + migrations.CreateModel( + name="Opportunity", + fields=[ + ( + "created_at", + models.DateTimeField(auto_now_add=True, verbose_name="Created At"), + ), + ( + "updated_at", + models.DateTimeField( + auto_now=True, verbose_name="Last Modified At" + ), + ), + ( + "id", + models.UUIDField( + db_index=True, + default=uuid.uuid4, + editable=False, + primary_key=True, + serialize=False, + unique=True, + ), + ), + ( + "name", + models.CharField(max_length=255, verbose_name="Opportunity Name"), + ), + ( + "stage", + models.CharField( + choices=[ + ("PROSPECTING", "Prospecting"), + ("QUALIFICATION", "Qualification"), + ("PROPOSAL", "Proposal"), + ("NEGOTIATION", "Negotiation"), + ("CLOSED_WON", "Closed Won"), + ("CLOSED_LOST", "Closed Lost"), + ], + default="PROSPECTING", + max_length=64, + verbose_name="Stage", + ), + ), + ( + "opportunity_type", + models.CharField( + blank=True, + choices=[ + ("NEW_BUSINESS", "New Business"), + ("EXISTING_BUSINESS", "Existing Business"), + ("RENEWAL", "Renewal"), + ("UPSELL", "Upsell"), + ("CROSS_SELL", "Cross-sell"), + ], + max_length=64, + null=True, + verbose_name="Type", + ), + ), + ( + "currency", + models.CharField( + blank=True, + choices=[ + ("AED", "AED, Dirham"), + ("AFN", "AFN, Afghani"), + ("ALL", "ALL, Lek"), + ("AMD", "AMD, Dram"), + ("ANG", "ANG, Guilder"), + ("AOA", "AOA, Kwanza"), + ("ARS", "ARS, Peso"), + ("AUD", "AUD, Dollar"), + ("AWG", "AWG, Guilder"), + ("AZN", "AZN, Manat"), + ("BAM", "BAM, Marka"), + ("BBD", "BBD, Dollar"), + ("BDT", "BDT, Taka"), + ("BGN", "BGN, Lev"), + ("BHD", "BHD, Dinar"), + ("BIF", "BIF, Franc"), + ("BMD", "BMD, Dollar"), + ("BND", "BND, Dollar"), + ("BOB", "BOB, Boliviano"), + ("BRL", "BRL, Real"), + ("BSD", "BSD, Dollar"), + ("BTN", "BTN, Ngultrum"), + ("BWP", "BWP, Pula"), + ("BYR", "BYR, Ruble"), + ("BZD", "BZD, Dollar"), + ("CAD", "CAD, Dollar"), + ("CDF", "CDF, Franc"), + ("CHF", "CHF, Franc"), + ("CLP", "CLP, Peso"), + ("CNY", "CNY, Yuan Renminbi"), + ("COP", "COP, Peso"), + ("CRC", "CRC, Colon"), + ("CUP", "CUP, Peso"), + ("CVE", "CVE, Escudo"), + ("CZK", "CZK, Koruna"), + ("DJF", "DJF, Franc"), + ("DKK", "DKK, Krone"), + ("DOP", "DOP, Peso"), + ("DZD", "DZD, Dinar"), + ("EGP", "EGP, Pound"), + ("ERN", "ERN, Nakfa"), + ("ETB", "ETB, Birr"), + ("EUR", "EUR, Euro"), + ("FJD", "FJD, Dollar"), + ("FKP", "FKP, Pound"), + ("GBP", "GBP, Pound"), + ("GEL", "GEL, Lari"), + ("GHS", "GHS, Cedi"), + ("GIP", "GIP, Pound"), + ("GMD", "GMD, Dalasi"), + ("GNF", "GNF, Franc"), + ("GTQ", "GTQ, Quetzal"), + ("GYD", "GYD, Dollar"), + ("HKD", "HKD, Dollar"), + ("HNL", "HNL, Lempira"), + ("HRK", "HRK, Kuna"), + ("HTG", "HTG, Gourde"), + ("HUF", "HUF, Forint"), + ("IDR", "IDR, Rupiah"), + ("ILS", "ILS, Shekel"), + ("INR", "INR, Rupee"), + ("IQD", "IQD, Dinar"), + ("IRR", "IRR, Rial"), + ("ISK", "ISK, Krona"), + ("JMD", "JMD, Dollar"), + ("JOD", "JOD, Dinar"), + ("JPY", "JPY, Yen"), + ("KES", "KES, Shilling"), + ("KGS", "KGS, Som"), + ("KHR", "KHR, Riels"), + ("KMF", "KMF, Franc"), + ("KPW", "KPW, Won"), + ("KRW", "KRW, Won"), + ("KWD", "KWD, Dinar"), + ("KYD", "KYD, Dollar"), + ("KZT", "KZT, Tenge"), + ("LAK", "LAK, Kip"), + ("LBP", "LBP, Pound"), + ("LKR", "LKR, Rupee"), + ("LRD", "LRD, Dollar"), + ("LSL", "LSL, Loti"), + ("LTL", "LTL, Litas"), + ("LVL", "LVL, Lat"), + ("LYD", "LYD, Dinar"), + ("MAD", "MAD, Dirham"), + ("MDL", "MDL, Leu"), + ("MGA", "MGA, Ariary"), + ("MKD", "MKD, Denar"), + ("MMK", "MMK, Kyat"), + ("MNT", "MNT, Tugrik"), + ("MOP", "MOP, Pataca"), + ("MRO", "MRO, Ouguiya"), + ("MUR", "MUR, Rupee"), + ("MVR", "MVR, Rufiyaa"), + ("MWK", "MWK, Kwacha"), + ("MXN", "MXN, Peso"), + ("MYR", "MYR, Ringgit"), + ("MZN", "MZN, Metical"), + ("NAD", "NAD, Dollar"), + ("NGN", "NGN, Naira"), + ("NIO", "NIO, Cordoba"), + ("NOK", "NOK, Krone"), + ("NPR", "NPR, Rupee"), + ("NZD", "NZD, Dollar"), + ("OMR", "OMR, Rial"), + ("PAB", "PAB, Balboa"), + ("PEN", "PEN, Sol"), + ("PGK", "PGK, Kina"), + ("PHP", "PHP, Peso"), + ("PKR", "PKR, Rupee"), + ("PLN", "PLN, Zloty"), + ("PYG", "PYG, Guarani"), + ("QAR", "QAR, Rial"), + ("RON", "RON, Leu"), + ("RSD", "RSD, Dinar"), + ("RUB", "RUB, Ruble"), + ("RWF", "RWF, Franc"), + ("SAR", "SAR, Rial"), + ("SBD", "SBD, Dollar"), + ("SCR", "SCR, Rupee"), + ("SDG", "SDG, Pound"), + ("SEK", "SEK, Krona"), + ("SGD", "SGD, Dollar"), + ("SHP", "SHP, Pound"), + ("SLL", "SLL, Leone"), + ("SOS", "SOS, Shilling"), + ("SRD", "SRD, Dollar"), + ("SSP", "SSP, Pound"), + ("STD", "STD, Dobra"), + ("SYP", "SYP, Pound"), + ("SZL", "SZL, Lilangeni"), + ("THB", "THB, Baht"), + ("TJS", "TJS, Somoni"), + ("TMT", "TMT, Manat"), + ("TND", "TND, Dinar"), + ("TOP", "TOP, Paanga"), + ("TRY", "TRY, Lira"), + ("TTD", "TTD, Dollar"), + ("TWD", "TWD, Dollar"), + ("TZS", "TZS, Shilling"), + ("UAH", "UAH, Hryvnia"), + ("UGX", "UGX, Shilling"), + ("USD", "$, Dollar"), + ("UYU", "UYU, Peso"), + ("UZS", "UZS, Som"), + ("VEF", "VEF, Bolivar"), + ("VND", "VND, Dong"), + ("VUV", "VUV, Vatu"), + ("WST", "WST, Tala"), + ("XAF", "XAF, Franc"), + ("XCD", "XCD, Dollar"), + ("XOF", "XOF, Franc"), + ("XPF", "XPF, Franc"), + ("YER", "YER, Rial"), + ("ZAR", "ZAR, Rand"), + ("ZMK", "ZMK, Kwacha"), + ("ZWL", "ZWL, Dollar"), + ], + max_length=3, + null=True, + verbose_name="Currency", + ), + ), + ( + "amount", + models.DecimalField( + blank=True, + decimal_places=2, + max_digits=12, + null=True, + verbose_name="Amount", + ), + ), + ( + "probability", + models.IntegerField( + blank=True, default=0, null=True, verbose_name="Probability (%)" + ), + ), + ( + "closed_on", + models.DateField( + blank=True, null=True, verbose_name="Expected Close Date" + ), + ), + ( + "lead_source", + models.CharField( + blank=True, + choices=[ + ("NONE", "NONE"), + ("CALL", "CALL"), + ("EMAIL", " EMAIL"), + ("EXISTING CUSTOMER", "EXISTING CUSTOMER"), + ("PARTNER", "PARTNER"), + ("PUBLIC RELATIONS", "PUBLIC RELATIONS"), + ("CAMPAIGN", "CAMPAIGN"), + ("WEBSITE", "WEBSITE"), + ("OTHER", "OTHER"), + ], + max_length=255, + null=True, + verbose_name="Lead Source", + ), + ), + ( + "description", + models.TextField(blank=True, null=True, verbose_name="Notes"), + ), + ("is_active", models.BooleanField(default=True)), + ( + "account", + models.ForeignKey( + blank=True, + null=True, + on_delete=django.db.models.deletion.CASCADE, + related_name="opportunities", + to="accounts.account", + ), + ), + ( + "assigned_to", + models.ManyToManyField( + related_name="opportunity_assigned_to", to="common.profile" + ), + ), + ( + "closed_by", + models.ForeignKey( + blank=True, + null=True, + on_delete=django.db.models.deletion.SET_NULL, + related_name="opportunity_closed_by", + to="common.profile", + ), + ), + ( + "contacts", + models.ManyToManyField( + related_name="opportunity_contacts", to="contacts.contact" + ), + ), + ( + "created_by", + models.ForeignKey( + null=True, + on_delete=django.db.models.deletion.SET_NULL, + related_name="%(class)s_created_by", + to=settings.AUTH_USER_MODEL, + verbose_name="Created By", + ), + ), + ( + "org", + models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, + related_name="opportunities", + to="common.org", + ), + ), + ("tags", models.ManyToManyField(blank=True, to="common.tags")), + ( + "teams", + models.ManyToManyField( + related_name="opportunity_teams", to="common.teams" + ), + ), + ( + "updated_by", + models.ForeignKey( + null=True, + on_delete=django.db.models.deletion.SET_NULL, + related_name="%(class)s_updated_by", + to=settings.AUTH_USER_MODEL, + verbose_name="Last Modified By", + ), + ), + ], + options={ + "verbose_name": "Opportunity", + "verbose_name_plural": "Opportunities", + "db_table": "opportunity", + "ordering": ("-created_at",), + "indexes": [ + models.Index(fields=["stage"], name="opportunity_stage_39fb59_idx"), + models.Index( + fields=["org", "-created_at"], + name="opportunity_org_id_945a7b_idx", + ), + ], + }, + ), + ] diff --git a/invoices/migrations/__init__.py b/backend/opportunity/migrations/__init__.py similarity index 100% rename from invoices/migrations/__init__.py rename to backend/opportunity/migrations/__init__.py diff --git a/backend/opportunity/models.py b/backend/opportunity/models.py new file mode 100644 index 00000000..9fda29ba --- /dev/null +++ b/backend/opportunity/models.py @@ -0,0 +1,97 @@ +import arrow +from django.db import models +from django.utils.translation import gettext_lazy as _ +from django.utils.translation import pgettext_lazy + +from accounts.models import Account +from common.base import AssignableMixin, BaseModel +from common.models import Org, Profile, Tags, Teams +from common.utils import CURRENCY_CODES, OPPORTUNITY_TYPES, SOURCES, STAGES +from contacts.models import Contact + + +class Opportunity(AssignableMixin, BaseModel): + """ + Opportunity model for CRM - Sales pipeline management + Based on Twenty CRM and Salesforce patterns + """ + + # Core Opportunity Information + name = models.CharField(_("Opportunity Name"), max_length=255) + account = models.ForeignKey( + Account, + related_name="opportunities", + on_delete=models.CASCADE, + blank=True, + null=True, + ) + stage = models.CharField( + _("Stage"), max_length=64, choices=STAGES, default="PROSPECTING" + ) + opportunity_type = models.CharField( + _("Type"), max_length=64, choices=OPPORTUNITY_TYPES, blank=True, null=True + ) + + # Financial Information + currency = models.CharField( + _("Currency"), max_length=3, choices=CURRENCY_CODES, blank=True, null=True + ) + amount = models.DecimalField( + _("Amount"), decimal_places=2, max_digits=12, blank=True, null=True + ) + probability = models.IntegerField( + _("Probability (%)"), default=0, blank=True, null=True + ) + closed_on = models.DateField(_("Expected Close Date"), blank=True, null=True) + + # Source & Context + lead_source = models.CharField( + _("Lead Source"), max_length=255, choices=SOURCES, blank=True, null=True + ) + + # Relationships + contacts = models.ManyToManyField(Contact, related_name="opportunity_contacts") + + # Assignment + assigned_to = models.ManyToManyField( + Profile, related_name="opportunity_assigned_to" + ) + teams = models.ManyToManyField(Teams, related_name="opportunity_teams") + closed_by = models.ForeignKey( + Profile, + on_delete=models.SET_NULL, + null=True, + blank=True, + related_name="opportunity_closed_by", + ) + + # Tags + tags = models.ManyToManyField(Tags, blank=True) + + # Notes + description = models.TextField(_("Notes"), blank=True, null=True) + + # System Fields + is_active = models.BooleanField(default=True) + org = models.ForeignKey( + Org, + on_delete=models.CASCADE, + related_name="opportunities", + ) + + class Meta: + verbose_name = "Opportunity" + verbose_name_plural = "Opportunities" + db_table = "opportunity" + ordering = ("-created_at",) + indexes = [ + models.Index(fields=["stage"]), + models.Index(fields=["org", "-created_at"]), + ] + + def __str__(self): + return f"{self.name}" + + @property + def created_on_arrow(self): + return arrow.get(self.created_at).humanize() diff --git a/opportunity/serializer.py b/backend/opportunity/serializer.py similarity index 67% rename from opportunity/serializer.py rename to backend/opportunity/serializer.py index 436b3f31..a465d2c7 100644 --- a/opportunity/serializer.py +++ b/backend/opportunity/serializer.py @@ -1,11 +1,16 @@ from rest_framework import serializers -from accounts.models import Tags from accounts.serializer import AccountSerializer -from common.serializer import AttachmentsSerializer, ProfileSerializer,UserSerializer +from common.models import Tags +from common.serializer import ( + AttachmentsSerializer, + OrganizationSerializer, + ProfileSerializer, + TeamsSerializer, + UserSerializer, +) from contacts.serializer import ContactSerializer from opportunity.models import Opportunity -from teams.serializer import TeamsSerializer class TagsSerializer(serializers.ModelSerializer): @@ -15,53 +20,74 @@ class TagsSerializer(serializers.ModelSerializer): class OpportunitySerializer(serializers.ModelSerializer): + """Serializer for reading Opportunity data""" + account = AccountSerializer() closed_by = ProfileSerializer() created_by = UserSerializer() + org = OrganizationSerializer() tags = TagsSerializer(read_only=True, many=True) assigned_to = ProfileSerializer(read_only=True, many=True) contacts = ContactSerializer(read_only=True, many=True) teams = TeamsSerializer(read_only=True, many=True) opportunity_attachment = AttachmentsSerializer(read_only=True, many=True) + get_team_users = ProfileSerializer(read_only=True, many=True) + get_team_and_assigned_users = ProfileSerializer(read_only=True, many=True) + get_assigned_users_not_in_teams = ProfileSerializer(read_only=True, many=True) class Meta: model = Opportunity - # fields = ‘__all__’ fields = ( "id", + # Core Opportunity Information "name", + "account", "stage", + "opportunity_type", + # Financial Information "currency", "amount", - "lead_source", "probability", - "contacts", - "closed_by", "closed_on", - "description", + # Source & Context + "lead_source", + # Relationships + "contacts", + # Assignment "assigned_to", + "teams", + "closed_by", + # Tags + "tags", + # Notes + "description", + # Related + "opportunity_attachment", + # System "created_by", "created_at", "is_active", - "tags", - "opportunity_attachment", - "teams", + "org", "created_on_arrow", - "account", - # "get_team_users", - # "get_team_and_assigned_users", - # "get_assigned_users_not_in_teams", + "get_team_users", + "get_team_and_assigned_users", + "get_assigned_users_not_in_teams", ) class OpportunityCreateSerializer(serializers.ModelSerializer): - probability = serializers.IntegerField(max_value=100) - closed_on = serializers.DateField + """Serializer for creating/updating Opportunity data""" + + probability = serializers.IntegerField( + max_value=100, required=False, allow_null=True + ) + closed_on = serializers.DateField(required=False, allow_null=True) def __init__(self, *args, **kwargs): request_obj = kwargs.pop("request_obj", None) super().__init__(*args, **kwargs) - self.org = request_obj.profile.org + if request_obj: + self.org = request_obj.profile.org def validate_name(self, name): if self.instance: @@ -73,7 +99,6 @@ class OpportunityCreateSerializer(serializers.ModelSerializer): raise serializers.ValidationError( "Opportunity already exists with this name" ) - else: if Opportunity.objects.filter(name__iexact=name, org=self.org).exists(): raise serializers.ValidationError( @@ -84,50 +109,52 @@ class OpportunityCreateSerializer(serializers.ModelSerializer): class Meta: model = Opportunity fields = ( + # Core Opportunity Information "name", "account", "stage", + "opportunity_type", + # Financial Information "currency", "amount", - "lead_source", "probability", "closed_on", + # Source & Context + "lead_source", + # Notes "description", - "created_by", - "created_at", - "is_active", - "created_on_arrow", - "org" - # "get_team_users", - # "get_team_and_assigned_users", - # "get_assigned_users_not_in_teams", ) + class OpportunityCreateSwaggerSerializer(serializers.ModelSerializer): - due_date = serializers.DateField() + closed_on = serializers.DateField() opportunity_attachment = serializers.FileField() + class Meta: model = Opportunity fields = ( "name", "account", + "stage", + "opportunity_type", "amount", "currency", - "stage", - "teams", - "lead_source", "probability", + "closed_on", + "lead_source", "description", "assigned_to", "contacts", - "due_date", + "teams", "tags", - "opportunity_attachment" + "opportunity_attachment", ) + class OpportunityDetailEditSwaggerSerializer(serializers.Serializer): comment = serializers.CharField() opportunity_attachment = serializers.FileField() + class OpportunityCommentEditSwaggerSerializer(serializers.Serializer): comment = serializers.CharField() diff --git a/opportunity/swagger_params1.py b/backend/opportunity/swagger_params.py similarity index 55% rename from opportunity/swagger_params1.py rename to backend/opportunity/swagger_params.py index 929658cb..c50b67a7 100644 --- a/opportunity/swagger_params1.py +++ b/backend/opportunity/swagger_params.py @@ -12,11 +12,11 @@ organization_params = [ opportunity_list_get_params = [ organization_params_in_header, - OpenApiParameter("name", OpenApiTypes.STR,OpenApiParameter.QUERY), - OpenApiParameter("account", OpenApiTypes.STR,OpenApiParameter.QUERY), - OpenApiParameter("stage", OpenApiTypes.STR,OpenApiParameter.QUERY), - OpenApiParameter("lead_source", OpenApiTypes.STR,OpenApiParameter.QUERY), - OpenApiParameter("tags", OpenApiTypes.STR,OpenApiParameter.QUERY), + OpenApiParameter("name", OpenApiTypes.STR, OpenApiParameter.QUERY), + OpenApiParameter("account", OpenApiTypes.STR, OpenApiParameter.QUERY), + OpenApiParameter("stage", OpenApiTypes.STR, OpenApiParameter.QUERY), + OpenApiParameter("lead_source", OpenApiTypes.STR, OpenApiParameter.QUERY), + OpenApiParameter("tags", OpenApiTypes.STR, OpenApiParameter.QUERY), ] opportunity_detail_get_params = [ @@ -26,10 +26,10 @@ opportunity_detail_get_params = [ OpenApiParameter.QUERY, OpenApiTypes.BINARY, ), - OpenApiParameter("comment", OpenApiTypes.STR,OpenApiParameter.QUERY), + OpenApiParameter("comment", OpenApiTypes.STR, OpenApiParameter.QUERY), ] opportunity_comment_edit_params = [ organization_params_in_header, - OpenApiParameter("comment", OpenApiTypes.STR,OpenApiParameter.QUERY), + OpenApiParameter("comment", OpenApiTypes.STR, OpenApiParameter.QUERY), ] diff --git a/opportunity/tasks.py b/backend/opportunity/tasks.py similarity index 100% rename from opportunity/tasks.py rename to backend/opportunity/tasks.py diff --git a/opportunity/tests_celery_tasks.py b/backend/opportunity/tests_celery_tasks.py similarity index 100% rename from opportunity/tests_celery_tasks.py rename to backend/opportunity/tests_celery_tasks.py diff --git a/opportunity/urls.py b/backend/opportunity/urls.py similarity index 100% rename from opportunity/urls.py rename to backend/opportunity/urls.py diff --git a/opportunity/views.py b/backend/opportunity/views.py similarity index 83% rename from opportunity/views.py rename to backend/opportunity/views.py index 63ee66eb..b0e98b2e 100644 --- a/opportunity/views.py +++ b/backend/opportunity/views.py @@ -1,5 +1,6 @@ import json +from django.contrib.contenttypes.models import ContentType from django.db.models import Q from drf_spectacular.utils import OpenApiExample, OpenApiParameter, extend_schema from rest_framework import status @@ -8,11 +9,11 @@ from rest_framework.permissions import IsAuthenticated from rest_framework.response import Response from rest_framework.views import APIView -from accounts.models import Account, Tags +from accounts.models import Account from accounts.serializer import AccountSerializer, TagsSerailizer -from common.models import Attachments, Comment, Profile +from common.models import Attachments, Comment, Profile, Tags, Teams -#from common.external_auth import CustomDualAuthentication +# from common.external_auth import CustomDualAuthentication from common.serializer import ( AttachmentsSerializer, CommentSerializer, @@ -21,33 +22,37 @@ from common.serializer import ( from common.utils import CURRENCY_CODES, SOURCES, STAGES from contacts.models import Contact from contacts.serializer import ContactSerializer -from opportunity import swagger_params1 +from opportunity import swagger_params from opportunity.models import Opportunity from opportunity.serializer import * from opportunity.tasks import send_email_to_assigned_user -from teams.models import Teams class OpportunityListView(APIView, LimitOffsetPagination): - #authentication_classes = (CustomDualAuthentication,) + # authentication_classes = (CustomDualAuthentication,) permission_classes = (IsAuthenticated,) model = Opportunity def get_context_data(self, **kwargs): params = self.request.query_params - queryset = self.model.objects.filter(org=self.request.profile.org).order_by("-id") + queryset = self.model.objects.filter(org=self.request.profile.org).order_by( + "-id" + ) accounts = Account.objects.filter(org=self.request.profile.org) contacts = Contact.objects.filter(org=self.request.profile.org) if self.request.profile.role != "ADMIN" and not self.request.user.is_superuser: queryset = queryset.filter( - Q(created_by=self.request.profile.user) | Q(assigned_to=self.request.profile) + Q(created_by=self.request.profile.user) + | Q(assigned_to=self.request.profile) ).distinct() accounts = accounts.filter( - Q(created_by=self.request.profile.user) | Q(assigned_to=self.request.profile) + Q(created_by=self.request.profile.user) + | Q(assigned_to=self.request.profile) ).distinct() contacts = contacts.filter( - Q(created_by=self.request.profile.user) | Q(assigned_to=self.request.profile) + Q(created_by=self.request.profile.user) + | Q(assigned_to=self.request.profile) ).distinct() if params: @@ -62,9 +67,7 @@ class OpportunityListView(APIView, LimitOffsetPagination): lead_source__contains=params.get("lead_source") ) if params.get("tags"): - queryset = queryset.filter( - tags__in=params.get("tags") - ).distinct() + queryset = queryset.filter(tags__in=params.get("tags")).distinct() context = {} results_opportunities = self.paginate_queryset( @@ -89,7 +92,9 @@ class OpportunityListView(APIView, LimitOffsetPagination): context["opportunities"] = opportunities context["accounts_list"] = AccountSerializer(accounts, many=True).data context["contacts_list"] = ContactSerializer(contacts, many=True).data - context["tags"] = TagsSerailizer(Tags.objects.filter(), many=True).data + context["tags"] = TagsSerailizer( + Tags.objects.filter(org=self.request.profile.org), many=True + ).data context["stage"] = STAGES context["lead_source"] = SOURCES context["currency"] = CURRENCY_CODES @@ -98,7 +103,7 @@ class OpportunityListView(APIView, LimitOffsetPagination): @extend_schema( tags=["Opportunities"], - parameters=swagger_params1.opportunity_list_get_params, + parameters=swagger_params.opportunity_list_get_params, ) def get(self, request, *args, **kwargs): context = self.get_context_data(**kwargs) @@ -106,7 +111,8 @@ class OpportunityListView(APIView, LimitOffsetPagination): @extend_schema( tags=["Opportunities"], - parameters=swagger_params1.organization_params,request=OpportunityCreateSwaggerSerializer + parameters=swagger_params.organization_params, + request=OpportunityCreateSwaggerSerializer, ) def post(self, request, *args, **kwargs): params = request.data @@ -120,7 +126,9 @@ class OpportunityListView(APIView, LimitOffsetPagination): if params.get("contacts"): contacts_list = params.get("contacts") - contacts = Contact.objects.filter(id__in=contacts_list, org=request.profile.org) + contacts = Contact.objects.filter( + id__in=contacts_list, org=request.profile.org + ) opportunity_obj.contacts.add(*contacts) if params.get("tags"): @@ -180,16 +188,17 @@ class OpportunityListView(APIView, LimitOffsetPagination): class OpportunityDetailView(APIView): - #authentication_classes = (CustomDualAuthentication,) + # authentication_classes = (CustomDualAuthentication,) permission_classes = (IsAuthenticated,) model = Opportunity def get_object(self, pk): - return self.model.objects.filter(id=pk).first() + return self.model.objects.filter(id=pk, org=self.request.profile.org).first() @extend_schema( tags=["Opportunities"], - parameters=swagger_params1.organization_params,request=OpportunityCreateSwaggerSerializer + parameters=swagger_params.organization_params, + request=OpportunityCreateSwaggerSerializer, ) def put(self, request, pk, format=None): params = request.data @@ -227,7 +236,9 @@ class OpportunityDetailView(APIView): opportunity_object.contacts.clear() if params.get("contacts"): contacts_list = params.get("contacts") - contacts = Contact.objects.filter(id__in=contacts_list, org=request.profile.org) + contacts = Contact.objects.filter( + id__in=contacts_list, org=request.profile.org + ) opportunity_object.contacts.add(*contacts) opportunity_object.tags.clear() @@ -288,7 +299,7 @@ class OpportunityDetailView(APIView): ) @extend_schema( - tags=["Opportunities"], parameters=swagger_params1.organization_params + tags=["Opportunities"], parameters=swagger_params.organization_params ) def delete(self, request, pk, format=None): self.object = self.get_object(pk) @@ -313,7 +324,7 @@ class OpportunityDetailView(APIView): ) @extend_schema( - tags=["Opportunities"], parameters=swagger_params1.organization_params + tags=["Opportunities"], parameters=swagger_params.organization_params ) def get(self, request, pk, format=None): self.opportunity = self.get_object(pk=pk) @@ -348,28 +359,33 @@ class OpportunityDetailView(APIView): if self.request.user.is_superuser or self.request.profile.role == "ADMIN": users_mention = list( - Profile.objects.filter(is_active=True, org=self.request.profile.org).values( - "user__email" - ) + Profile.objects.filter( + is_active=True, org=self.request.profile.org + ).values("user__email") ) elif self.request.profile != self.opportunity.created_by: if self.opportunity.created_by: - users_mention = [ - {"username": self.opportunity.created_by.user.email} - ] + users_mention = [{"username": self.opportunity.created_by.user.email}] else: users_mention = [] else: users_mention = [] + opportunity_content_type = ContentType.objects.get_for_model(Opportunity) + comments = Comment.objects.filter( + content_type=opportunity_content_type, + object_id=self.opportunity.id, + org=self.request.profile.org, + ).order_by("-id") + attachments = Attachments.objects.filter( + content_type=opportunity_content_type, + object_id=self.opportunity.id, + org=self.request.profile.org, + ).order_by("-id") context.update( { - "comments": CommentSerializer( - self.opportunity.opportunity_comments.all(), many=True - ).data, - "attachments": AttachmentsSerializer( - self.opportunity.opportunity_attachment.all(), many=True - ).data, + "comments": CommentSerializer(comments, many=True).data, + "attachments": AttachmentsSerializer(attachments, many=True).data, "contacts": ContactSerializer( self.opportunity.contacts.all(), many=True ).data, @@ -390,12 +406,13 @@ class OpportunityDetailView(APIView): @extend_schema( tags=["Opportunities"], - parameters=swagger_params1.organization_params,request=OpportunityDetailEditSwaggerSerializer + parameters=swagger_params.organization_params, + request=OpportunityDetailEditSwaggerSerializer, ) def post(self, request, pk, **kwargs): params = request.data context = {} - self.opportunity_obj = Opportunity.objects.get(pk=pk) + self.opportunity_obj = Opportunity.objects.get(pk=pk, org=request.profile.org) if self.opportunity_obj.org != request.profile.org: return Response( {"error": True, "errors": "User company doesnot match with header...."}, @@ -431,11 +448,16 @@ class OpportunityDetailView(APIView): attachment.attachment = self.request.FILES.get("opportunity_attachment") attachment.save() - comments = Comment.objects.filter(opportunity=self.opportunity_obj).order_by( - "-id" - ) + opportunity_content_type = ContentType.objects.get_for_model(Opportunity) + comments = Comment.objects.filter( + content_type=opportunity_content_type, + object_id=self.opportunity_obj.id, + org=request.profile.org, + ).order_by("-id") attachments = Attachments.objects.filter( - opportunity=self.opportunity_obj + content_type=opportunity_content_type, + object_id=self.opportunity_obj.id, + org=request.profile.org, ).order_by("-id") context.update( { @@ -449,15 +471,16 @@ class OpportunityDetailView(APIView): class OpportunityCommentView(APIView): model = Comment - #authentication_classes = (CustomDualAuthentication,) + # authentication_classes = (CustomDualAuthentication,) permission_classes = (IsAuthenticated,) def get_object(self, pk): - return self.model.objects.get(pk=pk) + return self.model.objects.get(pk=pk, org=self.request.profile.org) @extend_schema( tags=["Opportunities"], - parameters=swagger_params1.organization_params,request=OpportunityCommentEditSwaggerSerializer + parameters=swagger_params.organization_params, + request=OpportunityCommentEditSwaggerSerializer, ) def put(self, request, pk, format=None): params = request.data @@ -488,7 +511,7 @@ class OpportunityCommentView(APIView): ) @extend_schema( - tags=["Opportunities"], parameters=swagger_params1.organization_params + tags=["Opportunities"], parameters=swagger_params.organization_params ) def delete(self, request, pk, format=None): self.object = self.get_object(pk) @@ -513,11 +536,11 @@ class OpportunityCommentView(APIView): class OpportunityAttachmentView(APIView): model = Attachments - #authentication_classes = (CustomDualAuthentication,) + # authentication_classes = (CustomDualAuthentication,) permission_classes = (IsAuthenticated,) @extend_schema( - tags=["Opportunities"], parameters=swagger_params1.organization_params + tags=["Opportunities"], parameters=swagger_params.organization_params ) def delete(self, request, pk, format=None): self.object = self.model.objects.get(pk=pk) diff --git a/pytest.ini b/backend/pytest.ini similarity index 100% rename from pytest.ini rename to backend/pytest.ini diff --git a/backend/requirements.txt b/backend/requirements.txt new file mode 100644 index 00000000..298c21a3 --- /dev/null +++ b/backend/requirements.txt @@ -0,0 +1,18 @@ +django==5.2.8 +celery==5.5.3 +python-dotenv==1.0.0 +django-cors-headers==4.6.0 +djangorestframework==3.16.0 +djangorestframework-simplejwt==5.5.0 +drf-spectacular==0.28.0 +django-ses==4.3.1 +psycopg2-binary==2.9.11 +whitenoise==6.8.2 +sentry-sdk==2.19.2 +django_extensions==3.2.3 +django_storages==1.14.4 + +django-crum==0.7.9 +Redis==5.2.1 +django-phonenumber-field==8.0.0 +arrow==1.3.0 diff --git a/setup.py b/backend/setup.py similarity index 100% rename from setup.py rename to backend/setup.py diff --git a/leads/__init__.py b/backend/static/.gitkeep similarity index 100% rename from leads/__init__.py rename to backend/static/.gitkeep diff --git a/leads/migrations/__init__.py b/backend/tasks/__init__.py similarity index 100% rename from leads/migrations/__init__.py rename to backend/tasks/__init__.py diff --git a/backend/tasks/admin.py b/backend/tasks/admin.py new file mode 100644 index 00000000..98a0839c --- /dev/null +++ b/backend/tasks/admin.py @@ -0,0 +1,52 @@ +from django.contrib import admin + +from tasks.models import Board, BoardColumn, BoardMember, BoardTask, Task + +# Register Task model +admin.site.register(Task) + + +# ============================================================================= +# Kanban Board Admin (merged from boards app) +# ============================================================================= + + +@admin.register(Board) +class BoardAdmin(admin.ModelAdmin): + list_display = ("name", "owner", "org", "is_archived", "created_at") + list_filter = ("is_archived", "org", "created_at") + search_fields = ("name", "owner__user__email") + raw_id_fields = ("owner", "org") + + +@admin.register(BoardMember) +class BoardMemberAdmin(admin.ModelAdmin): + list_display = ("board", "profile", "role", "created_at") + list_filter = ("role", "created_at") + search_fields = ("board__name", "profile__user__email") + raw_id_fields = ("board", "profile") + + +@admin.register(BoardColumn) +class BoardColumnAdmin(admin.ModelAdmin): + list_display = ("board", "name", "order", "color", "limit") + list_filter = ("board__org", "created_at") + search_fields = ("name", "board__name") + raw_id_fields = ("board",) + ordering = ("board", "order") + + +@admin.register(BoardTask) +class BoardTaskAdmin(admin.ModelAdmin): + list_display = ( + "title", + "column", + "priority", + "due_date", + "is_completed", + "created_at", + ) + list_filter = ("priority", "completed_at", "created_at") + search_fields = ("title", "description") + raw_id_fields = ("column", "account", "contact", "opportunity") + filter_horizontal = ("assigned_to",) diff --git a/tasks/apps.py b/backend/tasks/apps.py similarity index 100% rename from tasks/apps.py rename to backend/tasks/apps.py diff --git a/tasks/celery_tasks.py b/backend/tasks/celery_tasks.py similarity index 100% rename from tasks/celery_tasks.py rename to backend/tasks/celery_tasks.py diff --git a/backend/tasks/migrations/0001_initial.py b/backend/tasks/migrations/0001_initial.py new file mode 100644 index 00000000..81da08da --- /dev/null +++ b/backend/tasks/migrations/0001_initial.py @@ -0,0 +1,548 @@ +# Generated by Django 5.2.8 on 2025-11-27 12:17 + +import uuid + +import django.db.models.deletion +from django.conf import settings +from django.db import migrations, models + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ("accounts", "0001_initial"), + ("common", "0001_initial"), + ("contacts", "0001_initial"), + ("opportunity", "0001_initial"), + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ] + + operations = [ + migrations.CreateModel( + name="Board", + fields=[ + ( + "created_at", + models.DateTimeField(auto_now_add=True, verbose_name="Created At"), + ), + ( + "updated_at", + models.DateTimeField( + auto_now=True, verbose_name="Last Modified At" + ), + ), + ( + "id", + models.UUIDField( + db_index=True, + default=uuid.uuid4, + editable=False, + primary_key=True, + serialize=False, + unique=True, + ), + ), + ("name", models.CharField(max_length=255)), + ("description", models.TextField(blank=True, null=True)), + ("is_archived", models.BooleanField(default=False)), + ( + "created_by", + models.ForeignKey( + null=True, + on_delete=django.db.models.deletion.SET_NULL, + related_name="%(class)s_created_by", + to=settings.AUTH_USER_MODEL, + verbose_name="Created By", + ), + ), + ( + "org", + models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, + related_name="boards", + to="common.org", + ), + ), + ( + "owner", + models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, + related_name="owned_boards", + to="common.profile", + ), + ), + ( + "updated_by", + models.ForeignKey( + null=True, + on_delete=django.db.models.deletion.SET_NULL, + related_name="%(class)s_updated_by", + to=settings.AUTH_USER_MODEL, + verbose_name="Last Modified By", + ), + ), + ], + options={ + "verbose_name": "Board", + "verbose_name_plural": "Boards", + "db_table": "board", + "ordering": ("-created_at",), + }, + ), + migrations.CreateModel( + name="BoardColumn", + fields=[ + ( + "created_at", + models.DateTimeField(auto_now_add=True, verbose_name="Created At"), + ), + ( + "updated_at", + models.DateTimeField( + auto_now=True, verbose_name="Last Modified At" + ), + ), + ( + "id", + models.UUIDField( + db_index=True, + default=uuid.uuid4, + editable=False, + primary_key=True, + serialize=False, + unique=True, + ), + ), + ("name", models.CharField(max_length=100)), + ("order", models.PositiveIntegerField(default=0)), + ("color", models.CharField(default="#6B7280", max_length=7)), + ("limit", models.PositiveIntegerField(blank=True, null=True)), + ( + "board", + models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, + related_name="columns", + to="tasks.board", + ), + ), + ( + "created_by", + models.ForeignKey( + null=True, + on_delete=django.db.models.deletion.SET_NULL, + related_name="%(class)s_created_by", + to=settings.AUTH_USER_MODEL, + verbose_name="Created By", + ), + ), + ( + "org", + models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, + related_name="board_columns", + to="common.org", + ), + ), + ( + "updated_by", + models.ForeignKey( + null=True, + on_delete=django.db.models.deletion.SET_NULL, + related_name="%(class)s_updated_by", + to=settings.AUTH_USER_MODEL, + verbose_name="Last Modified By", + ), + ), + ], + options={ + "verbose_name": "Board Column", + "verbose_name_plural": "Board Columns", + "db_table": "board_column", + "ordering": ("order",), + }, + ), + migrations.CreateModel( + name="BoardMember", + fields=[ + ( + "created_at", + models.DateTimeField(auto_now_add=True, verbose_name="Created At"), + ), + ( + "updated_at", + models.DateTimeField( + auto_now=True, verbose_name="Last Modified At" + ), + ), + ( + "id", + models.UUIDField( + db_index=True, + default=uuid.uuid4, + editable=False, + primary_key=True, + serialize=False, + unique=True, + ), + ), + ( + "role", + models.CharField( + choices=[ + ("owner", "Owner"), + ("admin", "Admin"), + ("member", "Member"), + ], + default="member", + max_length=20, + ), + ), + ( + "board", + models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, + related_name="memberships", + to="tasks.board", + ), + ), + ( + "created_by", + models.ForeignKey( + null=True, + on_delete=django.db.models.deletion.SET_NULL, + related_name="%(class)s_created_by", + to=settings.AUTH_USER_MODEL, + verbose_name="Created By", + ), + ), + ( + "org", + models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, + related_name="board_members", + to="common.org", + ), + ), + ( + "profile", + models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, + related_name="board_memberships", + to="common.profile", + ), + ), + ( + "updated_by", + models.ForeignKey( + null=True, + on_delete=django.db.models.deletion.SET_NULL, + related_name="%(class)s_updated_by", + to=settings.AUTH_USER_MODEL, + verbose_name="Last Modified By", + ), + ), + ], + options={ + "verbose_name": "Board Member", + "verbose_name_plural": "Board Members", + "db_table": "board_member", + }, + ), + migrations.AddField( + model_name="board", + name="members", + field=models.ManyToManyField( + related_name="boards", through="tasks.BoardMember", to="common.profile" + ), + ), + migrations.CreateModel( + name="BoardTask", + fields=[ + ( + "created_at", + models.DateTimeField(auto_now_add=True, verbose_name="Created At"), + ), + ( + "updated_at", + models.DateTimeField( + auto_now=True, verbose_name="Last Modified At" + ), + ), + ( + "id", + models.UUIDField( + db_index=True, + default=uuid.uuid4, + editable=False, + primary_key=True, + serialize=False, + unique=True, + ), + ), + ("title", models.CharField(max_length=255)), + ("description", models.TextField(blank=True, null=True)), + ("order", models.PositiveIntegerField(default=0)), + ( + "priority", + models.CharField( + choices=[ + ("low", "Low"), + ("medium", "Medium"), + ("high", "High"), + ("urgent", "Urgent"), + ], + default="medium", + max_length=10, + ), + ), + ("due_date", models.DateTimeField(blank=True, null=True)), + ("completed_at", models.DateTimeField(blank=True, null=True)), + ( + "account", + models.ForeignKey( + blank=True, + null=True, + on_delete=django.db.models.deletion.SET_NULL, + related_name="board_tasks", + to="accounts.account", + ), + ), + ( + "assigned_to", + models.ManyToManyField( + blank=True, + related_name="assigned_board_tasks", + to="common.profile", + ), + ), + ( + "column", + models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, + related_name="tasks", + to="tasks.boardcolumn", + ), + ), + ( + "contact", + models.ForeignKey( + blank=True, + null=True, + on_delete=django.db.models.deletion.SET_NULL, + related_name="board_tasks", + to="contacts.contact", + ), + ), + ( + "created_by", + models.ForeignKey( + null=True, + on_delete=django.db.models.deletion.SET_NULL, + related_name="%(class)s_created_by", + to=settings.AUTH_USER_MODEL, + verbose_name="Created By", + ), + ), + ( + "opportunity", + models.ForeignKey( + blank=True, + null=True, + on_delete=django.db.models.deletion.SET_NULL, + related_name="board_tasks", + to="opportunity.opportunity", + ), + ), + ( + "org", + models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, + related_name="board_tasks", + to="common.org", + ), + ), + ( + "updated_by", + models.ForeignKey( + null=True, + on_delete=django.db.models.deletion.SET_NULL, + related_name="%(class)s_updated_by", + to=settings.AUTH_USER_MODEL, + verbose_name="Last Modified By", + ), + ), + ], + options={ + "verbose_name": "Board Task", + "verbose_name_plural": "Board Tasks", + "db_table": "board_task", + "ordering": ("order",), + }, + ), + migrations.CreateModel( + name="Task", + fields=[ + ( + "created_at", + models.DateTimeField(auto_now_add=True, verbose_name="Created At"), + ), + ( + "updated_at", + models.DateTimeField( + auto_now=True, verbose_name="Last Modified At" + ), + ), + ( + "id", + models.UUIDField( + db_index=True, + default=uuid.uuid4, + editable=False, + primary_key=True, + serialize=False, + unique=True, + ), + ), + ("title", models.CharField(max_length=200, verbose_name="title")), + ( + "status", + models.CharField( + choices=[ + ("New", "New"), + ("In Progress", "In Progress"), + ("Completed", "Completed"), + ], + max_length=50, + verbose_name="status", + ), + ), + ( + "priority", + models.CharField( + choices=[ + ("Low", "Low"), + ("Medium", "Medium"), + ("High", "High"), + ], + max_length=50, + verbose_name="priority", + ), + ), + ("due_date", models.DateField(blank=True, null=True)), + ( + "description", + models.TextField(blank=True, null=True, verbose_name="Notes"), + ), + ( + "account", + models.ForeignKey( + blank=True, + null=True, + on_delete=django.db.models.deletion.SET_NULL, + related_name="accounts_tasks", + to="accounts.account", + ), + ), + ( + "assigned_to", + models.ManyToManyField( + related_name="users_tasks", to="common.profile" + ), + ), + ( + "contacts", + models.ManyToManyField( + related_name="contacts_tasks", to="contacts.contact" + ), + ), + ( + "created_by", + models.ForeignKey( + null=True, + on_delete=django.db.models.deletion.SET_NULL, + related_name="%(class)s_created_by", + to=settings.AUTH_USER_MODEL, + verbose_name="Created By", + ), + ), + ( + "org", + models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, + related_name="tasks", + to="common.org", + ), + ), + ( + "teams", + models.ManyToManyField( + related_name="tasks_teams", to="common.teams" + ), + ), + ( + "updated_by", + models.ForeignKey( + null=True, + on_delete=django.db.models.deletion.SET_NULL, + related_name="%(class)s_updated_by", + to=settings.AUTH_USER_MODEL, + verbose_name="Last Modified By", + ), + ), + ], + options={ + "verbose_name": "Task", + "verbose_name_plural": "Tasks", + "db_table": "task", + "ordering": ("-due_date",), + }, + ), + migrations.AddIndex( + model_name="boardcolumn", + index=models.Index( + fields=["org", "order"], name="board_colum_org_id_c9ff44_idx" + ), + ), + migrations.AlterUniqueTogether( + name="boardcolumn", + unique_together={("board", "name")}, + ), + migrations.AddIndex( + model_name="boardmember", + index=models.Index( + fields=["org", "-created_at"], name="board_membe_org_id_16f9e3_idx" + ), + ), + migrations.AlterUniqueTogether( + name="boardmember", + unique_together={("board", "profile")}, + ), + migrations.AddIndex( + model_name="board", + index=models.Index( + fields=["org", "-created_at"], name="board_org_id_07a8d8_idx" + ), + ), + migrations.AddIndex( + model_name="boardtask", + index=models.Index( + fields=["org", "order"], name="board_task_org_id_6055e2_idx" + ), + ), + migrations.AddIndex( + model_name="task", + index=models.Index(fields=["status"], name="task_status_e9a322_idx"), + ), + migrations.AddIndex( + model_name="task", + index=models.Index(fields=["due_date"], name="task_due_dat_6ddd76_idx"), + ), + migrations.AddIndex( + model_name="task", + index=models.Index( + fields=["org", "-created_at"], name="task_org_id_74b184_idx" + ), + ), + ] diff --git a/opportunity/__init__.py b/backend/tasks/migrations/__init__.py similarity index 100% rename from opportunity/__init__.py rename to backend/tasks/migrations/__init__.py diff --git a/backend/tasks/models.py b/backend/tasks/models.py new file mode 100644 index 00000000..69214b5c --- /dev/null +++ b/backend/tasks/models.py @@ -0,0 +1,268 @@ +import arrow +from django.db import models +from django.utils.translation import gettext_lazy as _ + +from accounts.models import Account +from common.base import AssignableMixin, BaseModel +from common.models import Org, Profile, Teams +from contacts.models import Contact + +# ============================================================================= +# Kanban Board Models (merged from boards app) +# ============================================================================= + + +class Board(BaseModel): + """Kanban Board""" + + name = models.CharField(max_length=255) + description = models.TextField(blank=True, null=True) + owner = models.ForeignKey( + Profile, on_delete=models.CASCADE, related_name="owned_boards" + ) + members = models.ManyToManyField( + Profile, through="BoardMember", related_name="boards" + ) + org = models.ForeignKey(Org, on_delete=models.CASCADE, related_name="boards") + is_archived = models.BooleanField(default=False) + + class Meta: + verbose_name = "Board" + verbose_name_plural = "Boards" + db_table = "board" + ordering = ("-created_at",) + indexes = [ + models.Index(fields=["org", "-created_at"]), + ] + + def __str__(self): + return self.name + + +class BoardMember(BaseModel): + """Board membership with roles""" + + ROLE_CHOICES = ( + ("owner", "Owner"), + ("admin", "Admin"), + ("member", "Member"), + ) + + board = models.ForeignKey( + Board, on_delete=models.CASCADE, related_name="memberships" + ) + profile = models.ForeignKey( + Profile, on_delete=models.CASCADE, related_name="board_memberships" + ) + role = models.CharField(max_length=20, choices=ROLE_CHOICES, default="member") + org = models.ForeignKey( + Org, + on_delete=models.CASCADE, + related_name="board_members", + ) + + class Meta: + verbose_name = "Board Member" + verbose_name_plural = "Board Members" + db_table = "board_member" + unique_together = ("board", "profile") + indexes = [ + models.Index(fields=["org", "-created_at"]), + ] + + def __str__(self): + return f"{self.profile} - {self.board} ({self.role})" + + def save(self, *args, **kwargs): + if not self.org_id and self.board_id: + self.org_id = self.board.org_id + super().save(*args, **kwargs) + + +class BoardColumn(BaseModel): + """Column in a board (e.g., To Do, In Progress, Done)""" + + board = models.ForeignKey(Board, on_delete=models.CASCADE, related_name="columns") + name = models.CharField(max_length=100) + order = models.PositiveIntegerField(default=0) + color = models.CharField(max_length=7, default="#6B7280") # Hex color + limit = models.PositiveIntegerField(null=True, blank=True) # WIP limit + org = models.ForeignKey( + Org, + on_delete=models.CASCADE, + related_name="board_columns", + ) + + class Meta: + verbose_name = "Board Column" + verbose_name_plural = "Board Columns" + db_table = "board_column" + ordering = ("order",) + unique_together = ("board", "name") + indexes = [ + models.Index(fields=["org", "order"]), + ] + + def __str__(self): + return f"{self.board.name} - {self.name}" + + def save(self, *args, **kwargs): + if not self.org_id and self.board_id: + self.org_id = self.board.org_id + super().save(*args, **kwargs) + + +class BoardTask(BaseModel): + """Task/Card in a board column""" + + PRIORITY_CHOICES = ( + ("low", "Low"), + ("medium", "Medium"), + ("high", "High"), + ("urgent", "Urgent"), + ) + + column = models.ForeignKey( + BoardColumn, on_delete=models.CASCADE, related_name="tasks" + ) + title = models.CharField(max_length=255) + description = models.TextField(blank=True, null=True) + order = models.PositiveIntegerField(default=0) + priority = models.CharField( + max_length=10, choices=PRIORITY_CHOICES, default="medium" + ) + assigned_to = models.ManyToManyField( + Profile, related_name="assigned_board_tasks", blank=True + ) + due_date = models.DateTimeField(null=True, blank=True) + completed_at = models.DateTimeField(null=True, blank=True) + + # Link to CRM entities (optional) + account = models.ForeignKey( + Account, + on_delete=models.SET_NULL, + null=True, + blank=True, + related_name="board_tasks", + ) + contact = models.ForeignKey( + Contact, + on_delete=models.SET_NULL, + null=True, + blank=True, + related_name="board_tasks", + ) + opportunity = models.ForeignKey( + "opportunity.Opportunity", + on_delete=models.SET_NULL, + null=True, + blank=True, + related_name="board_tasks", + ) + org = models.ForeignKey( + Org, + on_delete=models.CASCADE, + related_name="board_tasks", + ) + + class Meta: + verbose_name = "Board Task" + verbose_name_plural = "Board Tasks" + db_table = "board_task" + ordering = ("order",) + indexes = [ + models.Index(fields=["org", "order"]), + ] + + def __str__(self): + return self.title + + def save(self, *args, **kwargs): + if not self.org_id and self.column_id: + self.org_id = self.column.board.org_id + super().save(*args, **kwargs) + + def mark_complete(self): + """Mark task as completed""" + from django.utils import timezone + + self.completed_at = timezone.now() + self.save() + + def mark_incomplete(self): + """Mark task as incomplete""" + self.completed_at = None + self.save() + + @property + def is_completed(self): + return self.completed_at is not None + + @property + def is_overdue(self): + from django.utils import timezone + + if self.due_date and not self.is_completed: + return timezone.now() > self.due_date + return False + + +# ============================================================================= +# Original Task Model +# ============================================================================= + + +class Task(AssignableMixin, BaseModel): + + STATUS_CHOICES = ( + ("New", "New"), + ("In Progress", "In Progress"), + ("Completed", "Completed"), + ) + + PRIORITY_CHOICES = (("Low", "Low"), ("Medium", "Medium"), ("High", "High")) + + title = models.CharField(_("title"), max_length=200) + status = models.CharField(_("status"), max_length=50, choices=STATUS_CHOICES) + priority = models.CharField(_("priority"), max_length=50, choices=PRIORITY_CHOICES) + due_date = models.DateField(blank=True, null=True) + description = models.TextField(_("Notes"), blank=True, null=True) + account = models.ForeignKey( + Account, + related_name="accounts_tasks", + null=True, + blank=True, + on_delete=models.SET_NULL, + ) + + contacts = models.ManyToManyField(Contact, related_name="contacts_tasks") + + assigned_to = models.ManyToManyField(Profile, related_name="users_tasks") + + # created_by = models.ForeignKey( + # Profile, + # related_name="task_created", + # blank=True, + # null=True, + # on_delete=models.SET_NULL, + # ) + teams = models.ManyToManyField(Teams, related_name="tasks_teams") + org = models.ForeignKey(Org, on_delete=models.CASCADE, related_name="tasks") + + class Meta: + verbose_name = "Task" + verbose_name_plural = "Tasks" + db_table = "task" + ordering = ("-due_date",) + indexes = [ + models.Index(fields=["status"]), + models.Index(fields=["due_date"]), + models.Index(fields=["org", "-created_at"]), + ] + + def __str__(self): + return f"{self.title}" + + @property + def created_on_arrow(self): + return arrow.get(self.created_at).humanize() diff --git a/backend/tasks/serializer.py b/backend/tasks/serializer.py new file mode 100644 index 00000000..534fbc8a --- /dev/null +++ b/backend/tasks/serializer.py @@ -0,0 +1,224 @@ +from rest_framework import serializers + +from common.serializer import ( + AttachmentsSerializer, + CommentSerializer, + ProfileSerializer, + TeamsSerializer, + UserSerializer, +) +from contacts.serializer import ContactSerializer +from tasks.models import Board, BoardColumn, BoardMember, BoardTask, Task + +# ============================================================================= +# Kanban Board Serializers (merged from boards app) +# ============================================================================= + + +class BoardMemberSerializer(serializers.ModelSerializer): + """Serializer for board members""" + + profile = ProfileSerializer(read_only=True) + profile_id = serializers.UUIDField(write_only=True, required=False) + + class Meta: + model = BoardMember + fields = "__all__" + read_only_fields = ("id", "created_at", "updated_at", "board") + + +class BoardTaskSerializer(serializers.ModelSerializer): + """Serializer for board tasks""" + + assigned_to = ProfileSerializer(many=True, read_only=True) + assigned_to_ids = serializers.ListField( + child=serializers.UUIDField(), write_only=True, required=False + ) + is_completed = serializers.BooleanField(read_only=True) + is_overdue = serializers.BooleanField(read_only=True) + + class Meta: + model = BoardTask + fields = "__all__" + read_only_fields = ("id", "created_at", "updated_at", "completed_at") + + +class BoardColumnSerializer(serializers.ModelSerializer): + """Serializer for board columns""" + + tasks = BoardTaskSerializer(many=True, read_only=True) + task_count = serializers.SerializerMethodField() + + class Meta: + model = BoardColumn + fields = "__all__" + read_only_fields = ("id", "created_at", "updated_at", "board") + + def get_task_count(self, obj): + return obj.tasks.count() + + +class BoardColumnListSerializer(serializers.ModelSerializer): + """Simplified column serializer for lists""" + + task_count = serializers.SerializerMethodField() + + class Meta: + model = BoardColumn + fields = ["id", "name", "order", "color", "limit", "task_count"] + + def get_task_count(self, obj): + return obj.tasks.count() + + +class BoardSerializer(serializers.ModelSerializer): + """Serializer for boards""" + + owner = ProfileSerializer(read_only=True) + columns = BoardColumnListSerializer(many=True, read_only=True) + members = BoardMemberSerializer(source="memberships", many=True, read_only=True) + member_count = serializers.SerializerMethodField() + task_count = serializers.SerializerMethodField() + + class Meta: + model = Board + fields = "__all__" + read_only_fields = ( + "id", + "created_at", + "updated_at", + "created_by", + "updated_by", + "owner", + "org", + ) + + def get_member_count(self, obj): + return obj.members.count() + + def get_task_count(self, obj): + return BoardTask.objects.filter(column__board=obj).count() + + +class BoardListSerializer(serializers.ModelSerializer): + """Simplified board serializer for lists""" + + owner = ProfileSerializer(read_only=True) + member_count = serializers.SerializerMethodField() + column_count = serializers.SerializerMethodField() + task_count = serializers.SerializerMethodField() + + class Meta: + model = Board + fields = [ + "id", + "name", + "description", + "owner", + "is_archived", + "member_count", + "column_count", + "task_count", + "created_at", + "updated_at", + ] + + def get_member_count(self, obj): + return obj.members.count() + + def get_column_count(self, obj): + return obj.columns.count() + + def get_task_count(self, obj): + return BoardTask.objects.filter(column__board=obj).count() + + +# ============================================================================= +# Original Task Serializers +# ============================================================================= + + +class TaskSerializer(serializers.ModelSerializer): + created_by = UserSerializer() + assigned_to = ProfileSerializer(read_only=True, many=True) + contacts = ContactSerializer(read_only=True, many=True) + teams = TeamsSerializer(read_only=True, many=True) + task_attachment = AttachmentsSerializer(read_only=True, many=True) + task_comments = CommentSerializer(read_only=True, many=True) + + class Meta: + model = Task + fields = ( + "id", + "title", + "status", + "priority", + "due_date", + "account", + "created_by", + "created_at", + "contacts", + "teams", + "assigned_to", + "task_attachment", + "task_comments", + ) + + +class TaskCreateSerializer(serializers.ModelSerializer): + def __init__(self, *args, **kwargs): + request_obj = kwargs.pop("request_obj", None) + super().__init__(*args, **kwargs) + self.org = request_obj.profile.org + + self.fields["title"].required = True + + def validate_title(self, title): + if self.instance: + if ( + Task.objects.filter(title__iexact=title, org=self.org) + .exclude(id=self.instance.id) + .exists() + ): + raise serializers.ValidationError("Task already exists with this title") + else: + if Task.objects.filter(title__iexact=title, org=self.org).exists(): + raise serializers.ValidationError("Task already exists with this title") + return title + + class Meta: + model = Task + fields = ( + "id", + "title", + "status", + "priority", + "due_date", + "account", + "created_by", + "created_at", + ) + + +class TaskDetailEditSwaggerSerializer(serializers.Serializer): + comment = serializers.CharField() + task_attachment = serializers.FileField() + + +class TaskCommentEditSwaggerSerializer(serializers.Serializer): + comment = serializers.CharField() + + +class TaskCreateSwaggerSerializer(serializers.ModelSerializer): + class Meta: + model = Task + fields = ( + "title", + "status", + "priority", + "due_date", + "account", + "contacts", + "teams", + "assigned_to", + ) diff --git a/tasks/swagger_params1.py b/backend/tasks/swagger_params.py similarity index 63% rename from tasks/swagger_params1.py rename to backend/tasks/swagger_params.py index 494aef2e..c4d591ea 100644 --- a/tasks/swagger_params1.py +++ b/backend/tasks/swagger_params.py @@ -11,7 +11,7 @@ organization_params = [ task_list_get_params = [ organization_params_in_header, - OpenApiParameter("title", OpenApiTypes.STR,OpenApiParameter.QUERY), - OpenApiParameter("status", OpenApiTypes.STR,OpenApiParameter.QUERY), - OpenApiParameter("priority", OpenApiTypes.STR,OpenApiParameter.QUERY), + OpenApiParameter("title", OpenApiTypes.STR, OpenApiParameter.QUERY), + OpenApiParameter("status", OpenApiTypes.STR, OpenApiParameter.QUERY), + OpenApiParameter("priority", OpenApiTypes.STR, OpenApiParameter.QUERY), ] diff --git a/tasks/templates/tasks_email_template.html b/backend/tasks/templates/tasks_email_template.html similarity index 100% rename from tasks/templates/tasks_email_template.html rename to backend/tasks/templates/tasks_email_template.html diff --git a/tasks/tests_celery_tasks.py b/backend/tasks/tests_celery_tasks.py similarity index 100% rename from tasks/tests_celery_tasks.py rename to backend/tasks/tests_celery_tasks.py diff --git a/backend/tasks/urls.py b/backend/tasks/urls.py new file mode 100644 index 00000000..c4d33653 --- /dev/null +++ b/backend/tasks/urls.py @@ -0,0 +1,33 @@ +from django.urls import path + +from tasks import views + +app_name = "api_tasks" + +urlpatterns = [ + # Task endpoints + path("", views.TaskListView.as_view()), + path("/", views.TaskDetailView.as_view()), + path("comment//", views.TaskCommentView.as_view()), + path("attachment//", views.TaskAttachmentView.as_view()), +] + +# Board URLs (kept separate for namespace compatibility with frontend) +board_urlpatterns = [ + # Boards + path("", views.BoardListCreateView.as_view(), name="board_list_create"), + path("/", views.BoardDetailView.as_view(), name="board_detail"), + # Columns + path( + "/columns/", + views.BoardColumnListCreateView.as_view(), + name="column_list_create", + ), + # Tasks + path( + "columns//tasks/", + views.BoardTaskListCreateView.as_view(), + name="task_list_create", + ), + path("tasks//", views.BoardTaskDetailView.as_view(), name="task_detail"), +] diff --git a/tasks/utils.py b/backend/tasks/utils.py similarity index 100% rename from tasks/utils.py rename to backend/tasks/utils.py diff --git a/backend/tasks/views.py b/backend/tasks/views.py new file mode 100644 index 00000000..7565ac2b --- /dev/null +++ b/backend/tasks/views.py @@ -0,0 +1,891 @@ +import json + +from django.contrib.contenttypes.models import ContentType +from django.db.models import Q +from django.shortcuts import get_object_or_404 +from drf_spectacular.utils import OpenApiExample, OpenApiParameter, extend_schema +from rest_framework import status +from rest_framework.pagination import LimitOffsetPagination +from rest_framework.permissions import IsAuthenticated +from rest_framework.response import Response +from rest_framework.views import APIView + +from accounts.models import Account +from accounts.serializer import AccountSerializer +from common.models import Attachments, Comment, Profile, Teams + +# from common.external_auth import CustomDualAuthentication +from common.serializer import ( + AttachmentsSerializer, + CommentSerializer, + ProfileSerializer, + TeamsSerializer, +) +from contacts.models import Contact +from contacts.serializer import ContactSerializer +from tasks import swagger_params +from tasks.models import Board, BoardColumn, BoardMember, BoardTask, Task +from tasks.serializer import ( + BoardColumnSerializer, + BoardListSerializer, + BoardMemberSerializer, + BoardSerializer, + BoardTaskSerializer, + TaskCommentEditSwaggerSerializer, + TaskCreateSerializer, + TaskCreateSwaggerSerializer, + TaskDetailEditSwaggerSerializer, + TaskSerializer, +) +from tasks.utils import PRIORITY_CHOICES, STATUS_CHOICES + + +class TaskListView(APIView, LimitOffsetPagination): + model = Task + # authentication_classes = (CustomDualAuthentication,) + permission_classes = (IsAuthenticated,) + + def get_context_data(self, **kwargs): + params = self.request.query_params + queryset = self.model.objects.filter(org=self.request.profile.org).order_by( + "-id" + ) + accounts = Account.objects.filter(org=self.request.profile.org) + contacts = Contact.objects.filter(org=self.request.profile.org) + if self.request.profile.role != "ADMIN" and not self.request.profile.is_admin: + queryset = queryset.filter( + Q(assigned_to__in=[self.request.profile]) + | Q(created_by=self.request.profile.user) + ) + accounts = accounts.filter( + Q(created_by=self.request.profile.user) + | Q(assigned_to=self.request.profile) + ).distinct() + contacts = contacts.filter( + Q(created_by=self.request.profile.user) + | Q(assigned_to=self.request.profile) + ).distinct() + + if params: + if params.get("title"): + queryset = queryset.filter(title__icontains=params.get("title")) + if params.get("status"): + queryset = queryset.filter(status=params.get("status")) + if params.get("priority"): + queryset = queryset.filter(priority=params.get("priority")) + context = {} + results_tasks = self.paginate_queryset( + queryset.distinct(), self.request, view=self + ) + tasks = TaskSerializer(results_tasks, many=True).data + if results_tasks: + offset = queryset.filter(id__gte=results_tasks[-1].id).count() + if offset == queryset.count(): + offset = None + else: + offset = 0 + context.update( + { + "tasks_count": self.count, + "offset": offset, + } + ) + context["tasks"] = tasks + context["status"] = STATUS_CHOICES + context["priority"] = PRIORITY_CHOICES + context["accounts_list"] = AccountSerializer(accounts, many=True).data + context["contacts_list"] = ContactSerializer(contacts, many=True).data + return context + + @extend_schema(tags=["Tasks"], parameters=swagger_params.task_list_get_params) + def get(self, request, *args, **kwargs): + context = self.get_context_data(**kwargs) + return Response(context) + + @extend_schema( + tags=["Tasks"], + parameters=swagger_params.organization_params, + request=TaskCreateSwaggerSerializer, + ) + def post(self, request, *args, **kwargs): + params = request.data + serializer = TaskCreateSerializer(data=params, request_obj=request) + if serializer.is_valid(): + task_obj = serializer.save( + created_by=request.profile.user, + due_date=params.get("due_date"), + org=request.profile.org, + ) + if params.get("contacts"): + contacts_list = params.get("contacts") + contacts = Contact.objects.filter( + id__in=contacts_list, org=request.profile.org + ) + task_obj.contacts.add(*contacts) + + if params.get("teams"): + teams_list = params.get("teams") + teams = Teams.objects.filter(id__in=teams_list, org=request.profile.org) + task_obj.teams.add(*teams) + + if params.get("assigned_to"): + assinged_to_list = params.get("assigned_to") + profiles = Profile.objects.filter( + id__in=assinged_to_list, org=request.profile.org, is_active=True + ) + task_obj.assigned_to.add(*profiles) + + return Response( + {"error": False, "message": "Task Created Successfully"}, + status=status.HTTP_200_OK, + ) + return Response( + {"error": True, "errors": serializer.errors}, + status=status.HTTP_400_BAD_REQUEST, + ) + + +class TaskDetailView(APIView): + model = Task + # authentication_classes = (CustomDualAuthentication,) + permission_classes = (IsAuthenticated,) + + def get_object(self, pk): + return Task.objects.get(pk=pk, org=self.request.profile.org) + + def get_context_data(self, **kwargs): + context = {} + user_assgn_list = [ + assigned_to.id for assigned_to in self.task_obj.assigned_to.all() + ] + if self.request.profile == self.task_obj.created_by: + user_assgn_list.append(self.request.profile.id) + if self.request.profile.role != "ADMIN" and not self.request.profile.is_admin: + if self.request.profile.id not in user_assgn_list: + return Response( + { + "error": True, + "errors": "You don't have Permission to perform this action", + }, + status=status.HTTP_403_FORBIDDEN, + ) + + task_content_type = ContentType.objects.get_for_model(Task) + comments = Comment.objects.filter( + content_type=task_content_type, + object_id=self.task_obj.id, + org=self.request.profile.org, + ).order_by("-id") + attachments = Attachments.objects.filter( + content_type=task_content_type, + object_id=self.task_obj.id, + org=self.request.profile.org, + ).order_by("-id") + + assigned_data = self.task_obj.assigned_to.values("id", "user__email") + + if self.request.profile.is_admin or self.request.profile.role == "ADMIN": + users_mention = list( + Profile.objects.filter( + is_active=True, org=self.request.profile.org + ).values("user__email") + ) + elif self.request.profile != self.task_obj.created_by: + users_mention = [{"username": self.task_obj.created_by.user.email}] + else: + users_mention = list(self.task_obj.assigned_to.all().values("user__email")) + if self.request.profile.role == "ADMIN" or self.request.profile.is_admin: + users = Profile.objects.filter( + is_active=True, org=self.request.profile.org + ).order_by("user__email") + else: + users = Profile.objects.filter( + role="ADMIN", org=self.request.profile.org + ).order_by("user__email") + + if self.request.profile == self.task_obj.created_by: + user_assgn_list.append(self.request.profile.id) + if self.request.profile.role != "ADMIN" and not self.request.profile.is_admin: + if self.request.profile.id not in user_assgn_list: + return Response( + { + "error": True, + "errors": "You don't have Permission to perform this action", + }, + status=status.HTTP_403_FORBIDDEN, + ) + team_ids = [user.id for user in self.task_obj.get_team_users] + all_user_ids = users.values_list("id", flat=True) + users_excluding_team_id = set(all_user_ids) - set(team_ids) + users_excluding_team = Profile.objects.filter(id__in=users_excluding_team_id) + context.update( + { + "task_obj": TaskSerializer(self.task_obj).data, + "attachments": AttachmentsSerializer(attachments, many=True).data, + "comments": CommentSerializer(comments, many=True).data, + "users_mention": users_mention, + "assigned_data": assigned_data, + } + ) + context["users"] = ProfileSerializer(users, many=True).data + context["users_excluding_team"] = ProfileSerializer( + users_excluding_team, many=True + ).data + context["teams"] = TeamsSerializer(Teams.objects.all(), many=True).data + return context + + @extend_schema(tags=["Tasks"], parameters=swagger_params.organization_params) + def get(self, request, pk, **kwargs): + self.task_obj = self.get_object(pk) + context = self.get_context_data(**kwargs) + return Response(context) + + @extend_schema( + tags=["Tasks"], + parameters=swagger_params.organization_params, + request=TaskDetailEditSwaggerSerializer, + ) + def post(self, request, pk, **kwargs): + params = request.data + context = {} + self.task_obj = Task.objects.get(pk=pk) + if self.request.profile.role != "ADMIN" and not self.request.profile.is_admin: + if not ( + (self.request.profile == self.task_obj.created_by) + or (self.request.profile in self.task_obj.assigned_to.all()) + ): + return Response( + { + "error": True, + "errors": "You don't have Permission to perform this action", + }, + status=status.HTTP_403_FORBIDDEN, + ) + comment_serializer = CommentSerializer(data=params) + if comment_serializer.is_valid(): + if params.get("comment"): + comment_serializer.save( + task_id=self.task_obj.id, + commented_by_id=self.request.profile.id, + ) + + if self.request.FILES.get("task_attachment"): + attachment = Attachments() + attachment.created_by = self.request.profile.user + attachment.file_name = self.request.FILES.get("task_attachment").name + attachment.task = self.task_obj + attachment.attachment = self.request.FILES.get("task_attachment") + attachment.save() + + task_content_type = ContentType.objects.get_for_model(Task) + comments = Comment.objects.filter( + content_type=task_content_type, + object_id=self.task_obj.id, + org=self.request.profile.org, + ).order_by("-id") + attachments = Attachments.objects.filter( + content_type=task_content_type, + object_id=self.task_obj.id, + org=self.request.profile.org, + ).order_by("-id") + context.update( + { + "task_obj": TaskSerializer(self.task_obj).data, + "attachments": AttachmentsSerializer(attachments, many=True).data, + "comments": CommentSerializer(comments, many=True).data, + } + ) + return Response(context) + + @extend_schema( + tags=["Tasks"], + parameters=swagger_params.organization_params, + request=TaskCreateSwaggerSerializer, + ) + def put(self, request, pk, **kwargs): + params = request.data + self.task_obj = self.get_object(pk) + serializer = TaskCreateSerializer( + data=params, + instance=self.task_obj, + request_obj=request, + ) + if serializer.is_valid(): + task_obj = serializer.save() + previous_assigned_to_users = list( + task_obj.assigned_to.all().values_list("id", flat=True) + ) + task_obj.contacts.clear() + if params.get("contacts"): + contacts_list = params.get("contacts") + contacts = Contact.objects.filter( + id__in=contacts_list, org=request.profile.org + ) + task_obj.contacts.add(*contacts) + + task_obj.teams.clear() + if params.get("teams"): + teams_list = params.get("teams") + teams = Teams.objects.filter(id__in=teams_list, org=request.profile.org) + task_obj.teams.add(*teams) + + task_obj.assigned_to.clear() + if params.get("assigned_to"): + assinged_to_list = params.get("assigned_to") + profiles = Profile.objects.filter( + id__in=assinged_to_list, org=request.profile.org, is_active=True + ) + task_obj.assigned_to.add(*profiles) + + return Response( + {"error": False, "message": "Task updated Successfully"}, + status=status.HTTP_200_OK, + ) + return Response( + {"error": True, "errors": serializer.errors}, + status=status.HTTP_400_BAD_REQUEST, + ) + + @extend_schema(tags=["Tasks"], parameters=swagger_params.organization_params) + def delete(self, request, pk, **kwargs): + self.object = self.get_object(pk) + if ( + request.profile.role == "ADMIN" + or request.profile.is_admin + or request.profile == self.object.created_by + ): + self.object.delete() + return Response( + {"error": False, "message": "Task deleted Successfully"}, + status=status.HTTP_200_OK, + ) + return Response( + {"error": True, "errors": "you don't have permission to delete this task"}, + status=status.HTTP_403_FORBIDDEN, + ) + + +class TaskCommentView(APIView): + model = Comment + # authentication_classes = (CustomDualAuthentication,) + permission_classes = (IsAuthenticated,) + + def get_object(self, pk): + return self.model.objects.get(pk=pk, org=self.request.profile.org) + + @extend_schema( + tags=["Tasks"], + parameters=swagger_params.organization_params, + request=TaskCommentEditSwaggerSerializer, + ) + def put(self, request, pk, format=None): + params = request.data + obj = self.get_object(pk) + if ( + request.profile.role == "ADMIN" + or request.profile.is_admin + or request.profile == obj.commented_by + ): + serializer = CommentSerializer(obj, data=params) + if params.get("comment"): + if serializer.is_valid(): + serializer.save() + return Response( + {"error": False, "message": "Comment Submitted"}, + status=status.HTTP_200_OK, + ) + return Response( + {"error": True, "errors": serializer.errors}, + status=status.HTTP_400_BAD_REQUEST, + ) + + return Response( + { + "error": True, + "errors": "You don't have Permission to perform this action", + }, + status=status.HTTP_403_FORBIDDEN, + ) + + @extend_schema(tags=["Tasks"], parameters=swagger_params.organization_params) + def delete(self, request, pk, format=None): + self.object = self.get_object(pk) + if ( + request.profile.role == "ADMIN" + or request.profile.is_admin + or request.profile == self.object.commented_by + ): + self.object.delete() + return Response( + {"error": False, "message": "Comment Deleted Successfully"}, + status=status.HTTP_200_OK, + ) + return Response( + { + "error": True, + "errors": "You don't have Permission to perform this action", + }, + status=status.HTTP_403_FORBIDDEN, + ) + + +class TaskAttachmentView(APIView): + model = Attachments + # authentication_classes = (CustomDualAuthentication,) + permission_classes = (IsAuthenticated,) + + @extend_schema(tags=["Tasks"], parameters=swagger_params.organization_params) + def delete(self, request, pk, format=None): + self.object = self.model.objects.get(pk=pk) + if ( + request.profile.role == "ADMIN" + or request.profile.is_admin + or request.profile == self.object.created_by + ): + self.object.delete() + return Response( + {"error": False, "message": "Attachment Deleted Successfully"}, + status=status.HTTP_200_OK, + ) + return Response( + { + "error": True, + "errors": "You don't have Permission to perform this action", + }, + status=status.HTTP_403_FORBIDDEN, + ) + + +# ============================================================================= +# Kanban Board Views (merged from boards app) +# ============================================================================= + + +class BoardListCreateView(APIView, LimitOffsetPagination): + """List all boards or create a new board""" + + permission_classes = (IsAuthenticated,) + + @extend_schema( + tags=["Boards"], + parameters=[ + OpenApiParameter( + name="org", description="Organization ID", required=True, type=str + ), + OpenApiParameter( + name="search", + description="Search in board name", + required=False, + type=str, + ), + OpenApiParameter( + name="archived", + description="Filter archived boards", + required=False, + type=bool, + ), + ], + responses={200: BoardListSerializer(many=True)}, + ) + def get(self, request): + """List all boards for the user's organization""" + org = request.profile.org + user_profile = request.profile + + # Get boards where user is owner or member + queryset = ( + Board.objects.filter( + Q(org=org) & (Q(owner=user_profile) | Q(members=user_profile)) + ) + .distinct() + .order_by("-created_at") + ) + + # Filtering + archived = request.query_params.get("archived") + if archived is not None: + is_archived = archived.lower() in ["true", "1", "yes"] + queryset = queryset.filter(is_archived=is_archived) + + search = request.query_params.get("search") + if search: + queryset = queryset.filter(name__icontains=search) + + # Pagination + results = self.paginate_queryset(queryset, request, view=self) + serializer = BoardListSerializer(results, many=True) + + return Response( + { + "count": self.count, + "next": self.get_next_link(), + "previous": self.get_previous_link(), + "results": serializer.data, + } + ) + + @extend_schema( + tags=["Boards"], + parameters=[ + OpenApiParameter( + name="org", description="Organization ID", required=True, type=str + ) + ], + request=BoardSerializer, + responses={201: BoardSerializer}, + ) + def post(self, request): + """Create a new board with default columns""" + org = request.profile.org + user_profile = request.profile + data = request.data.copy() + + serializer = BoardSerializer(data=data) + if not serializer.is_valid(): + return Response( + {"error": True, "errors": serializer.errors}, + status=status.HTTP_400_BAD_REQUEST, + ) + + # Create board + board = serializer.save(org=org, owner=user_profile, created_by=request.user) + + # Add owner as member with owner role + BoardMember.objects.create(board=board, profile=user_profile, role="owner") + + # Create default columns if requested + if request.data.get("create_default_columns", True): + default_columns = [ + {"name": "To Do", "order": 1, "color": "#EF4444"}, + {"name": "In Progress", "order": 2, "color": "#F59E0B"}, + {"name": "Done", "order": 3, "color": "#10B981"}, + ] + for col_data in default_columns: + BoardColumn.objects.create(board=board, **col_data) + + return Response(BoardSerializer(board).data, status=status.HTTP_201_CREATED) + + +class BoardDetailView(APIView): + """Retrieve, update or delete a board""" + + permission_classes = (IsAuthenticated,) + + def get_object(self, pk, org, user_profile): + """Get board if user has access""" + board = get_object_or_404(Board, pk=pk, org=org) + # Check if user is owner or member + if ( + board.owner != user_profile + and not board.members.filter(id=user_profile.id).exists() + ): + return None + return board + + @extend_schema( + tags=["Boards"], + parameters=[ + OpenApiParameter( + name="org", description="Organization ID", required=True, type=str + ) + ], + responses={200: BoardSerializer}, + ) + def get(self, request, pk): + """Get board details with columns and tasks""" + board = self.get_object(pk, request.profile.org, request.profile) + if not board: + return Response( + {"error": "Board not found or access denied"}, + status=status.HTTP_404_NOT_FOUND, + ) + serializer = BoardSerializer(board) + return Response(serializer.data) + + @extend_schema( + tags=["Boards"], + parameters=[ + OpenApiParameter( + name="org", description="Organization ID", required=True, type=str + ) + ], + request=BoardSerializer, + responses={200: BoardSerializer}, + ) + def put(self, request, pk): + """Update board""" + board = self.get_object(pk, request.profile.org, request.profile) + if not board: + return Response( + {"error": "Board not found or access denied"}, + status=status.HTTP_404_NOT_FOUND, + ) + + # Only owner or admin can update board + membership = BoardMember.objects.filter( + board=board, profile=request.profile + ).first() + if not membership or membership.role not in ["owner", "admin"]: + return Response( + {"error": "Permission denied"}, status=status.HTTP_403_FORBIDDEN + ) + + serializer = BoardSerializer(board, data=request.data, partial=True) + if not serializer.is_valid(): + return Response( + {"error": True, "errors": serializer.errors}, + status=status.HTTP_400_BAD_REQUEST, + ) + + board = serializer.save(updated_by=request.user) + return Response(BoardSerializer(board).data) + + @extend_schema( + tags=["Boards"], + parameters=[ + OpenApiParameter( + name="org", description="Organization ID", required=True, type=str + ) + ], + responses={204: None}, + ) + def delete(self, request, pk): + """Delete board (owner only)""" + board = self.get_object(pk, request.profile.org, request.profile) + if not board: + return Response( + {"error": "Board not found or access denied"}, + status=status.HTTP_404_NOT_FOUND, + ) + + # Only owner can delete + if board.owner != request.profile: + return Response( + {"error": "Only board owner can delete the board"}, + status=status.HTTP_403_FORBIDDEN, + ) + + board.delete() + return Response(status=status.HTTP_204_NO_CONTENT) + + +class BoardColumnListCreateView(APIView): + """List or create columns for a board""" + + permission_classes = (IsAuthenticated,) + + @extend_schema( + tags=["Boards"], + parameters=[ + OpenApiParameter( + name="org", description="Organization ID", required=True, type=str + ) + ], + responses={200: BoardColumnSerializer(many=True)}, + ) + def get(self, request, board_pk): + """List all columns for a board""" + org = request.profile.org + board = get_object_or_404(Board, pk=board_pk, org=org) + + # Check access + if ( + board.owner != request.profile + and not board.members.filter(id=request.profile.id).exists() + ): + return Response( + {"error": "Board not found or access denied"}, + status=status.HTTP_404_NOT_FOUND, + ) + + columns = board.columns.all() + serializer = BoardColumnSerializer(columns, many=True) + return Response(serializer.data) + + @extend_schema( + tags=["Boards"], + parameters=[ + OpenApiParameter( + name="org", description="Organization ID", required=True, type=str + ) + ], + request=BoardColumnSerializer, + responses={201: BoardColumnSerializer}, + ) + def post(self, request, board_pk): + """Create a new column""" + org = request.profile.org + board = get_object_or_404(Board, pk=board_pk, org=org) + + # Check permission + membership = BoardMember.objects.filter( + board=board, profile=request.profile + ).first() + if not membership or membership.role not in ["owner", "admin"]: + return Response( + {"error": "Permission denied"}, status=status.HTTP_403_FORBIDDEN + ) + + data = request.data.copy() + serializer = BoardColumnSerializer(data=data) + if not serializer.is_valid(): + return Response( + {"error": True, "errors": serializer.errors}, + status=status.HTTP_400_BAD_REQUEST, + ) + + column = serializer.save(board=board, created_by=request.user) + return Response( + BoardColumnSerializer(column).data, status=status.HTTP_201_CREATED + ) + + +class BoardTaskListCreateView(APIView): + """List or create tasks for a column""" + + permission_classes = (IsAuthenticated,) + + @extend_schema( + tags=["Boards"], + parameters=[ + OpenApiParameter( + name="org", description="Organization ID", required=True, type=str + ) + ], + responses={200: BoardTaskSerializer(many=True)}, + ) + def get(self, request, column_pk): + """List all tasks for a column""" + org = request.profile.org + column = get_object_or_404(BoardColumn, pk=column_pk, board__org=org) + + # Check access + board = column.board + if ( + board.owner != request.profile + and not board.members.filter(id=request.profile.id).exists() + ): + return Response( + {"error": "Access denied"}, status=status.HTTP_404_NOT_FOUND + ) + + tasks = column.tasks.all() + serializer = BoardTaskSerializer(tasks, many=True) + return Response(serializer.data) + + @extend_schema( + tags=["Boards"], + parameters=[ + OpenApiParameter( + name="org", description="Organization ID", required=True, type=str + ) + ], + request=BoardTaskSerializer, + responses={201: BoardTaskSerializer}, + ) + def post(self, request, column_pk): + """Create a new task""" + org = request.profile.org + column = get_object_or_404(BoardColumn, pk=column_pk, board__org=org) + + # Check access + board = column.board + membership = BoardMember.objects.filter( + board=board, profile=request.profile + ).first() + if not membership: + return Response( + {"error": "Access denied"}, status=status.HTTP_403_FORBIDDEN + ) + + data = request.data.copy() + serializer = BoardTaskSerializer(data=data) + if not serializer.is_valid(): + return Response( + {"error": True, "errors": serializer.errors}, + status=status.HTTP_400_BAD_REQUEST, + ) + + task = serializer.save(column=column, created_by=request.user) + + # Handle assigned_to + if "assigned_to_ids" in data: + profiles = Profile.objects.filter(id__in=data["assigned_to_ids"], org=org) + task.assigned_to.set(profiles) + + return Response(BoardTaskSerializer(task).data, status=status.HTTP_201_CREATED) + + +class BoardTaskDetailView(APIView): + """Retrieve, update or delete a task""" + + permission_classes = (IsAuthenticated,) + + @extend_schema( + tags=["Boards"], + parameters=[ + OpenApiParameter( + name="org", description="Organization ID", required=True, type=str + ) + ], + request=BoardTaskSerializer, + responses={200: BoardTaskSerializer}, + ) + def put(self, request, pk): + """Update task (including moving to different column)""" + org = request.profile.org + task = get_object_or_404(BoardTask, pk=pk, column__board__org=org) + + # Check access + board = task.column.board + membership = BoardMember.objects.filter( + board=board, profile=request.profile + ).first() + if not membership: + return Response( + {"error": "Access denied"}, status=status.HTTP_403_FORBIDDEN + ) + + data = request.data.copy() + serializer = BoardTaskSerializer(task, data=data, partial=True) + if not serializer.is_valid(): + return Response( + {"error": True, "errors": serializer.errors}, + status=status.HTTP_400_BAD_REQUEST, + ) + + task = serializer.save(updated_by=request.user) + + # Handle assigned_to + if "assigned_to_ids" in data: + profiles = Profile.objects.filter(id__in=data["assigned_to_ids"], org=org) + task.assigned_to.set(profiles) + + return Response(BoardTaskSerializer(task).data) + + @extend_schema( + tags=["Boards"], + parameters=[ + OpenApiParameter( + name="org", description="Organization ID", required=True, type=str + ) + ], + responses={204: None}, + ) + def delete(self, request, pk): + """Delete task""" + org = request.profile.org + task = get_object_or_404(BoardTask, pk=pk, column__board__org=org) + + # Check permission + board = task.column.board + membership = BoardMember.objects.filter( + board=board, profile=request.profile + ).first() + if not membership or membership.role not in ["owner", "admin", "member"]: + return Response( + {"error": "Permission denied"}, status=status.HTTP_403_FORBIDDEN + ) + + task.delete() + return Response(status=status.HTTP_204_NO_CONTENT) diff --git a/templates/assigned_to/account_assigned.html b/backend/templates/assigned_to/account_assigned.html similarity index 100% rename from templates/assigned_to/account_assigned.html rename to backend/templates/assigned_to/account_assigned.html diff --git a/templates/assigned_to/cases_assigned.html b/backend/templates/assigned_to/cases_assigned.html similarity index 100% rename from templates/assigned_to/cases_assigned.html rename to backend/templates/assigned_to/cases_assigned.html diff --git a/templates/assigned_to/contact_assigned.html b/backend/templates/assigned_to/contact_assigned.html similarity index 100% rename from templates/assigned_to/contact_assigned.html rename to backend/templates/assigned_to/contact_assigned.html diff --git a/templates/assigned_to/leads_assigned.html b/backend/templates/assigned_to/leads_assigned.html similarity index 100% rename from templates/assigned_to/leads_assigned.html rename to backend/templates/assigned_to/leads_assigned.html diff --git a/templates/assigned_to/opportunity_assigned.html b/backend/templates/assigned_to/opportunity_assigned.html similarity index 100% rename from templates/assigned_to/opportunity_assigned.html rename to backend/templates/assigned_to/opportunity_assigned.html diff --git a/templates/common/user_activation_status.html b/backend/templates/common/user_activation_status.html similarity index 100% rename from templates/common/user_activation_status.html rename to backend/templates/common/user_activation_status.html diff --git a/templates/healthz.html b/backend/templates/healthz.html similarity index 100% rename from templates/healthz.html rename to backend/templates/healthz.html diff --git a/templates/registration/password_reset_email.html b/backend/templates/registration/password_reset_email.html similarity index 100% rename from templates/registration/password_reset_email.html rename to backend/templates/registration/password_reset_email.html diff --git a/templates/root_email_template.html b/backend/templates/root_email_template.html similarity index 100% rename from templates/root_email_template.html rename to backend/templates/root_email_template.html diff --git a/templates/root_email_template_new.html b/backend/templates/root_email_template_new.html similarity index 100% rename from templates/root_email_template_new.html rename to backend/templates/root_email_template_new.html diff --git a/cases/migrations/0001_initial.py b/cases/migrations/0001_initial.py deleted file mode 100644 index accb8d22..00000000 --- a/cases/migrations/0001_initial.py +++ /dev/null @@ -1,39 +0,0 @@ -# Generated by Django 4.2.1 on 2023-06-19 13:08 - -from django.db import migrations, models -import django.db.models.deletion -import uuid - - -class Migration(migrations.Migration): - - initial = True - - dependencies = [ - ('accounts', '0001_initial'), - ] - - operations = [ - migrations.CreateModel( - name='Case', - fields=[ - ('created_at', models.DateTimeField(auto_now_add=True, verbose_name='Created At')), - ('updated_at', models.DateTimeField(auto_now=True, verbose_name='Last Modified At')), - ('id', models.UUIDField(db_index=True, default=uuid.uuid4, editable=False, primary_key=True, serialize=False, unique=True)), - ('name', models.CharField(max_length=64, verbose_name='Name')), - ('status', models.CharField(choices=[('New', 'New'), ('Assigned', 'Assigned'), ('Pending', 'Pending'), ('Closed', 'Closed'), ('Rejected', 'Rejected'), ('Duplicate', 'Duplicate')], max_length=64)), - ('priority', models.CharField(choices=[('Low', 'Low'), ('Normal', 'Normal'), ('High', 'High'), ('Urgent', 'Urgent')], max_length=64)), - ('case_type', models.CharField(blank=True, choices=[('Question', 'Question'), ('Incident', 'Incident'), ('Problem', 'Problem')], default='', max_length=255, null=True)), - ('closed_on', models.DateField()), - ('description', models.TextField(blank=True, null=True)), - ('is_active', models.BooleanField(default=False)), - ('account', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='accounts_cases', to='accounts.account')), - ], - options={ - 'verbose_name': 'Case', - 'verbose_name_plural': 'Cases', - 'db_table': 'case', - 'ordering': ('-created_at',), - }, - ), - ] diff --git a/cases/migrations/0002_initial.py b/cases/migrations/0002_initial.py deleted file mode 100644 index 36256f5a..00000000 --- a/cases/migrations/0002_initial.py +++ /dev/null @@ -1,51 +0,0 @@ -# Generated by Django 4.2.1 on 2023-06-19 13:08 - -from django.conf import settings -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - initial = True - - dependencies = [ - ('teams', '0001_initial'), - ('contacts', '0001_initial'), - ('common', '0001_initial'), - migrations.swappable_dependency(settings.AUTH_USER_MODEL), - ('cases', '0001_initial'), - ] - - operations = [ - migrations.AddField( - model_name='case', - name='assigned_to', - field=models.ManyToManyField(related_name='case_assigned_users', to='common.profile'), - ), - migrations.AddField( - model_name='case', - name='contacts', - field=models.ManyToManyField(to='contacts.contact'), - ), - migrations.AddField( - model_name='case', - name='created_by', - field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='case_created_by', to='common.profile'), - ), - migrations.AddField( - model_name='case', - name='org', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='case_org', to='common.org'), - ), - migrations.AddField( - model_name='case', - name='teams', - field=models.ManyToManyField(related_name='cases_teams', to='teams.teams'), - ), - migrations.AddField( - model_name='case', - name='updated_by', - field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='%(class)s_updated_by', to=settings.AUTH_USER_MODEL, verbose_name='Last Modified By'), - ), - ] diff --git a/cases/migrations/0003_alter_case_created_by.py b/cases/migrations/0003_alter_case_created_by.py deleted file mode 100644 index 350a4bfd..00000000 --- a/cases/migrations/0003_alter_case_created_by.py +++ /dev/null @@ -1,21 +0,0 @@ -# Generated by Django 4.2.1 on 2023-10-31 12:42 - -from django.conf import settings -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - migrations.swappable_dependency(settings.AUTH_USER_MODEL), - ('cases', '0002_initial'), - ] - - operations = [ - migrations.AlterField( - model_name='case', - name='created_by', - field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='%(class)s_created_by', to=settings.AUTH_USER_MODEL, verbose_name='Created By'), - ), - ] diff --git a/cases/models.py b/cases/models.py deleted file mode 100644 index eaf8dc72..00000000 --- a/cases/models.py +++ /dev/null @@ -1,122 +0,0 @@ -import arrow -from django.contrib.contenttypes.models import ContentType -from django.db import models -from django.utils.translation import gettext_lazy as _ -from django.utils.translation import pgettext_lazy - -from accounts.models import Account -from common.models import Org, Profile -from common.base import BaseModel -from common.utils import CASE_TYPE, PRIORITY_CHOICE, STATUS_CHOICE -from contacts.models import Contact -from planner.models import PlannerEvent as Event -from teams.models import Teams - - -class Case(BaseModel): - name = models.CharField(pgettext_lazy("Name of the case", "Name"), max_length=64) - status = models.CharField(choices=STATUS_CHOICE, max_length=64) - priority = models.CharField(choices=PRIORITY_CHOICE, max_length=64) - case_type = models.CharField( - choices=CASE_TYPE, max_length=255, blank=True, null=True, default="" - ) - account = models.ForeignKey( - Account, - on_delete=models.CASCADE, - blank=True, - null=True, - related_name="accounts_cases", - ) - contacts = models.ManyToManyField(Contact) - # closed_on = models.DateTimeField() - closed_on = models.DateField() - description = models.TextField(blank=True, null=True) - assigned_to = models.ManyToManyField(Profile, related_name="case_assigned_users") - # created_by = models.ForeignKey( - # Profile, related_name="case_created_by", on_delete=models.SET_NULL, null=True - # ) - is_active = models.BooleanField(default=False) - teams = models.ManyToManyField(Teams, related_name="cases_teams") - org = models.ForeignKey( - Org, on_delete=models.SET_NULL, null=True, blank=True, related_name="case_org" - ) - - class Meta: - verbose_name = "Case" - verbose_name_plural = "Cases" - db_table = "case" - ordering = ("-created_at",) - - def __str__(self): - return f"{self.name}" - - @property - def get_team_users(self): - team_user_ids = list(self.teams.values_list("users__id", flat=True)) - return Profile.objects.filter(id__in=team_user_ids) - - @property - def get_team_and_assigned_users(self): - team_user_ids = list(self.teams.values_list("users__id", flat=True)) - assigned_user_ids = list(self.assigned_to.values_list("id", flat=True)) - user_ids = team_user_ids + assigned_user_ids - return Profile.objects.filter(id__in=user_ids) - - @property - def get_assigned_users_not_in_teams(self): - team_user_ids = list(self.teams.values_list("users__id", flat=True)) - assigned_user_ids = list(self.assigned_to.values_list("id", flat=True)) - user_ids = set(assigned_user_ids) - set(team_user_ids) - return Profile.objects.filter(id__in=list(user_ids)) - - def get_meetings(self): - content_type = ContentType.objects.get(app_label="cases", model="case") - return Event.objects.filter( - content_type=content_type, - object_id=self.id, - event_type="Meeting", - status="Planned", - ) - - def get_completed_meetings(self): - content_type = ContentType.objects.get(app_label="cases", model="case") - return Event.objects.filter( - content_type=content_type, object_id=self.id, event_type="Meeting" - ).exclude(status="Planned") - - def get_tasks(self): - content_type = ContentType.objects.get(app_label="cases", model="case") - return Event.objects.filter( - content_type=content_type, - object_id=self.id, - event_type="Task", - status="Planned", - ) - - def get_completed_tasks(self): - content_type = ContentType.objects.get(app_label="cases", model="case") - return Event.objects.filter( - content_type=content_type, object_id=self.id, event_type="Task" - ).exclude(status="Planned") - - def get_calls(self): - content_type = ContentType.objects.get(app_label="cases", model="case") - return Event.objects.filter( - content_type=content_type, - object_id=self.id, - event_type="Call", - status="Planned", - ) - - def get_completed_calls(self): - content_type = ContentType.objects.get(app_label="cases", model="case") - return Event.objects.filter( - content_type=content_type, object_id=self.id, event_type="Call" - ).exclude(status="Planned") - - def get_assigned_user(self): - return Profile.objects.get(id=self.assigned_to_id) - - @property - def created_on_arrow(self): - return arrow.get(self.created_at).humanize() diff --git a/cases/urls.py b/cases/urls.py deleted file mode 100644 index 2467a6eb..00000000 --- a/cases/urls.py +++ /dev/null @@ -1,12 +0,0 @@ -from django.urls import path - -from cases import views - -app_name = "api_cases" - -urlpatterns = [ - path("", views.CaseListView.as_view()), - path("/", views.CaseDetailView.as_view()), - path("comment//", views.CaseCommentView.as_view()), - path("attachment//", views.CaseAttachmentView.as_view()), -] diff --git a/cms/admin.py b/cms/admin.py deleted file mode 100644 index 8c38f3f3..00000000 --- a/cms/admin.py +++ /dev/null @@ -1,3 +0,0 @@ -from django.contrib import admin - -# Register your models here. diff --git a/cms/apps.py b/cms/apps.py deleted file mode 100644 index 80bf9e5c..00000000 --- a/cms/apps.py +++ /dev/null @@ -1,6 +0,0 @@ -from django.apps import AppConfig - - -class CmsConfig(AppConfig): - default_auto_field = "django.db.models.BigAutoField" - name = "cms" diff --git a/cms/blocks.py b/cms/blocks.py deleted file mode 100644 index d4051818..00000000 --- a/cms/blocks.py +++ /dev/null @@ -1,221 +0,0 @@ -from django.db import models -from modelcluster.models import ClusterableModel -from wagtail.blocks import CharBlock, ListBlock, RichTextBlock, TextBlock -from wagtail import blocks -from wagtail.blocks import StructBlock -from wagtail.models import Orderable -from wagtail.fields import RichTextField -from wagtail.images.blocks import ImageChooserBlock -from wagtail.snippets.blocks import SnippetChooserBlock -from wagtail.snippets.models import register_snippet - - -class RightImageLeftText(blocks.StructBlock): - heading = blocks.CharBlock(required=False) - paragraph = blocks.RichTextBlock(required=False) - image = ImageChooserBlock() - links = blocks.ListBlock( - blocks.StructBlock( - [ - ("cta_url", blocks.URLBlock(required=False)), - ("cta_page", blocks.PageChooserBlock(required=False)), - ( - "cta_text", - blocks.CharBlock(required=False, default="Submit", max_length="50"), - ), - ("cta_image", ImageChooserBlock(required=False)), - ] - ) - ) - - class Meta: - template = "cms/streams/right_image_left_content.html" - icon = "image" - label = "Right Image Left Content" - - -class AboutApp(blocks.StructBlock): - heading = blocks.CharBlock(required=False) - paragraph = blocks.RichTextBlock(required=False) - image = ImageChooserBlock() - sub_heading = blocks.CharBlock(required=False) - sub_paragraph = blocks.RichTextBlock(required=False) - cta_url = blocks.URLBlock(required=False) - cta_page = blocks.PageChooserBlock(required=False) - cta_text = blocks.CharBlock(required=False, default="Submit", max_length="50") - links = blocks.ListBlock( - blocks.StructBlock( - [ - ("text", blocks.CharBlock(required=False)), - ] - ) - ) - - class Meta: - template = "cms/streams/aboutapp.html" - icon = "image" - label = "About App" - - -class Count(blocks.StructBlock): - links = blocks.ListBlock( - blocks.StructBlock( - [ - ("count", blocks.CharBlock(required=False, default=85)), - ("count_value", blocks.CharBlock(required=False)), - ("text", blocks.CharBlock(required=False)), - ] - ) - ) - - class Meta: - template = "cms/streams/count.html" - icon = "image" - label = "Count" - - -class AppFeatures(blocks.StructBlock): - heading = blocks.CharBlock(required=False) - description = blocks.RichTextBlock(required=False) - cards = blocks.ListBlock( - blocks.StructBlock( - [ - ("icon", blocks.CharBlock(required=False)), - ("card_heading", blocks.CharBlock(required=False)), - ("card_description", blocks.CharBlock(required=False)), - ] - ) - ) - - class Meta: - template = "cms/streams/app_features.html" - icon = "image" - label = "App Features" - - -class Pricing(blocks.StructBlock): - heading = blocks.CharBlock(required=False) - description = blocks.RichTextBlock(required=False) - cards = blocks.ListBlock( - blocks.StructBlock( - [ - ("card_heading", blocks.CharBlock(required=False)), - ("card_price", blocks.CharBlock(required=False)), - ("card_description", blocks.RichTextBlock(required=False)), - ("cta_url", blocks.URLBlock(required=False)), - ("cta_page", blocks.PageChooserBlock(required=False)), - ( - "cta_text", - blocks.CharBlock( - required=False, default="Choose Plan", max_length="50" - ), - ), - ] - ) - ) - - class Meta: - template = "cms/streams/pricing.html" - icon = "image" - label = "Pricing" - - -class Carousel(blocks.StructBlock): - sliders = blocks.ListBlock( - blocks.StructBlock( - [ - ("description", blocks.RichTextBlock(required=False)), - ("image", ImageChooserBlock()), - ("author", blocks.CharBlock(required=False)), - ("role", blocks.CharBlock(required=False)), - ] - ) - ) - - class Meta: - template = "cms/streams/carousel.html" - icon = "image" - label = "Carousel" - - -class LeftImageRightText(blocks.StructBlock): - heading = blocks.CharBlock(required=False) - paragraph = blocks.RichTextBlock(required=False) - image = ImageChooserBlock() - links = blocks.ListBlock( - blocks.StructBlock( - [ - ("cta_url", blocks.URLBlock(required=False)), - ("cta_page", blocks.PageChooserBlock(required=False)), - ( - "cta_text", - blocks.CharBlock(required=False, default="Submit", max_length="50"), - ), - ("cta_image", ImageChooserBlock(required=False)), - ] - ) - ) - - class Meta: - template = "cms/streams/left_image_right_content.html" - icon = "image" - label = "Left Image Right Content" - - -class HomeBlog(blocks.StructBlock): - heading = blocks.CharBlock(required=False) - description = blocks.RichTextBlock(required=False) - cards = blocks.ListBlock( - blocks.StructBlock( - [ - ("image", ImageChooserBlock()), - ("blog_tag", blocks.CharBlock(required=False)), - ("blog_heading", blocks.CharBlock(required=False)), - ("cta_url", blocks.URLBlock(required=False)), - ("cta_page", blocks.PageChooserBlock(required=False)), - ( - "cta_text", - blocks.CharBlock( - required=False, default="Read More", max_length="50" - ), - ), - ] - ) - ) - - class Meta: - template = "cms/streams/home_blog.html" - icon = "image" - label = "Home Blog" - - -class BlogContentTitleBlock(CharBlock): - title = CharBlock(required=True, help_text="add your title") - - class Meta: - template = "cms/streams/blog/content_title.html" - label = "Content Title" - - -class BlogCodeBlock(TextBlock): - code = CharBlock(required=True, help_text="add your title") - - class Meta: - template = "cms/streams/blog/code_block.html" - label = "Code Block" - - -class BlogRichTextBlock(RichTextBlock): - text = CharBlock(required=True, help_text="add your title") - - class Meta: - template = "cms/streams/blog/rich_text.html" - label = "Rich Text" - - -class BlogImageBlock(ImageChooserBlock): - image = ImageChooserBlock(required=True, help_text="add your title") - - class Meta: - template = "cms/streams/blog/image.html" - label = "Image" diff --git a/cms/migrations/0001_initial.py b/cms/migrations/0001_initial.py deleted file mode 100644 index 4d054cb5..00000000 --- a/cms/migrations/0001_initial.py +++ /dev/null @@ -1,116 +0,0 @@ -# Generated by Django 4.2.1 on 2023-06-19 13:08 - -import cms.blocks -from django.db import migrations, models -import django.db.models.deletion -import django_extensions.db.fields -import modelcluster.fields -import wagtail.blocks -import wagtail.contrib.routable_page.models -import wagtail.fields -import wagtail.images.blocks - - -class Migration(migrations.Migration): - - initial = True - - dependencies = [ - ('wagtailcore', '0083_workflowcontenttype'), - ('wagtailimages', '0025_alter_image_file_alter_rendition_file'), - ] - - operations = [ - migrations.CreateModel( - name='BlogDetailPage', - fields=[ - ('page_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='wagtailcore.page')), - ('excerpt', wagtail.fields.RichTextField()), - ('content', wagtail.fields.StreamField([('content_title', cms.blocks.BlogContentTitleBlock()), ('code', cms.blocks.BlogCodeBlock()), ('rich_text', cms.blocks.BlogRichTextBlock()), ('image', cms.blocks.BlogImageBlock())], null=True, use_json_field=True)), - ], - options={ - 'abstract': False, - }, - bases=('wagtailcore.page',), - ), - migrations.CreateModel( - name='BlogListPage', - fields=[ - ('page_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='wagtailcore.page')), - ('intro', wagtail.fields.RichTextField(blank=True)), - ], - options={ - 'abstract': False, - }, - bases=(wagtail.contrib.routable_page.models.RoutablePageMixin, 'wagtailcore.page'), - ), - migrations.CreateModel( - name='HomePage', - fields=[ - ('page_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='wagtailcore.page')), - ('content', wagtail.fields.StreamField([('right_image_left_content', wagtail.blocks.StructBlock([('heading', wagtail.blocks.CharBlock(required=False)), ('paragraph', wagtail.blocks.RichTextBlock(required=False)), ('image', wagtail.images.blocks.ImageChooserBlock()), ('links', wagtail.blocks.ListBlock(wagtail.blocks.StructBlock([('cta_url', wagtail.blocks.URLBlock(required=False)), ('cta_page', wagtail.blocks.PageChooserBlock(required=False)), ('cta_text', wagtail.blocks.CharBlock(default='Submit', max_length='50', required=False)), ('cta_image', wagtail.images.blocks.ImageChooserBlock(required=False))])))])), ('aboutapp', wagtail.blocks.StructBlock([('heading', wagtail.blocks.CharBlock(required=False)), ('paragraph', wagtail.blocks.RichTextBlock(required=False)), ('image', wagtail.images.blocks.ImageChooserBlock()), ('sub_heading', wagtail.blocks.CharBlock(required=False)), ('sub_paragraph', wagtail.blocks.RichTextBlock(required=False)), ('cta_url', wagtail.blocks.URLBlock(required=False)), ('cta_page', wagtail.blocks.PageChooserBlock(required=False)), ('cta_text', wagtail.blocks.CharBlock(default='Submit', max_length='50', required=False)), ('links', wagtail.blocks.ListBlock(wagtail.blocks.StructBlock([('text', wagtail.blocks.CharBlock(required=False))])))])), ('count', wagtail.blocks.StructBlock([('links', wagtail.blocks.ListBlock(wagtail.blocks.StructBlock([('count', wagtail.blocks.CharBlock(default=85, required=False)), ('count_value', wagtail.blocks.CharBlock(required=False)), ('text', wagtail.blocks.CharBlock(required=False))])))])), ('appfeatures', wagtail.blocks.StructBlock([('heading', wagtail.blocks.CharBlock(required=False)), ('description', wagtail.blocks.RichTextBlock(required=False)), ('cards', wagtail.blocks.ListBlock(wagtail.blocks.StructBlock([('icon', wagtail.blocks.CharBlock(required=False)), ('card_heading', wagtail.blocks.CharBlock(required=False)), ('card_description', wagtail.blocks.CharBlock(required=False))])))])), ('pricing', wagtail.blocks.StructBlock([('heading', wagtail.blocks.CharBlock(required=False)), ('description', wagtail.blocks.RichTextBlock(required=False)), ('cards', wagtail.blocks.ListBlock(wagtail.blocks.StructBlock([('card_heading', wagtail.blocks.CharBlock(required=False)), ('card_price', wagtail.blocks.CharBlock(required=False)), ('card_description', wagtail.blocks.RichTextBlock(required=False)), ('cta_url', wagtail.blocks.URLBlock(required=False)), ('cta_page', wagtail.blocks.PageChooserBlock(required=False)), ('cta_text', wagtail.blocks.CharBlock(default='Choose Plan', max_length='50', required=False))])))])), ('carousel', wagtail.blocks.StructBlock([('sliders', wagtail.blocks.ListBlock(wagtail.blocks.StructBlock([('description', wagtail.blocks.RichTextBlock(required=False)), ('image', wagtail.images.blocks.ImageChooserBlock()), ('author', wagtail.blocks.CharBlock(required=False)), ('role', wagtail.blocks.CharBlock(required=False))])))])), ('leftimagerighttext', wagtail.blocks.StructBlock([('heading', wagtail.blocks.CharBlock(required=False)), ('paragraph', wagtail.blocks.RichTextBlock(required=False)), ('image', wagtail.images.blocks.ImageChooserBlock()), ('links', wagtail.blocks.ListBlock(wagtail.blocks.StructBlock([('cta_url', wagtail.blocks.URLBlock(required=False)), ('cta_page', wagtail.blocks.PageChooserBlock(required=False)), ('cta_text', wagtail.blocks.CharBlock(default='Submit', max_length='50', required=False)), ('cta_image', wagtail.images.blocks.ImageChooserBlock(required=False))])))])), ('homeblog', wagtail.blocks.StructBlock([('heading', wagtail.blocks.CharBlock(required=False)), ('description', wagtail.blocks.RichTextBlock(required=False)), ('cards', wagtail.blocks.ListBlock(wagtail.blocks.StructBlock([('image', wagtail.images.blocks.ImageChooserBlock()), ('blog_tag', wagtail.blocks.CharBlock(required=False)), ('blog_heading', wagtail.blocks.CharBlock(required=False)), ('cta_url', wagtail.blocks.URLBlock(required=False)), ('cta_page', wagtail.blocks.PageChooserBlock(required=False)), ('cta_text', wagtail.blocks.CharBlock(default='Read More', max_length='50', required=False))])))]))], null=True, use_json_field=True)), - ], - options={ - 'abstract': False, - }, - bases=('wagtailcore.page',), - ), - migrations.CreateModel( - name='Menu', - fields=[ - ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('title', models.CharField(max_length=100, verbose_name='link_title')), - ('slug', django_extensions.db.fields.AutoSlugField(blank=True, editable=False, populate_from='title')), - ], - options={ - 'abstract': False, - }, - ), - migrations.CreateModel( - name='MenuItem', - fields=[ - ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('sort_order', models.IntegerField(blank=True, editable=False, null=True)), - ('link_title', models.CharField(blank=True, max_length=50, null=True, verbose_name='link_title')), - ('link_url', models.CharField(blank=True, max_length=500)), - ('open_in_new_tab', models.BooleanField(blank=True, default=False)), - ('link_page', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='+', to='wagtailcore.page')), - ('page', modelcluster.fields.ParentalKey(on_delete=django.db.models.deletion.CASCADE, related_name='menu_items', to='cms.menu')), - ], - options={ - 'ordering': ['sort_order'], - 'abstract': False, - }, - ), - migrations.CreateModel( - name='SubMenuItem', - fields=[ - ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('sort_order', models.IntegerField(blank=True, editable=False, null=True)), - ('link_title', models.CharField(blank=True, max_length=50, null=True, verbose_name='link_title')), - ('link_url', models.CharField(blank=True, max_length=500)), - ('open_in_new_tab', models.BooleanField(blank=True, default=False)), - ('link_page', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='+', to='wagtailcore.page')), - ('page', modelcluster.fields.ParentalKey(on_delete=django.db.models.deletion.CASCADE, related_name='sub_menu_items', to='cms.menuitem')), - ], - options={ - 'ordering': ['sort_order'], - 'abstract': False, - }, - ), - migrations.CreateModel( - name='SiteSettings', - fields=[ - ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('github', models.URLField(blank=True, help_text='Github URL', null=True)), - ('twitter', models.URLField(blank=True, help_text='Twitter URL', null=True)), - ('linkedin', models.URLField(blank=True, help_text='linkedin URL', null=True)), - ('sitemap', models.URLField(blank=True, help_text='Sitemap rss.xml', null=True)), - ('logo', models.ForeignKey(blank=True, default=None, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='wagtailimages.image')), - ('site', models.OneToOneField(editable=False, on_delete=django.db.models.deletion.CASCADE, to='wagtailcore.site')), - ], - options={ - 'abstract': False, - }, - ), - ] diff --git a/cms/models.py b/cms/models.py deleted file mode 100644 index 334c097f..00000000 --- a/cms/models.py +++ /dev/null @@ -1,297 +0,0 @@ -from django.core.paginator import EmptyPage, PageNotAnInteger, Paginator -from django.db import models -from django.shortcuts import render -from django.utils.translation import gettext_lazy as _ -from django_extensions.db.fields import AutoSlugField -from modelcluster.fields import ParentalKey -from modelcluster.models import ClusterableModel -from wagtail.admin.panels import ( - FieldPanel, - InlinePanel, - MultiFieldPanel, - PageChooserPanel, -) -from wagtail.contrib.routable_page.models import RoutablePageMixin, route -from wagtail.contrib.settings.models import BaseSiteSetting, register_setting -from wagtail import blocks -from wagtail.fields import StreamField -from wagtail.models import Orderable, Page -from wagtail.fields import RichTextField -# from wagtail.images. import ImageChooserPanel -from wagtail.snippets.models import register_snippet - -from cms import blocks - - -class HomePage(Page): - - content = StreamField( - [ - ("right_image_left_content", blocks.RightImageLeftText()), - ("aboutapp", blocks.AboutApp()), - ("count", blocks.Count()), - ("appfeatures", blocks.AppFeatures()), - ("pricing", blocks.Pricing()), - ("carousel", blocks.Carousel()), - ("leftimagerighttext", blocks.LeftImageRightText()), - ("homeblog", blocks.HomeBlog()), - ], - null=True, - blank=False, - use_json_field=True, - ) - - content_panels = Page.content_panels + [FieldPanel("content")] - - -# class BlogCategory(models.Model): -# name = models.CharField(max_length=255) -# slug = models.SlugField(max_length=255) - -# def __str__(self): -# return self.name - -# panels = [FieldPanel("name"), FieldPanel("slug")] - -# class Meta: -# ordering = ["name"] - -# register_snippet(BlogCategory) - - -class BlogListPage(RoutablePageMixin, Page): - - template = "cms/blog/blog_list_page.html" - max_count = 1 - intro = RichTextField(blank=True) - - @route(r"^(?P\d+)") - def get_context(self, request, *args, **kwargs): - # Update context to include only published posts, ordered by reverse-chron - # request.session.clear() - context = super().get_context(request, *args, **kwargs) - - all_posts = ( - BlogDetailPage.objects.live().public().order_by("-first_published_at") - ) - - paginator = Paginator(all_posts, 1) - - page = int(kwargs.get("page_num", 1)) - - try: - posts = paginator.page(page) - except PageNotAnInteger: - posts = paginator.page(1) - except EmptyPage: - posts = paginator.page(paginator.num_pages) - # context["category_count"] = BlogCategory.objects.annotate( - # num_posts=Count("blogdetailpage") - # ) - context["posts"] = posts - # context["categories"] = BlogCategory.objects.all() - if kwargs.get("page_num"): - return render(request, "cms/blog/blog_list_page.html", context) - else: - return context - - # @route(r"^category/(?P[-\w]*)/$", name="category_view") - # def category_view(self, request, cat_slug): - # context = self.get_context(request) - # category = BlogCategory.objects.get(slug=cat_slug) - # category_posts = ( - # BlogDetailPage.objects.live().public().filter(category=category) - # ) - - # paginator = Paginator(category_posts, 10) - - # # page = int(kwargs.get('page_num', 1)) - # page = 1 - - # try: - # category_posts = paginator.page(page) - # except PageNotAnInteger: - # category_posts = paginator.page(1) - # except EmptyPage: - # category_posts = paginator.page(paginator.num_pages) - - # context["category_posts"] = category_posts - # context["current_category"] = category - # return render(request, "blog/blog_category.html", context) - - # content_panels = Page.content_panels + [ - # FieldPanel("intro", classname="full"), - # ] - - -class BlogDetailPage(Page): - template = "cms/blog/blog_detail_page.html" - excerpt = RichTextField() - # show_legend = models.BooleanField(default=False) - # category = models.ForeignKey(BlogCategory, null=True, on_delete=models.SET_NULL) - - content = StreamField( - [ - ("content_title", blocks.BlogContentTitleBlock()), - ("code", blocks.BlogCodeBlock()), - ("rich_text", blocks.BlogRichTextBlock()), - ("image", blocks.BlogImageBlock()), - ], - null=True, - blank=False, - use_json_field=True, - ) - - content_panels = Page.content_panels + [ - # FieldPanel("category"), - # FieldPanel("show_legend"), - FieldPanel("excerpt"), - FieldPanel("content"), - ] - - -# ============================ Navigation Menu =============================================== - - -@register_snippet -class Menu(ClusterableModel): - """The main menu clusterable model.""" - - title = models.CharField(_("link_title"), max_length=100) - slug = AutoSlugField(populate_from="title", editable=True) - - panels = [ - MultiFieldPanel( - [ - FieldPanel("title"), - FieldPanel("slug"), - ], - heading="Menu", - ), - InlinePanel("menu_items", label="Menu Item"), - ] - - def __str__(self): - return self.title - - -class MenuItem(Orderable, ClusterableModel): - """The First level menu of the Navigationbar.""" - - link_title = models.CharField(_("link_title"), blank=True, null=True, max_length=50) - link_url = models.CharField(max_length=500, blank=True) - link_page = models.ForeignKey( - "wagtailcore.Page", - null=True, - blank=True, - related_name="+", - on_delete=models.CASCADE, - ) - open_in_new_tab = models.BooleanField(default=False, blank=True) - - page = ParentalKey("Menu", related_name="menu_items") - - panels = [ - MultiFieldPanel( - [ - FieldPanel("link_title"), - FieldPanel("link_url"), - PageChooserPanel("link_page"), - FieldPanel("open_in_new_tab"), - ], - heading="MenuItem", - ), - InlinePanel("sub_menu_items", label="Sub Menu Item"), - ] - - @property - def link(self): - if self.link_page: - return self.link_page.url - elif self.link_url: - return self.link_url - return "#" - - @property - def title(self): - if self.link_page and not self.link_title: - return self.link_page.title - elif self.link_title: - return self.link_title - return "Missing Title" - - -class SubMenuItem(Orderable): - """The Second level menu of the Navigationbar.""" - - link_title = models.CharField(_("link_title"), blank=True, null=True, max_length=50) - link_url = models.CharField(max_length=500, blank=True) - link_page = models.ForeignKey( - "wagtailcore.Page", - null=True, - blank=True, - related_name="+", - on_delete=models.CASCADE, - ) - - open_in_new_tab = models.BooleanField(default=False, blank=True) - - page = ParentalKey("MenuItem", related_name="sub_menu_items") - - panels = [ - MultiFieldPanel( - [ - FieldPanel("link_title"), - FieldPanel("link_url"), - PageChooserPanel("link_page"), - FieldPanel("open_in_new_tab"), - ], - heading="SubMenuItem", - ), - ] - - @property - def link(self): - if self.link_page: - return self.link_page.url - elif self.link_url: - return self.link_url - return "#" - - @property - def title(self): - if self.link_page and not self.link_title: - return self.link_page.title - elif self.link_title: - return self.link_title - return "Missing Title" - - -@register_setting -class SiteSettings(BaseSiteSetting): - """Site settings for our custom website.""" - - logo = models.ForeignKey( - "wagtailimages.Image", - null=True, - blank=True, - default=None, - on_delete=models.SET_NULL, - related_name="+", - ) - github = models.URLField(blank=True, null=True, help_text="Github URL") - twitter = models.URLField(blank=True, null=True, help_text="Twitter URL") - linkedin = models.URLField(blank=True, null=True, help_text="linkedin URL") - sitemap = models.URLField(blank=True, null=True, help_text="Sitemap rss.xml") - panels = [ - MultiFieldPanel( - [ - FieldPanel("github"), - FieldPanel("twitter"), - FieldPanel("linkedin"), - FieldPanel("sitemap"), - FieldPanel("logo"), - ], - heading="Site Settings", - ) - ] diff --git a/cms/templatetags/menus_tags.py b/cms/templatetags/menus_tags.py deleted file mode 100644 index b1fccaa2..00000000 --- a/cms/templatetags/menus_tags.py +++ /dev/null @@ -1,10 +0,0 @@ -from django import template - -from ..models import Menu - -register = template.Library() - - -@register.simple_tag() -def get_menu(slug): - return Menu.objects.get(slug=slug) diff --git a/cms/tests.py b/cms/tests.py deleted file mode 100644 index 7ce503c2..00000000 --- a/cms/tests.py +++ /dev/null @@ -1,3 +0,0 @@ -from django.test import TestCase - -# Create your tests here. diff --git a/cms/views.py b/cms/views.py deleted file mode 100644 index 91ea44a2..00000000 --- a/cms/views.py +++ /dev/null @@ -1,3 +0,0 @@ -from django.shortcuts import render - -# Create your views here. diff --git a/common/admin.py b/common/admin.py deleted file mode 100644 index f4fd4389..00000000 --- a/common/admin.py +++ /dev/null @@ -1,10 +0,0 @@ -from django.contrib import admin - -from common.models import Address, Comment, CommentFiles, User - -# Register your models here. - -admin.site.register(User) -admin.site.register(Address) -admin.site.register(Comment) -admin.site.register(CommentFiles) diff --git a/common/apps.py b/common/apps.py deleted file mode 100644 index 3ce38941..00000000 --- a/common/apps.py +++ /dev/null @@ -1,5 +0,0 @@ -from django.apps import AppConfig - - -class CommonConfig(AppConfig): - name = "common" diff --git a/common/base.py b/common/base.py deleted file mode 100644 index 6930f8f0..00000000 --- a/common/base.py +++ /dev/null @@ -1,38 +0,0 @@ -import uuid - -# Django imports -from django.db import models - -# Third party imports -from crum import get_current_user - -# Module imports -from common.mixins import AuditModel - - -class BaseModel(AuditModel): - id = models.UUIDField( - default=uuid.uuid4, unique=True, editable=False, db_index=True, primary_key=True - ) - - class Meta: - abstract = True - - def save(self, *args, **kwargs): - user = get_current_user() - if user is None or user.is_anonymous: - self.created_by = None - self.updated_by = None - super(BaseModel, self).save(*args, **kwargs) - else: - # Check if the model is being created or updated - if self._state.adding: - # If created only set created_by value: set updated_by to None - self.created_by = user - self.updated_by = None - # If updated only set updated_by value don't touch created_by - self.updated_by = user - super(BaseModel, self).save(*args, **kwargs) - - def __str__(self): - return str(self.id) \ No newline at end of file diff --git a/common/middleware/get_company.py b/common/middleware/get_company.py deleted file mode 100644 index a8694d6d..00000000 --- a/common/middleware/get_company.py +++ /dev/null @@ -1,75 +0,0 @@ -import jwt -from django.conf import settings -from django.contrib.auth import logout -from django.core.exceptions import ValidationError,PermissionDenied -from rest_framework import status -from rest_framework.response import Response -from crum import get_current_user -from django.utils.functional import SimpleLazyObject - -from common.models import Org, Profile, User - - -# def set_profile_request(request, org, token): -# # we are decoding the token -# decoded = jwt.decode(token, (settings.SECRET_KEY), algorithms=[settings.JWT_ALGO]) - -# request.user = User.objects.get(id=decoded["user_id"]) - -# if request.user: -# request.profile = Profile.objects.get( -# user=request.user, org=org, is_active=True -# ) -# request.profile.role = "ADMIN" -# request.profile.save() -# if request.profile is None: -# logout(request) -# return Response( -# {"error": False}, -# status=status.HTTP_200_OK, - # ) - -def get_actual_value(request): - if request.user is None: - return None - - return request.user #here should have value, so any code using request.user will work - -class GetProfileAndOrg(object): - def __init__(self, get_response): - self.get_response = get_response - - def __call__(self, request): - self.process_request(request) - return self.get_response(request) - - def process_request(self, request): - try : - request.profile = None - user_id = None - # here I am getting the the jwt token passing in header - if request.headers.get("Authorization"): - token1 = request.headers.get("Authorization") - token = token1.split(" ")[1] # getting the token value - decoded = jwt.decode(token, (settings.SECRET_KEY), algorithms=[settings.JWT_ALGO]) - user_id = decoded['user_id'] - api_key = request.headers.get('Token') # Get API key from request query params - if api_key: - try: - organization = Org.objects.get(api_key=api_key) - api_key_user = organization - request.META['org'] = api_key_user.id - profile = Profile.objects.filter(org=api_key_user, role="ADMIN").first() - user_id = profile.user.id - except Org.DoesNotExist: - raise AuthenticationFailed('Invalid API Key') - if user_id is not None: - if request.headers.get("org"): - profile = Profile.objects.get( - user_id=user_id, org=request.headers.get("org"), is_active=True - ) - if profile: - request.profile = profile - except : - print('test1') - raise PermissionDenied() diff --git a/common/migrations/0001_initial.py b/common/migrations/0001_initial.py deleted file mode 100644 index 15f3db3e..00000000 --- a/common/migrations/0001_initial.py +++ /dev/null @@ -1,192 +0,0 @@ -# Generated by Django 4.2.1 on 2023-06-19 13:08 - -import common.models -from django.conf import settings -import django.contrib.auth.models -from django.db import migrations, models -import django.db.models.deletion -import phonenumber_field.modelfields -import uuid - - -class Migration(migrations.Migration): - - initial = True - - dependencies = [ - ] - - operations = [ - migrations.CreateModel( - name='User', - fields=[ - ('password', models.CharField(max_length=128, verbose_name='password')), - ('last_login', models.DateTimeField(blank=True, null=True, verbose_name='last login')), - ('is_superuser', models.BooleanField(default=False, help_text='Designates that this user has all permissions without explicitly assigning them.', verbose_name='superuser status')), - ('id', models.UUIDField(db_index=True, default=uuid.uuid4, editable=False, primary_key=True, serialize=False, unique=True)), - ('email', models.EmailField(blank=True, max_length=254, unique=True, verbose_name='email address')), - ('profile_pic', models.FileField(blank=True, max_length=1000, null=True, upload_to=common.models.img_url)), - ('activation_key', models.CharField(blank=True, max_length=150, null=True)), - ('key_expires', models.DateTimeField(blank=True, null=True)), - ('is_active', models.BooleanField(default=True)), - ], - options={ - 'verbose_name': 'User', - 'verbose_name_plural': 'Users', - 'db_table': 'users', - 'ordering': ('-is_active',), - }, - managers=[ - ('objects', django.contrib.auth.models.UserManager()), - ], - ), - migrations.CreateModel( - name='Address', - fields=[ - ('created_at', models.DateTimeField(auto_now_add=True, verbose_name='Created At')), - ('updated_at', models.DateTimeField(auto_now=True, verbose_name='Last Modified At')), - ('id', models.UUIDField(db_index=True, default=uuid.uuid4, editable=False, primary_key=True, serialize=False, unique=True)), - ('address_line', models.CharField(blank=True, default='', max_length=255, verbose_name='Address')), - ('street', models.CharField(blank=True, default='', max_length=55, verbose_name='Street')), - ('city', models.CharField(blank=True, default='', max_length=255, verbose_name='City')), - ('state', models.CharField(blank=True, default='', max_length=255, verbose_name='State')), - ('postcode', models.CharField(blank=True, default='', max_length=64, verbose_name='Post/Zip-code')), - ('country', models.CharField(blank=True, choices=[('GB', 'United Kingdom'), ('AF', 'Afghanistan'), ('AX', 'Aland Islands'), ('AL', 'Albania'), ('DZ', 'Algeria'), ('AS', 'American Samoa'), ('AD', 'Andorra'), ('AO', 'Angola'), ('AI', 'Anguilla'), ('AQ', 'Antarctica'), ('AG', 'Antigua and Barbuda'), ('AR', 'Argentina'), ('AM', 'Armenia'), ('AW', 'Aruba'), ('AU', 'Australia'), ('AT', 'Austria'), ('AZ', 'Azerbaijan'), ('BS', 'Bahamas'), ('BH', 'Bahrain'), ('BD', 'Bangladesh'), ('BB', 'Barbados'), ('BY', 'Belarus'), ('BE', 'Belgium'), ('BZ', 'Belize'), ('BJ', 'Benin'), ('BM', 'Bermuda'), ('BT', 'Bhutan'), ('BO', 'Bolivia'), ('BA', 'Bosnia and Herzegovina'), ('BW', 'Botswana'), ('BV', 'Bouvet Island'), ('BR', 'Brazil'), ('IO', 'British Indian Ocean Territory'), ('BN', 'Brunei Darussalam'), ('BG', 'Bulgaria'), ('BF', 'Burkina Faso'), ('BI', 'Burundi'), ('KH', 'Cambodia'), ('CM', 'Cameroon'), ('CA', 'Canada'), ('CV', 'Cape Verde'), ('KY', 'Cayman Islands'), ('CF', 'Central African Republic'), ('TD', 'Chad'), ('CL', 'Chile'), ('CN', 'China'), ('CX', 'Christmas Island'), ('CC', 'Cocos (Keeling) Islands'), ('CO', 'Colombia'), ('KM', 'Comoros'), ('CG', 'Congo'), ('CD', 'Congo, The Democratic Republic of the'), ('CK', 'Cook Islands'), ('CR', 'Costa Rica'), ('CI', "Cote d'Ivoire"), ('HR', 'Croatia'), ('CU', 'Cuba'), ('CY', 'Cyprus'), ('CZ', 'Czech Republic'), ('DK', 'Denmark'), ('DJ', 'Djibouti'), ('DM', 'Dominica'), ('DO', 'Dominican Republic'), ('EC', 'Ecuador'), ('EG', 'Egypt'), ('SV', 'El Salvador'), ('GQ', 'Equatorial Guinea'), ('ER', 'Eritrea'), ('EE', 'Estonia'), ('ET', 'Ethiopia'), ('FK', 'Falkland Islands (Malvinas)'), ('FO', 'Faroe Islands'), ('FJ', 'Fiji'), ('FI', 'Finland'), ('FR', 'France'), ('GF', 'French Guiana'), ('PF', 'French Polynesia'), ('TF', 'French Southern Territories'), ('GA', 'Gabon'), ('GM', 'Gambia'), ('GE', 'Georgia'), ('DE', 'Germany'), ('GH', 'Ghana'), ('GI', 'Gibraltar'), ('GR', 'Greece'), ('GL', 'Greenland'), ('GD', 'Grenada'), ('GP', 'Guadeloupe'), ('GU', 'Guam'), ('GT', 'Guatemala'), ('GG', 'Guernsey'), ('GN', 'Guinea'), ('GW', 'Guinea-Bissau'), ('GY', 'Guyana'), ('HT', 'Haiti'), ('HM', 'Heard Island and McDonald Islands'), ('VA', 'Holy See (Vatican City State)'), ('HN', 'Honduras'), ('HK', 'Hong Kong'), ('HU', 'Hungary'), ('IS', 'Iceland'), ('IN', 'India'), ('ID', 'Indonesia'), ('IR', 'Iran, Islamic Republic of'), ('IQ', 'Iraq'), ('IE', 'Ireland'), ('IM', 'Isle of Man'), ('IL', 'Israel'), ('IT', 'Italy'), ('JM', 'Jamaica'), ('JP', 'Japan'), ('JE', 'Jersey'), ('JO', 'Jordan'), ('KZ', 'Kazakhstan'), ('KE', 'Kenya'), ('KI', 'Kiribati'), ('KP', "Korea, Democratic People's Republic of"), ('KR', 'Korea, Republic of'), ('KW', 'Kuwait'), ('KG', 'Kyrgyzstan'), ('LA', "Lao People's Democratic Republic"), ('LV', 'Latvia'), ('LB', 'Lebanon'), ('LS', 'Lesotho'), ('LR', 'Liberia'), ('LY', 'Libyan Arab Jamahiriya'), ('LI', 'Liechtenstein'), ('LT', 'Lithuania'), ('LU', 'Luxembourg'), ('MO', 'Macao'), ('MK', 'Macedonia, The Former Yugoslav Republic of'), ('MG', 'Madagascar'), ('MW', 'Malawi'), ('MY', 'Malaysia'), ('MV', 'Maldives'), ('ML', 'Mali'), ('MT', 'Malta'), ('MH', 'Marshall Islands'), ('MQ', 'Martinique'), ('MR', 'Mauritania'), ('MU', 'Mauritius'), ('YT', 'Mayotte'), ('MX', 'Mexico'), ('FM', 'Micronesia, Federated States of'), ('MD', 'Moldova'), ('MC', 'Monaco'), ('MN', 'Mongolia'), ('ME', 'Montenegro'), ('MS', 'Montserrat'), ('MA', 'Morocco'), ('MZ', 'Mozambique'), ('MM', 'Myanmar'), ('NA', 'Namibia'), ('NR', 'Nauru'), ('NP', 'Nepal'), ('NL', 'Netherlands'), ('AN', 'Netherlands Antilles'), ('NC', 'New Caledonia'), ('NZ', 'New Zealand'), ('NI', 'Nicaragua'), ('NE', 'Niger'), ('NG', 'Nigeria'), ('NU', 'Niue'), ('NF', 'Norfolk Island'), ('MP', 'Northern Mariana Islands'), ('NO', 'Norway'), ('OM', 'Oman'), ('PK', 'Pakistan'), ('PW', 'Palau'), ('PS', 'Palestinian Territory, Occupied'), ('PA', 'Panama'), ('PG', 'Papua New Guinea'), ('PY', 'Paraguay'), ('PE', 'Peru'), ('PH', 'Philippines'), ('PN', 'Pitcairn'), ('PL', 'Poland'), ('PT', 'Portugal'), ('PR', 'Puerto Rico'), ('QA', 'Qatar'), ('RE', 'Reunion'), ('RO', 'Romania'), ('RU', 'Russian Federation'), ('RW', 'Rwanda'), ('BL', 'Saint Barthelemy'), ('SH', 'Saint Helena'), ('KN', 'Saint Kitts and Nevis'), ('LC', 'Saint Lucia'), ('MF', 'Saint Martin'), ('PM', 'Saint Pierre and Miquelon'), ('VC', 'Saint Vincent and the Grenadines'), ('WS', 'Samoa'), ('SM', 'San Marino'), ('ST', 'Sao Tome and Principe'), ('SA', 'Saudi Arabia'), ('SN', 'Senegal'), ('RS', 'Serbia'), ('SC', 'Seychelles'), ('SL', 'Sierra Leone'), ('SG', 'Singapore'), ('SK', 'Slovakia'), ('SI', 'Slovenia'), ('SB', 'Solomon Islands'), ('SO', 'Somalia'), ('ZA', 'South Africa'), ('GS', 'South Georgia and the South Sandwich Islands'), ('ES', 'Spain'), ('LK', 'Sri Lanka'), ('SD', 'Sudan'), ('SR', 'Suriname'), ('SJ', 'Svalbard and Jan Mayen'), ('SZ', 'Swaziland'), ('SE', 'Sweden'), ('CH', 'Switzerland'), ('SY', 'Syrian Arab Republic'), ('TW', 'Taiwan, Province of China'), ('TJ', 'Tajikistan'), ('TZ', 'Tanzania, United Republic of'), ('TH', 'Thailand'), ('TL', 'Timor-Leste'), ('TG', 'Togo'), ('TK', 'Tokelau'), ('TO', 'Tonga'), ('TT', 'Trinidad and Tobago'), ('TN', 'Tunisia'), ('TR', 'Turkey'), ('TM', 'Turkmenistan'), ('TC', 'Turks and Caicos Islands'), ('TV', 'Tuvalu'), ('UG', 'Uganda'), ('UA', 'Ukraine'), ('AE', 'United Arab Emirates'), ('US', 'United States'), ('UM', 'United States Minor Outlying Islands'), ('UY', 'Uruguay'), ('UZ', 'Uzbekistan'), ('VU', 'Vanuatu'), ('VE', 'Venezuela'), ('VN', 'Viet Nam'), ('VG', 'Virgin Islands, British'), ('VI', 'Virgin Islands, U.S.'), ('WF', 'Wallis and Futuna'), ('EH', 'Western Sahara'), ('YE', 'Yemen'), ('ZM', 'Zambia'), ('ZW', 'Zimbabwe')], default='', max_length=3)), - ], - options={ - 'verbose_name': 'Address', - 'verbose_name_plural': 'Addresses', - 'db_table': 'address', - 'ordering': ('-created_at',), - }, - ), - migrations.CreateModel( - name='APISettings', - fields=[ - ('created_at', models.DateTimeField(auto_now_add=True, verbose_name='Created At')), - ('updated_at', models.DateTimeField(auto_now=True, verbose_name='Last Modified At')), - ('id', models.UUIDField(db_index=True, default=uuid.uuid4, editable=False, primary_key=True, serialize=False, unique=True)), - ('title', models.TextField()), - ('apikey', models.CharField(blank=True, max_length=16)), - ('website', models.URLField(max_length=255, null=True)), - ], - options={ - 'verbose_name': 'APISetting', - 'verbose_name_plural': 'APISettings', - 'db_table': 'apiSettings', - 'ordering': ('-created_at',), - }, - ), - migrations.CreateModel( - name='Attachments', - fields=[ - ('created_at', models.DateTimeField(auto_now_add=True, verbose_name='Created At')), - ('updated_at', models.DateTimeField(auto_now=True, verbose_name='Last Modified At')), - ('id', models.UUIDField(db_index=True, default=uuid.uuid4, editable=False, primary_key=True, serialize=False, unique=True)), - ('file_name', models.CharField(max_length=60)), - ('attachment', models.FileField(max_length=1001, upload_to='attachments/%Y/%m/')), - ], - options={ - 'verbose_name': 'Attachment', - 'verbose_name_plural': 'Attachments', - 'db_table': 'attachments', - 'ordering': ('-created_at',), - }, - ), - migrations.CreateModel( - name='Comment', - fields=[ - ('created_at', models.DateTimeField(auto_now_add=True, verbose_name='Created At')), - ('updated_at', models.DateTimeField(auto_now=True, verbose_name='Last Modified At')), - ('id', models.UUIDField(db_index=True, default=uuid.uuid4, editable=False, primary_key=True, serialize=False, unique=True)), - ('comment', models.CharField(max_length=255)), - ('commented_on', models.DateTimeField(auto_now_add=True)), - ], - options={ - 'verbose_name': 'Comment', - 'verbose_name_plural': 'Comments', - 'db_table': 'comment', - 'ordering': ('-created_at',), - }, - ), - migrations.CreateModel( - name='CommentFiles', - fields=[ - ('created_at', models.DateTimeField(auto_now_add=True, verbose_name='Created At')), - ('updated_at', models.DateTimeField(auto_now=True, verbose_name='Last Modified At')), - ('id', models.UUIDField(db_index=True, default=uuid.uuid4, editable=False, primary_key=True, serialize=False, unique=True)), - ('updated_on', models.DateTimeField(auto_now_add=True)), - ('comment_file', models.FileField(blank=True, null=True, upload_to='CommentFiles', verbose_name='File')), - ], - options={ - 'verbose_name': 'CommentFile', - 'verbose_name_plural': 'CommentFiles', - 'db_table': 'commentFiles', - 'ordering': ('-created_at',), - }, - ), - migrations.CreateModel( - name='Org', - fields=[ - ('created_at', models.DateTimeField(auto_now_add=True, verbose_name='Created At')), - ('updated_at', models.DateTimeField(auto_now=True, verbose_name='Last Modified At')), - ('id', models.UUIDField(db_index=True, default=uuid.uuid4, editable=False, primary_key=True, serialize=False, unique=True)), - ('name', models.CharField(blank=True, max_length=100, null=True)), - ('created_by', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='%(class)s_created_by', to=settings.AUTH_USER_MODEL, verbose_name='Created By')), - ('updated_by', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='%(class)s_updated_by', to=settings.AUTH_USER_MODEL, verbose_name='Last Modified By')), - ], - options={ - 'verbose_name': 'Organization', - 'verbose_name_plural': 'Organizations', - 'db_table': 'organization', - 'ordering': ('-created_at',), - }, - ), - migrations.CreateModel( - name='Profile', - fields=[ - ('created_at', models.DateTimeField(auto_now_add=True, verbose_name='Created At')), - ('updated_at', models.DateTimeField(auto_now=True, verbose_name='Last Modified At')), - ('id', models.UUIDField(db_index=True, default=uuid.uuid4, editable=False, primary_key=True, serialize=False, unique=True)), - ('phone', phonenumber_field.modelfields.PhoneNumberField(max_length=128, null=True, region=None, unique=True)), - ('alternate_phone', phonenumber_field.modelfields.PhoneNumberField(max_length=128, null=True, region=None)), - ('role', models.CharField(choices=[('ADMIN', 'ADMIN'), ('USER', 'USER')], default='USER', max_length=50)), - ('has_sales_access', models.BooleanField(default=False)), - ('has_marketing_access', models.BooleanField(default=False)), - ('is_active', models.BooleanField(default=True)), - ('is_organization_admin', models.BooleanField(default=False)), - ('date_of_joining', models.DateField(blank=True, null=True)), - ('address', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='adress_users', to='common.address')), - ('created_by', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='%(class)s_created_by', to=settings.AUTH_USER_MODEL, verbose_name='Created By')), - ('org', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='user_org', to='common.org')), - ('updated_by', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='%(class)s_updated_by', to=settings.AUTH_USER_MODEL, verbose_name='Last Modified By')), - ('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)), - ], - options={ - 'verbose_name': 'Profile', - 'verbose_name_plural': 'Profiles', - 'db_table': 'profile', - 'ordering': ('-created_at',), - }, - ), - migrations.CreateModel( - name='Document', - fields=[ - ('created_at', models.DateTimeField(auto_now_add=True, verbose_name='Created At')), - ('updated_at', models.DateTimeField(auto_now=True, verbose_name='Last Modified At')), - ('id', models.UUIDField(db_index=True, default=uuid.uuid4, editable=False, primary_key=True, serialize=False, unique=True)), - ('title', models.TextField(blank=True, null=True)), - ('document_file', models.FileField(max_length=5000, upload_to=common.models.document_path)), - ('status', models.CharField(choices=[('active', 'active'), ('inactive', 'inactive')], default='active', max_length=64)), - ('created_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='document_uploaded', to='common.profile')), - ('org', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='document_org', to='common.org')), - ('shared_to', models.ManyToManyField(related_name='document_shared_to', to='common.profile')), - ], - options={ - 'verbose_name': 'Document', - 'verbose_name_plural': 'Documents', - 'db_table': 'document', - 'ordering': ('-created_at',), - }, - ), - ] diff --git a/common/migrations/0002_initial.py b/common/migrations/0002_initial.py deleted file mode 100644 index aa21817c..00000000 --- a/common/migrations/0002_initial.py +++ /dev/null @@ -1,211 +0,0 @@ -# Generated by Django 4.2.1 on 2023-06-19 13:08 - -from django.conf import settings -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - initial = True - - dependencies = [ - ('leads', '0001_initial'), - ('invoices', '0001_initial'), - ('teams', '0001_initial'), - ('auth', '0012_alter_user_first_name_max_length'), - ('accounts', '0002_initial'), - ('opportunity', '0001_initial'), - ('contacts', '0001_initial'), - ('common', '0001_initial'), - ('tasks', '0001_initial'), - ('cases', '0002_initial'), - ('events', '0001_initial'), - ] - - operations = [ - migrations.AddField( - model_name='document', - name='teams', - field=models.ManyToManyField(related_name='document_teams', to='teams.teams'), - ), - migrations.AddField( - model_name='document', - name='updated_by', - field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='%(class)s_updated_by', to=settings.AUTH_USER_MODEL, verbose_name='Last Modified By'), - ), - migrations.AddField( - model_name='commentfiles', - name='comment', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='common.comment'), - ), - migrations.AddField( - model_name='commentfiles', - name='created_by', - field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='%(class)s_created_by', to=settings.AUTH_USER_MODEL, verbose_name='Created By'), - ), - migrations.AddField( - model_name='commentfiles', - name='updated_by', - field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='%(class)s_updated_by', to=settings.AUTH_USER_MODEL, verbose_name='Last Modified By'), - ), - migrations.AddField( - model_name='comment', - name='account', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='accounts_comments', to='accounts.account'), - ), - migrations.AddField( - model_name='comment', - name='case', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='cases', to='cases.case'), - ), - migrations.AddField( - model_name='comment', - name='commented_by', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='common.profile'), - ), - migrations.AddField( - model_name='comment', - name='contact', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='contact_comments', to='contacts.contact'), - ), - migrations.AddField( - model_name='comment', - name='created_by', - field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='%(class)s_created_by', to=settings.AUTH_USER_MODEL, verbose_name='Created By'), - ), - migrations.AddField( - model_name='comment', - name='event', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='events_comments', to='events.event'), - ), - migrations.AddField( - model_name='comment', - name='invoice', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='invoice_comments', to='invoices.invoice'), - ), - migrations.AddField( - model_name='comment', - name='lead', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='leads_comments', to='leads.lead'), - ), - migrations.AddField( - model_name='comment', - name='opportunity', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='opportunity_comments', to='opportunity.opportunity'), - ), - migrations.AddField( - model_name='comment', - name='profile', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='user_comments', to='common.profile'), - ), - migrations.AddField( - model_name='comment', - name='task', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='tasks_comments', to='tasks.task'), - ), - migrations.AddField( - model_name='comment', - name='updated_by', - field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='%(class)s_updated_by', to=settings.AUTH_USER_MODEL, verbose_name='Last Modified By'), - ), - migrations.AddField( - model_name='attachments', - name='account', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='account_attachment', to='accounts.account'), - ), - migrations.AddField( - model_name='attachments', - name='case', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='case_attachment', to='cases.case'), - ), - migrations.AddField( - model_name='attachments', - name='contact', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='contact_attachment', to='contacts.contact'), - ), - migrations.AddField( - model_name='attachments', - name='created_by', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='attachment_created_by', to='common.profile'), - ), - migrations.AddField( - model_name='attachments', - name='event', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='events_attachment', to='events.event'), - ), - migrations.AddField( - model_name='attachments', - name='invoice', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='invoice_attachment', to='invoices.invoice'), - ), - migrations.AddField( - model_name='attachments', - name='lead', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='lead_attachment', to='leads.lead'), - ), - migrations.AddField( - model_name='attachments', - name='opportunity', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='opportunity_attachment', to='opportunity.opportunity'), - ), - migrations.AddField( - model_name='attachments', - name='task', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='tasks_attachment', to='tasks.task'), - ), - migrations.AddField( - model_name='attachments', - name='updated_by', - field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='%(class)s_updated_by', to=settings.AUTH_USER_MODEL, verbose_name='Last Modified By'), - ), - migrations.AddField( - model_name='apisettings', - name='created_by', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='settings_created_by', to='common.profile'), - ), - migrations.AddField( - model_name='apisettings', - name='lead_assigned_to', - field=models.ManyToManyField(related_name='lead_assignee_users', to='common.profile'), - ), - migrations.AddField( - model_name='apisettings', - name='org', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='org_api_settings', to='common.org'), - ), - migrations.AddField( - model_name='apisettings', - name='tags', - field=models.ManyToManyField(blank=True, to='accounts.tags'), - ), - migrations.AddField( - model_name='apisettings', - name='updated_by', - field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='%(class)s_updated_by', to=settings.AUTH_USER_MODEL, verbose_name='Last Modified By'), - ), - migrations.AddField( - model_name='address', - name='created_by', - field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='%(class)s_created_by', to=settings.AUTH_USER_MODEL, verbose_name='Created By'), - ), - migrations.AddField( - model_name='address', - name='updated_by', - field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='%(class)s_updated_by', to=settings.AUTH_USER_MODEL, verbose_name='Last Modified By'), - ), - migrations.AddField( - model_name='user', - name='groups', - field=models.ManyToManyField(blank=True, help_text='The groups this user belongs to. A user will get all permissions granted to each of their groups.', related_name='user_set', related_query_name='user', to='auth.group', verbose_name='groups'), - ), - migrations.AddField( - model_name='user', - name='user_permissions', - field=models.ManyToManyField(blank=True, help_text='Specific permissions for this user.', related_name='user_set', related_query_name='user', to='auth.permission', verbose_name='user permissions'), - ), - migrations.AlterUniqueTogether( - name='profile', - unique_together={('user', 'org')}, - ), - ] diff --git a/common/migrations/0003_alter_user_profile_pic.py b/common/migrations/0003_alter_user_profile_pic.py deleted file mode 100644 index c6fa937f..00000000 --- a/common/migrations/0003_alter_user_profile_pic.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 4.2.1 on 2023-07-12 09:52 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('common', '0002_initial'), - ] - - operations = [ - migrations.AlterField( - model_name='user', - name='profile_pic', - field=models.CharField(blank=True, max_length=1000, null=True), - ), - ] diff --git a/common/migrations/0004_alter_profile_alternate_phone.py b/common/migrations/0004_alter_profile_alternate_phone.py deleted file mode 100644 index 7a83303a..00000000 --- a/common/migrations/0004_alter_profile_alternate_phone.py +++ /dev/null @@ -1,19 +0,0 @@ -# Generated by Django 4.2.1 on 2023-07-21 11:23 - -from django.db import migrations -import phonenumber_field.modelfields - - -class Migration(migrations.Migration): - - dependencies = [ - ('common', '0003_alter_user_profile_pic'), - ] - - operations = [ - migrations.AlterField( - model_name='profile', - name='alternate_phone', - field=phonenumber_field.modelfields.PhoneNumberField(blank=True, max_length=128, null=True, region=None), - ), - ] diff --git a/common/migrations/0005_org_api_key.py b/common/migrations/0005_org_api_key.py deleted file mode 100644 index 2fb1db59..00000000 --- a/common/migrations/0005_org_api_key.py +++ /dev/null @@ -1,19 +0,0 @@ -# Generated by Django 4.2.1 on 2023-11-02 11:19 - -import common.models -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('common', '0004_alter_profile_alternate_phone'), - ] - - operations = [ - migrations.AddField( - model_name='org', - name='api_key', - field=models.TextField(default=common.models.generate_unique_key, editable=False), - ), - ] diff --git a/common/migrations/0006_alter_org_api_key.py b/common/migrations/0006_alter_org_api_key.py deleted file mode 100644 index fb672699..00000000 --- a/common/migrations/0006_alter_org_api_key.py +++ /dev/null @@ -1,30 +0,0 @@ -# Generated by Django 4.2.1 on 2023-11-02 11:20 - -import common.models -from django.db import migrations, models -import uuid - -def generate_unique_key(): - return str(uuid.uuid4()) - -def set_unique_api_keys(apps, schema_editor): - Org = apps.get_model('common', 'Org') - for org in Org.objects.all(): - org.api_key = generate_unique_key() - org.save() - - -class Migration(migrations.Migration): - - dependencies = [ - ('common', '0005_org_api_key'), - ] - - operations = [ - migrations.RunPython(set_unique_api_keys), - migrations.AlterField( - model_name='org', - name='api_key', - field=models.TextField(default=common.models.generate_unique_key, editable=False, unique=True), - ), - ] diff --git a/common/migrations/0007_org_is_active.py b/common/migrations/0007_org_is_active.py deleted file mode 100644 index 0f274f21..00000000 --- a/common/migrations/0007_org_is_active.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 4.2.1 on 2023-11-02 11:42 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('common', '0006_alter_org_api_key'), - ] - - operations = [ - migrations.AddField( - model_name='org', - name='is_active', - field=models.BooleanField(default=True), - ), - ] diff --git a/common/migrations/0008_alter_user_managers.py b/common/migrations/0008_alter_user_managers.py deleted file mode 100644 index a5470099..00000000 --- a/common/migrations/0008_alter_user_managers.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 4.2.1 on 2024-02-14 06:22 - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('common', '0007_org_is_active'), - ] - - operations = [ - migrations.AlterModelManagers( - name='user', - managers=[ - ], - ), - ] diff --git a/common/migrations/0009_user_is_staff.py b/common/migrations/0009_user_is_staff.py deleted file mode 100644 index 99541d50..00000000 --- a/common/migrations/0009_user_is_staff.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 4.2.1 on 2024-02-14 07:11 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('common', '0008_alter_user_managers'), - ] - - operations = [ - migrations.AddField( - model_name='user', - name='is_staff', - field=models.BooleanField(default=False, verbose_name='staff status'), - ), - ] diff --git a/common/mixins.py b/common/mixins.py deleted file mode 100644 index d99d997f..00000000 --- a/common/mixins.py +++ /dev/null @@ -1,50 +0,0 @@ -# Python imports -import uuid - -# Django imports -from common.models import models - - -class TimeAuditModel(models.Model): - - """To path when the record was created and last modified""" - - created_at = models.DateTimeField( - auto_now_add=True, - verbose_name="Created At", - ) - updated_at = models.DateTimeField(auto_now=True, verbose_name="Last Modified At") - - class Meta: - abstract = True - - -class UserAuditModel(models.Model): - - """To path when the record was created and last modified""" - - created_by = models.ForeignKey( - "common.User", - on_delete=models.SET_NULL, - related_name="%(class)s_created_by", - verbose_name="Created By", - null=True, - ) - updated_by = models.ForeignKey( - "common.User", - on_delete=models.SET_NULL, - related_name="%(class)s_updated_by", - verbose_name="Last Modified By", - null=True, - ) - - class Meta: - abstract = True - - -class AuditModel(TimeAuditModel, UserAuditModel): - - """To path when the record was created and last modified""" - - class Meta: - abstract = True \ No newline at end of file diff --git a/common/serializer.py b/common/serializer.py deleted file mode 100644 index 409de6bf..00000000 --- a/common/serializer.py +++ /dev/null @@ -1,379 +0,0 @@ -import re - -from django.contrib.auth import authenticate -from django.contrib.auth.hashers import check_password -from django.contrib.auth.tokens import default_token_generator -from django.utils.http import urlsafe_base64_decode -from rest_framework import serializers -from rest_framework_simplejwt.tokens import AccessToken, RefreshToken - -from common.models import ( - Address, - APISettings, - Attachments, - Comment, - Document, - Org, - Profile, - User, -) - - -class OrganizationSerializer(serializers.ModelSerializer): - class Meta: - model = Org - fields = ("id", "name","api_key") - - -class SocialLoginSerializer(serializers.Serializer): - token = serializers.CharField() - - -class CommentSerializer(serializers.ModelSerializer): - class Meta: - model = Comment - fields = ( - "id", - "comment", - "commented_on", - "commented_by", - "account", - "lead", - "opportunity", - "contact", - "case", - "task", - "invoice", - "event", - "profile", - ) - - -class LeadCommentSerializer(serializers.ModelSerializer): - class Meta: - model = Comment - fields = ( - "id", - "comment", - "commented_on", - "commented_by", - "lead", - ) - - - -class OrgProfileCreateSerializer(serializers.ModelSerializer): - """ - It is for creating organization - """ - - name = serializers.CharField(max_length=255) - - class Meta: - model = Org - fields = ["name"] - extra_kwargs = { - "name": {"required": True} - } - - def validate_name(self, name): - if bool(re.search(r"[~\!_.@#\$%\^&\*\ \(\)\+{}\":;'/\[\]]", name)): - raise serializers.ValidationError( - "organization name should not contain any special characters" - ) - if Org.objects.filter(name=name).exists(): - raise serializers.ValidationError( - "Organization already exists with this name" - ) - return name - - -class ShowOrganizationListSerializer(serializers.ModelSerializer): - """ - we are using it for show orjanization list - """ - - org = OrganizationSerializer() - - class Meta: - model = Profile - fields = ( - "role", - "alternate_phone", - "has_sales_access", - "has_marketing_access", - "is_organization_admin", - "org", - ) - - -class BillingAddressSerializer(serializers.ModelSerializer): - country = serializers.SerializerMethodField() - - def get_country(self, obj): - return obj.get_country_display() - - class Meta: - model = Address - fields = ("address_line", "street", "city", "state", "postcode", "country") - - def __init__(self, *args, **kwargs): - account_view = kwargs.pop("account", False) - - super().__init__(*args, **kwargs) - - if account_view: - self.fields["address_line"].required = True - self.fields["street"].required = True - self.fields["city"].required = True - self.fields["state"].required = True - self.fields["postcode"].required = True - self.fields["country"].required = True - - -class CreateUserSerializer(serializers.ModelSerializer): - - class Meta: - model = User - fields = ( - "email", - "profile_pic", - ) - - def __init__(self, *args, **kwargs): - self.org = kwargs.pop("org", None) - super().__init__(*args, **kwargs) - self.fields["email"].required = True - - def validate_email(self, email): - if self.instance: - if self.instance.email != email: - if not Profile.objects.filter(user__email=email, org=self.org).exists(): - return email - raise serializers.ValidationError("Email already exists") - return email - if not Profile.objects.filter(user__email=email.lower(), org=self.org).exists(): - return email - raise serializers.ValidationError("Given Email id already exists") - - -class CreateProfileSerializer(serializers.ModelSerializer): - class Meta: - model = Profile - fields = ( - "role", - "phone", - "alternate_phone", - "has_sales_access", - "has_marketing_access", - "is_organization_admin", - ) - - def __init__(self, *args, **kwargs): - super().__init__(*args, **kwargs) - self.fields["alternate_phone"].required = False - self.fields["role"].required = True - self.fields["phone"].required = True - - -class UserSerializer(serializers.ModelSerializer): - - class Meta: - model = User - fields = ["id","email","profile_pic"] - - -class ProfileSerializer(serializers.ModelSerializer): - # address = BillingAddressSerializer() - - class Meta: - model = Profile - fields = ( - "id", - "user_details", - "role", - "address", - "has_marketing_access", - "has_sales_access", - "phone", - "date_of_joining", - "is_active", - ) - - -class AttachmentsSerializer(serializers.ModelSerializer): - file_path = serializers.SerializerMethodField() - - def get_file_path(self, obj): - if obj.attachment: - return obj.attachment.url - None - - class Meta: - model = Attachments - fields = ["id", "created_by", "file_name", "created_at", "file_path"] - - -class DocumentSerializer(serializers.ModelSerializer): - shared_to = ProfileSerializer(read_only=True, many=True) - teams = serializers.SerializerMethodField() - created_by = UserSerializer() - org = OrganizationSerializer() - - def get_teams(self, obj): - return obj.teams.all().values() - - class Meta: - model = Document - fields = [ - "id", - "title", - "document_file", - "status", - "shared_to", - "teams", - "created_at", - "created_by", - "org", - ] - - -class DocumentCreateSerializer(serializers.ModelSerializer): - def __init__(self, *args, **kwargs): - request_obj = kwargs.pop("request_obj", None) - super().__init__(*args, **kwargs) - self.fields["title"].required = True - self.org = request_obj.profile.org - - def validate_title(self, title): - if self.instance: - if ( - Document.objects.filter(title__iexact=title, org=self.org) - .exclude(id=self.instance.id) - .exists() - ): - raise serializers.ValidationError( - "Document with this Title already exists" - ) - if Document.objects.filter(title__iexact=title, org=self.org).exists(): - raise serializers.ValidationError("Document with this Title already exists") - return title - - class Meta: - model = Document - fields = ["title", "document_file", "status", "org"] - - -def find_urls(string): - # website_regex = "^((http|https)://)?([A-Za-z0-9.-]+\.[A-Za-z]{2,63})?$" # (http(s)://)google.com or google.com - # website_regex = "^https?://([A-Za-z0-9.-]+\.[A-Za-z]{2,63})?$" # (http(s)://)google.com - # http(s)://google.com - website_regex = "^https?://[A-Za-z0-9.-]+\.[A-Za-z]{2,63}$" - # http(s)://google.com:8000 - website_regex_port = "^https?://[A-Za-z0-9.-]+\.[A-Za-z]{2,63}:[0-9]{2,4}$" - url = re.findall(website_regex, string) - url_port = re.findall(website_regex_port, string) - if url and url[0] != "": - return url - return url_port - - -class APISettingsSerializer(serializers.ModelSerializer): - def __init__(self, *args, **kwargs): - super().__init__(*args, **kwargs) - - class Meta: - model = APISettings - fields = ("title", "website") - - def validate_website(self, website): - if website and not ( - website.startswith("http://") or website.startswith("https://") - ): - raise serializers.ValidationError("Please provide valid schema") - if not len(find_urls(website)) > 0: - raise serializers.ValidationError( - "Please provide a valid URL with schema and without trailing slash - Example: http://google.com" - ) - return website - - -class APISettingsListSerializer(serializers.ModelSerializer): - created_by = UserSerializer() - lead_assigned_to = ProfileSerializer(read_only=True, many=True) - tags = serializers.SerializerMethodField() - org = OrganizationSerializer() - - def get_tags(self, obj): - return obj.tags.all().values() - - class Meta: - model = APISettings - fields = [ - "title", - "apikey", - "website", - "created_at", - "created_by", - "lead_assigned_to", - "tags", - "org", - ] - -class APISettingsSwaggerSerializer(serializers.ModelSerializer): - class Meta: - model = APISettings - fields = [ - "title", - "website", - "lead_assigned_to", - "tags", - ] - - -class DocumentCreateSwaggerSerializer(serializers.ModelSerializer): - class Meta: - model = Document - fields = [ - "title", - "document_file", - "teams", - "shared_to", - ] - -class DocumentEditSwaggerSerializer(serializers.ModelSerializer): - class Meta: - model = Document - fields = [ - "title", - "document_file", - "teams", - "shared_to", - "status" - ] - - -class UserCreateSwaggerSerializer(serializers.Serializer): - """ - It is swagger for creating or updating user - """ - ROLE_CHOICES = ["ADMIN", "USER"] - - email = serializers.CharField(max_length=1000,required=True) - role = serializers.ChoiceField(choices = ROLE_CHOICES,required=True) - phone = serializers.CharField(max_length=12) - alternate_phone = serializers.CharField(max_length=12) - address_line = serializers.CharField(max_length=10000,required=True) - street = serializers.CharField(max_length=1000) - city = serializers.CharField(max_length=1000) - state = serializers.CharField(max_length=1000) - pincode = serializers.CharField(max_length=1000) - country = serializers.CharField(max_length=1000) - -class UserUpdateStatusSwaggerSerializer(serializers.Serializer): - - STATUS_CHOICES = ["Active", "Inactive"] - - status = serializers.ChoiceField(choices = STATUS_CHOICES,required=True) - - diff --git a/common/urls.py b/common/urls.py deleted file mode 100644 index 7dcd5607..00000000 --- a/common/urls.py +++ /dev/null @@ -1,28 +0,0 @@ -from django.urls import path -from rest_framework_simplejwt import views as jwt_views - -from common import views - -app_name = "api_common" - - -urlpatterns = [ - path("dashboard/", views.ApiHomeView.as_view()), - path( - "auth/refresh-token/", - jwt_views.TokenRefreshView.as_view(), - name="token_refresh", - ), - # GoogleLoginView - path("auth/google/", views.GoogleLoginView.as_view()), - path("org/", views.OrgProfileCreateView.as_view()), - path("profile/", views.ProfileView.as_view()), - path("users/get-teams-and-users/", views.GetTeamsAndUsersView.as_view()), - path("users/", views.UsersListView.as_view()), - path("user//", views.UserDetailView.as_view()), - path("documents/", views.DocumentListView.as_view()), - path("documents//", views.DocumentDetailView.as_view()), - path("api-settings/", views.DomainList.as_view()), - path("api-settings//", views.DomainDetailView.as_view()), - path("user//status/", views.UserStatusView.as_view()), -] diff --git a/common/views.py b/common/views.py deleted file mode 100644 index 94785d15..00000000 --- a/common/views.py +++ /dev/null @@ -1,911 +0,0 @@ -import json -import secrets -from multiprocessing import context -from re import template - -import requests -from django.contrib.auth.base_user import BaseUserManager -from django.contrib.auth.hashers import make_password -from rest_framework_simplejwt.tokens import RefreshToken -from rest_framework.utils import json -from django.conf import settings -from django.contrib.auth import authenticate, login -from django.contrib.auth.hashers import make_password -from django.db import transaction -from django.db.models import Q -from django.http.response import JsonResponse -from django.shortcuts import get_object_or_404, render -from django.utils import timezone -from django.utils.encoding import force_str -from django.utils.http import urlsafe_base64_decode -from django.utils.translation import gettext as _ -from django.views import View -from django.views.decorators.csrf import csrf_exempt -from django.views.decorators.http import require_http_methods -from drf_spectacular.types import OpenApiTypes -from drf_spectacular.utils import OpenApiExample, OpenApiParameter, extend_schema -#from common.external_auth import CustomDualAuthentication -from rest_framework import status -from rest_framework.authtoken.models import Token -from rest_framework.pagination import LimitOffsetPagination -from rest_framework.permissions import IsAuthenticated -from rest_framework.response import Response -from rest_framework.views import APIView - -from accounts.models import Account, Contact, Tags -from accounts.serializer import AccountSerializer -from cases.models import Case -from cases.serializer import CaseSerializer - -##from common.custom_auth import JSONWebTokenAuthentication -from common import serializer, swagger_params1 -from common.models import APISettings, Document, Org, Profile, User -from common.serializer import * -# from common.serializer import ( -# CreateUserSerializer, -# PasswordChangeSerializer, -# RegisterOrganizationSerializer, -# ) -from common.tasks import ( - resend_activation_link_to_user, - send_email_to_new_user, - send_email_to_reset_password, - send_email_user_delete, -) -from common.token_generator import account_activation_token - -# from rest_framework_jwt.serializers import jwt_encode_handler -from common.utils import COUNTRIES, ROLES, jwt_payload_handler -from contacts.serializer import ContactSerializer -from leads.models import Lead -from leads.serializer import LeadSerializer -from opportunity.models import Opportunity -from opportunity.serializer import OpportunitySerializer -from teams.models import Teams -from teams.serializer import TeamsSerializer - - -class GetTeamsAndUsersView(APIView): - - permission_classes = (IsAuthenticated,) - - @extend_schema(tags=["users"], parameters=swagger_params1.organization_params) - def get(self, request, *args, **kwargs): - data = {} - teams = Teams.objects.filter(org=request.profile.org).order_by("-id") - teams_data = TeamsSerializer(teams, many=True).data - profiles = Profile.objects.filter(is_active=True, org=request.profile.org).order_by( - "user__email" - ) - profiles_data = ProfileSerializer(profiles, many=True).data - data["teams"] = teams_data - data["profiles"] = profiles_data - return Response(data) - - -class UsersListView(APIView, LimitOffsetPagination): - - permission_classes = (IsAuthenticated,) - @extend_schema(parameters=swagger_params1.organization_params,request=UserCreateSwaggerSerializer) - def post(self, request, format=None): - print(request.profile.role, request.user.is_superuser) - if self.request.profile.role != "ADMIN" and not self.request.user.is_superuser: - return Response( - {"error": True, "errors": "Permission Denied"}, - status=status.HTTP_403_FORBIDDEN, - ) - else: - params = request.data - if params: - user_serializer = CreateUserSerializer(data=params, org=request.profile.org) - address_serializer = BillingAddressSerializer(data=params) - profile_serializer = CreateProfileSerializer(data=params) - data = {} - if not user_serializer.is_valid(): - data["user_errors"] = dict(user_serializer.errors) - if not profile_serializer.is_valid(): - data["profile_errors"] = profile_serializer.errors - if not address_serializer.is_valid(): - data["address_errors"] = (address_serializer.errors,) - if data: - return Response( - {"error": True, "errors": data}, - status=status.HTTP_400_BAD_REQUEST, - ) - if address_serializer.is_valid(): - address_obj = address_serializer.save() - user = user_serializer.save( - is_active=True, - ) - user.email = user.email - user.save() - # if params.get("password"): - # user.set_password(params.get("password")) - # user.save() - profile = Profile.objects.create( - user=user, - date_of_joining=timezone.now(), - role=params.get("role"), - address=address_obj, - org=request.profile.org, - ) - - # send_email_to_new_user.delay( - # profile.id, - # request.profile.org.id, - # ) - return Response( - {"error": False, "message": "User Created Successfully"}, - status=status.HTTP_201_CREATED, - ) - - - @extend_schema(parameters=swagger_params1.user_list_params) - def get(self, request, format=None): - if self.request.profile.role != "ADMIN" and not self.request.user.is_superuser: - return Response( - {"error": True, "errors": "Permission Denied"}, - status=status.HTTP_403_FORBIDDEN, - ) - queryset = Profile.objects.filter(org=request.profile.org).order_by("-id") - params = request.query_params - if params: - if params.get("email"): - queryset = queryset.filter(user__email__icontains=params.get("email")) - if params.get("role"): - queryset = queryset.filter(role=params.get("role")) - if params.get("status"): - queryset = queryset.filter(is_active=params.get("status")) - - context = {} - queryset_active_users = queryset.filter(is_active=True) - results_active_users = self.paginate_queryset( - queryset_active_users.distinct(), self.request, view=self - ) - active_users = ProfileSerializer(results_active_users, many=True).data - if results_active_users: - offset = queryset_active_users.filter( - id__gte=results_active_users[-1].id - ).count() - if offset == queryset_active_users.count(): - offset = None - else: - offset = 0 - context["active_users"] = { - "active_users_count": self.count, - "active_users": active_users, - "offset": offset, - } - - queryset_inactive_users = queryset.filter(is_active=False) - results_inactive_users = self.paginate_queryset( - queryset_inactive_users.distinct(), self.request, view=self - ) - inactive_users = ProfileSerializer(results_inactive_users, many=True).data - if results_inactive_users: - offset = queryset_inactive_users.filter( - id__gte=results_inactive_users[-1].id - ).count() - if offset == queryset_inactive_users.count(): - offset = None - else: - offset = 0 - context["inactive_users"] = { - "inactive_users_count": self.count, - "inactive_users": inactive_users, - "offset": offset, - } - - context["admin_email"] = settings.ADMIN_EMAIL - context["roles"] = ROLES - context["status"] = [("True", "Active"), ("False", "In Active")] - return Response(context) - - -class UserDetailView(APIView): - permission_classes = (IsAuthenticated,) - - def get_object(self, pk): - profile = get_object_or_404(Profile, pk=pk) - return profile - - @extend_schema(tags=["users"], parameters=swagger_params1.organization_params) - def get(self, request, pk, format=None): - profile_obj = self.get_object(pk) - if ( - self.request.profile.role != "ADMIN" - and not self.request.profile.is_admin - and self.request.profile.id != profile_obj.id - ): - return Response( - {"error": True, "errors": "Permission Denied"}, - status=status.HTTP_403_FORBIDDEN, - ) - if profile_obj.org != request.profile.org: - return Response( - {"error": True, "errors": "User company doesnot match with header...."}, - status=status.HTTP_403_FORBIDDEN, - ) - assigned_data = Profile.objects.filter(org=request.profile.org, is_active=True).values( - "id", "user__email" - ) - context = {} - context["profile_obj"] = ProfileSerializer(profile_obj).data - opportunity_list = Opportunity.objects.filter(assigned_to=profile_obj) - context["opportunity_list"] = OpportunitySerializer( - opportunity_list, many=True - ).data - contacts = Contact.objects.filter(assigned_to=profile_obj) - context["contacts"] = ContactSerializer(contacts, many=True).data - cases = Case.objects.filter(assigned_to=profile_obj) - context["cases"] = CaseSerializer(cases, many=True).data - context["assigned_data"] = assigned_data - comments = profile_obj.user_comments.all() - context["comments"] = CommentSerializer(comments, many=True).data - context["countries"] = COUNTRIES - return Response( - {"error": False, "data": context}, - status=status.HTTP_200_OK, - ) - - @extend_schema(tags=["users"],parameters=swagger_params1.organization_params, request=UserCreateSwaggerSerializer) - def put(self, request, pk, format=None): - params = request.data - profile = self.get_object(pk) - address_obj = profile.address - if ( - self.request.profile.role != "ADMIN" - and not self.request.user.is_superuser - and self.request.profile.id != profile.id - ): - return Response( - {"error": True, "errors": "Permission Denied"}, - status=status.HTTP_403_FORBIDDEN, - ) - - if profile.org != request.profile.org: - return Response( - {"error": True, "errors": "User company doesnot match with header...."}, - status=status.HTTP_403_FORBIDDEN, - ) - serializer = CreateUserSerializer( - data=params, instance=profile.user, org=request.profile.org - ) - address_serializer = BillingAddressSerializer(data=params, instance=address_obj) - profile_serializer = CreateProfileSerializer(data=params, instance=profile) - data = {} - if not serializer.is_valid(): - data["contact_errors"] = serializer.errors - if not address_serializer.is_valid(): - data["address_errors"] = (address_serializer.errors,) - if not profile_serializer.is_valid(): - data["profile_errors"] = (profile_serializer.errors,) - if data: - data["error"] = True - return Response( - data, - status=status.HTTP_400_BAD_REQUEST, - ) - if address_serializer.is_valid(): - address_obj = address_serializer.save() - user = serializer.save() - user.email = user.email - user.save() - if profile_serializer.is_valid(): - profile = profile_serializer.save() - return Response( - {"error": False, "message": "User Updated Successfully"}, - status=status.HTTP_200_OK, - ) - return Response( - {"error": True, "errors": serializer.errors}, - status=status.HTTP_400_BAD_REQUEST, - ) - - @extend_schema( - tags=["users"],parameters=swagger_params1.organization_params - ) - def delete(self, request, pk, format=None): - if self.request.profile.role != "ADMIN" and not self.request.profile.is_admin: - return Response( - {"error": True, "errors": "Permission Denied"}, - status=status.HTTP_403_FORBIDDEN, - ) - self.object = self.get_object(pk) - if self.object.id == request.profile.id: - return Response( - {"error": True, "errors": "Permission Denied"}, - status=status.HTTP_403_FORBIDDEN, - ) - deleted_by = self.request.profile.user.email - send_email_user_delete.delay( - self.object.user.email, - deleted_by=deleted_by, - ) - self.object.delete() - return Response({"status": "success"}, status=status.HTTP_200_OK) - - -# check_header not working -class ApiHomeView(APIView): - - permission_classes = (IsAuthenticated,) - - @extend_schema(parameters=swagger_params1.organization_params) - def get(self, request, format=None): - accounts = Account.objects.filter(status="open", org=request.profile.org) - contacts = Contact.objects.filter(org=request.profile.org) - leads = Lead.objects.filter(org=request.profile.org).exclude( - Q(status="converted") | Q(status="closed") - ) - opportunities = Opportunity.objects.filter(org=request.profile.org) - - if self.request.profile.role != "ADMIN" and not self.request.user.is_superuser: - accounts = accounts.filter( - Q(assigned_to=self.request.profile) | Q(created_by=self.request.profile.user) - ) - contacts = contacts.filter( - Q(assigned_to__id__in=self.request.profile) - | Q(created_by=self.request.profile.user) - ) - leads = leads.filter( - Q(assigned_to__id__in=self.request.profile) - | Q(created_by=self.request.profile.user) - ).exclude(status="closed") - opportunities = opportunities.filter( - Q(assigned_to__id__in=self.request.profile) - | Q(created_by=self.request.profile.user) - ) - context = {} - context["accounts_count"] = accounts.count() - context["contacts_count"] = contacts.count() - context["leads_count"] = leads.count() - context["opportunities_count"] = opportunities.count() - context["accounts"] = AccountSerializer(accounts, many=True).data - context["contacts"] = ContactSerializer(contacts, many=True).data - context["leads"] = LeadSerializer(leads, many=True).data - context["opportunities"] = OpportunitySerializer(opportunities, many=True).data - return Response(context, status=status.HTTP_200_OK) - - -class OrgProfileCreateView(APIView): - #authentication_classes = (CustomDualAuthentication,) - permission_classes = (IsAuthenticated,) - - model1 = Org - model2 = Profile - serializer_class = OrgProfileCreateSerializer - profile_serializer = CreateProfileSerializer - - @extend_schema( - description="Organization and profile Creation api", - request=OrgProfileCreateSerializer - ) - def post(self, request, format=None): - data = request.data - data['api_key'] = secrets.token_hex(16) - serializer = self.serializer_class(data=data) - if serializer.is_valid(): - org_obj = serializer.save() - - # now creating the profile - profile_obj = self.model2.objects.create(user=request.user, org=org_obj) - # now the current user is the admin of the newly created organisation - profile_obj.is_organization_admin = True - profile_obj.role = 'ADMIN' - profile_obj.save() - - return Response( - { - "error": False, - "message": "New Org is Created.", - "org": self.serializer_class(org_obj).data, - "status": status.HTTP_201_CREATED, - } - ) - else: - return Response( - { - "error": True, - "errors": serializer.errors, - "status": status.HTTP_400_BAD_REQUEST, - } - ) - - @extend_schema( - description="Just Pass the token, will return ORG list, associated with user" - ) - def get(self, request, format=None): - """ - here we are passing profile list of the user, where org details also included - """ - profile_list = Profile.objects.filter(user=request.user) - serializer = ShowOrganizationListSerializer(profile_list, many=True) - return Response( - { - "error": False, - "status": status.HTTP_200_OK, - "profile_org_list": serializer.data, - } - ) - - -class ProfileView(APIView): - permission_classes = (IsAuthenticated,) - - @extend_schema(parameters=swagger_params1.organization_params) - def get(self, request, format=None): - # profile=Profile.objects.get(user=request.user) - context = {} - context["user_obj"] = ProfileSerializer(self.request.profile).data - return Response(context, status=status.HTTP_200_OK) - -class DocumentListView(APIView, LimitOffsetPagination): - #authentication_classes = (CustomDualAuthentication,) - permission_classes = (IsAuthenticated,) - model = Document - - def get_context_data(self, **kwargs): - params = self.request.query_params - queryset = self.model.objects.filter(org=self.request.profile.org).order_by("-id") - if self.request.user.is_superuser or self.request.profile.role == "ADMIN": - queryset = queryset - else: - if self.request.profile.documents(): - doc_ids = self.request.profile.documents().values_list("id", flat=True) - shared_ids = queryset.filter( - Q(status="active") & Q(shared_to__id__in=[self.request.profile.id]) - ).values_list("id", flat=True) - queryset = queryset.filter(Q(id__in=doc_ids) | Q(id__in=shared_ids)) - else: - queryset = queryset.filter( - Q(status="active") & Q(shared_to__id__in=[self.request.profile.id]) - ) - - request_post = params - if request_post: - if request_post.get("title"): - queryset = queryset.filter(title__icontains=request_post.get("title")) - if request_post.get("status"): - queryset = queryset.filter(status=request_post.get("status")) - - if request_post.get("shared_to"): - queryset = queryset.filter( - shared_to__id__in=json.loads(request_post.get("shared_to")) - ) - - context = {} - profile_list = Profile.objects.filter(is_active=True, org=self.request.profile.org) - if self.request.profile.role == "ADMIN" or self.request.profile.is_admin: - profiles = profile_list.order_by("user__email") - else: - profiles = profile_list.filter(role="ADMIN").order_by("user__email") - search = False - if ( - params.get("document_file") - or params.get("status") - or params.get("shared_to") - ): - search = True - context["search"] = search - - queryset_documents_active = queryset.filter(status="active") - results_documents_active = self.paginate_queryset( - queryset_documents_active.distinct(), self.request, view=self - ) - documents_active = DocumentSerializer(results_documents_active, many=True).data - if results_documents_active: - offset = queryset_documents_active.filter( - id__gte=results_documents_active[-1].id - ).count() - if offset == queryset_documents_active.count(): - offset = None - else: - offset = 0 - context["documents_active"] = { - "documents_active_count": self.count, - "documents_active": documents_active, - "offset": offset, - } - - queryset_documents_inactive = queryset.filter(status="inactive") - results_documents_inactive = self.paginate_queryset( - queryset_documents_inactive.distinct(), self.request, view=self - ) - documents_inactive = DocumentSerializer( - results_documents_inactive, many=True - ).data - if results_documents_inactive: - offset = queryset_documents_inactive.filter( - id__gte=results_documents_active[-1].id - ).count() - if offset == queryset_documents_inactive.count(): - offset = None - else: - offset = 0 - context["documents_inactive"] = { - "documents_inactive_count": self.count, - "documents_inactive": documents_inactive, - "offset": offset, - } - - context["users"] = ProfileSerializer(profiles, many=True).data - context["status_choices"] = Document.DOCUMENT_STATUS_CHOICE - return context - - @extend_schema( - tags=["documents"], parameters=swagger_params1.document_get_params - ) - def get(self, request, *args, **kwargs): - context = self.get_context_data(**kwargs) - return Response(context) - - @extend_schema( - tags=["documents"], parameters=swagger_params1.organization_params,request=DocumentCreateSwaggerSerializer - ) - def post(self, request, *args, **kwargs): - params = request.data - serializer = DocumentCreateSerializer(data=params, request_obj=request) - if serializer.is_valid(): - doc = serializer.save( - created_by=request.profile.user, - org=request.profile.org, - document_file=request.FILES.get("document_file"), - ) - if params.get("shared_to"): - assinged_to_list = params.get("shared_to") - profiles = Profile.objects.filter( - id__in=assinged_to_list, org=request.profile.org, is_active=True - ) - if profiles: - doc.shared_to.add(*profiles) - if params.get("teams"): - teams_list = params.get("teams") - teams = Teams.objects.filter(id__in=teams_list, org=request.profile.org) - if teams: - doc.teams.add(*teams) - - return Response( - {"error": False, "message": "Document Created Successfully"}, - status=status.HTTP_201_CREATED, - ) - return Response( - {"error": True, "errors": serializer.errors}, - status=status.HTTP_400_BAD_REQUEST, - ) - - -class DocumentDetailView(APIView): - #authentication_classes = (CustomDualAuthentication,) - permission_classes = (IsAuthenticated,) - - def get_object(self, pk): - return Document.objects.filter(id=pk).first() - - @extend_schema( - tags=["documents"], parameters=swagger_params1.organization_params - ) - def get(self, request, pk, format=None): - self.object = self.get_object(pk) - if not self.object: - return Response( - {"error": True, "errors": "Document does not exist"}, - status=status.HTTP_403_FORBIDDEN, - ) - if self.object.org != self.request.profile.org: - return Response( - {"error": True, "errors": "User company doesnot match with header...."}, - status=status.HTTP_403_FORBIDDEN, - ) - if self.request.profile.role != "ADMIN" and not self.request.user.is_superuser: - if not ( - (self.request.profile == self.object.created_by) - or (self.request.profile in self.object.shared_to.all()) - ): - return Response( - { - "error": True, - "errors": "You do not have Permission to perform this action", - }, - status=status.HTTP_403_FORBIDDEN, - ) - profile_list = Profile.objects.filter(org=self.request.profile.org) - if request.profile.role == "ADMIN" or request.user.is_superuser: - profiles = profile_list.order_by("user__email") - else: - profiles = profile_list.filter(role="ADMIN").order_by("user__email") - context = {} - context.update( - { - "doc_obj": DocumentSerializer(self.object).data, - "file_type_code": self.object.file_type()[1], - "users": ProfileSerializer(profiles, many=True).data, - } - ) - return Response(context, status=status.HTTP_200_OK) - - @extend_schema( - tags=["documents"], parameters=swagger_params1.organization_params - ) - def delete(self, request, pk, format=None): - document = self.get_object(pk) - if not document: - return Response( - {"error": True, "errors": "Documdnt does not exist"}, - status=status.HTTP_403_FORBIDDEN, - ) - if document.org != self.request.profile.org: - return Response( - {"error": True, "errors": "User company doesnot match with header...."}, - status=status.HTTP_403_FORBIDDEN, - ) - - if self.request.profile.role != "ADMIN" and not self.request.user.is_superuser: - if ( - self.request.profile != document.created_by - ): # or (self.request.profile not in document.shared_to.all()): - return Response( - { - "error": True, - "errors": "You do not have Permission to perform this action", - }, - status=status.HTTP_403_FORBIDDEN, - ) - document.delete() - return Response( - {"error": False, "message": "Document deleted Successfully"}, - status=status.HTTP_200_OK, - ) - - - @extend_schema( - tags=["documents"], parameters=swagger_params1.organization_params,request=DocumentEditSwaggerSerializer - ) - def put(self, request, pk, format=None): - self.object = self.get_object(pk) - params = request.data - if not self.object: - return Response( - {"error": True, "errors": "Document does not exist"}, - status=status.HTTP_403_FORBIDDEN, - ) - if self.object.org != self.request.profile.org: - return Response( - {"error": True, "errors": "User company doesnot match with header...."}, - status=status.HTTP_403_FORBIDDEN, - ) - if self.request.profile.role != "ADMIN" and not self.request.user.is_superuser: - if not ( - (self.request.profile == self.object.created_by) - or (self.request.profile in self.object.shared_to.all()) - ): - return Response( - { - "error": True, - "errors": "You do not have Permission to perform this action", - }, - status=status.HTTP_403_FORBIDDEN, - ) - serializer = DocumentCreateSerializer( - data=params, instance=self.object, request_obj=request - ) - if serializer.is_valid(): - doc = serializer.save( - document_file=request.FILES.get("document_file"), - status=params.get("status"), - org=request.profile.org, - ) - doc.shared_to.clear() - if params.get("shared_to"): - assinged_to_list = params.get("shared_to") - profiles = Profile.objects.filter( - id__in=assinged_to_list, org=request.profile.org, is_active=True - ) - if profiles: - doc.shared_to.add(*profiles) - - doc.teams.clear() - if params.get("teams"): - teams_list = params.get("teams") - teams = Teams.objects.filter(id__in=teams_list, org=request.profile.org) - if teams: - doc.teams.add(*teams) - return Response( - {"error": False, "message": "Document Updated Successfully"}, - status=status.HTTP_200_OK, - ) - return Response( - {"error": True, "errors": serializer.errors}, - status=status.HTTP_400_BAD_REQUEST, - ) - - -class UserStatusView(APIView): - permission_classes = (IsAuthenticated,) - - @extend_schema( - description="User Status View",parameters=swagger_params1.organization_params, request=UserUpdateStatusSwaggerSerializer - ) - def post(self, request, pk, format=None): - if self.request.profile.role != "ADMIN" and not self.request.user.is_superuser: - return Response( - { - "error": True, - "errors": "You do not have permission to perform this action", - }, - status=status.HTTP_403_FORBIDDEN, - ) - params = request.data - profiles = Profile.objects.filter(org=request.profile.org) - profile = profiles.get(id=pk) - - if params.get("status"): - user_status = params.get("status") - if user_status == "Active": - profile.is_active = True - elif user_status == "Inactive": - profile.is_active = False - else: - return Response( - {"error": True, "errors": "Please enter Valid Status for user"}, - status=status.HTTP_400_BAD_REQUEST, - ) - profile.save() - - context = {} - active_profiles = profiles.filter(is_active=True) - inactive_profiles = profiles.filter(is_active=False) - context["active_profiles"] = ProfileSerializer(active_profiles, many=True).data - context["inactive_profiles"] = ProfileSerializer( - inactive_profiles, many=True - ).data - return Response(context) - - -class DomainList(APIView): - model = APISettings - permission_classes = (IsAuthenticated,) - - @extend_schema( - tags=["Settings"],parameters=swagger_params1.organization_params - ) - def get(self, request, *args, **kwargs): - api_settings = APISettings.objects.filter(org=request.profile.org) - users = Profile.objects.filter(is_active=True, org=request.profile.org).order_by( - "user__email" - ) - return Response( - { - "error": False, - "api_settings": APISettingsListSerializer(api_settings, many=True).data, - "users": ProfileSerializer(users, many=True).data, - }, - status=status.HTTP_200_OK, - ) - - @extend_schema( - tags=["Settings"],parameters=swagger_params1.organization_params, request=APISettingsSwaggerSerializer - ) - def post(self, request, *args, **kwargs): - params = request.data - assign_to_list = [] - if params.get("lead_assigned_to"): - assign_to_list = params.get("lead_assigned_to") - serializer = APISettingsSerializer(data=params) - if serializer.is_valid(): - settings_obj = serializer.save(created_by=request.profile.user, org=request.profile.org) - if params.get("tags"): - tags = params.get("tags") - for tag in tags: - tag_obj = Tags.objects.filter(name=tag).first() - if not tag_obj: - tag_obj = Tags.objects.create(name=tag) - settings_obj.tags.add(tag_obj) - if assign_to_list: - settings_obj.lead_assigned_to.add(*assign_to_list) - return Response( - {"error": False, "message": "API key added sucessfully"}, - status=status.HTTP_201_CREATED, - ) - return Response( - {"error": True, "errors": serializer.errors}, - status=status.HTTP_400_BAD_REQUEST, - ) - - -class DomainDetailView(APIView): - model = APISettings - #authentication_classes = (CustomDualAuthentication,) - permission_classes = (IsAuthenticated,) - - @extend_schema( - tags=["Settings"],parameters=swagger_params1.organization_params - ) - def get(self, request, pk, format=None): - api_setting = self.get_object(pk) - return Response( - {"error": False, "domain": APISettingsListSerializer(api_setting).data}, - status=status.HTTP_200_OK, - ) - - @extend_schema( - tags=["Settings"],parameters=swagger_params1.organization_params, request=APISettingsSwaggerSerializer - ) - def put(self, request, pk, **kwargs): - api_setting = self.get_object(pk) - params = request.data - assign_to_list = [] - if params.get("lead_assigned_to"): - assign_to_list = params.get("lead_assigned_to") - serializer = APISettingsSerializer(data=params, instance=api_setting) - if serializer.is_valid(): - api_setting = serializer.save() - api_setting.tags.clear() - api_setting.lead_assigned_to.clear() - if params.get("tags"): - tags = params.get("tags") - for tag in tags: - tag_obj = Tags.objects.filter(name=tag).first() - if not tag_obj: - tag_obj = Tags.objects.create(name=tag) - api_setting.tags.add(tag_obj) - if assign_to_list: - api_setting.lead_assigned_to.add(*assign_to_list) - return Response( - {"error": False, "message": "API setting Updated sucessfully"}, - status=status.HTTP_200_OK, - ) - return Response( - {"error": True, "errors": serializer.errors}, - status=status.HTTP_400_BAD_REQUEST, - ) - - @extend_schema( - tags=["Settings"],parameters=swagger_params1.organization_params - ) - def delete(self, request, pk, **kwargs): - api_setting = self.get_object(pk) - if api_setting: - api_setting.delete() - return Response( - {"error": False, "message": "API setting deleted sucessfully"}, - status=status.HTTP_200_OK, - ) - -class GoogleLoginView(APIView): - """ - Check for authentication with google - post: - Returns token of logged In user - """ - - - @extend_schema( - description="Login through Google", request=SocialLoginSerializer, - ) - def post(self, request): - payload = {'access_token': request.data.get("token")} # validate the token - r = requests.get('https://www.googleapis.com/oauth2/v2/userinfo', params=payload) - data = json.loads(r.text) - print(data) - if 'error' in data: - content = {'message': 'wrong google token / this google token is already expired.'} - return Response(content) - # create user if not exist - try: - user = User.objects.get(email=data['email']) - except User.DoesNotExist: - user = User() - user.email = data['email'] - user.profile_pic = data['picture'] - # provider random default password - user.password = make_password(BaseUserManager().make_random_password()) - user.email = data['email'] - user.save() - token = RefreshToken.for_user(user) # generate token without username & password - response = {} - response['username'] = user.email - response['access_token'] = str(token.access_token) - response['refresh_token'] = str(token) - response['user_id'] = user.id - return Response(response) diff --git a/contacts/migrations/0001_initial.py b/contacts/migrations/0001_initial.py deleted file mode 100644 index 87991dd5..00000000 --- a/contacts/migrations/0001_initial.py +++ /dev/null @@ -1,60 +0,0 @@ -# Generated by Django 4.2.1 on 2023-06-19 13:08 - -from django.conf import settings -from django.db import migrations, models -import django.db.models.deletion -import phonenumber_field.modelfields -import uuid - - -class Migration(migrations.Migration): - - initial = True - - dependencies = [ - ('common', '0001_initial'), - migrations.swappable_dependency(settings.AUTH_USER_MODEL), - ('teams', '0001_initial'), - ] - - operations = [ - migrations.CreateModel( - name='Contact', - fields=[ - ('created_at', models.DateTimeField(auto_now_add=True, verbose_name='Created At')), - ('updated_at', models.DateTimeField(auto_now=True, verbose_name='Last Modified At')), - ('id', models.UUIDField(db_index=True, default=uuid.uuid4, editable=False, primary_key=True, serialize=False, unique=True)), - ('salutation', models.CharField(blank=True, default='', max_length=255, verbose_name='Salutation')), - ('first_name', models.CharField(max_length=255, verbose_name='First name')), - ('last_name', models.CharField(max_length=255, verbose_name='Last name')), - ('date_of_birth', models.DateField(blank=True, null=True)), - ('organization', models.CharField(max_length=255, null=True, verbose_name='Organization')), - ('title', models.CharField(blank=True, default='', max_length=255, verbose_name='Title')), - ('primary_email', models.EmailField(max_length=254, unique=True)), - ('secondary_email', models.EmailField(blank=True, default='', max_length=254)), - ('mobile_number', phonenumber_field.modelfields.PhoneNumberField(max_length=128, null=True, region=None, unique=True)), - ('secondary_number', phonenumber_field.modelfields.PhoneNumberField(max_length=128, null=True, region=None)), - ('department', models.CharField(max_length=255, null=True, verbose_name='Department')), - ('language', models.CharField(max_length=255, null=True, verbose_name='Language')), - ('do_not_call', models.BooleanField(default=False)), - ('description', models.TextField(blank=True, null=True)), - ('linked_in_url', models.URLField(blank=True, null=True)), - ('facebook_url', models.URLField(blank=True, null=True)), - ('twitter_username', models.CharField(max_length=255, null=True)), - ('is_active', models.BooleanField(default=False)), - ('country', models.CharField(blank=True, choices=[('GB', 'United Kingdom'), ('AF', 'Afghanistan'), ('AX', 'Aland Islands'), ('AL', 'Albania'), ('DZ', 'Algeria'), ('AS', 'American Samoa'), ('AD', 'Andorra'), ('AO', 'Angola'), ('AI', 'Anguilla'), ('AQ', 'Antarctica'), ('AG', 'Antigua and Barbuda'), ('AR', 'Argentina'), ('AM', 'Armenia'), ('AW', 'Aruba'), ('AU', 'Australia'), ('AT', 'Austria'), ('AZ', 'Azerbaijan'), ('BS', 'Bahamas'), ('BH', 'Bahrain'), ('BD', 'Bangladesh'), ('BB', 'Barbados'), ('BY', 'Belarus'), ('BE', 'Belgium'), ('BZ', 'Belize'), ('BJ', 'Benin'), ('BM', 'Bermuda'), ('BT', 'Bhutan'), ('BO', 'Bolivia'), ('BA', 'Bosnia and Herzegovina'), ('BW', 'Botswana'), ('BV', 'Bouvet Island'), ('BR', 'Brazil'), ('IO', 'British Indian Ocean Territory'), ('BN', 'Brunei Darussalam'), ('BG', 'Bulgaria'), ('BF', 'Burkina Faso'), ('BI', 'Burundi'), ('KH', 'Cambodia'), ('CM', 'Cameroon'), ('CA', 'Canada'), ('CV', 'Cape Verde'), ('KY', 'Cayman Islands'), ('CF', 'Central African Republic'), ('TD', 'Chad'), ('CL', 'Chile'), ('CN', 'China'), ('CX', 'Christmas Island'), ('CC', 'Cocos (Keeling) Islands'), ('CO', 'Colombia'), ('KM', 'Comoros'), ('CG', 'Congo'), ('CD', 'Congo, The Democratic Republic of the'), ('CK', 'Cook Islands'), ('CR', 'Costa Rica'), ('CI', "Cote d'Ivoire"), ('HR', 'Croatia'), ('CU', 'Cuba'), ('CY', 'Cyprus'), ('CZ', 'Czech Republic'), ('DK', 'Denmark'), ('DJ', 'Djibouti'), ('DM', 'Dominica'), ('DO', 'Dominican Republic'), ('EC', 'Ecuador'), ('EG', 'Egypt'), ('SV', 'El Salvador'), ('GQ', 'Equatorial Guinea'), ('ER', 'Eritrea'), ('EE', 'Estonia'), ('ET', 'Ethiopia'), ('FK', 'Falkland Islands (Malvinas)'), ('FO', 'Faroe Islands'), ('FJ', 'Fiji'), ('FI', 'Finland'), ('FR', 'France'), ('GF', 'French Guiana'), ('PF', 'French Polynesia'), ('TF', 'French Southern Territories'), ('GA', 'Gabon'), ('GM', 'Gambia'), ('GE', 'Georgia'), ('DE', 'Germany'), ('GH', 'Ghana'), ('GI', 'Gibraltar'), ('GR', 'Greece'), ('GL', 'Greenland'), ('GD', 'Grenada'), ('GP', 'Guadeloupe'), ('GU', 'Guam'), ('GT', 'Guatemala'), ('GG', 'Guernsey'), ('GN', 'Guinea'), ('GW', 'Guinea-Bissau'), ('GY', 'Guyana'), ('HT', 'Haiti'), ('HM', 'Heard Island and McDonald Islands'), ('VA', 'Holy See (Vatican City State)'), ('HN', 'Honduras'), ('HK', 'Hong Kong'), ('HU', 'Hungary'), ('IS', 'Iceland'), ('IN', 'India'), ('ID', 'Indonesia'), ('IR', 'Iran, Islamic Republic of'), ('IQ', 'Iraq'), ('IE', 'Ireland'), ('IM', 'Isle of Man'), ('IL', 'Israel'), ('IT', 'Italy'), ('JM', 'Jamaica'), ('JP', 'Japan'), ('JE', 'Jersey'), ('JO', 'Jordan'), ('KZ', 'Kazakhstan'), ('KE', 'Kenya'), ('KI', 'Kiribati'), ('KP', "Korea, Democratic People's Republic of"), ('KR', 'Korea, Republic of'), ('KW', 'Kuwait'), ('KG', 'Kyrgyzstan'), ('LA', "Lao People's Democratic Republic"), ('LV', 'Latvia'), ('LB', 'Lebanon'), ('LS', 'Lesotho'), ('LR', 'Liberia'), ('LY', 'Libyan Arab Jamahiriya'), ('LI', 'Liechtenstein'), ('LT', 'Lithuania'), ('LU', 'Luxembourg'), ('MO', 'Macao'), ('MK', 'Macedonia, The Former Yugoslav Republic of'), ('MG', 'Madagascar'), ('MW', 'Malawi'), ('MY', 'Malaysia'), ('MV', 'Maldives'), ('ML', 'Mali'), ('MT', 'Malta'), ('MH', 'Marshall Islands'), ('MQ', 'Martinique'), ('MR', 'Mauritania'), ('MU', 'Mauritius'), ('YT', 'Mayotte'), ('MX', 'Mexico'), ('FM', 'Micronesia, Federated States of'), ('MD', 'Moldova'), ('MC', 'Monaco'), ('MN', 'Mongolia'), ('ME', 'Montenegro'), ('MS', 'Montserrat'), ('MA', 'Morocco'), ('MZ', 'Mozambique'), ('MM', 'Myanmar'), ('NA', 'Namibia'), ('NR', 'Nauru'), ('NP', 'Nepal'), ('NL', 'Netherlands'), ('AN', 'Netherlands Antilles'), ('NC', 'New Caledonia'), ('NZ', 'New Zealand'), ('NI', 'Nicaragua'), ('NE', 'Niger'), ('NG', 'Nigeria'), ('NU', 'Niue'), ('NF', 'Norfolk Island'), ('MP', 'Northern Mariana Islands'), ('NO', 'Norway'), ('OM', 'Oman'), ('PK', 'Pakistan'), ('PW', 'Palau'), ('PS', 'Palestinian Territory, Occupied'), ('PA', 'Panama'), ('PG', 'Papua New Guinea'), ('PY', 'Paraguay'), ('PE', 'Peru'), ('PH', 'Philippines'), ('PN', 'Pitcairn'), ('PL', 'Poland'), ('PT', 'Portugal'), ('PR', 'Puerto Rico'), ('QA', 'Qatar'), ('RE', 'Reunion'), ('RO', 'Romania'), ('RU', 'Russian Federation'), ('RW', 'Rwanda'), ('BL', 'Saint Barthelemy'), ('SH', 'Saint Helena'), ('KN', 'Saint Kitts and Nevis'), ('LC', 'Saint Lucia'), ('MF', 'Saint Martin'), ('PM', 'Saint Pierre and Miquelon'), ('VC', 'Saint Vincent and the Grenadines'), ('WS', 'Samoa'), ('SM', 'San Marino'), ('ST', 'Sao Tome and Principe'), ('SA', 'Saudi Arabia'), ('SN', 'Senegal'), ('RS', 'Serbia'), ('SC', 'Seychelles'), ('SL', 'Sierra Leone'), ('SG', 'Singapore'), ('SK', 'Slovakia'), ('SI', 'Slovenia'), ('SB', 'Solomon Islands'), ('SO', 'Somalia'), ('ZA', 'South Africa'), ('GS', 'South Georgia and the South Sandwich Islands'), ('ES', 'Spain'), ('LK', 'Sri Lanka'), ('SD', 'Sudan'), ('SR', 'Suriname'), ('SJ', 'Svalbard and Jan Mayen'), ('SZ', 'Swaziland'), ('SE', 'Sweden'), ('CH', 'Switzerland'), ('SY', 'Syrian Arab Republic'), ('TW', 'Taiwan, Province of China'), ('TJ', 'Tajikistan'), ('TZ', 'Tanzania, United Republic of'), ('TH', 'Thailand'), ('TL', 'Timor-Leste'), ('TG', 'Togo'), ('TK', 'Tokelau'), ('TO', 'Tonga'), ('TT', 'Trinidad and Tobago'), ('TN', 'Tunisia'), ('TR', 'Turkey'), ('TM', 'Turkmenistan'), ('TC', 'Turks and Caicos Islands'), ('TV', 'Tuvalu'), ('UG', 'Uganda'), ('UA', 'Ukraine'), ('AE', 'United Arab Emirates'), ('US', 'United States'), ('UM', 'United States Minor Outlying Islands'), ('UY', 'Uruguay'), ('UZ', 'Uzbekistan'), ('VU', 'Vanuatu'), ('VE', 'Venezuela'), ('VN', 'Viet Nam'), ('VG', 'Virgin Islands, British'), ('VI', 'Virgin Islands, U.S.'), ('WF', 'Wallis and Futuna'), ('EH', 'Western Sahara'), ('YE', 'Yemen'), ('ZM', 'Zambia'), ('ZW', 'Zimbabwe')], max_length=3, null=True)), - ('address', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='adress_contacts', to='common.address')), - ('assigned_to', models.ManyToManyField(related_name='contact_assigned_users', to='common.profile')), - ('created_by', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='contact_created_by', to='common.profile')), - ('org', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='common.org')), - ('teams', models.ManyToManyField(related_name='contact_teams', to='teams.teams')), - ('updated_by', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='%(class)s_updated_by', to=settings.AUTH_USER_MODEL, verbose_name='Last Modified By')), - ], - options={ - 'verbose_name': 'Contact', - 'verbose_name_plural': 'Contacts', - 'db_table': 'contacts', - 'ordering': ('-created_at',), - }, - ), - ] diff --git a/contacts/migrations/0002_alter_contact_created_by.py b/contacts/migrations/0002_alter_contact_created_by.py deleted file mode 100644 index 117678bb..00000000 --- a/contacts/migrations/0002_alter_contact_created_by.py +++ /dev/null @@ -1,21 +0,0 @@ -# Generated by Django 4.2.1 on 2023-06-29 07:31 - -from django.conf import settings -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - migrations.swappable_dependency(settings.AUTH_USER_MODEL), - ('contacts', '0001_initial'), - ] - - operations = [ - migrations.AlterField( - model_name='contact', - name='created_by', - field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='%(class)s_created_by', to=settings.AUTH_USER_MODEL, verbose_name='Created By'), - ), - ] diff --git a/contacts/migrations/0003_alter_contact_secondary_number_and_more.py b/contacts/migrations/0003_alter_contact_secondary_number_and_more.py deleted file mode 100644 index 227439f1..00000000 --- a/contacts/migrations/0003_alter_contact_secondary_number_and_more.py +++ /dev/null @@ -1,24 +0,0 @@ -# Generated by Django 4.2.1 on 2023-07-21 11:23 - -from django.db import migrations, models -import phonenumber_field.modelfields - - -class Migration(migrations.Migration): - - dependencies = [ - ('contacts', '0002_alter_contact_created_by'), - ] - - operations = [ - migrations.AlterField( - model_name='contact', - name='secondary_number', - field=phonenumber_field.modelfields.PhoneNumberField(blank=True, max_length=128, null=True, region=None), - ), - migrations.AlterField( - model_name='contact', - name='twitter_username', - field=models.CharField(blank=True, max_length=255, null=True), - ), - ] diff --git a/contacts/migrations/0004_alter_contact_address.py b/contacts/migrations/0004_alter_contact_address.py deleted file mode 100644 index 2f4ab9d6..00000000 --- a/contacts/migrations/0004_alter_contact_address.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 4.2.1 on 2023-11-23 05:54 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('contacts', '0003_alter_contact_secondary_number_and_more'), - ] - - operations = [ - migrations.AlterField( - model_name='contact', - name='address', - field=models.TextField(blank=True, null=True), - ), - ] diff --git a/contacts/migrations/0005_alter_contact_address.py b/contacts/migrations/0005_alter_contact_address.py deleted file mode 100644 index b0234246..00000000 --- a/contacts/migrations/0005_alter_contact_address.py +++ /dev/null @@ -1,20 +0,0 @@ -# Generated by Django 4.2.1 on 2023-11-23 05:59 - -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('common', '0007_org_is_active'), - ('contacts', '0004_alter_contact_address'), - ] - - operations = [ - migrations.AlterField( - model_name='contact', - name='address', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='adress_contacts', to='common.address'), - ), - ] diff --git a/contacts/models.py b/contacts/models.py deleted file mode 100644 index 4ac0944f..00000000 --- a/contacts/models.py +++ /dev/null @@ -1,83 +0,0 @@ -import arrow -from django.db import models -from django.utils.translation import gettext_lazy as _ -from phonenumber_field.modelfields import PhoneNumberField - -from common.models import Address, Org, Profile -from common.base import BaseModel -from common.utils import COUNTRIES -from teams.models import Teams - - -class Contact(BaseModel): - salutation = models.CharField( - _("Salutation"), max_length=255, default="", blank=True - ) - first_name = models.CharField(_("First name"), max_length=255) - last_name = models.CharField(_("Last name"), max_length=255) - date_of_birth = models.DateField(null=True, blank=True) - organization = models.CharField(_("Organization"), max_length=255, null=True) - title = models.CharField(_("Title"), max_length=255, default="", blank=True) - primary_email = models.EmailField(unique=True) - secondary_email = models.EmailField(default="", blank=True) - mobile_number = PhoneNumberField(null=True, unique=True) - secondary_number = PhoneNumberField(null=True,blank=True) - department = models.CharField(_("Department"), max_length=255, null=True) - language = models.CharField(_("Language"), max_length=255, null=True) - do_not_call = models.BooleanField(default=False) - address = models.ForeignKey( - Address, - related_name="adress_contacts", - on_delete=models.CASCADE, - blank=True, - null=True, - ) - description = models.TextField(blank=True, null=True) - linked_in_url = models.URLField(blank=True, null=True) - facebook_url = models.URLField(blank=True, null=True) - twitter_username = models.CharField(max_length=255, blank=True,null=True) - # created_by = models.ForeignKey( - # Profile, related_name="contact_created_by", on_delete=models.SET_NULL, null=True - # ) - is_active = models.BooleanField(default=False) - assigned_to = models.ManyToManyField(Profile, related_name="contact_assigned_users") - teams = models.ManyToManyField(Teams, related_name="contact_teams") - org = models.ForeignKey(Org, on_delete=models.SET_NULL, null=True, blank=True) - country = models.CharField(max_length=3, choices=COUNTRIES, blank=True, null=True) - - class Meta: - verbose_name = "Contact" - verbose_name_plural = "Contacts" - db_table = "contacts" - ordering = ("-created_at",) - - def __str__(self): - return self.first_name - - @property - def created_on_arrow(self): - return arrow.get(self.created_at).humanize() - - @property - def created_on(self): - return self.created_at - - - @property - def get_team_users(self): - team_user_ids = list(self.teams.values_list("users__id", flat=True)) - return Profile.objects.filter(id__in=team_user_ids) - - @property - def get_team_and_assigned_users(self): - team_user_ids = list(self.teams.values_list("users__id", flat=True)) - assigned_user_ids = list(self.assigned_to.values_list("id", flat=True)) - user_ids = team_user_ids + assigned_user_ids - return Profile.objects.filter(id__in=user_ids) - - @property - def get_assigned_users_not_in_teams(self): - team_user_ids = list(self.teams.values_list("users__id", flat=True)) - assigned_user_ids = list(self.assigned_to.values_list("id", flat=True)) - user_ids = set(assigned_user_ids) - set(team_user_ids) - return Profile.objects.filter(id__in=list(user_ids)) diff --git a/contacts/swagger_params1.py b/contacts/swagger_params1.py deleted file mode 100644 index ecc52d5e..00000000 --- a/contacts/swagger_params1.py +++ /dev/null @@ -1,61 +0,0 @@ -from drf_spectacular.types import OpenApiTypes -from drf_spectacular.utils import OpenApiParameter - -organization_params_in_header = organization_params_in_header = OpenApiParameter( - "org", OpenApiTypes.STR, OpenApiParameter.HEADER -) - -organization_params = [ - organization_params_in_header, -] - -contact_list_get_params = [ - organization_params_in_header, - OpenApiParameter("name", OpenApiTypes.STR,OpenApiParameter.QUERY), - OpenApiParameter("city", OpenApiTypes.STR,OpenApiParameter.QUERY), - OpenApiParameter("assigned_to", OpenApiTypes.STR,OpenApiParameter.QUERY), -] - -contact_create_post_params = [ - organization_params_in_header, - OpenApiParameter( - "salutation", OpenApiParameter.QUERY, OpenApiTypes.STR - ), - OpenApiParameter( - "first_name", OpenApiParameter.QUERY, OpenApiTypes.STR - ), - OpenApiParameter( - "last_name", OpenApiParameter.QUERY, OpenApiTypes.STR - ), - OpenApiParameter( - "date_of_birth", - OpenApiParameter.QUERY, - OpenApiTypes.STR - ), - OpenApiParameter("organization", OpenApiTypes.STR,OpenApiParameter.QUERY), - OpenApiParameter( - "title", OpenApiParameter.QUERY, OpenApiTypes.STR - ), - OpenApiParameter("primary_email", OpenApiTypes.STR,OpenApiParameter.QUERY), - OpenApiParameter("secondary_email", OpenApiTypes.STR,OpenApiParameter.QUERY), - OpenApiParameter("mobile_number", OpenApiTypes.STR,OpenApiParameter.QUERY), - OpenApiParameter("secondary_number", OpenApiTypes.STR,OpenApiParameter.QUERY), - OpenApiParameter("department", OpenApiTypes.STR,OpenApiParameter.QUERY), - OpenApiParameter("language", OpenApiTypes.STR,OpenApiParameter.QUERY), - OpenApiParameter("do_not_call", OpenApiParameter.QUERY, OpenApiTypes.BOOL), - OpenApiParameter( - "address_line", OpenApiParameter.QUERY, OpenApiTypes.STR - ), - OpenApiParameter("street", OpenApiTypes.STR,OpenApiParameter.QUERY), - OpenApiParameter("city", OpenApiTypes.STR,OpenApiParameter.QUERY), - OpenApiParameter("state", OpenApiTypes.STR,OpenApiParameter.QUERY), - OpenApiParameter("pincode", OpenApiTypes.STR,OpenApiParameter.QUERY), - OpenApiParameter("country", OpenApiTypes.STR,OpenApiParameter.QUERY), - OpenApiParameter("description", OpenApiTypes.STR,OpenApiParameter.QUERY), - OpenApiParameter("linked_in_url", OpenApiTypes.STR,OpenApiParameter.QUERY), - OpenApiParameter("facebook_url", OpenApiTypes.STR,OpenApiParameter.QUERY), - OpenApiParameter("twitter_username", OpenApiTypes.STR,OpenApiParameter.QUERY), - OpenApiParameter("teams", OpenApiTypes.STR,OpenApiParameter.QUERY), - OpenApiParameter("assigned_to", OpenApiTypes.STR,OpenApiParameter.QUERY), - OpenApiParameter("contact_attachment", OpenApiParameter.QUERY, OpenApiTypes.BINARY), -] \ No newline at end of file diff --git a/docker/docker-compose.yml b/docker/docker-compose.yml deleted file mode 100644 index 7828c851..00000000 --- a/docker/docker-compose.yml +++ /dev/null @@ -1,41 +0,0 @@ -version: '3' -services: - crm-app: - image: djcrm:1 - container_name: crm-app - environment: - - DBNAME=crm - - DBUSER=crm - - DBPASSWORD=crm - - DBHOST=crm-db - - DBPORT=5432 - - ENV_TYPE=development - - DEFAULT_FROM_EMAIL=your_email@example.com - - ADMIN_EMAIL=your_admin_email@example.com - - CELERY_BROKER_URL="celery.url" - - CELERY_RESULT_BACKEND="celery.backend.url" - - DOMAIN_NAME="DOMAIN.NAME" - - SWAGGER_ROOT_URL="SWAGGER.ROOT.URL" - depends_on: - - crm-db - ports: - - 8000:8000 - networks: - - nw - - crm-db: - image: postgres:12-bookworm - container_name: crm-db - environment: - - POSTGRES_DB=crm - - POSTGRES_USER=crm - - POSTGRES_PASSWORD=crm - ports: - - 5432:5432 - volumes: - - /var/run/postgresql/:/var/run/postgresql - networks: - - nw - -networks: - nw: {} diff --git a/docker/dockerfile b/docker/dockerfile deleted file mode 100644 index 0f7af4bb..00000000 --- a/docker/dockerfile +++ /dev/null @@ -1,37 +0,0 @@ -FROM ubuntu:22.04 - -ARG DEBIAN_FRONTEND=noninteractive -ARG PIP_EXTRA_INDEX_URL - -WORKDIR /app - -# Intall dependencies -COPY requirements.txt /app - -RUN apt update -RUN apt install -y git ruby-dev ruby-ffi postgresql-client redis-server wkhtmltopdf -RUN apt clean -RUN gem install sass -RUN gem install compass -# install nvm/npm -# RUN curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.35.3/install.sh | bash -RUN apt install nodejs npm -y -RUN npm -g install less -RUN apt install -y python3-pip -RUN python3 -m pip install --no-cache-dir -r requirements.txt -RUN python3 -m pip install --no-cache-dir redis - -RUN python3 -c 'from django.core.management.utils import get_random_secret_key; print(get_random_secret_key())' > /app/secret_key.txt -ENV SECRET_KEY \ - $(cat /app/secret_key.txt) -RUN rm /app/secret_key.txt - - -COPY . /app -COPY docker/entrypoint.sh /app -COPY docker/wait-for-postgres.sh /app - - -RUN chmod +x entrypoint.sh -RUN chmod +x wait-for-postgres.sh -ENTRYPOINT ["./entrypoint.sh"] diff --git a/docker/entrypoint.sh b/docker/entrypoint.sh deleted file mode 100644 index b3125dfe..00000000 --- a/docker/entrypoint.sh +++ /dev/null @@ -1,7 +0,0 @@ -#!/bin/bash - -# Execute startup scripts -./wait-for-postgres.sh "$DBHOST" -python3 manage.py collectstatic --noinput -python3 manage.py migrate -python3 manage.py runserver 0.0.0.0:8000 \ No newline at end of file diff --git a/docker/wait-for-postgres.sh b/docker/wait-for-postgres.sh deleted file mode 100644 index 49a49799..00000000 --- a/docker/wait-for-postgres.sh +++ /dev/null @@ -1,17 +0,0 @@ -#!/bin/bash -# wait-for-postgres.sh - -set -e - -host="$1" -shift -cmd=( "$@" ) - -echo "Testing Postgres connection with psql ..." -until PGPASSWORD="$DBPASSWORD" psql -h "$host" -U "$DBUSER" -c "\q"; do - >&2 echo -n . - sleep 1 -done - ->&2 echo "Postgres is up - executing command" -exec $cmd diff --git a/docs/Makefile b/docs/Makefile deleted file mode 100644 index 182d33ac..00000000 --- a/docs/Makefile +++ /dev/null @@ -1,177 +0,0 @@ -# Makefile for Sphinx documentation -# - -# You can set these variables from the command line. -SPHINXOPTS = -SPHINXBUILD = sphinx-build -PAPER = -BUILDDIR = build - -# User-friendly check for sphinx-build -ifeq ($(shell which $(SPHINXBUILD) >/dev/null 2>&1; echo $$?), 1) -$(error The '$(SPHINXBUILD)' command was not found. Make sure you have Sphinx installed, then set the SPHINXBUILD environment variable to point to the full path of the '$(SPHINXBUILD)' executable. Alternatively you can add the directory with the executable to your PATH. If you don't have Sphinx installed, grab it from http://sphinx-doc.org/) -endif - -# Internal variables. -PAPEROPT_a4 = -D latex_paper_size=a4 -PAPEROPT_letter = -D latex_paper_size=letter -ALLSPHINXOPTS = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) source -# the i18n builder cannot share the environment and doctrees with the others -I18NSPHINXOPTS = $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) source - -.PHONY: help clean html dirhtml singlehtml pickle json htmlhelp qthelp devhelp epub latex latexpdf text man changes linkcheck doctest gettext - -help: - @echo "Please use \`make ' where is one of" - @echo " html to make standalone HTML files" - @echo " dirhtml to make HTML files named index.html in directories" - @echo " singlehtml to make a single large HTML file" - @echo " pickle to make pickle files" - @echo " json to make JSON files" - @echo " htmlhelp to make HTML files and a HTML help project" - @echo " qthelp to make HTML files and a qthelp project" - @echo " devhelp to make HTML files and a Devhelp project" - @echo " epub to make an epub" - @echo " latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter" - @echo " latexpdf to make LaTeX files and run them through pdflatex" - @echo " latexpdfja to make LaTeX files and run them through platex/dvipdfmx" - @echo " text to make text files" - @echo " man to make manual pages" - @echo " texinfo to make Texinfo files" - @echo " info to make Texinfo files and run them through makeinfo" - @echo " gettext to make PO message catalogs" - @echo " changes to make an overview of all changed/added/deprecated items" - @echo " xml to make Docutils-native XML files" - @echo " pseudoxml to make pseudoxml-XML files for display purposes" - @echo " linkcheck to check all external links for integrity" - @echo " doctest to run all doctests embedded in the documentation (if enabled)" - -clean: - rm -rf $(BUILDDIR)/* - -html: - $(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html - @echo - @echo "Build finished. The HTML pages are in $(BUILDDIR)/html." - -dirhtml: - $(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml - @echo - @echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml." - -singlehtml: - $(SPHINXBUILD) -b singlehtml $(ALLSPHINXOPTS) $(BUILDDIR)/singlehtml - @echo - @echo "Build finished. The HTML page is in $(BUILDDIR)/singlehtml." - -pickle: - $(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle - @echo - @echo "Build finished; now you can process the pickle files." - -json: - $(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/json - @echo - @echo "Build finished; now you can process the JSON files." - -htmlhelp: - $(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) $(BUILDDIR)/htmlhelp - @echo - @echo "Build finished; now you can run HTML Help Workshop with the" \ - ".hhp project file in $(BUILDDIR)/htmlhelp." - -qthelp: - $(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) $(BUILDDIR)/qthelp - @echo - @echo "Build finished; now you can run "qcollectiongenerator" with the" \ - ".qhcp project file in $(BUILDDIR)/qthelp, like this:" - @echo "# qcollectiongenerator $(BUILDDIR)/qthelp/MicroSite.qhcp" - @echo "To view the help file:" - @echo "# assistant -collectionFile $(BUILDDIR)/qthelp/MicroSite.qhc" - -devhelp: - $(SPHINXBUILD) -b devhelp $(ALLSPHINXOPTS) $(BUILDDIR)/devhelp - @echo - @echo "Build finished." - @echo "To view the help file:" - @echo "# mkdir -p $$HOME/.local/share/devhelp/MicroSite" - @echo "# ln -s $(BUILDDIR)/devhelp $$HOME/.local/share/devhelp/MicroSite" - @echo "# devhelp" - -epub: - $(SPHINXBUILD) -b epub $(ALLSPHINXOPTS) $(BUILDDIR)/epub - @echo - @echo "Build finished. The epub file is in $(BUILDDIR)/epub." - -latex: - $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex - @echo - @echo "Build finished; the LaTeX files are in $(BUILDDIR)/latex." - @echo "Run \`make' in that directory to run these through (pdf)latex" \ - "(use \`make latexpdf' here to do that automatically)." - -latexpdf: - $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex - @echo "Running LaTeX files through pdflatex..." - $(MAKE) -C $(BUILDDIR)/latex all-pdf - @echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex." - -latexpdfja: - $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex - @echo "Running LaTeX files through platex and dvipdfmx..." - $(MAKE) -C $(BUILDDIR)/latex all-pdf-ja - @echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex." - -text: - $(SPHINXBUILD) -b text $(ALLSPHINXOPTS) $(BUILDDIR)/text - @echo - @echo "Build finished. The text files are in $(BUILDDIR)/text." - -man: - $(SPHINXBUILD) -b man $(ALLSPHINXOPTS) $(BUILDDIR)/man - @echo - @echo "Build finished. The manual pages are in $(BUILDDIR)/man." - -texinfo: - $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo - @echo - @echo "Build finished. The Texinfo files are in $(BUILDDIR)/texinfo." - @echo "Run \`make' in that directory to run these through makeinfo" \ - "(use \`make info' here to do that automatically)." - -info: - $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo - @echo "Running Texinfo files through makeinfo..." - make -C $(BUILDDIR)/texinfo info - @echo "makeinfo finished; the Info files are in $(BUILDDIR)/texinfo." - -gettext: - $(SPHINXBUILD) -b gettext $(I18NSPHINXOPTS) $(BUILDDIR)/locale - @echo - @echo "Build finished. The message catalogs are in $(BUILDDIR)/locale." - -changes: - $(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes - @echo - @echo "The overview file is in $(BUILDDIR)/changes." - -linkcheck: - $(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck - @echo - @echo "Link check complete; look for any errors in the above output " \ - "or in $(BUILDDIR)/linkcheck/output.txt." - -doctest: - $(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest - @echo "Testing of doctests in the sources finished, look at the " \ - "results in $(BUILDDIR)/doctest/output.txt." - -xml: - $(SPHINXBUILD) -b xml $(ALLSPHINXOPTS) $(BUILDDIR)/xml - @echo - @echo "Build finished. The XML files are in $(BUILDDIR)/xml." - -pseudoxml: - $(SPHINXBUILD) -b pseudoxml $(ALLSPHINXOPTS) $(BUILDDIR)/pseudoxml - @echo - @echo "Build finished. The pseudo-XML files are in $(BUILDDIR)/pseudoxml." diff --git a/docs/source/Accounts.rst b/docs/source/Accounts.rst deleted file mode 100644 index 5e644f4c..00000000 --- a/docs/source/Accounts.rst +++ /dev/null @@ -1,38 +0,0 @@ -Accounts -******** - -| These have the user roles i.e Admin and User. User Role will have permissions where Admin can access. - -| Create your Accounts - new account can be created for different users and contacts and leads can create in accounts itself in their view pages - - - - -| **Fig** Accounts page - -| This page view describes us about the accounts available and basic information. - -| There are 2 types of accounts i.e Open/Closed accounts. - -| We can Edit/Delete accounts here - -| To create an account we have a option "Add New Account" at the top right corner On Clicking it you will be redirected to the below page. - -| **Optional:** We can filter the users based on name,city,tags . - - -| **Fig** Account create page - -| Here while we are creating an account, it is mandatory to have minimum one contact and one lead. - -| **Note:** Fields having ``*`` are mandatory - - - - - -.. | Rules to follow:- - -.. 1.writing test cases for the code - -.. 2.test cases coverage percent should be above 90% diff --git a/docs/source/Cases.rst b/docs/source/Cases.rst deleted file mode 100644 index 12777f15..00000000 --- a/docs/source/Cases.rst +++ /dev/null @@ -1,18 +0,0 @@ -Cases -***** - - - -| **Fig** cases Home Page - -| The above figure shows the cases view, this page gives details and list view of leads -| You can filter the results by name, status, priority, account. - -| Create a new Lead using the button on right corner ``+ Add New case`` - - -| **Fig** cases Create Page - -| **Note:** Fields having ``*`` are mandatory. - -| **Note:** To create a cases user,accounts are required. \ No newline at end of file diff --git a/docs/source/Change Password.rst b/docs/source/Change Password.rst deleted file mode 100644 index 77ba43c5..00000000 --- a/docs/source/Change Password.rst +++ /dev/null @@ -1,10 +0,0 @@ -Change Password -*************** - - - -| **Fig** Password Change Page - -| The above figure shows the password change view, here enter the old password in "old password field" and enter new password in "new password field" and retype the new password in "confirm new password" field. - -| Click "Change Password" button to change the password successfully, otherwise cancel to cancel the process. diff --git a/docs/source/Contacts.rst b/docs/source/Contacts.rst deleted file mode 100644 index 02871320..00000000 --- a/docs/source/Contacts.rst +++ /dev/null @@ -1,21 +0,0 @@ -Contacts -******** - -| Contacts can be created and can be assigned to Accounts - - - - -| **Fig** Contacts Home Page - -| The above figure shows the contacts view, this page gives details and list view of leads -| You can filter the results by name, city, assigned user. - -| Create a new Lead using the button on right corner ``+ Add New contact`` - - -| **Fig** Contacts Create Page - -| **Note:** Fields having ``*`` are mandatory. - -| **Note:** To create a contacts lead is required. \ No newline at end of file diff --git a/docs/source/Documents.rst b/docs/source/Documents.rst deleted file mode 100644 index c6c9a524..00000000 --- a/docs/source/Documents.rst +++ /dev/null @@ -1,16 +0,0 @@ -Documents -********* - - - -| **Fig** documents Home Page - -| The above figure shows the documents view, this page gives details and list view of leads -| You can filter the results by title, status, shared to. - -| Create a new Document using the button on right corner ``+ Add New Document`` - - -| **Fig** Documents Create Page - -| **Note:** Fields having ``*`` are mandatory. diff --git a/docs/source/Forget Password.rst b/docs/source/Forget Password.rst deleted file mode 100644 index c03a0561..00000000 --- a/docs/source/Forget Password.rst +++ /dev/null @@ -1,37 +0,0 @@ -Forget Password -*************** - - -| **Fig** Forget Password Page View - -| Enter the registered email id and click submit, then you will be sent a email to the registered email address, and redirect to the acknowledge page as below figure - - -| **Fig** Email Sent acknowledgement view - -| When you check the mail you will receive a email similar to the below figure. - - -| **Fig** Email recieved - -| When you click on the link in the mail, you will get a page as below - - -| **Fig** Password Reset view - - -| After you successful change the password you will get below page - - -| **Fig** Password Reset Successful view - -| Now click on login and enter your credentials - -| After successful login you will be redirected to Dashboard which looks similiar to the below figure - - -| **Fig** Dashboard view - -| The home page/Dashboard have access to all the modules of the CRM - -| **Note:** The numbers below accounts, contacts, leads, opportunities represent the total count of each module. \ No newline at end of file diff --git a/docs/source/Leads.rst b/docs/source/Leads.rst deleted file mode 100644 index 11098fa8..00000000 --- a/docs/source/Leads.rst +++ /dev/null @@ -1,16 +0,0 @@ -Leads -***** - - - -| **Fig** Accounts Home Page - -| This is Account Home Page, this page gives details and list view of leads -| You can filter the results by name, source, assigned user, status, tags - -| Create a new Lead using the button on right corner ``+ Add New Lead`` - - -| **Fig** Leads Create Page - -| **Note:** Fields having ``*`` are mandatory diff --git a/docs/source/Login.rst b/docs/source/Login.rst deleted file mode 100644 index 798dbc2c..00000000 --- a/docs/source/Login.rst +++ /dev/null @@ -1,5 +0,0 @@ -Login -***** - - -| **Fig** Login Page diff --git a/docs/source/Opportunity.rst b/docs/source/Opportunity.rst deleted file mode 100644 index 80ea57d2..00000000 --- a/docs/source/Opportunity.rst +++ /dev/null @@ -1,21 +0,0 @@ -Opportunity -*********** - -| New Opportunities can be added and can be assigned to accounts and contacts. - - - -| **Fig** Opportunity Home Page - -| The above figure shows the Opportunity view, this page gives details and list view of leads -| They are two types of leads open and closed -| You can filter the results by name, stage, account, lead source - -| Create a new Lead using the button on right corner ``+ Add New Opportunity`` - - -| **Fig** Opportunity Create Page - -| **Note:** Fields having ``*`` are mandatory. - -| **Note:** To create a Opportunity lead is required. \ No newline at end of file diff --git a/docs/source/Profile.rst b/docs/source/Profile.rst deleted file mode 100644 index 7328d17e..00000000 --- a/docs/source/Profile.rst +++ /dev/null @@ -1,78 +0,0 @@ -Profile -******* - -Dropdown menu for user settings - - - -| **Fig** Dropdown menu - -Here in this drop down all the essential options for the user profile management are available i.e. - -Users -~~~~~ - -| On clicking users, the following page is shown - - -| **Fig:** Users view - -| Here the user can activate/deactivate, edit/delete user data. - -| To create new user click on `` + Add New User``. - -| One clicking `` + Add New User`` the following page is shown: - - -| **Fig** User create page - -| **Note:** Fields having ``*`` are mandatory. - - - -| **Fig:** User Edit User page - -Settings -~~~~~~~~~ -| On clicking settings, the following page is shown: - -.. image:: screenshots/settingshome.png - :align: center - -| **Fig:** User Settings page - -| Click on `` + Add New Setting`` - - - -| **Fig:** User Create Setting page - - -Change Password -~~~~~~~~~~~~~~~ - -| On clicking settings, the following page is shown: - - - -| **Fig:** User Change password page - -Profile -~~~~~~~ - -| On clicking settings, the following page is shown: - - - -| **Fig:** User profile page - - - -| **Fig:** User edit profile page - -| Here user can edit his personal details. - - -Logout -~~~~~~~ -On Clicking logout you will be logged out from the account and redirected to Login page. \ No newline at end of file diff --git a/docs/source/conf.py b/docs/source/conf.py deleted file mode 100644 index b398bfbd..00000000 --- a/docs/source/conf.py +++ /dev/null @@ -1,265 +0,0 @@ -# -*- coding: utf-8 -*- -# -# django-blog-it documentation build configuration file, created by -# sphinx-quickstart on Mon Dec 29 20:41:44 2014. -# -# This file is execfile()d with the current directory set to its -# containing dir. -# -# Note that not all possible configuration values are present in this -# autogenerated file. -# -# All configuration values have a default; values that are commented out -# serve to show the default. - -from recommonmark.parser import CommonMarkParser - -source_parsers = { - ".md": CommonMarkParser, -} - - -# If extensions (or modules to document with autodoc) are in another directory, -# add these directories to sys.path here. If the directory is relative to the -# documentation root, use os.path.abspath to make it absolute, like shown here. -# import os -# import sys -# sys.path.insert(0, os.path.abspath('.')) - -# -- General configuration ------------------------------------------------ - -# If your documentation needs a minimal Sphinx version, state it here. -# needs_sphinx = '1.0' - -# Add any Sphinx extension module names here, as strings. They can be -# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom -# ones. -extensions = ["sphinx.ext.autodoc", "sphinx.ext.coverage", "sphinx.ext.napoleon"] - -# Add any paths that contain templates here, relative to this directory. -templates_path = ["ntemplates"] - -# The suffix of source filenames. -# source_suffix = '.rst' -source_suffix = [".rst", ".md"] - -# The encoding of source files. -# source_encoding = 'utf-8-sig' - -# The master toctree document. -master_doc = "index" - -# General information about the project. -project = "Django-CRM" -copyright = "2017, MicroPyramid" - -# The version info for the project you're documenting, acts as replacement for -# |version| and |release|, also used in various other places throughout the -# built documents. -# -# The short X.Y version. -version = "0.7.0" -# The full version, including alpha/beta/rc tags. -release = "0.7.0" - -# The language for content autogenerated by Sphinx. Refer to documentation -# for a list of supported languages. -# language = None - -# There are two options for replacing |today|: either, you set today to some -# non-false value, then it is used: -# today = '' -# Else, today_fmt is used as the format for a strftime call. -# today_fmt = '%B %d, %Y' - -# List of patterns, relative to source directory, that match files and -# directories to ignore when looking for source files. -exclude_patterns = [] - -# The reST default role (used for this markup: `text`) to use for all -# documents. -# default_role = None - -# If true, '()' will be appended to :func: etc. cross-reference text. -# add_function_parentheses = True - -# If true, the current module name will be prepended to all description -# unit titles (such as .. function::). -# add_module_names = True - -# If true, sectionauthor and moduleauthor directives will be shown in the -# output. They are ignored by default. -# show_authors = False - -# The name of the Pygments (syntax highlighting) style to use. -pygments_style = "sphinx" - -# A list of ignored prefixes for module index sorting. -# modindex_common_prefix = [] - -# If true, keep warnings as "system message" paragraphs in the built documents. -# keep_warnings = False - - -# -- Options for HTML output ---------------------------------------------- - -# The theme to use for HTML and HTML Help pages. See the documentation for -# a list of builtin themes. -html_theme = "default" - -# Theme options are theme-specific and customize the look and feel of a theme -# further. For a list of options available for each theme, see the -# documentation. -# html_theme_options = {} - -# Add any paths that contain custom themes here, relative to this directory. -# html_theme_path = [] - -# The name for this set of Sphinx documents. If None, it defaults to -# " v documentation". -# html_title = None - -# A shorter title for the navigation bar. Default is the same as html_title. -# html_short_title = None - -# The name of an image file (relative to this directory) to place at the top -# of the sidebar. -# html_logo = None - -# The name of an image file (within the static path) to use as favicon of the -# docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32 -# pixels large. -# html_favicon = None - -# Add any paths that contain custom static files (such as style sheets) here, -# relative to this directory. They are copied after the builtin static files, -# so a file named "default.css" will overwrite the builtin "default.css". -html_static_path = ["nstatic"] - -# Add any extra paths that contain custom files (such as robots.txt or -# .htaccess) here, relative to this directory. These files are copied -# directly to the root of the documentation. -# html_extra_path = [] - -# If not '', a 'Last updated on:' timestamp is inserted at every page bottom, -# using the given strftime format. -# html_last_updated_fmt = '%b %d, %Y' - -# If true, SmartyPants will be used to convert quotes and dashes to -# typographically correct entities. -# html_use_smartypants = True - -# Custom sidebar templates, maps document names to template names. -# html_sidebars = {} - -# Additional templates that should be rendered to pages, maps page names to -# template names. -# html_additional_pages = {} - -# If false, no module index is generated. -# html_domain_indices = True - -# If false, no index is generated. -# html_use_index = True - -# If true, the index is split into individual pages for each letter. -# html_split_index = False - -# If true, links to the reST sources are added to the pages. -# html_show_sourcelink = True - -# If true, "Created using Sphinx" is shown in the HTML footer. Default is True. -# html_show_sphinx = True - -# If true, "(C) Copyright ..." is shown in the HTML footer. Default is True. -# html_show_copyright = True - -# If true, an OpenSearch description file will be output, and all pages will -# contain a tag referring to it. The value of this option must be the -# base URL from which the finished HTML is served. -# html_use_opensearch = '' - -# This is the file name suffix for HTML files (e.g. ".xhtml"). -# html_file_suffix = None - -# Output file base name for HTML help builder. -htmlhelp_basename = "Django-CRM-doc" - - -# -- Options for LaTeX output --------------------------------------------- - -latex_elements = { - # The paper size ('letterpaper' or 'a4paper'). - #'papersize': 'letterpaper', - # The font size ('10pt', '11pt' or '12pt'). - #'pointsize': '10pt', - # Additional stuff for the LaTeX preamble. - #'preamble': '', -} - -# Grouping the document tree into LaTeX files. List of tuples -# (source start file, target name, title, -# author, documentclass [howto, manual, or own class]). -latex_documents = [ - ("index", "Django-CRM.tex", "Django-CRM Documentation", "Django-CRM", "manual"), -] - -# The name of an image file (relative to this directory) to place at the top of -# the title page. -# latex_logo = None - -# For "manual" documents, if this is true, then toplevel headings are parts, -# not chapters. -# latex_use_parts = False - -# If true, show page references after internal links. -# latex_show_pagerefs = False - -# If true, show URL addresses after external links. -# latex_show_urls = False - -# Documents to append as an appendix to all manuals. -# latex_appendices = [] - -# If false, no module index is generated. -# latex_domain_indices = True - - -# -- Options for manual page output --------------------------------------- - -# One entry per manual page. List of tuples -# (source start file, name, description, authors, manual section). -man_pages = [("index", "Django-CRM", "Django-CRM Documentation", ["Django-CRM"], 1)] - -# If true, show URL addresses after external links. -# man_show_urls = False - - -# -- Options for Texinfo output ------------------------------------------- - -# Grouping the document tree into Texinfo files. List of tuples -# (source start file, target name, title, author, -# dir menu entry, description, category) -texinfo_documents = [ - ( - "index", - "Django-CRM", - "Django-CRM Documentation", - "Django-CRM", - "Django-CRM", - "One line description of project.", - "Miscellaneous", - ), -] - -# Documents to append as an appendix to all manuals. -# texinfo_appendices = [] - -# If false, no module index is generated. -# texinfo_domain_indices = True - -# How to display URL addresses: 'footnote', 'no', or 'inline'. -# texinfo_show_urls = 'footnote' - -# If true, do not generate a @detailmenu in the "Top" node's menu. -# texinfo_no_detailmenu = False diff --git a/docs/source/index.rst b/docs/source/index.rst deleted file mode 100644 index 36145d99..00000000 --- a/docs/source/index.rst +++ /dev/null @@ -1,127 +0,0 @@ -========== -Django CRM -========== - -Introduction: -============= - -Django CRM is an Open Source CRM developed on the Django framework. It has all the basic features of CRM to start with. We welcome code contributions and feature requests via Github. - -Source Code is available in Micropyramid Repository() `Link `_. - -Tech stack used: -================ - -* Python >= 3.4 -* Django >= 2.0 -* Redis -* django-simple-pagination - -Modules available in Django-CRM: -================================ - -User functionalites: -******************** -.. toctree:: - :maxdepth: 2 - - Login - Forget Password - Profile - Change Password - - -Modules in crm: -*************** - -.. toctree:: - :maxdepth: 2 - - Accounts - Contacts - Leads - Opportunity - Cases - Documents - -Rules to follow:- -================= -| 1.writing test cases for the code -| 2.test cases coverage percent should be above 90% - - - -Setup On Local System -===================== - -On Windows -********** - -On Ubuntu -********* -| First, create a Virtual Environment in a local directory. -| Install Pip to install python packages. -| Then clone the source code from the repository `click here `_. -| Activate Virtual environment, then install the requirements.txt using the command - -:: - - pip install -r requirements.txt - -| Then execute - -:: - - python manage.py runserver - -Now, open your browser and enter the url ``http://127.0.0.1:8000`` - -Installation - Requirements -=========================== - - -Ubuntu 64bit - 16.04 -********************* - -| $ sudo apt-get update && apt-get upgrade -y -| $ sudo apt-get install -y curl wget libpq-dev python3-dev gem ruby ruby-dev build-essential libssl-dev libffi-dev python-dev python-virtualenv python-pip git redis-server libtiff5-dev libjpeg8-dev zlib1g-dev libfreetype6-dev liblcms2-dev libwebp-dev libharfbuzz-dev libfribidi-dev tcl8.6-dev tk8.6-dev python-tk -| $ sudo gem install sass - -Visit our Django web development page [Here](https://micropyramid.com/django-ecommerce-development/) - - -Docker -********************* - -To install using Docker, you need to have Docker installed in your system. - -1. Clone the repository into your system. - -2. Then run the following commands to build and run the container: - - | $ docker build -t djcrm:1 -f docker/Dockerfile . - | $ docker-compose -f docker/docker-compose.yml up - - The first line will build your container image and the second one will run it. - - There you will be able to see what is going on inside the container. - - If you head to localhost:8000/admin you will get to the admin panel of Wagtail. - - 3. In order to be able to login to the admin panel you have to create an admin user. If you are using VSCode, go to the bottom left corner and click on it, there go to "Attach to running container" and you will see two options, click on the one called "crm-app". Once inside the container, then cd into the app directory and run: - - | $ python3 manage.py createsuperuser - - After this you will be able to log into the admin panel with the user you just created. - -We welcome your feedback and support, raise github ticket if you want to report a bug or need new feature. - -Need additional support? `Contact us here`_ - -.. _contact us here: https://micropyramid.com/contact-us/ - - or - -mailto:: "hello@micropyramid.com" - - diff --git a/emails/admin.py b/emails/admin.py deleted file mode 100644 index 56b8b709..00000000 --- a/emails/admin.py +++ /dev/null @@ -1,6 +0,0 @@ -from django.contrib import admin - -from emails.models import Email - -# Register your models here. -admin.site.register(Email) diff --git a/emails/apps.py b/emails/apps.py deleted file mode 100644 index 4290ce3a..00000000 --- a/emails/apps.py +++ /dev/null @@ -1,5 +0,0 @@ -from django.apps import AppConfig - - -class EmailsConfig(AppConfig): - name = "emails" diff --git a/emails/forms.py b/emails/forms.py deleted file mode 100644 index 903defb7..00000000 --- a/emails/forms.py +++ /dev/null @@ -1,15 +0,0 @@ -from django import forms - -from .models import Email - - -class EmailForm(forms.ModelForm): - - from_email = forms.EmailField(max_length=200, required=True) - to_email = forms.EmailField(max_length=200, required=True) - subject = forms.CharField(max_length=200, required=True) - message = forms.CharField(max_length=200, required=True) - - class Meta: - model = Email - fields = ("from_email", "to_email", "subject", "message") diff --git a/emails/migrations/0001_initial.py b/emails/migrations/0001_initial.py deleted file mode 100644 index 346d070a..00000000 --- a/emails/migrations/0001_initial.py +++ /dev/null @@ -1,42 +0,0 @@ -# Generated by Django 4.2.1 on 2023-06-19 13:08 - -from django.conf import settings -from django.db import migrations, models -import django.db.models.deletion -import uuid - - -class Migration(migrations.Migration): - - initial = True - - dependencies = [ - migrations.swappable_dependency(settings.AUTH_USER_MODEL), - ] - - operations = [ - migrations.CreateModel( - name='Email', - fields=[ - ('created_at', models.DateTimeField(auto_now_add=True, verbose_name='Created At')), - ('updated_at', models.DateTimeField(auto_now=True, verbose_name='Last Modified At')), - ('id', models.UUIDField(db_index=True, default=uuid.uuid4, editable=False, primary_key=True, serialize=False, unique=True)), - ('from_email', models.EmailField(max_length=200)), - ('to_email', models.EmailField(max_length=200)), - ('subject', models.CharField(max_length=200)), - ('message', models.CharField(max_length=200)), - ('file', models.FileField(null=True, upload_to='files/')), - ('send_time', models.DateTimeField(auto_now_add=True)), - ('status', models.CharField(default='sent', max_length=200)), - ('important', models.BooleanField(default=False, max_length=10)), - ('created_by', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='%(class)s_created_by', to=settings.AUTH_USER_MODEL, verbose_name='Created By')), - ('updated_by', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='%(class)s_updated_by', to=settings.AUTH_USER_MODEL, verbose_name='Last Modified By')), - ], - options={ - 'verbose_name': 'Email', - 'verbose_name_plural': 'Emails', - 'db_table': 'email', - 'ordering': ('-created_at',), - }, - ), - ] diff --git a/emails/models.py b/emails/models.py deleted file mode 100644 index 0d608f76..00000000 --- a/emails/models.py +++ /dev/null @@ -1,26 +0,0 @@ -from django.db import models -from common.base import BaseModel - -# Create your models here. - - -class Email(BaseModel): - - from_email = models.EmailField(max_length=200) - to_email = models.EmailField(max_length=200) - subject = models.CharField(max_length=200) - message = models.CharField(max_length=200) - file = models.FileField(null=True, upload_to="files/") - # send_time = models.DateTimeField(default=datetime.now) - send_time = models.DateTimeField(auto_now_add=True) - status = models.CharField(max_length=200, default="sent") - important = models.BooleanField(max_length=10, default=False) - - class Meta: - verbose_name = "Email" - verbose_name_plural = "Emails" - db_table = "email" - ordering = ("-created_at",) - - def __str__(self): - return f"{self.message_subject}" \ No newline at end of file diff --git a/emails/serializer.py b/emails/serializer.py deleted file mode 100644 index 0cecab1e..00000000 --- a/emails/serializer.py +++ /dev/null @@ -1,9 +0,0 @@ -from rest_framework import serializers - -from emails.models import Email - - -class EmailSerailizer(serializers.ModelSerializer): - class Meta: - model = Email - fields = "__all__" diff --git a/emails/templates/create_mail.html b/emails/templates/create_mail.html deleted file mode 100644 index 37fa7339..00000000 --- a/emails/templates/create_mail.html +++ /dev/null @@ -1,156 +0,0 @@ -{% extends 'sales/base.html' %} -{% load static %} -{% block breadcrumb %} - -
- - - - -
-
-
-
-
- Compose email -
-
-
-
-
-
- - - -
- {{ form.from_email.errors }} -
-
-
- - -
-
-
-
- - -
- {{ form.to_email.errors }} -
-
-
- - -
-
-
-
- - -
- {{ form.subject.errors }} -
-
-
-
-
- -
-
- -
- -
- -
-
-
-
-
-
- - -
-
-
-
- - -
- {{ form.message.errors }} -
-
-
-
-
-
-
-
-
- -
-
- - -
-
- -
-
-
- - - -{% endblock %} - - - - - - -{% block js_block %} - -{% endblock js_block %} - - \ No newline at end of file diff --git a/emails/templates/emails.html b/emails/templates/emails.html deleted file mode 100644 index d766a7c8..00000000 --- a/emails/templates/emails.html +++ /dev/null @@ -1,154 +0,0 @@ - - - - - - - - - - -
- -
- -
- -
- -
- -
- - - - - - - - - - -{% for sent in email_sent %} - - - - - - - - -{% endfor %} -
TO : {{sent.to_email}}{{sent.subject}}{{sent.message}}{{sent.send_time}}{{sent.file}}delete
- - -{% for trash in email_trash %} - - - - - - - - -{% endfor %} -
TO : {{trash.to_email}}{{trash.subject}}{{trash.message}}{{trash.send_time}}{{trash.file}}delete
- - -{% for draft in email_draft %} - - - - - - - - -{% endfor %} -
TO : {{draft.to_email}}{{draft.subject}}{{draft.message}}{{draft.send_time}}{{draft.file}}delete
- - - - - - - diff --git a/emails/templates/mail_all.html b/emails/templates/mail_all.html deleted file mode 100644 index 484b0d05..00000000 --- a/emails/templates/mail_all.html +++ /dev/null @@ -1,122 +0,0 @@ -{% extends 'sales/base.html' %} -{% load static %} -{% load paginate %} -{% block breadcrumb %} - -
- -
- {% include 'mail_center.html' %} -
- -
- -
-
-
- -
-
-
- -
- -
-
-
- filters -
-
-
-
-
- - -
-
-
-
- - -
-
-
-
- - -
-
-
- - -
-
-
-
-
-
-
- - - - - - - - - - Total Mails :{{filter_list.count}} - - - - {% paginate 10 filter_list as filter_list %} - {% for fil in filter_list %} - - - - - - - - - {% endfor %} - -
ToSubjectMessageDate SentStatus
{{fil.to_email}}{{fil.subject}}{{fil.message|stringformat:".5s"}}{{fil.send_time}}{{fil.status}}
- {% ifequal filter_list|length 0 %} -

-
No Mails Found
-

- {% else %} -
- -
- {%endifequal%} -
-
- -
-
-
-
- - -{% endblock %} -{% block js_block %} - -{% endblock js_block %} - - \ No newline at end of file diff --git a/emails/templates/mail_center.html b/emails/templates/mail_center.html deleted file mode 100644 index 5fbfcc0b..00000000 --- a/emails/templates/mail_center.html +++ /dev/null @@ -1,75 +0,0 @@ -{% extends 'sales/base.html' %} -{% load static %} -{% block breadcrumb %} - -
- -
-
Mail Center
-
-
-
-
-
- - -
- -
- -
-
-
-
-
- - - -
-
-
-
- -
-
- - - -{% endblock %} -{% block js_block %} - - -{% endblock %} \ No newline at end of file diff --git a/emails/templates/mail_drafts.html b/emails/templates/mail_drafts.html deleted file mode 100644 index 6ac8a0fb..00000000 --- a/emails/templates/mail_drafts.html +++ /dev/null @@ -1,130 +0,0 @@ -{% extends 'sales/base.html' %} -{% load static %} -{% load paginate %} -{% block breadcrumb %} - -
- -
- {% include 'mail_center.html' %} -
- -
- -
-
-
- -
-
-
- -
- -
-
-
- filters -
-
-
-
-
- - -
-
-
-
- - -
-
-
-
- - -
-
-
- - -
-
-
-
- -
-
- - - - - - - - - - Total Drafts : {{filter_list.count}} - - - - {% paginate 10 filter_list as filter_list %} - {% for draft in filter_list %} - - - - - - - - - - {% endfor %} - -
ToSubjectMessageDate SentStatus
{{draft.to_email}}{{draft.subject}}{{draft.message|stringformat:".5s"}}{{draft.send_time}}{{draft.status}} - -
- {% ifequal filter_list|length 0 %} -

-
No Mails Found
-

- {% else %} -
- -
- {%endifequal%} -
-
-
-
-
-
- -
-{% endblock %} -{% block js_block %} - -{% endblock js_block %} \ No newline at end of file diff --git a/emails/templates/mail_important.html b/emails/templates/mail_important.html deleted file mode 100644 index 441de305..00000000 --- a/emails/templates/mail_important.html +++ /dev/null @@ -1,130 +0,0 @@ -{% extends 'sales/base.html' %} -{% load static %} -{% load paginate %} -{% block breadcrumb %} - -
- -
- {% include 'mail_center.html' %} -
- -
- -
-
-
- -
-
-
- -
-
-
-
- filters -
-
-
-
-
- - -
-
-
-
- - -
-
-
-
- - -
-
-
- - -
-
-
-
-
-
- - - - - - - - - - - Total Mails : {{filter_list.count}} - - - - {% paginate 10 filter_list as filter_list %} - {% for imp in filter_list %} - - - - - - - - - - - {% endfor %} - -
ToSubjectMessageDate SentStatusimportant
{{imp.to_email}}{{imp.subject}}{{imp.message|stringformat:".5s"}}{{imp.send_time}}{{imp.status}}{{imp.important}} - -
- {% ifequal filter_list|length 0 %} -

-
No Mails Found
-

- {% else %} -
- -
- {%endifequal%} -
-
-
-
-
-
- -
-{% endblock %} -{% block js_block %} - -{% endblock js_block %} - - \ No newline at end of file diff --git a/emails/templates/mail_sent.html b/emails/templates/mail_sent.html deleted file mode 100644 index ab5e7387..00000000 --- a/emails/templates/mail_sent.html +++ /dev/null @@ -1,133 +0,0 @@ -{% extends 'sales/base.html' %} -{% load static %} -{% load paginate %} -{% block breadcrumb %} - -
- -
- {% include 'mail_center.html' %} -
- -
- -
-
-
- -
-
-
- - -
-
-
-
- filters -
-
-
-
-
- - -
-
-
-
- - -
-
-
-
- - -
-
-
- - -
-
-
-
-
- -
-
- - - - - - - - - - Total Sent Mails : {{filter_list.count}} - - - - {% paginate 10 filter_list as filter_list %} - {% for sent in filter_list %} - - - - - - - - - {% endfor %} - -
TOSubjectMessageDate SentStatus
{{sent.to_email}}{{sent.subject}}{{sent.message|stringformat:".5s"}}{{sent.send_time}}{{sent.status}} - -
- {% ifequal filter_list|length 0 %} -

-
No Mails Found
-

- {% else %} -
- -
- {%endifequal%} -
-
-
-
-
-
- - -{% endblock %} -{% block js_block %} - -{% endblock js_block %} - - \ No newline at end of file diff --git a/emails/templates/mail_trash.html b/emails/templates/mail_trash.html deleted file mode 100644 index 1952b08c..00000000 --- a/emails/templates/mail_trash.html +++ /dev/null @@ -1,130 +0,0 @@ -{% extends 'sales/base.html' %} -{% load static %} -{% load paginate %} -{% block breadcrumb %} - -
- -
- {% include 'mail_center.html' %} -
- -
- -
-
-
- -
-
-
- -
- -
-
-
- filters -
-
-
-
-
- - -
-
-
-
- - -
-
-
-
- - -
-
-
- - -
-
-
-
- -
-
- - - - - - - - - Total Trash : {{filter_list.count}} - - - - {% paginate 10 filter_list as filter_list %} - {% for trash in filter_list %} - - - - - - - - - {% endfor %} - -
TOSubjectMessageDate SentStatus
{{trash.to_email}}{{trash.subject}}{{trash.message|stringformat:".5s"}}{{trash.send_time}}{{trash.status}} - -
- {% ifequal filter_list|length 0 %} -

-
No Mails Found
-

- {% else %} -
- -
- {%endifequal%} -
-
-
-
-
-
- -
-{% endblock %} -{% block js_block %} - -{% endblock js_block %} - - \ No newline at end of file diff --git a/emails/tests.py b/emails/tests.py deleted file mode 100644 index 1d0d3c02..00000000 --- a/emails/tests.py +++ /dev/null @@ -1,177 +0,0 @@ -from django.test import Client, TestCase - -from common.models import Org, User -from emails.forms import EmailForm -from emails.models import Email - - -class UserCreation(TestCase): - def setUp(self): - self.client = Client() - self.org, _ = Org.objects.get_or_create( - name="test org", address="IN", country="IN" - ) - self.user = User.objects.create( - first_name="janeEmail@example.com", - username="jane", - email="janeEmail@example.com", - role="ADMIN", - org=self.org, - ) - self.user.set_password("password") - self.user.save() - self.email = Email.objects.create( - from_email="admin@micropyramid.com", - to_email="janeEmail@example.com", - subject="subject ", - message="message", - important=False, - ) - self.client.login(username="janeEmail@example.com", password="password") - - -class EmailSentEdit(UserCreation, TestCase): - def test_edit_form_valid(self): - form = EmailForm( - data={ - "from_email": "john@doe.com", - "to_email": "jane@doe.com", - "subject": "test subject", - "message": "test message", - } - ) - # print('yes') - self.assertTrue(form.is_valid()) - - def test_edit_form_invalid(self): - form = EmailForm( - data={ - "from_email": "john@doe.com", - "to_email": "", - "subject": "test subject", - "message": "test message", - } - ) - # print('yes2') - self.assertFalse(form.is_valid()) - - -class EmailListTestCase(UserCreation, TestCase): - def test_email_list(self): - url = "/emails/list/" - response = self.client.get(url) - self.assertEqual(response.status_code, 200) - - -class EmailTestCase(UserCreation, TestCase): - def test_email_compose(self): - url = "/emails/compose/" - response = self.client.get(url) - self.assertEqual(response.status_code, 200) - - def test_email_trash_get(self): - url = "/emails/email_trash_delete/" + str(self.email.pk) + "/" - # print(url) - response = self.client.get(url) - self.assertEqual(response.status_code, 302) - - def test_email_send_fail(self): - url = "/emails/compose/" - data = { - "from_email": "john@doe.com", - "to_email": "", - "subject": "sample subject", - "message": "sample message", - } - response = self.client.post(url, data) - self.assertEqual(response.status_code, 200) - - # email_trash_delete/ - - def test_email_send(self): - url = "/emails/compose/" - data = { - "from_email": "john@doe.com", - "to_email": "jane@doe.com", - "subject": "sample subject", - "message": "sample message", - } - response = self.client.post(url, data) - get_email = Email.objects.get(subject="sample subject") - # boo = Email.objects.get(important=True) - # print('yes') - self.assertFalse(get_email.important) - self.assertEqual(get_email.subject, get_email.__str__()) - - self.assertEqual(response.status_code, 302) - - def test_email_sent(self): - url = "/emails/email_sent/" - response = self.client.get(url) - self.assertEqual(response.status_code, 200) - - def test_email_trash(self): - url = "/emails/email_trash/" - response = self.client.get(url) - self.assertEqual(response.status_code, 200) - - def test_email_draft(self): - url = "/emails/email_draft/" - response = self.client.get(url) - self.assertEqual(response.status_code, 200) - - def test_email_draft_delete(self): - url = "/emails/email_draft_delete/" + str(self.email.pk) + "/" - response = self.client.get(url) - self.assertEqual(response.status_code, 302) - - def test_email_delete(self): - url = "/emails/email_delete/" + str(self.email.pk) + "/" - response = self.client.get(url) - self.assertEqual(response.status_code, 302) - - def test_email_view(self): - url = "/emails/email_view/" + str(self.email.pk) + "/" - response = self.client.get(url) - self.assertEqual(response.status_code, 200) - - def test_email_sent_edit_get(self): - url = "/emails/email_sent_edit/" + str(self.email.pk) + "/" - response = self.client.get(url) - self.assertEqual(response.status_code, 200) - - def test_email_sent_edit_post(self): - url = "/emails/email_sent_edit/" + str(self.email.pk) + "/" - data = { - "from_email": "john@doe.com", - "to_email": "jane@doe.com", - "subject": "subject", - "message": "message", - } - data1 = { - "from_email": "john@doe.com", - "to_email": "", - "subject": "subject", - "message": "message", - } - response = self.client.post(url, data) - response1 = self.client.post(url, data1) - self.assertEqual(response.status_code, 302) - self.assertEqual(response1.status_code, 200) - - def test_email_imp_list(self): - url = "/emails/email_imp_list/" - response = self.client.get(url) - self.assertEqual(response.status_code, 200) - - # def test_email_move_to_trash(self): - # url = "/emails/email_move_to_trash/" + str(self.email.pk) + "/" - # response = self.client.get(url) - # self.assertEqual(response.status_code, 302) - # response = self.client.post(reverse('302'), {}, HTTP_REFERER=url) - - # def test_email_trash_del(self): - # url = "/emails/trash_delete/"+str(self.email.pk)+"/$" - # print(url) - # response = self.client.get(url) - # self.assertEqual(response.status_code,200) diff --git a/emails/urls.py b/emails/urls.py deleted file mode 100644 index 14bcf41d..00000000 --- a/emails/urls.py +++ /dev/null @@ -1,39 +0,0 @@ -from django.conf import settings -from django.conf.urls import url -from django.conf.urls.static import static - -from . import views - -app_name = "emails" - - -urlpatterns = [ - url(r"^list/", views.emails_list, name="list"), - url(r"^compose/", views.email, name="compose"), - url(r"^email_sent/", views.email_sent, name="email_sent"), - url( - r"^email_move_to_trash/(?P\d+)/$", - views.email_move_to_trash, - name="email_move_to_trash", - ), - url(r"^email_delete/(?P\d+)/$", views.email_delete, name="email_delete"), - url(r"^email_trash/", views.email_trash, name="email_trash"), - url( - r"^email_trash_delete/(?P\d+)/$", - views.email_trash_delete, - name="email_trash_delete", - ), - url(r"^email_draft/", views.email_draft, name="email_draft"), - url( - r"^email_draft_delete/(?P\d+)/$", - views.email_draft_delete, - name="email_draft_delete", - ), - url(r"^email_imp/(?P\d+)/$", views.email_imp, name="email_imp"), - url(r"^email_imp_list/", views.email_imp_list, name="email_imp_list"), - url( - r"^email_sent_edit/(?P\d+)/$", views.email_sent_edit, name="email_sent_edit" - ), - url(r"^email_unimp/(?P\d+)/$", views.email_unimp, name="email_unimp"), - url(r"^email_view/(?P\d+)/$", views.email_view, name="email_view"), -] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) diff --git a/emails/views.py b/emails/views.py deleted file mode 100644 index 90564927..00000000 --- a/emails/views.py +++ /dev/null @@ -1,195 +0,0 @@ -from datetime import datetime, timedelta - -from django.core.mail import EmailMessage -from django.http import HttpResponseRedirect -from django.shortcuts import get_object_or_404, render -from django.urls import reverse - -from emails.forms import EmailForm -from emails.models import Email - - -def emails_list(request): - filter_list = Email.objects.all() - if request.GET.get("from_date", ""): - from_date = request.GET.get("from_date", "") - fd = datetime.strptime(from_date, "%Y-%m-%d").date() - filter_list = filter_list.filter(send_time__gte=fd) - if request.GET.get("to_date", ""): - to_date = request.GET.get("to_date", "") - td = datetime.strptime(to_date, "%Y-%m-%d") - td = td + timedelta(seconds=(24 * 60 * 60 - 1)) - filter_list = filter_list.filter(send_time__lte=td) - if request.GET.get("name", ""): - name = request.GET.get("name", "") - filter_list = filter_list.filter(to_email__startswith=name) - return render(request, "mail_all.html", {"filter_list": filter_list}) - - -def email(request): - if request.method == "POST": - form = EmailForm(request.POST, request.FILES) - if form.is_valid(): - subject = request.POST.get("subject", "") - message = request.POST.get("message", "") - from_email = request.POST.get("from_email", "") - to_email = request.POST.get("to_email", "") - file = request.FILES.get("files", None) - status = request.POST.get("email_draft", "") - email = EmailMessage(subject, message, from_email, [to_email]) - email.content_subtype = "html" - f = form.save() - if file is not None: - email.attach(file.name, file.read(), file.content_type) - f.file = file - if status: - f.status = "draft" - else: - email.send(fail_silently=False) - f.save() - return HttpResponseRedirect(reverse("emails:list")) - else: - return render(request, "create_mail.html", {"form": form}) - else: - form = EmailForm() - return render(request, "create_mail.html", {"form": form}) - - -def email_sent(request): - filter_list = Email.objects.filter(status="sent") - if request.GET.get("from_date", ""): - from_date = request.GET.get("from_date", "") - fd = datetime.strptime(from_date, "%Y-%m-%d").date() - filter_list = filter_list.filter(send_time__gte=fd) - if request.GET.get("to_date", ""): - to_date = request.GET.get("to_date", "") - td = datetime.strptime(to_date, "%Y-%m-%d") - td = td + timedelta(seconds=(24 * 60 * 60 - 1)) - filter_list = filter_list.filter(send_time__lte=td) - if request.GET.get("name", ""): - name = request.GET.get("name", "") - filter_list = filter_list.filter(to_email__startswith=name) - return render(request, "mail_sent.html", {"filter_list": filter_list}) - - -def email_trash(request): - filter_list = Email.objects.filter(status="trash") - if request.GET.get("from_date", ""): - from_date = request.GET.get("from_date", "") - fd = datetime.strptime(from_date, "%Y-%m-%d").date() - filter_list = filter_list.filter(send_time__gte=fd) - if request.GET.get("to_date", ""): - to_date = request.GET.get("to_date", "") - td = datetime.strptime(to_date, "%Y-%m-%d") - td = td + timedelta(seconds=(24 * 60 * 60 - 1)) - filter_list = filter_list.filter(send_time__lte=td) - if request.GET.get("name", ""): - name = request.GET.get("name", "") - filter_list = filter_list.filter(to_email__startswith=name) - return render(request, "mail_trash.html", {"filter_list": filter_list}) - - -def email_trash_delete(request, pk): - get_object_or_404(Email, id=pk).delete() - return HttpResponseRedirect(reverse("emails:email_trash")) - - -def email_draft(request): - filter_list = Email.objects.filter(status="draft") - if request.GET.get("from_date", ""): - from_date = request.GET.get("from_date", "") - fd = datetime.strptime(from_date, "%Y-%m-%d").date() - filter_list = filter_list.filter(send_time__gte=fd) - if request.GET.get("to_date", ""): - to_date = request.GET.get("to_date", "") - td = datetime.strptime(to_date, "%Y-%m-%d") - td = td + timedelta(seconds=(24 * 60 * 60 - 1)) - filter_list = filter_list.filter(send_time__lte=td) - if request.GET.get("name", ""): - name = request.GET.get("name", "") - filter_list = filter_list.filter(to_email__startswith=name) - return render(request, "mail_drafts.html", {"filter_list": filter_list}) - - -def email_draft_delete(request, pk): - get_object_or_404(Email, id=pk).delete() - return HttpResponseRedirect(reverse("emails:email_draft")) - - -def email_delete(request, pk): - get_object_or_404(Email, id=pk).delete() - return HttpResponseRedirect(reverse("emails:email_sent")) - - -def email_move_to_trash(request, pk): - trashitem = get_object_or_404(Email, id=pk) - trashitem.status = "trash" - trashitem.save() - return HttpResponseRedirect(request.META["HTTP_REFERER"]) - - -def email_imp(request, pk): - impitem = get_object_or_404(Email, id=pk) - impitem.important = True - impitem.save() - return HttpResponseRedirect(request.META["HTTP_REFERER"]) - - -def email_imp_list(request): - filter_list = Email.objects.filter(important="True") - if request.GET.get("from_date", ""): - from_date = request.GET.get("from_date", "") - fd = datetime.strptime(from_date, "%Y-%m-%d").date() - filter_list = filter_list.filter(send_time__gte=fd) - - if request.GET.get("to_date", ""): - to_date = request.GET.get("to_date", "") - td = datetime.strptime(to_date, "%Y-%m-%d") - td = td + timedelta(seconds=(24 * 60 * 60 - 1)) - filter_list = filter_list.filter(send_time__lte=td) - if request.GET.get("name", ""): - name = request.GET.get("name", "") - filter_list = filter_list.filter(to_email__startswith=name) - return render(request, "mail_important.html", {"filter_list": filter_list}) - - -def email_sent_edit(request, pk): - em = get_object_or_404(Email, pk=pk) - if request.method == "POST": - form = EmailForm(request.POST, instance=em) - if form.is_valid(): - subject = request.POST.get("subject", "") - message = request.POST.get("message", "") - from_email = request.POST.get("from_email", "") - to_email = request.POST.get("to_email", "") - file = request.FILES.get("files", None) - status = request.POST.get("email_draft", "") - email = EmailMessage(subject, message, from_email, [to_email]) - email.content_subtype = "html" - f = form.save() - if file is not None: - email.attach(file.name, file.read(), file.content_type) - f.file = file - if status: - f.status = "draft" - else: - email.send(fail_silently=False) - f.status = "sent" - f.save() - return HttpResponseRedirect(reverse("emails:list")) - return render(request, "create_mail.html", {"form": form, "em": em}) - form = EmailForm() - return render(request, "create_mail.html", {"form": form, "em": em}) - - -def email_unimp(request, pk): - unimpitem = get_object_or_404(Email, id=pk) - unimpitem.important = False - unimpitem.save() - return HttpResponseRedirect(request.META["HTTP_REFERER"]) - - -def email_view(request, pk): - email_view = get_object_or_404(Email, pk=pk) - x = EmailForm(instance=email_view) - return render(request, "create_mail.html", {"x": x}) diff --git a/events/admin.py b/events/admin.py deleted file mode 100644 index 8c38f3f3..00000000 --- a/events/admin.py +++ /dev/null @@ -1,3 +0,0 @@ -from django.contrib import admin - -# Register your models here. diff --git a/events/apps.py b/events/apps.py deleted file mode 100644 index 60b376ce..00000000 --- a/events/apps.py +++ /dev/null @@ -1,5 +0,0 @@ -from django.apps import AppConfig - - -class EventsConfig(AppConfig): - name = "events" diff --git a/events/migrations/0001_initial.py b/events/migrations/0001_initial.py deleted file mode 100644 index 0371fea6..00000000 --- a/events/migrations/0001_initial.py +++ /dev/null @@ -1,53 +0,0 @@ -# Generated by Django 4.2.1 on 2023-06-19 13:08 - -from django.conf import settings -from django.db import migrations, models -import django.db.models.deletion -import uuid - - -class Migration(migrations.Migration): - - initial = True - - dependencies = [ - ('contacts', '0001_initial'), - ('common', '0001_initial'), - migrations.swappable_dependency(settings.AUTH_USER_MODEL), - ('teams', '0001_initial'), - ] - - operations = [ - migrations.CreateModel( - name='Event', - fields=[ - ('created_at', models.DateTimeField(auto_now_add=True, verbose_name='Created At')), - ('updated_at', models.DateTimeField(auto_now=True, verbose_name='Last Modified At')), - ('id', models.UUIDField(db_index=True, default=uuid.uuid4, editable=False, primary_key=True, serialize=False, unique=True)), - ('name', models.CharField(max_length=64, verbose_name='Event')), - ('event_type', models.CharField(choices=[('Recurring', 'Recurring'), ('Non-Recurring', 'Non-Recurring')], max_length=20)), - ('status', models.CharField(blank=True, choices=[('Planned', 'Planned'), ('Held', 'Held'), ('Not Held', 'Not Held'), ('Not Started', 'Not Started'), ('Started', 'Started'), ('Completed', 'Completed'), ('Canceled', 'Canceled'), ('Deferred', 'Deferred')], max_length=64, null=True)), - ('start_date', models.DateField(default=None)), - ('start_time', models.TimeField(default=None)), - ('end_date', models.DateField(default=None)), - ('end_time', models.TimeField(blank=True, default=None, null=True)), - ('description', models.TextField(blank=True, null=True)), - ('created_on', models.DateTimeField(auto_now_add=True, verbose_name='Created on')), - ('is_active', models.BooleanField(default=True)), - ('disabled', models.BooleanField(default=False)), - ('date_of_meeting', models.DateField(blank=True, null=True)), - ('assigned_to', models.ManyToManyField(blank=True, related_name='event_assigned', to='common.profile')), - ('contacts', models.ManyToManyField(blank=True, related_name='event_contact', to='contacts.contact')), - ('created_by', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='event_created_by_user', to='common.profile')), - ('org', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='common.org')), - ('teams', models.ManyToManyField(related_name='event_teams', to='teams.teams')), - ('updated_by', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='%(class)s_updated_by', to=settings.AUTH_USER_MODEL, verbose_name='Last Modified By')), - ], - options={ - 'verbose_name': 'Event', - 'verbose_name_plural': 'Events', - 'db_table': 'event', - 'ordering': ('-created_at',), - }, - ), - ] diff --git a/events/models.py b/events/models.py deleted file mode 100644 index 8b01c326..00000000 --- a/events/models.py +++ /dev/null @@ -1,90 +0,0 @@ -import arrow -from django.db import models -from django.utils.translation import gettext_lazy as _ - -from common.models import Org, Profile -from common.base import BaseModel -from contacts.models import Contact -from teams.models import Teams - -# Create your models here. - - -class Event(BaseModel): - EVENT_TYPE = ( - ("Recurring", "Recurring"), - ("Non-Recurring", "Non-Recurring"), - # ("Call", "Call"), - # ('Meeting', 'Meeting'), - # ('Task', 'Task') - ) - EVENT_STATUS = ( - ("Planned", "Planned"), - ("Held", "Held"), - ("Not Held", "Not Held"), - ("Not Started", "Not Started"), - ("Started", "Started"), - ("Completed", "Completed"), - ("Canceled", "Canceled"), - ("Deferred", "Deferred"), - ) - name = models.CharField(_("Event"), max_length=64) - event_type = models.CharField(max_length=20, choices=EVENT_TYPE) - status = models.CharField( - choices=EVENT_STATUS, max_length=64, blank=True, null=True - ) - contacts = models.ManyToManyField(Contact, blank=True, related_name="event_contact") - assigned_to = models.ManyToManyField( - Profile, blank=True, related_name="event_assigned" - ) - start_date = models.DateField(default=None) - start_time = models.TimeField(default=None) - end_date = models.DateField(default=None) - end_time = models.TimeField(default=None, blank=True, null=True) - description = models.TextField(blank=True, null=True) - created_on = models.DateTimeField(_("Created on"), auto_now_add=True) - created_by = models.ForeignKey( - Profile, - related_name="event_created_by_user", - null=True, - on_delete=models.SET_NULL, - ) - is_active = models.BooleanField(default=True) - disabled = models.BooleanField(default=False) - date_of_meeting = models.DateField(blank=True, null=True) - teams = models.ManyToManyField(Teams, related_name="event_teams") - org = models.ForeignKey(Org, on_delete=models.SET_NULL, null=True, blank=True) - - # tags = models.ManyToManyField(Tag) - - class Meta: - verbose_name = "Event" - verbose_name_plural = "Events" - db_table = "event" - ordering = ("-created_at",) - - def __str__(self): - return f"{self.name}" - - @property - def created_on_arrow(self): - return arrow.get(self.created_on).humanize() - - @property - def get_team_users(self): - team_user_ids = list(self.teams.values_list("users__id", flat=True)) - return Profile.objects.filter(id__in=team_user_ids) - - @property - def get_team_and_assigned_users(self): - team_user_ids = list(self.teams.values_list("users__id", flat=True)) - assigned_user_ids = list(self.assigned_to.values_list("id", flat=True)) - user_ids = team_user_ids + assigned_user_ids - return Profile.objects.filter(id__in=user_ids) - - @property - def get_assigned_users_not_in_teams(self): - team_user_ids = list(self.teams.values_list("users__id", flat=True)) - assigned_user_ids = list(self.assigned_to.values_list("id", flat=True)) - user_ids = set(assigned_user_ids) - set(team_user_ids) - return Profile.objects.filter(id__in=list(user_ids)) diff --git a/events/serializer.py b/events/serializer.py deleted file mode 100644 index 3810cccd..00000000 --- a/events/serializer.py +++ /dev/null @@ -1,158 +0,0 @@ -from datetime import datetime, timedelta - -from rest_framework import serializers - -from common.serializer import ( - AttachmentsSerializer, - CommentSerializer, - OrganizationSerializer, - ProfileSerializer, - UserSerializer -) -from contacts.serializer import ContactSerializer -from events.models import Event -from teams.serializer import TeamsSerializer - - -class EventSerializer(serializers.ModelSerializer): - created_by = UserSerializer() - assigned_to = ProfileSerializer(read_only=True, many=True) - contacts = ContactSerializer(read_only=True, many=True) - teams = TeamsSerializer(read_only=True, many=True) - event_attachment = AttachmentsSerializer(read_only=True, many=True) - event_comments = CommentSerializer(read_only=True, many=True) - org = OrganizationSerializer() - - class Meta: - model = Event - fields = ( - "id", - "name", - "event_type", - "status", - "is_active", - "disabled", - "start_date", - "start_time", - "end_date", - "end_time", - "description", - "date_of_meeting", - "created_by", - "created_at", - "contacts", - "teams", - "assigned_to", - "event_attachment", - "event_comments", - "org", - ) - - -class EventCreateSerializer(serializers.ModelSerializer): - def __init__(self, *args, **kwargs): - request_obj = kwargs.pop("request_obj", None) - super(EventCreateSerializer, self).__init__(*args, **kwargs) - self.fields["event_type"].required = True - self.org = request_obj.profile.org - - def validate_name(self, name): - if self.instance: - if ( - Event.objects.filter(name__iexact=name, org=self.org) - .exclude(id=self.instance.id) - .exists() - ): - raise serializers.ValidationError("Event already exists with this name") - else: - if Event.objects.filter(name__iexact=name, org=self.org).exists(): - raise serializers.ValidationError("Event already exists with this name") - return name - - def validate_event_type(self, event_type): - """This Validation Is For Keeping The Field Readonly While Editing or Updating""" - event_type = self.initial_data.get("event_type") - if self.instance: - return self.instance.event_type - else: - return event_type - - def validate_start_date(self, start_date): - if start_date: - if self.instance: - return self.instance.start_date - else: - return start_date - else: - raise serializers.ValidationError("Enter a valid Start date.") - - def validate_end_date(self, end_date): - end_date = self.initial_data.get("end_date") - start_date = self.initial_data.get("start_date") - end_date = datetime.strptime(end_date, "%Y-%m-%d").date() - start_date = datetime.strptime(start_date, "%Y-%m-%d").date() - event_type = self.initial_data.get("event_type") - if event_type == "Recurring": - if start_date == end_date: - raise serializers.ValidationError( - "Start Date and End Date cannot be equal for recurring events" - ) - if start_date > end_date: - raise serializers.ValidationError("End Date cannot be less than start date") - return end_date - - def validate_end_time(self, end_time): - end_time = self.initial_data.get("end_time") - start_time = self.initial_data.get("start_time") - end_time = datetime.strptime(end_time, "%H:%M:%S").time() - start_time = datetime.strptime(start_time, "%H:%M:%S").time() - if not start_time: - raise serializers.ValidationError("Enter a valid start time.") - if start_time > end_time: - raise serializers.ValidationError("End Time cannot be less than Start Time") - return end_time - - class Meta: - model = Event - fields = ( - "id", - "name", - "event_type", - "start_date", - "start_time", - "end_date", - "end_time", - "status", - "is_active", - "disabled", - "description", - "created_by", - "created_at", - "org", - ) - -class EventCreateSwaggerSerializer(serializers.ModelSerializer): - - recurring_days = serializers.CharField() - class Meta: - model = Event - fields = ( - "name", - "event_type", - "contacts", - "start_date", - "start_time", - "end_date", - "end_time", - "teams", - "assigned_to", - "description", - "recurring_days" - ) - -class EventDetailEditSwaggerSerializer(serializers.Serializer): - comment = serializers.CharField() - event_attachment = serializers.FileField() - -class EventCommentEditSwaggerSerializer(serializers.Serializer): - comment = serializers.CharField() diff --git a/events/swagger_params1.py b/events/swagger_params1.py deleted file mode 100644 index ec4b994c..00000000 --- a/events/swagger_params1.py +++ /dev/null @@ -1,37 +0,0 @@ -from drf_spectacular.types import OpenApiTypes -from drf_spectacular.utils import OpenApiParameter - -organization_params_in_header = organization_params_in_header = OpenApiParameter( - "org", OpenApiTypes.STR, OpenApiParameter.HEADER -) - -organization_params = [ - organization_params_in_header, -] - -event_list_get_params = [ - organization_params_in_header, - OpenApiParameter("name", OpenApiTypes.STR,OpenApiParameter.QUERY), - OpenApiParameter("created_by", OpenApiTypes.STR,OpenApiParameter.QUERY), - OpenApiParameter("assigned_users", OpenApiTypes.STR,OpenApiParameter.QUERY), - OpenApiParameter( - "date_of_meeting", - OpenApiParameter.QUERY, - OpenApiTypes.DATE - ), -] - -event_detail_post_params = [ - organization_params_in_header, - OpenApiParameter( - "event_attachment", - OpenApiParameter.QUERY, - OpenApiTypes.BINARY - ), - OpenApiParameter("comment", OpenApiTypes.STR,OpenApiParameter.QUERY), -] - -event_comment_edit_params = [ - organization_params_in_header, - OpenApiParameter("comment", OpenApiTypes.STR,OpenApiParameter.QUERY), -] diff --git a/events/tasks.py b/events/tasks.py deleted file mode 100644 index f92cd717..00000000 --- a/events/tasks.py +++ /dev/null @@ -1,89 +0,0 @@ -from celery import Celery -from django.conf import settings -from django.core.mail import EmailMessage -from django.template.loader import render_to_string - -from common.models import Profile -from events.models import Event - -app = Celery("redis://") - - -@app.task -def send_email(event_id, recipients): - event = Event.objects.filter(id=event_id).first() - subject = " Invitation for an event." - context = {} - context["event"] = event.name - context["event_id"] = event_id - context["event_created_by"] = event.created_by - context["event_date_of_meeting"] = event.date_of_meeting - context["url"] = settings.DOMAIN_NAME - # recipients = event.assigned_to.filter(is_active=True) - for profile_id in recipients: - recipients_list = [] - profile = Profile.objects.filter(id=profile_id, is_active=True).first() - if profile: - recipients_list.append(profile.user.email) - event_members = event.assigned_to.filter(is_active=True) - - context["other_members"] = list( - event_members.exclude(id=profile.id).values_list( - "user__email", flat=True - ) - ) - if len(context["other_members"]) > 0: - context["other_members"] = ", ".join(context["other_members"]) - else: - context["other_members"] = "" - context["user"] = profile.user.email - html_content = render_to_string( - "assigned_to_email_template_event.html", context=context - ) - msg = EmailMessage(subject=subject, body=html_content, to=recipients_list) - msg.content_subtype = "html" - msg.send() - - # if recipients.count() > 0: - # for recipient in recipients: - # context['other_members'] = list(recipients.exclude( - # id=recipient.id).values_list('email', flat=True)) - # if len(context['other_members']) > 0: - # context['other_members'] = ', '.join(context['other_members']) - # else: - # context['other_members'] = '' - # context['user'] = recipient.email - # html_content = render_to_string( - # 'assigned_to_email_template_event.html', context=context) - # msg = EmailMessage( - # subject=subject, body=html_content, to=[recipient.email, ]) - # msg.content_subtype = "html" - # msg.send() - - # if recipients.count() > 0: - # for recipient in recipients: - # context['other_members'] = list(recipients.exclude( - # id=recipient.id).values_list('email', flat=True)) - # if len(context['other_members']) > 0: - # context['other_members'] = ', '.join(context['other_members']) - # else: - # context['other_members'] = '' - # context['user'] = recipient.email - # html_content = render_to_string( - # 'assigned_to_email_template_event.html', context=context) - # msg = EmailMessage( - # subject=subject, body=html_content, to=[recipient.email, ]) - # msg.content_subtype = "html" - # msg.send() - - # might need to add contacts to TODO - # recipients = event.contacts.all() - # if recipients.count() > 0: - # for recipient in recipients: - # context['user'] = recipient.email - # html_content = render_to_string( - # 'assigned_to_email_template.html', context=context) - # msg = EmailMessage( - # subject=subject, body=html_content, to=[recipient.email, ]) - # msg.content_subtype = "html" - # msg.send diff --git a/events/templates/assigned_to_email_template_event.html b/events/templates/assigned_to_email_template_event.html deleted file mode 100644 index 374e721b..00000000 --- a/events/templates/assigned_to_email_template_event.html +++ /dev/null @@ -1,32 +0,0 @@ -{% extends 'root_email_template_new.html' %} - -{% block heading %} -Hello {{ user }} -{% endblock heading %} - - -{% block content_body %} -You have been invited to the following event {{event_name}} created by {{event_created_by}} -{% endblock content_body %} - -{% block extra_content %} -

- When : {{event_date_of_meeting}} -

- -{% if other_members %} -

- Who : {{other_members}} -

-{% endif %} - -{% endblock extra_content %} - - -{% block button_link %} - -{% endblock button_link %} \ No newline at end of file diff --git a/events/tests_celery_tasks.py b/events/tests_celery_tasks.py deleted file mode 100644 index 5d9b4a99..00000000 --- a/events/tests_celery_tasks.py +++ /dev/null @@ -1,16 +0,0 @@ -from django.test import TestCase -from django.test.utils import override_settings - -from events.tasks import send_email -from events.tests import EventObjectTest - - -class TestEventCeleryTasks(EventObjectTest, TestCase): - @override_settings( - CELERY_EAGER_PROPAGATES_EXCEPTIONS=True, - CELERY_ALWAYS_EAGER=True, - BROKER_BACKEND="memory", - ) - def test_event_celery_tasks(self): - task = send_email.apply((self.event.id, [self.user.id, self.user1.id])) - self.assertEqual("SUCCESS", task.state) diff --git a/events/urls.py b/events/urls.py deleted file mode 100644 index d2a27ac6..00000000 --- a/events/urls.py +++ /dev/null @@ -1,12 +0,0 @@ -from django.urls import path - -from events import views - -app_name = "api_events" - -urlpatterns = [ - path("", views.EventListView.as_view()), - path("/", views.EventDetailView.as_view()), - path("comment//", views.EventCommentView.as_view()), - path("attachment//", views.EventAttachmentView.as_view()), -] diff --git a/events/views.py b/events/views.py deleted file mode 100644 index ee0ecd4b..00000000 --- a/events/views.py +++ /dev/null @@ -1,537 +0,0 @@ -import json -from datetime import datetime, timedelta - -from django.db.models import Q -from drf_spectacular.utils import OpenApiExample, OpenApiParameter, extend_schema - -from rest_framework import status -from rest_framework.pagination import LimitOffsetPagination -from rest_framework.permissions import IsAuthenticated -from rest_framework.response import Response -from rest_framework.views import APIView - -from common.models import Attachments, Comment, Profile, User - -#from common.external_auth import CustomDualAuthentication -from common.serializer import ( - AttachmentsSerializer, - CommentSerializer, - ProfileSerializer -) -from contacts.models import Contact -from contacts.serializer import ContactSerializer -from events import swagger_params1 -from events.models import Event -from events.serializer import EventCreateSerializer, EventSerializer, EventCreateSwaggerSerializer, EventDetailEditSwaggerSerializer, EventCommentEditSwaggerSerializer -from events.tasks import send_email -from teams.models import Teams -from teams.serializer import TeamsSerializer - -WEEKDAYS = ( - ("Monday", "Monday"), - ("Tuesday", "Tuesday"), - ("Wednesday", "Wednesday"), - ("Thursday", "Thursday"), - ("Friday", "Friday"), - ("Saturday", "Saturday"), - ("Sunday", "Sunday"), -) - - -class EventListView(APIView, LimitOffsetPagination): - model = Event - #authentication_classes = (CustomDualAuthentication,) - permission_classes = (IsAuthenticated,) - - def get_context_data(self, **kwargs): - params = self.request.query_params - queryset = self.model.objects.filter(org=self.request.profile.org).order_by("-id") - contacts = Contact.objects.filter(org=self.request.profile.org) - if self.request.profile.role != "ADMIN" and not self.request.profile.is_admin: - queryset = queryset.filter( - Q(assigned_to__in=[self.request.profile]) - | Q(created_by=self.request.profile.user) - ) - contacts = contacts.filter( - Q(created_by=self.request.profile.user) | Q(assigned_to=self.request.profile) - ).distinct() - - if params: - if params.get("name"): - queryset = queryset.filter(name__icontains=params.get("name")) - if params.get("created_by"): - queryset = queryset.filter(created_by=params.get("created_by")) - if params.getlist("assigned_users"): - queryset = queryset.filter( - assigned_to__id__in=params.get("assigned_users") - ) - if params.get("date_of_meeting"): - queryset = queryset.filter( - date_of_meeting=params.get("date_of_meeting") - ) - context = {} - results_events = self.paginate_queryset(queryset, self.request, view=self) - events = EventSerializer(results_events, many=True).data - if results_events: - offset = queryset.filter(id__gte=results_events[-1].id).count() - if offset == queryset.count(): - offset = None - else: - offset = 0 - context.update({"events_count": self.count, "offset": offset}) - context["events"] = events - context["recurring_days"] = WEEKDAYS - context["contacts_list"] = ContactSerializer(contacts, many=True).data - return context - - @extend_schema( - tags=["Events"], parameters=swagger_params1.event_list_get_params - ) - def get(self, request, *args, **kwargs): - context = self.get_context_data(**kwargs) - return Response(context) - - @extend_schema( - tags=["Events"], parameters=swagger_params1.organization_params,request=EventCreateSwaggerSerializer - ) - def post(self, request, *args, **kwargs): - params = request.data - data = {} - serializer = EventCreateSerializer(data=params, request_obj=request) - if serializer.is_valid(): - start_date = params.get("start_date") - end_date = params.get("end_date") - recurring_days = json.dumps(params.get("recurring_days")) - if params.get("event_type") == "Non-Recurring": - event_obj = serializer.save( - created_by=request.profile.user, - date_of_meeting=params.get("start_date"), - is_active=True, - disabled=False, - org=request.profile.org, - ) - - if params.get("contacts"): - obj_contact = Contact.objects.filter( - id=params.get("contacts"), org=request.profile.org - ) - event_obj.contacts.add(obj_contact) - - if params.get("teams"): - teams_list = params.get("teams") - teams = Teams.objects.filter(id__in=teams_list, org=request.profile.org) - event_obj.teams.add(*teams) - - if params.get("assigned_to"): - assinged_to_list = params.get("assigned_to") - profiles = Profile.objects.filter( - id__in=assinged_to_list, org=request.profile.org - ) - event_obj.assigned_to.add(*profiles) - - assigned_to_list = list( - event_obj.assigned_to.all().values_list("id", flat=True) - ) - send_email.delay( - event_obj.id, - assigned_to_list, - ) - if params.get("event_type") == "Recurring": - recurring_days = params.get("recurring_days") - if not recurring_days: - return Response( - {"error": True, "errors": "Choose atleast one recurring day"}, - status=status.HTTP_400_BAD_REQUEST, - ) - end_date = datetime.strptime(end_date, "%Y-%m-%d").date() - start_date = datetime.strptime(start_date, "%Y-%m-%d").date() - - delta = end_date - start_date - required_dates = [] - - for day in range(delta.days + 1): - each_date = start_date + timedelta(days=day) - if each_date.strftime("%A") in recurring_days: - required_dates.append(each_date) - - for each in required_dates: - each = datetime.strptime(str(each), "%Y-%m-%d").date() - data = serializer.validated_data - - event = Event.objects.create( - created_by=request.profile.user, - start_date=start_date, - end_date=end_date, - name=data["name"], - event_type=data["event_type"], - description=data["description"], - start_time=data["start_time"], - end_time=data["end_time"], - date_of_meeting=each, - org=request.profile.org, - ) - - if params.get("contacts"): - obj_contact = Contact.objects.filter( - id=params.get("contacts"), org=request.profile.org - ) - event.contacts.add(obj_contact) - - if params.get("teams"): - teams_list = params.get("teams") - teams = Teams.objects.filter(id__in=teams_list, org=request.profile.org) - event.teams.add(*teams) - - if params.get("assigned_to"): - assinged_to_list = params.get("assigned_to") - profiles = Profile.objects.filter( - id__in=assinged_to_list, org=request.profile.org - ) - event.assigned_to.add(*profiles) - - assigned_to_list = list( - event.assigned_to.all().values_list("id", flat=True) - ) - send_email.delay( - event.id, - assigned_to_list, - ) - return Response( - {"error": False, "message": "Event Created Successfully"}, - status=status.HTTP_200_OK, - ) - return Response( - {"error": True, "errors": serializer.errors}, - status=status.HTTP_400_BAD_REQUEST, - ) - - -class EventDetailView(APIView): - model = Event - #authentication_classes = (CustomDualAuthentication,) - permission_classes = (IsAuthenticated,) - - def get_object(self, pk): - return Event.objects.get(pk=pk) - - def get_context_data(self, **kwargs): - context = {} - user_assgn_list = [ - assigned_to.id for assigned_to in self.event_obj.assigned_to.all() - ] - if self.request.profile == self.event_obj.created_by: - user_assgn_list.append(self.request.profile.id) - if self.request.profile.role != "ADMIN" and not self.request.profile.is_admin: - if self.request.profile.id not in user_assgn_list: - return Response( - { - "error": True, - "errors": "You don't have Permission to perform this action", - }, - status=status.HTTP_403_FORBIDDEN, - ) - - comments = Comment.objects.filter(event=self.event_obj).order_by("-id") - attachments = Attachments.objects.filter(event=self.event_obj).order_by("-id") - assigned_data = self.event_obj.assigned_to.values("id", "user__email") - if self.request.profile.is_admin or self.request.profile.role == "ADMIN": - users_mention = list( - Profile.objects.filter( - is_active=True, - ).values("user__email") - ) - elif self.request.profile != self.event_obj.created_by: - users_mention = [{"username": self.event_obj.created_by.user.email}] - else: - users_mention = list( - self.event_obj.assigned_to.all().values("user__email") - ) - profile_list = Profile.objects.filter(is_active=True, org=self.request.profile.org) - if self.request.profile.role == "ADMIN" or self.request.profile.is_admin: - profiles = profile_list.order_by("user__email") - else: - profiles = profile_list.filter(role="ADMIN").order_by("user__email") - - if self.request.profile == self.event_obj.created_by: - user_assgn_list.append(self.request.profile.id) - if self.request.profile.role != "ADMIN" and not self.request.profile.is_admin: - if self.request.profile.id not in user_assgn_list: - return Response( - { - "error": True, - "errors": "You don't have Permission to perform this action", - }, - status=status.HTTP_403_FORBIDDEN, - ) - team_ids = [user.id for user in self.event_obj.get_team_users] - all_user_ids = profiles.values_list("id", flat=True) - users_excluding_team_id = set(all_user_ids) - set(team_ids) - users_excluding_team = Profile.objects.filter(id__in=users_excluding_team_id) - - selected_recurring_days = Event.objects.filter( - name=self.event_obj.name - ).values_list("date_of_meeting", flat=True) - selected_recurring_days = set( - [day.strftime("%A") for day in selected_recurring_days] - ) - context.update( - { - "event_obj": EventSerializer(self.event_obj).data, - "attachments": AttachmentsSerializer(attachments, many=True).data, - "comments": CommentSerializer(comments, many=True).data, - "selected_recurring_days": selected_recurring_days, - "users_mention": users_mention, - "assigned_data": assigned_data, - } - ) - - context["users"] = ProfileSerializer(profiles, many=True).data - context["users_excluding_team"] = ProfileSerializer( - users_excluding_team, many=True - ).data - context["teams"] = TeamsSerializer(Teams.objects.all(), many=True).data - return context - - @extend_schema( - tags=["Events"], parameters=swagger_params1.organization_params - ) - def get(self, request, pk, **kwargs): - self.event_obj = self.get_object(pk) - if self.event_obj.org != request.profile.org: - return Response( - {"error": True, "errors": "User company doesnot match with header...."}, - status=status.HTTP_403_FORBIDDEN, - ) - context = self.get_context_data(**kwargs) - return Response(context) - - @extend_schema( - tags=["Events"], parameters=swagger_params1.organization_params,request=EventDetailEditSwaggerSerializer - ) - def post(self, request, pk, **kwargs): - params = request.data - context = {} - self.event_obj = Event.objects.get(pk=pk) - if self.event_obj.org != request.profile.org: - return Response( - { - "error": True, - "errors": "User company does not match with header....", - }, - status=status.HTTP_403_FORBIDDEN, - ) - - if self.request.profile.role != "ADMIN" and not self.request.profile.is_admin: - if not ( - (self.request.profile == self.event_obj.created_by) - or (self.request.profile in self.event_obj.assigned_to.all()) - ): - return Response( - { - "error": True, - "errors": "You don't have Permission to perform this action", - }, - status=status.HTTP_403_FORBIDDEN, - ) - comment_serializer = CommentSerializer(data=params) - if comment_serializer.is_valid(): - if params.get("comment"): - comment_serializer.save( - event_id=self.event_obj.id, - commented_by_id=self.request.profile.id, - ) - - if self.request.FILES.get("event_attachment"): - attachment = Attachments() - attachment.created_by = self.request.profile.user - attachment.file_name = self.request.FILES.get("event_attachment").name - attachment.event = self.event_obj - attachment.attachment = self.request.FILES.get("event_attachment") - attachment.save() - - comments = Comment.objects.filter(event__id=self.event_obj.id).order_by("-id") - attachments = Attachments.objects.filter(event__id=self.event_obj.id).order_by( - "-id" - ) - context.update( - { - "event_obj": EventSerializer(self.event_obj).data, - "attachments": AttachmentsSerializer(attachments, many=True).data, - "comments": CommentSerializer(comments, many=True).data, - } - ) - return Response(context) - - @extend_schema( - tags=["Events"], parameters=swagger_params1.organization_params,request=EventCreateSwaggerSerializer - ) - def put(self, request, pk, **kwargs): - params = request.data - data = {} - self.event_obj = self.get_object(pk) - if self.event_obj.org != request.profile.org: - return Response( - {"error": True, "errors": "User company doesnot match with header...."}, - status=status.HTTP_403_FORBIDDEN, - ) - serializer = EventCreateSerializer( - data=params, - instance=self.event_obj, - request_obj=request, - ) - if serializer.is_valid(): - event_obj = serializer.save() - previous_assigned_to_users = list( - event_obj.assigned_to.all().values_list("id", flat=True) - ) - if params.get("event_type") == "Non-Recurring": - event_obj.date_of_meeting = event_obj.start_date - - event_obj.contacts.clear() - if params.get("contacts"): - obj_contact = Contact.objects.filter( - id=params.get("contacts"), org=request.profile.org - ) - event_obj.contacts.add(obj_contact) - - event_obj.teams.clear() - if params.get("teams"): - teams_list = params.get("teams") - teams = Teams.objects.filter(id__in=teams_list, org=request.profile.org) - event_obj.teams.add(*teams) - - event_obj.assigned_to.clear() - if params.get("assigned_to"): - assinged_to_list = params.get("assigned_to") - profiles = Profile.objects.filter( - id__in=assinged_to_list, org=request.profile.org - ) - event_obj.assigned_to.add(*profiles) - - assigned_to_list = list( - event_obj.assigned_to.all().values_list("id", flat=True) - ) - recipients = list(set(assigned_to_list) - set(previous_assigned_to_users)) - send_email.delay( - event_obj.id, - recipients, - ) - return Response( - {"error": False, "message": "Event updated Successfully"}, - status=status.HTTP_200_OK, - ) - return Response( - {"error": True, "errors": serializer.errors}, - status=status.HTTP_400_BAD_REQUEST, - ) - - @extend_schema( - tags=["Events"], parameters=swagger_params1.organization_params - ) - def delete(self, request, pk, **kwargs): - self.object = self.get_object(pk) - if ( - request.profile.role == "ADMIN" - or request.profile.is_admin - or request.profile == self.object.created_by - ) and self.object.org == request.profile.org: - self.object.delete() - return Response( - {"error": False, "message": "Event deleted Successfully"}, - status=status.HTTP_200_OK, - ) - return Response( - {"error": True, "errors": "you don't have permission to delete this event"}, - status=status.HTTP_403_FORBIDDEN, - ) - - -class EventCommentView(APIView): - model = Comment - #authentication_classes = (CustomDualAuthentication,) - permission_classes = (IsAuthenticated,) - - def get_object(self, pk): - return self.model.objects.get(pk=pk) - - @extend_schema( - tags=["Events"], parameters=swagger_params1.organization_params,request=EventCommentEditSwaggerSerializer - ) - def put(self, request, pk, format=None): - params = request.data - obj = self.get_object(pk) - if ( - request.profile.role == "ADMIN" - or request.profile.is_admin - or request.profile == obj.commented_by - ): - serializer = CommentSerializer(obj, data=params) - if serializer.is_valid(): - serializer.save() - return Response( - {"error": False, "message": "Comment Submitted"}, - status=status.HTTP_200_OK, - ) - return Response( - {"error": True, "errors": serializer.errors}, - status=status.HTTP_400_BAD_REQUEST, - ) - return Response( - { - "error": True, - "errors": "You don't have Permission to perform this action", - }, - status=status.HTTP_403_FORBIDDEN, - ) - - @extend_schema( - tags=["Events"], parameters=swagger_params1.organization_params - ) - def delete(self, request, pk, format=None): - self.object = self.get_object(pk) - if ( - request.profile.role == "ADMIN" - or request.profile.is_admin - or request.profile == self.object.commented_by - ): - self.object.delete() - return Response( - {"error": False, "message": "Comment Deleted Successfully"}, - status=status.HTTP_200_OK, - ) - return Response( - { - "error": True, - "errors": "You don't have Permission to perform this action", - }, - status=status.HTTP_403_FORBIDDEN, - ) - - -class EventAttachmentView(APIView): - model = Attachments - #authentication_classes = (CustomDualAuthentication,) - permission_classes = (IsAuthenticated,) - - @extend_schema( - tags=["Events"], parameters=swagger_params1.organization_params - ) - def delete(self, request, pk, format=None): - self.object = self.model.objects.get(pk=pk) - if ( - request.profile.role == "ADMIN" - or request.profile.is_admin - or request.profile == self.object.created_by - ): - self.object.delete() - return Response( - {"error": False, "message": "Attachment Deleted Successfully"}, - status=status.HTTP_200_OK, - ) - return Response( - { - "error": True, - "errors": "You don't have Permission to perform this action", - }, - status=status.HTTP_403_FORBIDDEN, - ) diff --git a/frontend/.env.example b/frontend/.env.example new file mode 100644 index 00000000..8e69bac7 --- /dev/null +++ b/frontend/.env.example @@ -0,0 +1,9 @@ +# Google OAuth (client_id only - secret is on backend) +GOOGLE_CLIENT_ID="your-google-client-id-here" +GOOGLE_LOGIN_DOMAIN="http://localhost:5173" + +# Django API URL (PUBLIC_ prefix makes it available in both server and browser) +PUBLIC_DJANGO_API_URL=http://localhost:8000 + +# Environment +NODE_ENV=development diff --git a/frontend/.gitignore b/frontend/.gitignore new file mode 100644 index 00000000..43ea859a --- /dev/null +++ b/frontend/.gitignore @@ -0,0 +1,27 @@ +node_modules + +# Output +.output +.vercel +.netlify +.wrangler +/.svelte-kit +/build + +# OS +.DS_Store +Thumbs.db + +# Env +.env +.env.* +!.env.example +!.env.test + +# Vite +vite.config.js.timestamp-* +vite.config.ts.timestamp-* + +generated/* +src/generated/* +.github/prompts/* diff --git a/frontend/.npmrc b/frontend/.npmrc new file mode 100644 index 00000000..b6f27f13 --- /dev/null +++ b/frontend/.npmrc @@ -0,0 +1 @@ +engine-strict=true diff --git a/frontend/.prettierignore b/frontend/.prettierignore new file mode 100644 index 00000000..6562bcbb --- /dev/null +++ b/frontend/.prettierignore @@ -0,0 +1,6 @@ +# Package Managers +package-lock.json +pnpm-lock.yaml +yarn.lock +bun.lock +bun.lockb diff --git a/frontend/.prettierrc b/frontend/.prettierrc new file mode 100644 index 00000000..7ebb855b --- /dev/null +++ b/frontend/.prettierrc @@ -0,0 +1,15 @@ +{ + "useTabs": true, + "singleQuote": true, + "trailingComma": "none", + "printWidth": 100, + "plugins": ["prettier-plugin-svelte", "prettier-plugin-tailwindcss"], + "overrides": [ + { + "files": "*.svelte", + "options": { + "parser": "svelte" + } + } + ] +} diff --git a/frontend/README.md b/frontend/README.md new file mode 100644 index 00000000..246e92f2 --- /dev/null +++ b/frontend/README.md @@ -0,0 +1,229 @@ +# BottleCRM: Free and Open Source Customer Relationship Management + +
+

Powerful, Modern Multi-Tenant CRM for Everyone

+
+ +BottleCRM is a free, open-source Customer Relationship Management solution designed to help small and medium businesses effectively manage their customer relationships. Built with modern technologies and enterprise-grade multi-tenancy, it offers a comprehensive set of features without the enterprise price tag. + +## ✨ Key Highlights + +- **Multi-Tenant Architecture**: Secure organization-based data isolation +- **Role-Based Access Control**: Granular permissions for users and admins +- **Modern Technology Stack**: Built with SvelteKit 2.x, Svelte 5.x, and PostgreSQL +- **Mobile-First Design**: Responsive interface optimized for all devices + +## 🚀 Core Features + +### Sales & Lead Management + +- **Lead Management**: Track and nurture leads from initial contact to conversion +- **Account Management**: Maintain detailed records of customer accounts and organizations +- **Contact Management**: Store and organize all your customer contact information +- **Opportunity Management**: Track deals through your sales pipeline with customizable stages + +### Customer Support + +- **Case Management**: Handle customer support cases and track resolution +- **Solution Knowledge Base**: Maintain searchable solutions for common issues +- **Multi-Channel Support**: Handle cases from various origins (email, web, phone) + +### Productivity & Collaboration + +- **Task Management**: Never miss a follow-up with built-in task tracking +- **Event Management**: Schedule and manage meetings and activities +- **Board Management**: Trello-like kanban boards for project tracking +- **Comment System**: Collaborate with team members on records + +### Sales Tools + +- **Quote Management**: Generate professional quotes with line items +- **Product Catalog**: Maintain product inventory with pricing +- **Sales Pipeline**: Visual opportunity tracking with probability scoring + +### Administrative Features + +- **User Management**: Add team members with appropriate role assignments +- **Organization Management**: Multi-tenant structure with data isolation +- **Audit Logging**: Complete activity tracking for compliance +- **Super Admin Panel**: Platform-wide management for system administrators + +## 🔮 Coming Soon + +- **Invoice Management**: Create, send, and track invoices (in development) +- **Email Integration**: Connect your email accounts for seamless communication +- **Analytics Dashboard**: Make data-driven decisions with powerful reporting tools +- **API Integration**: REST API for third-party integrations + +## 🖥️ Technology Stack + +- **Frontend**: SvelteKit 2.x, Svelte 5.x, TailwindCSS 4.x +- **Backend**: Node.js with Prisma ORM +- **Database**: PostgreSQL (recommended) with multi-tenant schema +- **Authentication**: Session-based authentication with organization membership +- **Icons**: Lucide Svelte icon library +- **Validation**: Zod for type-safe form validation + +## 🚀 Getting Started + +### Prerequisites + +- **Node.js**: v22.13.0 (use nvm for version management) +- **Package Manager**: pnpm (recommended) +- **Database**: PostgreSQL (required for multi-tenancy features) + +### Installation + +1. **Clone the repository:** + +```bash +git clone https://github.com/micropyramid/svelte-crm.git +cd svelte-crm +``` + +2. **Set up Node.js version:** + +```bash +nvm use 22.13.0 +``` + +3. **Install dependencies:** + +```bash +pnpm install +``` + +4. **Configure environment variables:** + Create a `.env` file based on the following template: + +```env +# Database Configuration +DATABASE_URL="postgresql://postgres:password@localhost:5432/bottlecrm?schema=public" + +# JWT Secret (required for authentication) +# Generate a secure secret using openssl: +# openssl rand -base64 32 +JWT_SECRET="" + +# Google OAuth (Optional) +GOOGLE_CLIENT_ID="" +GOOGLE_CLIENT_SECRET="" +GOOGLE_LOGIN_DOMAIN="http://localhost:5173" +``` + +5. **Set up the database:** + +```bash +# Generate Prisma client +npx prisma generate + +# Run database migrations +npx prisma migrate dev + +# (Optional) Open Prisma Studio to view data +npx prisma studio +``` + +6. **Start the development server:** + +```bash +pnpm run dev +``` + +### Development Workflow + +Before committing code, ensure quality checks pass: + +```bash +# Type checking +pnpm run check + +# Linting and formatting +pnpm run lint + +# Build verification +pnpm run build +``` + +### Production Deployment + +```bash +# Set Node.js version +nvm use 22.13.0 + +# Generate Prisma client +npx prisma generate + +# Run production migrations +npx prisma migrate deploy + +# Build application +pnpm run build + +# Start production server +pnpm run preview +``` + +## 🏗️ Architecture & Security + +### Multi-Tenant Design + +- **Organization Isolation**: Complete data separation between organizations +- **Role-Based Access**: Users can have different roles across organizations +- **Session Management**: Secure cookie-based authentication with organization context + +### User Roles + +- **User**: Standard access to organization data +- **Admin**: Organization-level administrative privileges +- **Super Admin**: Platform-wide access (requires @micropyramid.com email) + +### Data Security + +- All database queries are organization-scoped +- Strict permission validation on all routes +- Audit logging for compliance and tracking + +## 📁 Project Structure + +``` +src/ +├── routes/ +│ ├── (site)/ # Public marketing pages +│ ├── (no-layout)/ # Authentication pages +│ ├── (app)/ # Main CRM application +│ └── (admin)/ # Super admin panel +├── lib/ +│ ├── stores/ # Svelte stores for state management +│ ├── data/ # Static data and configurations +│ └── utils/ # Utility functions +└── hooks.server.js # Authentication and route protection +``` + +## 💬 Community and Feedback + +We love to hear from our users! Please share your feedback, report bugs, or suggest new features: + +- **Issues**: Open an issue on GitHub for bugs and feature requests +- **Discussions**: Join community discussions for general questions +- **Pull Requests**: Contribute code improvements and new features + +## 🤝 Contributing + +We welcome contributions of all kinds! See our [CONTRIBUTING.md](CONTRIBUTING.md) for details on how to get started. + +### Development Guidelines + +- Follow existing code patterns and conventions +- Ensure all forms have proper accessibility (labels associated with controls) +- Never use `$app` imports from SvelteKit (see packaging best practices) +- Always filter database queries by organization membership +- Add appropriate error handling and validation + +## 📄 License + +BottleCRM is open source software [licensed as MIT](LICENSE). + +--- + +_Built with ❤️ for small businesses everywhere. We believe quality CRM software should be accessible to everyone._ diff --git a/frontend/eslint.config.js b/frontend/eslint.config.js new file mode 100644 index 00000000..81b0525d --- /dev/null +++ b/frontend/eslint.config.js @@ -0,0 +1,26 @@ +import prettier from 'eslint-config-prettier'; +import js from '@eslint/js'; +import { includeIgnoreFile } from '@eslint/compat'; +import svelte from 'eslint-plugin-svelte'; +import globals from 'globals'; +import { fileURLToPath } from 'node:url'; +import svelteConfig from './svelte.config.js'; + +const gitignorePath = fileURLToPath(new URL('./.gitignore', import.meta.url)); + +export default [ + includeIgnoreFile(gitignorePath), + js.configs.recommended, + ...svelte.configs.recommended, + prettier, + ...svelte.configs.prettier, + { + languageOptions: { + globals: { ...globals.browser, ...globals.node } + } + }, + { + files: ['**/*.svelte', '**/*.svelte.js'], + languageOptions: { parserOptions: { svelteConfig } } + } +]; diff --git a/frontend/jsconfig.json b/frontend/jsconfig.json new file mode 100644 index 00000000..e6092646 --- /dev/null +++ b/frontend/jsconfig.json @@ -0,0 +1,22 @@ +{ + "extends": "./.svelte-kit/tsconfig.json", + "compilerOptions": { + "allowJs": true, + "checkJs": true, + "esModuleInterop": true, + "forceConsistentCasingInFileNames": true, + "resolveJsonModule": true, + "skipLibCheck": true, + "sourceMap": true, + "strict": true, + "noImplicitAny": false, + "useUnknownInCatchVariables": false, + "strictNullChecks": false, + "moduleResolution": "bundler" + } + // Path aliases are handled by https://svelte.dev/docs/kit/configuration#alias + // except $lib which is handled by https://svelte.dev/docs/kit/configuration#files + // + // If you want to overwrite includes/excludes, make sure to copy over the relevant includes/excludes + // from the referenced tsconfig.json - TypeScript does not merge them in +} diff --git a/frontend/package.json b/frontend/package.json new file mode 100644 index 00000000..b03d320e --- /dev/null +++ b/frontend/package.json @@ -0,0 +1,53 @@ +{ + "name": "svelte-crm", + "private": true, + "version": "0.0.1", + "type": "module", + "scripts": { + "dev": "vite dev", + "build": "vite build", + "preview": "vite preview", + "prepare": "svelte-kit sync || echo ''", + "check": "svelte-kit sync && svelte-check --tsconfig ./jsconfig.json", + "check:watch": "svelte-kit sync && svelte-check --tsconfig ./jsconfig.json --watch", + "format": "prettier --write .", + "lint": "prettier --check . && eslint ." + }, + "devDependencies": { + "@eslint/compat": "^2.0.0", + "@eslint/js": "^9.39.1", + "@sveltejs/adapter-node": "^5.4.0", + "@sveltejs/kit": "^2.48.5", + "@sveltejs/vite-plugin-svelte": "^6.2.1", + "@tailwindcss/typography": "^0.5.19", + "@tailwindcss/vite": "^4.1.17", + "eslint": "^9.39.1", + "eslint-config-prettier": "^10.1.8", + "eslint-plugin-svelte": "^3.13.0", + "globals": "^16.5.0", + "prettier": "^3.6.2", + "prettier-plugin-svelte": "^3.4.0", + "prettier-plugin-tailwindcss": "^0.7.1", + "svelte": "^5.43.12", + "svelte-check": "^4.3.4", + "tailwindcss": "^4.1.17", + "typescript": "^5.9.3", + "vite": "^7.2.2" + }, + "pnpm": { + "onlyBuiltDependencies": [ + "esbuild" + ] + }, + "dependencies": { + "@lucide/svelte": "^0.554.0", + "axios": "^1.13.2", + "date-fns": "^4.1.0", + "dotenv": "^17.2.3", + "libphonenumber-js": "^1.12.27", + "marked": "^17.0.0", + "svelte-meta-tags": "^4.5.0", + "uuid": "^13.0.0", + "zod": "^4.1.12" + } +} diff --git a/frontend/src/app.css b/frontend/src/app.css new file mode 100644 index 00000000..8b958409 --- /dev/null +++ b/frontend/src/app.css @@ -0,0 +1,4 @@ +@import 'tailwindcss'; +@plugin '@tailwindcss/typography'; + +@variant dark (&:where(.dark, .dark *)); diff --git a/frontend/src/app.d.ts b/frontend/src/app.d.ts new file mode 100644 index 00000000..e4ad273d --- /dev/null +++ b/frontend/src/app.d.ts @@ -0,0 +1,17 @@ +// See https://svelte.dev/docs/kit/types#app.d.ts +// for information about these interfaces +declare global { + namespace App { + // interface Error {} + interface Locals { + user?: any; // You might want to replace 'any' with a more specific type for user + org?: any; // You might want to replace 'any' with a more specific type for org + org_name?: string; + } + // interface PageData {} + // interface PageState {} + // interface Platform {} + } +} + +export {}; diff --git a/frontend/src/app.html b/frontend/src/app.html new file mode 100644 index 00000000..98b93cfd --- /dev/null +++ b/frontend/src/app.html @@ -0,0 +1,23 @@ + + + + + + + + + + %sveltekit.head% + + +
%sveltekit.body%
+ + diff --git a/frontend/src/hooks.server.js b/frontend/src/hooks.server.js new file mode 100644 index 00000000..87b7dc86 --- /dev/null +++ b/frontend/src/hooks.server.js @@ -0,0 +1,288 @@ +/** + * SvelteKit Server Hooks with JWT Authentication + * + * Authentication Flow: + * 1. JWT tokens stored in cookies (httpOnly for security) + * 2. Decode JWT locally to check org context (no API call needed) + * 3. Only call switch-org if token doesn't have correct org + * 4. Routes protected based on authentication and org membership + */ + +import { redirect } from '@sveltejs/kit'; +import axios from 'axios'; +import { env } from '$env/dynamic/public'; + +const API_BASE_URL = `${env.PUBLIC_DJANGO_API_URL}/api`; + +/** + * @typedef {{ org_id?: string, user_id?: string, exp?: number, iat?: number }} JWTPayload + * @typedef {{ id: string, name: string }} OrgInfo + * @typedef {{ org: OrgInfo, role?: string }} ProfileInfo + * @typedef {{ organizations?: Array<{ id: string, name: string }> }} UserInfo + * @typedef {{ access_token: string, refresh_token: string, current_org?: OrgInfo }} SwitchOrgResult + */ + +/** + * Decode JWT payload without verification (for reading claims only) + * @param {string} token - JWT token + * @returns {JWTPayload|null} Decoded payload or null if invalid + */ +function decodeJwtPayload(token) { + try { + const parts = token.split('.'); + if (parts.length !== 3) return null; + + const payload = parts[1]; + // Handle base64url encoding + const base64 = payload.replace(/-/g, '+').replace(/_/g, '/'); + const jsonPayload = Buffer.from(base64, 'base64').toString('utf8'); + return /** @type {JWTPayload} */ (JSON.parse(jsonPayload)); + } catch (error) { + return null; + } +} + +/** + * Check if JWT token has the specified org_id in its payload + * @param {string} token - JWT token + * @param {string} orgId - Organization UUID to check + * @returns {boolean} True if token has the org context + */ +function tokenHasOrgContext(token, orgId) { + const payload = decodeJwtPayload(token); + return Boolean(payload && payload.org_id === orgId); +} + +/** + * Verify JWT token with Django backend + * @param {string} accessToken - JWT access token + * @returns {Promise} User data or null if invalid + */ +async function verifyToken(accessToken) { + try { + const response = await axios.get(`${API_BASE_URL}/auth/me/`, { + headers: { + Authorization: `Bearer ${accessToken}` + } + }); + + return response.data; + } catch (error) { + console.error('Token verification failed:', error); + return null; + } +} + +/** + * Refresh access token using refresh token + * @param {string} refreshToken - JWT refresh token + * @returns {Promise} New access token or null if refresh failed + */ +async function refreshAccessToken(refreshToken) { + try { + const response = await axios.post(`${API_BASE_URL}/auth/refresh-token/`, { + refresh: refreshToken + }); + + return response.data.access; + } catch (error) { + console.error('Token refresh failed:', error); + return null; + } +} + +/** + * Get profile for specific organization + * @param {string} accessToken - JWT access token + * @returns {Promise} Profile data or null if invalid + */ +async function getProfile(accessToken) { + try { + const response = await axios.get(`${API_BASE_URL}/auth/profile/`, { + headers: { + Authorization: `Bearer ${accessToken}` + } + }); + + return response.data; + } catch (error) { + console.error('Profile fetch failed:', error); + return null; + } +} + +/** + * Switch organization and get new tokens with org context + * @param {string} accessToken - Current JWT access token + * @param {string} orgId - Organization UUID to switch to + * @returns {Promise} New tokens and org data or null if failed + */ +async function switchOrg(accessToken, orgId) { + try { + const response = await axios.post( + `${API_BASE_URL}/auth/switch-org/`, + { org_id: orgId }, + { + headers: { + Authorization: `Bearer ${accessToken}`, + 'Content-Type': 'application/json' + } + } + ); + + return response.data; + } catch (error) { + console.error('Org switch failed:', error); + return null; + } +} + +/** @type {import('@sveltejs/kit').Handle} */ +export async function handle({ event, resolve }) { + // Get tokens from cookies + /** @type {string | undefined} */ + let accessToken = event.cookies.get('jwt_access'); + const refreshToken = event.cookies.get('jwt_refresh'); + const orgId = event.cookies.get('org'); + + /** @type {UserInfo | null} */ + let user = null; + + // Try to authenticate user + if (accessToken) { + user = await verifyToken(accessToken); + + // If access token expired, try to refresh + if (!user && refreshToken) { + const newAccessToken = await refreshAccessToken(refreshToken); + if (newAccessToken) { + // Update cookie with new access token (use jwt_access for consistency with login) + event.cookies.set('jwt_access', newAccessToken, { + path: '/', + httpOnly: true, + sameSite: 'lax', + secure: process.env.NODE_ENV === 'production', + maxAge: 60 * 60 * 24 // 1 day + }); + accessToken = newAccessToken; + user = await verifyToken(newAccessToken); + } else { + // Refresh failed, clear cookies + event.cookies.delete('jwt_access', { path: '/' }); + event.cookies.delete('jwt_refresh', { path: '/' }); + event.cookies.delete('org', { path: '/' }); + } + } + } + + // Set user in locals + if (user) { + event.locals.user = user; + + // Check if org cookie is set + if (orgId) { + // Verify user has access to this organization + const userOrg = user.organizations?.find((org) => org.id === orgId); + + if (userOrg) { + // accessToken must be defined here since we're inside if (user) block + const token = /** @type {string} */ (accessToken); + // OPTIMIZATION: Check if token already has correct org context + // This avoids unnecessary API calls on every request + if (tokenHasOrgContext(token, orgId)) { + // Token already has org context, just get profile + const profile = await getProfile(token); + + if (profile) { + event.locals.org = profile.org; + /** @type {any} */ (event.locals).profile = profile; + event.locals.org_name = profile.org.name; + } else { + // Profile fetch failed, clear org cookie + event.cookies.delete('org', { path: '/' }); + } + } else { + // Token doesn't have org context, need to switch + const switchResult = await switchOrg(token, orgId); + + if (switchResult) { + // Update cookies with new tokens that have org context + event.cookies.set('jwt_access', switchResult.access_token, { + path: '/', + httpOnly: true, + sameSite: 'lax', + secure: process.env.NODE_ENV === 'production', + maxAge: 60 * 60 * 24 // 1 day + }); + event.cookies.set('jwt_refresh', switchResult.refresh_token, { + path: '/', + httpOnly: true, + sameSite: 'lax', + secure: process.env.NODE_ENV === 'production', + maxAge: 60 * 60 * 24 * 365 // 1 year + }); + + // Update accessToken for profile fetch + accessToken = switchResult.access_token; + + // Get profile using the new token + const profile = await getProfile(accessToken); + + if (profile) { + event.locals.org = profile.org; + /** @type {any} */ (event.locals).profile = profile; + event.locals.org_name = switchResult.current_org?.name || profile.org.name; + } else { + // Profile fetch failed, clear org cookie + event.cookies.delete('org', { path: '/' }); + } + } else { + // Org switch failed, clear org cookie + event.cookies.delete('org', { path: '/' }); + } + } + } else { + // User doesn't have access to this organization, clear org cookie + event.cookies.delete('org', { path: '/' }); + // Don't throw error here, just redirect + throw redirect(307, '/org'); + } + } + } + + // Route protection + const pathname = event.url.pathname; + + // Define public routes (no auth required) + const PUBLIC_ROUTES = ['/login', '/logout', '/bounce']; + + // Define semi-protected routes (auth required, but no org) + const AUTH_ONLY_ROUTES = ['/org']; + + // Check if public route + const isPublicRoute = PUBLIC_ROUTES.some( + (route) => pathname === route || pathname.startsWith(route + '/') + ); + + // Check if auth-only route + const isAuthOnlyRoute = AUTH_ONLY_ROUTES.some( + (route) => pathname === route || pathname.startsWith(route + '/') + ); + + if (isAuthOnlyRoute) { + // Auth-only route - require user + if (!user) { + throw redirect(307, '/login'); + } + } else if (!isPublicRoute) { + // Protected route - require user + org + if (!user) { + throw redirect(307, '/login'); + } + if (!event.locals.org) { + throw redirect(307, '/org'); + } + } + + return resolve(event); +} diff --git a/frontend/src/lib/api-helpers.js b/frontend/src/lib/api-helpers.js new file mode 100644 index 00000000..cc61b1df --- /dev/null +++ b/frontend/src/lib/api-helpers.js @@ -0,0 +1,233 @@ +/** + * API Helper Functions + * + * Shared utilities for making API requests to Django backend. + * Used by SvelteKit server files during migration from Prisma to API. + */ + +import { env } from '$env/dynamic/public'; + +const API_BASE_URL = `${env.PUBLIC_DJANGO_API_URL}/api`; + +/** + * @typedef {import('@sveltejs/kit').Cookies} Cookies + */ + +/** + * Make authenticated API request to Django backend + * + * This helper is designed for SvelteKit server-side use, where cookies + * are managed by hooks and locals contains the user and org context. + * + * @param {string} endpoint - API endpoint (e.g., '/accounts/', '/leads/123/') + * @param {{ method?: string, body?: Record, headers?: Record }} options - Fetch options + * @param {{ cookies?: Cookies, org?: { id: string } } | Cookies} locals - SvelteKit locals object or cookies directly + * @returns {Promise} Response data + * @throws {Error} If request fails + */ +export async function apiRequest(endpoint, options = {}, locals) { + const { method = 'GET', body, headers = {} } = options; + + // Get access token from cookies (server-side) + // In server load functions, cookies is passed directly + /** @type {Cookies | undefined} */ + const cookies = /** @type {Cookies | undefined} */ ( + /** @type {{ cookies?: Cookies }} */ (locals).cookies || locals + ); + // Support both naming conventions (jwt_access from login, access_token from legacy) + const accessToken = cookies?.get?.('jwt_access') || cookies?.get?.('access_token'); + + // Build request headers + /** @type {Record} */ + const requestHeaders = { + 'Content-Type': 'application/json', + ...headers + }; + + // Add authentication + // Note: Organization context is now embedded in JWT token, not sent as header + if (accessToken) { + requestHeaders['Authorization'] = `Bearer ${accessToken}`; + } + + // Build request options + /** @type {RequestInit} */ + const requestOptions = { + method, + headers: requestHeaders + }; + + // Add body for non-GET requests + if (body && method !== 'GET') { + requestOptions.body = JSON.stringify(body); + } + + const url = `${API_BASE_URL}${endpoint}`; + + try { + const response = await fetch(url, requestOptions); + + // Handle error responses + if (!response.ok) { + const errorData = await response.json().catch(() => ({})); + + // Extract meaningful error message from various Django error formats + let errorMessage = `HTTP ${response.status}: ${response.statusText}`; + + if (errorData.detail) { + errorMessage = errorData.detail; + } else if (errorData.error && typeof errorData.error === 'string') { + errorMessage = errorData.error; + } else if (errorData.errors && typeof errorData.errors === 'object') { + // Handle field-level errors + const fieldErrors = Object.entries(errorData.errors) + .map(([field, msgs]) => `${field}: ${Array.isArray(msgs) ? msgs.join(', ') : msgs}`) + .join('; '); + errorMessage = fieldErrors || errorMessage; + } else if (errorData.non_field_errors) { + errorMessage = Array.isArray(errorData.non_field_errors) + ? errorData.non_field_errors.join(', ') + : errorData.non_field_errors; + } else if (typeof errorData === 'object' && Object.keys(errorData).length > 0) { + // Handle field-level validation errors from DRF serializers + const fieldErrors = Object.entries(errorData) + .filter(([key, value]) => key !== 'error' || typeof value === 'string') + .map(([field, msgs]) => { + if (Array.isArray(msgs)) { + return `${field}: ${msgs.join(', ')}`; + } else if (typeof msgs === 'string') { + return `${field}: ${msgs}`; + } + return null; + }) + .filter(Boolean) + .join('; '); + if (fieldErrors) { + errorMessage = fieldErrors; + } + } + + console.error(`API Error Response:`, errorData); + throw new Error(errorMessage); + } + + // Handle 204 No Content + if (response.status === 204) { + return null; + } + + // Return JSON response + return await response.json(); + } catch (error) { + console.error(`API request failed: ${method} ${endpoint}`, error); + throw error; + } +} + +/** + * Transform Django field names to camelCase for SvelteKit + * + * @param {any} obj - Django object with snake_case fields + * @returns {any} Object with camelCase fields + */ +export function transformFromDjango(obj) { + if (!obj) return obj; + if (Array.isArray(obj)) return obj.map(transformFromDjango); + if (typeof obj !== 'object') return obj; + + /** @type {Record} */ + const transformed = {}; + for (const [key, value] of Object.entries(obj)) { + const camelKey = key.replace(/_([a-z])/g, (_, letter) => letter.toUpperCase()); + transformed[camelKey] = typeof value === 'object' ? transformFromDjango(value) : value; + } + return transformed; +} + +/** + * Transform camelCase field names to Django snake_case + * + * @param {any} obj - SvelteKit object with camelCase fields + * @returns {any} Object with snake_case fields + */ +export function transformToDjango(obj) { + if (!obj) return obj; + if (Array.isArray(obj)) return obj.map(transformToDjango); + if (typeof obj !== 'object') return obj; + + /** @type {Record} */ + const transformed = {}; + for (const [key, value] of Object.entries(obj)) { + const snakeKey = key.replace(/[A-Z]/g, (letter) => `_${letter.toLowerCase()}`); + transformed[snakeKey] = typeof value === 'object' ? transformToDjango(value) : value; + } + return transformed; +} + +/** + * Build Django query parameters from filter object + * + * @param {Object} filters - Filter object + * @param {number} [filters.page] - Page number (1-indexed) + * @param {number} [filters.limit] - Items per page + * @param {string} [filters.sort] - Sort field name + * @param {string} [filters.order] - Sort order ('asc' or 'desc') + * @returns {URLSearchParams} Query parameters for Django API + */ +export function buildQueryParams(filters = {}) { + const { page = 1, limit = 10, sort, order = 'asc', ...otherFilters } = filters; + + const params = new URLSearchParams(); + + // Pagination + params.append('limit', limit.toString()); + params.append('offset', ((page - 1) * limit).toString()); + + // Sorting (Django uses - prefix for descending) + if (sort) { + const ordering = order === 'desc' ? `-${sort}` : sort; + params.append('ordering', ordering); + } + + // Other filters + for (const [key, value] of Object.entries(otherFilters)) { + if (value !== null && value !== undefined && value !== '') { + params.append(key, value.toString()); + } + } + + return params; +} + +/** + * Extract pagination info from Django response + * + * @param {{ count?: number, next?: string | null, previous?: string | null, results?: unknown[] }} response - Django paginated response + * @param {number} [limit=10] - Items per page + * @returns {{ page: number, limit: number, total: number, totalPages: number, hasNext: boolean, hasPrevious: boolean }} Pagination info compatible with SvelteKit + */ +export function extractPagination(response, limit = 10) { + const total = response.count || 0; + const totalPages = Math.ceil(total / limit); + + // Determine current page from offset in next/previous URLs + let currentPage = 1; + if (response.next) { + const url = new URL(response.next, 'http://localhost'); + const offset = parseInt(url.searchParams.get('offset') || '0'); + currentPage = Math.floor(offset / limit); + } else if (response.previous) { + const url = new URL(response.previous, 'http://localhost'); + const offset = parseInt(url.searchParams.get('offset') || '0'); + currentPage = Math.floor(offset / limit) + 2; + } + + return { + page: currentPage, + limit, + total, + totalPages, + hasNext: response.next !== null, + hasPrevious: response.previous !== null + }; +} diff --git a/frontend/src/lib/api.js b/frontend/src/lib/api.js new file mode 100644 index 00000000..534cfaf8 --- /dev/null +++ b/frontend/src/lib/api.js @@ -0,0 +1,470 @@ +/** + * API Client for Django REST Framework Backend + * + * This module provides a centralized API client for making requests to the Django backend. + * It handles JWT authentication, organization context, and common API patterns. + * + * @module lib/api + */ + +import { env } from '$env/dynamic/public'; +import { goto } from '$app/navigation'; + +// API Base URL from environment variables +// Note: VITE_ prefix is required for client-side env vars +const API_BASE_URL = env.PUBLIC_DJANGO_API_URL + ? `${env.PUBLIC_DJANGO_API_URL}/api` + : 'http://localhost:8000/api'; + +/** + * Storage keys for tokens and org + */ +const STORAGE_KEYS = { + ACCESS_TOKEN: 'access_token', + REFRESH_TOKEN: 'refresh_token', + ORG_ID: 'org_id', + USER: 'user' +}; + +/** + * Get token from localStorage (client-side) or return null (server-side) + * @param {string} key - Storage key + * @returns {string|null} + */ +function getFromStorage(key) { + if (typeof window === 'undefined') return null; + return localStorage.getItem(key); +} + +/** + * Set token in localStorage (client-side only) + * @param {string} key - Storage key + * @param {string} value - Value to store + */ +function setInStorage(key, value) { + if (typeof window !== 'undefined') { + localStorage.setItem(key, value); + } +} + +/** + * Remove token from localStorage (client-side only) + * @param {string} key - Storage key + */ +function removeFromStorage(key) { + if (typeof window !== 'undefined') { + localStorage.removeItem(key); + } +} + +/** + * Clear all auth data from storage + */ +export function clearAuthData() { + removeFromStorage(STORAGE_KEYS.ACCESS_TOKEN); + removeFromStorage(STORAGE_KEYS.REFRESH_TOKEN); + removeFromStorage(STORAGE_KEYS.ORG_ID); + removeFromStorage(STORAGE_KEYS.USER); +} + +/** + * Get current access token + * @returns {string|null} + */ +export function getAccessToken() { + return getFromStorage(STORAGE_KEYS.ACCESS_TOKEN); +} + +/** + * Get current refresh token + * @returns {string|null} + */ +export function getRefreshToken() { + return getFromStorage(STORAGE_KEYS.REFRESH_TOKEN); +} + +/** + * Get current organization ID + * @returns {string|null} + */ +export function getOrgId() { + return getFromStorage(STORAGE_KEYS.ORG_ID); +} + +/** + * Set organization ID + * @param {string} orgId - Organization UUID + */ +export function setOrgId(orgId) { + setInStorage(STORAGE_KEYS.ORG_ID, orgId); +} + +/** + * Get current user data + * @returns {Object|null} + */ +export function getCurrentUser() { + const userData = getFromStorage(STORAGE_KEYS.USER); + return userData ? JSON.parse(userData) : null; +} + +/** + * Refresh the access token using refresh token + * @returns {Promise} New access token or null if refresh failed + */ +async function refreshAccessToken() { + const refreshToken = getRefreshToken(); + if (!refreshToken) { + return null; + } + + try { + const response = await fetch(`${API_BASE_URL}/auth/refresh-token/`, { + method: 'POST', + headers: { + 'Content-Type': 'application/json' + }, + body: JSON.stringify({ refresh: refreshToken }) + }); + + if (response.ok) { + const data = await response.json(); + setInStorage(STORAGE_KEYS.ACCESS_TOKEN, data.access); + return data.access; + } + + // Refresh token expired or invalid + clearAuthData(); + if (typeof window !== 'undefined') { + goto('/login'); + } + return null; + } catch (error) { + console.error('Token refresh failed:', error); + clearAuthData(); + return null; + } +} + +/** + * Make an authenticated API request + * + * @param {string} endpoint - API endpoint (e.g., '/accounts/', '/leads/123/') + * @param {{ method?: string, body?: Record | null, headers?: Record, requiresAuth?: boolean }} [options] - Fetch options + * @returns {Promise} Response data + * @throws {Error} If request fails + */ +export async function apiRequest(endpoint, options = {}) { + const { method = 'GET', body = null, headers = {}, requiresAuth = true } = options; + + const url = `${API_BASE_URL}${endpoint}`; + + // Build headers + /** @type {Record} */ + const requestHeaders = { + 'Content-Type': 'application/json', + ...headers + }; + + // Add authentication if required + // Note: Organization context is now embedded in JWT token, not sent as header + if (requiresAuth) { + const accessToken = getAccessToken(); + if (accessToken) { + requestHeaders['Authorization'] = `Bearer ${accessToken}`; + } + } + + // Build fetch options + /** @type {RequestInit} */ + const fetchOptions = { + method, + headers: requestHeaders + }; + + if (body && method !== 'GET') { + fetchOptions.body = JSON.stringify(body); + } + + try { + let response = await fetch(url, fetchOptions); + + // If unauthorized and we have a refresh token, try to refresh + if (response.status === 401 && requiresAuth) { + const newAccessToken = await refreshAccessToken(); + if (newAccessToken) { + // Retry request with new token + requestHeaders['Authorization'] = `Bearer ${newAccessToken}`; + fetchOptions.headers = requestHeaders; + response = await fetch(url, fetchOptions); + } + } + + // Handle response + if (!response.ok) { + const errorData = await response.json().catch(() => ({})); + throw new Error( + errorData.detail || errorData.error || `HTTP ${response.status}: ${response.statusText}` + ); + } + + // Return JSON response + return await response.json(); + } catch (error) { + console.error(`API request failed: ${method} ${endpoint}`, error); + throw error; + } +} + +/** + * Authentication API methods + */ +export const auth = { + /** + * Login with email and password + * @param {string} email - User email + * @param {string} password - User password + * @param {string} [orgId] - Optional organization ID to login to + * @returns {Promise} User data with tokens and current_org + */ + async login(email, password, orgId = undefined) { + /** @type {Record} */ + const body = { email, password }; + if (orgId) { + body.org_id = orgId; + } + + /** @type {any} */ + const data = await apiRequest('/auth/login/', { + method: 'POST', + body, + requiresAuth: false + }); + + // Store tokens and user data + setInStorage(STORAGE_KEYS.ACCESS_TOKEN, data.access_token); + setInStorage(STORAGE_KEYS.REFRESH_TOKEN, data.refresh_token); + setInStorage(STORAGE_KEYS.USER, JSON.stringify(data.user)); + + // Store current org if provided + if (data.current_org) { + setInStorage(STORAGE_KEYS.ORG_ID, data.current_org.id); + } + + return data; + }, + + /** + * Register a new user + * @param {string} email - User email + * @param {string} password - User password + * @param {string} confirmPassword - Password confirmation + * @returns {Promise} Registration response + */ + async register(email, password, confirmPassword) { + return await apiRequest('/auth/register/', { + method: 'POST', + body: { email, password, confirm_password: confirmPassword }, + requiresAuth: false + }); + }, + + /** + * Switch to a different organization + * This issues new JWT tokens with the new org context + * @param {string} orgId - Organization UUID to switch to + * @returns {Promise} New tokens and org data + */ + async switchOrg(orgId) { + /** @type {any} */ + const data = await apiRequest('/auth/switch-org/', { + method: 'POST', + body: { org_id: orgId } + }); + + // Update tokens with new org context + setInStorage(STORAGE_KEYS.ACCESS_TOKEN, data.access_token); + setInStorage(STORAGE_KEYS.REFRESH_TOKEN, data.refresh_token); + setInStorage(STORAGE_KEYS.ORG_ID, data.current_org.id); + + return data; + }, + + /** + * Get current user data + * @returns {Promise} Current user with organizations + */ + async me() { + const data = await apiRequest('/auth/me/'); + + // Update stored user data + setInStorage(STORAGE_KEYS.USER, JSON.stringify(data)); + + return data; + }, + + /** + * Get profile for current organization + * @returns {Promise} Profile data for current org + */ + async profile() { + return await apiRequest('/auth/profile/'); + }, + + /** + * Logout (clear local data) + * Note: Django simplejwt doesn't have server-side logout by default + * Token blacklisting can be added later if needed + */ + logout() { + clearAuthData(); + if (typeof window !== 'undefined') { + goto('/login'); + } + } +}; + +/** + * Generic CRUD API factory + * Creates standard CRUD methods for an entity + * + * @param {string} entityPath - Entity path (e.g., 'accounts', 'leads') + * @returns {Object} CRUD methods + */ +function createCrudApi(entityPath) { + return { + /** + * List entities with pagination and filters + * @param {Record} [params] - Query parameters + * @returns {Promise} Paginated list of entities + */ + async list(params = {}) { + const queryString = new URLSearchParams(params).toString(); + const endpoint = `/${entityPath}/${queryString ? `?${queryString}` : ''}`; + return await apiRequest(endpoint); + }, + + /** + * Get a single entity by ID + * @param {string} id - Entity UUID + * @returns {Promise} Entity data + */ + async get(id) { + return await apiRequest(`/${entityPath}/${id}/`); + }, + + /** + * Create a new entity + * @param {Record} data - Entity data + * @returns {Promise} Created entity + */ + async create(data) { + return await apiRequest(`/${entityPath}/`, { + method: 'POST', + body: data + }); + }, + + /** + * Update an entity + * @param {string} id - Entity UUID + * @param {Record} data - Updated entity data + * @returns {Promise} Updated entity + */ + async update(id, data) { + return await apiRequest(`/${entityPath}/${id}/`, { + method: 'PUT', + body: data + }); + }, + + /** + * Partially update an entity + * @param {string} id - Entity UUID + * @param {Record} data - Partial entity data + * @returns {Promise} Updated entity + */ + async patch(id, data) { + return await apiRequest(`/${entityPath}/${id}/`, { + method: 'PATCH', + body: data + }); + }, + + /** + * Delete an entity + * @param {string} id - Entity UUID + * @returns {Promise} + */ + async delete(id) { + return await apiRequest(`/${entityPath}/${id}/`, { + method: 'DELETE' + }); + }, + + /** + * Get comments for an entity + * @param {string} id - Entity UUID + * @returns {Promise} List of comments + */ + async getComments(id) { + return await apiRequest(`/${entityPath}/comment/${id}/`); + }, + + /** + * Add comment to an entity + * @param {string} id - Entity UUID + * @param {string} comment - Comment text + * @returns {Promise} Created comment + */ + async addComment(id, comment) { + return await apiRequest(`/${entityPath}/comment/${id}/`, { + method: 'POST', + body: { comment } + }); + }, + + /** + * Get attachments for an entity + * @param {string} id - Entity UUID + * @returns {Promise} List of attachments + */ + async getAttachments(id) { + return await apiRequest(`/${entityPath}/attachment/${id}/`); + } + }; +} + +/** + * CRM Entity APIs + */ +export const accounts = createCrudApi('accounts'); +export const leads = createCrudApi('leads'); +export const contacts = createCrudApi('contacts'); +export const opportunities = createCrudApi('opportunity'); +export const cases = createCrudApi('cases'); +export const tasks = createCrudApi('tasks'); +export const events = createCrudApi('events'); +export const invoices = createCrudApi('invoices'); + +/** + * Export all as default + */ +export default { + auth, + accounts, + leads, + contacts, + opportunities, + cases, + tasks, + events, + invoices, + apiRequest, + getAccessToken, + getRefreshToken, + getOrgId, + setOrgId, + getCurrentUser, + clearAuthData +}; diff --git a/frontend/src/lib/assets/images/banner.png b/frontend/src/lib/assets/images/banner.png new file mode 100644 index 0000000000000000000000000000000000000000..641cc18ee52fd8f9d9bb6fa3b9a7c6aa70324ad3 GIT binary patch literal 2333508 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
Zk#tr+B~S%K+qQ> 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ΝrGky7ZH~gUjyR7k(A+lOczUD|Up` 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 Ot=8oY* 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 `S zG%;}LEco{dIJ@&P3)vB$yoIBQ5p2iIC0|MUcrn6Xf-hWSBvWD^iC_SiIG=A>PF}J^1Fr$#o)RlJA<6$vWG2`(&@;Bf2D~;J0guaoX7YZL0INOf zB%?zY>{su@6Un(o)r^MARTPY7eYe9Qt2ZDTqp2Vc-|a{~OVM}c^iLHx#lFV7nPJ#> zy)GIY&vD0h*@#NNSI&$LYY(*UG`t!=bpm?Ej6+6e4F6xxPnwwQ`cX?n9 z%1M9+;oX;q9ka7^+R}h8X?2n^SomZKFmP_#{`#KJEfLnJ%4E7(6a$~6?-f1f1DoLc zjyrB!NU+Qv(=**`GAPf;50ChI)aUV(JK2%7UQatv1`E9J#dC@adH8Px{cFSQ8md=- zAd=k3Y6?@a9Fke(?^@&-h-EVW7SS6PGpTt-+YS|@LjFS`iR=a>6)S+Mt5+?0mRSqV z=;<;l%#`lhL}?Dd-o4X*9x=A1>3;SjL1tU7>?ud?X+2Xe4|w$c+s}z7#=_ZIP3bLG zaEJdE5mphe@55(TJHQ8#n}FtR^rRl1hhKXKOtVI_AVGkx(GXqk$zZ)sKH!(xv1X-! z2j-;`%_9^%#TtMaRU{oE8JCV%OM~>{{5g!W7|2d*h_)n8pC{(3Gak*Uya}*5_ZR(> zv?s|XUSO#DB*x)FItfnPf$3#iTmxz9BuR^3rQT(2&~UMqeH z*sZTet4ekSQd>*hEQ0I$GdW6EZFD?Hd!MQ6Ic)1P(6B9=6~C?eyKJkdT~6Y5o2%l= zAB5%|G^@_orORrkZwP52axhiFm&Totqtb1{p5g=FU=AOelul3a6f`8e+MX75*yFcW zvy$O@BbN-UMd$v2!Iay&qpEUrI4SPN9&5t1=r43Ww{N7g!A4m02=&f;R@M;NsQ_$% z7icR&)sGzG(GF9l$7+KtU3`wh+3#g5)Pk)`@e|6c*Z!^W*L&lZ8#x%3bjB+oez^d= zUg-fwE?x6sf!4nh&2w130FacJ=nE=z8FRu)GeI)c8*e@q1YAvH^;xJqQU>A) zmz4!T+r3-IWd?=cJ>Wy)t7T~@zkn9v+q-_N%sV)}FWyzm*-tFQfWOxQNZ-?Iw76UX zK*fSavXMTL&CpV+i6n0E+vWZ(1j4C5q3>GCNrBJz{yS^KC^3skNIAVcg~_mOnXU0@ z|Blak8)s^pV$Icg^4-p8s#nGW%U5-hksW=o&)4oaO0IeN{Ir3pnPH;mHnJlxAxPZ0 zz+=5JDhfW{-&P^j$Nn=$vojel)Woc6hW_)HiR`hN?67pMm)(r*wL>i*kYJ5>0-;5$ zh>Y+x)^!7(>vQV8w`=WFiTgGW1?9Jo-w?|aUnIeJf(j6ikKiZ4pNw`$|!X*q=$^zrXX-ti-e#A1N#d2*(o&6b7*`{Ys7e^<8mz#V(WuCku`IFP+x8 zQ}qj<$_S`Wh!{J5T+-futMf&Wksara))DA6+?WZ0E$|lprnw3)$)0gH9rX3TcNR2n zC{YbAhc9jNH-n~S1z65ja_Ym}iIGS7b^km7gtzb*(7jc$DS?R*PVJb%%LbBC4KQd> zY};Z;Sy{T1foYrjq0=#9G_jre3nIK8SRHr}xeGMthA-F>2Le^D%$Sg_3u+ZAUqRrP4ioQl8{htmBJlmHLhX_Zo+x8bgF3|#+Zx7t3zc@m7S^U(Uk*y)%53)FE(?4MhxL01#>4S63A94x z$ODv&D$*RH`Tu8B8$EdXWUF~Jj+?>MXwK6>+0MPdmGc;>$Ht;vDmBV~)g!BPr@L(C zg8q}{(UvUgR7BboAc(2k}VZXk2x{ z=X!XPuCT#I*?^JK0=M~%2;Wk;X;jzGVkX;t1BH<~?CB5uFL11+q%2XysNb$h9u{P^h6V!ctHTp|; z{*Z;--(DkeiJ38N4N`fuc{pK@BAlzLT2fM8VfkJ^TF3y>jO)tM{99lbt4@3zPt>0A z({-2%ISOdN#J~65UmKTYyon$!mvz~P`AE*FgZ)$`t4!U4%GN?ssC+W=Q6`xNO|-1o zr~>64bBYan?j=}PX)Ce=nl=O(WA@>%4j`BD;;;8CVrv_Wub2U1sbUNd(jU-JRPYUP0 zFDhRl{$e)SC{H}GVEE2b%BMm_F2op;0OK<= zci`ur^T5DOb=_O#!$mO^VdxakQ}prI0z(I@enxmKF@j67O>|J}9ZfWGH*mh=wTQ(U zD`vd;W2`<66LtFV;d4ObM-^Gs&E+e!Azgd$nFOt@=x?BnJqfq0cM}yF(L3{A7O6=3-@vA;lLdPX4>U z#`WEsu9{r5VVAmtM6I*|SS`|$#tEo-(5KNVYTi!Ll&3y!Wr5YFx@A(+uwTcnE}nhq zu>o9N2|!Px=Q97QAfx?}-7@zm-TW(I^8jg>&F7!0;yB;}U9!=|`+MK{w|dcOOW)b% z_q}gYV0^LkvJZKfFph@)U?AdDvur}w00yMd9nm9!RhV-KknRi#K70`VZp2STh{KlW zx=Q5<4BY>mpYYh1RldUTwk*1fPqg)5i0J>0f#P1|lcJDMvQ>ew@-*c0l_vSLE*?}3 zu^Bm9l&LVvUo{QKx}W0uK^3(zTp*kfoJ7^3Y_-4YAb%fP4isZP*tu^B2)gkrry==Q zv#@-88YXwsFi=a^H|JaQCzi@HX&-vM_T84DsdIwKTdtJ^$1tg4sxut?E;c9KiIm67 z+eH=PX1_`?!4nc0psoXJ;48rNsNs$|4l)SkxZ0L{90xG6f584Zi8E^x;6)6T-sv)kvVKk@CQ8>DCk-ablX&MF+&MjPuM91eocV@9JLdW-_NmVX zeizdprzMA45-wN_VJ>B7;y2YD-bzSo@xgXnajEsr0w#8rrMZ*BJ@uuX^=`+2gGczv zjzmmp1kkK*u;Ql&k7bvieo{+>LTTKt!*NxCoO)|FUPHj?jxDidoX`BWbOSzixd2|@ zlnq=LTNhAaqQP|@uQ-rZr?y(SvNp^mQhZceZ@^QH)*avg9|EW0d{|J_S>=-kvigfv zHxN-{xlGN?9b#m4-->($ANP{HBTuPQ>kE)F=KQPc;N>T_QPt?MJwJQh%G4ke$B_Dk z*!Pc;7be*dvc=;{l%={}?6B_4{k`h>E(F88>Hdg!{0n!N9aTfoG%iR{9(OgHTBb%O z1*`(f()`l_uca~oR{zv7dbbjG%L7$zZhA%mZIFx`bw?E<0hnC}r~4mvwSaF{T?LuK z9prH0mURi?%tYwtKmSRSc!&Y+9_TwEx-^V3yU#oCE7a3;0Y>S)34wr@n9F52pfN$3 za{SGo%mw7bHt4Ht&H=0oqzUgVJ~z6~X@C{_FVJnAj7pUCtE-U{H%2H4pVxa>t(%Q~szEgqt*adKLdBwg*N}NY{?|G$vF-!i ztI-YD&ig&je?#9b^V6q3LL=UlMrkDZi?}9Jg z4+?fyHB^-oEyrl)5(6Znx1j-G$?4(jYM-JwPNqX9)NoaE+~=QI(p2i?8I)ir=OCH| zql^o{=`NL6GGE_D!7rEBSE=0sb5z_I;(NfR!S4T3GH8aCv~VHH56^-8juOj6#-K{5 zmZ_QC0$;rKu!&mF(CVz9Wx^Y=ZsMw4h`8sV;Q1HY>`?%*_n+7#ReIfEA56-vXOR*VcU@+t~>kY0=WZ zLJk1YY5(LhE`xU7syZ~QHWjF=VRSU6MM2@K?*uD#1t}3}9?OZIh73$rV6(fre@-AC z5TzONyOfY9g5rNa;c`Zz6fnInk25n}&(fKK7O;Q+{r&lQ@G&TB4_uKwzS?&C&Dm*F+MU1dYMT|bMo`LAJNH|)0Gst2$j z%z#yOjPWLGri>31y#xWe?5R3mxSi(C@lj{^7L-p+MECU)@Vc*Mi-m)A?5~_U8WN3v z{%DMYyJRmC36ZThkC3kIJGfvDLDd&{x&JuG-Dwi_F|nk4^NbZ%h7)>C{mmE@OJJ{g zzHwO@hYC9cgA7U4=f1bP&LLLEv_SlVnt49kiH(3$y~c<@hJNhyHrG0tgM06ncH!Rp zoc^z#cg7W|Ag!5EZSGvMKE2+Fs~3mo^_pOG^<1#BK>>rQos$NB#> z{&>YV9AmrSNxg26s{({=QNC`p8N&|F`~nplV*v1c$aESjloc_peqIYf|IZM>WVHHaTZONX{|OfET$jcbu9l zFy9*hG-I`Eh%U&nv;jWVN5071%cxTepIO2ZOJ64EIp?8$l}0!FSMvpvDx)P>6m%-q z|DnAlg4e(I{_xDnGGSU7o-5BEdT%eDC}G z98I88Z#g+48U4uIcN&kms+7_*{dZ;SBWDXF-4kYe5AGQ9!0t&}U&{^?wr}~7aY!|v37wEa_W4Nx2B~oy0y}(T( zFd7Z&*YkjqJ7gB}o!@i**&!LC7mg=X)LOq?KYwSn5%v|v7k6*X%B}Umv4Ej+jDxWc z^YvRM(I}UB9jTfxbkNdU^#lK!KTNsX;-$_azE}BUmt9_KFkwlaE=lFm0ky+y5Ocv+ zX@pZTmD=Mfyoz+VuspeicQh{N-Gv7A@w{}yJ%cStw&}+QJ;)3^n|mEJpw$pFli?k! zuAr6cmvFPlq0LtYU<{0LlP_PsPyH~;Dg$>A34pIyoe0q~FP9iv<}#M}@du%qs``99 z{+s;{n5f^;Pe92Lv}i8we2=y6(IUI=tVxu2W=)1I7jVYGZ!x`;t}XSqILo zFT5mC1`{VLW*FJ6BJ%u|3 zqx95Ea*F={ei$#K-ulQK|1~cGaLva4C#O<|ZDGnCmk^9@Rbj;L6=4FS_tXQ!UuLt6 zqCWqbB|ZMBABn3ZRzSS94hKw<3pqE)fG+C!3ay+Q?{D5ID--&o8EE+YtsCk#WPJh0KA%K7F ziZ!}8Kj-h7(acvw3FZg=!2m{R@PFJ*w?JZzZpa%5w^O|H`#dL-QP}JZ8`d0biGSM^ z2on2oa)?;Ilc7<^^>Sh?gkQ~1JrXLs5zpx#e2e2=p;gHitW0@Iz7^LCiRDiO{bwSd zr4@)|YA4kEWP>0=zn!%Rp$Z6z=UaLLIr00+haWa^tu7j4t8sRCjtLr@{%D;y>+Jru zW~LLh2aBIlgxiRwmjm33sNv=?ijIv!5dH^H0Qid4063NZ~wJuWlSxb{u?CkIK>= zT}gc&;wCGdB}hXtJSvKKpXEkaknRO*heG=7t4f#w{(}clBu~Zd;_RJt=d=Usb zSahlp_9>LF5clo^W0FHx6HlzKLsS}KE(P!`;F@^3DwkBIac6Qrh31tQ$f^^w>}EAi z$b&bue+jw(#*rIA^5-^>Iu*lKNL)2Tx*isuCo*84C^S!>8%qjb1E^wgDD}BlvdL)X z%L@7O?tXxq02|ePiEOio3dSsqL}E1N4Tqe=;)h0ogjHvJv1UeY7Rtp~?c7FnA342K z&W6ykI`8$v4SDJm!DHspfvQ%kPF;*+pwW~sEuK(?!ZX0$jmk9LWs`k}avM=$wwFs) z+OCq@hbosmBg}Kv{k@u$Q7U@Hny^Vn(M@O)5eB+ms=KdMal8r>P`dA;G^e|fh~J8i z3F~-O$JCqA8ST0oX64vJ6{?J}@2|2RO`lAEW9Wdj60(b@b!1%>*0A4Hj3c{@;Q`%O zXk>VZl8XiV=bY*wA+e)o*)_Hqy2WPM*wroZbZp>?=}?Pc7@g|oF<4!FSjAj;P@yX$ zrTCHAb9co@rBqG!16aD*cSvVCAbtABoN*Ml1P)KRQg}`G574~BdXhy%P&}oPiDr^s ze-hLC9CVhLeaE11_t@0@`|oSrQ{`I`xWwZxKA02;%oKp`29I?il}*;&aWHoW+M~DY zymx-*z4u;Sw)V#J*9#naI4}4#0IDvAm|tCCfYJQdvVlNU{oP$B+T*8wp77E_6ghyw zst4T*O{Xa=0!=aOyKgem2uQ@xX^*68Rv$y`t~!l6NtnyMui@gTxfjs zK!9}OAfkbvFYb^#g9nSJLw~^$&|UA;E z{nP%>xzJANL?TbsZwq8oiKVR$EDDCi--v&~B~o`vg}8pl&Ftb+6vdq>#^WjLIdQ z$CKi!)>lpd-Emndw0~-2Pz&Ioo{V2aHf1mlEtnF%x&po9@i2YtVFSfG(r9LqBbF`? zz)za2D#Lgny4ZIv8J{!c`A=mp>G0v^2$qN$-H`ahcN;%B)nSmIbhPaBlXKHpLKt_K z+jf7A;z|X`NE}WxCKV-SSrTk8UgYr|1K7E?9in0%*crsj}4;vdp z?_fn;MTMWj2UXptTS9(7qB$*n4aw#b{-1tjH-X$efUjZ>VKhA?lj#Fp6_O29%}kr` zy^EFSql;s(3T$H>_c!9bZ#{>o&>aSg{$yy#N{QB0PlFYc-4gi9j=uye`tn(WnJUA# zCgO)geWV^+9x#{*bj1xVTt}EZ$yBm&_y-Iv1BT#x#lnYgsOtd5J|2!ezi*}+p-++s zm#{c6Fx*U<355v-6-1m&LOArHbGkSV*CG$P&Ck6zUc9ic&Usv7RFyc!WwH9f48PMk zup=PYu}kixhBM`65fK@r(a1EOhG)NiEf_Uq#^hO<{uJ@pkSl`@ox706EEHOLp9rB# zRSjadlT4tDog!9=z$whQqISVer8YSyf}=i1I}wS;r8%>=UGU}^`wiC-;B{hCnxs$~ z>54qvUENXWW$x1ju&;aR**8Pr9r}`Nu{_;r=66VzsYaTTpg&nKtnTVQ|3GN7cS`D< zg|>m}j7j4mh{X>F*XzwMf_GWMNa6+f$1wiG0&;Kp-dDfd1M;2GJkPl!lB|xIF&wEf zKP-We?E!V;2Zv7YeGa?X3uhD-TBx5ou7gAXvvY z42UbRarKD?)33$H5qE9wf$!m9qD7GMjSY0x7sIFu0)zsacIk9kE}p`f+PZ#4%}&B< zt>F#;VywBh&m*q$8V655>@K6K%FXl0^ImtCf;Ek$DX?4`P`6mXSbq8mFKLVOy)V)o zp3T11QWE8>4-!Ki2s5uI0teW_$og+71;b%!Psm*n56jL>C7i330*p0~?=^a8&HViQ z)PDyS*2g&2`hx2~rrOfD7|s)1Y;;wfl$h`Dr68%$U_!mBo~L<%$hak3W7Z-IbC4;t zeu^69rhvUdc--Z_fKdcDaq1}+-3vj;wak&iVWS8n)$LTBuD@rRnCeg>0VAY2gQ9eQ z-y5qikUR&r-}z_*NHyyjx1Z`0y4sBUnyf^f9u`qQ{nLjhyu0r9sS*UT5yL!oKXtge zs%o;DKX;NjV!ML3p|sV8Q3;(USfM_p-)V>1jj&yd8a$cE^3H|rac%r_uA)tY^=VF? zz@&%QxH40k-vZfGg3qS}g2OIT-3_R!XjKE@NMbBjfIi$+iJ)aP>r@9M0$TS*04|2& zU#EV$e`1B9$pEZE|HFb+fS(WHCavzXTr!Y_uAiTCy1Ji7f@XlZuZSkBWE>KQRkB=B zp#Vd;P?jP`@3hiD0bPy+BjMreG3FAux)tnwz_2D*wS-R0I8Bw|#^waCxTj+gf~#LH z@T?nBZCvuIT-{awd8*EjLixPco|y|o)tSblWcv>_pk1e#+_XRpb1FV^2j&O?3^DgG zuf80SR1qwj`n_Au>!3{0&{G}pxF$#ps4ePobte0$Q9QUv)J{Mf1P#8m}4i{=I8<0(}0yW?3`7aonM zBKoikDm$%7x_{h7ze0cvuVcz)^XV?W_f5*_^V9Fl6Ejy&>}jCzj3RCyqTmLfoTkzh z{)K-d`&5Xzp9APQl~L+3;}i)iC#NQd!s`vrjK2E_t8IeeaxPrb5`2~ck=jSo#xpj!~%nj2CxCC7`+-rXjySDR!r9)J?)^C^a zy<`3KPj&tCbDn?FlVknNty(=XFk+jv*(pSV0P3kOG*EF3{-1x6d4l|1Se{D{;5(V? z4Hw`+Q?xOXU+8LXU% zXdheBO<AK}g6q^xA#hPi*(2|~YEz`?H=+o@ zh?RNzY+a*>jiPNU^K;JgpYxypJj6U{Rk-!IfvXo*TzxLz zc_ClqaLg(;4guVt8Gw2keOMX!OBpR75HFUjFt1|30Qb|dEBQo00TdQ$#)EQphr`0+ zy1B=XA!q*1$IK(Uc%FV>y#M}o>0Y&0GR4A2pY6H#t2+}f;;N_Ee>B^w9GG-&UXbR}UV;JeSL1%3-?P?~nrF_s)49Y>>j%M$rT; zSdtDjEg!k5uSN;(QX+G%gTpbtqx0UIRSD_UT){du5XaI?2{6%N6QRK|66*0p?4%-C|+;Z<7k$m0wPl7hOv`IQfd!D689R22v~rR zapSdZFsrl=YL@5GE--bCERGQ8IRo=w7;_9=}nL~HVdz8~@TKM45w`3FzT=8)3HX7`6F*Z@%> zYkkKN^8LzU!@5C%v{deNJ*kmVqeV?H1Mr;UVD8+xo3jc6)m^a(D2(+wa~h_!#Rmr$ zMx{ZryJiS$ek~;xBvDG9=?bPPqOa{zwk zN(Dgow>DEo??mpKa$4U#zD`cC75huOSqT=;Bl#+%%Z&j9pqLhdDLKP&EWq!5&pGn+ zHqr&JQg@x?fZ@#R2I^^n#FPabm@3s6ECDRYw?E){07xC;Wj`dWm-XPwu7xTd43TvR z?#Mg{co@MwM#hYPo)cuSt0c~SpPw~GMQ}q7(a_!*;%)qZD|zu+SbMz6KF=huQexnb z&?82!r`Hx&udC_$CewTLMqjd^R`NdL1O;PsiBmDH+?XEQA3Y_A>+)#>W^cfVC|$4* z7E@W2n4fPsRwZ$w>M2R=I{4z`W^Q-Gl&`?UGRHTzo>@ow^cv!D$_?7TtmDma@&7nj z8=$UXUHDY7iW)?;w0y<1ECIli#VP%Q55m)}FLoz3;r_zaVr67a6-gThGb*Q3^<155 zuWc?wRHzV@qSbPrzN6ED%ofQq6JNtGbrz7xbmuexU$ev5I*VHE*kUWE2b34M>>BD>)itQl2(*uPpLtI7&6R$Lb@9I z>Bo3+pY=b5V2;K-rz~IIo>Ht30qVYWj^}ean7e2b(g;S2;hFcG?;LaOxMhESmbVZ` zj5vb;o*Nld-sql77+pN4zkeA)jTPw`rlz7rud;-aaVi%H;~d=~1__L@>n=YBYl;hS ziYD3mNV&U^vdLhL<*EDBf3jl6XaF&oBAvf5Nw5k|Rd=Ej#AS!?0a_sDSK#U6+~zIci}SN#wHj8)Cat+u4b(u){>R^0;<>kYa+St&wd(t( z*n@%+igT|5@MG1El~9lXPnhu6ucui=#RdQSP5&zdOhJ0NKK%o(4Un(uLDEJ?c*ulp zd}E&%?lAsiqZ`=|EwH8e3kqT#>&7It(bzEWt^6Gt-M>JipW3t_i8(v&HSzx+f}5uG zf39{G{St6@=2M^cHkw1)7vHIW75T*5-3gmU+~DrZ^NiF)Qj_;4$*St@PQcgd^Dyj1 zHW2bl9R6V?kk!1`Rp4L7BIe%e4tAfY)p&DcXA&n6PH}+8mKSulG*wS<&%l+a!Y!S> zU^VVlPinm^i%SCEBAfXC`)3lOr|O(b%#pD}?A3+ry^hVh$~}rv)w7QO;MJU}2nI2u zLQUm9$uL^=xn7@DtwwEw!FZ}pIxFcnF+;k>Q)kN<$y02h)-|GbfXcu6Ff`v;=bS)d zn}IO7`0Q%>CT}h^1o;ys%Uu7Q8vm9~hR9~v z`YG5siDM2_oOuNtG#j46CM{bK3Z+Kjy*Sijn<--QX^jh>Gzy4vlt~%Xed~GX3;xv! z)SWv0g=yF>dNS%7-19XZ27SjN+$Lw|p#pHttJ zm@o=oSJ|xZ!v62QdFOV*&G;$Bz>@Dc0x`8Q5fyaABw;X&Z<9a?;gWD2wW~S4`~{w~ zqbQ%4RCo4K4h2VT=LxAj=sdb`uPR9&;KfkvVic+W{`-Ib`T5WFzo#CcGz!Tt(MIpg zInTfU{@>5}@qJO<=K$dEox&YGn+J7n_uE}`*Z)_ow|jJmmNIbUI7}G;3AJ*m zSSe?vb$Z4fb!~FHlT+{oMy}XCmP1u*lAjWqTweMX;o00tTiro(OlNYyyQL-d7%@pE^dpbRyW-C%{q#T0-$!A>repzmDTQ8eKiq#7fG}eBeW^MIYJcJou#=ZQ0GZH zRr0ek;!veK!CHJ|(H1-a{400yGzG_tU=(wW0ebA2`<&P_U67V*mGC)Y2|=~+#9Dcz zG8?claus|Fr@S+u7t&YajN4+nhMmS3;vGGq zHEjT5*;=7`IX$yBylGv+KJ+IIp5+U~92f8l_f+hW$8>+&cA^`??ugXfu@|nYwReG- zTs6Mru{33mo_a)38ohlU$4t5p7$E5n%k%$U&Ew0=!M3Q_PGY--R8;>xx_H)!@P!C4h&e9pnFT(A}ll|f(C zDPIrn%$%Pm(h)(GTY8-(_A3>QZT4A}i7|!WLbLh%@BIAJU-m9_r=HeKST9^IAHY^k zvXnaWKW&+)&!r7eJmvRdsX`Ho+UzXKusOwy<;0BEul;}a04zwZQ~MlsN2iZQRW+Cx zrtVNd@91RQ7_vhB?_I_3=6#9B>yop`{@&$Z#Nr5DNXLte z7hnu8E>TzW&(j#J^cejD$HTv1W&;~Jmlh)zHpVOu`VhXx_h^z~LPN=yzB4C2thit9 ztv@%OiakVs3=rJm=|7M(W#@-n5Wvv7nz@6_WaM(Y z=|2v8UhY=3@KKo(-4~ZE_%HDPQj8Aal!bw(Bbnp)qcyu#Ix$^KH^mMUqwB)I_941nJ|I)NX~$z0&_7g zID(+PtG9#Xq=Ke`D#Q)88klde0ZY|isY_~ptN#&zxW?_R{l8aPR;7X~IU}1C#fEU( z02}1IcM3nf8l@|pI%^{xe%l^?h1hVjgxP?UTslE04gwj(7WiRCp}h@e7ALDh?A-ve zJd9W`?JkJ2>^rPr=#C2LKJgIbf1$K}1CZTKT%a^axSuY<+4no>0Ur302gSM5XV07+ zm<5K=t<)ch(Ok6469P*R>HuX4^x9%F|2B|pCE`+v5obwvDUk5*;Gyw#i+N83@12gM zRCx}G?h?hJF#|rm;oJN>tqoD3ujRT7=O+Zu50(b$~(;9Xc|JT7gaUTQ6nY$Wmk2+p1tLZCQ5Ia zz*(leSyff1e^&HKdJLrm4#&}e&yG>I$|BpFLTwpO9h1M(9@Y)8>a1;^?j0DFhk}6- zRg~8|Lb~YkivDhy z_uRX{KnpRFYg7`mnM;K2Q>RY-^}acVMW1S$@PUoR8`g~*GRU#R5-Y5@Myx`Q|IR|o z{4SB&+I%iB27e$D%EzwK`5O8 zhf*pVh#_IB!j~f`#&%WnJg3m7J4Y$-6b>_1M!}OitXv+C zUq(07t*!2D+yE{G1;~ z#S;VAh{I4bGN=0=5Z&i=Km8*`z`Zv$S%c^p|CmrPiDGw`a*<}4H9bJ-1q5h1SQ121 zGzx7fc0@TdYZx&J(3q!AjtWpnFHKZeKMz62l|Oz@qs|;vS4o%ma7fv{G!(*d(6iVv zVO(nWz^nlV;xQpbj~H>gi(6)CFnQ%wM6RQ>8TF*A@D+=kiGQz`!iu)EU% zdP?xb_$S{s<{H{F7ETgbn1x~ z<3t@M@CVy-sjNVu(szSxGZ_X((EH zZNy=nR%}ISfVzpVRnZ4kwJs0lBied(ucR5nD3{Fp`#Z+H0|LL10Y-bunR}{TiU}F9 zr4qqbRrlpoY@_?ppvbQHn8x1zVys9K%9Aibnq{1>s@48~AxQBW2s%?>O0YvGiWD}V zIPsZqB!>(n#;6JMCqW>`?Tt^L);Twl{TX$!<3k*e83CA67?x-NR6wi0_68o$3ah4K z*%IzI2F3fvdZvGV{y$-y4rmvYvLn=Hvl*L%#BhaYT`*h4huu(}EaU_dyFU9ZPd%b~T!rYwRp0KnG(V=r{#AJP8qYO};*qCGsj)b_RvbvVz zDovekBe1EtQS8|#UHX-?ay;X0joM|9{CR2=iqf8T4{qMdXD1^zbfr&@yeVVWt#bINxkl~n27Eaw zfYl)O+UUR9ko!fjCL|6<=Yg^P9;{*S9|Itd=iVH@;q_ID1B`I(5Za?&3O@LVV!{9F z*LUvdk}VAEYw3;HRv=>h#J{tR1R2+0U>uTgWDUDq)rnR~L`#x5Q87ZdhpsL%wtc~D zi5T%Dy)yQVU5iL{=&rhGwXn;C(u>KE_lL%UI=+9Lrs0bPF{O(Mv zxR_>z-dF90);T9-jlBu4T8`j%CLD!Zi($et73`<0yKGGfURe{q!T-G$Jy)1A zDt=w5aIyq(TKr*w)xqQYe6u)UxRGbL7gca~WV>HP39zF7U<%j{W&e{QRZ7XKY8;

iqd>{Ty%SpiY`shE9i#49c0o*)}vNcCn4}SlVJo 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 z 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 TVMN3cc%2lsw%P! zB%nb<8$C^B?&i{mh^Hx%WTu zTR!^X?>Zo@ifRK_ecNK&;RYOPmuJCvx6D4kQHzs$pJ1vz@gL-E!3Xw#V@^;-~UtJ{tLgc zk8^tyO&Gj41$UF%?NDFSqh4oH^L#|w>v9K7+fy@5+(BWa=D4rBB9R&Unq`A+Kq>_oq<~H>EyP66yUhZ>rwp z71oq(&pM-!)vK&W_5tXYiEQ;Ohluu;UXf@+inAt-QW=jORuHxGG3_uD_|EMyBmo0~ z55q!H%j=<66;kqH6;D+Yk)}`;m8?LiF#RfaRLxcJ4}{(TO2*+&!{Xs*WfJ#?v%rNR zefrr;-LsknQyWK@SQUx6XBJA-YjJV(%Xo+9@7WaYmxbIS7K!d%A+D9QXiGW zhI@!upd#a`A1u2K^D1PPWK~!LDtEbxSydl$&eQCWKPdX4e9UjNcR_AP(mD|k(;$J4jIvCn^uKk#q- z(*Nfx>{bDFgi}sHA(cImh)7YgOz6xDo&&V3K*l~P76qs^AjDLGh{Y=T-~>-5eLIlp zQ3NZ}BhpnJtZUp;l^!L948L+|bIz;zG3=<=IYXj~r9#39fw&+>7mz@zIx|QWk*H`a zNhyJvS{bUU!n73%6p_~3C{%ix3Ni%l9_c%?M1%_M29{8iUC=M0P%05&l~oJS0@A~- zfOqXn`;KH@i7m2#rrtih|D)tGi=51?%Ja zq(q|PLaZ27R3dQ=;G#aTtSQOsT1+-ZlqtH7EE3|ChBnXB7hM2PRZ@(Qs8C8*^@y0W z1Zkz%0F)x27FCR`gDR3iQ{@#Ws)RNHg;k<@g(*a&OQSR+tUuh6e3q)Ee0ZRS0A zw1VG#BH^1fvjOVyh=f!`1`;c?J_LMxJ5k4w#P*flq>pxM+!gy=COkc6?hL6Cv6|b@ z$F^)-drlO5&FIB664eKQ-Ib(5$W;M|{&t|%J z?r53ZQEPe5OyJ!@oCT^idFd*ix0_@*7&!5fW6s4Le(s#6Dtc<$&?(zh1kqI23 z1EazL{QS@VJWO70ALUT3i^=&?igDa_?ALiFkV#}*3!a1}3!-A;S)iV4Cv|%P`+mNk zf$bToB*vkpt;$VMndJ*rd%N_Gpc*|NXH`26zn@i#b3$)F@sr<&*w*Y;BE(IkG|abx zw=rJhjNDb;jBCxRYP=~l1%_U`HliIJ8q2q}_I|#yEER=h=I9N@ZW*j}LaHCfZL}`c z+bzYiRc$ZTnA1qM5!jC?)5I9Br?=zf%$c8@LIC!wzx*{xYQx(%S3rJk-%`@YsC;xe zhP2zw=6Q;=k?Q-gSE+H_T1w;!cs{k3TBCVfl>5~md!7)eHL7GfNl7d5&(`vN?sG3# zD2hZwc(YT$cy5kO~;Mo{_Jrx zdzQ#c?fAr%Vb&3rF&hMxPiCk3o8$TA&~uf~hdv!uQx#~o@9REaO~V>QI@Pq36g8%8 z9g30ezPEVD?d9z+f9P{T&B~Kfcy(&s8DSO?t`l-DtM} z=U!_@JDw(e$C5JKZqI!LRfZLt#zc=D=L_?8bhlpFTR*5evLhj}=h>QcZrKO09!cKX z%g_AUyYKr#|6l*tzHJsQ<{2%shm-^}GuIWQ5CKprmhhcB0IjHID%ZL+1DOhnU1U@> zblJ&D6;$l>Pkf|cc=v07teS6H#QAq`O~p>_a4NCi|CnGxAr^C~kTiCrIZ zE4x5BOo_B=Vpc)`-ApJ!aSy>oVS*4)5ls+^OcSysGn!&^>0&4prMYKq%+3sTEH+)o7=Jm=%|Q<*TG z)3aRBdh3*G;{u;^v>{cMSF}Et7rj)~x|%XX0L-XwPW||s zK*+*#H)WPiGeOmtzw|BO;~^RS{WfZ%vYhs=hTj)? zp+C@vessGDGl0lVu&LE(w{gpK9cDKZ>KVRb;V@}>nU6{H9nW*}#)sdDKqjT^XsRVh z1WKeNsxry)1WJ`9!h?V6FMRd~{cKX9-P5PfkR6Nq7Lg z^1`T8ZW1BQAhLk}&hP#B{p;f{Z@Pq>P8q9w!p={>;b|r6>4yQ2N|PaD$e@{Yn#X{|F-Y^))KCC4MjVD;TM0tt*R`MsI9%D+?kj6BZ)*tg^1GY-lcaffF%y^ zH7gzTeY=@x32mm|b)X>75W&SzTjZ(S0mt(+;v8kJtbnOf;3d|2YrL;nl-@LURqfF` z0xP^V9!F2peu(Eq1r88Mnrb48*G>|J$PbZ;*m2fnEsCs!nna{K5`r=m%u*B}4%*SZ ziZ^pf*bR^M2*wi8}AVzWNuoZbrUH#jccz=9kg*9{XmH}>nxM51*0PO zzJSI7gG(~qPZ^nOM}+HE(W5mMeHSyep$c+H@A@>luccCtS?}ih!qHJI22(mxv93Wz zp-h=o*YmkzT@;EeuM1`dCN66yRVP#;pa2RI<-XOLHd9sOjRZ2l6p2br#2@~F`A_^% z{>86;@*Mdp{LULc|GAHT@4x!VpZS}Qc5V%k!V!qVu1rW#jM!zHpl&tAwMT%J)HoVK ziMSrBKvhx9Kq3^#paP*SS)dpZj-(bPJj)AFnNbum7TM%CUwC75(p8u%#LPxZ71Ms% zMG=*kv+T-{LO{dCi78ysX+XflRhXwqSrNhyezDphE+R4t;nFCjcCDX0E2SK`1~!!p zKwVTM9RNk7@4d)M0&E}vNilAV?HtqvE^Ex*-_%k?8BPjoYS#YC8SVB z=@f;ir3BK`gRP)MO~2+lCfD~CxKv^unTf2RTDaB*A_+JNUKm4WXu?~w4{o(CYO1D< zq*?lwZ~_V>5>Sz%nUqTib-+Op#QtC!L|t=diCGne9fj>l0+o8RcMdM~y@MQ36!TxdSZEI7Xi{v9RMr>#1c!BEoaewF1=i zLS~c-Yx`U)Jy^|5&g~woga~S)nHYE+EfZD6TF4OfVXXjpK!(4Y4K$NdHfHQKBigN7 zBExBHW$CL@3aH8wvtT|y^~$T|6bUiNjx}k6){Jw_^*G%LDW9iU^W5w7a93-iH$gmU zi+%Ovcm}hwb*T-fMAR-B&UX<)~|jIGpEnUh~5u7s9(zrpKjW3 z2ocjMELgO7mxQB z7|mx&w#@gv9n$h%-_SU|=lj16`lLpAzA40p!=9_ulbF&w_+e888%nWciZ;KmtFStr zdae*@w|*cu6&WE-Xu9_DwfEXp6w$R^R3Ce?GD_)ZLv~2lPOjtjaTK_zGPK*?H8Z2W zej88i<1au?NlM=5{_Op`Px{l-{c+Cuy0$cQWzEyAkN4|wR=$6C?{CLrp2BKvT#&2B zD#d7B`eBnxA)s^@65WhkMnWLj_|xc&P6?*+C6vjXit{A z$HNiP)?U&w)U&?Xl?j?Wv-*OetVAl zy;FTAbFp@?-GqIM&AnIDgdF;QSFrq?eaP$DEf9*N@>$YqATX9csx{RiUwPcMjeq-( zeDAVRF{O>eD7Iue)JrIhM;CWwxnCO^u|8UQQRQl{4f-N}=wxYCB+n zE1{+t%nVX%x%)OV5#aKMGMg%^3iUXrU7>y@z(5Khqampxgpu&8-(ihOAaBQwQ1B9+ z)ra%Wb@2Hx2&1VqHEUhWuGDBjN|*%GcE;tAD%soPs-#^TE*2qGjai5tSrHL{&^nRV zZsTGT;40P=LP`SA%!=3nArOTu=-x|7ijCeOP_qC;5#dF1KNYg~L{)^7G*u)a1gTU= zp$hQK9Uf7_N(jZstdf$H%n%V$>r!YTGo-a!_#&7AGfL4)GfGmuuD@{!nX&izFq(;= zs$iOSqKj&>jGZe=v9G&N(EL$!V^Gv?7cI}LEy@a$wi(3 zBt5~rKn9YRt*Z%&szfQ644OC=RfMXh%GRivc}3gF@L5Co{ z^_yBV(aK4ds3vmnS&+&EqJol=h+X@`?c~zkB2j9E9lY+XkPE-in3_nVW=y1KY!PWD zTcqjj>p%M|_PJZNQaJ^7*O{f+BGczNxhe!*(>=JUVibhx+%8R-VbrK8TuYSVjmt zTO|FlPX;wvGPJe+^yYT7$75+(OAW6zx1>BDPqiJCGxziJAo<*Uju%~do{Q*tIWPbw zicY0cM2u1riy{uK0HJ^G@6CVqPk!}xey4xaA#>9;dvg1>!baYz=e`jATGws#$fJeRl|$ zp0%=Vz*GpY`F?)kcKi?i(eL^jzxHdx{H_)0%h!n2Uk=&X3f-t2rlI2Jem$UFS{uQM z;}CGUo@2D6KHmNM(?=hD^wHGzW<8ved#y`-7tZEePT&j>|=%j9#PGgzfsiERl6vp@+} z9->)QQfe}qN}-yl$m{(fX1+qu&v$pY?z@vBfT|?Qp?mF$kV|JE#f$q~6#=z_kSo`f z>8LHDZ8VHa2rZe4@?jRuJww`a4Qt|gclRBjb~E--1$ktuEQXhhI3jz2 z5$oNf3FeyCQVugRgL8Q>fjm&XQX3;vn(W-$B%`2Eku#$*A{|LFteGp$s8DIGZ(rwh z7gp_Rh4si;Jog+XOm5(*e>B<~9vG%GbR5l*N_v1%n{sR2DI(^2A)Rimm*w2EFSqC%6_!u12k zr{q#qlGw8Iyv6AM_J8sDW4!sf&)&c7_2wquI?f;cw)#i^&!7Ag|L*&TRO5Y5Fh3K8 z0bpRB&C#H?Eiz)cN(zI{bPtUPrEGH7Wp}u)GUSrf)5B3NV5Y}j&BzKyF@&;$=b$hG zxvb`Tz0a5{6Dyd}?lXz~{yz7)i74!djLM27SyAf|8|N$bbiBq~@IZPZQF)5j(!FHo z_FZJf>zZ}WJ$>(G3%+yu{_v54)=TAd*?@<71}pNst1bpq#CByMw07}OV`%A@Y*oLhn+jFdb*?_My!3|ySy`@a0#kh=*Y zAFjJ%`We)ad?2?9fr=H8B^pJM9dquS@QP~OR?!e*P46Y{7Br;i;+dfvGyDu+QX6p< z-d3n~mCU-L(mP2(y}qtHD%1z7=K@i%JRQ11t=dz6ob&zOfhoHBtiSs6{RjT|r~kV@ zfBw*Sy?m>^Kc9|w)BfCV_&@cdw?F**Hd0*mHV8wzA!cYMkQYPoLJ8P!&hvo}RHTe8 z*kM8uMLHQk=c&Xa)1(~TvF_>96BQHa!09I;@83UEstJ$AbK~3?!?qLId{4U6xfKyY zqIH6lbUtgFJ6b=iwMV$`+fSii!4^`vw(XejU0*Co5>_H1%_( zvGuMLn5gi>flx#}szm+%VUFFU8Vi(@yh&x#wzfMyM^)7cG+8@ho^ z8G)!>FE0&LUvac1y~lll(6RSE z-7{k6ndr0#K{p1{u@FS~>XN?SpXckki&X)C^RN6gSZ;jICVM_!PfqEh19|#`$o6Dp z^N83L%iGbb#3jtMpf-B!tzC`kWJFNb>u0ZOY&Uy6mgwc4mZm~N&GxzJy`)Q+uO*t( z)tO+MzjBu^ep8_5kY3PhZ6Gtoe8%c0S@1?c-KAcQlUMP^pOhK-a?z(kon9 zxmJ}*GwWt1xeJxY?YXSCqis*$F?y3Si7HPUtzf*}MAEf*G%1W#;o8v z=XCEceS6C270VDAi!a?Dci+7q$4)>)t@R;XC-lV1{xH$?x|eh8`)6I7+Ebav`TAHX zDgud}f&J%M0@nYFjy8=s(JGZMu*Iy_=GwCR33x)NHYJ)c{4y_G!r=-XepXJ&N^L3H;6v&^JzRsMUAr!^e#ay%T(Qherua@o_oE1 z;x703-oa*FW=c|r)Xdg+-w#8Ta-ZkZVNxv;=fbCul+Yu-{B>0NT#Dwi(aNnTaisAQ_ck! z8EOUra-UV%O|0nvq$=SqP@k?zRYhKd-4tQLn3<5oLJ^rpEfA>7o(B|CV3wK4ylhL- zwTZza!?UWYbk()sVbyUwK@=64g-W9FYD5XQ@9@cj5=icqnX!K}xKXIRlb7s6u3Ub~ zWfD$QB~TyK78#z-OlGyF&}ae{-IHk$xFRd0TojQ}5d;Zklir8whs95kQjo|>7G%e& zob8$|U64yDP$J@DHmgcmHxN6vpAVATrxZ{rQi&>QU|DO|xFmbjZi+-LL>!y5s{f}{@FYHp?~8S z|Gsa#_2hl|OVb`=*qxHAhV^s3C$Vc+wQ)OkX|Je~XNfKq8p`QgB02T0Bh7AaQoi-` zFTdlP#>dC;um6WX{}24pzxU7lAAad?{pxCMizTudCPeRN8yvtydD?z@X(0Y9Kk?BQ zZ!f>_EAjRz=~?HfNZFpF(3{k%S~M$xkfu^(nDP)`Gn?;+?uz9sx2HP3`+L4OrDw0_ z`sjH)ef5`qQ83z&A97@A8L$T zvJ+6FU_G1dfB?XLJsVI8*`ArjGN1SQ_@;@T;_K|k|Zy9upgFRo!#3Pq^kzH(NcjQd>6{q#KL zNHkTSzO_+A8bVq>Y*a+MwU{De8KokH_38Wh{5-z=+|iC%n-oy@b~J=<3iqx8W1pF> z)vF4S*T?i+&<-*(Dw&aeTsRg$DzS~NDn$dJTB5STFWv_LB1bkkPKE8G|HXgy?boya z)xW3vwH+}&eycz61^Ivdt@@sS{%e2y-(QWV>dkNhlk6CWGs=M`v0RQGaF8VwGprQN zL?g!KA1Jge7|>y0Xuqm^tR~DXF)?rGf`-xb1{Xk=96LvhrzbOQT^qs7r@>%*dKz|I zmQ$#tVwdHK?2AvyIG(+Yh8y}I%*({+T^mGt>Y!P(#uDlfV{fgSw$1}tG#XfEQzm^$ z+R?K~4TDv~vUW4z8vHs8LL1qe;(%Ify;(D>CWqG{f+NYy24iO#a_g-2xD9WXOH2xK z6TNNirE0=k$y3FUdJDacsZRrhXyr}isG%v9a$9n10IQWkmTIjVEK5wZVcv{N3qs6= zKvG%CCZ;m%!b;t7c_2$5vG(D-m-4V2C%?Es*oXq zilHK14K2(BEk#nB3*)JlfQAGcfups3sBko*?`TlNB2_s77fb6KCE5fz!T!tvMm4k^ zbr?-mR94^`ybEul&#kG%U;l;rhyMhA>|goHp8JQti7$GdIE3r3{>uILe_#IV|MeSi zi(o)~CdAjS5MH@3qg?y1D#`K{2{Iz~uG}u#0j6)u0#rk`*2gb4q#a_9*FB`Nn#G2r zckL9mM(Xio+J=}waL&~T(mlhvXa}mL6s$Q*DLSGx^+Z!Va%V|+A>-&)SW>iVm62M0 zO01MTohD}IYf*TUq&784VyDt90z=uGNYhGv?jlx>iU5*o8oK}^DD*X#Sb(DEmWswUVm1rW`$ z+6w?Rq#+`sYcrL|HI4%Z22BsUdnxedHj;52Urn@VihR90W2rG+GW>RE0D>-kl(2WJ zjmPUw3=ycoNoQP?Qc0Ge0%ii0irgMgjVRerfX;ku2QE*QMIkB=HKx)u+$lm+YFZzK z1XYTn5XkoXT<2@XaU63k_A8Oel(;ohwsX4<3r07pwW4*^WW%VBXx3V9>#}c(?si7!FR#S@z;(!;*RTIcH{nPiK3iSe5&+VY>omnM2 zR8*+9r#@q+yEVzE`FNz~PIzT8leCvx$%Zg#LUf^KX0P-0H-6xUesokj^U=II1;FhK ziW#r>6RH+jQ2|d2-|uNP?=D?>A5Hr9?9b!!7n@1uI`0ojRpK@d0amOmZ`9b{iOkH} zadc}k?e!#AsF|)TD5q1?~UB8QY7{kE(B2! z_uad(*N%F=-C9PV32^R{fuh_Fq+lCJF>5bx-U!qWETm7Pt%|)%BE4yz>tVemy*EWX zq{7;>pL}SgN{57Vs5a4f&C|ogW-XyS)KS~o5FKI6IkCcqSj}m27Sud6p@x)q=lfZK zY!6xaIB)4k?@v$tvrq0{|CL|(xIK#?biBU%+V_9=4}RgJZ@PcuGurmd*y6Eu$Sy>< ze;Tq0Ewc2x$IJf%{MS&&NE zy~;1KWmV0&ngSOm=mPdMs7YOvx(ru^HL3}XSurep`(8x=nVETUfQp&1PtTpTcQb3F zo%3X-S43=@HA*2best@0;SWWMqH?w7Q6;1*f`uy_D*`Ez4QHXs5TG~;R5Hr05D!Ue zWr7A2ubC1&idjK&MHIBS$xBNEK%pu`R+UlQBMKLNFg!pCmDH|7`%S1-3eABYhoHDZE+A8rN)eQ&HY0_&3~K4ifk3jA^(GJ!N&$-%Ga?FA zAR!bLvOII6aRfxM!?*AvS*K8t>3dgQf4)9^)`rUjpHSwtt|v(mp%@E!MVLgydd%RZ zJB?6Np|X&;kjVg|Ktxp`V_$n>GKq@?1Ok~UMG*z6l0u0pDU@cB6ck%;&3cQBmReO& z2t=7ekRD8qFk-0qqq`U9ag#sp_0x=;ZMHuNyyE+S3@eh^7 zU=b9tMzu;GS4}NH5owsTE&HAns|;utq{EHEE2U2JENu#qnWPq_8euih(=SMtDv_qv zr4?1GVz1FGeK+YL`Fz}(+A8-gl8~zHE=>S2ktoibgv7ApiNPviJOXC{_IrQo?}tFz zQ!}&%ksB_j%Cn%~*1hiKR^^!GDJpAcCN_ZDjZG~6v~or*s1nwaQOS3ECQ8iK^wb8du+rIZ+}Zc*9y^+63!({y1ZIMJgUZ=C0#FR!)x%mcn#E zA3OHzJtPD5TK>iU{(HZqU;b|W5B|>lPyNe(`=9=Ie*W+M;sYAMAo$WU@IZ8@beN(R zu`2)gKlP=*`$^_w?Z~5@eyDWN>oziOx2y44W!Oq}p~&<|XtP@N)KCoY6yrC}PhQ@> zy*=5=h^E%w{KnUQ=@GACBU2jvI6i)E?R7nZB0H43Cq?_Gk55g^T%?bzNY|$Je%_zP z@VVw|=*`5FkK_t09#U&dlq9BvNp2K3NM=|d2cUrCe)kUL+7+?uPg zH(B>g&oD1hY^EN_^`tildhSQWlWCS7meLG?F2RaAv!*I^w6WG5H}SOA=+hZCD@v~( zj6J5HyblwpRO>fej}7Ck;lAV6`@?6}KA^+6lcOt&g&xq76ca+NB9=F6hPEnel~pu} z?QB)=&Mgy9H)vM@hU8{G_J+#a@r>}+%i1s!>SZ0AAdQxFM=fiui!4g3s1^H>l&&0B zTv=DD_Lj(WPZ2QFeCH#i6yb}>Sbm=cM9cR4)V{X0Bfslo0OjSqRJIUMGly&Y(8YZtJH+8YTw3$0<}UU(48i+Rr6kF08OrbO;w zpf;_l?L1{<0$w;X>ygNoyBxBQ$A<23z>&JwKIihvQo6K7Or?Nbq98wJVj zF~#7%kU*y7p2Y`Z^^k}}kd@*=cq9=Oe!}NvHF?0JtY{gSUBvWJA0C5&?62phXkeX7 z{8e_k*G9D03C~=SE7oU^dVS@5^?TTO3Akn0C+|M}zx~|$AOD&6Km0#^{N(@q@z;L- zH~zEVYv2FPU37-r5#!JOt@V$5_xN}J8y^P_B(!k^&;?LyrBtf=p38StA(Z93tT72_ z_LkBFWb9O9nT3;D4OF%{UmsYvZgWjBOIRQJc)&d)J#%N`=v5U_)q1b2iWsd|CbN!b zNd`m}%8c!tz>Yl~0FKKKxvLThb!%m*hL(hS*s9TDuU!82S?5e=dorw@t!cxRzBYKN zs7O`C>06ZhjADkQRJCpyzI_$6^`iurJtZn5=RRjUte`aREEU0^gYH#|HMfII3#km7 zkC|&~IBr9#ml>-vg>8t+c`j@@MyvF-N-;dQXY;HQrmolRYQ3|ar>A1Haju7wdr!V3 zQ86DeKmYL&bb}WyT?Y)ba8OdJlu|+wqNtRJz1C7#A>o--8=J&FXVb#~UFUkN-UWLL zlj5YR^&NE^L!{MSJF`oHky=kfUtW&mxwkfKv`9IWp6Bk``yo4c3u)@UfBjc~UXFeu z)LUiDP*r)vLj)8P(acqsusIbeBK7?8R+W*PCc}CG!YV;_M(*%}S}RHj$|`pe5a~mE zYvDZ98dG*u8&zi{yTpZ2iK0SmbL*Nyb&ch{3wjp2K;wKJ#caO(vihZvk9l74G$J+aR z_{=)jyI8ZtPDC|h4#qe%GE)>XS7BPiF0J5Ru&|GBZ{w(3+shH;OFLiLbQtt?zS3}? z?+WLpX!V-b(Zz9JXPonV)ZW$#NRw`(y;;n?PO%2J;^cnBBdW{d3$UM_ zj=%Po|FUeTidcL1c=!DD(YJrkx8LIv>15hRhebfq<3z?e6yqkPg}wCFj^k)%vm^?7 zw4uEFMh(zb-Yu)Eh^c$q6V+{JApP*6UQ-0{S6`8zJ`Z`1_>ceA*Z-A&{5yW+w`##l zqIPs`1t!52#3%qTm`DL7LbqM5Ho9Ac->3G8P=fjsS2p%WxCzqo?~`&VmP)`v-Se zRaS*BmVlM+tjbJ}dBvBEDr9CgUe=xprC%56O6^+kiipf~*QO$fOjc2asY(bfSc4)$ z)ltaDeDv0?^pgdI?%r6ec6r8-kZVMgpkz2%mDaRVh=L=Up&}s^T18$8;RJ;l6;cXP zC|N1|fK5=*N+3(jJflPeS1U{@Uc2ltDVgzTy$4GQ%%Vt=sy#C$vjm_-Ud?T2L!o|i ziiON9fhHhKp|P>DO0tp(Pf${&6-AH`xlpH996nc}e=u_Kiq-0clox!^-ZT6(ZHfFq zRNlTcTbW08B~WU;0A@lcN{>X+FT#o{0OSUgl*)jJ5D_H|mCJKgM&L@aqeLarGsz1S z1A-Rm%qX=&ky#7T_^) z8~1uWT(qy#?ds57IXX&3Wa@70zTK!G*2-~+RGlj{Qf+8Db`EV36(W@`BE7X8McDCz zSSc23MrJtjdA!WnN;XxWOO7U8eJ5j$@${NFR%sgpZ9UZ|`yHhHo}c&~FbFn4l#vLf z78D$~`P|Q`!QJY%-6gV^38rsoGvSUbuPQIFneM%c7CVoZ=h{_)(u@}J_8-9DlzFEsE>*>`Dg=_pN3n{9|I-21x z{k8MY|J?l_{^5_8)ML-y-ga`W<9+R$-tzrf)%?DdPt})c^K;vv*HGWnBPn)_5Ml*O zqV;%eQg70~wjSdJ_jv2>FZcZ;-(0R=_zQpM-9Pvr|LX7m9{m^o(6@Z<<%!m_N-6}h zDjKVc?j1k=<)`2C126y4FMalXHx~y-lpJ?^_-7i7+s)op>E7C!XL>$d+LN1Oi{4i5 zktOWXA(9&HTfgvKKl_V+v(*)K;3vQIm2dyv@A!1R0zKkYtj)WB{(0PYo<5)L4c;%8 ze1F~tk4QImrZ4K#c=P^zci8cCJkR->Dnco>%8(qU$qUfi7*QzP6j2f~p-+mPNfZ)3 z)C5QcT3Xg7!ox-r-^sGpa(ir3tMm}Fh~&0tD8@xfgtD+RO+)}jx~Uc_u3t)oS1C=D zxELOky;pDjgKoMRh%epv>FfNYM6$-M_LNf}13j>PwX=zBZ$l5TfL!}MIhxwgxl5G# z48PxfH94wD^BDr{bL(M(^u0xn2To-httC*IXYh^4qf&d5j0_jsk5_woZmviYC!bz) z`p(4jken-g%Q2Wao3d~bHz+EMol1>pHARNT3)MpFn?5H${onuSzx;3A|L;F{{?xadGk#^|i|wEM zEysMFfA;SkfBJ8H(!$%D_C{K}y}!AIK6$mVaflOC8EhGgrq zX~ok%>yA=c9;OG@_92LRl4I#ahU63T@ygaUv76i7p!6;W45)>O-#|f!r}pK9tnxlI zys0h;yz8}I*$>IR#0GP}pH)YMYf!BXohvehe93r!G>*)z9(_o7IW80;5|JUn(5fh9 z$6=5C{>3`$RfGwgE~sqm(1~{{H&Z}jxh$bQVjDkkHJ$f3l&7oS_Tw9NP|~D7wlrM` zWo`7Eb{99@^YxCPHj!!79Yb;Imgkn|)F1?F3QNXIg=#$NGm#g^9H(Y?G4V|%n??#Z zk;%R@q&Jzm^BXHb6B3bQV^6R-``IAV3 z-F0?Px2n~o5iRT?UD_+F+h?B@_Db4a`TQMY{sX`D?Hs({$*_+0(U)(P1d}5aaelRI^sGE3qlaZK7<31?R(X0La{?^6{Jg z>3ggvk+TCuv&Z9cdpYK2<{kUk2u)WJMI)-IJ_L*^mM*~b@%GJ|h+MC`A8KOn_H1GVGL$;sKd5H6Em@AvT`na%&g6|VgrSgh zZmcYIk3Mdd;rkSh)=}`+M?8v#DyYD()-l( zO$h-?Rlp>*ykI~=1pE5IKn5sP*E?IGo*~`9(xaUjrlv_Zl?-W^=cA+-!m~^-HQG8u zb8eydc}_Kfr;T{s`4W12LPgthPp_uAm@BQ@>+9p`ZP$2CK3>ML=3I1>reYcUvB30h zZI`sBU2Nys1?TeKdaS*29_=WC0kW(Q_Ylg2-=6z?Y#se3c7II5&eKKsx_#&o>F(L| z=n~sCiFQ+9{@4$GKLV|~NFoJ^@s@2MSv{mgGk2G!Vtlgj@bF_iUDWkLGtv9L_tYkO zp8M%}glF%^PB-RUdE8W2@epyeuFKy0)TugkT&M0X zm&1V|$c{yY;lN#|%OSP^jr#p|&-RFSq`gT)rF6#?I03<;!t-{_^$Hc0^fi<;T!V zkKM=C@tpKT6H$6@ue&dI5v|x7k14(Jh``$Ib}dLm>Fwf=<(DZ`1kwDyBKLQ8d)2n( zd;0o-V^C9TbzW}Qr}rP;jsEm_x$97BMdm!hG~2iw$MdaMHd$FKL&5jY_i?$!I9^GA z9EY}Qvel&)D8=X9v$PMP`R+2vY`PqR+@w4}Pi~j+gt)4%cp+M5iI*H*?Iv( zub%f~m1lPCA%`5(he6Uh<6tcR_RIeC_S%^DyLa2}o@CC5n_80dc-VF+zwgsq6Hn-e zetR{UmHX|l{la(ud;j1!{v*HZHIfKP&8$=C z0fE?{@Tzv@s!cBtIA8=C_WP9U-Ag<7mu$esLSx&?Fdf6x2Eo`M2>2ZsqWwgcwvb_Y z6x?XR0#&OjPd#YSeHtyPRgo+uGlB*sP$qfmx=U#h4iP0Y@>F_y9*w=qLKw%RwQ(GC zyYz$<9aT#5)NwDY3~QQ1qE5y&>;z+{^%mh^GASldD+CBw3lsop9Vh%5!734{6jG`} zsr;ysXHpb|P}4=_WGu7FiHuZHJt4?>mXOl{5|=T;Ptzz2=^~Pm6sojB6je-+8I>o^ zg2L0JdmemM&dx7To<$J>=?G3|r?LUzv=nd!RaqG#Iz5_MvLwzKMS!g$alV)U(pAj^ zf?8Y_3T=tfrs*N4YEs~lB7!KRmPmRu(PJImx};}SYb`RevMEmVPGx#VQ!7QKDl;n; zrqYv%gsONHnW_k{GfUP;XRxZ~lGX@0MJ*zRI+?g3qBM8}1p+D7ImyGxG0JS#v(h7s zCK{36w408stXjM0W|vZlC?g^=Swa*-vP2RkJ5l@dn^&bOX-%t6=(r|JDoZ^>sH!3Y zxMEcA+PCb@SB50!)Ru>HL~@e=7QLrkKe?`FUn=YHE*Bd)?>@G^`()#q ztBE)$HwuGx$WhBtF;P?O5zy8IKeRa%v#J#9EO0Zms zrx?qY$_SlL+jt;a%3R?}o$SMdRD%UqHp3L_4wv9|v3c;}tF?-G*?E^RY&0GFWBte{ z+YdaA|Mxe){M~>2=l|&Md;KT=q3;tl+VOC`+VG@Bwx)&nAO8bi|9k%FW8QR=E}j$f zm0hDBoobAsBHPFrgc*iexIeNuPMySoY*{HHg5&&Pi4vPbs_2P5eY&n=7V)F<=Rr6>=ecmUuqEa{tt0mU`8SSQX?u%_09t1pu zCc?z3Bdf)S-7o0gn)ZCRuRe4gxovHKP8dl(=OUZIe8-(~J2JE%_h~jtE02{1D~&n7 zOuY@+y`*F>zZmc9Xfj^r>}3h{O^^G+###+pLXOq4mgmgUY-#GpLbX zpz!6|s4fr|Q=m}gnkg-LW;YXnWQep`*-;6p1!wbN1 zVVQ7m7YRM2Housz$%thh9F($6n^$i2EZdXI%~VR*vCbf)bdKETU2CMQr_nnpc?axS zcyV7c7}R*0d_Q#y)tXgXQaCujdXZ#B6FWScZFzZNzItjBUKh8+s*p=BZ|$gXW80X@SBG46 z(R5jVtv;rIfv1e&(<%{*C{_)8Fx%KLMgD7OROeXHKTUgiY-1#b>#c zsR==7V*w=FFnB@=wF(`DrXEULS=yvI@LAJc_Wkf7wyMc;86oR@Zq%$Z3lE1e?MVoe=-952$;V1iZIBPb=)kI}a(0^H}> zYpY`&ECoe1GGdJ8Gmbb~L&8{)%CYG_L#uXwP@5FZAXH%;g|?wZg-CjBO`jjfFiRDthA%ZK&DU?Y=}?_VXdjoJ<#50i<-z{ zX4J5SxPS5aab&$Z^dh-lV3dd2g~?bEV{Eb5tsiq=lOm?l=ggr3!AT0WP4|b3TIO2E zp$aaG8TYuWwwCs?X82NTrk0hPXiSINkOUkdS+U)uJ_KU@o&Uj~3as{28v3Q!XT+#( zxJJk$A-Vim9vGq-zPmq-OIATu0-(n9SM6yX_nC)mHa#n+TCem(ADej|5HxCW&ciSL zvOY@Lj@DGg9*6Fc)>GIDVx6^OSJ`GeMiu5^!)fDcua9qh{_f{{ZS3}L9>4zOul4Om zWUe+s83&MR@x?p6HaP-)0Cm)%p@;i0Ws?POLtw3*KaAI}SowHfTUVf7I~={!D+Z4>>?a`xh_o-+t}0ANbnWzy0NR*!?1x z86F|6i3j%Miz;s83X#T_E|+5-8QG|7mNnHZz1-3(id!4A*h~x6jWbOc3XADx6_gNd zg1fxS+CHr}|K@i-|HuEpC;!>M;}w>JgSM2W8VD_vD&QS515OxI3SMk_4h9%->q9xq zx@ChjQ!K2A*4}-ApZ=A{-*|WY{I~GezxBln`!9U+!#ka0Gp9&G&N5UYi^>WWb-)A}71p*&FQz9>2+oNsETB$;vH%IPvC>&qkwp~( zRLv8z8=1`%b-t-ssHQFBp!8s#_FAZgFHy}%RTBzgL8U-3J*M|YlJpR%Q)^pQRLK)> zj1)1j_#36F2xLY{iuNWS3DKmV{xoQ2q^Lj?2vx0hlyo6*QkNPh)W)_NQp4C+)4p;*UB~1gMPd6JV_hePjY)}uMUG4BAyNQX>m?&XY9lMXs z0t>cn@+Ml$DqXwTEfZxGE2&C~g0XbgE;`DmA1|un0VjLXw8Gl``DMFaQK2GPY06@o z%U3K2!o4Ew(wk^qt^54}tbKdxvthBCTE#RQbJpQ8#w8I{RUs_WrN~}+ z%vDJ<0lD_swthr(k=8oEEE9)n_u5k$VlQ^^Fk<;yf$g@<_m8wDt(2HvsE{f^oA)Lt zf>l|oPDE2_Rf6@MFYIT3{=2{J8yfN|uCu$&`_5hp-*b(4&0dDsAK6Xfs5Thn%EiN~ zIEW)Tv|fT5k4f9=$;P7%i?udLfeV98u+|IWDtgbX@%+PIy}jM=um1Fx|NFoAtAG6O z{qg_Y-}RNNVF$JdPeI-*uHW;N|M2gZ|LMPd{NAs#3QEb^Ct7c~A1A`G0&FV4K{gS+ zJ7iUF5+;{bLG}G!t-X2k_UmuI`nNv+_T}xHtGxR1yWjfqo4@vz@B2ZIms(lVLv*cp z8oIJIWmL^$wq9ZvuJ>k_bUyI%bbZ};xxYLJ?PJ!yxg1>&o|?M_(4Ya-z}A~r7%Ga1KzuYPsT2xA zMitK%m`H_}@l>!7NY*w~prz5yL3C0GF$2os4f_304HxXIg7KlOU98<&O`Bd}F3KBB zl|!nuRW9wY*2w1bE@zH0v}t0W)dt*euLM)jdSh1l#h2T-(%&chP!wX}wYD<3Y9++( z8Nkzpp156eu4rftGc=n(wMpx8EUUfxrp!4V7rP`Og^*G}R=0Mwyzj|*Jhh9|8fyDo z+pX8~ap7~~^;JI{YqUZ;Zpn-?$Z`{7!eiDe)ht2NxsKb`9_fh~DhU7HH~n~tltgQ} z9=BIL57Uw{w#uW8%u%mi<4J|F8am%YX83yZ&SU z%FDm@m;H5HzvZ)+r)zh`Hm7T>J_h(uexK{Gc8`~~@pugiS@K}t zX6`q$dP#1=O*zdyztS{U=>-oEGb^1?=kulCQni>uq#NvD5E-BK;n@O*cuMm%Z`D&O z{o-hLi&nClsO@;J(CZTPlpM>a#Amnm;%?Ea9bdiJ%8<#o*ItO%`9Pg{yGvD*#gqke zOL=p9E61Aoyk6IsDXkx`;uXV9T|+B6?WOhBJ;f3!bFuX*doAF;e24|sn_`#uf#jki$7VMBaHTt)ZMyl`!~$7WmRlBO(lQ?W6P zEZ@3jpyW2a2K-o;@8R=`r<6jZHIK=>C=LpfqRW=(ZAI#(BLkjxl{Mn&5JUQ^OY(TU zU0dAxlh=K@-2{7z;B}=j0=5_Wl@G=(;H>6rH8F>0U9R`cR~M_5$9CK0`?!jGK1NJO(jWr--)Tw=l2 z!lSAH3y)dVMfQvvC3`E$ea2NaMckwTp8H``L8Ww<3Ma@(*RGiRQcb0^S)J$h-g>sYa$kdXi?kTF<6Q4iKTkF;k!a`*carB0!0yj#9)_uSK z$X7bjnh+g`^RNqqisb230o6SqM1_@-XXrIb%23P@6@;^Uw^eE>-&X5Z(RtZ!D_G2x9GC@`E?P|q$@4tBU>DO}W6{&2VyKT!u z2pxUP6;!P9eP2&+-_X~6?!uN-e@qo^+c;hxX4aY=yDP{E3Z-# zh$>Z9wupli8~OyhuSXs)@avEL_zy1Ba zi3+dD-k2vBq6|HbzxLz->E%p_nM$d_+ zTdccq^Gs!zn)}L)wUWcRJZ)n!YN1mSDxz`hxKxGE#j}&*n@PmTKBab8u;;5M3pdBl%Uyo z#7q#g4(0XQ34g%uPBV3_L zZ31K+ipxjt7Fy&=WS8cSnMsu{3hseT`@|u?^zQL*{-yoj{-ybszx~}`{^nYdbL;Ky z^7i^xyDQeDkzUV9# z_))12%p>~fQK_gzk|N?LF^$6udGv0rZ9sj5&Lnu^Zpcb73QZ6$)__1Ukw!xa(pRRC z#Y{k;^O%?Gmbr3LyEaG_JjxWzN`@!8nwk^@0t2#=dZutObDG$ihniY%;Vy=(3z0{B)Dp{m3^UQXIRXc5Yc2>PI zGD};XJf%!!Wvo=CT0>Q%0VTGfqUayX78x{B3b2gXyLuF~Ixur?tts_bODSavKvd#! zM{S6N*TDl*GAGsMzCx-NZe1!RgaxV`$}W{5w!05iHB{xwC@%>5HUP4!;LZBuxNiob zm@o<@)vZ15_trO|q7n0C%8?v%Kf3jy7LjHf!ae5@lSX+-&4(Xf{{G+j+hHS*WvxT9 zymdto2od^MzyAGy`7iwR;~|@BY`TsZW^<(`V%xBs+OOM)IRi{e1>D{Gi1HMo9HeIq za$H9_Bx{B9Bz>y6FEve9tUzk|WKu4-=Eq!#>Em)ETv*3iy*I(~J=+C=hw(y5Pbj-d zMz~V49K^r;?|tj`_SKtDYTrxBB9kc1oKOR2?G}~Q>{iFIx?B$UR`Ak7SIz7L&o99~ zxNI8@UXKsQ3gqlIMB9tM=-$oOZqaDpt<{ML)?BY&&F}f_^5L%k?LYPTpZ=L||1*F1 z2Y&n;1GJQfrG@Q9{U`pOAN@c5KmO7;AM5*{Ov+XsBeCvON=D46i;a2g8KE6k(fSqc z>v5DyLF)*++=4M5`Po;0;BS8CyKyXOvc2x#{LU|b`t{$m{20B7w&Mr^4;tFL$8qV+ zB#_3ewWQVbCN$xEf2@k9%T|5_#Wl+X+JICUj>@@byReX`D34g=Yi~|pn{7ufVaw%* z?kO8`H8BkGC?JMV8b+{c3-=V<#;s5pNd&*M2Jj?5R$&w8UYJUrPKm-+ZMw%gnfE}q+f!Sh^7=&!C0t*OX%vebpV3fKq{D^ zATo6m0Jxl<20;Nt_I!N?Rr!68O85;8?M$4OJ8jD=gvdzI6XI4?RcMu`>7c4oHUrKj z3F*z1#wciBh5}Fp3#ql)*ir3zRbrdWM9NRmF4EP65yi zh!)~XqEstO$k8K8iGml^QpzAzg`^s*_ElQYj?5745!p3DMC2?2f`d`2Q5=c6zQC*R zed~Yf9~nRWEAyZJv!DIBU-;&izm6Z@EIM9E|LU7}lpB$4TM-ydE~Wj647sl9(BQG% z)ci3no6q4IRDE^1ymPh%wDoG+-Be(d&C@#QtgAHgm-Ns$TDULjWZ zDXl4cOBzIy2?>@s!(a)Nkw-$n_8Z#70tKoao-`CP zk%SdU7K^#ix}kvY8AI;-JqumC$}xq-XoB#3AW)Z^9qv!VK77c2Y4eB=Ud>MGzB8dB zCFaKzwTLnjRsucJZ(@&3F-b>clp|1R%#57%$SHa;iTmNmyuP}4g!bn9%-K_>f{~)B z888zjB2bZ~=+!)Hb?CW~JZj0>w6C=y*S2kink!=_ln8NuX>VT~rXGGcXWtI&#& zk(D`Jgbru}CV`S(Yj-h2pqdjX&m=2jU#?99$cMD8KaLOOO*^~xIkRsjzTA7zbA?R( z@wZ(i3$;*^)2w4vRi(ORg8&3U5fX)uR0~kG_jZz3DMTPyj8bba&(CHT5vBv0&AR7d zbP2vBlBA-GC}hP_L6!`*mAjjE$aDBxVsfDuY}qlfZ5gFm3yl479bGl|`#v@urIfZ} zYGV1`q!p>w?Bem*v+3os?TjoifFuj8f{bW}EIA~_;mx+0Ir zYND-*SnH6u)X3Y@HnaTjF58^5nbn+j8S}B*bub)T2}IN)OJmyh%KezKMwj00cz^IV z!XVHLtmWB6ihWiV^8(X`^&fg);GWYqd#g}#9olJy01g8Tl?~{ zd}2GrO*VL>cEsAVIGR=P_U6@Ne{Od5$lkj2T)AS->t(!BJMI|9=ly-N#-mtYiBpDIMzw~T9ZXG2c|f+9 zl-bkv_q&eqa@56Cu!W}-XD->sP-@`Ael$~u#3PE18|pDr?fUxmvcKa6w(!WwiQ857 z=@6*FUgYxT)fZoU=db_bUwrlY)eLrRU%vn5PyN*I`Si_aU;g^9zqwvAV>CYYYJ(MO zB1bKPFqR%g*i9e2D1bTb@+Vw`On+`Qh@x{7_}Nq^*f-*&CHY3utRa^*gQizfG6mrZPesh%Mp4r`Sgczr#; z@oGd{qub|S>d$@a-5>iGzx|c#<&XaZpZqZ4uRXDUUM%9a9=j5-&QMKDUVXCzdFEJV>*MG{#e zNEaA9sgWKrMk^$u65$>unzF2qidis=nXRdpBhlCrNq*!uL#+z5U){k0OhR)9n@MJfln?GN_%Ar6#$G z67`YULt-s}$_#-9R6Zh^C_n}xT+PS?*t?xy1(M7>qU>x{AyI+Uk}QFQ!dmZ{QGqBo z>*IVykk%Rt9$_l;aJ2#AyI+0@<|W6$Xt0N;+%9js?7P2v{_yJ7V?M|Zf-R{+Q1@a~ zRH}{0hi+Dnj9RiaajuA2kEXiTVb&Mb%7R&yZF?e)xw08OQNFI*rpaU`icp`&xOLrx z)BIS8-pA#!FRtV7{rmnfFz=2rpuSvFv#V-K3i*RS^bP2IbG?4&JNE`uOLqZ7hdkCY z5;fsM5gW4h8MPHy!f={cA)49CejJEf>VC{^6KByS(pOd!x`R!9uZh_)cy3U_JJpXk zVvUQgWg=x2X~#W|x9FrI6DSj&tXP~haT9=l`Y(=Kd%xxN#X~!*y`;Q(IzALE+NkM1 z4;Q;mY2#Ym8_U2NQoa&%-J5EP)jIIS;lt8IS!z_OL_VsqN4+Z>%o$Rf5>(kUh-fsu z@#**d=JnTK^zZ&>f9{X{9pCd${gEH&Xtk>GQZc*fKk*;?`hV?T`uX4Vd^_;TjJtyW58!{KnUQ_HX>K!_ck{6WYoiV*|c#py(9K6)l)Pc3cBf41)fN; zl+0G;tkN+&+{|W_$f~?{)J(P^$K#Qv7B#lZ@)aG7}-G^CuE zMs|o7w1aW1UHfPnh@3%F98qQ?Gn;rB1qBEfszn66Fbct-AXi!Ijzydifb?)xYf-=< ztpjI-a+VIlDrcRp;*;8+m553zDzp?5YkwHF=w-;Lo%14H3YxMKt!c&*HS_~Xlt9Ep z63(jgDJeQM6_$omKP+0FWe_1ySt&(F%EF|GoYelx5>#cKqe{z2tBxlqtcO8VoaH6$}C=mvoz+!Wqq?5zD_TV`3t`LP06*o&I3*RwlHB6$Lf}AZS6MKQLSo zYzM00NYKzeV0P)AUg$eqq0hKuh^`Si_pXdW=!HbBXX?~;-_rlYPkiI=|7~B|C4g6Rx|elUYaMt28#TDNC}Q9=f@OHjU6ezw4bvC>L}s2# zymF<%9YP3;KuT!{q>{=2gD$Wbms~SuwjJ@>+THnl%vWZ56FTcS`gM4$)KxhyTbEc8 zIGmd?O%bK5w2kSL+V97G=$3gD78tKXvp>6Q=A!}Up;=8}B<7s;u8bMvPF71{mv|0%Lcbt*TM!YRzP3HfbSM3Ej*Jb9c!+Kq#Ov+n!c)Z zM3p+%O}2N1to%(kYHuh5ldfhq6Oinx8i6x1nMs18?nx{{PFkuIvr2?an(FClNXY2i zV{NG!3u({(BHG>4J)oA6z7mvnfmL5?k!$W@*G-UAs%(|n-B3f9xr`ybT|Z$P>4n0@ zWFCihi$_|wmAk3U$lK+TtO)Ec`{+hRRb?8*x&W#f#V*JG0EP;SdBjOTWuo#i`_?lN z0al!}c8(E+I6Lmh4A)ipruW{y{a1eF_xz6EBd`b7)8+bDo{}D+rk{M}(=XpYKKabH zHnNbbQXnPnhbMZsLz1gTVS2!1>zAl(#{0`bQmk;yuCjAoYHP9ToLhfhCb@4etYY&PxCq*~@DatiXMOV7S0BIfu123*Tp=@Fp7-@>8z20g zZN0LToR9fhktUCQis;<)cG*aYoLAfSV_J)KOmj`$dmAB{kGyob_XW-B>h6(oy-WczN^vI{ zl3q}4PcdGwzq*>T`KB_L40)^&QzHD3KF$yLdemdHRtoA;k!9*J)rPNj>GsHDYpH%|EvoN7 z_p6`(;M?)f{inYUsAWPM908bB7Df`9g<_Tom!)NhbQu*X@4vhMslRdjnV@CO1Ogxoj8J7&h_qrx&M_{&(wat; zoR%cjs8|&eWvyj|=9xop=S^T{85PKLt9l%d(N7pqNC+)i1=ZuYk8!Q?DpEjHpw30@ zS`%c()|DmETR(Y0WQka35louruDT(^tV>0rq@*YmK*&I{DrbD`Cy6b06GT>$omv%- zy^PU@0bo^8GPBZAgrEW^-A0B)W>caljajY<6niQ<*3f#H=`(Fpn)&k9C6T>bL?8-Cg=B${0@buQGc+3N zM5-8CWCleTnXrQ7i3SHu&8SHl8F?;QR8WQL)*^}m36`4s0^F<@Jlt`-EWVpMr~A)><9fM`Nbn zcU9s#7{>DV^HJ0Oz#sU%fL$(!oa{kLYDMlPTQB^?PyQs5S%=yy(Y2-z;ZjXe^Jp8u zw(^iPR2O=agba;1lMhmMOz%xWeJmH%mDSaD54Wz++J?mH z9!s{+^w>MRzkgY8p5TPD+IjO03CcXruJW zFd?XtG$tS`#WkX^AX|I2{9XyJ)#awQT5C79(j>dDM=5%?opQbIER2pin0h3)qxN8b z{=z?bs{Bx2@AU&e@%DfF7ryvE{6F{q;UE3@H6uPflFjSpR; z?Ooemt=A(Cxlp>MqLJ02YQR@(8X21?WO&3RMD=m(+je;z_vMBP_qbg8U1;*ezCY)q``ht^gzFo7dO$5~~y3PVp)g zo{!X;MnqO@)=_?nZ0cMPh#1Rai8ap@$#pnOYP%@lD1lr|s$3)~>=dVtROAd z3W!D~L_lpBC5qobbx0AFZ3qZM1rXXL6Vgj+o`!p#yL>RXw6w~H2xtoNI3=Ml+R3H& zswyK2#)R>dBuYWLquNKz4!x*ql_|msDU_H=M2Jee4lrxUTBmbcz_pIn%`~D^bVR|} zAxvMzP{{HeYBA?9JIhKSE7MVCmT*->x>7&^OG+VBG@t-kel%0hWK^a!2@!>AqTHjQ zv=oFyhziutTxnARUO*&@(gcBI3e1Jw0d=M~DzvR}ZGY_F-~QNtz%!m6i}!iUKXA@Xm5`r23~oVnWiMN+-Vn|Q_0BC)^)2oGCbb& zj!Y_}qLGnacCpB0GNlUKP=|)0hlfHED_0$*m%$LJgMmXq9RnF&feETK$s4yVJYecQ#?&{0(8O9wOQd?Zc6Fz?r$H#{tX`fqZm3;S z+(M~bSQ_*$2;>B*uAZy5uEz>1Sg#CF(Vz#Sm6QNAjtVJCe1ZZ+8SX@HV7#d=$hD}A zK$a0}Ihy1Yktlw$kUq(Z9E_KG^~&FT^7JNA0?PRV_%=a>o0b!h+GlM27Vc_iG-btr;;d)yHU$ zJ&=5aT5%iq9W9aGQZtK51za>jTJ2M{Qbz833Acu}U2{DkBQtt~>~w)Dys~BWO&oI` z=+sxHyVEATqmD)L*82PV?pu4JE<`%bbgl@8O6`trJ#We*P$Gkfyg5?ZF_(&$X?b|B zq`u-NXFxpXuuI;(hNYCU3SeS0>@#}i5+g)vAz92`Iaj7iV-04PQ3a*POdCAC9`%^3 ziE8ajDPf`z9&0uuRYn2Y@5givQ)PM6T1$KH5nT+#Wm2*D!;Kgozo9Zf+Ua^C? z3vRps8oa4L<6U|l_x<_t@_u5zv)7mP!AlnvDw>YR+%K2gF+I{pAGBOWgEZ4Qmo}_` ztt!A*bnR?y?uQO-p;Y*a(aZ8?V*p;|$*ZG*Ky)eW5I@Y*lVz10fsDr=>QB=24~Gsc_9pyJ@TKBrz@+owNSeG zZEzd%$hl|oa^WM(@`!EpxyO9jbq1c+k@_aD2oJ*7UHh#n3CUc&$qIce0Lt)L-nCk5 zjk?xaMEKr^3EOiXtwiGJxJ0X2d)KYkYFAhkl*dt{S;RzX>*XuOG((LpflyR0tBCSk9dDjqef!&=|E+KT>L<6a!OGzGT)*oZzkR4rMm+Z3 zFNmW{+n*mOMA_wLAC7t3wp4Beo=!c$)lRa=Gu- zgwgueB@h2=zdrQvf90S2sh|*dkzR0`8TP|lH_e%=vmsGRK`(*CFMc`ymw)ct|JR@Y z?l1j(dG+}7Pe1%aR<2v@DYEX^b-ixe%aP*8($U)jWV*CLfk{t!$&@}WZPvrE z9n9OS{{H2Np}8OatZj6T5*HV~y^P=eqwSYJfBt>{%+LHE|M9Q=`+odw50Y{)HMEG% z7DW*jzznkipb)Jg!HA_FL*3BxEy~3b6dY*+Lj#aRB1NdB$7Ao?Af+Nfc91IgC|vR^ z(QyHyBmq$>KK5FZKog2tRjRg#s0u&@k|0H*JOfR&qQi=-#OT*^sv}g- zs9Ke(4OuaC3#R`6Q#|mMY6f9Os9Hq^vdM-M+8I@*V(=Ro`!iq?8%Lb$>Ka>42^K4_AV&Sa5JD1 z+9I4LY8F04RHU*_;teX26$$fL-9{m+Bw{&bSofSNy`m^oB~YP>NSwBq<-DhT||U;PfSl1O?U7A=Sn9hq8OCVKeMb)d;|NG$<0 zYH_KlfRU9MP20X^w-XWGPXKhy)kbS&P^n`+;y?tIHWbv0niwLuKkj^TInr9+eew ztgT;D%3s{JSGMiYygz@J-}|=awCyVR2s?~gbY)Y(0UkOo>P>hYJ6$3DdET!WhJ@!P()f5`iP=YReDzxneY{`o)pec%6PEKp$o%|GR%eg0M8 zhYT8Rs&uhzxgLp@Fq0)Zb2X1$uy9zv&X>7g^QzrC6BIe62fNoW647j&*(lX4F#>@?x{8W5fRL;}>LNNytNf&; z`Jp?ZpP$x}~CO^EQa;bI|XKzQ}j$%Y&WiU9CRqW~Bvlsj8X z6j4B9ef*>VF6XA8&_C`B&PV4|YY`v46BBG%DI5qwqtK8%j|0FtPBc&pNfbUVoeT)1 z;N;U`m$37dDKR1oLO7rW63i&75{xW4iRmRcpCk=4Bz|3$; zXYu1s=PZrXBn2g)p)_)+$j5(~4M?DH+MdwQXc@o)3zQVd2~{kBfa2qy0*Lc(o~?Xh z010e~)9B&wj<@Gm)tR0H>_oz!;6g&{{B87v7I2p1jnERviszG8}c5I)#7)Ajp`W z-Gr(D4JFbNQ6MW&DQcNOIaojZJvH~sU%$uA#V8V~Px}0b?Kno#$<`9CK~y-@;&7~N zs*8cOHdBE-rdv z1nEiT)RYoHYb1`A3Fr!BK`b3?X8R7?W7YFezVDm4t&L^4O2tt*d)^raDuPLa%(@<02|{q+edzp?0lB z!|{V(5fr1`vyBoOvocqSxax4EB|v&Cny5(nENP4?Aw>ZMsHh0CNQI8(ewdl4MR1V2 z5LoHD`?K|?1FY$niGueUGf7of_3 z&Xfl+cvLVzQDFsYYnyvA*)F$?`~J8~Z+^I`E=*%faREeRJe3Ik*0an z-e(_u?MIT=rg^NQqDn+WHLyFc^?3O`zvH(?#J);K>lcr>;Q2lJmfMp(enF|MV0k5@ z832=Wc~P;btsA0Dxz`c-bbWfb`+dK?dMW{ZWAdoktbywL3`}*6%7JvT4$S>%ecR`8 zZQ`l3UbgirH?)^3R+kpdbL7)#9{cU-`r(W3Y}=<#Pv8IY`Ok7R8k$~@`{Tp?eJOEO znS6P9P)I^a?PJAZDw$O&(q%~VGCzE5VzR|66#Bj&94{j9d;qGOkwQ2WI@%4gZ>mp%$5k^ff zw3qw)Pj7D~oaY)~U><&H!!yFYx>&A=7Lqj9$_5LHG%@#igbn3VGf8QW`$Ms;^*kn- zOZ_rFUHA2u|GhtdZ6;g7<7M|B`TpPj>Gys1;lq6w#~VS zn_cs$X?mf~>6V$1abZ7>**mmYT0S`rcY%nq<-i3R8fJOfr_ah?|5bmN^Z)f<|0%l( zCeS)o5j*WwyW(ce4!HPdqnMrn^Mx!;$pck&sEQ{ z#_fukrTSA(mtU#<5B<-7?a%z@_4obc>m8-C5z|s|Vs)|@j%I;GW#9C}%l*ym2|^~J zVqjLFNJ!dgb6SO-=@|*8mPCn~nYCmxQ7jb&7y#%Jq^c6`OHAyXmWU}7sECa4W^L9Q zRFtb&Dy0yWg%nc7P+81E6r}0M%*;5Crqry;D5@Zl3L#6FDnt(4Y*q$q+Fb)GaNW6m%`6E0uER;|txo~bOvu$EN{$w&wU3ZkfTy1Fw2 zDjB8KbwmZv9ldp}h;Wu9LQu|R5DcYFq$(9s=TTY|g~$|?LIqjpW-FOR2`^LCj~;p; zB0w_$;b+A<%h3$sqBatdtEy#GX_Jp9?5d0@YCJg>2q~&GO5IvRmZD%iVloSAVjrm; zCl|wnQ7hJD@3j`q#&WCSpa{_#OMO05uSM5noE%~udmXh*ECWnLQ;VuiyDIm?!JTNW zwYrV;2&{qbb(c&a#w0u)m$rARo^m1F>8r-B-4HC?ftjD{iDD0cLK}B ztcYu4c~%VRRWg;9^M`)mD^lz8BP6KX$XM;tmXs9Mqe`+F_q*Sk#d4DFbF{W19>)$? z6^&XN<|0G@%MY`QnL7M2vo}an6t>aU47WAfw&x)bDdV_R7fWeUcOGvzaqJ%u0K0CI z{Ege5MK-n!OrWoD+~2iN-#m`3VVaGJ5HZ)Dai|z`7nR7^21tJK@JmC%MRcuFS{>d^ z(bA&;c)!R!vgNg1=CM@E@7`ZERIH2&gXjcxUH_Q@X1g8Wd7A( z`tS$-NALgmfAnkrncx2!X+Qk+@dtlw`@enDf8vv-m!R+Sc-3aOh;h@l_6*AEa!HY6 zF08bzMV4jCMnB}C&0>A!vrjL;^ZWh!#@hAv-7mg;_x}CcH%~9$seTK1+bNxuy;fAt zqqnPB-hJ05u}@sqX4m`k%dl1_uS82lD&p|cvdg9Xs7y(Ssx<)1qnozA9&76(*9y{1 ziB+WU#jed-WLd0W7od&XS~FU9Z_Bd}lgc$++c^P1 zB&E_|pok>Ez{*fl&{`o>320Sy;W|({17Xbwiwe_m>Oizka*%nt842->tfb;>E)mK~ zRN~~rG1N+N-UDM?wgQOad5uk)v??@dft0MOVj**tYK6EEQ6fkzkp_6>Dt3VgGc!dE zRlS)9)f50SoMIHPdSf*s1cfma30RWL}mFrV@D>E#nG>)L6EHTdZr@f z3|5|&Eo5ei_N=H(REl;MJ;a&`a8BuuwX0nO%v3d)^r%wuSZlPVb>6jCtq>@AUaOI7 zQVFn?M~aD_{ss|=JSu1^3I+>^EC>xyNWv9*GE7e1rJ0FEt-f zFB(%QpdIUZlVsXUG*FrhzGak5u(1LX+*`+ z(bf`E2aqbKx^u-;Q%Q(LWF{H~Ia4&G;NfBhmL}q)%tjCpF|QeA5(Sa0l%5J4o>155 zsI$_J#L_e{YXu54YDpFu1=WlBxg&1m3 zAa$+k0*0Qwd9BD4!4|RawAa`%;>`-r>8Vve?S? zj*!q@ra2!bZDtV*uC>)3+;lWNKl`D(^v!cpP|{#)v6W90sdYc33*7xT^6{6)j#wy# zHOWUo-DfY$dXyZRTqTmeRN;?hmu9GUb5{(X(L5>5RrHV#S-mSA53_#w9+k9KweO&r z2eY=taOkD4c*y0tKD)KeSZFL)QHq075MfoblQ1V4rH!%F)B_@kGo>z3300XfHO*zA zZN9Ie0xvFvvZ2Z}8OUVj?RI@RsH`gKg5^6Y{=8pqwjwjBA`*>Sx@}t19u`fP6p;=i zUl1`@e){R{^Iv}^+IptWm}H_ak8QIy-75h*@=$H0W$r$KGzJTOPS;kmrlQ!o$Mjj! zjg{;0+vUk;s(>YtaT(j)=knEVPqmJ!LVcWxq?ng;b~^~=PyFT|R=b29^g28ecPM?u z_iW>rYA+3er6yQikiiJLCW^LoKb{XXn{$F%tWGOwqaVu~%ewGndQfs^65DvqT77F7 z0)}T2TJzDtHn!vOp{ez#+WX`(>cnC5U>0s~F0IXHP}-XF)h5qxKY4lnb-7u+D1HC@ zyWjfi*MFqeU2}f&c3b;|5ZdRy$N^5A=kKU@`~7+wwlVe<=4*O0b{6N;f%|2XcnQ9$ z^*mdIwOjgo)u+sAT1uo*EwPP!+;=>PP1_c^YrpgcKCI-3^qff1u7j(OQ6Cm0YjJLE zba zihxHNxR_FvAeDNWyd+qZgj6j}2-8$cpr~S;XY*!e+JfZ>FIP2dR**VYF+eHS=smHt zX~gQv#$m#YXi94uRVTi=E2Is!W~OG{Xicpw3I&xj`%tHzQRIAYh>R#H+4`o`8LP@! z=@k^Ma|nj>AXc7JR3XY{iBpJH(jW>?Dw&yTdZId55G^|cQdK3i^K=5hSYQ!iDik8B zBqNIj)M7>|2rZ?Yez=vOs;U{0)CNz_hf)fa>Gd0XuFN0^R@ACwqKaqtE=8(aN$VdE zJ*X-`ML#lrN|Xgk;Pi;AF_BDG1-w*wrhSW%8KN4Aj7TIw_tGN4N_UULqcTKW+Q)S( zm7eLD&{)-!?fvK9u8C+Paw*$FjRxhYa6x3>S_4#^u9<2Eg`uf2Jz^fU3WYePvm)#4 zJ7ggkYwd|8MUX7BF`k~riU{T-9s=Q#EZ^^Q>)U=Hf%|-~phLxaM6fj%T`$l7;s4Oz z7iftIdLeu^^p=ICJdO$BH$M4lLbo9nwE2)yCe|Kk6m{*Qv~9DTRpn>kc+DA!6t<=f zm64g6%199vldi@u-hc3dRP1v~m8ibFJOJR}{qd+`6_cKM#6G?FSd%YDmsh~}@ayl+ zU|k@w5~!1Ejwza5;S9C$WWqfb3KK8EU8VV4N}IDEX@^upDXCT=IhPC z^0lsgkR3Di)=`< zugZV-Pyh0N;-CGS-?=Xk|NVdH`@i_kJM*+Xe2%9EQR;@MBWF-b^LnhB_qCw9by-P7 z2Ag&p`BeFxch7o}@B6_Y5qppq6om54ci(b|sMa#Qx-`uyNNR~Tgv{sp{QA0uvkbBH z{=Ax93XoP=Sg{0hNepp+KK7#mUg6r8+zaU)XqGaAW$$0UpyK1m9OnCZEru0QvF{7a zB1S7Jr5s!)ZJ3RWd51UNrOz~u*u z;YTSG33_D}0w_WkD(dVWF)JuiDa3g>l@(4&RsxtY0VE=&Sg9(Bpmb4TrjnxCpd>t| zN*3UiV4yI@6RSj6lE^?tg-5!nB9P^hM0#tj7|A4+?$QL%h!oXxwgyywY+ReE76Lew z773jA2joYZ;75v#9vQ5HDAHKb&KF9XLWC(`Ry9j;V?$F?B*R&5+R+rOa$$-t8NH1z zty4=og`tB15K;{gBZa-ewoWeXnXS-znux};FHV{w3D7w@dGXo@b2lzH_d<&pH3^|6Qxf<*ITSmr3lh%W;Ag z6Rdy~kU%D)0g?k!(f}kHG@xghgkC^gIv^CJM5Kk0K%$3`5(#94#3h162?pEca+S+< z`Rcp;Z|Cg2)|~Gc>i+%+N$ zF(zyn7zTsUrUG8_^fOHsXhkB+V6qV1C(dGEj~G)bZA3S;7C4ql>j9&WTSILtgow7_zp3d^9gbB4PSXoG<4!S6r$FMfA^*!9^{zl-s1_z&Lm z!yNCPII6h#yxI5nc=xoPpKG(V`MT{rH$6|ilReR#{@Ihe<+H~7>7Q@$M2@Q4%prRh z@$RAS}yx+tee-Awo~tkAw50$=lgsLd)(Lbv3V5myln&h`Rr%cXS><<`ZVnp z@!9kAk!Hts^XJ$$j?XMU8+fnSHhp%(KKQ(0bByQueDk^4`)R9G^7^oEH#ggS(l^id!?xKUp6fR1{ZoH7H~2Y}@1A{( z$A@>ELoO%zyvLKG!0&&yefEscH-COVeXFN2xY@Q5ymQm{oG`u{e&aIf^Jjeaggwr0 zy(K@Upv#ov=zI%#jpIC$MsT<_fo4^k4BffTNm|H! z3usQ446?ZGK|hq|oyR>XbH%5Rk8OBnn%dm9F$Kt$Yeu^_&oh;M9FKl|fzR#>OmSA` zd+A8;PJc3<_`N^;k$gttY_}QcdY;xTQ~i7!XQu3ID7(N~I*6v3CXW`zgmeg-p{Au z!#v-8{`m^Rtu)w;X3^J~h3+m>-S3~gKvg_H(@9mWhcQ=`S!e4!R!SCoRq+-^tLi*^ zostgLDHxsMbL>y48nKxyV@Y>yz07vMxx%w`d(N{zJ-*?-kv-%6_rCpI`WE-N4Ibm^ z%g0xi#}xaCUwyNZS|{@0n7&O`_jYqoS(wv#R-S;_7ISWXo8!o}w$6H(-IhIN9ln=y z;#_#%CoCUdVpX5oPaoXtQG+#%>KsplIhf|qsrx=6%Exd=*s9g}5M6_vw|!UNH{ZPX zPcJ<~u1X6Ux7(4;METCD+HTXMVcYunxUWMuciUBj8Hvq@XYeCT4yZPv3m`@_Rr0{W-P)V84C!_@iI`r9b&DxYkRr)8CIn@_i@M>aZYuwx7A} z5i{&**fh69XLogXW5D`2)dCr_&+{?e<_zpMeVZBY-@RKd%j27Eo%{Z^z5ksrUjKLh ztzZ39fAU=$%)Jf|#8K0{cMzzo{onon{n3B!fBJX-{J-{h{(JxK55G+PrT_TP|Hd!h z{+OSp+au3>t>ZC_&yUp+5NgKqvyxmLkETO0h{x%+juVREZbzLl#{G3|s7h8c&qP)p zkzuE&rZyk2+n6)!rJ;9Ya5uCpUtmy)20 zFo{;6`+A%gkF{m3buq@+v20Zgje}ZF6e)nMvoHo`rItdjSB|&Qce; zwFtpMhMS>U#mZEn(~a&C;qd0_hBu73lr`wG;hAL;3}d-A)>@#sn{Qhwg>*V9%?G+W zyIswLFf$&Nmfh=G;|m*5WTYr{-RO}`iuG7zvUzHU;xTM@RPaT&F2`UK=u7uoU{ z5QH)_AX;5rkkOj7TBpS{Q;qtrJ#o_>5Rwfr! zsu82Q^IW2%#X+->8ZDR`2(-Bex2t})j~%r@6m%i$RC1b#Fsr(pk5|eamCM6g0wuO< z>n@?(oW@cEDZ$``_bPZtM2Zeqm4|hKXk%2L^!*wL(Rpc8N^VmITW8Ms7I-g+Rc`GK+eBqO&s$D%y)X2no$Gk#6-5lG#ay_!=7QIeu z(zCLJC?3IWOs>ku>&GYa{dxQJ%ACW_sQae}^nSZ7ArDxeW4G$qs~0me&inCmw*BB& zwtxSN{44*1zw>YY*M99U|C3Mu`hV#c|40AF-~Xrn#PeBw)(Yoo(UHbtlD#hHz(n`4 zIKs?m{CNL3?bdrfsb9Z-{NQ^(_^sdm?LJ?9o7;H*StRWgTd=r|4gJsoS#;~>8r`uR{(xc1F6U8ubY!FIi z2n#eCg8PNHLe*(*)ysXBGB5xGy9IB9X;4iXS$S3o?t>{!QmP(dxzauA%(+b!%wuIb zW$>o2wKn%AyBXGS2=ps(gmOR(VG*DkpfImhJ|X}qC2PXWOGP?hb8HO>eWe^of|RZ< zQA0A?$_H%&q*9hRIt(Rc%4rAy(Pvqd%%&NQy;hq?87%2Ux30O`)hcg-*(W(gargjG zI-RzGh{YuhKyGXSV5teQ4eqAvLDF?S{a}qAl{tb?4P%NtftRS;JnB7&th*|9>`Zee% zVp#{tGL1`4N#f0tZ4c)zl(WrE0GiD(*S!9wjHc?`#!gjMvfLZAy2g{WmegZ*7mJVt zC*dQo3SmCpWD3m=M}ux0Qq##&m5q@mPhEj$RBFVw)ILMi6;LM3)UxXZ2hDay^+B3Z z-hi7>1q-m}450h^MX=!@=)9_0@Xj~(O-&Ru(AhL=VUj%EYaOPsMM8mrfvRe_s{>f> ztPVpD^Dd|bFgPxdqBmL%v{M&*JiDv04a)+rLnFjcwRg2$AozxXs7Aqkc^lB1)!DJN z!&H5Bw%A~}b*GahCll3RAdfL-ro7#Zs)nmqPB$2<(;#CbCbTXLa5b%r(ADutm4RRz zt@XefoCG+o72UPUg#!vR5dhwAdcSRrGzy3l{2UE9J`f<@*kn%_i5LQyM6hpy(rUJw zJ?{+>_%OLr7Q=y6J*dyT_#O>>3xPIVidPM>g==Bw6d--}G-yT~j;(O0hZo@x>oYz9 zz|q(Y2;h2AyG80Gw?coLR}C;Bii_B zjPGli5qp5ZexN6!Kd)OkJePuizSXzJaszbJCDsza?J66#Oqu>P#cNnI0Ccu_gA+(# zbef{AgLd6U98aTxLJjzJR|I_J85V$fS$alAo{~vMGXt~eF6?vbta^JU$Y4#ues=J0 zxm&5bx(j2nuY5ju3;3**NvgKF+5OWQPkS!`WS7H_BlMIhTh?Pn)-mR+V4t~7mNYPj zdEe&k_2AH^)E0m6hyM^r`_^7Rxx2!vh(@ttJi8rL`Mlq{F+I$E9Y>fQXU_fNjoRZl z_HCZ84>=o>>`ZObLGPj|EklL~R_We7$0SVZx-LgmWZ#~*AOHBL?eG8C&wXzlhk?8m zUeAwSy?mSV>E`k9l%N#TZ99%rZgYeQT^NqxQMCJ~moX;xao+E~-R2ytPnv_h&WD9j zR_j!ETUnR^Ft4ne#iKqIxAp0p*hjck+I)IfeAvfj`@Jew`ch)qwvT6h{`hn}KRti^ z@~6+=zTNEkc--fPo7Kx#kDq+=)9-xmJN0FcF{g$-oo6A>hkS%>kH^}#aX;4teH*Ag z7naIwKKgim-j2$EeL6q7qblCNd#>znUO(OH>E*%We)_m^;LP(WeAYO}$i&!%hn_y$ zk2}{=%-ieh!-f-ai9*_K-Cv*PyECbepFrDoi#la4`KR^q=CSz(2|gSirPbc2Fx%94 ziU4yJovJg&zT6^Ly}k~&?u~t?`~7&mVZ79R*p7tL6Du!e>U;Z#|LC{i(1zp4{NmFO zo`3Gw{?tG5)mNW}ST=Pws$!tb=veo|#!U-bWS%Ybd>&`Qr@4oK>LblbUv=SDxDBTR z-M4%9_R9AkULWVp=Bbw-I6m_Hd%yGPfAX*V%3t_n(gB-lLSBgrw{`!6pZdT3fBOCZ z&42jKk00^#&R_rbyP=1shxZp}8x{TO*`9kp(O7xhXnyyBB*NG(Ihj0Vw(`{WbW(_e zEQ6ozJhJJJ(l&T5+1}%1fYE(#+eW;ubCAc8v^_TV>cPN_PnGZK-*o-*XYud-@c5tq zAAaw@^I!Pm=!9)nSxCrzbhiV2nX>!JghO2wdmQTskA{yJ$2x*+@=`)%^@s}<%{Qq$ zMKvAnj%pDw(se1}381^(agps%@PMjdPC_6FC?Wt#<@DsD;!Su!UcS; zO81xptIpv=fOo-+%~pXvinM_%&LUJU_X&DTcF7{pGLwpn%joEmGuoii#r&@(%t~Izas|c{G(ruWNlu(R8LsibXdrJV25r&2#!rk0jT7C89 z%U~usm=`3wFP0E8m%%_HuWJE2SB!0pu&^))m7OA2C5!-71z0NyWaXlZ8MIPMEHupk z){?u?9PqV{m4{Rp+<~~TlQM@H&nyZKg}WmzuR0B+yA4MJ-Iqg*a2tS)F+oXX#;m-M zL_o2d$q^2qN~LvG{s;?MtG(M}d~yE*U^F^2Y@3{iEf7mI@a1@+b-)MtJa_l;s9v1| z+Aif@8|Wt9UtXOsrSg%PW6)gAX~Q$ucDuQCuS|xt)avGR8!@`+8~5EU)o#LI3{iKa zZ@Z48*ZRx<%&!+Trf+t$F*drPZbzxEYYd-8fu`4U)#0&)MQ0h*tqWCPHqXwB6u$aY zH#<9XwLIoUcULuSFidF9*-Rg?`y4X1ccn$J3rL%OR_*l1>k-pB5MvAu=aQYi)UYqV zI#A#>*)eniWVc{26cCBB+lPVebW3`MpZ&Ax^Km`MEtALjI8iryI!(plycHL_Iq~ctK!ul*qLtG*4T(s+B?%$fsn<0p{=aipfZ!0 zJ;>~B;LOa$u#LuT+dHqnN`orzOZoin2HJ7Jz~tGjX}F(9OO3(^gWP;6;Syyg)=Ju0s&o%v9s*~eMV zfC9vsohiv3WT4^JrX*Tj4HcBx?H9FYC0Q-&%qk39YFtcR0yHy!*s5{Kj z1;Oz4d;}_Mxj`CkgI6wq5DHg)*dVHOrA|rs7!h!qlY)$4fMR$XW1B!eZ`)1RskB;q>^faNf>}Z zyKZM!pf)>>wk?k&mP9ms3>1diWOOsEX;ZYfYbo4<&Q`S#niWvIAWgA_!|}G$GIZlq zowAl!H$&&jbnxiafWxLBD25wnqZRb=EFkpm(O+b{YXP~ZnzZn`?s&3J7jrRIfh{oztXTXit;IU3cbfAu2QhPU|-UiDA z4Fb=~?nQg(ti(k~nyFequP&sjS)HYlSbBRWW@#BxOB!Nks|+F%SR;rtdv!QK(pbp` zl#;2*)hZ@Yc2T9!V7G-CRpl5fA1w<5M^V*X>%0S{t*#GAL4gJ+_BG=*R5sSh!UiHA z))!@KDTP!DDiH~l3>?_1FgVJ9Ua*dsZk=kFmw6`4w?wJg32>LGYMmqj1gRj5SZ0EB zb`dIMQ-y~J;4}(jg3aX0YZ|o-lCaJL7;2n)IM`^kRz0%Uh430BNkB+WWLUh}g}tI7 z9k3YT6AW}dfC35R669`Xl89@<({%T&i^VCUhq+Xsg)DF-@o@kKx^-#6)DqNYS#>_{ zrEY(6l-7D!iI!tL6+|r&ZqdbKoeQXY=3ZJj*ZB7P=imCBpT_6kjfV_`RczBaOie4y z(N^2ovi17%(L5fHySrbYXp|Zq)52$6q5ty?FlLMqdE`;bwaz?iP(w-?+Zso$$N7*= z*T^$D(2e`bGkJ!GDu&V%Q)g7N6cd3#c zqaB!Y=6a+KG-@S<+w;w16sr;=oU1RMp&Os(^S#!XPuc6;hi7ZgrQvlPpK_7r=fm#3 z=5`c6^g31^>l3&=-D}b6c)|C7{_}pED5uTahxb4I_~q?k zmm_JRv<*@D@*5kPCb~pbIe>ea7zxchs`cG~-r?vv^xXM6S|L6bU>;L@!_=kV? zU;Y358-MH5=VSk8et!Gj50-B;Ih%bHZ>Md0+=`!Y&r0u_69OJ?*tV*>bXZjpi%o2& zoO*c*SGUB+rxkF8j7ITD_y{`SnP^%{eKqmHn*hbv)L~WA&f- z_WS?U|LqGM2=fBL00Uiw$(EU+7Yu@`3W6vxrf=@fPBpeMEj-*W28>%s*D%IlAX+UN zkD}0`(b(!3dr?=D91%vSIkwxi2r9v;%2Om-=gO|u+j$fy!CHpOHkf(1lb|l1AR(@+ zYOOAzhQ*aqp&MZ37d%+JvM4}SQ)=_B1prm0gsyrm>6kR@#|a?obcqq&GKK`UHs7;W zH{8R9iF9`(TXGM*0V2&9RqH&?J{E-OlZ2a_M+vkp8f1i(>e|HO3Mrah4AD}y8gRNy z4tJwvmTI*MdY9-^i3S!e}%~z_Cuk3?w?wWlfRll#DEIBhBeD zO4gMyOHY~sHi9lo>t1;rN3lpxI*32~%^zYuWi4yrSgcQx=8j13N~e78q_^2oN4CcB zr@5o0aGF*gSts51ch3N``xL=z%M+m4@y0%;WxY z^yzaQ=ehMnb+Ui_)t689?eBc}K(rlaT{S=vN4G0bb7NPV#oWJxb%0ysf{|uPth0TN zL2E4|!)NB|)g$8Ne09X`V;hrLqys`VYu%4K&-5{ltZW@@b2l5h-amAANB85(5N2aR z?qVwu7-KHk?O0#H=#kbZDm|Q+7+Qc?x5E8fsjmxdvZL|nZND8_uRQfAY=mcIjv|Jv z3hR-_U3DI4a6I2WXx#T{40y!u(}GZ8)9w9LYt_=rabN!QG)K^$#^iq6#yVu+4h2~t z)dlv57#_)D)u(%It9rG*_oQF@wa@?CfAcs0#=rBU|KeZ#6CWCvh+?Y{`&{+uwF9_UuwUNADuti-|rI7vn)d^Do`$a zt@5@WP{r`q#|j?=eMT%hUtdn_#?jvE9%h4Sqq&OG3B)7p8cR5fxiU$&256k%$Q} z6ebp=0C~k!DOw)uN^vsS6-Hf@T>u_%H+Q#zHlPcNEOeI-7Gfa*!W`6j9w-BKDU=9wq z0kl$yR-u$eLzVfu*s|tTMoKK0w*Xw6Dt2|-#RoL7&u!RT*9eQ#2%;}saU06>dYxEB zT2+?}W$x-iDVqScF|8k0ajq{aaQT&7vuV`z{X{#m%fe))RLQzw<<{vTZ#HER)zCtB zl?{7h_jcROt)aH6ELp)EEMyN3BTSZ8ZXAuG1d?hK7&b3FO?AD|lnbkXiiZ0bc9q-F zEpt#|n}_?X4Gu3KC%xGVy10lkj|3cTxDvY%l)CWMQJqzJO_e2a1pMM; zog&^c?2TG|QNyp2J(FG6n}v{{=&rh^z~Ngk-6Wt;glILc7z)}A!YM%ufX%qIvSd|7 z8qy66A8EtQ&~0rNqYG|Gu&M~Q0=ib0*M_rKW_5*o7Q@`P_Cm}{5+;xhG#9uq6VQNd zh%o|a3UJz(vfa$03<$Gv0tu=cszo#U0mHUY#0X0V42bFhl~37Nt0bV<7K&%ZQovh5LhPs71-{9&{w`0+trOyB^q>CG6NB?Of$KRDGlp2&YBN>rZ+c-m3@$YjC(l8;}imh<%D|!009<&INd$WNhIJ zs?G&)pVoCqkOkv9e8bpXI0YC~YfL9E(=m?J7y%e#tyNrUsjyAvOPFJJ>HYhsT#}h} z+;-nVY(EoyhhM`DoPRadf9o^R@gszPKYzsFelQ@C`Dm z@|H2^*>>|e;>#~T{kcE?7odtd>RdseHqXM@Dd7Ew+2@LKxY@>VPR7w^R%doM%zC3+ z^Lc-FK3amT-5H43h7C3YS!mq2nY9NQa;JGCajrD1K9Ad+$Nj|4vF(dvH}^bQ;iPFR4pt@Gh1O4ehoT5W3` zq50J}Uq5<<^#;DY-eZ{UBL;25+_zb4U}RVNT*!@+?jK*5-JV8ld5mfcwnch$E^?t( z`#wOM+cw5X(7X>+lV5-N)muIPHC@qXo5q~`<6)k)JA(9geD7cRPkuKa*V77soyVvD#sB_CfAL@a?f>e( z`CEVI$3OkkzxMPO{-l5VTRJ=A@nqw5`HE0KIuuxWHlI9na1mskt0 z>5^k$a|3wvYiGF;fJ==8y1Q1^6$t9p>s)@#fFg(jEh5a-ovM>98m;0Nd*WV9uvijttUVwvwcL25gV@3twX$u zQLc5y48!G4LqFbJ6&_wtILp{otMkn2?w$q;7rzIvuqr&x!~NPznYC(VR!0oSxRO0m z^G)%nF}CjPz8o&-w-xsV+Qhl;y27bufWxU;2BVKW9%DqKyEMl%kFWt&c!+4F#K&>8 zXn|`XjOzu4t)+|72`E=}c2$C+UwL0Z^=1;oMba(+-RtuDz=RH98F3toU6oRcB}fQ! zzWGGLsO2%R@)$-`lQbG>W1H1Lx3SM$5ys$~goGv(ufrZnovW+h>I@6gO9=N1JW@!~ zv)5Ud0Hldlb+gCV30}Ew^$ClHGZn-4+bw9l7KZ?Q^VMTM%{eT)JW72M)!8;BG~mo@ zCkd6WwYs#rYc-VY-akB>5mKh^S!jfmXoi*1S#x&|7{u1gr&j=Zul|L<2!o|+AdWh_RyP6`6RwgFqUZkk^J_gC{gHNN*D9)W zE#*aY?_zNy#X2DF4qkd)}woY26Z8S@O^!Czu&^=JNH=Ud9-V@w9jT1 z*DB2{;{5dB+}yWq@PzW^em~aP`FPZJ8~(WKJdSl9uZNZPxJd^UW7BSfT=`gH9xKCa zh_3+ad26>WMLybvX~Pt&A@&IE*D<*}?s>Q#|J+Ig<_Vw@oqaS_oi55 zwsH@d&6wTlmUFgF88X3PX|B`|`?%X2ZanVYD|->(+}a#XxtTi%&}261^5n?S0#3S| zpc90uuUO&qk=0lE3N)}#%P%JpS&)p)j<7HiY_8!0pah@Ou5lrO?#|^5Lk!;pUOw%W z$C(+v0h!rHmdCZ~NT`o>q7&8z?`i-oI&8ZQUH*ZptJpC8ilvFrbyd@8fM6zejEPRE zTADtAwkiN)jO??EoA0uVwA)4sEKvCtu4yHZ2r5;bdG?H_>KxmwLN{mwjXEElS-@(N z9pON-Az^qZPa6ScWr;ofXSy46hN00_``pd0TW>i{$f^Zec))6mxMDsr2fK4Eq1A7> zTnNq{#`dd>A)(-*te6`BIl5Wrq9ifq?qic`t!hXT&CYzp*a&A_kXOT7VkHd@1OX#f zb#WCFOt@!JC=UP&fc2olm}OdtlBIxxrKEuss->$2biSFhB7*dmnC2?AJBZ~#xI9-` zEsDAXnu{ozN7K*+IlI#qRCJz#IoSy}k?2ALnoV0(UdC#XvO>0@C1pdfV5`k70H%$~ z&(|s797boff#0uMXIgUl*PrexynH% z3xhdR)-E%apKfAWXIFNiSg;6Iqvb4usM9z)U}|LgH5j1-Aq--oRjiajA$<~>1bO7CVaR-r9LkzcFWef_J#~j zsgBOhHlPnSkM_6rkH<)z?nViwE9@M=d9LyXtIop>kPlg}m9;obgwdS_7)pS76JVIC zVVGvUx&e+r>F8Y7?+!HViuf4;00TI|#X7HkH3G<9$iXwrt<^^j5UGvqI?-YyP3Tsk z*4e27QJaD6Mh78yEHsp6f*MAa0LYdQF3>Mv!@0+x9 zsabrQ)H=HXYjyb99h-O8T7Znh(Q34XlUE*+KuJXg*+T+A4`Y)BSob-?%|n&IX2X3% zqB2jFTxAnLmL4Xp#jHFF)*bEad0&v>aomS#i@A9mILiYQ)+fuxxtDLi+V}ZKfArOt zUq5VnI)*6^tGju4)SOT~%tx*(_ewO(+2?)RZnwFuV>PO>wc1AbZKO^!IOBSPcXt`& ztX}7NCW_|6$241g+OR>xiwvYtnKv4~{^Fndr~gb_JdR$p4mb2>YqSIX3-7)q)=NLm z9wxxYdCKF4ZVZIk@JaJ()Z=c$j(S9FW&xsB`*rhBUyr(hsAewl)R}oaUaQZFc+%Q zy5T&}cb|X0byXV{XL>VmJ`HrJ_HoJ1Y9`*WhRRl_kRea=H z$Aj_yX)71T?0P)!LxpI{jD$}f`H#z}H3sqy^{_LOm_1AozHlq*QW(l!}ic5N}W{Q13^QZUUbpP$Y|M+kGv)}!1{--{Fz+)e% z{=*0V+Q0pG|KeZ&oqzpr{ggNR^t5`!wJ#>RyWas-OZ2gt`j2DYoP>#o5|c`_>8EQ5rPo`w2?@f z8Et@|F3l@f16K-OO-of8xP_a?xf)>i`KaSaK8)(BHqNdZ8uxorSO zZ1$EAYMLPLPSV(3-A~)_5xi{o>T4m^opU&F)#znpxQCBE%LsE+X?24z48X1m!&+!4WKGS4l#V&dQZ53y`G{BZi>XHG`8twqlrgrH;D`Y^`(EI)O&B z^Xys>VHkueXIz!SybeE3FCY-;wo3yB7wGP0X7uXHbyiiUx;^tSlLc3G-jAv(<3IrT zoiBd6^@o;#k!il)FdQIF!)J^*>+CK!bCZwQXjLmVm%PArf1tTULeu>`tDSYO^*FWG z@O|Ca@mN>DQfLn|nh}7-oYN4unO$^u+O3+aYPX8nVHFcU{Ov#UpZUv8EVlHR6Ur*c&AGZ*z6KevDJ!sGEcKHgtJLH@F>#XPi;_qyK~pKjRZe)cD&of^uVPy5ZeJySN1 z<2)ua7r4Fu?DMX8Jia+j4wV#WSoY|2)4M&^St}p6Y3Tc*#og)dl<(~I*zFd@=bha4 zygSV&O+7z6eOCAW{!PB{lb5f@?WR7<$|}idIwl_y)=OGFsxwg!Rz58J-RB>wwQnadn^<6Fyh92F)_Svn#WX3r1^KPqaF#WMS5gstC)j zJ)Wry-{!QZ_tQ=1y1R$E=h!nF^i~6GogN0zoyE?yH~#PW?3Mt_Rk{w31~Uuu%AyMpwZa9Hc?7QwfV~0NfmMlNqRp_??eJ22 zj4B$haaBOo**+%8QdgB4uB8&_fH+F40UBLhHg=;2>~XwwOJ=zmP>@oC7q`|fjklX! zewC^#5Co~u^C5#r#JD_P$R&5-0z;V1{mDEW=JYOfQH$ACz0fUMt^+g=2g2W`3Tl;; zjkcKGDj4W+f-qS4_Vx_Nkgf%_5_PWAeCllwXOHt}tz7k3i`8z?l3-yCk5so3C0PZi zLYss}H96c&YeC6|#g<*jgtWSGk)jJ-rr_01?$mILm>#pLfeca|B^(E<3&yIYVm>;e z2LVY`PnwtFdd?nrGR%B5u4l$WrPi`uB^kLu`X$0CiwFyN7{Z)}x7WROvCt)<(YYSzm21@kWsEj! zk3n;eajdgh7hhdU__&{kL8|14_LM}>Y8nIVE~}@-Oq;Fta4Q)ph-6w2zr173xw}m*zA?gQeBBOz-_pduE;yo=OtsPG!f^;9IE~mh-t8ZyBw%xajkSCX29l%&gzRmz*Wlb4w4-WWtDLbcF6|RPJm_C zXSRtXt^pu~zWUG-Ve+*O`CCY}K*#~ltSdeUrFj5g9sp8PGNHQ1{n3S;Hr#6)yghr+ zB^z6tlj|4=AGcD2DpmyTEC3-B3ywh6@^|~~_kVm3o%`IbWiUL?@x7*RL_S6dq=Kvb^NBed`|_b__2U?adVpChTK;qLwF4m|XFmcw)0 z1F-r}{KlU(V4DcE&c~xGd{dw+_jm8C&WX5f3$4!eZo;WN52tl@W6@14b0~A0dsS+! zR=+9ve0bKFcJz@bbIs>KkZK!KV{8`h_s{B8JGZ8hd(rQysO_Q0J+{|2n`!5_@nNe^ zFRu^CDHzfmXyEDdZ*Rlzc~U!sPsfX`WA7Vq6og)VJjl^!X{Os~;QibhRqi?~k33e& zZAXm#snNIF%?UFDHrwp8_umq1l#PHLWcTLNx2^j{JJ0*aIdFfy6TWZr_3=24%0A>g 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 z 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

Ym|K~X@iRjBTQr~)9fGBTSbB*AONMO8N| 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

upqNCpgc^YYlkSZS~B8zKYF38nHfYyON&Yc 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

?0!C!dM# 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 literal 0 HcmV?d00001 diff --git a/frontend/src/lib/assets/images/google.svg b/frontend/src/lib/assets/images/google.svg new file mode 100644 index 00000000..6f1cfcc2 --- /dev/null +++ b/frontend/src/lib/assets/images/google.svg @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/frontend/src/lib/assets/images/img_login.png b/frontend/src/lib/assets/images/img_login.png new file mode 100644 index 0000000000000000000000000000000000000000..e3c9702ce0fb634b9a8ab23c7a6d62d246e2f7a7 GIT binary patch literal 10914 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 MrLLz|sbY=$AD;rfQ2+n{ literal 0 HcmV?d00001 diff --git a/frontend/src/lib/assets/images/logo.png b/frontend/src/lib/assets/images/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..1433123fad8d9015bf71157a430d11313501e57b GIT binary patch literal 2595 zcmV+;3f%RHP)gGd9 zQLV17CM`IPkCEu+;_B$+^z!Yhs;bP($+x$+Mod&eM^7*}K=}3WqNAiNGd<+u-$qMQ zprNBYLQBBFzwz(tR$F4<-rCdB&-?iEo1LF~eu7F*SJ&3lm6w@zd3{}BXHHaGH$6tW zySlQovxtk1V`ptyU1KOOIqvM|Z*zFX#KX;||7L}u=DwT>l9m)H)vsIOTl@Gp9ea@V1s`T51FXZkNo$U#+2%(fjl9#Zv zb!!D!N(8TSf`vdR#0n0+^+x1GQ$<$G0~VTyQh?<_@tW|hH=@EClph`*%4HvYJ_lGX zV)^sN*;0)Opx@^KD`+>l}b*LS%eefqN6fq_od`0EWn|f z4iCT9^I^X_nO^ifTV$-ZQ7bl8jLl& zEeNOge0avRwJ>h!`D}EAu=uG=>H04{mLb*RDr}%7Rp&x~HAZ>;>nKI>mMsuo@X(f$Jq5X6MhH~;{vKx_^2^(SI&+kBltJj zIGERkkc#^+3r+PV--7Dv?$>&p{;7@z9P#9XjX;W}1QQM^Ko&4~L1; zK*1K10atwk1D}z^Q3q56=+=bu8EfOjMwA{qoT|vNZ=A{iK`egN7EWp`l(-vm88LY0 zgqh{;&loQ$?_g;EjFqG`!Y=A6%<-;KZ)B&wEJMP+a8_U?sGW*wOU7F`I1wgTH!_!j zVQ&SNid!2d&9y3*!w~#2!75$5B#_&6z7!Uc5=>uNqoZmm&us&)_DJSft=rE(tMe_2 z*4j)nE>oSs9W#if2l%tl=`m+zBPN-?vc>_(Fu0!{i(L+=%tzW{rL~ex_PuKtvD_;! zJ=R4F!;<^Mb5>y`ob0pt7&{|BPao;oZ42YWYOFnue~y7kSuLT+?7KlzWUFoW2<6onCW{93e(h1N7LqaU?%9a1qV_}9xVjB^X)#ce`88ERaJTj|T$--&rSjJy;EyG5P#Y*Jz>{Jfa z#QjxrtT*DuQ;g=5N>2R?W`;!xS?BVbVhOLS%7gr>=9pS*Z6j`oCA|HXq=Eq&%g|c! z;dIlUC~ALvkWC0Udo{wsHj1&XDAIwfgX{EgT#og?D99BBHEW4Sze0(EfD~_rwb$xX>^noK1Qq3K6EHwN&EJC>( z>GLHARjbER;G?5uEwMo_MyZdFH#Bv#uY|qv4Knn5%vO}w^({jC`*E6et3Ns|E<>;S#v^7C3oABQJ7sYarCRTH za$e9Kgg-5WMXZez8&Pzc^B)BuN^pHIEMrlP6;IaQ8A2F+3;Q#!6D(V(njQrI;4x%tm&qu>i4>EHVeeH3M^(H*Z7~ zs|-Pg{njosZbb9ah%SP+C~~>KJyR@mYiZs0xmmeJ<0}iLiu4Qed&W0hP)8YtdGvnI^~buDL9v4i~~s zNjLDVq*(0Lr-R(gZd@&d-yrpRO|O02flyG=8A`moLuox?sj zn91U|xo?Ts#O5=W{*aFqCdDlsuO;K9s6gxTEuw+&tfYbUVkhwWq{lK?xLc2<7w$Bn z6!K_B;Ltg~d}Atm;Z*&4emFeu zPv$2zrY&XnWfuGcm{m?rP8yBn5$Hs!fx^c}i?*jXo0?<6CgBtZpExlgBvFP~G#-l> zZuho2Pc(33TRm}0Sd_;PKHuGlxVwPh4h0s6Mc{j}PJP58t(%%i@cx!%;f9(()bGC> zqq^a#+wCq-hfD15widoct}<`_={+cvtZ;lc7QPrAic) + import '../../app.css'; + import Sidebar from './Sidebar.svelte'; + let { data, children } = $props(); + + let drawerHidden = $state(true); + + + + + +

diff --git a/frontend/src/routes/(app)/+page.server.js b/frontend/src/routes/(app)/+page.server.js new file mode 100644 index 00000000..4645edad --- /dev/null +++ b/frontend/src/routes/(app)/+page.server.js @@ -0,0 +1,151 @@ +/** + * Dashboard Page - API Version + * + * Migrated from Prisma to Django REST API + * Django endpoint: GET /api/dashboard/ + * + * To activate: + * mv +page.server.js +page.server.prisma.js + * mv +page.server.api.js +page.server.js + */ + +import { apiRequest } from '$lib/api-helpers.js'; + +/** @type {import('./$types').PageServerLoad} */ +export async function load({ locals, cookies }) { + const userId = locals.user?.id; + const org = locals.org; + + if (!userId || !org) { + return { + error: 'User not authenticated' + }; + } + + try { + // Fetch dashboard data from Django API + const dashboardResponse = await apiRequest('/dashboard/', {}, { cookies, org }); + + // Django returns: + // { + // accounts_count, contacts_count, leads_count, opportunities_count, + // accounts: [], contacts: [], leads: [], opportunities: [] + // } + + // Transform recent leads + const recentLeads = (dashboardResponse.leads || []).slice(0, 5).map((lead) => ({ + id: lead.id, + firstName: lead.first_name, + lastName: lead.last_name, + company: lead.company?.name || null, + status: lead.status, + createdAt: lead.created_on + })); + + // Transform recent opportunities + const recentOpportunities = (dashboardResponse.opportunities || []).slice(0, 5).map((opp) => ({ + id: opp.id, + name: opp.name, + amount: opp.amount ? parseFloat(opp.amount) : null, + stage: opp.stage, + probability: opp.probability ? parseFloat(opp.probability) : null, + createdAt: opp.created_on, + account: opp.account + ? { + name: opp.account.name + } + : null + })); + + // Calculate opportunity revenue (sum of all opportunity amounts) + const opportunityRevenue = (dashboardResponse.opportunities || []).reduce( + (sum, opp) => sum + (opp.amount ? parseFloat(opp.amount) : 0), + 0 + ); + + // Fetch tasks and activities separately + let upcomingTasks = []; + let recentActivities = []; + + try { + // Fetch tasks separately - filter for current user's pending tasks + const tasksResponse = await apiRequest('/tasks/', {}, { cookies, org }); + // Django TaskListView returns { tasks: [...], tasks_count: ..., ... } + const allTasks = tasksResponse.tasks || tasksResponse.results || []; + + // Filter for user's pending tasks with due dates + upcomingTasks = allTasks + .filter((task) => { + const isAssignedToUser = task.assigned_to && task.assigned_to.some((id) => id === userId); + const isNotCompleted = task.status !== 'Completed'; + const hasDueDate = task.due_date; + return isAssignedToUser && isNotCompleted && hasDueDate; + }) + .sort((a, b) => { + const dateA = new Date(a.due_date); + const dateB = new Date(b.due_date); + return dateA.getTime() - dateB.getTime(); + }) + .slice(0, 5) + .map((task) => ({ + id: task.id, + subject: task.title, + status: task.status, + priority: task.priority, + dueDate: task.due_date + })); + } catch (err) { + console.error('Error fetching tasks for dashboard:', err); + } + + try { + // Fetch recent activities from Django API + const activitiesResponse = await apiRequest('/activities/?limit=10', {}, { cookies, org }); + + // Transform activities to match frontend format + // Django returns: { error: false, count: N, activities: [...] } + recentActivities = (activitiesResponse.activities || []).map((activity) => ({ + id: activity.id, + user: { + name: activity.user?.name || activity.user?.email?.split('@')[0] || 'Unknown' + }, + action: activity.action, + entityType: activity.entity_type, + entityId: activity.entity_id, + entityName: activity.entity_name, + description: + activity.description || + `${activity.action_display} ${activity.entity_type}: ${activity.entity_name}`, + timestamp: activity.timestamp, + humanizedTime: activity.humanized_time + })); + } catch (err) { + console.error('Error fetching activities for dashboard:', err); + } + + // Count pending tasks for the user + const pendingTasks = upcomingTasks.length; + + return { + metrics: { + totalLeads: dashboardResponse.leads_count || 0, + totalOpportunities: dashboardResponse.opportunities_count || 0, + totalAccounts: dashboardResponse.accounts_count || 0, + totalContacts: dashboardResponse.contacts_count || 0, + pendingTasks: pendingTasks, + opportunityRevenue: opportunityRevenue + }, + recentData: { + leads: recentLeads, + opportunities: recentOpportunities, + tasks: upcomingTasks, + activities: recentActivities + } + }; + } catch (error) { + console.error('Dashboard load error:', error); + return { + error: 'Failed to load dashboard data' + }; + } +} diff --git a/frontend/src/routes/(app)/+page.svelte b/frontend/src/routes/(app)/+page.svelte new file mode 100644 index 00000000..a894e2f3 --- /dev/null +++ b/frontend/src/routes/(app)/+page.svelte @@ -0,0 +1,464 @@ + + + + Dashboard - BottleCRM + + +
+ +
+
+

Dashboard

+

+ Welcome back! Here's what's happening with your CRM. +

+
+
+ + {#if data.error} +
+ + {data.error} +
+ {:else} + +
+
+
+
+

Active Leads

+

{metrics.totalLeads}

+
+
+ +
+
+
+ +
+
+
+

Opportunities

+

+ {metrics.totalOpportunities} +

+
+
+ +
+
+
+ +
+
+
+

Accounts

+

{metrics.totalAccounts}

+
+
+ +
+
+
+ +
+
+
+

Contacts

+

{metrics.totalContacts}

+
+
+ +
+
+
+ +
+
+
+

Pending Tasks

+

{metrics.pendingTasks}

+
+
+ +
+
+
+ +
+
+
+

Pipeline Value

+

+ {formatCurrency(metrics.opportunityRevenue)} +

+
+
+ +
+
+
+
+ + +
+ +
+
+
+

Recent Leads

+ +
+
+
+ {#if recentData.leads?.length > 0} +
+ {#each recentData.leads as lead} +
+
+

+ {lead.firstName} + {lead.lastName} +

+

+ {lead.company || 'No company'} +

+
+
+ + {lead.status} + +

+ {formatDate(lead.createdAt)} +

+
+
+ {/each} +
+ {:else} +

No recent leads

+ {/if} +
+
+ + +
+
+
+

+ Recent Opportunities +

+ +
+
+
+ {#if recentData.opportunities?.length > 0} +
+ {#each recentData.opportunities as opportunity} +
+
+

{opportunity.name}

+

+ {opportunity.account?.name || 'No account'} +

+
+
+ {#if opportunity.amount} +

+ {formatCurrency(opportunity.amount)} +

+ {/if} +

+ {formatDate(opportunity.createdAt)} +

+
+
+ {/each} +
+ {:else} +

No recent opportunities

+ {/if} +
+
+ + +
+
+
+

Upcoming Tasks

+ +
+
+
+ {#if recentData.tasks?.length > 0} +
+ {#each recentData.tasks as task} +
+
+

{task.subject}

+

{task.status}

+
+
+ + {task.priority} + + {#if task.dueDate} +

+ {formatDate(task.dueDate)} +

+ {/if} +
+
+ {/each} +
+ {:else} +

No upcoming tasks

+ {/if} +
+
+
+ + +
+ {/if} +
diff --git a/frontend/src/routes/(app)/Sidebar.svelte b/frontend/src/routes/(app)/Sidebar.svelte new file mode 100644 index 00000000..646cf3e4 --- /dev/null +++ b/frontend/src/routes/(app)/Sidebar.svelte @@ -0,0 +1,447 @@ + + + + + diff --git a/frontend/src/routes/(app)/accounts/+page.server.js b/frontend/src/routes/(app)/accounts/+page.server.js new file mode 100644 index 00000000..4b3ac302 --- /dev/null +++ b/frontend/src/routes/(app)/accounts/+page.server.js @@ -0,0 +1,158 @@ +/** + * Accounts List Page - API Version + * + * This is the migrated version that uses Django REST API instead of Prisma. + * Once tested and working, activate by: + * 1. mv +page.server.js +page.server.prisma.js + * 2. mv +page.server.api.js +page.server.js + * + * Migration completed: 2025-11-19 + * Django endpoint: GET /api/accounts/ + */ + +import { error } from '@sveltejs/kit'; +import { apiRequest, buildQueryParams } from '$lib/api-helpers.js'; + +/** @type {import('./$types').PageServerLoad} */ +export async function load({ locals, url, cookies }) { + const org = locals.org; + + if (!org) { + throw error(401, 'Organization context required'); + } + + // Extract URL parameters (same as Prisma version) + const page = parseInt(url.searchParams.get('page') || '1'); + const limit = parseInt(url.searchParams.get('limit') || '10'); + const sort = url.searchParams.get('sort') || 'name'; + const order = url.searchParams.get('order') || 'asc'; + const status = url.searchParams.get('status'); // 'open' or 'closed' + + try { + // Build query parameters for Django + const queryParams = buildQueryParams({ + page, + limit, + sort, + order + }); + + // Add filters + const nameFilter = url.searchParams.get('name'); + const cityFilter = url.searchParams.get('city'); + const industryFilter = url.searchParams.get('industry'); + const tagsFilter = url.searchParams.get('tags'); + + if (nameFilter) queryParams.append('name', nameFilter); + if (cityFilter) queryParams.append('city', cityFilter); + if (industryFilter) queryParams.append('industry', industryFilter); + if (tagsFilter) queryParams.append('tags', tagsFilter); + + // Make API request + const response = await apiRequest(`/accounts/?${queryParams.toString()}`, {}, { cookies, org }); + + // Django returns complex structure with active_accounts and closed_accounts + // We need to extract based on status filter + let accounts = []; + let total = 0; + + if (response.active_accounts && response.closed_accounts) { + // Django endpoint returns separate lists + if (status === 'open' || !status) { + accounts = response.active_accounts.open_accounts || []; + total = accounts.length; // Django doesn't provide count in this format + } else if (status === 'closed') { + accounts = response.closed_accounts.close_accounts || []; + total = accounts.length; + } + } else if (response.results) { + // Standard Django pagination response + accounts = response.results; + total = response.count || 0; + } + + // Transform Django accounts to match SvelteKit expectations + const transformedAccounts = accounts.map((account) => { + // Calculate counts from related data + const opportunityCount = account.opportunities?.length || 0; + const contactCount = account.contacts?.length || 0; + const taskCount = account.tasks?.length || 0; + + const openOpportunities = + account.opportunities?.filter((opp) => !['CLOSED_WON', 'CLOSED_LOST'].includes(opp.stage)) + .length || 0; + + const totalOpportunityValue = + account.opportunities?.reduce((sum, opp) => sum + (parseFloat(opp.amount) || 0), 0) || 0; + + return { + id: account.id, + name: account.name, + email: account.email, + phone: account.phone, + website: account.website, + industry: account.industry, + description: account.description, + isActive: account.status === 'open' || account.is_active === true, + createdAt: account.created_at, + updatedAt: account.updated_at || account.created_at, + + // Address fields (Django uses separate fields) + billingAddressLine: account.billing_address_line, + billingStreet: account.billing_street, + billingCity: account.billing_city, + billingState: account.billing_state, + billingPostcode: account.billing_postcode, + billingCountry: account.billing_country, + + // Owner - Django returns assigned_to array + owner: + account.assigned_to && account.assigned_to.length > 0 + ? { + id: account.assigned_to[0].id, + name: account.assigned_to[0].user_details?.email || 'Unknown', + email: account.assigned_to[0].user_details?.email, + profilePhoto: account.assigned_to[0].user_details?.profile_pic + } + : account.created_by + ? { + id: account.created_by.id, + name: account.created_by.email, + email: account.created_by.email, + profilePhoto: account.created_by.profile_pic + } + : null, + + // Aggregated data + opportunityCount, + contactCount, + taskCount, + openOpportunities, + totalOpportunityValue, + + // Top contacts for display + topContacts: + account.contacts?.slice(0, 3).map((contact) => ({ + id: contact.id, + name: `${contact.first_name || ''} ${contact.last_name || ''}`.trim() + })) || [], + + // Tags + tags: account.tags || [] + }; + }); + + return { + accounts: transformedAccounts, + pagination: { + page, + limit, + total, + totalPages: Math.ceil(total / limit) || 1 + } + }; + } catch (err) { + console.error('Error fetching accounts from API:', err); + throw error(500, `Failed to fetch accounts: ${err.message}`); + } +} diff --git a/frontend/src/routes/(app)/accounts/+page.svelte b/frontend/src/routes/(app)/accounts/+page.svelte new file mode 100644 index 00000000..5a4f1202 --- /dev/null +++ b/frontend/src/routes/(app)/accounts/+page.svelte @@ -0,0 +1,549 @@ + + +
+ +
+
+
+

Accounts

+

+ Manage all your customer accounts and business relationships +

+
+ + +
+ +
+ + + debounceSearch(/** @type {HTMLInputElement} */ (e.target).value)} + /> +
+ + +
+ + + +
+ + + + + New Account + +
+
+
+ + +
+
+
+
+ +
+
+

Total Accounts

+

{pagination.total}

+
+
+
+ +
+
+
+ +
+
+

Active

+

+ {accounts.filter((a) => a.isActive).length} +

+
+
+
+ +
+
+
+ +
+
+

Total Contacts

+

+ {accounts.reduce((sum, a) => sum + (a.contactCount || 0), 0)} +

+
+
+
+ +
+
+
+ +
+
+

Opportunities

+

+ {accounts.reduce((sum, a) => sum + (a.opportunityCount || 0), 0)} +

+
+
+
+
+ + +
+
+ + + + + + + + + + + + + + + {#if isLoading} + + + + {:else if accounts.length === 0} + + + + {:else} + {#each accounts as account (account.id)} + + + + + + + + + + + {/each} + {/if} + +
toggleSort('name')} + > +
+ + Account Name + {#if sortField === 'name'} + {#if sortOrder === 'asc'} + + {:else} + + {/if} + {/if} +
+
Actions
+
+
+

Loading accounts...

+
+
+
+ +
+

+ No accounts found +

+

+ Get started by creating your first account +

+
+ + + Create Account + +
+
+ + + +
+
+
+ + + {#if pagination.totalPages > 1} +
+
+ Showing {(pagination.page - 1) * pagination.limit + 1} to + {Math.min(pagination.page * pagination.limit, pagination.total)} + of + {pagination.total} accounts +
+
+ + + + {pagination.page} of {pagination.totalPages} + + + +
+
+ {/if} +
diff --git a/frontend/src/routes/(app)/accounts/[accountId]/+page.server.js b/frontend/src/routes/(app)/accounts/[accountId]/+page.server.js new file mode 100644 index 00000000..6d6de18a --- /dev/null +++ b/frontend/src/routes/(app)/accounts/[accountId]/+page.server.js @@ -0,0 +1,273 @@ +/** + * Account Detail Page - API Version + * + * Migrated from Prisma to Django REST API + * Django endpoint: GET /api/accounts/{id}/ + * + * To activate: + * mv +page.server.js +page.server.prisma.js + * mv +page.server.api.js +page.server.js + */ + +import { error, fail } from '@sveltejs/kit'; +import { apiRequest } from '$lib/api-helpers.js'; + +/** @type {import('./$types').PageServerLoad} */ +export async function load({ params, url, locals, cookies }) { + const org = locals.org; + + if (!org) { + throw error(401, 'Organization context required'); + } + + try { + const accountId = params.accountId; + + // If ?commentsOnly=1, return just comments as JSON (for live updates) + if (url.searchParams.get('commentsOnly') === '1') { + const response = await apiRequest(`/accounts/${accountId}/`, {}, { cookies, org }); + + const comments = (response.comments || []).map((comment) => ({ + id: comment.id, + body: comment.comment, + createdAt: comment.created_at, + author: comment.commented_by + ? { + id: comment.commented_by.id, + name: comment.commented_by.user_details?.email || comment.commented_by.email + } + : null + })); + + return new Response(JSON.stringify({ comments }), { + headers: { 'Content-Type': 'application/json' } + }); + } + + // Fetch full account details from Django + const response = await apiRequest(`/accounts/${accountId}/`, {}, { cookies, org }); + + if (!response.account_obj) { + throw error(404, 'Account not found'); + } + + const accountData = response.account_obj; + + // Transform account data + const account = { + id: accountData.id, + name: accountData.name, + email: accountData.email, + phone: accountData.phone, + website: accountData.website, + industry: accountData.industry, + description: accountData.description, + billingAddress: accountData.billing_address_line, + billingCity: accountData.billing_city, + billingState: accountData.billing_state, + billingPostcode: accountData.billing_postcode, + billingCountry: accountData.billing_country, + status: accountData.status, + isActive: accountData.status === 'open' || accountData.is_active, + createdAt: accountData.created_at, + updatedAt: accountData.updated_at, + closedAt: accountData.closed_at || null, + closureReason: accountData.closure_reason || null, + organizationId: accountData.org?.id || org.id, + ownerId: accountData.created_by?.id || null + }; + + // Transform contacts + const contacts = (response.contacts || []).map((contact) => ({ + id: contact.id, + firstName: contact.first_name, + lastName: contact.last_name, + email: contact.email, + phone: contact.phone, + title: contact.title, + isPrimary: contact.is_primary || false, + role: contact.role || null + })); + + // Transform opportunities + const opportunities = (response.opportunity_list || []).map((opp) => ({ + id: opp.id, + name: opp.name, + amount: opp.amount ? Number(opp.amount) : null, + stage: opp.stage, + probability: opp.probability, + closedOn: opp.closed_on + })); + + // Transform comments + const comments = (response.comments || []).map((comment) => ({ + id: comment.id, + body: comment.comment, + createdAt: comment.created_at, + author: comment.commented_by + ? { + id: comment.commented_by.id, + name: comment.commented_by.user_details?.email || comment.commented_by.email + } + : null + })); + + // Transform quotes/invoices + const quotes = (response.invoices || []).map((invoice) => ({ + id: invoice.id, + name: invoice.invoice_title || invoice.name, + total: invoice.total_amount ? Number(invoice.total_amount) : null, + status: invoice.status + })); + + // Transform tasks + const tasks = (response.tasks || []).map((task) => ({ + id: task.id, + title: task.title, + status: task.status, + priority: task.priority, + dueDate: task.due_date, + owner: + task.assigned_to && task.assigned_to.length > 0 + ? { + id: task.assigned_to[0].id, + name: task.assigned_to[0].user_details?.email || task.assigned_to[0].email + } + : null + })); + + // Transform cases + const cases = (response.cases || []).map((caseItem) => ({ + id: caseItem.id, + subject: caseItem.name, + status: caseItem.status, + priority: caseItem.priority, + closedOn: caseItem.closed_on + })); + + // Transform users + const users = (response.users || []).map((user) => ({ + id: user.id, + name: user.user_details?.email || user.email, + email: user.user_details?.email || user.email + })); + + return { + account, + contacts, + opportunities, + comments, + quotes, + tasks, + cases, + users, + meta: { + title: account.name, + description: `Account details for ${account.name}` + } + }; + } catch (err) { + console.error('Error loading account data:', err); + const errorMessage = err instanceof Error ? err.message : 'Error loading account data'; + const statusCode = + err && typeof err === 'object' && 'status' in err + ? typeof err.status === 'number' + ? err.status + : 500 + : 500; + throw error(statusCode, errorMessage); + } +} + +/** @type {import('./$types').Actions} */ +export const actions = { + closeAccount: async ({ request, locals, params, cookies }) => { + try { + const user = locals.user; + const org = locals.org; + const { accountId } = params; + const formData = await request.formData(); + const closureReason = formData.get('closureReason')?.toString(); + + if (!closureReason) { + return fail(400, { + success: false, + message: 'Please provide a reason for closing this account' + }); + } + + // Close account via API (Django may not have dedicated endpoint, use PATCH) + await apiRequest( + `/accounts/${accountId}/`, + { + method: 'PATCH', + body: { + status: 'close', + closure_reason: closureReason, + is_active: false + } + }, + { cookies, org } + ); + + return { success: true }; + } catch (err) { + console.error('Error closing account:', err); + return fail(500, { success: false, message: 'An unexpected error occurred' }); + } + }, + + reopenAccount: async ({ request, locals, params, cookies }) => { + try { + const user = locals.user; + const org = locals.org; + const { accountId } = params; + + // Reopen account via API + await apiRequest( + `/accounts/${accountId}/`, + { + method: 'PATCH', + body: { + status: 'open', + closure_reason: null, + is_active: true + } + }, + { cookies, org } + ); + + return { success: true }; + } catch (err) { + console.error('Error reopening account:', err); + return fail(500, { success: false, message: 'An unexpected error occurred' }); + } + }, + + comment: async ({ request, locals, params, cookies }) => { + try { + const org = locals.org; + const form = await request.formData(); + const body = form.get('body')?.toString().trim(); + + if (!body) { + return fail(400, { error: 'Comment cannot be empty.' }); + } + + // Add comment via API + await apiRequest( + `/accounts/comment/${params.accountId}/`, + { + method: 'POST', + body: { comment: body } + }, + { cookies, org } + ); + + return { success: true }; + } catch (err) { + console.error('Error adding comment:', err); + return fail(500, { error: 'Failed to add comment' }); + } + } +}; diff --git a/frontend/src/routes/(app)/accounts/[accountId]/+page.svelte b/frontend/src/routes/(app)/accounts/[accountId]/+page.svelte new file mode 100644 index 00000000..aa4fd680 --- /dev/null +++ b/frontend/src/routes/(app)/accounts/[accountId]/+page.svelte @@ -0,0 +1,1099 @@ + + +
+ +
+
+
+
+ + + Back to Accounts + +
+

{account.name}

+
+ + {account.isActive ? 'Active' : 'Inactive'} + + {#if account.type} + + {account.type} + + {/if} +
+
+
+ +
+ {#if account.closedAt} +
+ +
+ {:else} + + + Edit + + + {/if} +
+
+
+
+ +
+
+ +
+ +
+
+

Account Information

+
+
+
+
+
+ Name +

{account.name || 'N/A'}

+
+
+ Industry +

+ {account.industry || 'N/A'} +

+
+
+ Website + {#if account.website} + + + {account.website} + + + {:else} +

N/A

+ {/if} +
+
+ Phone + {#if account.phone} + + + {account.phone} + + {:else} +

N/A

+ {/if} +
+
+ Email + {#if account.email} + + + {account.email} + + {:else} +

N/A

+ {/if} +
+
+ +
+
+ Annual Revenue +

+ {account.annualRevenue ? formatCurrency(account.annualRevenue) : 'N/A'} +

+
+
+ Employees +

+ {account.numberOfEmployees ? account.numberOfEmployees.toLocaleString() : 'N/A'} +

+
+
+ Ownership +

+ {account.accountOwnership || 'N/A'} +

+
+
+ Rating +

+ {account.rating || 'N/A'} +

+
+
+ SIC Code +

+ {account.sicCode || 'N/A'} +

+
+
+
+ + {#if account.street || account.city || account.state || account.country} +
+ Address +
+ +
+ {account.street || ''}
+ {account.city || ''}{account.city && account.state ? ', ' : ''}{account.state || + ''} + {account.postalCode || ''}
+ {account.country || ''} +
+
+
+ {/if} + + {#if account.description} +
+ Description +

+ {account.description} +

+
+ {/if} + + {#if account.closedAt} +
+
+
+ +
+

+ This account was closed on {formatDate(account.closedAt)}. +

+

+ Reason: {account.closureReason || 'No reason provided'} +

+
+
+
+
+ {/if} + +
+
+ Created +

{formatDate(account.createdAt)}

+
+
+ Last Updated +

{formatDate(account.updatedAt)}

+
+
+
+
+ + +
+ +
+ +
+ + +
+ {#if activeTab === 'contacts'} + {#if contacts.length === 0} +
+ +

+ No contacts found for this account +

+ + + Add Contact + +
+ {:else} +
+ + + + + + + + + + + + + {#each contacts as contact (contact.id)} + + + + + + + + + {/each} + +
NameTitleRoleActions
+ + {contact.firstName} + {contact.lastName} + + {#if contact.isPrimary} + + Primary + + {/if} + {contact.title || 'N/A'}{contact.role || 'N/A'} + View +
+
+ {/if} + {/if} + + {#if activeTab === 'opportunities'} + {#if opportunities.length === 0} +
+ +

+ No opportunities found for this account +

+ + + Add Opportunity + +
+ {:else} +
+ + + + + + + + + + + + + {#each opportunities as opportunity (opportunity.id)} + + + + + + + + + {/each} + +
NameValueStageActions
+ + {opportunity.name} + + {formatCurrency(opportunity.amount)} + + {opportunity.stage || 'Unknown'} + + + View +
+
+ {/if} + {/if} + + {#if activeTab === 'tasks'} + {#if tasks.length === 0} +
+ +

+ No tasks found for this account +

+ + + Add Task + +
+ {:else} +
+ + + + + + + + + + + + + {#each tasks as task (task.id)} + + + + + + + + + {/each} + +
SubjectStatusPriorityActions
+ + {task.subject} + + + + {task.status} + + + + {task.priority} + + + View +
+
+ {/if} + {/if} + + {#if activeTab === 'cases'} + {#if cases.length === 0} +
+ +

+ No cases found for this account +

+ + + Open Case + +
+ {:else} +
+ + + + + + + + + + + + + {#each cases as caseItem (caseItem.id)} + + + + + + + + + {/each} + +
Case NumberSubjectStatusPriorityActions
+ + {caseItem.caseNumber} + + {caseItem.subject} + + {caseItem.status} + + + + {caseItem.priority} + + + View +
+
+ {/if} + {/if} + + {#if activeTab === 'notes'} +
+ +
+ + + {#if commentError} +

{commentError}

+ {/if} +
+ +
+
+ + + {#if comments.length === 0} +
+ +

+ No notes found for this account +

+
+ {:else} +
+ {#each comments as comment (comment.id)} +
+
+
+ {comment.author?.name || 'Unknown'} + + {formatDate(comment.createdAt)} + + {#if comment.isPrivate} + + Private + + {/if} +
+
+

+ {comment.body} +

+
+ {/each} +
+ {/if} +
+ {/if} +
+
+
+ + +
+ +
+
+

Overview

+
+
+
+
+

Contacts

+

{contacts.length}

+
+ +
+ +
+
+

Opportunities

+

+ {opportunities.length} +

+
+ +
+ +
+
+

Pipeline Value

+

+ {formatCurrency( + opportunities.reduce( + /** @param {number} sum @param {any} opp */ (sum, opp) => + sum + (opp.amount || 0), + 0 + ) + )} +

+
+ +
+ +
+
+

Open Cases

+

+ {cases.filter(/** @param {any} c */ (c) => c.status !== 'CLOSED').length} +

+
+ +
+
+
+ + + +
+
+
+ + + {#if showCloseModal} +
+
+
(showCloseModal = false)} + onkeydown={(e) => e.key === 'Escape' && (showCloseModal = false)} + >
+ +
+
+
+
+
+ +
+
+

+ Close Account +

+
+

+ You are about to close the account "{account.name}". This action will mark the + account as closed but will retain all account data for historical purposes. +

+ +
+ + + {#if closeError} +

{closeError}

+ {/if} +
+
+
+
+
+
+ + +
+
+
+
+
+ {/if} +
diff --git a/frontend/src/routes/(app)/accounts/[accountId]/edit/+page.server.js b/frontend/src/routes/(app)/accounts/[accountId]/edit/+page.server.js new file mode 100644 index 00000000..1a02efec --- /dev/null +++ b/frontend/src/routes/(app)/accounts/[accountId]/edit/+page.server.js @@ -0,0 +1,92 @@ +/** + * Account Edit Page - API Version + * + * Migrated from Prisma to Django REST API + * Django endpoint: PUT /api/accounts/{id}/ + * + * To activate: + * mv +page.server.js +page.server.prisma.js + * mv +page.server.api.js +page.server.js + */ + +import { fail, redirect, error } from '@sveltejs/kit'; +import { apiRequest } from '$lib/api-helpers.js'; + +/** @type {import('./$types').PageServerLoad} */ +export async function load({ params, locals, cookies }) { + const org = locals.org; + + if (!org) { + throw error(401, 'Organization context required'); + } + + try { + const response = await apiRequest(`/accounts/${params.accountId}/`, {}, { cookies, org }); + + if (!response.account_obj) { + throw error(404, 'Account not found'); + } + + const accountData = response.account_obj; + + // Transform to Prisma structure + const account = { + id: accountData.id, + name: accountData.name, + industry: accountData.industry, + type: accountData.account_type || accountData.type, + website: accountData.website, + phone: accountData.phone + }; + + return { account }; + } catch (err) { + console.error('Error loading account:', err); + throw error(500, `Failed to load account: ${err.message}`); + } +} + +/** @type {import('./$types').Actions} */ +export const actions = { + default: async ({ request, params, locals, cookies }) => { + const org = locals.org; + const form = await request.formData(); + const name = form.get('name')?.toString(); + const industry = form.get('industry')?.toString() || null; + const type = form.get('type')?.toString() || null; + const website = form.get('website')?.toString() || null; + const phone = form.get('phone')?.toString() || null; + + if (!name) { + return fail(400, { name, missing: true }); + } + + try { + // Transform to Django field names + const djangoData = { + name, + industry, + account_type: type, + website, + phone + }; + + // Update account via API + await apiRequest( + `/accounts/${params.accountId}/`, + { + method: 'PUT', + body: djangoData + }, + { cookies, org } + ); + + throw redirect(303, `/accounts/${params.accountId}`); + } catch (err) { + console.error('Error updating account:', err); + return fail(500, { + error: 'Failed to update account: ' + (err instanceof Error ? err.message : 'Unknown error') + }); + } + } +}; diff --git a/frontend/src/routes/(app)/accounts/[accountId]/edit/+page.svelte b/frontend/src/routes/(app)/accounts/[accountId]/edit/+page.svelte new file mode 100644 index 00000000..113ad1f7 --- /dev/null +++ b/frontend/src/routes/(app)/accounts/[accountId]/edit/+page.svelte @@ -0,0 +1,83 @@ + + +
+

Edit Account

+
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + Cancel +
+
+
diff --git a/frontend/src/routes/(app)/accounts/new/+page.server.js b/frontend/src/routes/(app)/accounts/new/+page.server.js new file mode 100644 index 00000000..7bee718d --- /dev/null +++ b/frontend/src/routes/(app)/accounts/new/+page.server.js @@ -0,0 +1,143 @@ +/** + * Account Create Page - Modern CRM Version + * + * Streamlined account creation based on Twenty CRM and Salesforce patterns. + * Django endpoint: POST /api/accounts/ + */ + +import { fail } from '@sveltejs/kit'; +import { apiRequest } from '$lib/api-helpers.js'; +import { validatePhoneNumber, formatPhoneForStorage } from '$lib/utils/phone.js'; +import { industries, countries } from '$lib/data/index.js'; + +/** @type {import('./$types').PageServerLoad} */ +export async function load({ locals, cookies }) { + const user = locals.user; + const org = locals.org; + + try { + // Fetch users and teams for assignment dropdowns + const [usersResponse, teamsResponse] = await Promise.all([ + apiRequest('/users/', {}, { cookies, org }), + apiRequest('/teams/', {}, { cookies, org }) + ]); + + // Extract active users + const activeUsersList = usersResponse.active_users?.active_users || []; + const users = activeUsersList.map((profile) => ({ + id: profile.id, + name: profile.user_details?.email?.split('@')[0] || 'Unknown', + email: profile.user_details?.email || '' + })); + + // Extract teams + const teams = (teamsResponse.teams || teamsResponse.results || []).map((team) => ({ + id: team.id, + name: team.name + })); + + return { + data: { + industries, + countries, + users, + teams + } + }; + } catch (err) { + console.error('Error loading account form data:', err); + return { + data: { + industries, + countries, + users: [], + teams: [] + } + }; + } +} + +/** @type {import('./$types').Actions} */ +export const actions = { + default: async ({ request, locals, cookies }) => { + const user = locals.user; + const org = locals.org; + + const formData = await request.formData(); + + // Extract and validate required fields + const name = formData.get('name')?.toString().trim(); + + if (!name) { + return fail(400, { error: 'Account name is required' }); + } + + // Validate phone number if provided + let formattedPhone = null; + const phone = formData.get('phone')?.toString(); + if (phone && phone.trim().length > 0) { + const phoneValidation = validatePhoneNumber(phone.trim()); + if (!phoneValidation.isValid) { + return fail(400, { error: phoneValidation.error || 'Please enter a valid phone number' }); + } + formattedPhone = formatPhoneForStorage(phone.trim()); + } + + // Build Django data object + const djangoData = { + // Core Account Information + name, + email: formData.get('email')?.toString().trim() || null, + phone: formattedPhone, + website: formData.get('website')?.toString().trim() || null, + + // Business Information + industry: formData.get('industry')?.toString() || null, + number_of_employees: formData.get('number_of_employees') + ? parseInt(formData.get('number_of_employees')?.toString() || '0') + : null, + annual_revenue: formData.get('annual_revenue') + ? parseFloat(formData.get('annual_revenue')?.toString() || '0') + : null, + + // Address + address_line: formData.get('address_line')?.toString().trim() || null, + city: formData.get('city')?.toString().trim() || null, + state: formData.get('state')?.toString().trim() || null, + postcode: formData.get('postcode')?.toString().trim() || null, + country: formData.get('country')?.toString() || null, + + // Assignment + assigned_to: formData.getAll('assigned_to').map((id) => id.toString()), + teams: formData.getAll('teams').map((id) => id.toString()), + + // Notes + description: formData.get('description')?.toString().trim() || null + }; + + try { + const response = await apiRequest( + '/accounts/', + { + method: 'POST', + body: djangoData + }, + { cookies, org } + ); + + return { + status: 'success', + message: 'Account created successfully', + account: { + id: response.id || response.account_obj?.id, + name: response.name || response.account_obj?.name + } + }; + } catch (err) { + console.error('Error creating account:', err); + return fail(500, { + error: 'Failed to create account: ' + (err instanceof Error ? err.message : 'Unknown error') + }); + } + } +}; diff --git a/frontend/src/routes/(app)/accounts/new/+page.svelte b/frontend/src/routes/(app)/accounts/new/+page.svelte new file mode 100644 index 00000000..592b490b --- /dev/null +++ b/frontend/src/routes/(app)/accounts/new/+page.svelte @@ -0,0 +1,706 @@ + + + +
+ + {#if showToast} +
+
+
+ {#if toastType === 'success'} + + {:else} + + {/if} +
+
+

+ {toastMessage} +

+
+ +
+
+ {/if} + +
+ +
+
+
+
+

+ + Create New Account +

+

+ Add a new company or organization to your CRM +

+
+
+
+
+ + + {#if form?.error} +
+
+ + Error: + {form.error} +
+
+ {/if} + + +
{ + if (!validateForm()) { + cancel(); + return; + } + + isSubmitting = true; + + return async ({ result }) => { + isSubmitting = false; + + if (result.type === 'success') { + showNotification('Account created successfully!', 'success'); + resetForm(); + setTimeout(() => goto('/accounts'), 1500); + } else if (result.type === 'failure') { + const errorMessage = + result.data && + typeof result.data === 'object' && + 'error' in result.data && + typeof result.data.error === 'string' + ? result.data.error + : 'Failed to create account'; + showNotification(errorMessage, 'error'); + } + }; + }} + class="space-y-6" + > + +
+
+

+ + Account Information +

+
+
+
+ +
+ + + {#if errors.name} +

{errors.name}

+ {/if} +
+ + +
+ + +
+ + +
+ + + {#if errors.phone} +

{errors.phone}

+ {/if} +
+ + +
+ + + {#if errors.website} +

{errors.website}

+ {/if} +
+
+
+
+ + +
+
+

+ + Business Information +

+
+
+
+ +
+ + +
+ + +
+ + + {#if errors.number_of_employees} +

+ {errors.number_of_employees} +

+ {/if} +
+ + +
+ + + {#if errors.annual_revenue} +

+ {errors.annual_revenue} +

+ {/if} +
+
+
+
+ + +
+
+

+ + Assignment +

+
+
+
+ +
+ + +

+ Hold Ctrl/Cmd to select multiple +

+
+ + +
+ + +

+ Hold Ctrl/Cmd to select multiple +

+
+
+
+
+ + +
+
+

+ + Address +

+
+
+
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+
+
+
+ + +
+
+

+ + Notes +

+
+
+ +
+
+ + +
+
+
+ + +
+
+
+
+
+
diff --git a/frontend/src/routes/(app)/cases/+page.server.js b/frontend/src/routes/(app)/cases/+page.server.js new file mode 100644 index 00000000..ad01e503 --- /dev/null +++ b/frontend/src/routes/(app)/cases/+page.server.js @@ -0,0 +1,272 @@ +/** + * Cases List Page - API Version + * + * Migrated from Prisma to Django REST API + * Django endpoint: GET /api/cases/ + * + * To activate: + * mv +page.server.js +page.server.prisma.js + * mv +page.server.api.js +page.server.js + */ + +import { fail, redirect, error } from '@sveltejs/kit'; +import { apiRequest, buildQueryParams } from '$lib/api-helpers.js'; + +/** @type {import('./$types').PageServerLoad} */ +export async function load({ url, locals, cookies }) { + const org = locals.org; + const user = locals.user; + + if (!org) { + throw error(401, 'Organization context required'); + } + + try { + // Get filters from query params + const status = url.searchParams.get('status') || undefined; + const assigned = url.searchParams.get('assigned') || undefined; + const account = url.searchParams.get('account') || undefined; + + // Build query parameters + const queryParams = buildQueryParams({ + page: 1, + limit: 1000, // Django doesn't paginate list by default + sort: 'created_at', + order: 'desc' + }); + + // Add filters + if (status) queryParams.append('status', status); + if (account) queryParams.append('account', account); + // Django doesn't have direct owner name filter, we'd need to filter by assigned_to ID + + // Fetch cases, users, and accounts in parallel + const [casesResponse, usersResponse, accountsResponse] = await Promise.all([ + apiRequest(`/cases/?${queryParams.toString()}`, {}, { cookies, org }), + apiRequest('/users/', {}, { cookies, org }), + apiRequest('/accounts/', {}, { cookies, org }) + ]); + + // Extract cases from response + let cases = []; + if (casesResponse.cases) { + cases = casesResponse.cases; + } else if (Array.isArray(casesResponse)) { + cases = casesResponse; + } else if (casesResponse.results) { + cases = casesResponse.results; + } + + // Transform Django cases to Prisma structure + const transformedCases = cases.map((caseItem) => ({ + id: caseItem.id, + subject: caseItem.name, + description: caseItem.description, + status: caseItem.status, + priority: caseItem.priority, + caseType: caseItem.case_type, + closedOn: caseItem.closed_on, + createdAt: caseItem.created_at, + updatedAt: caseItem.updated_at, + + // Owner (first assigned user) + owner: + caseItem.assigned_to && caseItem.assigned_to.length > 0 + ? { + id: caseItem.assigned_to[0].id, + name: caseItem.assigned_to[0].user_details?.email || caseItem.assigned_to[0].email + } + : null, + + // Account + account: caseItem.account + ? { + id: caseItem.account.id, + name: caseItem.account.name + } + : null, + + // Comments (Django might not return by default) + comments: (caseItem.comments || []).map((comment) => ({ + id: comment.id, + body: comment.comment, + createdAt: comment.created_at, + author: comment.commented_by + ? { + id: comment.commented_by.id, + name: comment.commented_by.user_details?.email || comment.commented_by.email + } + : null + })) + })); + + // Transform users list + // Django UsersListView returns { active_users: { active_users: [...] }, ... } + const activeUsersList = usersResponse.active_users?.active_users || []; + const allUsers = activeUsersList.map((user) => ({ + id: user.id, + name: user.user_details?.email || user.email + })); + + // Transform accounts list + let allAccounts = []; + if (accountsResponse.active_accounts?.open_accounts) { + allAccounts = accountsResponse.active_accounts.open_accounts; + } else if (accountsResponse.results) { + allAccounts = accountsResponse.results; + } else if (Array.isArray(accountsResponse)) { + allAccounts = accountsResponse; + } + + const transformedAccounts = allAccounts.map((account) => ({ + id: account.id, + name: account.name + })); + + // Status options from Django + const statusOptions = ['New', 'Assigned', 'In Progress', 'Closed']; + + return { + cases: transformedCases, + allUsers, + allAccounts: transformedAccounts, + statusOptions + }; + } catch (err) { + console.error('Error loading cases from API:', err); + throw error(500, `Failed to load cases: ${err.message}`); + } +} + +/** @type {import('./$types').Actions} */ +export const actions = { + create: async ({ request, locals, cookies }) => { + try { + const form = await request.formData(); + const name = form.get('title')?.toString().trim(); + const description = form.get('description')?.toString().trim(); + const accountId = form.get('accountId')?.toString(); + const dueDateValue = form.get('dueDate'); + const closedOn = dueDateValue ? dueDateValue.toString() : null; + const priority = form.get('priority')?.toString() || 'Normal'; + const ownerId = form.get('assignedId')?.toString(); + + if (!name || !accountId || !ownerId) { + return fail(400, { error: 'Missing required fields.' }); + } + + // Create case via API + const caseData = { + name, + description, + account: accountId, + closed_on: closedOn, + priority, + assigned_to: [ownerId], + status: 'New' + }; + + const newCase = await apiRequest( + '/cases/', + { + method: 'POST', + body: caseData + }, + { cookies, org: locals.org } + ); + + throw redirect(303, `/cases/${newCase.id}`); + } catch (err) { + console.error('Error creating case:', err); + return fail(500, { error: 'Failed to create case' }); + } + }, + + update: async ({ request, locals, cookies }) => { + try { + const form = await request.formData(); + const name = form.get('title')?.toString().trim(); + const description = form.get('description')?.toString().trim(); + const accountId = form.get('accountId')?.toString(); + const dueDateValue = form.get('dueDate'); + const closedOn = dueDateValue ? dueDateValue.toString() : null; + const priority = form.get('priority')?.toString() || 'Normal'; + const ownerId = form.get('assignedId')?.toString(); + const caseId = form.get('caseId')?.toString(); + + if (!name || !accountId || !ownerId || !caseId) { + return fail(400, { error: 'Missing required fields.' }); + } + + // Update case via API + const caseData = { + name, + description, + account: accountId, + closed_on: closedOn, + priority, + assigned_to: [ownerId] + }; + + await apiRequest( + `/cases/${caseId}/`, + { + method: 'PUT', + body: caseData + }, + { cookies, org: locals.org } + ); + + throw redirect(303, `/cases/${caseId}`); + } catch (err) { + console.error('Error updating case:', err); + return fail(500, { error: 'Failed to update case' }); + } + }, + + delete: async ({ request, locals, cookies }) => { + try { + const form = await request.formData(); + const caseId = form.get('caseId')?.toString(); + + if (!caseId) { + return fail(400, { error: 'Case ID is required.' }); + } + + // Delete via API + await apiRequest(`/cases/${caseId}/`, { method: 'DELETE' }, { cookies, org: locals.org }); + + throw redirect(303, '/cases'); + } catch (err) { + console.error('Error deleting case:', err); + return fail(500, { error: 'Failed to delete case' }); + } + }, + + comment: async ({ request, locals, cookies }) => { + try { + const form = await request.formData(); + const body = form.get('body')?.toString().trim(); + const caseId = form.get('caseId')?.toString(); + + if (!body || !caseId) { + return fail(400, { error: 'Comment and case ID are required.' }); + } + + // Create comment via API + await apiRequest( + `/cases/comment/${caseId}/`, + { + method: 'POST', + body: { comment: body } + }, + { cookies, org: locals.org } + ); + + return { success: true }; + } catch (err) { + console.error('Error creating comment:', err); + return fail(500, { error: 'Failed to create comment' }); + } + } +}; diff --git a/frontend/src/routes/(app)/cases/+page.svelte b/frontend/src/routes/(app)/cases/+page.svelte new file mode 100644 index 00000000..56035bf9 --- /dev/null +++ b/frontend/src/routes/(app)/cases/+page.svelte @@ -0,0 +1,381 @@ + + +
+
+ +
+
+
+ +
+
+

Cases

+

+ Manage customer support cases and issues +

+
+
+ + + New Case + +
+ + +
+
+ +

Filters

+ {#if hasActiveFilters} + + {[statusFilter, assignedFilter, accountFilter].filter(Boolean).length} active + + {/if} +
+ +
+
+ + +
+ +
+ + +
+ +
+ + +
+ + {#if hasActiveFilters} +
+ +
+ {/if} +
+
+ + +
+ {#if filteredCases.length} + + + + +
+ {#each filteredCases as c} +
+
+ + {c.subject} + + + {c.status.replace('_', ' ')} + +
+ + {#if c.description} +

+ {c.description} +

+ {/if} + +
+
+ Account: + {c.account?.name || '-'} +
+
+ Priority: + + {c.priority} + +
+
+ Assigned: + {c.owner?.name || 'Unassigned'} +
+
+ Due: + + {c.dueDate ? new Date(c.dueDate).toLocaleDateString() : '-'} + +
+
+ + +
+ {/each} +
+ {:else} +
+
+ +
+

No cases found

+

+ {hasActiveFilters + ? 'No cases match your current filters.' + : 'Get started by creating your first case.'} +

+ {#if hasActiveFilters} + + {:else} + + + Create Case + + {/if} +
+ {/if} +
+
+
diff --git a/frontend/src/routes/(app)/cases/[caseId]/+page.server.js b/frontend/src/routes/(app)/cases/[caseId]/+page.server.js new file mode 100644 index 00000000..966b3a1d --- /dev/null +++ b/frontend/src/routes/(app)/cases/[caseId]/+page.server.js @@ -0,0 +1,113 @@ +/** + * Case Detail Page - API Version + * + * Migrated from Prisma to Django REST API + * Django endpoint: GET /api/cases/{id}/ + * + * To activate: + * mv +page.server.js +page.server.prisma.js + * mv +page.server.api.js +page.server.js + */ + +import { error, fail } from '@sveltejs/kit'; +import { apiRequest } from '$lib/api-helpers.js'; + +/** @type {import('./$types').PageServerLoad} */ +export async function load({ params, locals, cookies }) { + const org = locals.org; + const caseId = params.caseId; + + if (!org) { + throw error(401, 'Organization context required'); + } + + try { + // Fetch case details from Django + const response = await apiRequest(`/cases/${caseId}/`, {}, { cookies, org }); + + if (!response.cases_obj) { + throw error(404, 'Case not found'); + } + + const caseData = response.cases_obj; + + // Transform case data + const caseItem = { + id: caseData.id, + subject: caseData.name, + description: caseData.description, + status: caseData.status, + priority: caseData.priority, + caseType: caseData.case_type, + closedOn: caseData.closed_on, + createdAt: caseData.created_at, + updatedAt: caseData.updated_at, + + // Owner + owner: + caseData.assigned_to && caseData.assigned_to.length > 0 + ? { + id: caseData.assigned_to[0].id, + name: caseData.assigned_to[0].user_details?.email || caseData.assigned_to[0].email + } + : null, + + // Account + account: caseData.account + ? { + id: caseData.account.id, + name: caseData.account.name + } + : null, + + // Comments + comments: (response.comments || []).map((comment) => ({ + id: comment.id, + body: comment.comment, + createdAt: comment.created_at, + author: comment.commented_by + ? { + id: comment.commented_by.id, + name: comment.commented_by.user_details?.email || comment.commented_by.email + } + : null + })) + }; + + return { caseItem }; + } catch (err) { + console.error('Error loading case data:', err); + throw error(500, `Failed to load case: ${err.message}`); + } +} + +/** @type {import('./$types').Actions} */ +export const actions = { + comment: async ({ request, params, locals, cookies }) => { + const org = locals.org; + + try { + const form = await request.formData(); + const body = form.get('body')?.toString().trim(); + + if (!body) { + return fail(400, { error: 'Comment cannot be empty.' }); + } + + // Add comment via API + await apiRequest( + `/cases/comment/${params.caseId}/`, + { + method: 'POST', + body: { comment: body } + }, + { cookies, org } + ); + + return { success: true }; + } catch (err) { + console.error('Error adding comment:', err); + return fail(500, { error: 'Failed to add comment' }); + } + } +}; diff --git a/frontend/src/routes/(app)/cases/[caseId]/+page.svelte b/frontend/src/routes/(app)/cases/[caseId]/+page.svelte new file mode 100644 index 00000000..82cc8621 --- /dev/null +++ b/frontend/src/routes/(app)/cases/[caseId]/+page.svelte @@ -0,0 +1,335 @@ + + +
+
+ +
+
+
+
+ +
+
+

+ {data.caseItem.subject} +

+

Case #{data.caseItem.caseNumber}

+
+
+ +
+
+ +
+ +
+ +
+

Case Information

+ + {#if data.caseItem.description} +
+

Description

+

+ {data.caseItem.description} +

+
+ {/if} + +
+
+
+ +
+

Account

+

+ {data.caseItem.account?.name || 'Not assigned'} +

+
+
+ +
+ +
+

Assigned to

+

+ {data.caseItem.owner?.name || 'Unassigned'} +

+
+
+
+ +
+ {#if data.caseItem.dueDate} +
+ +
+

Due Date

+

+ {new Date(data.caseItem.dueDate).toLocaleDateString()} +

+
+
+ {/if} + +
+ +
+

Created

+

+ {new Date(data.caseItem.createdAt).toLocaleDateString()} +

+
+
+
+
+
+ + +
+
+ +

Comments

+ ({data.caseItem.comments?.length || 0}) +
+ + +
+ {#if data.caseItem.comments && data.caseItem.comments.length} + {#each data.caseItem.comments as c} +
+
+
+ + {c.author?.name?.[0]?.toUpperCase() || 'U'} + +
+
+
+

+ {c.author?.name || 'Unknown User'} +

+ • +

+ {new Date(c.createdAt).toLocaleDateString()} +

+
+

{c.body}

+
+
+
+ {/each} + {:else} +
+ +

No comments yet. Be the first to add one!

+
+ {/if} +
+ + +
+
+ + +
+ {#if errorMsg} +

{errorMsg}

+ {/if} +
+
+
+ + +
+ +
+

+ Status & Priority +

+ +
+
+

Status

+
+ + + {data.caseItem.status.replace('_', ' ')} + +
+
+ +
+

Priority

+ + {data.caseItem.priority} + +
+
+
+ + +
+

+ Activity Timeline +

+ +
+
+
+
+

Case Created

+

+ {new Date(data.caseItem.createdAt).toLocaleDateString()} +

+
+
+ + {#if data.caseItem.updatedAt && data.caseItem.updatedAt !== data.caseItem.createdAt} +
+
+
+

Last Updated

+

+ {new Date(data.caseItem.updatedAt).toLocaleDateString()} +

+
+
+ {/if} + + {#if data.caseItem.closedAt} +
+
+
+

Case Closed

+

+ {new Date(data.caseItem.closedAt).toLocaleDateString()} +

+
+
+ {/if} +
+
+
+
+
+
diff --git a/frontend/src/routes/(app)/cases/[caseId]/edit/+page.server.js b/frontend/src/routes/(app)/cases/[caseId]/edit/+page.server.js new file mode 100644 index 00000000..94c69aa1 --- /dev/null +++ b/frontend/src/routes/(app)/cases/[caseId]/edit/+page.server.js @@ -0,0 +1,229 @@ +/** + * Case Edit Page - API Version + * + * Migrated from Prisma to Django REST API + * Django endpoint: PUT/PATCH /api/cases/{id}/ + * + * To activate: + * mv +page.server.js +page.server.prisma.js + * mv +page.server.api.js +page.server.js + */ + +import { fail, redirect, error } from '@sveltejs/kit'; +import { apiRequest } from '$lib/api-helpers.js'; + +/** @type {import('./$types').PageServerLoad} */ +export async function load({ params, locals, cookies }) { + const org = locals.org; + + if (!org) { + throw error(401, 'Organization context required'); + } + + try { + // Fetch case, users, and accounts in parallel + const [caseResponse, usersResponse, accountsResponse] = await Promise.all([ + apiRequest(`/cases/${params.caseId}/`, {}, { cookies, org }), + apiRequest('/users/', {}, { cookies, org }), + apiRequest('/accounts/', {}, { cookies, org }) + ]); + + if (!caseResponse.cases_obj) { + throw error(404, 'Case not found'); + } + + const caseData = caseResponse.cases_obj; + + // Transform case to Prisma structure + const caseItem = { + id: caseData.id, + subject: caseData.name, + description: caseData.description, + accountId: caseData.account?.id || null, + dueDate: caseData.closed_on || null, + priority: caseData.priority || 'Normal', + ownerId: caseData.assigned_to?.[0]?.id || caseData.assigned_to?.[0] || null, + status: caseData.status || 'New', + closedAt: caseData.closed_on || null, + caseType: caseData.case_type || null, + // Include related data + owner: caseData.assigned_to_details?.[0] + ? { + id: caseData.assigned_to_details[0].id, + name: + caseData.assigned_to_details[0].user_details?.email || + caseData.assigned_to_details[0].email + } + : null, + account: caseData.account + ? { + id: caseData.account.id, + name: caseData.account.name + } + : null + }; + + // Transform users + // Django UsersListView returns { active_users: { active_users: [...] }, ... } + const activeUsersList = usersResponse.active_users?.active_users || []; + const users = activeUsersList.map((user) => ({ + id: user.id, + name: user.user_details?.email || user.email + })); + + // Transform accounts + let accounts = []; + if (accountsResponse.results) { + accounts = accountsResponse.results; + } else if (accountsResponse.active_accounts?.open_accounts) { + accounts = accountsResponse.active_accounts.open_accounts; + } + + const transformedAccounts = accounts.map((acc) => ({ + id: acc.id, + name: acc.name + })); + + return { + caseItem, + users, + accounts: transformedAccounts + }; + } catch (err) { + console.error('Error loading case for edit:', err); + throw error(500, `Failed to load case: ${err.message}`); + } +} + +/** @type {import('./$types').Actions} */ +export const actions = { + update: async ({ request, params, locals, cookies }) => { + const org = locals.org; + const form = await request.formData(); + + // Extract form fields + const subject = form.get('title')?.toString().trim(); + const description = form.get('description')?.toString().trim(); + const accountId = form.get('accountId')?.toString(); + const dueDateRaw = form.get('dueDate'); + const dueDate = dueDateRaw ? dueDateRaw.toString() : null; + const priority = form.get('priority')?.toString() || 'Normal'; + const ownerId = form.get('assignedId')?.toString(); + const status = form.get('status')?.toString() || 'New'; + + // Validation + const errors = {}; + + if (!subject || subject.length === 0) { + errors.subject = 'Subject is required'; + } + + if (!accountId) { + errors.accountId = 'Account is required'; + } + + if (!ownerId) { + errors.ownerId = 'Owner is required'; + } + + if (Object.keys(errors).length > 0) { + return fail(400, { + errors, + values: { subject, description, accountId, dueDate, priority, ownerId } + }); + } + + try { + // Transform to Django field names + const djangoData = { + name: subject, + description: description || null, + account: accountId, + closed_on: dueDate, + priority: priority, + status: status, + assigned_to: [ownerId] + }; + + // Update case via API + await apiRequest( + `/cases/${params.caseId}/`, + { + method: 'PUT', + body: djangoData + }, + { cookies, org } + ); + + return { success: true }; + } catch (err) { + console.error('Error updating case:', err); + return fail(500, { + error: 'Failed to update case: ' + (err instanceof Error ? err.message : 'Unknown error'), + values: { subject, description, accountId, dueDate, priority, ownerId } + }); + } + }, + + close: async ({ params, locals, cookies }) => { + const org = locals.org; + + try { + // Close case via API + await apiRequest( + `/cases/${params.caseId}/`, + { + method: 'PATCH', + body: { + status: 'Closed', + closed_on: new Date().toISOString() + } + }, + { cookies, org } + ); + + throw redirect(303, `/cases/${params.caseId}`); + } catch (err) { + // Check if this is a redirect + if (err?.status === 303) { + throw err; + } + + console.error('Error closing case:', err); + return fail(500, { + error: 'Failed to close case: ' + (err instanceof Error ? err.message : 'Unknown error') + }); + } + }, + + reopen: async ({ params, locals, cookies }) => { + const org = locals.org; + + try { + // Reopen case via API + await apiRequest( + `/cases/${params.caseId}/`, + { + method: 'PATCH', + body: { + status: 'New', + closed_on: null + } + }, + { cookies, org } + ); + + throw redirect(303, `/cases/${params.caseId}`); + } catch (err) { + // Check if this is a redirect + if (err?.status === 303) { + throw err; + } + + console.error('Error reopening case:', err); + return fail(500, { + error: 'Failed to reopen case: ' + (err instanceof Error ? err.message : 'Unknown error') + }); + } + } +}; diff --git a/frontend/src/routes/(app)/cases/[caseId]/edit/+page.svelte b/frontend/src/routes/(app)/cases/[caseId]/edit/+page.svelte new file mode 100644 index 00000000..7e7af414 --- /dev/null +++ b/frontend/src/routes/(app)/cases/[caseId]/edit/+page.svelte @@ -0,0 +1,426 @@ + + +
+
+ +
+
+
+

Edit Case

+

+ Update case details and assignment +

+
+
+ +
+
+
+ + +
+
{ + loading = true; + errorMsg = ''; + successMsg = ''; + return async ({ result, update }) => { + loading = false; + if (result.type === 'failure') { + errorMsg = (result.data as any)?.error || 'An error occurred'; + } else if (result.type === 'success') { + successMsg = 'Case updated successfully!'; + // Update the data and reset form values from fresh data + await update(); + // Re-initialize form values from updated data + title = data.caseItem.subject; + description = data.caseItem.description || ''; + accountId = data.caseItem.accountId; + if (data.caseItem.dueDate) { + const dueDateValue: any = data.caseItem.dueDate; + if (typeof dueDateValue === 'string') { + dueDate = dueDateValue.split('T')[0]; + } else if (dueDateValue instanceof Date) { + dueDate = dueDateValue.toISOString().split('T')[0]; + } + } else { + dueDate = ''; + } + assignedId = data.caseItem.ownerId; + priority = data.caseItem.priority || 'Normal'; + } else { + await update(); + } + }; + }} + > + + +
+ +
+ + +
+ + +
+ + +
+ + +
+ + +
+ + +
+
+ + +
+ +
+ + +
+
+ + +
+ + +
+ + + {#if errorMsg} +
+ +
{errorMsg}
+
+ {/if} + + {#if successMsg} +
+
+
+
+
{successMsg}
+
+ {/if} +
+ + +
+ + + {#if data.caseItem.status === 'CLOSED'} + + {:else} + + {/if} +
+
+
+ + + + + + + + + {#if showCloseConfirmation} +
+
+
+
+
+ +
+
+

Close Case

+

+ Are you sure you want to close this case? +

+
+
+

+ This action will mark the case as closed. You can still view the case details, but it + will no longer be active. +

+
+ + +
+
+
+
+ {/if} + + + {#if showReopenConfirmation} +
+
+
+
+
+ +
+
+

Reopen Case

+

+ Are you sure you want to reopen this case? +

+
+
+

+ This action will mark the case as active again and allow you to continue working on + it. +

+
+ + +
+
+
+
+ {/if} +
+
diff --git a/frontend/src/routes/(app)/cases/new/+page.server.js b/frontend/src/routes/(app)/cases/new/+page.server.js new file mode 100644 index 00000000..7d6a3d6b --- /dev/null +++ b/frontend/src/routes/(app)/cases/new/+page.server.js @@ -0,0 +1,157 @@ +/** + * Case Create Page - API Version + * + * Migrated from Prisma to Django REST API + * Django endpoint: POST /api/cases/ + * + * To activate: + * mv +page.server.js +page.server.prisma.js + * mv +page.server.api.js +page.server.js + */ + +import { fail, redirect } from '@sveltejs/kit'; +import { apiRequest } from '$lib/api-helpers.js'; + +/** @type {import('./$types').PageServerLoad} */ +export async function load({ locals, url, cookies }) { + const org = locals.org; + const preSelectedAccountId = url.searchParams.get('accountId'); + + try { + // Fetch accounts and users in parallel + const [accountsResponse, usersResponse] = await Promise.all([ + apiRequest('/accounts/', {}, { cookies, org }), + apiRequest('/users/', {}, { cookies, org }) + ]); + + // Transform accounts + let accounts = []; + if (accountsResponse.results) { + accounts = accountsResponse.results; + } else if (accountsResponse.active_accounts?.open_accounts) { + accounts = accountsResponse.active_accounts.open_accounts; + } + + const transformedAccounts = accounts.map((acc) => ({ + id: acc.id, + name: acc.name + })); + + // Transform users + // Django UsersListView returns { active_users: { active_users: [...] }, ... } + const activeUsersList = usersResponse.active_users?.active_users || []; + const users = activeUsersList.map((user) => ({ + user: { + id: user.id, + name: user.user_details?.email || user.email + } + })); + + return { + accounts: transformedAccounts, + users, + preSelectedAccountId + }; + } catch (err) { + console.error('Error loading case create page:', err); + return { + accounts: [], + users: [], + preSelectedAccountId + }; + } +} + +/** @type {import('./$types').Actions} */ +export const actions = { + create: async ({ request, locals, cookies }) => { + const org = locals.org; + const form = await request.formData(); + + const subject = form.get('title')?.toString().trim(); + const description = form.get('description')?.toString().trim(); + const accountId = form.get('accountId')?.toString(); + const dueDateValue = form.get('dueDate'); + const dueDate = dueDateValue ? dueDateValue.toString() : null; + const priority = form.get('priority')?.toString() || 'Normal'; + const ownerId = form.get('assignedId')?.toString(); + + // Validation + const errors = {}; + + if (!subject || subject.length === 0) { + errors.subject = 'Subject is required'; + } + + if (!accountId) { + errors.accountId = 'Account is required'; + } + + if (!ownerId) { + errors.ownerId = 'Owner is required'; + } + + if (Object.keys(errors).length > 0) { + return fail(400, { + errors, + values: { + subject, + description, + accountId, + dueDate, + priority, + ownerId + } + }); + } + + try { + // Transform to Django field names + const djangoData = { + name: subject, + description: description || null, + account: accountId, + closed_on: dueDate, + priority: priority, + assigned_to: [ownerId], + status: 'New' + }; + + // Create case via API + const response = await apiRequest( + '/cases/', + { + method: 'POST', + body: djangoData + }, + { cookies, org } + ); + + const caseId = response.id || response.cases_obj?.id; + + if (caseId) { + throw redirect(303, `/cases/${caseId}`); + } else { + throw redirect(303, '/cases'); + } + } catch (err) { + // Check if this is a redirect + if (err?.status === 303) { + throw err; + } + + console.error('Error creating case:', err); + return fail(500, { + error: 'Failed to create case: ' + (err instanceof Error ? err.message : 'Unknown error'), + values: { + subject, + description, + accountId, + dueDate, + priority, + ownerId + } + }); + } + } +}; diff --git a/frontend/src/routes/(app)/cases/new/+page.svelte b/frontend/src/routes/(app)/cases/new/+page.svelte new file mode 100644 index 00000000..5c3922a2 --- /dev/null +++ b/frontend/src/routes/(app)/cases/new/+page.svelte @@ -0,0 +1,195 @@ + + +
+
+ +
+
+
+ +
+

Create New Case

+
+

+ Create and assign a new support case to track customer issues and requests. +

+
+ + +
+
+ +
+
+

+ Case Details +

+

Basic information about the case

+
+ + +
+ + +
+ + +
+ + +
+ + +
+ + +
+
+ + +
+
+

+ Assignment & Priority +

+

Set ownership and urgency level

+
+ +
+ +
+ + +
+ + +
+ + +
+
+ + +
+ + +
+
+ + + {#if errorMsg} +
+

{errorMsg}

+
+ {/if} + + +
+ + + Cancel + +
+
+
+
+
diff --git a/frontend/src/routes/(app)/contacts/+page.server.js b/frontend/src/routes/(app)/contacts/+page.server.js new file mode 100644 index 00000000..34817c9b --- /dev/null +++ b/frontend/src/routes/(app)/contacts/+page.server.js @@ -0,0 +1,164 @@ +/** + * Contacts List Page - API Version + * + * Migrated from Prisma to Django REST API + * Django endpoint: GET /api/contacts/ + * + * To activate: + * mv +page.server.js +page.server.prisma.js + * mv +page.server.api.js +page.server.js + */ + +import { error, fail } from '@sveltejs/kit'; +import { apiRequest, buildQueryParams } from '$lib/api-helpers.js'; + +/** @type {import('./$types').PageServerLoad} */ +export async function load({ url, locals, cookies }) { + const org = locals.org; + + if (!org) { + throw error(401, 'Organization context required'); + } + + try { + const page = parseInt(url.searchParams.get('page') || '1'); + const limit = parseInt(url.searchParams.get('limit') || '20'); + const search = url.searchParams.get('search') || ''; + const ownerId = url.searchParams.get('owner') || ''; + + // Build query parameters for Django + const queryParams = buildQueryParams({ + page, + limit, + sort: 'created_at', + order: 'desc' + }); + + // Add search filter (Django typically uses 'search' param) + if (search) { + queryParams.append('search', search); + } + + // Add owner filter (Django uses assigned_to) + if (ownerId) { + queryParams.append('assigned_to', ownerId); + } + + // Fetch contacts and owners in parallel + const [contactsResponse, ownersResponse] = await Promise.all([ + apiRequest(`/contacts/?${queryParams.toString()}`, {}, { cookies, org }), + // Get users for owner filter dropdown + apiRequest('/users/', {}, { cookies, org }) + ]); + + // Handle Django response format + let contacts = []; + let totalCount = 0; + + if (contactsResponse.results) { + // Standard Django pagination + contacts = contactsResponse.results; + totalCount = contactsResponse.count || 0; + } else if (Array.isArray(contactsResponse)) { + // Direct array response + contacts = contactsResponse; + totalCount = contacts.length; + } + + // Transform Django contacts to match Prisma structure + const transformedContacts = contacts.map((contact) => ({ + id: contact.id, + firstName: contact.first_name, + lastName: contact.last_name, + email: contact.email, + phone: contact.phone, + title: contact.title, + department: contact.department, + description: contact.description, + createdAt: contact.created_at, + updatedAt: contact.updated_at, + + // Owner info - Django returns assigned_to array + owner: + contact.assigned_to && contact.assigned_to.length > 0 + ? { + id: contact.assigned_to[0].id, + name: contact.assigned_to[0].user_details?.email || 'Unknown', + email: contact.assigned_to[0].user_details?.email + } + : contact.created_by + ? { + id: contact.created_by.id, + name: contact.created_by.email, + email: contact.created_by.email + } + : null, + + // Related accounts + relatedAccounts: + contact.accounts?.map((account) => ({ + account: { + id: account.id, + name: account.name + } + })) || [], + + // Counts - Django may not provide _count, use 0 as default + _count: { + tasks: contact.task_count || 0, + events: contact.event_count || 0, + opportunities: contact.opportunity_count || 0, + cases: contact.case_count || 0 + } + })); + + // Transform owners list + // Django UsersListView returns { active_users: { active_users: [...] }, inactive_users: { ... } } + const activeUsers = ownersResponse.active_users?.active_users || []; + const owners = activeUsers.map((user) => ({ + id: user.id, + name: user.user_details?.email || user.email, + email: user.user_details?.email || user.email + })); + + return { + contacts: transformedContacts, + totalCount, + currentPage: page, + totalPages: Math.ceil(totalCount / limit), + limit, + search, + ownerId, + owners + }; + } catch (err) { + console.error('Error loading contacts from API:', err); + throw error(500, `Failed to load contacts: ${err.message}`); + } +} + +/** @type {import('./$types').Actions} */ +export const actions = { + delete: async ({ request, locals, cookies }) => { + try { + const data = await request.formData(); + const contactId = data.get('contactId')?.toString(); + + if (!contactId) { + return fail(400, { error: 'Contact ID is required' }); + } + + // Delete via API + await apiRequest( + `/contacts/${contactId}/`, + { method: 'DELETE' }, + { cookies, org: locals.org } + ); + + return { success: true }; + } catch (err) { + console.error('Error deleting contact:', err); + return fail(500, { error: 'Failed to delete contact' }); + } + } +}; diff --git a/frontend/src/routes/(app)/contacts/+page.svelte b/frontend/src/routes/(app)/contacts/+page.svelte new file mode 100644 index 00000000..76a3fad5 --- /dev/null +++ b/frontend/src/routes/(app)/contacts/+page.svelte @@ -0,0 +1,520 @@ + + + + Contacts - BottleCRM + + +
+ +
+
+
+
+
+ +
+
+

Contacts

+

+ {data.totalCount} total contacts +

+
+
+
+ + + + Add Contact + +
+
+ + +
+
+ + e.key === 'Enter' && handleSearch()} + class="w-full rounded-lg border border-gray-300 bg-white py-3 pr-4 pl-10 text-gray-900 placeholder-gray-500 focus:border-transparent focus:ring-2 focus:ring-blue-500 focus:outline-none dark:border-gray-600 dark:bg-gray-700 dark:text-white dark:placeholder-gray-400" + /> + {#if searchQuery} + + {/if} +
+
+ + + {#if showFilters} +
+
+
+ + +
+
+
+ + +
+
+ {/if} +
+
+ + +
+ {#if data.contacts.length === 0} +
+ +

No contacts found

+

+ {data.search + ? 'Try adjusting your search criteria.' + : 'Get started by creating your first contact.'} +

+ {#if !data.search} + + + Add Contact + + {/if} +
+ {:else} + + + + +
+ {#each data.contacts as contact} +
+
+ + +
+ +
+ {#if contact.email} +
+ + {contact.email} +
+ {/if} + {#if contact.phone} +
+ + {formatPhone(contact.phone)} +
+ {/if} + {#if contact.relatedAccounts.length > 0} +
+ + {contact.relatedAccounts[0].account.name} +
+ {/if} +
+ +
+
+ {#if contact._count.tasks > 0} + + {contact._count.tasks} tasks + + {/if} + {#if contact._count.opportunities > 0} + + {contact._count.opportunities} opps + + {/if} +
+
+ + +
+
+
+ {/each} +
+ + + {#if data.totalPages > 1} +
+
+ Showing {(data.currentPage - 1) * data.limit + 1} to {Math.min( + data.currentPage * data.limit, + data.totalCount + )} of {data.totalCount} contacts +
+
+ + + {#each Array.from({ length: Math.min(5, data.totalPages) }, (_, i) => { + const start = Math.max(1, data.currentPage - 2); + return start + i; + }) as pageNum} + {#if pageNum <= data.totalPages} + + {/if} + {/each} + + +
+
+ {/if} + {/if} +
+
diff --git a/frontend/src/routes/(app)/contacts/[contactId]/+page.server.js b/frontend/src/routes/(app)/contacts/[contactId]/+page.server.js new file mode 100644 index 00000000..387fae5f --- /dev/null +++ b/frontend/src/routes/(app)/contacts/[contactId]/+page.server.js @@ -0,0 +1,161 @@ +/** + * Contact Detail Page - API Version + * + * Migrated from Prisma to Django REST API + * Django endpoint: GET /api/contacts/{id}/ + * + * To activate: + * mv +page.server.js +page.server.prisma.js + * mv +page.server.api.js +page.server.js + */ + +import { error } from '@sveltejs/kit'; +import { apiRequest } from '$lib/api-helpers.js'; + +/** @type {import('./$types').PageServerLoad} */ +export async function load({ params, locals, cookies }) { + const org = locals.org; + + if (!org) { + throw error(401, 'Organization context required'); + } + + try { + // Fetch contact details from Django + const response = await apiRequest(`/contacts/${params.contactId}/`, {}, { cookies, org }); + + if (!response.contact_obj) { + return { + status: 404, + error: new Error('Contact not found') + }; + } + + const contactData = response.contact_obj; + + // Transform contact data + const contact = { + id: contactData.id, + firstName: contactData.first_name, + lastName: contactData.last_name, + email: contactData.email, + phone: contactData.phone, + title: contactData.title, + department: contactData.department, + description: contactData.description, + createdAt: contactData.created_at, + updatedAt: contactData.updated_at, + organizationId: contactData.org?.id || org.id, + ownerId: contactData.created_by?.id || null, + + // Address fields (from Django address or direct fields) + street: contactData.address?.street || contactData.street || null, + city: contactData.address?.city || contactData.city || null, + state: contactData.address?.state || contactData.state || null, + country: contactData.address?.country || contactData.country || null, + postalCode: contactData.address?.postcode || contactData.postal_code || null, + + // Owner info + owner: + contactData.assigned_to && contactData.assigned_to.length > 0 + ? { + id: contactData.assigned_to[0].id, + name: + contactData.assigned_to[0].user_details?.email || contactData.assigned_to[0].email, + email: + contactData.assigned_to[0].user_details?.email || contactData.assigned_to[0].email + } + : contactData.created_by + ? { + id: contactData.created_by.id, + name: contactData.created_by.email, + email: contactData.created_by.email + } + : null + }; + + // Transform account relationships + const accountRelationships = (contactData.accounts || response.accounts_list || []).map( + (account) => ({ + account: { + id: account.id, + name: account.name, + industry: account.industry, + email: account.email + }, + isPrimary: account.is_primary || false, + role: account.role || null, + startDate: account.start_date || null + }) + ); + + // Transform opportunities + const opportunities = (response.opportunity_list || []).map((opp) => ({ + id: opp.id, + name: opp.name, + amount: opp.amount ? Number(opp.amount) : null, + stage: opp.stage, + probability: opp.probability, + closedOn: opp.closed_on, + createdAt: opp.created_at, + account: opp.account + ? { + id: opp.account.id, + name: opp.account.name + } + : null + })); + + // Transform tasks + const tasks = (response.tasks || []) + .map((task) => ({ + id: task.id, + title: task.title, + status: task.status, + priority: task.priority, + dueDate: task.due_date, + createdAt: task.created_at, + owner: + task.assigned_to && task.assigned_to.length > 0 + ? { + id: task.assigned_to[0].id, + name: task.assigned_to[0].user_details?.email || task.assigned_to[0].email + } + : null + })) + .slice(0, 5); + + // Transform events (Django may return these) + const events = (response.events || []) + .map((event) => ({ + id: event.id, + name: event.name, + startDate: event.start_date, + startTime: event.start_time, + endDate: event.end_date, + status: event.status, + createdAt: event.created_at, + owner: + event.assigned_to && event.assigned_to.length > 0 + ? { + id: event.assigned_to[0].id, + name: event.assigned_to[0].user_details?.email || event.assigned_to[0].email + } + : null + })) + .slice(0, 5); + + return { + contact: { + ...contact, + accountRelationships, + opportunities, + tasks, + events + } + }; + } catch (err) { + console.error('Error loading contact data:', err); + throw error(500, `Failed to load contact: ${err.message}`); + } +} diff --git a/frontend/src/routes/(app)/contacts/[contactId]/+page.svelte b/frontend/src/routes/(app)/contacts/[contactId]/+page.svelte new file mode 100644 index 00000000..f9350489 --- /dev/null +++ b/frontend/src/routes/(app)/contacts/[contactId]/+page.svelte @@ -0,0 +1,473 @@ + + +
+ +
+
+
+
+ {#if primaryAccountRel} + + + Back to {primaryAccountRel.account.name} + + {:else} + + + Back to Contacts + + {/if} +
+
+ {contact.firstName?.[0]}{contact.lastName?.[0]} +
+
+

+ {contact.firstName} + {contact.lastName} +

+

{contact.title || 'Contact'}

+
+ {#if primaryAccountRel?.isPrimary} + + + Primary + + {/if} + {#if hasMultipleAccounts} + + + {contact.accountRelationships.length} Accounts + + {/if} +
+
+ +
+
+
+ +
+
+ +
+ +
+

+ + Contact Information +

+
+
+
+ Email + {#if contact.email} + + + {contact.email} + + {:else} +

N/A

+ {/if} +
+
+ Phone + {#if contact.phone} + + + {contact.phone} + + {:else} +

N/A

+ {/if} +
+
+ Department +

{contact.department || 'N/A'}

+
+
+
+
+ Title +

{contact.title || 'N/A'}

+
+
+ Owner +

{contact.owner?.name || 'N/A'}

+
+
+ Created +

+ + {formatDate(contact.createdAt)} +

+
+
+
+ {#if contact.description} +
+ Description +

{contact.description}

+
+ {/if} +
+ + + {#if contact.accountRelationships && contact.accountRelationships.length > 0} +
+

+ + Account Relationships + ({contact.accountRelationships.length}) +

+
+ {#each contact.accountRelationships as relationship} +
+
+
+ + + {relationship.account.name} + + {#if relationship.isPrimary} + + + Primary + + {/if} +
+
+ {#if relationship.role} + + + {relationship.role} + + {/if} + + + Since {formatDate(relationship.startDate)} + +
+ {#if relationship.description} +

+ {relationship.description} +

+ {/if} +
+
+ + {relationship.account.type || 'Account'} + +
+
+ {/each} +
+
+ {/if} + + + {#if contact.street || contact.city || contact.state || contact.country} +
+

+ + Address +

+
+ {#if contact.street}

{contact.street}

{/if} +

+ {contact.city || ''}{contact.city && contact.state ? ', ' : ''}{contact.state || ''} + {contact.postalCode || ''} +

+ {#if contact.country}

{contact.country}

{/if} +
+
+ {/if} + + + {#if contact.opportunities && contact.opportunities.length > 0} +
+
+

+ + Opportunities +

+ + View all + + +
+
+ {#each contact.opportunities as opp} +
+
+ + {opp.name} + +

{opp.account?.name}

+
+
+

+ + {formatCurrency(opp.amount || 0)} +

+ + {opp.stage.replace('_', ' ')} + +
+
+ {/each} +
+
+ {/if} +
+ + +
+ + {#if contact.tasks && contact.tasks.length > 0} +
+
+

+ + Recent Tasks +

+ View all +
+
+ {#each contact.tasks as task} +
+ {#if task.status === 'Completed'} + + {:else} + + {/if} +
+

+ {task.subject} +

+
+ + {task.priority} + + {#if task.dueDate} + + + {formatDate(task.dueDate)} + + {/if} +
+
+
+ {/each} +
+
+ {/if} + + + {#if contact.events && contact.events.length > 0} +
+
+

+ + Recent Events +

+ View all +
+
+ {#each contact.events as event} +
+

{event.subject}

+

+ + {formatDateTime(event.startDate)} +

+ {#if event.location} +

+ + {event.location} +

+ {/if} +
+ {/each} +
+
+ {/if} +
+
+
+
diff --git a/frontend/src/routes/(app)/contacts/[contactId]/edit/+page.server.js b/frontend/src/routes/(app)/contacts/[contactId]/edit/+page.server.js new file mode 100644 index 00000000..af6ac1a0 --- /dev/null +++ b/frontend/src/routes/(app)/contacts/[contactId]/edit/+page.server.js @@ -0,0 +1,191 @@ +/** + * Contact Edit Page - API Version + * + * Migrated from Prisma to Django REST API + * Django endpoint: PUT/PATCH /api/contacts/{id}/ + * + * To activate: + * mv +page.server.js +page.server.prisma.js + * mv +page.server.api.js +page.server.js + */ + +import { fail, error } from '@sveltejs/kit'; +import { apiRequest } from '$lib/api-helpers.js'; +import { validatePhoneNumber, formatPhoneForStorage } from '$lib/utils/phone.js'; + +/** @type {import('./$types').PageServerLoad} */ +export async function load({ params, locals, cookies }) { + const org = locals.org; + + if (!org) { + throw error(401, 'Organization context required'); + } + + try { + const response = await apiRequest(`/contacts/${params.contactId}/`, {}, { cookies, org }); + + if (!response.contact_obj) { + throw error(404, 'Contact not found'); + } + + const contactData = response.contact_obj; + + // Transform to Prisma structure + const contact = { + id: contactData.id, + firstName: contactData.first_name, + lastName: contactData.last_name, + email: contactData.email, + phone: contactData.phone, + title: contactData.title, + department: contactData.department, + street: contactData.address?.address_line || null, + city: contactData.address?.city || null, + state: contactData.address?.state || null, + postalCode: contactData.address?.postcode || null, + country: contactData.address?.country || null, + description: contactData.description + }; + + // Note: Account relationship handling + // Django may return account info differently + // This might require additional API call or different endpoint + const account = contactData.account + ? { + id: contactData.account.id, + name: contactData.account.name + } + : null; + + return { + contact, + account, + isPrimary: contactData.is_primary || false, + role: contactData.role || '' + }; + } catch (err) { + console.error('Error loading contact for edit:', err); + throw error(500, `Failed to load contact: ${err.message}`); + } +} + +/** @type {import('./$types').Actions} */ +export const actions = { + default: async ({ request, params, locals, cookies }) => { + const org = locals.org; + const formData = await request.formData(); + + // Extract form fields + const firstName = formData.get('firstName')?.toString().trim(); + const lastName = formData.get('lastName')?.toString().trim(); + const email = formData.get('email')?.toString().trim() || null; + const phone = formData.get('phone')?.toString().trim() || null; + const title = formData.get('title')?.toString().trim() || null; + const department = formData.get('department')?.toString().trim() || null; + const street = formData.get('street')?.toString().trim() || null; + const city = formData.get('city')?.toString().trim() || null; + const state = formData.get('state')?.toString().trim() || null; + const postalCode = formData.get('postalCode')?.toString().trim() || null; + const country = formData.get('country')?.toString().trim() || null; + const description = formData.get('description')?.toString().trim() || null; + + // Validation + const errors = {}; + + if (!firstName || firstName.length === 0) { + errors.firstName = 'First name is required'; + } + + if (!lastName || lastName.length === 0) { + errors.lastName = 'Last name is required'; + } + + // Validate email format if provided + if (email && email.length > 0 && !/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(email)) { + errors.email = 'Please enter a valid email address'; + } + + // Validate phone number if provided + let formattedPhone = null; + if (phone && phone.length > 0) { + const phoneValidation = validatePhoneNumber(phone); + if (!phoneValidation.isValid) { + errors.phone = phoneValidation.error || 'Please enter a valid phone number'; + } else { + formattedPhone = formatPhoneForStorage(phone); + } + } + + if (Object.keys(errors).length > 0) { + return fail(400, { + errors, + values: { + firstName, + lastName, + email, + phone, + title, + department, + street, + city, + state, + postalCode, + country, + description + } + }); + } + + try { + // Transform to Django field names + const djangoData = { + first_name: firstName, + last_name: lastName, + email: email, + phone: formattedPhone, + title: title, + department: department, + address: { + address_line: street, + city: city, + state: state, + postcode: postalCode, + country: country + }, + description: description + }; + + // Update contact via API + await apiRequest( + `/contacts/${params.contactId}/`, + { + method: 'PUT', + body: djangoData + }, + { cookies, org } + ); + + return { success: true }; + } catch (err) { + console.error('Error updating contact:', err); + return fail(500, { + error: + 'Failed to update contact: ' + (err instanceof Error ? err.message : 'Unknown error'), + values: { + firstName, + lastName, + email, + phone, + title, + department, + street, + city, + state, + postalCode, + country, + description + } + }); + } + } +}; diff --git a/frontend/src/routes/(app)/contacts/[contactId]/edit/+page.svelte b/frontend/src/routes/(app)/contacts/[contactId]/edit/+page.svelte new file mode 100644 index 00000000..254d78e2 --- /dev/null +++ b/frontend/src/routes/(app)/contacts/[contactId]/edit/+page.svelte @@ -0,0 +1,461 @@ + + +
+
+ +
+
+ +
+

Edit Contact

+

+ Update contact information and details +

+
+
+
+ + +
+ +
+
+
+
+ +
+

Basic Information

+
+
+
+
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+
+
+ + +
+
+
+
+ +
+

Contact Information

+
+
+
+
+
+ +
+
+ +
+ +
+
+
+ +
+
+ +
+ +
+ {#if phoneError} +

{phoneError}

+ {/if} +
+
+
+
+ + +
+
+
+
+ +
+

Address Information

+
+
+
+
+
+ + +
+
+
+ + +
+
+ + +
+
+ + +
+
+
+ + +
+
+
+
+ + + {#if account} +
+
+
+
+ +
+

+ Account Relationship +

+
+
+
+
+
+
Account
+
{account.name}
+
+ {#if role} +
+
Role
+
{role}
+
+ {/if} + {#if isPrimary} +
+
+ + Primary Contact +
+
+ {/if} +
+
+
+ {/if} + + +
+
+
+
+ +
+

+ Additional Information +

+
+
+
+
+ + +
+
+
+ + + {#if errorMsg} +
+
+
+ +
+
+

{errorMsg}

+
+
+
+ {/if} + + +
+ + +
+
+
+
diff --git a/frontend/src/routes/(app)/contacts/new/+page.server.js b/frontend/src/routes/(app)/contacts/new/+page.server.js new file mode 100644 index 00000000..25dd3e4b --- /dev/null +++ b/frontend/src/routes/(app)/contacts/new/+page.server.js @@ -0,0 +1,146 @@ +/** + * Contact Create Page - Modern CRM Version + * + * Streamlined contact creation based on Twenty CRM and Salesforce patterns. + * Django endpoint: POST /api/contacts/ + */ + +import { fail } from '@sveltejs/kit'; +import { apiRequest } from '$lib/api-helpers.js'; +import { validatePhoneNumber, formatPhoneForStorage } from '$lib/utils/phone.js'; +import { countries } from '$lib/data/index.js'; + +/** @type {import('./$types').PageServerLoad} */ +export async function load({ locals, cookies }) { + const user = locals.user; + const org = locals.org; + + try { + // Fetch users and teams for assignment dropdowns + const [usersResponse, teamsResponse] = await Promise.all([ + apiRequest('/users/', {}, { cookies, org }), + apiRequest('/teams/', {}, { cookies, org }) + ]); + + // Extract active users + const activeUsersList = usersResponse.active_users?.active_users || []; + const users = activeUsersList.map((profile) => ({ + id: profile.id, + name: profile.user_details?.email?.split('@')[0] || 'Unknown', + email: profile.user_details?.email || '' + })); + + // Extract teams + const teams = (teamsResponse.teams || teamsResponse.results || []).map((team) => ({ + id: team.id, + name: team.name + })); + + return { + data: { + countries, + users, + teams + } + }; + } catch (err) { + console.error('Error loading contact form data:', err); + return { + data: { + countries, + users: [], + teams: [] + } + }; + } +} + +/** @type {import('./$types').Actions} */ +export const actions = { + default: async ({ request, locals, cookies }) => { + const user = locals.user; + const org = locals.org; + + const formData = await request.formData(); + + // Extract and validate required fields + const firstName = formData.get('first_name')?.toString().trim(); + const lastName = formData.get('last_name')?.toString().trim(); + + if (!firstName) { + return fail(400, { error: 'First name is required' }); + } + + if (!lastName) { + return fail(400, { error: 'Last name is required' }); + } + + // Validate phone number if provided + let formattedPhone = null; + const phone = formData.get('phone')?.toString(); + if (phone && phone.trim().length > 0) { + const phoneValidation = validatePhoneNumber(phone.trim()); + if (!phoneValidation.isValid) { + return fail(400, { error: phoneValidation.error || 'Please enter a valid phone number' }); + } + formattedPhone = formatPhoneForStorage(phone.trim()); + } + + // Build Django data object + const djangoData = { + // Core Contact Information + first_name: firstName, + last_name: lastName, + email: formData.get('email')?.toString().trim() || null, + phone: formattedPhone, + + // Professional Information + organization: formData.get('organization')?.toString().trim() || null, + title: formData.get('title')?.toString().trim() || null, + department: formData.get('department')?.toString().trim() || null, + + // Communication Preferences + do_not_call: formData.get('do_not_call') === 'on', + linked_in_url: formData.get('linked_in_url')?.toString().trim() || null, + + // Address + address_line: formData.get('address_line')?.toString().trim() || null, + city: formData.get('city')?.toString().trim() || null, + state: formData.get('state')?.toString().trim() || null, + postcode: formData.get('postcode')?.toString().trim() || null, + country: formData.get('country')?.toString() || null, + + // Assignment + assigned_to: formData.getAll('assigned_to').map((id) => id.toString()), + teams: formData.getAll('teams').map((id) => id.toString()), + + // Notes + description: formData.get('description')?.toString().trim() || null + }; + + try { + const response = await apiRequest( + '/contacts/', + { + method: 'POST', + body: djangoData + }, + { cookies, org } + ); + + return { + status: 'success', + message: 'Contact created successfully', + contact: { + id: response.id || response.contact_obj?.id, + name: `${firstName} ${lastName}` + } + }; + } catch (err) { + console.error('Error creating contact:', err); + return fail(500, { + error: 'Failed to create contact: ' + (err instanceof Error ? err.message : 'Unknown error') + }); + } + } +}; diff --git a/frontend/src/routes/(app)/contacts/new/+page.svelte b/frontend/src/routes/(app)/contacts/new/+page.svelte new file mode 100644 index 00000000..8759dc72 --- /dev/null +++ b/frontend/src/routes/(app)/contacts/new/+page.svelte @@ -0,0 +1,567 @@ + + + + New Contact - CRM + + +
+ +
+
+
+
+ + + Back to Contacts + +
+

New Contact

+

Add a new contact to your CRM

+
+
+
+
+
+ + +
+ + {#if form?.error} +
+

{form.error}

+
+ {/if} + + + {#if form?.status === 'success'} +
+

{form.message}

+
+ {/if} + +
+ +
+
+
+ +

Contact Information

+
+
+
+ +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + + {#if phoneError} +

{phoneError}

+ {/if} +
+
+ + +
+ + +
+
+
+ + +
+
+
+ +

+ Professional Information +

+
+
+
+
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+ + +
+
+
+ + +
+
+
+ +

Assignment

+
+
+
+
+
+ + +

+ Hold Ctrl/Cmd to select multiple +

+
+
+ + +

+ Hold Ctrl/Cmd to select multiple +

+
+
+
+
+ + +
+
+
+ +

Address

+
+
+
+
+ + +
+
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+
+
+ + +
+
+
+ +

Notes

+
+
+
+
+ + +
+
+
+ + +
+ + Cancel + + +
+
+
+
diff --git a/frontend/src/routes/(app)/invoices/+page.server.js b/frontend/src/routes/(app)/invoices/+page.server.js new file mode 100644 index 00000000..5d21d142 --- /dev/null +++ b/frontend/src/routes/(app)/invoices/+page.server.js @@ -0,0 +1,138 @@ +/** + * Invoices List Page - API Version + * + * This is the migrated version that uses Django REST API instead of Prisma. + * Once tested and working, activate by: + * 1. mv +page.server.js +page.server.prisma.js + * 2. mv +page.server.api.js +page.server.js + * + * Migration completed: 2025-11-19 + * Django endpoint: GET /api/invoices/ + * + * NOTE: Django's Invoice model with InvoiceLineItem maps to SvelteKit's Quote with QuoteLineItem + */ + +import { error, redirect } from '@sveltejs/kit'; +import { apiRequest } from '$lib/api-helpers.js'; + +/** @type {import('./$types').PageServerLoad} */ +export async function load({ locals, cookies }) { + if (!locals.user || !locals.org) { + throw redirect(302, '/login'); + } + + try { + // Get invoices from Django API + // Django returns: { results: [...], count: N } + const response = await apiRequest('/invoices/', {}, { cookies, org: locals.org }); + + // Transform Django Invoice to match SvelteKit Quote structure + const invoices = (response.results || []).map((invoice) => transformInvoiceToQuote(invoice)); + + return { + invoices + }; + } catch (err) { + console.error('Failed to load invoices:', err); + throw error(500, `Failed to load invoices: ${err.message}`); + } +} + +/** + * Transform Django Invoice to SvelteKit Quote format + * + * Django structure: + * - invoice_title, invoice_number, status, due_date, total_amount + * - line_items: [{ product, quantity, unit_price, total }] + * - accounts: [{ id, name }] + * + * SvelteKit structure: + * - name (from invoice_title), quoteNumber, status, expirationDate (from due_date), grandTotal + * - lineItems: [{ product, quantity, unitPrice, totalPrice }] + * - account: { id, name } + * + * @param {Object} invoice - Django invoice object + * @returns {Object} SvelteKit-compatible quote object + */ +function transformInvoiceToQuote(invoice) { + return { + id: invoice.id, + quoteNumber: invoice.invoice_number || `INV-${invoice.id.substring(0, 8)}`, + name: invoice.invoice_title || invoice.name || 'Untitled Invoice', + status: mapInvoiceStatusToQuoteStatus(invoice.status), + description: invoice.details || null, + expirationDate: invoice.due_date ? new Date(invoice.due_date) : null, + + // Amounts - Django uses total_amount, amount_due, amount_paid + // SvelteKit uses subtotal, discountAmount, taxAmount, grandTotal + subtotal: invoice.total_amount || '0.00', + discountAmount: '0.00', // Not in Django Invoice model + taxAmount: invoice.tax || '0.00', + grandTotal: invoice.total_amount || '0.00', + + // Billing address - Django has Address model, SvelteKit has inline fields + billingStreet: invoice.from_address?.street || null, + billingCity: invoice.from_address?.city || null, + billingState: invoice.from_address?.state || null, + billingPostalCode: invoice.from_address?.postcode || null, + billingCountry: invoice.from_address?.country || null, + + // Shipping address + shippingStreet: invoice.to_address?.street || null, + shippingCity: invoice.to_address?.city || null, + shippingState: invoice.to_address?.state || null, + shippingPostalCode: invoice.to_address?.postcode || null, + shippingCountry: invoice.to_address?.country || null, + + // Timestamps + createdAt: new Date(invoice.created_at), + updatedAt: new Date(invoice.created_at), // Django doesn't have updated_at on Invoice + + // Relationships + account: invoice.accounts?.[0] + ? { + id: invoice.accounts[0].id, + name: invoice.accounts[0].name + } + : null, + + // Line items transformation + lineItems: + invoice.line_items?.map((item) => ({ + id: item.id, + quantity: parseFloat(item.quantity) || 1, + listPrice: item.unit_price || '0.00', + unitPrice: item.unit_price || '0.00', + discount: '0.00', // Not in Django InvoiceLineItem + totalPrice: item.total || '0.00', + description: item.description || null, + product: item.product + ? { + id: item.product.id, + name: item.product_name || item.product.name + } + : null + })) || [] + }; +} + +/** + * Map Django Invoice status to SvelteKit Quote status + * + * Django: Draft, Sent, Paid, Pending, Cancelled + * SvelteKit: DRAFT, NEEDS_REVIEW, IN_REVIEW, APPROVED, REJECTED, PRESENTED, ACCEPTED + * + * @param {string} djangoStatus - Django invoice status + * @returns {string} SvelteKit quote status + */ +function mapInvoiceStatusToQuoteStatus(djangoStatus) { + const statusMap = { + Draft: 'DRAFT', + Sent: 'PRESENTED', + Paid: 'ACCEPTED', + Pending: 'IN_REVIEW', + Cancelled: 'REJECTED' + }; + + return statusMap[djangoStatus] || 'DRAFT'; +} diff --git a/frontend/src/routes/(app)/invoices/+page.svelte b/frontend/src/routes/(app)/invoices/+page.svelte new file mode 100644 index 00000000..856946d7 --- /dev/null +++ b/frontend/src/routes/(app)/invoices/+page.svelte @@ -0,0 +1,190 @@ + + + +
+
+
+

Invoices

+ + New Invoice +
+ + +
+ +
+ + + + + + +
+ + +
+ + + + + + +
+ + +
+ + + + + + +
+
+ + +
+ {#each data.invoices as invoice} +
+
+
+ {invoice.status.toLowerCase()} + Due: {invoice.expirationDate + ? new Date(invoice.expirationDate).toLocaleDateString() + : 'N/A'} +
+
+

{invoice.quoteNumber}

+

{invoice.account.name}

+
+ {#each invoice.lineItems as item} +
+ {item.description || item.product?.name} + {formatCurrency(Number(item.totalPrice))} +
+ {/each} +
+
+
+
+
+ {formatCurrency(Number(invoice.grandTotal))} +
+
+ View + Edit +
+
+ +
+
+ {/each} + + + {#if data.invoices.length === 0} +
+
📄
+

No invoices yet

+

Create your first invoice to get started

+ + Create Invoice + +
+ {/if} +
+
+
diff --git a/frontend/src/routes/(app)/invoices/[invoiceId]/+page.server.js b/frontend/src/routes/(app)/invoices/[invoiceId]/+page.server.js new file mode 100644 index 00000000..612ba168 --- /dev/null +++ b/frontend/src/routes/(app)/invoices/[invoiceId]/+page.server.js @@ -0,0 +1,153 @@ +/** + * Invoice Detail Page - API Version + * + * This is the migrated version that uses Django REST API instead of Prisma. + * Once tested and working, activate by: + * 1. mv +page.server.js +page.server.prisma.js + * 2. mv +page.server.api.js +page.server.js + * + * Migration completed: 2025-11-19 + * Django endpoint: GET /api/invoices/{id}/ + * + * NOTE: Django's Invoice model with InvoiceLineItem maps to SvelteKit's Quote with QuoteLineItem + */ + +import { error, redirect } from '@sveltejs/kit'; +import { apiRequest } from '$lib/api-helpers.js'; + +/** @type {import('./$types').PageServerLoad} */ +export async function load({ params, locals, cookies }) { + if (!locals.user || !locals.org) { + throw redirect(302, '/login'); + } + + try { + // Get invoice detail from Django API + const invoice = await apiRequest( + `/invoices/${params.invoiceId}/`, + {}, + { cookies, org: locals.org } + ); + + if (!invoice) { + throw error(404, 'Invoice not found'); + } + + // Transform to SvelteKit Quote format + const transformedInvoice = transformInvoiceToQuote(invoice); + + return { + invoice: transformedInvoice + }; + } catch (err) { + if (err.message?.includes('404') || err.message?.includes('not found')) { + throw error(404, 'Invoice not found'); + } + console.error('Failed to load invoice:', err); + throw error(500, `Failed to load invoice: ${err.message}`); + } +} + +/** + * Transform Django Invoice to SvelteKit Quote format + * + * @param {Object} invoice - Django invoice object + * @returns {Object} SvelteKit-compatible quote object + */ +function transformInvoiceToQuote(invoice) { + return { + id: invoice.id, + quoteNumber: invoice.invoice_number || `INV-${invoice.id.substring(0, 8)}`, + name: invoice.invoice_title || invoice.name || 'Untitled Invoice', + status: mapInvoiceStatusToQuoteStatus(invoice.status), + description: invoice.details || null, + expirationDate: invoice.due_date ? new Date(invoice.due_date) : null, + + // Amounts + subtotal: invoice.total_amount || '0.00', + discountAmount: '0.00', + taxAmount: invoice.tax || '0.00', + grandTotal: invoice.total_amount || '0.00', + + // Billing address - Django has Address model + billingStreet: invoice.from_address?.street || null, + billingCity: invoice.from_address?.city || null, + billingState: invoice.from_address?.state || null, + billingPostalCode: invoice.from_address?.postcode || null, + billingCountry: invoice.from_address?.country || null, + + // Shipping address + shippingStreet: invoice.to_address?.street || null, + shippingCity: invoice.to_address?.city || null, + shippingState: invoice.to_address?.state || null, + shippingPostalCode: invoice.to_address?.postcode || null, + shippingCountry: invoice.to_address?.country || null, + + // Timestamps + createdAt: new Date(invoice.created_at), + updatedAt: new Date(invoice.created_at), + + // Account relationship + account: invoice.accounts?.[0] + ? { + id: invoice.accounts[0].id, + name: invoice.accounts[0].name, + // Address fields might be in the Account object + street: invoice.accounts[0].billing_address?.street || null, + city: invoice.accounts[0].billing_address?.city || null, + state: invoice.accounts[0].billing_address?.state || null, + postalCode: invoice.accounts[0].billing_address?.postcode || null, + country: invoice.accounts[0].billing_address?.country || null + } + : null, + + // Contact - Django doesn't have direct contact on Invoice + // It's linked through Account + contact: null, // TODO: May need to fetch separately if needed + + // Line items + lineItems: + invoice.line_items?.map((item) => ({ + id: item.id, + quantity: parseFloat(item.quantity) || 1, + listPrice: item.unit_price || '0.00', + unitPrice: item.unit_price || '0.00', + discount: '0.00', + totalPrice: item.total || '0.00', + description: item.description || null, + product: item.product + ? { + id: item.product.id, + name: item.product_name || item.product.name, + code: item.product.sku || null + } + : null + })) || [], + + // Prepared by - Django has created_by + preparedBy: invoice.created_by + ? { + name: invoice.created_by.username || invoice.created_by.email, + email: invoice.created_by.email + } + : null + }; +} + +/** + * Map Django Invoice status to SvelteKit Quote status + * + * @param {string} djangoStatus - Django invoice status + * @returns {string} SvelteKit quote status + */ +function mapInvoiceStatusToQuoteStatus(djangoStatus) { + const statusMap = { + Draft: 'DRAFT', + Sent: 'PRESENTED', + Paid: 'ACCEPTED', + Pending: 'IN_REVIEW', + Cancelled: 'REJECTED' + }; + + return statusMap[djangoStatus] || 'DRAFT'; +} diff --git a/frontend/src/routes/(app)/invoices/[invoiceId]/+page.svelte b/frontend/src/routes/(app)/invoices/[invoiceId]/+page.svelte new file mode 100644 index 00000000..d56c398b --- /dev/null +++ b/frontend/src/routes/(app)/invoices/[invoiceId]/+page.svelte @@ -0,0 +1,185 @@ + + + +
+
+
+
+

Invoice

+
{invoice.quoteNumber}
+
+
+
Prepared by:
+
{invoice.preparedBy.name}
+
{invoice.preparedBy.email}
+
+
+ +
+
+
From:
+
{invoice.account.name}
+
+ {#if invoice.account.street} + {invoice.account.street}
+ {/if} + {#if invoice.account.city} + {invoice.account.city}{#if invoice.account.state}, {invoice.account.state}{/if} + {invoice.account.postalCode}
+ {/if} + {#if invoice.account.country} + {invoice.account.country} + {/if} +
+
+
+
To:
+
+ {#if invoice.contact} + {invoice.contact.firstName} {invoice.contact.lastName} + {:else} + {invoice.account.name} + {/if} +
+
+ {#if invoice.contact && invoice.contact.email} + {invoice.contact.email} + {/if} +
+
+
+
+ Status: + + {invoice.status.toLowerCase()} + +
+
+ Created:{new Date(invoice.createdAt).toLocaleDateString()} +
+
+ Due Date:{invoice.expirationDate + ? new Date(invoice.expirationDate).toLocaleDateString() + : 'N/A'} +
+
+
+ +
+ + + + + + + + + + + {#each invoice.lineItems as item} + + + + + + + {/each} + + + + + + + + + + + +
DescriptionQuantityRateTotal
{item.description || item.product?.name || 'N/A'}{item.quantity}{formatCurrency(Number(item.unitPrice))}{formatCurrency(Number(item.totalPrice))}
Subtotal:{formatCurrency(Number(invoice.subtotal))}
Total:{formatCurrency(Number(invoice.grandTotal))}
+
+ + {#if invoice.description} +
+
Notes:
+
+ {invoice.description} +
+
+ {/if} + + + + +
+
+
+
diff --git a/frontend/src/routes/(app)/invoices/[invoiceId]/edit/+page.server.js b/frontend/src/routes/(app)/invoices/[invoiceId]/edit/+page.server.js new file mode 100644 index 00000000..f0a155e3 --- /dev/null +++ b/frontend/src/routes/(app)/invoices/[invoiceId]/edit/+page.server.js @@ -0,0 +1,220 @@ +/** + * Edit Invoice Page - API Version + * + * This is the migrated version that uses Django REST API instead of Prisma. + * Once tested and working, activate by: + * 1. mv +page.server.js +page.server.prisma.js + * 2. mv +page.server.api.js +page.server.js + * + * Migration completed: 2025-11-19 + * Django endpoint: PUT /api/invoices/{id}/ + * + * NOTE: Django's Invoice model with InvoiceLineItem maps to SvelteKit's Quote with QuoteLineItem + */ + +import { error, fail, redirect } from '@sveltejs/kit'; +import { apiRequest } from '$lib/api-helpers.js'; + +/** @type {import('./$types').PageServerLoad} */ +export async function load({ params, locals, cookies }) { + if (!locals.user || !locals.org) { + throw redirect(302, '/login'); + } + + try { + // Get invoice and accounts in parallel + const [invoice, accountsResponse] = await Promise.all([ + apiRequest(`/invoices/${params.invoiceId}/`, {}, { cookies, org: locals.org }), + apiRequest('/accounts/?status=open&limit=1000', {}, { cookies, org: locals.org }) + ]); + + if (!invoice) { + throw error(404, 'Invoice not found'); + } + + // Transform invoice to Quote format + const transformedInvoice = transformInvoiceToQuote(invoice); + + // Extract accounts from Django response + let accounts = []; + if (accountsResponse.active_accounts?.open_accounts) { + accounts = accountsResponse.active_accounts.open_accounts; + } else if (accountsResponse.results) { + accounts = accountsResponse.results.filter((acc) => !acc.status || acc.status === 'open'); + } + + const transformedAccounts = accounts.map((acc) => ({ + id: acc.id, + name: acc.name + })); + + return { + invoice: transformedInvoice, + accounts: transformedAccounts + }; + } catch (err) { + if (err.message?.includes('404') || err.message?.includes('not found')) { + throw error(404, 'Invoice not found'); + } + console.error('Failed to load invoice:', err); + throw error(500, `Failed to load invoice: ${err.message}`); + } +} + +/** @type {import('./$types').Actions} */ +export const actions = { + default: async ({ request, params, locals, cookies }) => { + if (!locals.user || !locals.org) { + return fail(401, { error: 'Unauthorized' }); + } + + const formData = await request.formData(); + + const accountId = String(formData.get('account_id') || ''); + const invoiceDate = String(formData.get('invoice_date') || ''); + const dueDate = String(formData.get('due_date') || ''); + const status = String(formData.get('status') || 'DRAFT'); + const notes = String(formData.get('notes') || ''); + + // Validation + if (!accountId || !invoiceDate || !dueDate) { + return fail(400, { + error: 'Account, invoice date, and due date are required' + }); + } + + try { + // First, verify the invoice exists + const existingInvoice = await apiRequest( + `/invoices/${params.invoiceId}/`, + {}, + { cookies, org: locals.org } + ); + + if (!existingInvoice) { + return fail(404, { error: 'Invoice not found' }); + } + + // Transform status + const djangoStatus = mapQuoteStatusToInvoiceStatus(status); + + // Update invoice via Django API + const updateData = { + accounts: [accountId], + status: djangoStatus, + details: notes, + due_date: dueDate + }; + + await apiRequest( + `/invoices/${params.invoiceId}/`, + { + method: 'PUT', + body: updateData + }, + { cookies, org: locals.org } + ); + + // Redirect to invoice detail page + throw redirect(303, `/invoices/${params.invoiceId}`); + } catch (err) { + if (err instanceof Response) throw err; // Re-throw redirects + + console.error('Error updating invoice:', err); + + if (err.message.includes('404') || err.message.includes('not found')) { + return fail(404, { error: 'Invoice not found' }); + } + + return fail(500, { + error: 'Failed to update invoice. Please try again.' + }); + } + } +}; + +/** + * Transform Django Invoice to SvelteKit Quote format + * + * @param {Object} invoice - Django invoice object + * @returns {Object} SvelteKit-compatible quote object + */ +function transformInvoiceToQuote(invoice) { + return { + id: invoice.id, + quoteNumber: invoice.invoice_number || `INV-${invoice.id.substring(0, 8)}`, + name: invoice.invoice_title || invoice.name || 'Untitled Invoice', + status: mapInvoiceStatusToQuoteStatus(invoice.status), + description: invoice.details || null, + expirationDate: invoice.due_date ? new Date(invoice.due_date) : null, + + // Account relationship + account: invoice.accounts?.[0] + ? { + id: invoice.accounts[0].id, + name: invoice.accounts[0].name + } + : null, + + // Line items + lineItems: + invoice.line_items?.map((item) => ({ + id: item.id, + quantity: parseFloat(item.quantity) || 1, + listPrice: item.unit_price || '0.00', + unitPrice: item.unit_price || '0.00', + discount: '0.00', + totalPrice: item.total || '0.00', + description: item.description || null, + product: item.product + ? { + id: item.product.id, + name: item.product_name || item.product.name, + code: item.product.sku || null + } + : null + })) || [], + + // Timestamps + createdAt: new Date(invoice.created_at), + updatedAt: new Date(invoice.created_at) + }; +} + +/** + * Map SvelteKit Quote status to Django Invoice status + * + * @param {string} quoteStatus - SvelteKit quote status + * @returns {string} Django invoice status + */ +function mapQuoteStatusToInvoiceStatus(quoteStatus) { + const statusMap = { + DRAFT: 'Draft', + NEEDS_REVIEW: 'Pending', + IN_REVIEW: 'Pending', + APPROVED: 'Sent', + REJECTED: 'Cancelled', + PRESENTED: 'Sent', + ACCEPTED: 'Paid' + }; + + return statusMap[quoteStatus] || 'Draft'; +} + +/** + * Map Django Invoice status to SvelteKit Quote status + * + * @param {string} djangoStatus - Django invoice status + * @returns {string} SvelteKit quote status + */ +function mapInvoiceStatusToQuoteStatus(djangoStatus) { + const statusMap = { + Draft: 'DRAFT', + Sent: 'PRESENTED', + Paid: 'ACCEPTED', + Pending: 'IN_REVIEW', + Cancelled: 'REJECTED' + }; + + return statusMap[djangoStatus] || 'DRAFT'; +} diff --git a/opportunity/migrations/__init__.py b/frontend/src/routes/(app)/invoices/[invoiceId]/edit/+page.svelte similarity index 100% rename from opportunity/migrations/__init__.py rename to frontend/src/routes/(app)/invoices/[invoiceId]/edit/+page.svelte diff --git a/frontend/src/routes/(app)/invoices/new/+page.server.js b/frontend/src/routes/(app)/invoices/new/+page.server.js new file mode 100644 index 00000000..95f6df38 --- /dev/null +++ b/frontend/src/routes/(app)/invoices/new/+page.server.js @@ -0,0 +1,147 @@ +/** + * Create Invoice Page - API Version + * + * This is the migrated version that uses Django REST API instead of Prisma. + * Once tested and working, activate by: + * 1. mv +page.server.js +page.server.prisma.js + * 2. mv +page.server.api.js +page.server.js + * + * Migration completed: 2025-11-19 + * Django endpoint: POST /api/invoices/ + * + * NOTE: Django's Invoice model with InvoiceLineItem maps to SvelteKit's Quote with QuoteLineItem + */ + +import { fail, redirect } from '@sveltejs/kit'; +import { apiRequest } from '$lib/api-helpers.js'; + +/** @type {import('./$types').PageServerLoad} */ +export async function load({ locals, cookies }) { + if (!locals.user || !locals.org) { + throw redirect(302, '/login'); + } + + try { + // Get accounts for the dropdown + const response = await apiRequest( + '/accounts/?status=open&limit=1000', + {}, + { cookies, org: locals.org } + ); + + // Extract accounts from Django response + let accounts = []; + if (response.active_accounts?.open_accounts) { + accounts = response.active_accounts.open_accounts; + } else if (response.results) { + accounts = response.results.filter((acc) => !acc.status || acc.status === 'open'); + } + + // Transform to match SvelteKit format + const transformedAccounts = accounts.map((acc) => ({ + id: acc.id, + name: acc.name + })); + + return { + accounts: transformedAccounts + }; + } catch (err) { + console.error('Failed to load accounts:', err); + return { + accounts: [] + }; + } +} + +/** @type {import('./$types').Actions} */ +export const actions = { + default: async ({ request, locals, cookies }) => { + if (!locals.user || !locals.org) { + return fail(401, { error: 'Unauthorized' }); + } + + const formData = await request.formData(); + + const invoiceNumber = String(formData.get('invoice_number') || ''); + const accountId = String(formData.get('account_id') || ''); + const invoiceDate = String(formData.get('invoice_date') || ''); + const dueDate = String(formData.get('due_date') || ''); + const status = String(formData.get('status') || 'DRAFT'); + const notes = String(formData.get('notes') || ''); + + // Validation + if (!invoiceNumber || !accountId || !invoiceDate || !dueDate) { + return fail(400, { + error: 'Invoice number, account, invoice date, and due date are required' + }); + } + + try { + // Create invoice via Django API + // Transform SvelteKit Quote status to Django Invoice status + const djangoStatus = mapQuoteStatusToInvoiceStatus(status); + + const invoiceData = { + invoice_title: `Invoice ${invoiceNumber}`, + invoice_number: invoiceNumber, + status: djangoStatus, + due_date: dueDate, + details: notes, + accounts: [accountId], // Django expects array of account IDs + currency: 'USD', + total_amount: '0.00', // Will be updated when line items are added + amount_due: '0.00', + amount_paid: '0.00' + }; + + const invoice = await apiRequest( + '/invoices/', + { + method: 'POST', + body: invoiceData + }, + { cookies, org: locals.org } + ); + + // Redirect to invoice detail page + throw redirect(303, `/invoices/${invoice.id}`); + } catch (error) { + console.error('Error creating invoice:', error); + + // Check for validation errors + if (error.message.includes('already exists')) { + return fail(400, { + error: 'An invoice with this number already exists' + }); + } + + return fail(500, { + error: 'Failed to create invoice. Please try again.' + }); + } + } +}; + +/** + * Map SvelteKit Quote status to Django Invoice status + * + * SvelteKit: DRAFT, NEEDS_REVIEW, IN_REVIEW, APPROVED, REJECTED, PRESENTED, ACCEPTED + * Django: Draft, Sent, Paid, Pending, Cancelled + * + * @param {string} quoteStatus - SvelteKit quote status + * @returns {string} Django invoice status + */ +function mapQuoteStatusToInvoiceStatus(quoteStatus) { + const statusMap = { + DRAFT: 'Draft', + NEEDS_REVIEW: 'Pending', + IN_REVIEW: 'Pending', + APPROVED: 'Sent', + REJECTED: 'Cancelled', + PRESENTED: 'Sent', + ACCEPTED: 'Paid' + }; + + return statusMap[quoteStatus] || 'Draft'; +} diff --git a/frontend/src/routes/(app)/invoices/new/+page.svelte b/frontend/src/routes/(app)/invoices/new/+page.svelte new file mode 100644 index 00000000..938d8a98 --- /dev/null +++ b/frontend/src/routes/(app)/invoices/new/+page.svelte @@ -0,0 +1,292 @@ + + + +
+
+
+
+

New Invoice

+

Create a professional invoice for your client

+
+
+ DRAFT +
+
+ +
+ +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+

Line Items

+ +
+ +
+ + + + + + + + + + + + {#each lineItems as item, index (index)} + + + + + + + + {/each} + + + + + + + + + + + + + +
DescriptionQuantityRateTotal
+ { + const target = e.target; + if (target instanceof HTMLInputElement) { + updateLineItem(index, 'description', target.value); + } + }} + class="w-full rounded border-none bg-transparent px-2 py-1 focus:ring-2 focus:ring-blue-500" + placeholder="Description" + /> + + { + const target = e.target; + if (target instanceof HTMLInputElement) { + updateLineItem(index, 'quantity', Number(target.value)); + } + }} + class="w-20 rounded border-none bg-transparent px-2 py-1 text-right focus:ring-2 focus:ring-blue-500" + min="1" + /> + + { + const target = e.target; + if (target instanceof HTMLInputElement) { + updateLineItem(index, 'rate', Number(target.value)); + } + }} + class="w-24 rounded border-none bg-transparent px-2 py-1 text-right focus:ring-2 focus:ring-blue-500" + min="0" + step="0.01" + /> + + ${item.total.toFixed(2)} + + +
Subtotal:${subtotal.toFixed(2)}
Total:${grandTotal.toFixed(2)}
+
+
+ + +
+ + +
+ + +
+ + +
+
+
+
diff --git a/frontend/src/routes/(app)/leads/[lead_id]/+page.server.js b/frontend/src/routes/(app)/leads/[lead_id]/+page.server.js new file mode 100644 index 00000000..32302419 --- /dev/null +++ b/frontend/src/routes/(app)/leads/[lead_id]/+page.server.js @@ -0,0 +1,233 @@ +/** + * Lead Detail Page - API Version + * + * Migrated from Prisma to Django REST API + * Django endpoint: GET /api/leads/{id}/ + * + * To activate: + * mv +page.server.js +page.server.prisma.js + * mv +page.server.api.js +page.server.js + * + * Note: Lead conversion is complex in Django and may require custom endpoint + */ + +import { error, fail, redirect } from '@sveltejs/kit'; +import { apiRequest } from '$lib/api-helpers.js'; + +/** @type {import('./$types').PageServerLoad} */ +export async function load({ params, locals, cookies }) { + const lead_id = params.lead_id; + const org = locals.org; + + if (!org) { + throw error(401, 'Organization context required'); + } + + try { + // Fetch lead details from Django + const response = await apiRequest(`/leads/${lead_id}/`, {}, { cookies, org }); + + if (!response.lead_obj) { + throw error(404, 'Lead not found'); + } + + const leadData = response.lead_obj; + + // Transform lead data + const lead = { + id: leadData.id, + firstName: leadData.first_name, + lastName: leadData.last_name, + company: leadData.company?.name || null, + email: leadData.email, + phone: leadData.phone, + title: leadData.title, + industry: leadData.industry, + website: leadData.website, + description: leadData.description, + leadSource: leadData.source, + status: leadData.status, + rating: leadData.rating || null, + isConverted: leadData.is_converted || leadData.status === 'converted', + convertedAt: leadData.converted_at || null, + convertedContactId: leadData.converted_contact_id || null, + convertedAccountId: leadData.converted_account_id || null, + convertedOpportunityId: leadData.converted_opportunity_id || null, + createdAt: leadData.created_at, + updatedAt: leadData.updated_at, + organizationId: leadData.org?.id || org.id, + ownerId: leadData.created_by?.id || null, + + // Owner info + owner: + leadData.assigned_to && leadData.assigned_to.length > 0 + ? { + id: leadData.assigned_to[0].id, + name: leadData.assigned_to[0].user_details?.email || leadData.assigned_to[0].email, + email: leadData.assigned_to[0].user_details?.email || leadData.assigned_to[0].email + } + : leadData.created_by + ? { + id: leadData.created_by.id, + name: leadData.created_by.email, + email: leadData.created_by.email + } + : null, + + // Contact info (if converted) + contact: leadData.contact + ? { + id: leadData.contact.id, + firstName: leadData.contact.first_name, + lastName: leadData.contact.last_name, + email: leadData.contact.email + } + : null + }; + + // Transform tasks + const tasks = (response.tasks || leadData.tasks || []).map((task) => ({ + id: task.id, + title: task.title, + status: task.status, + priority: task.priority, + dueDate: task.due_date, + createdAt: task.created_at + })); + + // Transform events (Django may return these separately) + const events = (response.events || leadData.events || []).map((event) => ({ + id: event.id, + name: event.name, + startDate: event.start_date, + startTime: event.start_time, + endDate: event.end_date, + status: event.status + })); + + // Transform comments + const comments = (response.comments || []).map((comment) => ({ + id: comment.id, + body: comment.comment, + createdAt: comment.created_at, + author: comment.commented_by + ? { + id: comment.commented_by.id, + name: comment.commented_by.user_details?.email || comment.commented_by.email, + email: comment.commented_by.user_details?.email || comment.commented_by.email + } + : null + })); + + return { + lead: { + ...lead, + tasks, + events, + comments + } + }; + } catch (err) { + console.error('Error loading lead data:', err); + throw error(500, `Failed to load lead: ${err.message}`); + } +} + +/** @type {import('./$types').Actions} */ +export const actions = { + convert: async ({ params, locals, cookies }) => { + const lead_id = params.lead_id; + const org = locals.org; + + try { + console.log('Starting lead conversion for lead:', lead_id); + + const response = await apiRequest( + `/leads/${lead_id}/`, + { + method: 'PATCH', + body: { + status: 'converted', + is_converted: true + } + }, + { cookies, org } + ); + + // Return success with account ID for redirect + return { + status: 'success', + message: response.message || 'Lead converted successfully', + accountId: response.account_id, + contactId: response.contact_id, + redirectTo: response.account_id ? `/accounts/${response.account_id}` : null + }; + } catch (err) { + console.error('Error converting lead:', err); + + let errorMessage = 'Failed to convert lead'; + if (err instanceof Error) { + errorMessage = err.message; + } + + return fail(500, { + status: 'error', + message: `Error converting lead: ${errorMessage}` + }); + } + }, + + addComment: async ({ params, request, locals, cookies }) => { + const lead_id = params.lead_id; + const org = locals.org; + + try { + const data = await request.formData(); + const comment = data.get('comment')?.toString().trim(); + + if (!comment || comment.length === 0) { + return fail(400, { status: 'error', message: 'Comment cannot be empty' }); + } + + if (comment.length > 1000) { + return fail(400, { status: 'error', message: 'Comment too long (max 1000 characters)' }); + } + + // Add comment via API + await apiRequest( + `/leads/comment/${lead_id}/`, + { + method: 'POST', + body: { comment } + }, + { cookies, org } + ); + + // Fetch updated comments + const response = await apiRequest(`/leads/${lead_id}/`, {}, { cookies, org }); + + const comments = (response.comments || []).map((comment) => ({ + id: comment.id, + body: comment.comment, + createdAt: comment.created_at, + author: comment.commented_by + ? { + id: comment.commented_by.id, + name: comment.commented_by.user_details?.email || comment.commented_by.email, + email: comment.commented_by.user_details?.email || comment.commented_by.email + } + : null + })); + + return { + status: 'success', + message: 'Comment added successfully', + commentAdded: true, + comments + }; + } catch (err) { + console.error('Error adding comment:', err); + return fail(500, { status: 'error', message: 'Failed to add comment' }); + } + } +}; diff --git a/frontend/src/routes/(app)/leads/[lead_id]/+page.svelte b/frontend/src/routes/(app)/leads/[lead_id]/+page.svelte new file mode 100644 index 00000000..10592698 --- /dev/null +++ b/frontend/src/routes/(app)/leads/[lead_id]/+page.svelte @@ -0,0 +1,862 @@ + + + +{#if showConfirmModal} +
+
+
+
+ +
+
+

Convert Lead

+

This action cannot be undone

+
+
+ +

+ Are you sure you want to convert {getFullName(lead)} into an account and contact? + This will create new records and mark the lead as converted. +

+ +
+ + +
+
+
+{/if} + + +{#if showToast} +
+
+
+ {#if toastType === 'success'} +
+ +
+ {:else} +
+ +
+ {/if} +
+

{toastMessage}

+ +
+
+{/if} + +
+
+ + + +
+ +
+ +
+
+
+
+
+ {getInitials(lead)} +
+
+
+

+ {getFullName(lead)} +

+
+ + {lead.status} + + {#if lead.company} +
+ + {lead.company} +
+ {/if} + {#if lead.title} +
+ + {lead.title} +
+ {/if} +
+ + +
+ {#if lead.email} +
+
+ +
+
+

+ Email +

+ + {lead.email} + +
+ +
+ {/if} + + {#if lead.phone} +
+
+ +
+
+

+ Phone +

+ + {lead.phone} + +
+ +
+ {/if} +
+ + +
+ {#if lead.email} + + + Send Email + + {/if} + {#if lead.phone} + + + Call + + {/if} +
+
+ + +
+ {#if lead.status !== 'CONVERTED'} +
+ +
+ + {/if} + + + Edit Lead + +
+
+
+
+ + +
+
+

+
+ +
+ Lead Information +

+ +
+ + {#if lead.leadSource} +
+
+ + Lead Source +
+

+ {getLeadSourceDisplay(lead.leadSource)} +

+
+ {/if} + + + {#if lead.industry} +
+
+ + Industry +
+

+ {lead.industry} +

+
+ {/if} + + + {#if lead.rating} +
+
+ + Rating +
+
+ {#each Array(parseInt(lead.rating) || 0) as _, i} + + {/each} + {#each Array(5 - (parseInt(lead.rating) || 0)) as _, i} + + {/each} + {lead.rating}/5 +
+
+ {/if} + + +
+
+ + Lead Owner +
+

+ {lead.owner?.name || 'Unassigned'} +

+
+ + +
+
+ + Created +
+

+ {formatDateShort(lead.createdAt)} +

+
+
+ + + {#if lead.description} +
+
+ + Description +
+
+
+ {@html lead.description} +
+
+
+ {/if} + + + {#if lead.isConverted} +
+
+
+
+ +
+

+ Lead Converted +

+
+ {#if lead.convertedAt} +

+ Converted on {formatDate(lead.convertedAt)} +

+ {/if} +
+
+ {/if} +
+
+
+ + +
+ +
+
+

+
+ +
+ Activity & Notes +

+
+ +
+ +
+
+ +
+ +
+
+
+ + +
+ {#if lead.comments && lead.comments.length > 0} + {#each lead.comments as comment, i (comment.id || i)} +
+
+
+ +
+
+
+
+

+ {comment.author?.name || 'Unknown User'} +

+

+ {formatDate(comment.createdAt)} +

+
+

+ {comment.body} +

+
+
+ {/each} + {:else} +
+
+ +
+

+ No activity yet +

+

+ Be the first to add a note or log an interaction. +

+
+ {/if} +
+
+
+ + + {#if lead.convertedContactId && lead.contact} +
+
+

+
+ +
+ Related Contact +

+
+ +
+
+
+
+ +
+
+

+ {lead.contact.firstName} + {lead.contact.lastName} +

+

Contact

+
+
+ + {#if lead.contact.email} +
+ + {lead.contact.email} +
+ {/if} + + {#if lead.contact.phone} +
+ + {lead.contact.phone} +
+ {/if} + + + + View Contact + +
+
+
+ {/if} + + +
+
+

+
+ +
+ Quick Stats +

+
+ +
+
+ Comments + {lead.comments?.length || 0} +
+
+ Days Since Created + + {Math.floor( + (new Date().getTime() - new Date(lead.createdAt).getTime()) / + (1000 * 60 * 60 * 24) + )} + +
+ {#if lead.convertedAt} +
+ Days to Convert + + {Math.floor( + (new Date(lead.convertedAt).getTime() - new Date(lead.createdAt).getTime()) / + (1000 * 60 * 60 * 24) + )} + +
+ {/if} +
+
+
+
+
+
diff --git a/frontend/src/routes/(app)/leads/[lead_id]/edit/+page.server.js b/frontend/src/routes/(app)/leads/[lead_id]/edit/+page.server.js new file mode 100644 index 00000000..97f32e75 --- /dev/null +++ b/frontend/src/routes/(app)/leads/[lead_id]/edit/+page.server.js @@ -0,0 +1,220 @@ +/** + * Lead Edit Page - API Version + * + * Migrated from Prisma to Django REST API + * Django endpoint: PUT/PATCH /api/leads/{id}/ + * + * To activate: + * mv +page.server.js +page.server.prisma.js + * mv +page.server.api.js +page.server.js + */ + +import { error, fail } from '@sveltejs/kit'; +import { apiRequest } from '$lib/api-helpers.js'; +import { validatePhoneNumber, formatPhoneForStorage } from '$lib/utils/phone.js'; + +/** @type {import('./$types').PageServerLoad} */ +export async function load({ params, locals, cookies }) { + const org = locals.org; + + if (!org) { + throw error(401, 'Organization context required'); + } + + try { + // Fetch lead and users in parallel + const [leadResponse, usersResponse] = await Promise.all([ + apiRequest(`/leads/${params.lead_id}/`, {}, { cookies, org }), + apiRequest('/users/', {}, { cookies, org }) + ]); + + if (!leadResponse.lead_obj) { + throw error(404, 'Lead not found'); + } + + const leadData = leadResponse.lead_obj; + + // Transform lead to form structure + // Note: assigned_to is an array of ProfileSerializer objects + const assignedTo = leadData.assigned_to || []; + const firstAssigned = assignedTo[0]; + + const lead = { + id: leadData.id, + firstName: leadData.first_name || '', + lastName: leadData.last_name || '', + email: leadData.email, + phone: leadData.phone, + company: leadData.company?.name || null, + title: leadData.title, + industry: leadData.industry, + rating: leadData.rating || null, + description: leadData.description, + status: leadData.status || 'assigned', // Django default status + leadSource: leadData.source || null, + ownerId: firstAssigned?.id || null, // Profile ID + // Include owner info if available + owner: firstAssigned + ? { + id: firstAssigned.id, + name: firstAssigned.user_details?.email || 'Unknown', + email: firstAssigned.user_details?.email + } + : null + }; + + // Transform users + // Django UsersListView returns { active_users: { active_users: [...] }, ... } + const activeUsersList = usersResponse.active_users?.active_users || []; + const users = activeUsersList.map((user) => ({ + id: user.id, + user: { + id: user.id, + name: user.user_details?.email || user.email, + email: user.user_details?.email || user.email + } + })); + + return { + lead, + users + }; + } catch (err) { + console.error('Error loading lead for edit:', err); + throw error(500, `Failed to load lead: ${err.message}`); + } +} + +/** @type {import('./$types').Actions} */ +export const actions = { + default: async ({ request, params, locals, cookies }) => { + const org = locals.org; + const formData = await request.formData(); + + // Extract form fields + const firstName = formData.get('firstName')?.toString().trim(); + const lastName = formData.get('lastName')?.toString().trim(); + const email = formData.get('email')?.toString().trim(); + const phone = formData.get('phone')?.toString().trim(); + const company = formData.get('company')?.toString().trim(); + const title = formData.get('title')?.toString().trim(); + const industry = formData.get('industry')?.toString().trim(); + const rating = formData.get('rating')?.toString().trim(); + const description = formData.get('description')?.toString().trim(); + const ownerId = formData.get('ownerId')?.toString(); + const status = formData.get('status')?.toString() || 'assigned'; + const leadSource = formData.get('leadSource')?.toString(); + + // Validation + const errors = {}; + + // Note: Django requires 'title' field, not firstName/lastName + // But we'll keep the UI friendly by using first/last name + if (!firstName || firstName.length === 0) { + errors.firstName = 'First name is required'; + } + + if (!lastName || lastName.length === 0) { + errors.lastName = 'Last name is required'; + } + + if (!ownerId) { + errors.ownerId = 'Owner is required'; + } + + // Title is required by Django - generate from first + last name if not provided + if (!title && firstName && lastName) { + // Will generate title below + } + + // Validate email format if provided + if (email && email.length > 0 && !/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(email)) { + errors.email = 'Please enter a valid email address'; + } + + // Validate phone number if provided + let formattedPhone = null; + if (phone && phone.length > 0) { + const phoneValidation = validatePhoneNumber(phone); + if (!phoneValidation.isValid) { + errors.phone = phoneValidation.error || 'Please enter a valid phone number'; + } else { + formattedPhone = formatPhoneForStorage(phone); + } + } + + // Status and source validation not needed here since form options + // now match Django LEAD_STATUS and LEAD_SOURCE choices + + if (Object.keys(errors).length > 0) { + return fail(400, { + errors, + values: { + firstName, + lastName, + email, + phone, + company, + title, + industry, + rating, + description, + ownerId, + status, + leadSource + } + }); + } + + try { + // Transform to Django field names + // Note: Django requires 'title' field - use provided title or generate from name + const leadTitle = title || `${firstName} ${lastName}`.trim(); + + const djangoData = { + first_name: firstName, + last_name: lastName, + email: email || null, + phone: formattedPhone, + title: leadTitle, // Required by Django + industry: industry || null, + rating: rating || null, + description: description || null, + status: status, + source: leadSource || null, + assigned_to: ownerId ? [ownerId] : [] + }; + + // Update lead via API + await apiRequest( + `/leads/${params.lead_id}/`, + { + method: 'PUT', + body: djangoData + }, + { cookies, org } + ); + + return { success: true }; + } catch (err) { + console.error('Error updating lead:', err); + return fail(500, { + error: 'Failed to update lead: ' + (err instanceof Error ? err.message : 'Unknown error'), + values: { + firstName, + lastName, + email, + phone, + company, + title, + industry, + rating, + description, + ownerId, + status, + leadSource + } + }); + } + } +}; diff --git a/frontend/src/routes/(app)/leads/[lead_id]/edit/+page.svelte b/frontend/src/routes/(app)/leads/[lead_id]/edit/+page.svelte new file mode 100644 index 00000000..c61594df --- /dev/null +++ b/frontend/src/routes/(app)/leads/[lead_id]/edit/+page.svelte @@ -0,0 +1,531 @@ + + +
+ +
+
+
+
+ +
+

Edit Lead

+

+ Editing {lead.firstName} + {lead.lastName} +

+
+
+
+
+
+ +
+ + {#if formSubmitted && !errorMessage} +
+
+
+ + + +
+
+

+ Lead updated successfully! +

+
+
+
+ {/if} + + {#if errorMessage} +
+
+ +
+

{errorMessage}

+
+
+
+ {/if} + + +
{ + const isValid = validateForm(formData); + if (!isValid) return; + + isSubmitting = true; + return async ({ result, update }) => { + isSubmitting = false; + formSubmitted = true; + + if (result.type === 'success') { + if (result.data?.success) { + await update(); + setTimeout(() => { + goto(`/leads/${lead.id}`); + }, 1500); + } else if (result.data?.error) { + errorMessage = result.data.error as string; + } + } else { + errorMessage = 'An unexpected error occurred'; + } + }; + }} + class="space-y-8" + > + +
+
+
+ +

+ Personal Information +

+
+
+
+
+
+ + + {#if errors.firstName} +

{errors.firstName}

+ {/if} +
+ +
+ + + {#if errors.lastName} +

{errors.lastName}

+ {/if} +
+ +
+ + + {#if errors.email} +

{errors.email}

+ {/if} +
+ +
+ + +
+
+
+
+ + +
+
+
+ +

Company Information

+
+
+
+
+
+ + +
+ +
+ + +
+ +
+ + +
+
+
+
+ + +
+
+
+ +

Lead Details

+
+
+
+
+
+ + +
+ +
+ + +
+ +
+ + +
+
+ +
+
+ + +
+
+ +
+ + +
+
+
+ + +
+ + +
+
+
+
diff --git a/frontend/src/routes/(app)/leads/new/+page.server.js b/frontend/src/routes/(app)/leads/new/+page.server.js new file mode 100644 index 00000000..f2bd1560 --- /dev/null +++ b/frontend/src/routes/(app)/leads/new/+page.server.js @@ -0,0 +1,167 @@ +/** + * Lead Create Page - Modern CRM Version + * + * Streamlined lead creation based on Twenty CRM and Salesforce patterns. + * Django endpoint: POST /api/leads/ + */ + +import { fail } from '@sveltejs/kit'; +import { apiRequest } from '$lib/api-helpers.js'; +import { validatePhoneNumber, formatPhoneForStorage } from '$lib/utils/phone.js'; +import { industries, leadSources, leadStatuses, countries } from '$lib/data/index.js'; + +/** @type {import('./$types').PageServerLoad} */ +export async function load({ locals, cookies }) { + const user = locals.user; + const org = locals.org; + + try { + // Fetch users and teams for assignment dropdowns + const [usersResponse, teamsResponse] = await Promise.all([ + apiRequest('/users/', {}, { cookies, org }), + apiRequest('/teams/', {}, { cookies, org }) + ]); + + // Extract active users + const activeUsersList = usersResponse.active_users?.active_users || []; + const users = activeUsersList.map((profile) => ({ + id: profile.id, + name: profile.user_details?.email?.split('@')[0] || 'Unknown', + email: profile.user_details?.email || '' + })); + + // Extract teams + const teams = (teamsResponse.teams || teamsResponse.results || []).map((team) => ({ + id: team.id, + name: team.name + })); + + return { + data: { + industries, + statuses: leadStatuses, + sources: leadSources, + countries, + users, + teams + } + }; + } catch (err) { + console.error('Error loading lead form data:', err); + return { + data: { + industries, + statuses: leadStatuses, + sources: leadSources, + countries, + users: [], + teams: [] + } + }; + } +} + +/** @type {import('./$types').Actions} */ +export const actions = { + default: async ({ request, locals, cookies }) => { + const user = locals.user; + const org = locals.org; + + const formData = await request.formData(); + + // Extract and validate required fields + const title = formData.get('title')?.toString().trim(); + const firstName = formData.get('first_name')?.toString().trim(); + const lastName = formData.get('last_name')?.toString().trim(); + + if (!title) { + return fail(400, { error: 'Lead title is required' }); + } + + if (!firstName) { + return fail(400, { error: 'First name is required' }); + } + + if (!lastName) { + return fail(400, { error: 'Last name is required' }); + } + + // Validate phone number if provided + let formattedPhone = null; + const phone = formData.get('phone')?.toString(); + if (phone && phone.trim().length > 0) { + const phoneValidation = validatePhoneNumber(phone.trim()); + if (!phoneValidation.isValid) { + return fail(400, { error: phoneValidation.error || 'Please enter a valid phone number' }); + } + formattedPhone = formatPhoneForStorage(phone.trim()); + } + + // Build Django data object + const djangoData = { + // Core Lead Information + title, + first_name: firstName, + last_name: lastName, + email: formData.get('email')?.toString().trim() || null, + phone: formattedPhone, + contact_title: formData.get('contact_title')?.toString().trim() || null, + website: formData.get('website')?.toString().trim() || null, + linkedin_url: formData.get('linkedin_url')?.toString().trim() || null, + + // Sales Pipeline + status: formData.get('status')?.toString() || 'assigned', + source: formData.get('source')?.toString() || null, + industry: formData.get('industry')?.toString() || null, + rating: formData.get('rating')?.toString() || null, + opportunity_amount: formData.get('opportunity_amount') + ? parseFloat(formData.get('opportunity_amount')?.toString() || '0') + : null, + probability: formData.get('probability') + ? parseInt(formData.get('probability')?.toString() || '0') + : null, + close_date: formData.get('close_date')?.toString() || null, + + // Address + address_line: formData.get('address_line')?.toString().trim() || null, + city: formData.get('city')?.toString().trim() || null, + state: formData.get('state')?.toString().trim() || null, + postcode: formData.get('postcode')?.toString().trim() || null, + country: formData.get('country')?.toString() || null, + + // Assignment + assigned_to: formData.getAll('assigned_to').map((id) => id.toString()), + teams: formData.getAll('teams').map((id) => id.toString()), + + // Activity + last_contacted: formData.get('last_contacted')?.toString() || null, + next_follow_up: formData.get('next_follow_up')?.toString() || null, + description: formData.get('description')?.toString().trim() || null + }; + + try { + const response = await apiRequest( + '/leads/', + { + method: 'POST', + body: djangoData + }, + { cookies, org } + ); + + return { + status: 'success', + message: 'Lead created successfully', + lead: { + id: response.id || response.lead_obj?.id, + name: `${firstName} ${lastName}` + } + }; + } catch (err) { + console.error('Error creating lead:', err); + return fail(500, { + error: 'Failed to create lead: ' + (err instanceof Error ? err.message : 'Unknown error') + }); + } + } +}; diff --git a/frontend/src/routes/(app)/leads/new/+page.svelte b/frontend/src/routes/(app)/leads/new/+page.svelte new file mode 100644 index 00000000..939cb822 --- /dev/null +++ b/frontend/src/routes/(app)/leads/new/+page.svelte @@ -0,0 +1,824 @@ + + +
+ {#if showToast} +
+
+
+ {#if toastType === 'success'} + + {:else} + + {/if} +
+
+

+ {toastMessage} +

+
+ +
+
+ {/if} + +
+ +
+

+ + Create Lead +

+

Capture new sales opportunity

+
+ + {#if form?.error} +
+
+ + {form.error} +
+
+ {/if} + +
{ + if (!validateForm()) { + cancel(); + return; + } + isSubmitting = true; + return async ({ result }) => { + isSubmitting = false; + if (result.type === 'success') { + showNotification('Lead created successfully!', 'success'); + resetForm(); + setTimeout(() => goto('/leads/open'), 1500); + } else if (result.type === 'failure') { + const errorMessage = result.data?.error || 'Failed to create lead'; + showNotification(errorMessage, 'error'); + } + }; + }} + class="space-y-6" + > + +
+
+

+ + Contact Information +

+
+
+
+ + + {#if errors.title}

{errors.title}

{/if} +
+ +
+ + + {#if errors.first_name}

{errors.first_name}

{/if} +
+ +
+ + + {#if errors.last_name}

{errors.last_name}

{/if} +
+ +
+ + + {#if errors.email}

{errors.email}

{/if} +
+ +
+ + + {#if errors.phone || phoneError}

+ {errors.phone || phoneError} +

{/if} +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+
+
+ + +
+
+

+ + Sales Pipeline +

+
+
+
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + + {#if errors.probability}

+ {errors.probability} +

{/if} +
+ +
+ + +
+
+
+ + +
+
+

+ + Assignment +

+
+
+
+ + +

Ctrl/Cmd + click to select multiple

+
+ +
+ + +
+
+
+ + +
+
+

+ + Address +

+
+
+
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+
+
+ + +
+
+

+ + Activity & Notes +

+
+
+
+
+ + +
+ +
+ + +
+
+ +
+ + +
+
+
+ + +
+ + +
+
+
+
diff --git a/frontend/src/routes/(app)/leads/open/+page.server.js b/frontend/src/routes/(app)/leads/open/+page.server.js new file mode 100644 index 00000000..8dff5953 --- /dev/null +++ b/frontend/src/routes/(app)/leads/open/+page.server.js @@ -0,0 +1,90 @@ +/** + * Open Leads Page - API Version + * + * Migrated from Prisma to Django REST API + * Django endpoint: GET /api/leads/ + * + * Django LeadListView returns leads separated into: + * - open_leads: { leads_count, open_leads: [...] } - excludes status='closed' + * - close_leads: { leads_count, close_leads: [...] } - only status='closed' + * + * Valid Django LEAD_STATUS values: assigned, in process, converted, recycled, closed + */ + +import { error } from '@sveltejs/kit'; +import { apiRequest } from '$lib/api-helpers.js'; + +/** @type {import('./$types').PageServerLoad} */ +export async function load({ cookies, locals }) { + const user = locals.user; + const org = locals.org; + + if (!org) { + throw error(401, 'Organization context required'); + } + + try { + // Django leads endpoint - no status filter needed + // Django LeadListView already separates leads into open_leads and close_leads + // Valid Django status values: assigned, in process, converted, recycled, closed + const response = await apiRequest(`/leads/`, {}, { cookies, org }); + + // Handle Django response format + // Django returns: { open_leads: { leads_count, open_leads: [...] }, close_leads: {...}, ... } + let leads = []; + + if (response.open_leads && response.open_leads.open_leads) { + // Django returns nested structure: open_leads.open_leads + leads = response.open_leads.open_leads || []; + } else if (response.results) { + // Standard Django pagination + leads = response.results; + } else if (Array.isArray(response)) { + // Direct array response + leads = response; + } + + // Transform Django leads to match Prisma structure + const transformedLeads = leads.map((lead) => ({ + id: lead.id, + firstName: lead.first_name, + lastName: lead.last_name, + title: lead.title, + company: lead.company, + email: lead.email, + phone: lead.phone, + website: lead.website, + status: lead.status ? lead.status.toUpperCase().replace(' ', '_') : 'NEW', + leadSource: lead.source, // Map Django 'source' to Prisma 'leadSource' + rating: lead.rating, // Include rating for filtering + description: lead.description, + isConverted: lead.status === 'converted', + createdAt: lead.created_at, + updatedAt: lead.updated_at || lead.created_at, + + // Owner info - Django returns assigned_to array with ProfileSerializer + owner: + lead.assigned_to && lead.assigned_to.length > 0 + ? { + name: + lead.assigned_to[0].user?.email || + lead.assigned_to[0].user_details?.email || + 'Unknown', + email: lead.assigned_to[0].user?.email || lead.assigned_to[0].user_details?.email + } + : lead.created_by + ? { + name: lead.created_by.email, + email: lead.created_by.email + } + : null + })); + + return { + leads: transformedLeads + }; + } catch (err) { + console.error('Error fetching leads from API:', err); + throw error(500, `Failed to fetch leads: ${err.message}`); + } +} diff --git a/frontend/src/routes/(app)/leads/open/+page.svelte b/frontend/src/routes/(app)/leads/open/+page.svelte new file mode 100644 index 00000000..90c87a10 --- /dev/null +++ b/frontend/src/routes/(app)/leads/open/+page.svelte @@ -0,0 +1,684 @@ + + +
+ +
+
+
+
+
+ +
+
+

+ Open Leads +

+

+ {filteredLeads.length} of {leads.length} leads +

+
+
+ + + New Lead + +
+
+
+ + +
+
+ +
+
+ + + +
+ +
+ + + {#if showFilters} +
+
+ + +
+
+ + +
+
+ + +
+
+ +
+
+ {/if} +
+
+ + +
+ {#if isLoading} +
+
+
+ {:else if filteredLeads.length === 0} +
+
📭
+

No leads found

+

+ Try adjusting your search criteria or create a new lead. +

+ + + Create New Lead + +
+ {:else} +
+ + + + +
+ {#each filteredLeads as lead, i} + {@const statusConfig = getStatusConfig(lead.status)} + {@const ratingConfig = getRatingConfig(lead.rating || '')} +
+ +
+
+
+ {lead.firstName.charAt(0)}{lead.lastName.charAt(0)} +
+
+ + {getFullName(lead)} + + {#if lead.title} +

{lead.title}

+ {/if} +
+
+
+ {#snippet statusIcon(/** @type {any} */ config)} + {@const StatusIcon = config.icon} + + {/snippet} + {@render statusIcon(statusConfig)} + + {lead.status} + +
+
+ + +
+ {#if lead.company} +
+ + {lead.company} +
+ {/if} + + {#if lead.email} + + + {lead.email} + + {/if} + + {#if lead.phone} + + + {lead.phone} + + {/if} + +
+
+ + {formatDate(lead.createdAt)} +
+ + {#if lead.rating} +
+ {#each Array(ratingConfig.dots) as _, i} +
+ {/each} + {lead.rating} +
+ {/if} +
+ + {#if lead.owner?.name} +
+ + Owned by {lead.owner.name} +
+ {/if} +
+ + + +
+ {/each} +
+
+ {/if} +
+
diff --git a/frontend/src/routes/(app)/opportunities/+page.server.js b/frontend/src/routes/(app)/opportunities/+page.server.js new file mode 100644 index 00000000..5eaeb44d --- /dev/null +++ b/frontend/src/routes/(app)/opportunities/+page.server.js @@ -0,0 +1,148 @@ +/** + * Opportunities List Page - API Version + * + * Migrated from Prisma to Django REST API + * Django endpoint: GET /api/opportunities/ + * + * To activate: + * mv +page.server.js +page.server.prisma.js + * mv +page.server.api.js +page.server.js + */ + +import { error, fail } from '@sveltejs/kit'; +import { apiRequest, buildQueryParams } from '$lib/api-helpers.js'; + +/** @type {import('./$types').PageServerLoad} */ +export async function load({ locals, cookies }) { + const userId = locals.user?.id; + const org = locals.org; + + if (!userId) { + return { + opportunities: [], + stats: { + total: 0, + totalValue: 0, + wonValue: 0, + pipeline: 0 + } + }; + } + + if (!org) { + throw error(401, 'Organization context required'); + } + + try { + // Fetch opportunities from Django API + const response = await apiRequest('/opportunities/', {}, { cookies, org }); + + // Handle Django response structure + let opportunities = []; + if (response.opportunities) { + opportunities = response.opportunities; + } else if (Array.isArray(response)) { + opportunities = response; + } else if (response.results) { + opportunities = response.results; + } + + // Transform Django opportunities to Prisma structure + const transformedOpportunities = opportunities.map((opp) => ({ + id: opp.id, + name: opp.name, + amount: opp.amount ? Number(opp.amount) : null, + expectedRevenue: opp.expected_revenue ? Number(opp.expected_revenue) : null, + stage: opp.stage, + probability: opp.probability, + leadSource: opp.lead_source, + description: opp.description, + closedOn: opp.closed_on, + createdAt: opp.created_at, + updatedAt: opp.updated_at, + + // Account information + account: opp.account + ? { + id: opp.account.id, + name: opp.account.name, + type: opp.account.type || opp.account.account_type + } + : null, + + // Owner information (assigned_to in Django) + owner: + opp.assigned_to && opp.assigned_to.length > 0 + ? { + id: opp.assigned_to[0].id, + name: opp.assigned_to[0].user_details?.email || opp.assigned_to[0].email, + email: opp.assigned_to[0].user_details?.email || opp.assigned_to[0].email + } + : opp.created_by + ? { + id: opp.created_by.id, + name: opp.created_by.email, + email: opp.created_by.email + } + : null, + + // Contacts + contacts: (opp.contacts || []).map((contact) => ({ + id: contact.id, + firstName: contact.first_name, + lastName: contact.last_name, + email: contact.email + })), + + // Counts + _count: { + tasks: opp.task_count || 0, + events: opp.event_count || 0 + } + })); + + // Calculate stats + const stats = { + total: transformedOpportunities.length, + totalValue: transformedOpportunities.reduce((sum, opp) => sum + (opp.amount || 0), 0), + wonValue: transformedOpportunities + .filter((opp) => opp.stage === 'CLOSED WON') + .reduce((sum, opp) => sum + (opp.amount || 0), 0), + pipeline: transformedOpportunities + .filter((opp) => !['CLOSED WON', 'CLOSED LOST'].includes(opp.stage)) + .reduce((sum, opp) => sum + (opp.amount || 0), 0) + }; + + return { + opportunities: transformedOpportunities, + stats + }; + } catch (err) { + console.error('Error loading opportunities from API:', err); + throw error(500, `Failed to load opportunities: ${err.message}`); + } +} + +/** @type {import('./$types').Actions} */ +export const actions = { + delete: async ({ request, locals, cookies }) => { + try { + const formData = await request.formData(); + const opportunityId = formData.get('opportunityId')?.toString(); + const userId = locals.user?.id; + const org = locals.org; + + if (!opportunityId || !userId || !org) { + return fail(400, { message: 'Missing required data' }); + } + + // Delete via API + await apiRequest(`/opportunities/${opportunityId}/`, { method: 'DELETE' }, { cookies, org }); + + return { success: true, message: 'Opportunity deleted successfully' }; + } catch (err) { + console.error('Error deleting opportunity:', err); + return fail(500, { message: 'Failed to delete opportunity' }); + } + } +}; diff --git a/frontend/src/routes/(app)/opportunities/+page.svelte b/frontend/src/routes/(app)/opportunities/+page.svelte new file mode 100644 index 00000000..52b6ce6d --- /dev/null +++ b/frontend/src/routes/(app)/opportunities/+page.svelte @@ -0,0 +1,656 @@ + + + + Opportunities - BottleCRM + + +
+ + {#if form?.success} +
+ +
+ {/if} + + {#if form?.message && !form?.success} +
+ +
+ {/if} + + +
+
+
+
+

Opportunities

+
+ +
+
+
+ + +
+
+
+
+
+
+ +
+
+
+
+ Total Opportunities +
+
+ {data.stats.total} +
+
+
+
+
+
+ +
+
+
+
+ +
+
+
+
+ Total Value +
+
+ {formatCurrency(data.stats.totalValue)} +
+
+
+
+
+
+ +
+
+
+
+ +
+
+
+
+ Pipeline Value +
+
+ {formatCurrency(data.stats.pipeline)} +
+
+
+
+
+
+ +
+
+
+
+ +
+
+
+
+ Won Value +
+
+ {formatCurrency(data.stats.wonValue)} +
+
+
+
+
+
+
+ + +
+
+
+ +
+
+ +
+ +
+ +
+
+ + +
+ + +
+ + + +
+
+
+ + +
+
+ + + + + + + + + + + + + + + {#each filteredOpportunities as opportunity (opportunity.id)} + {@const config = stageConfig[opportunity.stage] || stageConfig.PROSPECTING} + + + + + + + + + + + {/each} + +
toggleSort('name')} + > +
+ Opportunity + +
+
toggleSort('account.name')} + > +
+ Account + +
+
+ Stage + toggleSort('amount')} + > +
+ Amount + +
+
toggleSort('closeDate')} + > +
+ Close Date + +
+
toggleSort('owner.name')} + > +
+ Owner + +
+
+ Activities + + Actions +
+
+
+
+ {opportunity.name || 'Unnamed Opportunity'} +
+ {#if opportunity.type} +
+ {opportunity.type} +
+ {/if} +
+
+
+
+ +
+
+ {opportunity.account?.name || 'No Account'} +
+ {#if opportunity.account?.type} +
+ {opportunity.account.type} +
+ {/if} +
+
+
+ + {#if config.icon} + {@const IconComponent = config.icon} + + {/if} + {config.label} + + + {formatCurrency(opportunity.amount)} + {#if opportunity.probability} +
+ {opportunity.probability}% probability +
+ {/if} +
+
+ + {formatDate(opportunity.closeDate)} +
+
+
+ +
+ {opportunity.owner?.name || opportunity.owner?.email || 'No Owner'} +
+
+
+
+ {#if opportunity._count?.tasks > 0} + + + {opportunity._count.tasks} + + {/if} + {#if opportunity._count?.events > 0} + + + {opportunity._count.events} + + {/if} +
+
+
+ + + + + + + +
+
+
+ + {#if filteredOpportunities.length === 0} +
+ +

No opportunities

+

+ {searchTerm || selectedStage !== 'all' + ? 'No opportunities match your current filters.' + : 'Get started by creating a new opportunity.'} +

+ {#if !searchTerm && selectedStage === 'all'} + + {/if} +
+ {/if} +
+
+
+ + +{#if showDeleteModal && opportunityToDelete} + +{/if} diff --git a/frontend/src/routes/(app)/opportunities/[opportunityId]/+page.server.js b/frontend/src/routes/(app)/opportunities/[opportunityId]/+page.server.js new file mode 100644 index 00000000..c5b32ef6 --- /dev/null +++ b/frontend/src/routes/(app)/opportunities/[opportunityId]/+page.server.js @@ -0,0 +1,92 @@ +/** + * Opportunity Detail Page - API Version + * + * Migrated from Prisma to Django REST API + * Django endpoint: GET /api/opportunities/{id}/ + * + * To activate: + * mv +page.server.js +page.server.prisma.js + * mv +page.server.api.js +page.server.js + */ + +import { error } from '@sveltejs/kit'; +import { apiRequest } from '$lib/api-helpers.js'; + +/** @type {import('./$types').PageServerLoad} */ +export async function load({ params, locals, cookies }) { + const org = locals.org; + + if (!org) { + throw error(401, 'Organization context required'); + } + + try { + // Fetch opportunity details from Django + const response = await apiRequest( + `/opportunities/${params.opportunityId}/`, + {}, + { cookies, org } + ); + + if (!response.opportunity_obj) { + throw error(404, 'Opportunity not found'); + } + + const oppData = response.opportunity_obj; + + // Transform opportunity data + const opportunity = { + id: oppData.id, + name: oppData.name, + amount: oppData.amount ? Number(oppData.amount) : null, + expectedRevenue: oppData.expected_revenue ? Number(oppData.expected_revenue) : null, + stage: oppData.stage, + probability: oppData.probability, + leadSource: oppData.lead_source, + description: oppData.description, + closedOn: oppData.closed_on, + createdAt: oppData.created_at, + updatedAt: oppData.updated_at, + + // Account + account: oppData.account + ? { + id: oppData.account.id, + name: oppData.account.name, + email: oppData.account.email, + phone: oppData.account.phone, + industry: oppData.account.industry + } + : null, + + // Owner + owner: + oppData.assigned_to && oppData.assigned_to.length > 0 + ? { + id: oppData.assigned_to[0].id, + name: oppData.assigned_to[0].user_details?.email || oppData.assigned_to[0].email, + email: oppData.assigned_to[0].user_details?.email || oppData.assigned_to[0].email + } + : oppData.created_by + ? { + id: oppData.created_by.id, + name: oppData.created_by.email, + email: oppData.created_by.email + } + : null + }; + + // Account data (for compatibility) + const account = opportunity.account; + const owner = opportunity.owner; + + return { + opportunity, + account, + owner + }; + } catch (err) { + console.error('Error loading opportunity data:', err); + throw error(500, `Failed to load opportunity: ${err.message}`); + } +} diff --git a/frontend/src/routes/(app)/opportunities/[opportunityId]/+page.svelte b/frontend/src/routes/(app)/opportunities/[opportunityId]/+page.svelte new file mode 100644 index 00000000..feb7243d --- /dev/null +++ b/frontend/src/routes/(app)/opportunities/[opportunityId]/+page.svelte @@ -0,0 +1,340 @@ + + +
+
+ +
+ + +
+

{opportunity.name}

+
+ + {opportunity.stage.replace('_', ' ')} + + {#if opportunity.probability} +
+ + {opportunity.probability}% probability +
+ {/if} +
+
+ + + {#if opportunity.stage !== 'CLOSED_LOST'} +
+
+ Progress + {Math.round(getStageProgress(opportunity.stage))}% +
+
+
+
+
+ {/if} +
+ + +
+ +
+ +
+
+ +

Financial Details

+
+
+
+
Amount
+
+ {formatCurrency(opportunity.amount)} +
+
+
+
Expected Revenue
+
+ {formatCurrency(opportunity.expectedRevenue)} +
+
+
+
+ + +
+
+ +

+ Opportunity Information +

+
+
+
+
Type
+
{opportunity.type || 'Not specified'}
+
+
+
Lead Source
+
+ {opportunity.leadSource || 'Not specified'} +
+
+
+
Forecast Category
+
+ {opportunity.forecastCategory || 'Not specified'} +
+
+
+
Close Date
+
+ + {formatDate(opportunity.closeDate)} +
+
+
+
+ + + {#if opportunity.nextStep} +
+
+ +

Next Steps

+
+
{opportunity.nextStep}
+
+ {/if} + + + {#if opportunity.description} +
+
+ +

Description

+
+
+ {opportunity.description} +
+
+ {/if} +
+ + +
+ +
+
+ +

Key Metrics

+
+
+
+ Probability + + {opportunity.probability ? `${opportunity.probability}%` : 'N/A'} + +
+
+ Days to Close + + {opportunity.closeDate + ? Math.ceil( + (new Date(opportunity.closeDate).getTime() - new Date().getTime()) / + (1000 * 60 * 60 * 24) + ) + : 'N/A'} + +
+
+
+ + +
+
+ +

Related Records

+
+
+
+
Account
+ {#if account} + + {account.name} + + {:else} + No account + {/if} +
+
+
Owner
+
+ + {owner?.name ?? 'Unassigned'} +
+
+
+
+ + +
+
+ +

System Information

+
+
+
+
Created
+
+ {formatDateTime(opportunity.createdAt)} +
+
+
+
Last Updated
+
+ {formatDateTime(opportunity.updatedAt)} +
+
+
+
+
+
+
+
+ + diff --git a/frontend/src/routes/(app)/opportunities/[opportunityId]/close/+page.server.js b/frontend/src/routes/(app)/opportunities/[opportunityId]/close/+page.server.js new file mode 100644 index 00000000..7791a9e1 --- /dev/null +++ b/frontend/src/routes/(app)/opportunities/[opportunityId]/close/+page.server.js @@ -0,0 +1,145 @@ +/** + * Opportunity Close Page - API Version + * + * Migrated from Prisma to Django REST API + * Django endpoint: PATCH /api/opportunities/{id}/ + * + * To activate: + * mv +page.server.js +page.server.prisma.js + * mv +page.server.api.js +page.server.js + */ + +import { error, fail, redirect } from '@sveltejs/kit'; +import { apiRequest } from '$lib/api-helpers.js'; + +/** @type {import('./$types').PageServerLoad} */ +export async function load({ params, locals, cookies }) { + const org = locals.org; + + if (!org) { + throw error(403, 'Organization access required'); + } + + try { + const response = await apiRequest( + `/opportunities/${params.opportunityId}/`, + {}, + { cookies, org } + ); + + if (!response.opportunity_obj) { + throw error(404, 'Opportunity not found'); + } + + const oppData = response.opportunity_obj; + + // Transform to Prisma structure + const opportunity = { + id: oppData.id, + name: oppData.name, + stage: oppData.stage, + account: oppData.account + ? { + id: oppData.account.id, + name: oppData.account.name + } + : null + }; + + return { opportunity }; + } catch (err) { + console.error('Error loading opportunity for close:', err); + throw error(500, `Failed to load opportunity: ${err.message}`); + } +} + +/** @type {import('./$types').Actions} */ +export const actions = { + default: async ({ request, params, locals, cookies }) => { + const org = locals.org; + + if (!org) { + return fail(403, { error: 'Organization access required' }); + } + + const formData = await request.formData(); + const status = formData.get('status')?.toString(); + const closeDate = formData.get('closeDate')?.toString(); + const closeReason = formData.get('closeReason')?.toString(); + + // Validation + const errors = {}; + + if (!status) { + errors.status = 'Status is required'; + } + + if (!closeDate) { + errors.closeDate = 'Close date is required'; + } + + // Validate status + const validCloseStatuses = ['CLOSED_WON', 'CLOSED_LOST']; + if (status && !validCloseStatuses.includes(status)) { + errors.status = 'Invalid status selected'; + } + + if (Object.keys(errors).length > 0) { + return fail(400, { errors, values: { status, closeDate, closeReason } }); + } + + try { + // First, get the current opportunity + const currentResponse = await apiRequest( + `/opportunities/${params.opportunityId}/`, + {}, + { cookies, org } + ); + + if (!currentResponse.opportunity_obj) { + return fail(404, { error: 'Opportunity not found' }); + } + + const currentOpp = currentResponse.opportunity_obj; + + // Prepare description with close reason appended + let updatedDescription = currentOpp.description || ''; + if (closeReason) { + updatedDescription = updatedDescription + ? `${updatedDescription}\n\nClose Reason: ${closeReason}` + : `Close Reason: ${closeReason}`; + } + + // Transform to Django field names + const djangoData = { + stage: status, // CLOSED_WON or CLOSED_LOST + closed_on: closeDate, + description: updatedDescription + }; + + // Update opportunity via API + await apiRequest( + `/opportunities/${params.opportunityId}/`, + { + method: 'PATCH', + body: djangoData + }, + { cookies, org } + ); + + throw redirect(303, `/opportunities/${params.opportunityId}`); + } catch (err) { + // Check if this is a redirect + if (err?.status === 303) { + throw err; + } + + console.error('Error closing opportunity:', err); + return fail(500, { + error: + 'Failed to close opportunity: ' + (err instanceof Error ? err.message : 'Unknown error'), + values: { status, closeDate, closeReason } + }); + } + } +}; diff --git a/frontend/src/routes/(app)/opportunities/[opportunityId]/close/+page.svelte b/frontend/src/routes/(app)/opportunities/[opportunityId]/close/+page.svelte new file mode 100644 index 00000000..9f4372b0 --- /dev/null +++ b/frontend/src/routes/(app)/opportunities/[opportunityId]/close/+page.svelte @@ -0,0 +1,227 @@ + + +
+
+ +
+
+

+
+ +
+ Close Opportunity +

+

+ Update the status and close details for this opportunity +

+
+
+ + +
+
+

Opportunity Details

+
+
+

Name

+

{opportunity.name}

+
+
+

Amount

+

+ {opportunity.amount ? `$${opportunity.amount.toLocaleString()}` : 'Not specified'} +

+
+
+

Current Stage

+

+ {opportunity.stage.replace('_', ' ')} +

+
+
+

Probability

+

+ {opportunity.probability ? `${opportunity.probability}%` : 'Not specified'} +

+
+
+
+
+ + +
+
+

Close Opportunity

+
+ +
{ + return async ({ update }) => { + isSubmitting = true; + await update(); + isSubmitting = false; + }; + }} + class="space-y-6 p-6" + > + {#if form?.error} +
+
+ + Error +
+

{form.error}

+
+ {/if} + + +
+ +
+ {#each statusOptions as option} + + {/each} +
+
+ + +
+ + +
+ + +
+ + +
+ + +
+ + + + Cancel + +
+
+
+
+
+ + diff --git a/frontend/src/routes/(app)/opportunities/[opportunityId]/delete/+page.server.js b/frontend/src/routes/(app)/opportunities/[opportunityId]/delete/+page.server.js new file mode 100644 index 00000000..4d9347a0 --- /dev/null +++ b/frontend/src/routes/(app)/opportunities/[opportunityId]/delete/+page.server.js @@ -0,0 +1,99 @@ +/** + * Opportunity Delete Page - API Version + * + * Migrated from Prisma to Django REST API + * Django endpoint: DELETE /api/opportunities/{id}/ + * + * To activate: + * mv +page.server.js +page.server.prisma.js + * mv +page.server.api.js +page.server.js + */ + +import { error, fail } from '@sveltejs/kit'; +import { apiRequest } from '$lib/api-helpers.js'; + +/** @type {import('./$types').PageServerLoad} */ +export async function load({ params, locals, cookies }) { + const userId = locals.user?.id; + const org = locals.org; + + if (!userId || !org) { + throw error(401, 'Unauthorized'); + } + + try { + const response = await apiRequest( + `/opportunities/${params.opportunityId}/`, + {}, + { cookies, org } + ); + + if (!response.opportunity_obj) { + throw error(404, 'Opportunity not found'); + } + + const oppData = response.opportunity_obj; + + // Transform to Prisma structure + const opportunity = { + id: oppData.id, + name: oppData.name, + amount: oppData.amount ? parseFloat(oppData.amount) : null, + stage: oppData.stage, + account: oppData.account + ? { + id: oppData.account.id, + name: oppData.account.name + } + : null, + owner: oppData.assigned_to_details?.[0] + ? { + id: oppData.assigned_to_details[0].id, + name: + oppData.assigned_to_details[0].user_details?.email || + oppData.assigned_to_details[0].email, + email: + oppData.assigned_to_details[0].user_details?.email || + oppData.assigned_to_details[0].email + } + : null + }; + + return { opportunity }; + } catch (err) { + console.error('Error loading opportunity for delete:', err); + throw error(500, `Failed to load opportunity: ${err.message}`); + } +} + +/** @type {import('./$types').Actions} */ +export const actions = { + default: async ({ params, locals, cookies }) => { + try { + const userId = locals.user?.id; + const org = locals.org; + + if (!userId || !org) { + return fail(401, { message: 'Unauthorized' }); + } + + // Delete the opportunity via API + await apiRequest( + `/opportunities/${params.opportunityId}/`, + { + method: 'DELETE' + }, + { cookies, org } + ); + + // Return success response - let client handle redirect + return { success: true, message: 'Opportunity deleted successfully' }; + } catch (err) { + console.error('Error deleting opportunity:', err); + return fail(500, { + message: + 'Failed to delete opportunity: ' + (err instanceof Error ? err.message : 'Unknown error') + }); + } + } +}; diff --git a/frontend/src/routes/(app)/opportunities/[opportunityId]/delete/+page.svelte b/frontend/src/routes/(app)/opportunities/[opportunityId]/delete/+page.svelte new file mode 100644 index 00000000..582f14c0 --- /dev/null +++ b/frontend/src/routes/(app)/opportunities/[opportunityId]/delete/+page.svelte @@ -0,0 +1,130 @@ + + + + Delete Opportunity - BottleCRM + + +
+ +
+
+
+
+ + + +

Delete Opportunity

+
+
+
+
+ + +
+
+
+
+
+
+ +
+
+

+ Confirm Deletion +

+

+ This action cannot be undone. +

+
+
+ +
+

+ You are about to delete: +

+
+
Opportunity: {data.opportunity.name}
+
Account: {data.opportunity.account?.name || 'N/A'}
+
+ Amount: + {data.opportunity.amount + ? new Intl.NumberFormat('en-US', { style: 'currency', currency: 'USD' }).format( + data.opportunity.amount + ) + : 'N/A'} +
+
Stage: {data.opportunity.stage}
+
+
+ +
+

+ Warning: Deleting this opportunity will also remove all associated: +

+
    +
  • Tasks and activities
  • +
  • Events and meetings
  • +
  • Comments and notes
  • +
  • Quote associations
  • +
+
+ +
+ + Cancel + + +
{ + deleteLoading = true; + return ({ result }) => { + deleteLoading = false; + if (result.type === 'success') { + // Navigate to opportunities list on successful deletion + goto('/opportunities'); + } else if (result.type === 'failure') { + // Handle error case - you could show a toast notification here + console.error('Failed to delete opportunity:', result.data?.message); + alert(result.data?.message || 'Failed to delete opportunity'); + } + }; + }} + > + +
+
+
+
+
+
+
diff --git a/frontend/src/routes/(app)/opportunities/[opportunityId]/edit/+page.server.js b/frontend/src/routes/(app)/opportunities/[opportunityId]/edit/+page.server.js new file mode 100644 index 00000000..1afc96a5 --- /dev/null +++ b/frontend/src/routes/(app)/opportunities/[opportunityId]/edit/+page.server.js @@ -0,0 +1,218 @@ +/** + * Opportunity Edit Page - API Version + * + * Migrated from Prisma to Django REST API + * Django endpoint: PUT/PATCH /api/opportunities/{id}/ + * + * To activate: + * mv +page.server.js +page.server.prisma.js + * mv +page.server.api.js +page.server.js + */ + +import { error, fail, redirect } from '@sveltejs/kit'; +import { apiRequest } from '$lib/api-helpers.js'; + +/** @type {import('./$types').PageServerLoad} */ +export async function load({ params, locals, cookies }) { + const org = locals.org; + + if (!org) { + throw error(403, 'Organization access required'); + } + + try { + const response = await apiRequest( + `/opportunities/${params.opportunityId}/`, + {}, + { cookies, org } + ); + + if (!response.opportunity_obj) { + throw error(404, 'Opportunity not found'); + } + + const oppData = response.opportunity_obj; + + // Transform to Prisma structure + const opportunity = { + id: oppData.id, + name: oppData.name, + amount: oppData.amount ? parseFloat(oppData.amount) : null, + expectedRevenue: oppData.expected_revenue ? parseFloat(oppData.expected_revenue) : null, + stage: oppData.stage || 'PROSPECTING', + probability: oppData.probability ? parseFloat(oppData.probability) : null, + closeDate: oppData.closed_on || null, + leadSource: oppData.lead_source || null, + forecastCategory: oppData.forecast_category || null, + type: oppData.opportunity_type || null, + nextStep: oppData.next_step || null, + description: oppData.description || null + }; + + // Extract account and owner info + const account = oppData.account + ? { + id: oppData.account.id, + name: oppData.account.name + } + : null; + + const owner = oppData.assigned_to_details?.[0] + ? { + id: oppData.assigned_to_details[0].id, + name: + oppData.assigned_to_details[0].user_details?.email || + oppData.assigned_to_details[0].email + } + : null; + + return { + opportunity, + account, + owner + }; + } catch (err) { + console.error('Error loading opportunity for edit:', err); + throw error(500, `Failed to load opportunity: ${err.message}`); + } +} + +/** @type {import('./$types').Actions} */ +export const actions = { + default: async ({ request, params, locals, cookies }) => { + const org = locals.org; + + if (!org) { + return fail(403, { error: 'Organization access required' }); + } + + const form = await request.formData(); + + // Extract form fields + const name = form.get('name')?.toString().trim(); + const amountStr = form.get('amount')?.toString(); + const amount = amountStr ? parseFloat(amountStr) : null; + const expectedRevenueStr = form.get('expectedRevenue')?.toString(); + const expectedRevenue = expectedRevenueStr ? parseFloat(expectedRevenueStr) : null; + const stage = form.get('stage')?.toString(); + const probabilityStr = form.get('probability')?.toString(); + const probability = probabilityStr ? parseFloat(probabilityStr) : null; + const closeDateValue = form.get('closeDate')?.toString(); + const closeDate = closeDateValue || null; + const leadSource = form.get('leadSource')?.toString() || null; + const forecastCategory = form.get('forecastCategory')?.toString() || null; + const type = form.get('type')?.toString() || null; + const nextStep = form.get('nextStep')?.toString() || null; + const description = form.get('description')?.toString() || null; + + // Validation + const errors = {}; + + if (!name || name.length === 0) { + errors.name = 'Opportunity name is required'; + } + + if (!stage) { + errors.stage = 'Stage is required'; + } + + // Validate stage is a valid enum value + const validStages = [ + 'PROSPECTING', + 'QUALIFICATION', + 'PROPOSAL', + 'NEGOTIATION', + 'CLOSED_WON', + 'CLOSED_LOST' + ]; + if (stage && !validStages.includes(stage)) { + errors.stage = 'Invalid stage selected'; + } + + // Validate probability range + if (probability !== null && (probability < 0 || probability > 100)) { + errors.probability = 'Probability must be between 0 and 100'; + } + + // Validate amounts are not negative + if (amount !== null && amount < 0) { + errors.amount = 'Amount cannot be negative'; + } + + if (expectedRevenue !== null && expectedRevenue < 0) { + errors.expectedRevenue = 'Expected revenue cannot be negative'; + } + + if (Object.keys(errors).length > 0) { + return fail(400, { + errors, + values: { + name, + amount, + expectedRevenue, + stage, + probability, + closeDate, + leadSource, + forecastCategory, + type, + nextStep, + description + } + }); + } + + try { + // Transform to Django field names + const djangoData = { + name: name, + amount: amount, + expected_revenue: expectedRevenue, + stage: stage, + probability: probability, + closed_on: closeDate, + lead_source: leadSource, + forecast_category: forecastCategory, + opportunity_type: type, + next_step: nextStep, + description: description + }; + + // Update opportunity via API + await apiRequest( + `/opportunities/${params.opportunityId}/`, + { + method: 'PUT', + body: djangoData + }, + { cookies, org } + ); + + throw redirect(303, `/opportunities/${params.opportunityId}`); + } catch (err) { + // Check if this is a redirect + if (err?.status === 303) { + throw err; + } + + console.error('Error updating opportunity:', err); + return fail(500, { + error: + 'Failed to update opportunity: ' + (err instanceof Error ? err.message : 'Unknown error'), + values: { + name, + amount, + expectedRevenue, + stage, + probability, + closeDate, + leadSource, + forecastCategory, + type, + nextStep, + description + } + }); + } + } +}; diff --git a/frontend/src/routes/(app)/opportunities/[opportunityId]/edit/+page.svelte b/frontend/src/routes/(app)/opportunities/[opportunityId]/edit/+page.svelte new file mode 100644 index 00000000..a06823f8 --- /dev/null +++ b/frontend/src/routes/(app)/opportunities/[opportunityId]/edit/+page.svelte @@ -0,0 +1,372 @@ + + +
+
+ +
+
+
+ + + +
+

Edit Opportunity

+

+ Update opportunity details and track progress +

+
+
+
+
+ + +
+
+ +
+

+ + Basic Information +

+ +
+ +
+ + +
+ + +
+ + +
+ + +
+ + +
+ + +
+ + +
+ + +
+ + +
+ + +
+ + +
+ + +
+ + +
+ + +
+ + +
+ + +
+ + +
+ + +
+ + +
+ + +
+ + +
+
+
+ + + {#if error} +
+
+ +

{error}

+
+
+ {/if} + + +
+ + Cancel + + +
+
+
+
+
diff --git a/frontend/src/routes/(app)/opportunities/new/+page.server.js b/frontend/src/routes/(app)/opportunities/new/+page.server.js new file mode 100644 index 00000000..9518b2e1 --- /dev/null +++ b/frontend/src/routes/(app)/opportunities/new/+page.server.js @@ -0,0 +1,223 @@ +/** + * Opportunity Create Page - Modern CRM Version + * + * Streamlined opportunity creation based on Twenty CRM and Salesforce patterns. + * Django endpoint: POST /api/opportunities/ + */ + +import { fail } from '@sveltejs/kit'; +import { apiRequest } from '$lib/api-helpers.js'; + +/** @type {import('./$types').PageServerLoad} */ +export async function load({ locals, url, cookies }) { + const org = locals.org; + const preSelectedAccountId = url.searchParams.get('accountId'); + + // Stages matching Django STAGES choices + const stages = [ + { value: 'PROSPECTING', label: 'Prospecting' }, + { value: 'QUALIFICATION', label: 'Qualification' }, + { value: 'PROPOSAL', label: 'Proposal' }, + { value: 'NEGOTIATION', label: 'Negotiation' }, + { value: 'CLOSED_WON', label: 'Closed Won' }, + { value: 'CLOSED_LOST', label: 'Closed Lost' } + ]; + + // Opportunity types matching Django OPPORTUNITY_TYPES choices + const opportunityTypes = [ + { value: 'NEW_BUSINESS', label: 'New Business' }, + { value: 'EXISTING_BUSINESS', label: 'Existing Business' }, + { value: 'RENEWAL', label: 'Renewal' }, + { value: 'UPSELL', label: 'Upsell' }, + { value: 'CROSS_SELL', label: 'Cross-sell' } + ]; + + // Lead sources matching Django SOURCES choices + const leadSources = [ + { value: 'NONE', label: 'None' }, + { value: 'CALL', label: 'Call' }, + { value: 'EMAIL', label: 'Email' }, + { value: 'EXISTING CUSTOMER', label: 'Existing Customer' }, + { value: 'PARTNER', label: 'Partner' }, + { value: 'PUBLIC RELATIONS', label: 'Public Relations' }, + { value: 'CAMPAIGN', label: 'Campaign' }, + { value: 'WEBSITE', label: 'Website' }, + { value: 'OTHER', label: 'Other' } + ]; + + try { + // Fetch accounts, contacts, users, and teams in parallel + const [accountsResponse, contactsResponse, usersResponse, teamsResponse] = await Promise.all([ + apiRequest('/accounts/', {}, { cookies, org }), + apiRequest('/contacts/', {}, { cookies, org }), + apiRequest('/users/', {}, { cookies, org }), + apiRequest('/teams/', {}, { cookies, org }) + ]); + + // Transform accounts + let accountsList = []; + if (accountsResponse.results) { + accountsList = accountsResponse.results; + } else if (accountsResponse.active_accounts?.open_accounts) { + accountsList = accountsResponse.active_accounts.open_accounts; + } + + const accounts = accountsList.map((acc) => ({ + id: acc.id, + name: acc.name + })); + + // Transform contacts + const contacts = (contactsResponse.results || contactsResponse || []).map((contact) => ({ + id: contact.id, + firstName: contact.first_name, + lastName: contact.last_name, + email: contact.email + })); + + // Extract active users + const activeUsersList = usersResponse.active_users?.active_users || []; + const users = activeUsersList.map((profile) => ({ + id: profile.id, + name: profile.user_details?.email?.split('@')[0] || 'Unknown', + email: profile.user_details?.email || '' + })); + + // Extract teams + const teams = (teamsResponse.teams || teamsResponse.results || []).map((team) => ({ + id: team.id, + name: team.name + })); + + // Get pre-selected account details if provided + let preSelectedAccount = null; + if (preSelectedAccountId) { + preSelectedAccount = accounts.find((account) => account.id === preSelectedAccountId); + } + + return { + data: { + accounts, + contacts, + users, + teams, + stages, + opportunityTypes, + leadSources, + preSelectedAccountId, + preSelectedAccountName: preSelectedAccount?.name || null + } + }; + } catch (err) { + console.error('Error loading opportunity form data:', err); + return { + data: { + accounts: [], + contacts: [], + users: [], + teams: [], + stages, + opportunityTypes, + leadSources, + preSelectedAccountId: null, + preSelectedAccountName: null + } + }; + } +} + +/** @type {import('./$types').Actions} */ +export const actions = { + default: async ({ request, locals, cookies }) => { + const org = locals.org; + + const formData = await request.formData(); + + // Extract and validate required fields + const name = formData.get('name')?.toString().trim(); + const accountId = formData.get('account')?.toString(); + const stage = formData.get('stage')?.toString(); + + if (!name) { + return fail(400, { error: 'Opportunity name is required' }); + } + + if (!stage) { + return fail(400, { error: 'Stage is required' }); + } + + // Validate probability + const probabilityStr = formData.get('probability')?.toString(); + let probability = null; + if (probabilityStr && probabilityStr.trim() !== '') { + probability = parseInt(probabilityStr); + if (isNaN(probability) || probability < 0 || probability > 100) { + return fail(400, { error: 'Probability must be between 0 and 100' }); + } + } + + // Validate amount + const amountStr = formData.get('amount')?.toString(); + let amount = null; + if (amountStr && amountStr.trim() !== '') { + amount = parseFloat(amountStr); + if (isNaN(amount) || amount < 0) { + return fail(400, { error: 'Amount must be a valid positive number' }); + } + } + + // Build Django data object + const djangoData = { + // Core Opportunity Information + name, + account: accountId || null, + stage, + opportunity_type: formData.get('opportunity_type')?.toString() || null, + + // Financial Information + currency: formData.get('currency')?.toString() || null, + amount, + probability, + closed_on: formData.get('closed_on')?.toString() || null, + + // Source & Context + lead_source: formData.get('lead_source')?.toString() || null, + + // Relationships + contacts: formData.getAll('contacts').map((id) => id.toString()), + + // Assignment + assigned_to: formData.getAll('assigned_to').map((id) => id.toString()), + teams: formData.getAll('teams').map((id) => id.toString()), + + // Notes + description: formData.get('description')?.toString().trim() || null + }; + + try { + const response = await apiRequest( + '/opportunities/', + { + method: 'POST', + body: djangoData + }, + { cookies, org } + ); + + return { + status: 'success', + message: 'Opportunity created successfully', + opportunity: { + id: response.id || response.opportunity_obj?.id, + name: response.name || response.opportunity_obj?.name + } + }; + } catch (err) { + console.error('Error creating opportunity:', err); + return fail(500, { + error: + 'Failed to create opportunity: ' + (err instanceof Error ? err.message : 'Unknown error') + }); + } + } +}; diff --git a/frontend/src/routes/(app)/opportunities/new/+page.svelte b/frontend/src/routes/(app)/opportunities/new/+page.svelte new file mode 100644 index 00000000..3a5702d0 --- /dev/null +++ b/frontend/src/routes/(app)/opportunities/new/+page.svelte @@ -0,0 +1,529 @@ + + + + New Opportunity - CRM + + +
+ +
+
+
+
+ +
+
+ +
+
+

New Opportunity

+

Create a new sales opportunity

+
+
+
+
+
+
+ + +
+ {#if form?.error} +
+

{form.error}

+
+ {/if} + + {#if form?.status === 'success'} +
+

{form.message}

+
+ + {/if} + +
{ + isSubmitting = true; + return async ({ result, update }) => { + isSubmitting = false; + await update(); + if (result.type === 'success' && result.data?.status === 'success') { + handleSuccess(); + } + }; + }} + class="space-y-8" + > + +
+

+ + Opportunity Information +

+ +
+ +
+ + +
+ + +
+ + + {#if data.data.preSelectedAccountId} +

+ Account pre-selected from {data.data.preSelectedAccountName} +

+ {/if} +
+ + +
+ + +
+ + +
+ + +
+ + +
+ + +
+
+
+ + +
+

+ + Financial Information +

+ +
+ +
+ + +
+ + +
+ + +
+ + +
+ + +
+ + +
+ + +
+ + +
+
+ Expected Revenue +
+
+ ${calculateExpectedRevenue()} +
+

Amount × Probability / 100

+
+
+
+ + +
+

+ + Assignment +

+ +
+ +
+ + +

+ Hold Ctrl/Cmd to select multiple +

+
+ + +
+ + +

+ Hold Ctrl/Cmd to select multiple +

+
+
+
+ + + {#if data.data.contacts.length > 0} +
+

+ + Related Contacts +

+ +
+ + +

+ Hold Ctrl/Cmd to select multiple contacts +

+
+
+ {/if} + + +
+

+ + Notes +

+ +
+ + +
+
+ + +
+ + +
+
+
+
diff --git a/frontend/src/routes/(app)/profile/+page.server.js b/frontend/src/routes/(app)/profile/+page.server.js new file mode 100644 index 00000000..6c2be3d8 --- /dev/null +++ b/frontend/src/routes/(app)/profile/+page.server.js @@ -0,0 +1,126 @@ +/** + * Profile Page - API Version + * + * Migrated from Prisma to Django REST API + * Django endpoint: GET/PATCH /api/profile/ + * + * To activate: + * mv +page.server.js +page.server.prisma.js + * mv +page.server.api.js +page.server.js + */ + +import { fail, redirect } from '@sveltejs/kit'; +import { apiRequest } from '$lib/api-helpers.js'; +import { validatePhoneNumber, formatPhoneForStorage } from '$lib/utils/phone.js'; + +/** @type {import('./$types').PageServerLoad} */ +export async function load({ locals, cookies }) { + if (!locals.user) { + throw redirect(307, '/login'); + } + + const org = locals.org; + + try { + // Fetch user profile from Django API + const response = await apiRequest('/profile/', {}, { cookies, org }); + + // Django profile response structure may vary + const profileData = response.user_obj || response; + + // Get user details + const userDetails = profileData.user_details || profileData.user || {}; + + // Transform to Prisma structure + const user = { + id: profileData.id || locals.user.id, + user_id: profileData.user_id || userDetails.id, + email: userDetails.email || profileData.email || locals.user.email, + name: userDetails.name || profileData.name || userDetails.email, + profilePhoto: + profileData.profile_photo || userDetails.profile_photo || userDetails.profile_pic || null, + phone: profileData.phone || userDetails.phone || null, + isActive: profileData.is_active !== undefined ? profileData.is_active : true, + lastLogin: userDetails.last_login || null, + createdAt: + profileData.created_at || profileData.created_on || userDetails.date_joined || null, + organizations: [] // Django might not return this in profile endpoint + }; + + return { user }; + } catch (err) { + console.error('Error loading profile:', err); + throw redirect(307, '/login'); + } +} + +/** @type {import('./$types').Actions} */ +export const actions = { + updateProfile: async ({ request, locals, cookies }) => { + if (!locals.user) { + throw redirect(307, '/login'); + } + + const org = locals.org; + const formData = await request.formData(); + const name = formData.get('name')?.toString(); + const phone = formData.get('phone')?.toString(); + + // Validation + const errors = {}; + + if (!name || name.trim().length === 0) { + errors.name = 'Name is required'; + } else if (name.trim().length < 2) { + errors.name = 'Name must be at least 2 characters long'; + } + + // Validate phone if provided + let formattedPhone = null; + if (phone && phone.trim().length > 0) { + const phoneValidation = validatePhoneNumber(phone.trim()); + if (!phoneValidation.isValid) { + errors.phone = phoneValidation.error || 'Please enter a valid phone number'; + } else { + formattedPhone = formatPhoneForStorage(phone.trim()); + } + } + + if (Object.keys(errors).length > 0) { + return fail(400, { + errors, + data: { name, phone } + }); + } + + try { + // Transform to Django field names + const djangoData = { + name: name.trim(), + phone: formattedPhone + }; + + // Update profile via API + await apiRequest( + '/profile/', + { + method: 'PATCH', + body: djangoData + }, + { cookies, org } + ); + + return { + success: true, + message: 'Profile updated successfully' + }; + } catch (err) { + console.error('Error updating profile:', err); + return fail(500, { + error: + 'Failed to update profile: ' + (err instanceof Error ? err.message : 'Unknown error'), + data: { name, phone } + }); + } + } +}; diff --git a/frontend/src/routes/(app)/profile/+page.svelte b/frontend/src/routes/(app)/profile/+page.svelte new file mode 100644 index 00000000..071cae37 --- /dev/null +++ b/frontend/src/routes/(app)/profile/+page.svelte @@ -0,0 +1,427 @@ + + + + Profile - BottleCRM + + +
+ +
+
+
+

Profile

+

+ Manage your personal information and account settings +

+
+ +
+
+ + + {#if form?.success} +
+
+
+ + + +
+
+

+ {form.message} +

+
+
+
+ {/if} + + {#if form?.error} +
+
+
+ + + +
+
+

+ {form.error} +

+
+
+
+ {/if} + +
+ +
+
+
+ +
+ {#if data.user.profilePhoto} + {data.user.name + {:else} +
+ + {getInitials(data.user.name)} + +
+ {/if} +
+ +

+ {data.user.name || 'Unnamed User'} +

+

{data.user.email}

+
+ + +
+ + {data.user.isActive ? 'Active' : 'Inactive'} + +
+
+
+ + +
+
+ {#if isEditing} + +
+
+

+ Edit Profile Information +

+ +
+ +
+ + +
+ + +
+ + + {#if phoneError} +

+ {phoneError} +

+ {/if} +
+
+
+ +
+
+ + +
+
+
+ {:else} + +
+

+ Profile Information +

+ +
+ +
+
+ + Email Address +
+
{data.user.email}
+
+ + +
+
+ + Phone Number +
+
+ {data.user.phone ? formatPhoneNumber(data.user.phone) : 'Not provided'} +
+
+ + +
+
+ + Last Login +
+
+ {formatDate(data.user.lastLogin)} +
+
+ + +
+
+ + Member Since +
+
+ {formatDate(data.user.createdAt)} +
+
+
+
+ {/if} +
+ + + {#if data.user.organizations && data.user.organizations.length > 0} +
+

Organizations

+
+ {#each data.user.organizations as userOrg} +
+
+
+ +
+
+

+ {userOrg.organization.name} +

+

+ Joined {formatDate(userOrg.joinedAt)} +

+
+
+ + {userOrg.role} + +
+ {/each} +
+
+ {/if} +
+
+
diff --git a/frontend/src/routes/(app)/support/+page.svelte b/frontend/src/routes/(app)/support/+page.svelte new file mode 100644 index 00000000..07f982f7 --- /dev/null +++ b/frontend/src/routes/(app)/support/+page.svelte @@ -0,0 +1,187 @@ + + +
+
+ +
+

BottleCRM Support

+

+ Empowering startups with free, open-source CRM solutions. Say goodbye to expensive + subscription fees. +

+
+ + +
+
+
+ +
+
+

Our Mission

+

+ BottleCRM addresses the high subscription costs of commercial CRM alternatives by + providing a completely free, open-source, and highly customizable solution. Clone it, + self-host it, and make it yours - forever free. +

+
+
+
+ + +
+ +
+
+
+ +
+

Community Support

+
+

+ Join our open-source community for free support, discussions, and collaboration. +

+ + + Visit GitHub Repository + +
+ + +
+
+
+ +
+

Professional Support

+
+

+ Get priority support, hosting assistance, and custom development services. +

+ + + Contact for Paid Support + +
+
+ + +
+
+
+ +
+

+ Feature Requests & Ideas +

+
+

+ Have an idea to make BottleCRM better? We'd love to hear from you! Share your feature + requests and help shape the future of open-source CRM. +

+ + + Request Feature + +
+ + +
+
+
+ +
+

Bug Reports

+
+

+ Found a bug? Help us improve BottleCRM by reporting issues. Your feedback helps make the + platform more stable for everyone. +

+ + + Report Bug + +
+ + +
+
+
+ +
+

Security Issues

+
+

+ Security is our priority. If you discover any security vulnerabilities, please + report them privately. Do not create public GitHub issues for security concerns. +

+ + + Report Security Issue + +
+ + +
+
+
+ +
+

Custom CRM Development

+
+

+ Need BottleCRM tailored to your specific business needs? We offer professional customization + services including hosting, custom features, integrations, and ongoing support. +

+ +
+
+
diff --git a/frontend/src/routes/(app)/tasks/+page.server.js b/frontend/src/routes/(app)/tasks/+page.server.js new file mode 100644 index 00000000..31ffe2a5 --- /dev/null +++ b/frontend/src/routes/(app)/tasks/+page.server.js @@ -0,0 +1,101 @@ +/** + * Tasks Main Page (Kanban Boards List) - API Version + * + * Migrated from Prisma to Django REST API + * Displays user's Kanban boards and allows creating new boards + * + * ⚠️ NOTE: This page requires Django Boards API (Phase 3 feature) + * Django Endpoints (to be implemented): + * - GET /api/boards/ - List user's boards + * - POST /api/boards/ - Create new board with default columns + * + * Until boards API is implemented, this returns empty list. + */ + +import { fail } from '@sveltejs/kit'; +import { apiRequest } from '$lib/api-helpers.js'; + +/** @type {import('./$types').PageServerLoad} */ +export async function load({ locals, cookies }) { + const user = locals.user; + const org = locals.org; + + try { + // Fetch boards from Django API (Phase 3 feature - now implemented) + const data = await apiRequest('/boards/', {}, { cookies, org }); + + // Transform Django response to match Prisma format + const boards = (data.results || []).map((board) => ({ + id: board.id, + name: board.name, + createdAt: new Date(board.created_at), + ownerId: board.owner?.id || user.id, + // Additional fields from Django + isArchived: board.is_archived || false, + _count: { + columns: board.columns?.length || 0, + members: board.members?.length || 0 + } + })); + + return { boards }; + } catch (err) { + console.error('Error loading boards:', err); + + // Graceful fallback if API has issues + return { + boards: [], + error: err.message + }; + } +} + +/** @type {import('./$types').Actions} */ +export const actions = { + /** + * Create new board with default columns + */ + create: async ({ request, locals, cookies }) => { + const user = locals.user; + const org = locals.org; + + try { + const formData = await request.formData(); + const name = formData.get('name')?.toString(); + + if (!name) { + return fail(400, { error: 'Board name is required' }); + } + + // Create board via Django API + // Django will automatically create default columns (To Do, In Progress, Done) + const boardData = { + name + // owner is set automatically from request.profile in Django + // default columns are created automatically in Django backend + }; + + await apiRequest( + '/boards/', + { + method: 'POST', + body: boardData + }, + { cookies, org } + ); + + return { success: true }; + } catch (err) { + console.error('Error creating board:', err); + + if (err.message.includes('404') || err.message.includes('Not Found')) { + return fail(404, { + error: 'Boards API endpoint not found', + details: err.message + }); + } + + return fail(500, { error: err.message || 'Failed to create board' }); + } + } +}; diff --git a/frontend/src/routes/(app)/tasks/+page.svelte b/frontend/src/routes/(app)/tasks/+page.svelte new file mode 100644 index 00000000..6fc16e2c --- /dev/null +++ b/frontend/src/routes/(app)/tasks/+page.svelte @@ -0,0 +1,138 @@ + + +
+

Boards

+
+ {#if data?.boards?.length} + {#each data.boards as board} + +
{board.name}
+
+ {/each} + {:else} +

No boards found.

+ {/if} +
+
+
+ + + +
+
+
+ + diff --git a/frontend/src/routes/(app)/tasks/[task_id]/+page.server.js b/frontend/src/routes/(app)/tasks/[task_id]/+page.server.js new file mode 100644 index 00000000..b2ebdfa3 --- /dev/null +++ b/frontend/src/routes/(app)/tasks/[task_id]/+page.server.js @@ -0,0 +1,148 @@ +/** + * Task Detail Page - API Version + * + * Migrated from Prisma to Django REST API + * Django endpoint: GET /api/tasks/{id}/ + * + * To activate: + * mv +page.server.js +page.server.prisma.js + * mv +page.server.api.js +page.server.js + */ + +import { fail, error } from '@sveltejs/kit'; +import { apiRequest } from '$lib/api-helpers.js'; + +/** @type {import('./$types').PageServerLoad} */ +export async function load({ params, locals, cookies }) { + const { task_id } = params; + const org = locals.org; + const user = locals.user; + + if (!org) { + throw error(401, 'Organization context required'); + } + + try { + // Fetch task details from Django + const response = await apiRequest(`/tasks/${task_id}/`, {}, { cookies, org }); + + if (!response.task_obj) { + return fail(404, { message: 'Task not found or you do not have permission to view it.' }); + } + + const taskData = response.task_obj; + + // Transform task data + const task = { + id: taskData.id, + title: taskData.title, + status: taskData.status, + priority: taskData.priority, + dueDate: taskData.due_date ? new Date(taskData.due_date).toISOString().split('T')[0] : null, + createdAt: taskData.created_at, + updatedAt: taskData.updated_at, + + // Owner + owner: + taskData.assigned_to && taskData.assigned_to.length > 0 + ? { + id: taskData.assigned_to[0].id, + name: taskData.assigned_to[0].user_details?.email || taskData.assigned_to[0].email, + profilePhoto: taskData.assigned_to[0].profile_photo || null + } + : null, + + // Account + account: taskData.account + ? { + id: taskData.account.id, + name: taskData.account.name + } + : null, + + // Comments + comments: (response.comments || []).map((comment) => ({ + id: comment.id, + body: comment.comment, + createdAt: comment.created_at, + author: comment.commented_by + ? { + id: comment.commented_by.id, + name: comment.commented_by.user_details?.email || comment.commented_by.email, + profilePhoto: comment.commented_by.profile_photo || null + } + : null + })) + }; + + // Transform users list + const users = (response.users || []).map((user) => ({ + id: user.id, + name: user.user_details?.email || user.email, + profilePhoto: user.profile_photo || null + })); + + // Transform accounts list + let accounts = []; + if (response.accounts_list) { + accounts = response.accounts_list; + } else if (response.accounts) { + accounts = response.accounts; + } + + const transformedAccounts = accounts.map((account) => ({ + id: account.id, + name: account.name + })); + + // Logged in user info + const loggedInUser = user + ? { + id: user.id, + name: user.name, + profilePhoto: user.profilePhoto || null + } + : null; + + return { + task, + users, + accounts: transformedAccounts, + loggedInUser + }; + } catch (err) { + console.error('Error loading task data:', err); + throw error(500, `Failed to load task: ${err.message}`); + } +} + +/** @type {import('./$types').Actions} */ +export const actions = { + addComment: async ({ request, params, locals, cookies }) => { + const org = locals.org; + const formData = await request.formData(); + const commentBody = formData.get('commentBody')?.toString(); + const { task_id } = params; + + if (!commentBody || commentBody.trim() === '') { + return fail(400, { error: true, message: 'Comment body cannot be empty.', commentBody }); + } + + try { + // Add comment via API - comments are added via TaskDetailView.post() + await apiRequest( + `/tasks/${task_id}/`, + { + method: 'POST', + body: { comment: commentBody } + }, + { cookies, org } + ); + + return { success: true, message: 'Comment added successfully.' }; + } catch (err) { + console.error('Error adding comment:', err); + return fail(500, { error: true, message: 'Failed to add comment.' }); + } + } +}; diff --git a/frontend/src/routes/(app)/tasks/[task_id]/+page.svelte b/frontend/src/routes/(app)/tasks/[task_id]/+page.svelte new file mode 100644 index 00000000..2c76df3b --- /dev/null +++ b/frontend/src/routes/(app)/tasks/[task_id]/+page.svelte @@ -0,0 +1,303 @@ + + +
+
+ +
+
+
+ +
+

+ Task Details +

+

View and manage task information

+
+
+ +
+
+ + + {#if task} +
+ +
+
+ + {task.status} + + + {task.priority} + +
+ + Due {formatDate(task.dueDate)} +
+
+ +

+ {task.title} +

+ + {#if task.description} +

+ {task.description} +

+ {:else} +

No description provided

+ {/if} +
+ + +
+
+ +
+
+ + Task Owner +
+
+ {#if task.owner?.profilePhoto} + {task.owner.name} + {:else} +
+ + {task.owner?.name?.charAt(0) || 'U'} + +
+ {/if} +
+
+ {task.owner?.name || 'Unassigned'} +
+
Owner
+
+
+
+ + +
+
+ + Related Account +
+
+
+ +
+
+
+ {task.account?.name || 'No account assigned'} +
+
Account
+
+
+
+
+
+
+ + +
+
+
+ +

Comments

+ {#if task.comments && task.comments.length > 0} + ({task.comments.length}) + {/if} +
+
+ +
+ {#if form?.message} +
+

{form.message}

+
+ {/if} + + {#if form?.fieldError && Array.isArray(form.fieldError) && form.fieldError.includes('commentBody')} + {@const formData = /** @type {any} */ (form)} + {#if 'commentBody' in formData} + {@const _ = newComment = /** @type {string} */ (formData.commentBody || '')} + {/if} + {/if} + + +
+ {#if task.comments && task.comments.length > 0} + {#each task.comments as c (c.id || c.createdAt)} +
+ {#if c.author.profilePhoto} + {c.author.name} + {:else} +
+ + {c.author?.name?.charAt(0) || 'U'} + +
+ {/if} +
+
+ {c.author.name} + {new Date(c.createdAt).toLocaleString()} +
+
+ {c.body} +
+
+
+ {/each} + {:else} +
+ +

No comments yet

+

+ Be the first to add a comment +

+
+ {/if} +
+ + +
+
+ + +
+
+ +
+
+
+
+ {/if} +
+
diff --git a/frontend/src/routes/(app)/tasks/[task_id]/edit/+page.server.js b/frontend/src/routes/(app)/tasks/[task_id]/edit/+page.server.js new file mode 100644 index 00000000..7b0b1889 --- /dev/null +++ b/frontend/src/routes/(app)/tasks/[task_id]/edit/+page.server.js @@ -0,0 +1,190 @@ +/** + * Task Edit Page - API Version + * + * Migrated from Prisma to Django REST API + * Django endpoint: PUT/PATCH /api/tasks/{id}/ + * + * To activate: + * mv +page.server.js +page.server.prisma.js + * mv +page.server.api.js +page.server.js + */ + +import { fail, redirect, error } from '@sveltejs/kit'; +import { apiRequest } from '$lib/api-helpers.js'; + +/** @type {import('./$types').PageServerLoad} */ +export async function load({ params, locals, cookies }) { + const org = locals.org; + + if (!org) { + throw error(401, 'Organization context required'); + } + + try { + // Fetch task, users, and accounts in parallel + const [taskResponse, usersResponse, accountsResponse] = await Promise.all([ + apiRequest(`/tasks/${params.task_id}/`, {}, { cookies, org }), + apiRequest('/users/', {}, { cookies, org }), + apiRequest('/accounts/', {}, { cookies, org }) + ]); + + if (!taskResponse.task_obj) { + throw redirect(303, '/tasks/list'); + } + + const taskData = taskResponse.task_obj; + + // Format dueDate for input[type=date] + let formattedDueDate = null; + if (taskData.due_date) { + try { + formattedDueDate = new Date(taskData.due_date).toISOString().split('T')[0]; + } catch (e) { + formattedDueDate = taskData.due_date; + } + } + + // Transform task to Prisma structure + const task = { + id: taskData.id, + subject: taskData.title, + description: taskData.description, + status: taskData.status || 'New', + priority: taskData.priority || 'Medium', + dueDate: formattedDueDate, + ownerId: taskData.assigned_to?.[0]?.id || null, + accountId: taskData.account || null + }; + + // Transform users + // Django UsersListView returns { active_users: { active_users: [...] }, ... } + const activeUsersList = usersResponse.active_users?.active_users || []; + const users = activeUsersList.map((user) => ({ + id: user.id, + name: user.user_details?.email || user.email + })); + + // Transform accounts + let accounts = []; + if (accountsResponse.results) { + accounts = accountsResponse.results; + } else if (accountsResponse.active_accounts?.open_accounts) { + accounts = accountsResponse.active_accounts.open_accounts; + } + + const transformedAccounts = accounts.map((acc) => ({ + id: acc.id, + name: acc.name + })); + + return { + task, + users, + accounts: transformedAccounts + }; + } catch (err) { + // Check if this is a redirect + if (err?.status === 303) { + throw err; + } + + console.error('Error loading task for edit:', err); + throw error(500, `Failed to load task: ${err.message}`); + } +} + +/** @type {import('./$types').Actions} */ +export const actions = { + update: async ({ request, params, locals, cookies }) => { + const formData = await request.formData(); + const org = locals.org; + + const subject = formData.get('subject')?.toString(); + const description = formData.get('description')?.toString(); + const status = formData.get('status')?.toString(); + const priority = formData.get('priority')?.toString(); + let dueDate = formData.get('dueDate')?.toString(); + const ownerId = formData.get('ownerId')?.toString(); + let accountId = formData.get('accountId')?.toString(); + + // Validation + const errors = {}; + + if (!subject || subject.trim().length === 0) { + errors.subject = 'Subject is required'; + } + + if (!ownerId) { + errors.ownerId = 'Owner is required'; + } + + if (Object.keys(errors).length > 0) { + return fail(400, { + errors, + values: { + subject, + description, + status, + priority, + dueDate, + ownerId, + accountId + } + }); + } + + try { + // Clean up accountId + if (accountId === '' || accountId === 'null') { + accountId = null; + } + + // Clean up dueDate + if (!dueDate || dueDate.trim() === '') { + dueDate = null; + } + + // Transform to Django field names + const djangoData = { + title: subject.trim(), + description: description ? description.trim() : null, + status: status || 'New', + priority: priority || 'Medium', + due_date: dueDate, + assigned_to: ownerId ? [ownerId] : [], + account: accountId + }; + + // Update task via API + await apiRequest( + `/tasks/${params.task_id}/`, + { + method: 'PUT', + body: djangoData + }, + { cookies, org } + ); + + throw redirect(303, `/tasks/${params.task_id}`); + } catch (err) { + // Check if this is a redirect + if (err?.status === 303) { + throw err; + } + + console.error('Error updating task:', err); + return fail(500, { + error: 'Failed to update task: ' + (err instanceof Error ? err.message : 'Unknown error'), + values: { + subject, + description, + status, + priority, + dueDate, + ownerId, + accountId + } + }); + } + } +}; diff --git a/frontend/src/routes/(app)/tasks/[task_id]/edit/+page.svelte b/frontend/src/routes/(app)/tasks/[task_id]/edit/+page.svelte new file mode 100644 index 00000000..d6cdf86d --- /dev/null +++ b/frontend/src/routes/(app)/tasks/[task_id]/edit/+page.svelte @@ -0,0 +1,274 @@ + + +
+
+ +
+
+
+
+
+ +
+
+

Edit Task

+

+ Update task details and settings +

+
+
+ +
+
+
+ + +
+ + {#if form?.message || form?.fieldError} +
+
+
+ +
+ {#if form?.message} +

{form.message}

+ {/if} + {#if form?.fieldError} +

+ Error with field '{form.fieldError[0]}': {form.fieldError[1]} +

+ {/if} +
+
+
+
+ {/if} + + +
+
+ +
+ + +
+ + +
+ + +
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+ + +
+
+
+ + +
+
+
+ + +
+
+
+
+
+
diff --git a/frontend/src/routes/(app)/tasks/board/[boardId]/+page.server.js b/frontend/src/routes/(app)/tasks/board/[boardId]/+page.server.js new file mode 100644 index 00000000..8f78da38 --- /dev/null +++ b/frontend/src/routes/(app)/tasks/board/[boardId]/+page.server.js @@ -0,0 +1,256 @@ +/** + * Board Detail Page - Server-side Loader + * + * Fetches board data including columns and tasks from Django API. + * + * Django Endpoints: + * - GET /api/boards/{id}/ - Get board with columns + * - GET /api/boards/{id}/columns/ - List columns with tasks + * - POST /api/boards/{id}/columns/ - Create column + * - POST /api/boards/columns/{id}/tasks/ - Create task in column + * - PUT /api/boards/tasks/{id}/ - Update task + * - DELETE /api/boards/tasks/{id}/ - Delete task + */ + +import { fail, error } from '@sveltejs/kit'; +import { apiRequest } from '$lib/api-helpers.js'; + +/** @type {import('./$types').PageServerLoad} */ +export async function load({ params, locals, cookies }) { + const { boardId } = params; + const user = locals.user; + const org = locals.org; + + try { + // Fetch board details with columns + const board = await apiRequest(`/boards/${boardId}/`, {}, { cookies, org }); + + // Fetch columns with tasks + const columns = await apiRequest(`/boards/${boardId}/columns/`, {}, { cookies, org }); + + return { + board: { + id: board.id, + name: board.name, + description: board.description, + isArchived: board.is_archived, + owner: board.owner, + createdAt: new Date(board.created_at), + updatedAt: new Date(board.updated_at) + }, + columns: columns.map((col) => ({ + id: col.id, + name: col.name, + order: col.order, + color: col.color, + limit: col.limit, + taskCount: col.task_count, + tasks: (col.tasks || []).map((task) => ({ + id: task.id, + title: task.title, + description: task.description, + order: task.order, + priority: task.priority, + dueDate: task.due_date ? new Date(task.due_date) : null, + completedAt: task.completed_at ? new Date(task.completed_at) : null, + isCompleted: task.is_completed, + isOverdue: task.is_overdue, + assignedTo: task.assigned_to || [], + accountId: task.account, + contactId: task.contact, + opportunityId: task.opportunity + })) + })), + user + }; + } catch (err) { + console.error('Error loading board:', err); + + if (err.message.includes('404') || err.message.includes('not found')) { + throw error(404, 'Board not found'); + } + + throw error(500, err.message || 'Failed to load board'); + } +} + +/** @type {import('./$types').Actions} */ +export const actions = { + /** + * Create a new column + */ + createColumn: async ({ params, request, locals, cookies }) => { + const { boardId } = params; + const org = locals.org; + + try { + const formData = await request.formData(); + const name = formData.get('name')?.toString(); + const color = formData.get('color')?.toString() || '#6B7280'; + + if (!name) { + return fail(400, { error: 'Column name is required' }); + } + + await apiRequest( + `/boards/${boardId}/columns/`, + { + method: 'POST', + body: { name, color } + }, + { cookies, org } + ); + + return { success: true }; + } catch (err) { + console.error('Error creating column:', err); + return fail(500, { error: err.message || 'Failed to create column' }); + } + }, + + /** + * Create a new task in a column + */ + createTask: async ({ params, request, locals, cookies }) => { + const { boardId } = params; + const org = locals.org; + + try { + const formData = await request.formData(); + const columnId = formData.get('columnId')?.toString(); + const title = formData.get('title')?.toString(); + const description = formData.get('description')?.toString() || ''; + const priority = formData.get('priority')?.toString() || 'medium'; + + if (!columnId || !title) { + return fail(400, { error: 'Column ID and title are required' }); + } + + await apiRequest( + `/boards/columns/${columnId}/tasks/`, + { + method: 'POST', + body: { + title, + description, + priority, + column: columnId + } + }, + { cookies, org } + ); + + return { success: true }; + } catch (err) { + console.error('Error creating task:', err); + return fail(500, { error: err.message || 'Failed to create task' }); + } + }, + + /** + * Update a task (move to different column, update details) + */ + updateTask: async ({ request, locals, cookies }) => { + const org = locals.org; + + try { + const formData = await request.formData(); + const taskId = formData.get('taskId')?.toString(); + const title = formData.get('title')?.toString(); + const description = formData.get('description')?.toString(); + const columnId = formData.get('columnId')?.toString(); + const order = formData.get('order')?.toString(); + const priority = formData.get('priority')?.toString(); + + if (!taskId) { + return fail(400, { error: 'Task ID is required' }); + } + + /** @type {Record} */ + const updateData = {}; + if (title) updateData.title = title; + if (description !== undefined) updateData.description = description; + if (columnId) updateData.column = columnId; + if (order) updateData.order = parseInt(order); + if (priority) updateData.priority = priority; + + await apiRequest( + `/boards/tasks/${taskId}/`, + { + method: 'PUT', + body: updateData + }, + { cookies, org } + ); + + return { success: true }; + } catch (err) { + console.error('Error updating task:', err); + return fail(500, { error: err.message || 'Failed to update task' }); + } + }, + + /** + * Delete a task + */ + deleteTask: async ({ request, locals, cookies }) => { + const org = locals.org; + + try { + const formData = await request.formData(); + const taskId = formData.get('taskId')?.toString(); + + if (!taskId) { + return fail(400, { error: 'Task ID is required' }); + } + + await apiRequest( + `/boards/tasks/${taskId}/`, + { + method: 'DELETE' + }, + { cookies, org } + ); + + return { success: true }; + } catch (err) { + console.error('Error deleting task:', err); + return fail(500, { error: err.message || 'Failed to delete task' }); + } + }, + + /** + * Move task to a different column (drag and drop) + */ + moveTask: async ({ request, locals, cookies }) => { + const org = locals.org; + + try { + const formData = await request.formData(); + const taskId = formData.get('taskId')?.toString(); + const columnId = formData.get('columnId')?.toString(); + const order = parseInt(formData.get('order')?.toString() || '0'); + + if (!taskId || !columnId) { + return fail(400, { error: 'Task ID and column ID are required' }); + } + + await apiRequest( + `/boards/tasks/${taskId}/`, + { + method: 'PUT', + body: { + column: columnId, + order + } + }, + { cookies, org } + ); + + return { success: true }; + } catch (err) { + console.error('Error moving task:', err); + return fail(500, { error: err.message || 'Failed to move task' }); + } + } +}; diff --git a/frontend/src/routes/(app)/tasks/board/[boardId]/+page.svelte b/frontend/src/routes/(app)/tasks/board/[boardId]/+page.svelte new file mode 100644 index 00000000..438c3c8b --- /dev/null +++ b/frontend/src/routes/(app)/tasks/board/[boardId]/+page.svelte @@ -0,0 +1,549 @@ + + +
+
+ Back to Boards +

{data.board.name}

+ {#if data.board.description} +

{data.board.description}

+ {/if} +
+ +
+ {#each data.columns as column (column.id)} +
handleDragOver(e, column.id)} + on:dragleave={handleDragLeave} + on:drop={(e) => handleDrop(e, column.id)} + > +
+

{column.name}

+ {column.tasks.length} +
+ +
+ {#each column.tasks as task (task.id)} +
handleDragStart(e, task, column.id)} + on:dragend={handleDragEnd} + > +
{task.title}
+ {#if task.description} +
{task.description}
+ {/if} +
+ + {task.priority} + + {#if task.dueDate} + + {formatDate(task.dueDate)} + + {/if} +
+ {#if task.assignedTo && task.assignedTo.length > 0} +
+ {#each task.assignedTo.slice(0, 3) as assignee} + + {assignee.user?.email?.charAt(0).toUpperCase() || '?'} + + {/each} + {#if task.assignedTo.length > 3} + +{task.assignedTo.length - 3} + {/if} +
+ {/if} +
+ {/each} + + {#if addingTaskToColumn === column.id} +
{ + return async ({ result }) => { + if (result.type === 'success') { + cancelAddingTask(); + await invalidateAll(); + } + }; + }} + > + + + + +
+ + +
+
+ {:else} + + {/if} +
+
+ {/each} + + +
+ {#if showAddColumn} +
{ + return async ({ result }) => { + if (result.type === 'success') { + showAddColumn = false; + newColumnName = ''; + await invalidateAll(); + } + }; + }} + > + + +
+ + +
+
+ {:else} + + {/if} +
+
+
+ + diff --git a/frontend/src/routes/(app)/tasks/calendar/+page.server.js b/frontend/src/routes/(app)/tasks/calendar/+page.server.js new file mode 100644 index 00000000..89844355 --- /dev/null +++ b/frontend/src/routes/(app)/tasks/calendar/+page.server.js @@ -0,0 +1,69 @@ +/** + * Calendar Page (Tasks with Due Dates) - API Version + * + * Migrated from Prisma to Django REST API + * Django endpoint: GET /api/tasks/ + * + * To activate: + * mv +page.server.js +page.server.prisma.js + * mv +page.server.api.js +page.server.js + */ + +import { error } from '@sveltejs/kit'; +import { apiRequest, buildQueryParams } from '$lib/api-helpers.js'; + +/** @type {import('./$types').PageServerLoad} */ +export async function load({ locals, cookies }) { + const user = locals.user; + const org = locals.org; + + if (!org) { + throw error(401, 'Organization context required'); + } + + try { + // Build query parameters - filter tasks with due dates + const queryParams = buildQueryParams({ + page: 1, + limit: 1000, + sort: 'due_date', + order: 'asc' + }); + + // Fetch tasks from Django API + const response = await apiRequest(`/tasks/?${queryParams.toString()}`, {}, { cookies, org }); + + // Handle Django response structure + // Django TaskListView returns { tasks: [...], tasks_count: ..., ... } + let allTasks = []; + if (response.tasks) { + allTasks = response.tasks; + } else if (Array.isArray(response)) { + allTasks = response; + } else if (response.results) { + allTasks = response.results; + } + + // Filter tasks with due dates only (Django might return all tasks) + const tasksWithDueDates = allTasks.filter((task) => task.due_date !== null); + + // Transform Django tasks to Prisma structure + const transformedTasks = tasksWithDueDates.map((task) => ({ + id: task.id, + subject: task.title, + description: task.description || '', + dueDate: task.due_date, + status: task.status, + priority: task.priority, + createdAt: task.created_at, + updatedAt: task.updated_at + })); + + return { + tasks: transformedTasks + }; + } catch (err) { + console.error('Error loading calendar tasks from API:', err); + throw error(500, `Failed to load calendar tasks: ${err.message}`); + } +} diff --git a/frontend/src/routes/(app)/tasks/calendar/+page.svelte b/frontend/src/routes/(app)/tasks/calendar/+page.svelte new file mode 100644 index 00000000..52294336 --- /dev/null +++ b/frontend/src/routes/(app)/tasks/calendar/+page.svelte @@ -0,0 +1,390 @@ + + +
+
+ +
+
+ +

Task Calendar

+
+

Manage and track your tasks with ease

+
+ +
+ +
+
+ +
+
+
+ +

+ {monthNames[month]} + {year} +

+ +
+ +
+
+ + +
+ {#each ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'] as day} +
+ {day} +
+ {/each} +
+ + +
+ {#each calendar as date, i} + {#if date} + + {:else} +
+ {/if} + {/each} +
+
+
+ + +
+
+
+

+ Tasks for {new Date(selectedDate + 'T00:00:00').toLocaleDateString('en-US', { + weekday: 'long', + year: 'numeric', + month: 'long', + day: 'numeric' + })} +

+
+ {selectedTasks.length} task{selectedTasks.length !== 1 ? 's' : ''} +
+
+ + +
+ + +
+

This Month

+
+
+ Total Tasks + + {totalMonthlyTasks} + +
+
+ Days with Tasks + {monthlyTasks.length} +
+
+
+
+
+
+
diff --git a/frontend/src/routes/(app)/tasks/list/+page.server.js b/frontend/src/routes/(app)/tasks/list/+page.server.js new file mode 100644 index 00000000..63143572 --- /dev/null +++ b/frontend/src/routes/(app)/tasks/list/+page.server.js @@ -0,0 +1,88 @@ +/** + * Tasks List Page - API Version + * + * Migrated from Prisma to Django REST API + * Django endpoint: GET /api/tasks/ + * + * To activate: + * mv +page.server.js +page.server.prisma.js + * mv +page.server.api.js +page.server.js + */ + +import { error } from '@sveltejs/kit'; +import { apiRequest, buildQueryParams } from '$lib/api-helpers.js'; + +/** @type {import('./$types').PageServerLoad} */ +export async function load({ locals, cookies }) { + const user = locals.user; + const org = locals.org; + + if (!org) { + throw error(401, 'Organization context required'); + } + + try { + // Build query parameters for tasks + const queryParams = buildQueryParams({ + page: 1, + limit: 1000, // Get all tasks without pagination + sort: 'created_at', + order: 'desc' + }); + + // Fetch tasks from Django API + const response = await apiRequest(`/tasks/?${queryParams.toString()}`, {}, { cookies, org }); + + // Handle Django response structure + // Django TaskListView returns { tasks: [...], tasks_count: ..., ... } + let tasks = []; + if (response.tasks) { + tasks = response.tasks; + } else if (Array.isArray(response)) { + tasks = response; + } else if (response.results) { + tasks = response.results; + } + + // Transform Django tasks to Prisma structure + const transformedTasks = tasks.map((task) => ({ + id: task.id, + subject: task.title, + description: task.description, + status: task.status, + priority: task.priority, + dueDate: task.due_date, + createdAt: task.created_at, + updatedAt: task.updated_at, + + // Owner (first assigned user) + owner: + task.assigned_to && task.assigned_to.length > 0 + ? { + id: task.assigned_to[0].id, + name: task.assigned_to[0].user_details?.email || task.assigned_to[0].email + } + : task.created_by + ? { + id: task.created_by.id, + name: task.created_by.email + } + : null, + + // Account + account: task.account + ? { + id: task.account.id, + name: task.account.name + } + : null + })); + + return { + tasks: transformedTasks + }; + } catch (err) { + console.error('Error loading tasks from API:', err); + throw error(500, `Failed to load tasks: ${err.message}`); + } +} diff --git a/frontend/src/routes/(app)/tasks/list/+page.svelte b/frontend/src/routes/(app)/tasks/list/+page.svelte new file mode 100644 index 00000000..9af21e26 --- /dev/null +++ b/frontend/src/routes/(app)/tasks/list/+page.svelte @@ -0,0 +1,426 @@ + + +
+
+ +
+
+
+

Tasks

+

+ Manage and track your team's tasks +

+
+ + + New Task + +
+
+ + +
+ {#if data.tasks.length === 0} +
+
+ +
+

No tasks yet

+

+ Get started by creating your first task +

+ + + Create Task + +
+ {:else} + + + + +
+ {#each data.tasks as task (task.id)} +
+
+
+ + {task.subject} + + {#if task.description} +

+ {task.description} +

+ {/if} +
+
+ + + + +
+
+ +
+
+ {#snippet statusIconCard(/** @type {string} */ status)} + {@const StatusIcon = getStatusIcon(status)} + + {/snippet} + {@render statusIconCard(task.status)} + + {task.status || 'N/A'} + +
+ +
+ {#snippet priorityIconCard(/** @type {string} */ priority)} + {@const PriorityIcon = getPriorityIcon(priority)} + + {/snippet} + {@render priorityIconCard(task.priority)} + + {task.priority || 'Medium'} + +
+
+ +
+
+ + Due: {formatDate(task.dueDate)} +
+
+ + {task.owner?.name || 'Unassigned'} +
+ {#if task.account?.name} +
+ + {task.account.name} +
+ {/if} +
+
+ {/each} +
+ {/if} +
+
+
+ + diff --git a/frontend/src/routes/(app)/tasks/new/+page.server.js b/frontend/src/routes/(app)/tasks/new/+page.server.js new file mode 100644 index 00000000..61415004 --- /dev/null +++ b/frontend/src/routes/(app)/tasks/new/+page.server.js @@ -0,0 +1,178 @@ +/** + * Task Create Page - API Version + * + * Migrated from Prisma to Django REST API + * Django endpoint: POST /api/tasks/ + * + * To activate: + * mv +page.server.js +page.server.prisma.js + * mv +page.server.api.js +page.server.js + */ + +import { fail, redirect } from '@sveltejs/kit'; +import { apiRequest } from '$lib/api-helpers.js'; + +/** @type {import('./$types').PageServerLoad} */ +export async function load({ locals, url, cookies }) { + const org = locals.org; + const urlAccountId = url.searchParams.get('accountId'); + + try { + // Fetch users and accounts in parallel + const [usersResponse, accountsResponse] = await Promise.all([ + apiRequest('/users/', {}, { cookies, org }), + apiRequest('/accounts/', {}, { cookies, org }) + ]); + + // Transform users + // Django UsersListView returns { active_users: { active_users: [...] }, ... } + const activeUsersList = usersResponse.active_users?.active_users || []; + const users = activeUsersList.map((user) => ({ + id: user.id, + name: user.user_details?.email || user.email, + email: user.user_details?.email || user.email + })); + + // Transform accounts + let accounts = []; + if (accountsResponse.results) { + accounts = accountsResponse.results; + } else if (accountsResponse.active_accounts?.open_accounts) { + accounts = accountsResponse.active_accounts.open_accounts; + } + + const transformedAccounts = accounts.map((acc) => ({ + id: acc.id, + name: acc.name + })); + + // If accountId is provided in URL, validate it exists + if (urlAccountId) { + const accountExists = transformedAccounts.some((account) => account.id === urlAccountId); + if (!accountExists) { + throw redirect(303, '/tasks/new'); + } + } + + return { + users, + accounts: transformedAccounts + }; + } catch (err) { + // Check if this is a redirect + if (err?.status === 303) { + throw err; + } + + console.error('Error loading task create page:', err); + return { + users: [], + accounts: [] + }; + } +} + +/** @type {import('./$types').Actions} */ +export const actions = { + default: async ({ request, locals, cookies }) => { + const { user, org } = locals; + + const formData = await request.formData(); + + const subject = formData.get('subject')?.toString(); + const status = formData.get('status')?.toString() || 'New'; + const priority = formData.get('priority')?.toString() || 'Medium'; + const dueDateStr = formData.get('dueDate')?.toString(); + const ownerId = formData.get('ownerId')?.toString(); + let accountId = formData.get('accountId')?.toString(); + const description = formData.get('description')?.toString(); + + // Validation + const errors = {}; + + if (!subject || subject.trim().length === 0) { + errors.subject = 'Subject is required'; + } + + if (!ownerId) { + errors.ownerId = 'Owner is required'; + } + + // Clean up accountId + if (accountId && (accountId === '' || accountId === 'null')) { + accountId = null; + } + + if (Object.keys(errors).length > 0) { + return fail(400, { + errors, + values: { + subject, + status, + priority, + dueDate: dueDateStr, + ownerId, + accountId, + description + } + }); + } + + try { + // Transform to Django field names + const djangoData = { + title: subject, + status: status, + priority: priority, + due_date: dueDateStr || null, + description: description || null, + assigned_to: ownerId ? [ownerId] : [], + account: accountId || null + }; + + // Create task via API + const response = await apiRequest( + '/tasks/', + { + method: 'POST', + body: djangoData + }, + { cookies, org } + ); + + const taskId = response.id || response.task_obj?.id; + + // Redirect based on where the task was created from + if (accountId) { + // If task was created from an account page, redirect back to that account + throw redirect(303, `/accounts/${accountId}`); + } else { + // Otherwise, redirect to the tasks list or detail if we have taskId + if (taskId) { + throw redirect(303, `/tasks/${taskId}`); + } else { + throw redirect(303, '/tasks/list'); + } + } + } catch (err) { + // Check if this is a redirect + if (err?.status === 303) { + throw err; + } + + console.error('Error creating task:', err); + return fail(500, { + error: 'Failed to create task: ' + (err instanceof Error ? err.message : 'Unknown error'), + values: { + subject, + status, + priority, + dueDate: dueDateStr, + ownerId, + accountId, + description + } + }); + } + } +}; diff --git a/frontend/src/routes/(app)/tasks/new/+page.svelte b/frontend/src/routes/(app)/tasks/new/+page.svelte new file mode 100644 index 00000000..15deebdd --- /dev/null +++ b/frontend/src/routes/(app)/tasks/new/+page.svelte @@ -0,0 +1,353 @@ + + +
+
+ +
+
+
+

Create New Task

+

+ {#if selectedAccount} + Add a new task for {selectedAccount.name} + {:else} + Add a new task to keep track of your work + {/if} +

+
+ +
+
+ + +
+ {#if form?.error} +
+
+
+ + + +
+
+

{form.error}

+
+
+
+ {/if} + +
{ + isSubmitting = true; + return async ({ update }) => { + await update(); + isSubmitting = false; + }; + }} + class="p-6" + > + + {#if urlAccountId} + + {/if} + +
+ +
+

+ + Task Details +

+ +
+ +
+ + +
+ + +
+
+ + +
+ +
+ + +
+ +
+ + +
+
+
+
+ + +
+

+ + Assignment +

+ +
+ +
+ + +
+ + +
+ + {#if urlAccountId} + + +

+ Account pre-selected from URL +

+ {:else} + + + {/if} +
+
+
+ + +
+
+ + +
+
+
+ + +
+ + +
+
+
+
+
+ + diff --git a/frontend/src/routes/(app)/users/+page.server.js b/frontend/src/routes/(app)/users/+page.server.js new file mode 100644 index 00000000..1ba642e8 --- /dev/null +++ b/frontend/src/routes/(app)/users/+page.server.js @@ -0,0 +1,299 @@ +/** + * Users Management Page - API Version + * + * Migrated from Prisma to Django REST API + * Allows organization admins to: + * - View all users in the organization + * - Add users to the organization by email + * - Change user roles (ADMIN/USER) + * - Remove users from the organization + * - Update organization details + * + * Django Endpoints: + * - GET /api/users/ - List organization users + * - POST /api/users/ - Create new user + * - GET /api/user/{id}/ - Get user details + * - PUT /api/user/{id}/ - Update user/profile + * - DELETE /api/user/{id}/ - Deactivate user (soft delete) + */ + +import { error, fail } from '@sveltejs/kit'; +import { env } from '$env/dynamic/public'; + +const API_BASE_URL = `${env.PUBLIC_DJANGO_API_URL}/api`; + +/** + * Make authenticated API request + * @param {string} endpoint + * @param {Object} options + * @param {Object} context + * @returns {Promise} + */ +async function apiRequest(endpoint, options = {}, context) { + const { cookies, org } = context; + const accessToken = cookies.get('jwt_access') || cookies.get('access_token'); + + const response = await fetch(`${API_BASE_URL}${endpoint}`, { + ...options, + headers: { + 'Content-Type': 'application/json', + Authorization: `Bearer ${accessToken}`, + org: org.id, + ...options.headers + } + }); + + if (!response.ok) { + const errorData = await response.json().catch(() => ({ error: response.statusText })); + throw new Error(errorData.errors || errorData.error || response.statusText); + } + + return await response.json(); +} + +/** @type {import('./$types').PageServerLoad} */ +export async function load({ locals, cookies }) { + const org = locals.org; + const user = locals.user; + + try { + // Fetch users list (returns active and inactive users) + const data = await apiRequest('/users/', {}, { cookies, org }); + + // Django returns: { active_users: {...}, inactive_users: {...}, roles: [...] } + const activeUsers = data.active_users?.active_users || []; + const inactiveUsers = data.inactive_users?.inactive_users || []; + + // Check if current user is admin + // Django returns user_details with id and email + const currentUserProfile = activeUsers.find( + (p) => p.user_details?.id === user.id || p.user_details?.email === user.email + ); + const isAdmin = + currentUserProfile?.role === 'ADMIN' || currentUserProfile?.is_organization_admin; + + if (!isAdmin) { + return { + error: { + name: 'You do not have permission to access this page' + } + }; + } + + // Combine active and inactive users, transform to match Prisma format + const allUsers = [ + ...activeUsers.map((profile) => ({ + userId: profile.user_details?.id || profile.id, + organizationId: org.id, + role: profile.role, + user: { + id: profile.user_details?.id || profile.id, + email: profile.user_details?.email || 'N/A', + name: profile.user_details?.email?.split('@')[0] || 'N/A' + }, + isActive: true, + profile + })), + ...inactiveUsers.map((profile) => ({ + userId: profile.user_details?.id || profile.id, + organizationId: org.id, + role: profile.role, + user: { + id: profile.user_details?.id || profile.id, + email: profile.user_details?.email || 'N/A', + name: profile.user_details?.email?.split('@')[0] || 'N/A' + }, + isActive: false, + profile + })) + ]; + + return { + organization: { + id: org.id, + name: org.name, + domain: org.domain || '', + description: org.description || '' + }, + users: allUsers, + user: { id: user.id } + }; + } catch (err) { + console.error('Error loading users:', err); + return { + error: { + name: err.message || 'Failed to load users' + } + }; + } +} + +/** @type {import('./$types').Actions} */ +export const actions = { + /** + * Update organization details + */ + update: async ({ request, locals, cookies }) => { + const org = locals.org; + const user = locals.user; + + try { + // Check if user is admin (done in API, but double-check client-side) + const formData = await request.formData(); + const name = formData.get('name')?.toString().trim(); + + if (!name) { + return fail(400, { error: 'Name is required' }); + } + + // Update organization via Django API + await apiRequest( + `/org/${org.id}/`, + { + method: 'PUT', + body: JSON.stringify({ name }) + }, + { cookies, org } + ); + + return { success: true }; + } catch (err) { + console.error('Error updating organization:', err); + return fail(500, { error: err.message || 'Failed to update organization' }); + } + }, + + /** + * Add user to organization by email + */ + add_user: async ({ request, locals, cookies }) => { + const org = locals.org; + + try { + const formData = await request.formData(); + const email = formData.get('email')?.toString().trim().toLowerCase(); + const role = formData.get('role')?.toString(); + + if (!email || !role) { + return fail(400, { error: 'Email and role are required' }); + } + + // Create user via Django API + // Django endpoint: POST /api/users/ + const userData = { + email, + role, + // Django requires these fields for user creation + username: email.split('@')[0], + password: Math.random().toString(36).slice(-12) // Random password + }; + + await apiRequest( + '/users/', + { + method: 'POST', + body: JSON.stringify(userData) + }, + { cookies, org } + ); + + return { success: true }; + } catch (err) { + console.error('Error adding user:', err); + // Check for specific error messages + if ( + err.message.includes('already exists') || + err.message.includes('already in organization') + ) { + return fail(400, { error: 'User already in organization' }); + } + if (err.message.includes('not found')) { + return fail(404, { error: 'No user found with that email' }); + } + return fail(500, { error: err.message || 'Failed to add user' }); + } + }, + + /** + * Edit user role + */ + edit_role: async ({ request, locals, cookies }) => { + const org = locals.org; + const user = locals.user; + + try { + const formData = await request.formData(); + const user_id = formData.get('user_id')?.toString(); + const role = formData.get('role')?.toString(); + + if (!user_id || !role) { + return fail(400, { error: 'User and role are required' }); + } + + // Don't allow editing own role + if (user_id === user.id) { + return fail(400, { error: 'You cannot change your own role' }); + } + + // Update user role via Django API + // Django endpoint: PUT /api/user/{id}/ + await apiRequest( + `/user/${user_id}/`, + { + method: 'PUT', + body: JSON.stringify({ role }) + }, + { cookies, org } + ); + + return { success: true }; + } catch (err) { + console.error('Error editing role:', err); + if (err.message.includes('at least one admin')) { + return fail(400, { error: 'Organization must have at least one admin' }); + } + return fail(500, { error: err.message || 'Failed to edit role' }); + } + }, + + /** + * Remove user from organization + */ + remove_user: async ({ request, locals, cookies }) => { + const org = locals.org; + const user = locals.user; + + try { + const formData = await request.formData(); + const user_id = formData.get('user_id')?.toString(); + + if (!user_id) { + return fail(400, { error: 'User is required' }); + } + + // Don't allow removing self + if (user_id === user.id) { + return fail(400, { error: 'You cannot remove yourself' }); + } + + // Remove user via Django API (soft delete - set is_active=False) + // Django endpoint: PUT /api/user/{id}/status/ + await apiRequest( + `/user/${user_id}/status/`, + { + method: 'POST', + body: JSON.stringify({ is_active: false }) + }, + { cookies, org } + ); + + return { success: true }; + } catch (err) { + console.error('Error removing user:', err); + if (err.message.includes('at least one admin')) { + return fail(400, { error: 'Organization must have at least one admin' }); + } + return fail(500, { error: err.message || 'Failed to remove user' }); + } + } +}; diff --git a/frontend/src/routes/(app)/users/+page.svelte b/frontend/src/routes/(app)/users/+page.svelte new file mode 100644 index 00000000..eb4362fb --- /dev/null +++ b/frontend/src/routes/(app)/users/+page.svelte @@ -0,0 +1,468 @@ + + +
+
+ +
+
+

Organization Settings

+

+ Manage your organization and team members +

+
+ + + Logout + +
+ + +
+
+
+
+
+ +
+
+

{org.name}

+
+ {#if org.domain} + + + {org.domain} + + {/if} + + + {users.length} member{users.length !== 1 ? 's' : ''} + +
+
+
+ {#if !editing} + + {/if} +
+ + {#if org.description && !editing} +

{org.description}

+ {/if} + + {#if editing} +
+
+
+ +
+ + +
+
+ +
+ +
+ + +
+
+
+ +
+ + +
+ +
+ + +
+
+ {/if} +
+
+ + +
+
+
+
+
+ +
+

Team Members

+
+
+ + +
+

+ + Add New Member +

+
+
+ + +
+
+ + +
+ +
+
+ + +
+
+ + + + + + + + + + + {#each users as user, i} + + + + + + + {/each} + +
+ Member + + Role + + Joined + + Actions +
+
+ {#if user.avatar} + {user.name} + {:else} +
+ +
+ {/if} +
+
+ {user.name} + {#if user.isSelf} + + You + + {/if} +
+
{user.email}
+
+
+
+ {#if user.isSelf} + + {#snippet roleIcon(/** @type {string} */ role)} + {@const RoleIcon = roleIcons[role] || User} + + {/snippet} + {@render roleIcon(user.role)} + {user.role} + + {:else if user.editingRole} +
+ + + + + +
+ {:else} + + {/if} +
+ {user.joined} + + {#if user.isSelf} + — + {:else} +
{ + if (!confirm('Remove this user from the organization?')) { + e.preventDefault(); + } + }} + > + + +
+ {/if} +
+
+
+
+
+
+
diff --git a/frontend/src/routes/(no-layout)/bounce/+page.svelte b/frontend/src/routes/(no-layout)/bounce/+page.svelte new file mode 100644 index 00000000..731e6d36 --- /dev/null +++ b/frontend/src/routes/(no-layout)/bounce/+page.svelte @@ -0,0 +1,9 @@ + diff --git a/frontend/src/routes/(no-layout)/login/+page.server.js b/frontend/src/routes/(no-layout)/login/+page.server.js new file mode 100644 index 00000000..0b1f04e0 --- /dev/null +++ b/frontend/src/routes/(no-layout)/login/+page.server.js @@ -0,0 +1,188 @@ +/** + * Login Page - Secure OAuth Implementation + * + * Security features: + * - PKCE (Proof Key for Code Exchange) for authorization code protection + * - Cryptographic state parameter for CSRF protection + * - Server-side token exchange via Django backend (no client secret in frontend) + * - Secure httpOnly cookies for sensitive data + * + * Django endpoint: POST /api/auth/google/callback/ + */ + +import axios from 'axios'; +import { redirect } from '@sveltejs/kit'; +import { env } from '$env/dynamic/private'; +import { env as publicEnv } from '$env/dynamic/public'; +import { generateCodeVerifier, generateCodeChallenge, generateState } from '$lib/utils/pkce.js'; + +const GOOGLE_AUTH_URL = 'https://accounts.google.com/o/oauth2/v2/auth'; +const GOOGLE_SCOPES = ['openid', 'email', 'profile'].join(' '); + +// Cookie configuration +const COOKIE_OPTIONS = { + path: '/', + httpOnly: true, + sameSite: 'lax' +}; + +/** + * Get secure cookie options based on environment + * @param {number} maxAge - Cookie max age in seconds + * @returns {object} Cookie options with secure flag for production + */ +function getCookieOptions(maxAge) { + return { + ...COOKIE_OPTIONS, + secure: env.NODE_ENV === 'production', + maxAge + }; +} + +/** @type {import('@sveltejs/kit').ServerLoad} */ +export async function load({ url, cookies }) { + const code = url.searchParams.get('code'); + const returnedState = url.searchParams.get('state'); + const error = url.searchParams.get('error'); + const errorDescription = url.searchParams.get('error_description'); + + // Handle OAuth error returned from Google + if (error) { + console.error('Google OAuth error:', error, errorDescription); + return { + google_url: null, + error: errorDescription || `OAuth error: ${error}` + }; + } + + // Handle OAuth callback with authorization code + if (code) { + return handleOAuthCallback(code, returnedState, cookies); + } + + // Check if user is already authenticated + const jwtAccess = cookies.get('jwt_access'); + if (jwtAccess) { + throw redirect(307, '/org'); + } + + // Generate OAuth parameters and return login URL + return generateOAuthUrl(cookies); +} + +/** + * Handle the OAuth callback when Google redirects back with an authorization code + * @param {string} code - Authorization code from Google + * @param {string|null} returnedState - State parameter returned from Google + * @param {import('@sveltejs/kit').Cookies} cookies - SvelteKit cookies + */ +async function handleOAuthCallback(code, returnedState, cookies) { + // Retrieve and immediately clear OAuth cookies (one-time use) + const savedState = cookies.get('oauth_state'); + const codeVerifier = cookies.get('oauth_code_verifier'); + + // Clear OAuth cookies regardless of outcome + cookies.delete('oauth_state', { path: '/' }); + cookies.delete('oauth_code_verifier', { path: '/' }); + + // Validate state parameter (CSRF protection) + if (!savedState || savedState !== returnedState) { + console.error('OAuth state mismatch - possible CSRF attack'); + console.error('Expected:', savedState?.substring(0, 10) + '...'); + console.error('Received:', returnedState?.substring(0, 10) + '...'); + throw redirect(307, '/login?error=state_mismatch'); + } + + // Validate code verifier exists + if (!codeVerifier) { + console.error('Missing PKCE code verifier - session may have expired'); + throw redirect(307, '/login?error=session_expired'); + } + + const redirect_uri = env.GOOGLE_LOGIN_DOMAIN + '/login'; + + try { + // Exchange code for tokens via Django backend + // The backend handles the actual token exchange with Google using the client secret + const apiUrl = publicEnv.PUBLIC_DJANGO_API_URL; + console.log('Using API URL:', apiUrl); + const response = await axios.post( + `${apiUrl}/api/auth/google/callback/`, + { + code, + code_verifier: codeVerifier, + redirect_uri + }, + { + headers: { 'Content-Type': 'application/json' }, + timeout: 30000 + } + ); + + const { access_token, refresh_token, user } = response.data; + + // Store JWT tokens in secure httpOnly cookies + cookies.set('jwt_access', access_token, getCookieOptions(60 * 60 * 24)); // 1 day + cookies.set('jwt_refresh', refresh_token, getCookieOptions(60 * 60 * 24 * 365)); // 1 year + } catch (error) { + console.error('OAuth token exchange failed - Full error:', error); + console.error('Response data:', error.response?.data); + console.error('Response status:', error.response?.status); + const errorMessage = error.response?.data?.error || error.message || 'Unknown error'; + + // Provide user-friendly error messages + let userError = 'auth_failed'; + const errStr = String(errorMessage); + if (errStr.includes('code_verifier')) { + userError = 'pkce_failed'; + } else if (errStr.includes('expired')) { + userError = 'code_expired'; + } + console.error('Final error message:', errorMessage); + + throw redirect(307, `/login?error=${userError}`); + } + + // Success - redirect to organization selection + throw redirect(307, '/org'); +} + +/** + * Generate Google OAuth URL with PKCE parameters + * @param {import('@sveltejs/kit').Cookies} cookies - SvelteKit cookies + * @returns {object} Object containing the Google OAuth URL + */ +function generateOAuthUrl(cookies) { + // Generate PKCE parameters + const codeVerifier = generateCodeVerifier(); + const codeChallenge = generateCodeChallenge(codeVerifier); + + // Generate cryptographically random state for CSRF protection + const state = generateState(); + + // Store PKCE verifier and state in secure httpOnly cookies + // These expire in 10 minutes - should be plenty for OAuth flow + const oauthCookieMaxAge = 60 * 10; // 10 minutes + + cookies.set('oauth_code_verifier', codeVerifier, getCookieOptions(oauthCookieMaxAge)); + cookies.set('oauth_state', state, getCookieOptions(oauthCookieMaxAge)); + + // Build Google OAuth URL with all required parameters + const redirect_uri = env.GOOGLE_LOGIN_DOMAIN + '/login'; + + const params = new URLSearchParams({ + client_id: env.GOOGLE_CLIENT_ID, + redirect_uri, + response_type: 'code', + scope: GOOGLE_SCOPES, + state, + code_challenge: codeChallenge, + code_challenge_method: 'S256', + access_type: 'offline', // Request refresh token + prompt: 'consent' // Always show consent screen (required for refresh token) + }); + + const google_login_url = `${GOOGLE_AUTH_URL}?${params.toString()}`; + + return { google_url: google_login_url }; +} diff --git a/frontend/src/routes/(no-layout)/login/+page.svelte b/frontend/src/routes/(no-layout)/login/+page.svelte new file mode 100644 index 00000000..108b3f05 --- /dev/null +++ b/frontend/src/routes/(no-layout)/login/+page.svelte @@ -0,0 +1,254 @@ + + + + Login | BottleCRM - Free Open-Source CRM for Startups + + + + +
+ +
+
+ + +
+
+ +
+
+
+ + + + +
+
+ +
+ +
+ + +
+ +
+
+ BottleCRM Logo +
+ +
+

Welcome Back

+

+ Sign in to your free BottleCRM account and start managing your customer + relationships more effectively. +

+
+
+ + +
+
+
+ + Free CRM Features +
+
    +
  • + + Unlimited contacts & users +
  • +
  • + + Self-hosted solution +
  • +
  • + + No subscription fees +
  • +
+
+
+ + + + + +
+
+ + Your data is secure and private +
+ + + +
+
+
+ + +
+

+ New to BottleCRM? + + Learn more about our free CRM + +

+
+
+
+
+
+
+
diff --git a/frontend/src/routes/(no-layout)/logout/+page.server.js b/frontend/src/routes/(no-layout)/logout/+page.server.js new file mode 100644 index 00000000..dd46cb45 --- /dev/null +++ b/frontend/src/routes/(no-layout)/logout/+page.server.js @@ -0,0 +1,35 @@ +/** + * Logout Page - API Version + * + * Migrated from Prisma to Django REST API + * Clears JWT tokens and session data + * + * To activate: + * mv +page.server.js +page.server.prisma.js + * mv +page.server.api.js +page.server.js + */ + +import { redirect } from '@sveltejs/kit'; + +/** @type {import('./$types').PageServerLoad} */ +export async function load({ locals, cookies }) { + // Clear all authentication-related cookies + const cookiesToClear = ['jwt_access', 'jwt_refresh', 'org', 'oauth_state', 'oauth_code_verifier']; + + for (const cookieName of cookiesToClear) { + if (cookies.get(cookieName)) { + await cookies.delete(cookieName, { path: '/' }); + } + } + + // Clear locals + if (locals.user) { + delete locals.user; + } + if (locals.org) { + delete locals.org; + } + + // Redirect to login page + throw redirect(303, '/login'); +} diff --git a/frontend/src/routes/(no-layout)/org/+page.server.js b/frontend/src/routes/(no-layout)/org/+page.server.js new file mode 100644 index 00000000..ed5c6878 --- /dev/null +++ b/frontend/src/routes/(no-layout)/org/+page.server.js @@ -0,0 +1,128 @@ +/** + * Organization Selection Page - API Version + * + * Migrated from Prisma to Django REST API + * Django endpoint: GET /api/auth/me/ (returns user with organizations array) + * + * To activate: + * mv +page.server.js +page.server.prisma.js + * mv +page.server.api.js +page.server.js + */ + +import { env as publicEnv } from '$env/dynamic/public'; +import { redirect, fail } from '@sveltejs/kit'; +import axios from 'axios'; + +/** @type {import('./$types').PageServerLoad} */ +export async function load({ cookies, locals }) { + const user = locals.user; + + if (!user) { + return { orgs: [] }; + } + + try { + const jwtAccess = cookies.get('jwt_access'); + if (!jwtAccess) { + return { orgs: [] }; + } + + const apiUrl = publicEnv.PUBLIC_DJANGO_API_URL; + + // Fetch current user with organization memberships + // The /api/auth/me/ endpoint returns user data with organizations array + const response = await axios.get(`${apiUrl}/api/auth/me/`, { + headers: { + Authorization: `Bearer ${jwtAccess}` + } + }); + + // Extract organizations from the user data + // Django's MeView returns user with organizations array + let orgs = []; + + if (response.data.organizations && Array.isArray(response.data.organizations)) { + orgs = response.data.organizations.map((org) => ({ + id: org.id, + name: org.name, + logo: org.logo || null, + role: org.role || 'USER' + })); + } + + return { orgs }; + } catch (error) { + console.error('Error fetching organizations:', error); + // Return empty array so user can create a new organization + return { orgs: [] }; + } +} + +/** @type {import('./$types').Actions} */ +export const actions = { + selectOrg: async ({ request, cookies }) => { + const formData = await request.formData(); + const orgId = formData.get('org_id')?.toString(); + const orgName = formData.get('org_name')?.toString(); + + if (!orgId) { + return fail(400, { error: 'Organization ID is required' }); + } + + const jwtAccess = cookies.get('jwt_access'); + if (!jwtAccess) { + throw redirect(307, '/login'); + } + + const apiUrl = publicEnv.PUBLIC_DJANGO_API_URL; + + try { + // Call switch-org endpoint to get new tokens with org context + const response = await axios.post( + `${apiUrl}/api/auth/switch-org/`, + { org_id: orgId }, + { + headers: { + Authorization: `Bearer ${jwtAccess}`, + 'Content-Type': 'application/json' + } + } + ); + + const { access_token, refresh_token, current_org } = response.data; + + // Update cookies with new tokens that have org context embedded + cookies.set('jwt_access', access_token, { + path: '/', + httpOnly: true, + sameSite: 'lax', + secure: process.env.NODE_ENV === 'production', + maxAge: 60 * 60 * 24 // 1 day + }); + + cookies.set('jwt_refresh', refresh_token, { + path: '/', + httpOnly: true, + sameSite: 'lax', + secure: process.env.NODE_ENV === 'production', + maxAge: 60 * 60 * 24 * 365 // 1 year + }); + + // Set org cookie for reference + cookies.set('org', orgId, { + path: '/', + sameSite: 'strict', + maxAge: 60 * 60 * 24 * 365 + }); + + // Redirect to app + throw redirect(303, '/'); + } catch (error) { + if (error.status === 303) { + throw error; // Re-throw redirect + } + console.error('Org switch failed:', error); + return fail(500, { error: 'Failed to switch organization' }); + } + } +}; diff --git a/frontend/src/routes/(no-layout)/org/+page.svelte b/frontend/src/routes/(no-layout)/org/+page.svelte new file mode 100644 index 00000000..6df63209 --- /dev/null +++ b/frontend/src/routes/(no-layout)/org/+page.svelte @@ -0,0 +1,116 @@ + + +
+
+ +
+
+

Select Organization

+

Choose an organization to continue

+
+ + + + +
+ + + {#if orgs.length > 0} +
+ {#each orgs as org} +
{ + loading = true; + return async ({ update }) => { + await update(); + loading = false; + }; + }} + class="group cursor-pointer rounded-xl border border-gray-200 bg-white shadow-sm transition-all duration-200 hover:border-blue-300 hover:shadow-md" + > + + + +
+ {/each} +
+ {:else} +
+
+ +
+

No organizations found

+

Create your first organization to get started

+ + + Create Organization + +
+ {/if} + + + {#if orgs.length > 0} + + + + {/if} +
+
diff --git a/frontend/src/routes/(no-layout)/org/new/+page.server.js b/frontend/src/routes/(no-layout)/org/new/+page.server.js new file mode 100644 index 00000000..2b19afb3 --- /dev/null +++ b/frontend/src/routes/(no-layout)/org/new/+page.server.js @@ -0,0 +1,113 @@ +/** + * Organization Create Page - API Version + * + * Migrated from Prisma to Django REST API + * Django endpoint: POST /api/org/ + * + * To activate: + * mv +page.server.js +page.server.prisma.js + * mv +page.server.api.js +page.server.js + */ + +import { env } from '$env/dynamic/private'; +import { env as publicEnv } from '$env/dynamic/public'; +import axios from 'axios'; + +/** @type {import('./$types').PageServerLoad} */ +export async function load({ cookies }) { + // No data needed for load +} + +/** @satisfies {import('./$types').Actions} */ +export const actions = { + default: async ({ request, cookies, locals }) => { + // Get the user from locals + const user = locals.user; + + if (!user) { + return { + error: { + name: 'You must be logged in to create an organization' + } + }; + } + + // Get the submitted form data + const formData = await request.formData(); + const orgName = formData.get('org_name')?.toString(); + + if (!orgName || orgName.trim().length === 0) { + return { + error: { + name: 'Organization name is required' + } + }; + } + + try { + const jwtAccess = cookies.get('jwt_access'); + if (!jwtAccess) { + return { + error: { + name: 'Authentication required' + } + }; + } + + const apiUrl = publicEnv.PUBLIC_DJANGO_API_URL; + + // Create organization and profile via Django API + // Django's OrgProfileCreateView creates both org and profile + const response = await axios.post( + `${apiUrl}/api/org/`, + { + name: orgName.trim() + }, + { + headers: { + Authorization: `Bearer ${jwtAccess}`, + 'Content-Type': 'application/json' + } + } + ); + + // Response should contain the created org + const newOrg = response.data.org || response.data; + + // Set org cookie for the newly created org + await cookies.set('org', newOrg.id, { + path: '/', + httpOnly: true, + sameSite: 'strict', + secure: env.NODE_ENV === 'production' + }); + + // Return success + return { + data: { + name: orgName + } + }; + } catch (err) { + console.error('Error creating organization:', err); + + // Check if it's a duplicate name error + if (err.response?.status === 400) { + return { + error: { + name: + err.response.data?.name?.[0] || + err.response.data?.error || + 'Organization with this name may already exist' + } + }; + } + + return { + error: { + name: 'An unexpected error occurred while creating the organization.' + } + }; + } + } +}; diff --git a/frontend/src/routes/(no-layout)/org/new/+page.svelte b/frontend/src/routes/(no-layout)/org/new/+page.svelte new file mode 100644 index 00000000..dc6dda17 --- /dev/null +++ b/frontend/src/routes/(no-layout)/org/new/+page.svelte @@ -0,0 +1,86 @@ + + +
+
+ +
+
+ +
+

Create Organization

+

Set up your new organization to get started

+
+ + +
+
+ +
+ + +
+ + + {#if form?.error} +
+ + {form.error.name} +
+ {/if} + + + {#if form?.data} +
+ + + Organization "{form.data.name}" created successfully! + +
+ {/if} + + + + + + +
+
+
+
diff --git a/frontend/static/funding.json b/frontend/static/funding.json new file mode 100644 index 00000000..d7c2e9e3 --- /dev/null +++ b/frontend/static/funding.json @@ -0,0 +1,122 @@ +{ + "version": "v1.0.0", + + "entity": { + "type": "organisation", + "role": "owner", + "name": "MicroPyramid Informatics Private Limited", + "email": "hello@micropyramid.com", + "phone": "+91-9959166266", + "description": "MicroPyramid is a technology company specializing in web development, mobile applications, and SaaS solutions. We build modern, scalable software solutions for businesses of all sizes, with expertise in Python, Django, React, and other cutting-edge technologies.", + "webpageUrl": { + "url": "https://micropyramid.com", + "wellKnown": "" + } + }, + + "projects": [ + { + "guid": "startup-crm", + "name": "BottleCRM", + "description": "BottleCRM is a dynamic, SaaS CRM platform designed to streamline the entire CRM needs of startups and enterprises. Built with modern web technologies including SvelteKit, Svelte 5, and Prisma, it offers a seamless experience for users through robust role-based access control (RBAC). Each user role is equipped with tailored functionalities to enhance efficiency, engagement, and management, ensuring a streamlined and secure business process.", + "webpageUrl": { + "url": "https://bottlecrm.io", + "wellKnown": "" + }, + "repositoryUrl": { + "url": "https://github.com/MicroPyramid/Django-CRM", + "wellKnown": "" + }, + "licenses": ["spdx:MIT"], + "tags": [ + "crm", + "saas", + "business-tools", + "customer-management", + "sales", + "svelte", + "typescript", + "web-application", + "enterprise", + "startup" + ] + } + ], + + "funding": { + "channels": [ + { + "guid": "paypal", + "type": "payment-provider", + "address": "paypal@micropyramid.com", + "description": "PayPal payments for international transactions" + }, + { + "guid": "bank-transfer", + "type": "bank", + "address": "Contact hello@micropyramid.com for bank details", + "description": "Direct bank transfers for larger contributions" + }, + { + "guid": "github-sponsors", + "type": "payment-provider", + "address": "https://github.com/sponsors/micropyramid", + "description": "GitHub Sponsors for recurring monthly support" + } + ], + + "plans": [ + { + "guid": "monthly-supporter", + "status": "active", + "name": "Monthly Supporter", + "description": "Monthly support to help maintain and improve BottleCRM with regular updates, bug fixes, and new features.", + "amount": 25, + "currency": "USD", + "frequency": "monthly", + "channels": ["paypal", "github-sponsors"] + }, + { + "guid": "yearly-backer", + "status": "active", + "name": "Yearly Backer", + "description": "Annual support for sustained development and maintenance of BottleCRM platform.", + "amount": 250, + "currency": "USD", + "frequency": "yearly", + "channels": ["paypal", "bank-transfer", "github-sponsors"] + }, + { + "guid": "enterprise-sponsor", + "status": "active", + "name": "Enterprise Sponsor", + "description": "Enterprise-level sponsorship for priority support, custom features, and dedicated development resources.", + "amount": 1000, + "currency": "USD", + "frequency": "monthly", + "channels": ["bank-transfer", "paypal"] + }, + { + "guid": "one-time-donation", + "status": "active", + "name": "One-time Contribution", + "description": "One-time donation to support BottleCRM development. Any amount is appreciated.", + "amount": 0, + "currency": "USD", + "frequency": "one-time", + "channels": ["paypal", "github-sponsors"] + } + ], + + "history": [ + { + "year": 2025, + "income": 0, + "expenses": 5000, + "taxes": 0, + "currency": "USD", + "description": "Initial development phase with investment in infrastructure, development tools, and hosting." + } + ] + } +} diff --git a/frontend/static/logo.png b/frontend/static/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..1433123fad8d9015bf71157a430d11313501e57b GIT binary patch literal 2595 zcmV+;3f%RHP)gGd9 zQLV17CM`IPkCEu+;_B$+^z!Yhs;bP($+x$+Mod&eM^7*}K=}3WqNAiNGd<+u-$qMQ zprNBYLQBBFzwz(tR$F4<-rCdB&-?iEo1LF~eu7F*SJ&3lm6w@zd3{}BXHHaGH$6tW zySlQovxtk1V`ptyU1KOOIqvM|Z*zFX#KX;||7L}u=DwT>l9m)H)vsIOTl@Gp9ea@V1s`T51FXZkNo$U#+2%(fjl9#Zv zb!!D!N(8TSf`vdR#0n0+^+x1GQ$<$G0~VTyQh?<_@tW|hH=@EClph`*%4HvYJ_lGX zV)^sN*;0)Opx@^KD`+>l}b*LS%eefqN6fq_od`0EWn|f z4iCT9^I^X_nO^ifTV$-ZQ7bl8jLl& zEeNOge0avRwJ>h!`D}EAu=uG=>H04{mLb*RDr}%7Rp&x~HAZ>;>nKI>mMsuo@X(f$Jq5X6MhH~;{vKx_^2^(SI&+kBltJj zIGERkkc#^+3r+PV--7Dv?$>&p{;7@z9P#9XjX;W}1QQM^Ko&4~L1; zK*1K10atwk1D}z^Q3q56=+=bu8EfOjMwA{qoT|vNZ=A{iK`egN7EWp`l(-vm88LY0 zgqh{;&loQ$?_g;EjFqG`!Y=A6%<-;KZ)B&wEJMP+a8_U?sGW*wOU7F`I1wgTH!_!j zVQ&SNid!2d&9y3*!w~#2!75$5B#_&6z7!Uc5=>uNqoZmm&us&)_DJSft=rE(tMe_2 z*4j)nE>oSs9W#if2l%tl=`m+zBPN-?vc>_(Fu0!{i(L+=%tzW{rL~ex_PuKtvD_;! zJ=R4F!;<^Mb5>y`ob0pt7&{|BPao;oZ42YWYOFnue~y7kSuLT+?7KlzWUFoW2<6onCW{93e(h1N7LqaU?%9a1qV_}9xVjB^X)#ce`88ERaJTj|T$--&rSjJy;EyG5P#Y*Jz>{Jfa z#QjxrtT*DuQ;g=5N>2R?W`;!xS?BVbVhOLS%7gr>=9pS*Z6j`oCA|HXq=Eq&%g|c! z;dIlUC~ALvkWC0Udo{wsHj1&XDAIwfgX{EgT#og?D99BBHEW4Sze0(EfD~_rwb$xX>^noK1Qq3K6EHwN&EJC>( z>GLHARjbER;G?5uEwMo_MyZdFH#Bv#uY|qv4Knn5%vO}w^({jC`*E6et3Ns|E<>;S#v^7C3oABQJ7sYarCRTH za$e9Kgg-5WMXZez8&Pzc^B)BuN^pHIEMrlP6;IaQ8A2F+3;Q#!6D(V(njQrI;4x%tm&qu>i4>EHVeeH3M^(H*Z7~ zs|-Pg{njosZbb9ah%SP+C~~>KJyR@mYiZs0xmmeJ<0}iLiu4Qed&W0hP)8YtdGvnI^~buDL9v4i~~s zNjLDVq*(0Lr-R(gZd@&d-yrpRO|O02flyG=8A`moLuox?sj zn91U|xo?Ts#O5=W{*aFqCdDlsuO;K9s6gxTEuw+&tfYbUVkhwWq{lK?xLc2<7w$Bn z6!K_B;Ltg~d}Atm;Z*&4emFeu zPv$2zrY&XnWfuGcm{m?rP8yBn5$Hs!fx^c}i?*jXo0?<6CgBtZpExlgBvFP~G#-l> zZuho2Pc(33TRm}0Sd_;PKHuGlxVwPh4h0s6Mc{j}PJP58t(%%i@cx!%;f9(()bGC> zqq^a#+wCq-hfD15widoct}<`_={+cvtZ;lc7QPrAic) - .form-group label { - font-weight: 800; - color: black; - } - -{% endblock %} - -{% endblock %} -{% block content %} -
-
-
-
-
-
-
-

{% if invoice_obj %}Edit{% else %}Create{% endif %} Invoice

-
-
-
-
- -
- - {{ form.invoice_title }} - {{ form.invoice_title.errors }} -
-
-
-
-
- -
- - {{ form.status }} - {{ form.status.errors }} - -
-
-
- {% if invoice_obj %} -
-
- -
- - {{ form.invoice_number.errors }} -
-
-
- {% endif %} -
-
-
- -
- - {{ from_address_form.address_line }} - {{ from_address_form.address_line.errors }} -
- {{ from_address_form.street }} - {{ from_address_form.street.errors }} -
-
- {{ from_address_form.city }} - {{ from_address_form.city.errors }} - {{ to_address_form.city.errors }} -
-
- {{ from_address_form.state }} - {{ from_address_form.state.errors }} -
-
- {{ from_address_form.postcode }} - {{ from_address_form.postcode.errors }} -
-
- {{ from_address_form.country }} - {{ from_address_form.country.errors }} -
-
-
-
-
- -
- - {{ to_address_form.address_line }} - {{ to_address_form.address_line.errors }} -
- {{ to_address_form.street }} - {{ to_address_form.street.errors }} -
-
- {{ to_address_form.city }} - {{ to_address_form.city.errors }} - {{ to_address_form.city.errors }} -
-
- {{ to_address_form.state }} - {{ to_address_form.state.errors }} -
-
- {{ to_address_form.postcode }} - {{ to_address_form.postcode.errors }} -
-
- {{ to_address_form.country }} - {{ to_address_form.country.errors }} -
-
-
-
-
-
-
-
- -
- - {{ form.name }} - {{ form.name.errors }} -
-
-
- -
- - {{ form.email }} - {{ form.email.errors }} -
-
-
- -
- {{ form.phone }} - {{ form.phone.errors }} - -
-
-
- -
-
- {{ form.due_date }} - - - -
- {{ form.due_date.errors }} -
-
-
-
-
- -
- {{ form.currency }} - {{ form.currency.errors }} -
-
- {% if request.user.is_superuser or request.user.role == 'ADMIN' %} -
- -
- - - {{ form.teams.errors }} -
-
- - -
- -
- -
-
- - - {% endif %} -
- -
- -
- {{ form.assigned_to.errors }} -
-
- -
- - {{form.accounts}} - {{ form.accounts.errors }} -
-
- -
-
-
-
- - - {{ form.quantity }} - {{ form.quantity.errors }} -
-
- - {{ form.rate }} - {{ form.rate.errors }} -
-
- - {{ form.tax }} - {{ form.tax.errors }} -
-
- - {{ form.total_amount }} - {{ form.total_amount.errors }} - -
-
-
-
-
- - {{form.details}} - {{ form.details.errors }} -
-
-
-
-
-
- - Cancel -
-
-
-
-
-
-
-
-
-
- {% endblock %} - {% block js_block %} - - -{% endblock js_block %} \ No newline at end of file diff --git a/invoices/templates/invoice_download_pdf.html b/invoices/templates/invoice_download_pdf.html deleted file mode 100644 index 9c725262..00000000 --- a/invoices/templates/invoice_download_pdf.html +++ /dev/null @@ -1,176 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - {% if invoice.footer_text %} - - {% endif %} - - -
- {{ invoice.invoice_number }} -
- -
- - {% if invoice.from_address.address_line %} - {{ invoice.from_address.address_line }}
- {% endif %} - {% if invoice.from_address.street %} - {{ invoice.from_address.street }}, - {% endif %} - {% if invoice.from_address.city %} - {{ invoice.from_address.city }}
- {% endif %} - {% if invoice.from_address.state %} - {{ invoice.from_address.state }}, - {% endif %} - {% if invoice.from_address.postcode %} - {{ invoice.from_address.postcode }}
- {% endif %} - {% if invoice.from_address.country %} - {{ invoice.from_address.country }} - {% endif %} -
- - - {% if invoice.created_on %} - -
- Date -

{{ invoice.created_on|date:'d-m-Y' }}

-
- {% endif %} - -
-
    -
  • {{ invoice.email }}
  • - {% if invoice.name %} -
  • {{ invoice.name }}
  • - {% endif %} - {% if invoice.phone %} -
  • {{ invoice.phone }}
  • - {% endif %} -
-
- - {% if invoice.to_address.address_line %} - {{ invoice.to_address.address_line }}
- {% endif %} - {% if invoice.to_address.street %} - {{ invoice.to_address.street }}, - {% endif %} - {% if invoice.to_address.city %} - {{ invoice.to_address.city }}
- {% endif %} - {% if invoice.to_address.state %} - {{ invoice.to_address.state }}, - {% endif %} - {% if invoice.to_address.postcode %} - {{ invoice.to_address.postcode }}
- {% endif %} - {% if invoice.to_address.country %} - {{ invoice.to_address.country }} - {% endif %} -
- {% if invoice.due_date %} -
- Due Date -

{{ invoice.due_date|date:'d-m-Y' }}

-
- {% endif %} -
-   -
-
- {% if invoice.invoice_title %} -
-

{{ invoice.invoice_title|upper }}

-
- {% endif %} -
-
-
- {% if invoice.details %} -
-

{{ invoice.details }}

-
- {% endif %} -
-
- - - - - - - - {% if invoice.quantity %} - - - {% endif %} - - - {% if invoice.rate %} - - - {% endif %} - - - {% if invoice.tax %} - - - {% endif %} - - - - - - - -
- Invoice Quantity - {{ invoice.quantity }}
- Invoice Rate - {{ invoice.rate }}
- Tax - {{ invoice.tax }}
- Invoice Total - {{ invoice.formatted_total_amount }}
-
-
- {{ invoice.footer_text|safe }} -
-
- diff --git a/invoices/templates/invoices_create.html b/invoices/templates/invoices_create.html deleted file mode 100644 index 3d2d3e91..00000000 --- a/invoices/templates/invoices_create.html +++ /dev/null @@ -1,267 +0,0 @@ -{% extends 'sales/base.html' %} -{% load static %} -{% block breadcrumb %} - -{% endblock %} -{% block content %} -
-
-
-
-
-
- {% if invoice_obj %}EDIT{% else %}CREATE{% endif %} INVOICE -
-
-
-
-
- - {{ form.invoice_title }} - {{ form.invoice_title.errors }} -
-
-
-
- - {{ form.invoice_number }} - {{ form.invoice_number.errors }} -
-
-
-
- - {{ form.name }} - {{ form.name.errors }} -
-
-
-
- - {{ form.email }} - {{ form.email.errors }} -
-
-
-
- - {{ form.currency }} - {{ form.currency.errors }} -
-
-
-
- - {{ form.phone }} - {{ form.phone.errors }} -
-
-
-
-
-
-
- - {{ form.quantity }} - {{ form.quantity.errors }} -
-
-
-
- - {{ form.rate }} - {{ form.rate.errors }} -
-
-
-
- - {{ form.total_amount }} - {{ form.total_amount.errors }} -
-
-
-
-
- - {{ form.status }} - {{ form.status.errors }} -
-
-
-
- - {{form.assigned_to}} - {{ form.assigned_to.errors }} -
-
-
-
- -
- {{ form.due_date }} - - - -
- {{ form.due_date.errors }} -
-
-
-
-
-
-
-
- - {{form.details}} - {{ form.details.errors }} -
-
-
-
- - {{ from_address_form.address_line }} - {{ from_address_form.address_line.errors }} -
- {{ from_address_form.street }} - {{ from_address_form.street.errors }} -
-
- {{ from_address_form.city }} - {{ from_address_form.city.errors }} - {{ to_address_form.city.errors }} -
-
- {{ from_address_form.state }} - {{ from_address_form.state.errors }} -
-
- {{ from_address_form.postcode }} - {{ from_address_form.postcode.errors }} -
-
- {{ from_address_form.country }} - {{ from_address_form.country.errors }} -
-
-
-
-
-
- - {{ to_address_form.address_line }} - {{ to_address_form.address_line.errors }} -
- {{ to_address_form.street }} - {{ to_address_form.street.errors }} -
-
- {{ to_address_form.city }} - {{ to_address_form.city.errors }} - {{ to_address_form.city.errors }} -
-
- {{ to_address_form.state }} - {{ to_address_form.state.errors }} -
-
- {{ to_address_form.postcode }} - {{ to_address_form.postcode.errors }} -
-
- {{ to_address_form.country }} - {{ to_address_form.country.errors }} -
-
-
-
-
-
-
-
-
- - Cancel -
-
-
-
-
-
- -
- -
-{% endblock %} -{% block js_block %} - -{% endblock js_block %} \ No newline at end of file diff --git a/invoices/templates/invoices_detail.html b/invoices/templates/invoices_detail.html deleted file mode 100644 index d62ad7f1..00000000 --- a/invoices/templates/invoices_detail.html +++ /dev/null @@ -1,524 +0,0 @@ -{% extends 'sales/base.html' %} -{% load static %} -{% load thumbnail %} -{% block breadcrumb %} -{% block extralinks %} - - -{% endblock extralinks %} - - -{% endblock breadcrumb %} -{% block content %} - -
-
-
-
-
-
-
- Overview - - - -
-
-
-
- {% if invoice.invoice_title %} -
-
- - -
-
- {% endif %} - {% if invoice.invoice_number %} -
-
- - -
-
- {% endif %} - {% if invoice.name %} -
-
- - -
-
- {% endif %} - {% if invoice.email %} -
-
- - -
-
- {% endif %} - {% if invoice.phone %} -
-
- - -
-
- {% endif %} -
-
- {% if invoice.quantity %} -
-
- - -
-
- {% endif %} - {% if invoice.rate %} -
-
- - -
-
- {% endif %} - {% if invoice.total_amount %} -
-
- - -
-
- {% endif %} - {% if invoice.currency %} -
-
- - -
-
- {% endif %} - {% if invoice.status %} -
-
- - -
-
- {% endif %} -
-
- - {% if invoice.is_email_sent %} - - {% else %} - - {% endif %} -
-
-
-
- - {% if invoice.due_date %} -
-
- - -
-
- {% endif %} - - {% if invoice.details %} -
-
- - -
-
- {% endif %} - - {% if invoice.assigned_to.all %} -
-
- - {% for user in invoice.assigned_to.all %} - - {% endfor %} -
-
- {% endif %} -
-
- {% if invoice.from_address.address_line or invoice.from_address.street or invoice.from_address.city or invoice.from_address.state or invoice.from_address.postcode or invoice.from_address.country %} - -
- {{invoice.from_address.get_complete_address}} -
- {% endif %} -
-
-
-
- {% if invoice.to_address.address_line or invoice.to_address.street or invoice.to_address.city or invoice.to_address.state or invoice.to_address.postcode or invoice.to_address.country %} - -
- {{invoice.to_address.get_complete_address}} -
- {% endif %} -
-
-
-
-
- Created by {{ invoice.created_by }} created on - {{ invoice.created_on }} -
-
-
- -
- -
-
-
Attachments
-
-
-
-
-
- -
- -
-
-
- -
-
- -
-
    - {% for attachment in attachments %} -
  • - {% if request.user.is_superuser or request.user.role == 'ADMIN' or request.user == attachment.created_by %} -
    -
    - -
    -
    - {% endif %} -
    - {% if attachment.attachment %} - {% if 'image' in attachment.file_type %} - {% thumbnail attachment.attachment "80x80" crop="center" as im %} - - {% endthumbnail %} - {% endif %} - {% endif %} -
      {{attachment.file_name}} Download
    -
    -
    -
    Uploaded by :{{ attachment.created_by }}
    -
    {{ attachment.created_on|date:'m/d/Y,  h:i A' }}
    -
    -
  • - {% endfor %} -
-
-
-
- - -
-
-
Comments
-
-
-
-
-
- -
- -
-
-
- -
-
- -
-
    - {% for comment in comments %} -
  • - {% if request.user.is_superuser or request.user.role == 'ADMIN' or request.user == comment.commented_by %} -
    - - -
    - {% endif %} -
    -
    {{ comment.comment }}
    -
    -
    -
    {{ comment.commented_by }}
    -
    {{ comment.commented_on|date:'m/d/Y,  h:i:s A' }}
    -
    -
  • - {% endfor %} -
-
-
- -
- -
-
-
-
-
-
-
-
- -
- Processing File... -
-
-
- -
-
- - -
- - - - -{% endblock content %} -{% block js_block %} - - - -{% endblock js_block %} \ No newline at end of file diff --git a/invoices/templates/invoices_detail_1.html b/invoices/templates/invoices_detail_1.html deleted file mode 100644 index 4387aea7..00000000 --- a/invoices/templates/invoices_detail_1.html +++ /dev/null @@ -1,636 +0,0 @@ -{% extends 'sales/base.html' %} -{% load static %} -{% load paginate %} -{% load thumbnail %} -{% block breadcrumb %} -{% block extralinks %} - - -{% endblock extralinks %} - - -{% endblock breadcrumb %} -{% block content %} - -
-
-
-
-
-
-
- -
-
- Overview - - - -
-
-
-
-
-
- {% if invoice.invoice_title %} -
- -
- {{ invoice.invoice_title }} -
-
- {% endif %} -
-
- {% if invoice.status %} -
- -
- {{ invoice.status }} -
-
- {% endif %} - -
- {% if invoice.invoice_number %} -
-
- -
- {{ invoice.invoice_number }} -
-
-
- {% endif %} - - - - -
-
- {% if invoice.from_address.address_line or invoice.from_address.street or invoice.from_address.city or invoice.from_address.state or invoice.from_address.postcode or invoice.from_address.country %} -
- -
- -
- {{invoice.from_address.get_complete_address}} -
-
-
-
- {% endif %} - {% if invoice.to_address.address_line or invoice.to_address.street or invoice.to_address.city or invoice.to_address.state or invoice.to_address.postcode or invoice.to_address.country %} -
- -
- -
- {{invoice.to_address.get_complete_address}} -
-
-
-
- {% endif %} -
-
-
- {% if invoice.name %} -
- -
- {{ invoice.name }} -
-
- {% endif %} -
- {% if invoice.email %} - -
- {{ invoice.email }} -
- {% endif %} -
-
- {% if invoice.email %} - -
- {{ invoice.phone }} -
- {% endif %} -
-
-
-
- {% if invoice.currency %} - -
- {{ invoice.currency }} -
- {% endif %} -
-
- {% if invoice.assigned_to.all %} - -
- {% for user in invoice.assigned_to.all %} - - {% endfor %} -
- {% endif %} -
-
- {% if invoice.due_date %} - -
- {{ invoice.due_date }} -
- {% endif %} -
-
-
-
- {% if invoice.quantity %} -
- - {{ invoice.quantity }} -
- {% endif %} - {% if invoice.rate %} -
- - {{ invoice.rate }} -
- {% endif %} - {% if invoice.tax %} -
- - {{ invoice.tax }} -
- {% endif %} - {% if invoice.total_amount %} -
- - {{ invoice.total_amount }} -
- {% endif %} -
-
-
-
- {% if invoice.details %} - -
- {{ invoice.details }} - {% endif %} -
-
-
-
- Created by {{ invoice.created_by }} on {{ invoice.created_on_arrow }} -
-
-
-
-
-
- -
-
-
Attachments
-
-
-
-
-
- -
- -
-
-
- -
-
- -
-
    - {% for attachment in attachments %} -
  • - {% if request.user.is_superuser or request.user.role == 'ADMIN' or request.user == attachment.created_by %} -
    -
    - -
    -
    - {% endif %} -
    - {% if attachment.attachment %} - {% if 'image' in attachment.file_type %} - {% thumbnail attachment.attachment "80x80" crop="center" as im %} - - {% endthumbnail %} - {% endif %} - {% endif %} -
      {{attachment.file_name}} Download
    -
    -
    -
    Uploaded by :{{ attachment.created_by }}
    -
    {{ attachment.created_on_arrow }}
    -
    -
  • - {% endfor %} -
-
-
-
- -
- -
-
-
Comments
-
-
-
-
-
- -
- -
-
-
- -
-
- -
-
    - {% for comment in comments %} -
  • - {% if request.user.is_superuser or request.user.role == 'ADMIN' or request.user == comment.commented_by %} -
    - - -
    - {% endif %} -
    -
    {{ comment.comment }}
    -
    -
    -
    {{ comment.commented_by }}
    -
    {{ comment.commented_on_arrow }}
    -
    -
  • - {% endfor %} -
-
-
- -
- -
-
-
-
-
- Invoice History -
-
- - {% if invoice_history|length > 0 %} - - - - - - - - - - - - {% endif %} - - {% if per_page %} - {% paginate per_page invoice_history %} - {% else%} - {% paginate 10 invoice_history %} - {% endif %} - {% for invoice in invoice_history %} - - - - - - - - - - {% endfor %} - -
S.NoDateInvoice NumberNameStatus Description Amount
{{ forloop.counter }} - {{ invoice.created_on_arrow }}{{ invoice.invoice_number }} - {% if invoice.updated_by %} - {% if invoice.updated_by.profile_pic %} - {% thumbnail invoice.updated_by.profile_pic "40x40" crop="center" as im %} - - {% endthumbnail %} - {% else %} - Micro profile pic - {% endif %} - {% else %} - Micro profile pic - {% endif %} - {{ invoice.status }}{{ invoice.details }}{{ invoice.total_amount }}
-
- {% show_pages %} -
-
- {% ifequal invoice_history|length 0 %} -
No Invoice History Records Found
- - {% endifequal %} -
-
-
-
-
-
-
-
-
-
-
-
- Processing File... -
-
-
-
-
-{% endblock content %} -{% block js_block %} - - - -{% endblock js_block %} \ No newline at end of file diff --git a/invoices/templates/invoices_list.html b/invoices/templates/invoices_list.html deleted file mode 100644 index 8d76d144..00000000 --- a/invoices/templates/invoices_list.html +++ /dev/null @@ -1,605 +0,0 @@ -{% extends 'sales/base.html' %} -{% load static %} -{% load paginate %} -{% load thumbnail %} -{% block extralinks %} - -{% endblock %} -{% block content %} - -
- - - -
-
-
-
-
-
-
Filters
-
-
-
- - -
-
-
-
- - -
-
-
-
- - -
-
-
-
- - -
-
-
-
- - -
-
- -
-
- - Clear -
-
-
-
-
-
-
-
-
-
-
-
- -
-
-
-
-
- Invoices - {% if show_pageitems %} - {% show_pageitems %}{% else %} - {{ invoices|length }}{% endif %} - - - -
-
- - - {% if invoices|length > 0 %} - - - - - - - - - - - - {% endif %} - - - {% if per_page %} - {% paginate per_page invoices %} - {% else %} - {% paginate 10 invoices %} - {% endif %} - {% for invoice in invoices %} - {% if invoice.due_date < today %} - - - - - - - - - - - - {% else %} - - - - - - - - - - - - {% endif %} - {% endfor %} - -
IDInvoice TitleInvoice NumberEmailStatusAssigned ToCreated byCreated OnActions
{{ forloop.counter }} - {{ invoice.invoice_title }} {{ invoice.invoice_number }} {{ invoice.email }} {{ invoice.status }} - {% with users=invoice.get_team_and_assigned_users %} - {% for user in users %} - {% if user.profile_pic %} - {% thumbnail user.profile_pic "40x40" crop="center" as im %} - - - - {% endthumbnail %} - {% else %} - - - - {% endif %} - {% empty %} - None - {% endfor %} - {% endwith %} - - {% if invoice.created_by %} - {% if invoice.created_by.profile_pic %} - {% thumbnail invoice.created_by.profile_pic "40x40" crop="center" as im %} - - {% endthumbnail %} - {% else %} - Micro profile pic - {% endif %} - {% else %} - None - {% endif %} - {{ invoice.created_on_arrow }} - - {% if request.user == invoice.created_by or request.user.role == "ADMIN" or request.user.is_superuser %} - - - {% if invoice.is_draft %} - - {% endif %} - {% if invoice.is_sent == True %} - - - - {% endif %} - {% if invoice.is_resent %} - - - {% endif %} - {% if invoice.is_paid_or_cancelled == True %} - - {% endif %} - {% endif %} -
{{ forloop.counter }} - {{ invoice.invoice_title }} {{ invoice.invoice_number }} {{ invoice.email }} {{ invoice.status }} - {% with users=invoice.get_team_and_assigned_users %} - {% for user in users %} - {% if user.profile_pic %} - {% thumbnail user.profile_pic "40x40" crop="center" as im %} - - - - {% endthumbnail %} - {% else %} - - - - {% endif %} - {% empty %} - None - {% endfor %} - {% endwith %} - - {% if invoice.created_by %} - {% if invoice.created_by.profile_pic %} - {% thumbnail invoice.created_by.profile_pic "40x40" crop="center" as im %} - - {% endthumbnail %} - {% else %} - Micro profile pic - {% endif %} - {% else %} - None - {% endif %} - {{ invoice.created_on_arrow }} - - {% if request.user == invoice.created_by or request.user.role == "ADMIN" or request.user.is_superuser %} - - - {% if invoice.is_draft %} - - {% endif %} - {% if invoice.is_sent == True %} - - - - {% endif %} - {% if invoice.is_resent %} - - - {% endif %} - {% if invoice.is_paid_or_cancelled == True %} - - {% endif %} - {% endif %} -
-
- {%ifequal invoices|length 0%} -
No Invoices Found
- {%endifequal%} -
- {% show_pages %} -
-
-
-
- - - -
-
-
-
-
- - -{% for invoice in invoices %} - - - - - - -{% endfor %} - - -{% endblock %} -{% block js_block %} - -{% endblock js_block %} diff --git a/invoices/views.py b/invoices/views.py deleted file mode 100644 index d5ab0294..00000000 --- a/invoices/views.py +++ /dev/null @@ -1,678 +0,0 @@ -# import io -# import os - -# import pdfkit -# from datetime import datetime -# from django.contrib.auth.decorators import login_required -# from django.contrib.auth.mixins import LoginRequiredMixin -# from django.contrib.sites.shortcuts import get_current_site -# from django.core.exceptions import PermissionDenied -# from django.db.models import Q -# from django.http.response import HttpResponse, JsonResponse -# from django.shortcuts import get_object_or_404, redirect, render, reverse -# from django.template.loader import render_to_string -# from django.views.generic import ( -# CreateView, -# DeleteView, -# DetailView, -# FormView, -# TemplateView, -# UpdateView, -# View, -# ) - -# from common.models import Address, Attachments, Comment, User -# from common.tasks import send_email_user_mentions -# from invoices.forms import ( -# InvoiceAddressForm, -# InvoiceAttachmentForm, -# InvoiceCommentForm, -# InvoiceForm, -# ) -# from invoices.models import Invoice -# from invoices.tasks import ( -# send_email, -# send_invoice_email, -# send_invoice_email_cancel, -# create_invoice_history, -# ) -# from common.access_decorators_mixins import ( -# sales_access_required, -# marketing_access_required, -# SalesAccessRequiredMixin, -# MarketingAccessRequiredMixin, -# ) -# from teams.models import Teams - - -# @login_required -# def get_teams_and_users(request): -# data = {} -# teams = Teams.objects.all() -# teams_data = [ -# {"team": team.id, "users": [user.id for user in team.users.all()]} -# for team in teams -# ] -# users = User.objects.all().values_list("id", flat=True) -# data["teams"] = teams_data -# data["users"] = list(users) -# return JsonResponse(data) - - -# @login_required -# @sales_access_required -# def invoices_list(request): - -# if request.user.role == "ADMIN" or request.user.is_superuser: -# users = User.objects.all() -# # elif request.user.google.all(): -# # # users = User.objects.none() -# # # users = User.objects.filter(id=request.user.id) -# # users = User.objects.filter(Q(role='ADMIN') | Q(id=request.user.id)) -# elif request.user.role == "USER": -# users = User.objects.filter(Q(role="ADMIN") | Q(id=request.user.id)) -# status = ( -# ("Draft", "Draft"), -# ("Sent", "Sent"), -# ("Paid", "Paid"), -# ("Pending", "Pending"), -# ("Cancel", "Cancel"), -# ) - -# if request.method == "GET": -# context = {} -# if request.user.role == "ADMIN" or request.user.is_superuser: -# invoices = Invoice.objects.all().distinct().order_by("-created_on") -# else: -# invoices = ( -# Invoice.objects.filter( -# Q(created_by=request.user) | Q(assigned_to=request.user) -# ) -# .distinct() -# .order_by("-created_on") -# ) -# context["invoices"] = invoices.filter(company=request.company).order_by( -# "-created_on" -# ) -# context["status"] = status -# context["users"] = users.filter(company=request.company) -# user_ids = list(invoices.values_list("created_by", flat=True)) -# user_ids.append(request.user.id) -# context["created_by_users"] = users.filter(is_active=True, id__in=user_ids) -# today = datetime.today().date() -# context["today"] = today -# return render(request, "invoices_list.html", context) - -# if request.method == "POST": -# context = {} -# context["status"] = status -# context["users"] = users.filter(company=request.company) -# invoices = Invoice.objects.filter(company=request.company).order_by( -# "-created_on" -# ) -# if request.user.role == "ADMIN" or request.user.is_superuser: -# invoices = invoices -# else: -# invoices = invoices.filter( -# Q(created_by=request.user) | Q(assigned_to=request.user) -# ).distinct() - -# if request.POST.get("invoice_title_number", None): -# invoices = invoices.filter( -# Q(invoice_title__icontains=request.POST.get("invoice_title_number")) -# | Q(invoice_number__icontains=request.POST.get("invoice_title_number")) -# ) - -# if request.POST.get("created_by", None): -# invoices = invoices.filter(created_by__id=request.POST.get("created_by")) - -# if request.POST.getlist("assigned_to", None): -# invoices = invoices.filter( -# assigned_to__in=request.POST.getlist("assigned_to") -# ) -# context["assigned_to"] = request.POST.getlist("assigned_to") - -# if request.POST.get("status", None): -# invoices = invoices.filter(status=request.POST.get("status")) - -# if request.POST.get("total_amount", None): -# invoices = invoices.filter(total_amount=request.POST.get("total_amount")) - -# user_ids = list(invoices.values_list("created_by", flat=True)) -# user_ids.append(request.user.id) -# context["created_by_users"] = users.filter(is_active=True, id__in=user_ids) -# context["invoices"] = invoices.distinct().order_by("-created_on") -# today = datetime.today().date() -# context["today"] = today -# return render(request, "invoices_list.html", context) - - -# @login_required -# @sales_access_required -# def invoices_create(request): -# if request.method == "GET": -# context = {} -# context["form"] = InvoiceForm(request_user=request.user, request_obj=request) -# context["users"] = User.objects.filter(company=request.company) -# # "prefix" use case in form, both from address and to address use the -# # same model and same model form, so the name attribute in the form will -# # be same for the both forms and the address will be same for both -# # shipping and to address, so use prefix parameter to distinguish the -# # forms, don't remove this comment -# context["from_address_form"] = InvoiceAddressForm(prefix="from") -# context["to_address_form"] = InvoiceAddressForm(prefix="to") -# if request.user.role == "ADMIN" or request.user.is_superuser: -# context["teams"] = Teams.objects.filter(company=request.company) - -# return render(request, "invoice_create_1.html", context) - -# if request.method == "POST": -# form = InvoiceForm(request.POST, request_user=request.user, request_obj=request) -# from_address_form = InvoiceAddressForm(request.POST, prefix="from") -# to_address_form = InvoiceAddressForm(request.POST, prefix="to") -# if ( -# form.is_valid() -# and from_address_form.is_valid() -# and to_address_form.is_valid() -# ): -# from_address_obj = from_address_form.save() -# to_address_obj = to_address_form.save() -# invoice_obj = form.save(commit=False) -# invoice_obj.created_by = request.user -# invoice_obj.company = request.company -# invoice_obj.from_address = from_address_obj -# invoice_obj.to_address = to_address_obj -# invoice_obj.save() -# form.save_m2m() - -# if request.POST.getlist("teams", []): -# user_ids = Teams.objects.filter( -# id__in=request.POST.getlist("teams") -# ).values_list("users", flat=True) -# assinged_to_users_ids = invoice_obj.assigned_to.all().values_list( -# "id", flat=True -# ) -# for user_id in user_ids: -# if user_id not in assinged_to_users_ids: -# invoice_obj.assigned_to.add(user_id) - -# if request.POST.getlist("teams", []): -# invoice_obj.teams.add(*request.POST.getlist("teams")) - -# create_invoice_history(invoice_obj.id, request.user.id, []) -# kwargs = {"domain": request.get_host(), "protocol": request.scheme} -# assigned_to_list = list( -# invoice_obj.assigned_to.all().values_list("id", flat=True) -# ) -# send_email.delay(invoice_obj.id, assigned_to_list, **kwargs) -# if request.POST.get("from_account"): -# return JsonResponse( -# { -# "error": False, -# "success_url": reverse( -# "accounts:view_account", -# args=(request.POST.get("from_account"),), -# ), -# } -# ) -# return JsonResponse( -# {"error": False, "success_url": reverse("invoices:invoices_list")} -# ) -# else: -# return JsonResponse( -# { -# "error": True, -# "errors": form.errors, -# "from_address_errors": from_address_form.errors, -# "to_address_errors": to_address_form.errors, -# } -# ) - - -# @login_required -# @sales_access_required -# def invoice_details(request, invoice_id): -# invoice = get_object_or_404( -# Invoice.objects.select_related("from_address", "to_address"), pk=invoice_id -# ) - -# if invoice.company != request.company: -# raise PermissionDenied - -# user_assigned_account = False -# user_assigned_accounts = set( -# request.user.account_assigned_users.values_list("id", flat=True) -# ) -# invoice_accounts = set(invoice.accounts.values_list("id", flat=True)) -# if user_assigned_accounts.intersection(invoice_accounts): -# user_assigned_account = True - -# if not ( -# (request.user.role == "ADMIN") -# or (request.user.is_superuser) -# or (invoice.created_by == request.user) -# or (request.user in invoice.assigned_to.all()) -# or user_assigned_account -# ): -# raise PermissionDenied - -# if request.method == "GET": -# context = {} -# context["invoice"] = invoice -# context["attachments"] = invoice.invoice_attachment.all() -# context["comments"] = invoice.invoice_comments.all() -# context["invoice_history"] = invoice.invoice_history.all() -# if request.user.is_superuser or request.user.role == "ADMIN": -# context["users_mention"] = list( -# User.objects.filter(is_active=True, company=request.company).values( -# "username" -# ) -# ) -# elif request.user != invoice.created_by: -# context["users_mention"] = [{"username": invoice.created_by.username}] -# else: -# context["users_mention"] = list( -# invoice.assigned_to.all().values("username") -# ) -# return render(request, "invoices_detail_1.html", context) - - -# @login_required -# @sales_access_required -# def invoice_edit(request, invoice_id): -# invoice_obj = get_object_or_404(Invoice, pk=invoice_id) - -# if invoice_obj.company != request.company: -# raise PermissionDenied - -# if not ( -# request.user.role == "ADMIN" -# or request.user.is_superuser -# or invoice_obj.created_by == request.user -# or request.user in invoice_obj.assigned_to.all() -# ): -# raise PermissionDenied - -# if request.method == "GET": -# context = {} -# context["invoice_obj"] = invoice_obj -# context["teams"] = Teams.objects.filter(company=request.company) -# context["users"] = User.objects.filter(company=request.company) -# context["form"] = InvoiceForm( -# instance=invoice_obj, request_user=request.user, request_obj=request -# ) -# context["from_address_form"] = InvoiceAddressForm( -# prefix="from", instance=invoice_obj.from_address -# ) -# context["to_address_form"] = InvoiceAddressForm( -# prefix="to", instance=invoice_obj.to_address -# ) -# return render(request, "invoice_create_1.html", context) - -# if request.method == "POST": -# form = InvoiceForm( -# request.POST, -# instance=invoice_obj, -# request_user=request.user, -# request_obj=request, -# ) -# from_address_form = InvoiceAddressForm( -# request.POST, instance=invoice_obj.from_address, prefix="from" -# ) -# to_address_form = InvoiceAddressForm( -# request.POST, instance=invoice_obj.to_address, prefix="to" -# ) -# previous_assigned_to_users = list( -# invoice_obj.assigned_to.all().values_list("id", flat=True) -# ) -# if ( -# form.is_valid() -# and from_address_form.is_valid() -# and to_address_form.is_valid() -# ): -# form_changed_data = form.changed_data -# form_changed_data.remove("from_address") -# form_changed_data.remove("to_address") -# form_changed_data = form_changed_data + [ -# "from_" + field for field in from_address_form.changed_data -# ] -# form_changed_data = form_changed_data + [ -# "to_" + field for field in to_address_form.changed_data -# ] -# # if form_changed_data: -# # create_invoice_history(invoice_obj.id, request.user.id, form_changed_data) -# from_address_obj = from_address_form.save() -# to_address_obj = to_address_form.save() -# invoice_obj = form.save(commit=False) -# invoice_obj.created_by = request.user -# invoice_obj.from_address = from_address_obj -# invoice_obj.to_address = to_address_obj -# invoice_obj.save() -# form.save_m2m() -# if form_changed_data: -# create_invoice_history( -# invoice_obj.id, request.user.id, form_changed_data -# ) - -# if request.POST.getlist("teams", []): -# user_ids = Teams.objects.filter( -# id__in=request.POST.getlist("teams") -# ).values_list("users", flat=True) -# assinged_to_users_ids = invoice_obj.assigned_to.all().values_list( -# "id", flat=True -# ) -# for user_id in user_ids: -# if user_id not in assinged_to_users_ids: -# invoice_obj.assigned_to.add(user_id) - -# if request.POST.getlist("teams", []): -# invoice_obj.teams.clear() -# invoice_obj.teams.add(*request.POST.getlist("teams")) -# else: -# invoice_obj.teams.clear() - -# kwargs = {"domain": request.get_host(), "protocol": request.scheme} - -# assigned_to_list = list( -# invoice_obj.assigned_to.all().values_list("id", flat=True) -# ) -# recipients = list(set(assigned_to_list) - set(previous_assigned_to_users)) -# # send_email_to_assigned_user.delay(recipients, account_object.id, domain=current_site.domain, -# # protocol=self.request.scheme) - -# send_email.delay(invoice_obj.id, recipients, **kwargs) -# if request.POST.get("from_account"): -# return JsonResponse( -# { -# "error": False, -# "success_url": reverse( -# "accounts:view_account", -# args=(request.POST.get("from_account"),), -# ), -# } -# ) -# return JsonResponse( -# {"error": False, "success_url": reverse("invoices:invoices_list")} -# ) -# else: -# return JsonResponse( -# { -# "error": True, -# "errors": form.errors, -# "from_address_errors": from_address_form.errors, -# "to_address_errors": to_address_form.errors, -# } -# ) - - -# @login_required -# @sales_access_required -# def invoice_delete(request, invoice_id): -# invoice = get_object_or_404(Invoice, pk=invoice_id) - -# if invoice.company != request.company: -# raise PermissionDenied - -# if not ( -# request.user.role == "ADMIN" -# or request.user.is_superuser -# or invoice.created_by == request.user -# ): -# raise PermissionDenied - -# if request.method == "GET": -# invoice.delete() -# if request.GET.get("view_account"): -# return redirect( -# reverse( -# "accounts:view_account", args=(request.GET.get("view_account"),) -# ) -# ) -# return redirect("invoices:invoices_list") - - -# @login_required -# @sales_access_required -# def invoice_send_mail(request, invoice_id): -# invoice = get_object_or_404(Invoice, pk=invoice_id) -# if not ( -# request.user.role == "ADMIN" -# or request.user.is_superuser -# or invoice.created_by == request.user -# ): -# raise PermissionDenied - -# if request.method == "GET": -# Invoice.objects.filter(id=invoice_id).update(is_email_sent=True, status="Sent") -# kwargs = {"domain": request.get_host(), "protocol": request.scheme} -# send_invoice_email.delay(invoice_id, **kwargs) -# return redirect("invoices:invoices_list") - - -# @login_required -# @sales_access_required -# def invoice_change_status_paid(request, invoice_id): -# invoice = get_object_or_404(Invoice, pk=invoice_id) -# if not ( -# request.user.role == "ADMIN" -# or request.user.is_superuser -# or invoice.created_by == request.user -# ): -# raise PermissionDenied - -# if request.method == "GET": -# Invoice.objects.filter(id=invoice_id).update(status="Paid") -# kwargs = {"domain": request.get_host(), "protocol": request.scheme} -# # send_invoice_email.delay(invoice_id, **kwargs) -# return redirect("invoices:invoices_list") - - -# @login_required -# @sales_access_required -# def invoice_change_status_cancelled(request, invoice_id): -# invoice = get_object_or_404(Invoice, pk=invoice_id) -# if not ( -# request.user.role == "ADMIN" -# or request.user.is_superuser -# or invoice.created_by == request.user -# ): -# raise PermissionDenied - -# if request.method == "GET": -# Invoice.objects.filter(id=invoice_id).update(status="Cancelled") -# kwargs = {"domain": request.get_host(), "protocol": request.scheme} -# send_invoice_email_cancel.delay(invoice_id, **kwargs) -# return redirect("invoices:invoices_list") - - -# @login_required -# @sales_access_required -# def invoice_download(request, invoice_id): -# invoice = get_object_or_404( -# Invoice.objects.select_related("from_address", "to_address"), pk=invoice_id -# ) -# if not ( -# request.user.role == "ADMIN" -# or request.user.is_superuser -# or invoice.created_by == request.user -# or request.user in invoice.assigned_to.all() -# ): -# raise PermissionDenied - -# if request.method == "GET": -# context = {} -# context["invoice"] = invoice -# html = render_to_string("invoice_download_pdf.html", context=context) -# pdfkit.from_string(html, "out.pdf", options={"encoding": "UTF-8"}) -# pdf = open("out.pdf", "rb") -# response = HttpResponse(pdf.read(), content_type="application/pdf") -# response["Content-Disposition"] = "attachment; filename=Invoice.pdf" -# pdf.close() -# os.remove("out.pdf") -# return response - - -# class AddCommentView(LoginRequiredMixin, CreateView): -# model = Comment -# form_class = InvoiceCommentForm -# http_method_names = ["post"] - -# def post(self, request, *args, **kwargs): -# self.object = None -# self.invoice = get_object_or_404(Invoice, id=request.POST.get("invoice_id")) -# if ( -# request.user == self.invoice.created_by -# or request.user.is_superuser -# or request.user.role == "ADMIN" -# ): -# form = self.get_form() -# if form.is_valid(): -# return self.form_valid(form) -# return self.form_invalid(form) - -# data = {"error": "You don't have permission to comment for this account."} -# return JsonResponse(data) - -# def form_valid(self, form): -# comment = form.save(commit=False) -# comment.commented_by = self.request.user -# comment.invoice = self.invoice -# comment.save() -# comment_id = comment.id -# current_site = get_current_site(self.request) -# send_email_user_mentions.delay( -# comment_id, -# "invoices", -# domain=current_site.domain, -# protocol=self.request.scheme, -# ) -# return JsonResponse( -# { -# "comment_id": comment.id, -# "comment": comment.comment, -# "commented_on": comment.commented_on, -# "commented_on_arrow": comment.commented_on_arrow, -# "commented_by": comment.commented_by.email, -# } -# ) - -# def form_invalid(self, form): -# return JsonResponse({"error": form["comment"].errors}) - - -# class UpdateCommentView(LoginRequiredMixin, View): -# http_method_names = ["post"] - -# def post(self, request, *args, **kwargs): -# self.comment_obj = get_object_or_404(Comment, id=request.POST.get("commentid")) -# if request.user == self.comment_obj.commented_by: -# form = InvoiceCommentForm(request.POST, instance=self.comment_obj) -# if form.is_valid(): -# return self.form_valid(form) - -# return self.form_invalid(form) - -# data = {"error": "You don't have permission to edit this comment."} -# return JsonResponse(data) - -# def form_valid(self, form): -# self.comment_obj.comment = form.cleaned_data.get("comment") -# self.comment_obj.save(update_fields=["comment"]) -# comment_id = self.comment_obj.id -# current_site = get_current_site(self.request) -# send_email_user_mentions.delay( -# comment_id, -# "invoices", -# domain=current_site.domain, -# protocol=self.request.scheme, -# ) -# return JsonResponse( -# { -# "comment_id": self.comment_obj.id, -# "comment": self.comment_obj.comment, -# } -# ) - -# def form_invalid(self, form): -# return JsonResponse({"error": form["comment"].errors}) - - -# class DeleteCommentView(LoginRequiredMixin, View): -# def post(self, request, *args, **kwargs): -# self.object = get_object_or_404(Comment, id=request.POST.get("comment_id")) -# if request.user == self.object.commented_by: -# self.object.delete() -# data = {"cid": request.POST.get("comment_id")} -# return JsonResponse(data) - -# data = {"error": "You don't have permission to delete this comment."} -# return JsonResponse(data) - - -# class AddAttachmentView(LoginRequiredMixin, CreateView): -# model = Attachments -# form_class = InvoiceAttachmentForm -# http_method_names = ["post"] - -# def post(self, request, *args, **kwargs): -# self.object = None -# self.invoice = get_object_or_404(Invoice, id=request.POST.get("invoice_id")) -# if ( -# request.user == self.invoice.created_by -# or request.user.is_superuser -# or request.user.role == "ADMIN" -# ): -# form = self.get_form() -# if form.is_valid(): -# return self.form_valid(form) - -# return self.form_invalid(form) - -# data = { -# "error": "You don't have permission to add attachment \ -# for this account." -# } -# return JsonResponse(data) - -# def form_valid(self, form): -# attachment = form.save(commit=False) -# attachment.created_by = self.request.user -# attachment.file_name = attachment.attachment.name -# attachment.invoice = self.invoice -# attachment.save() -# return JsonResponse( -# { -# "attachment_id": attachment.id, -# "attachment": attachment.file_name, -# "attachment_url": attachment.attachment.url, -# "download_url": reverse( -# "common:download_attachment", kwargs={"pk": attachment.id} -# ), -# "attachment_display": attachment.get_file_type_display(), -# "created_on": attachment.created_on, -# "created_on_arrow": attachment.created_on_arrow, -# "created_by": attachment.created_by.email, -# "file_type": attachment.file_type(), -# } -# ) - -# def form_invalid(self, form): -# return JsonResponse({"error": form["attachment"].errors}) - - -# class DeleteAttachmentsView(LoginRequiredMixin, View): -# def post(self, request, *args, **kwargs): -# self.object = get_object_or_404( -# Attachments, id=request.POST.get("attachment_id") -# ) -# if ( -# request.user == self.object.created_by -# or request.user.is_superuser -# or request.user.role == "ADMIN" -# ): -# self.object.delete() -# data = {"acd": request.POST.get("attachment_id")} -# return JsonResponse(data) - -# data = {"error": "You don't have permission to delete this attachment."} -# return JsonResponse(data) diff --git a/leads/migrations/0001_initial.py b/leads/migrations/0001_initial.py deleted file mode 100644 index 42594282..00000000 --- a/leads/migrations/0001_initial.py +++ /dev/null @@ -1,88 +0,0 @@ -# Generated by Django 4.2.1 on 2023-06-19 13:08 - -from django.conf import settings -from django.db import migrations, models -import django.db.models.deletion -import phonenumber_field.modelfields -import uuid - - -class Migration(migrations.Migration): - - initial = True - - dependencies = [ - ('teams', '0001_initial'), - ('accounts', '0001_initial'), - ('common', '0001_initial'), - migrations.swappable_dependency(settings.AUTH_USER_MODEL), - ('contacts', '0001_initial'), - ] - - operations = [ - migrations.CreateModel( - name='Company', - fields=[ - ('created_at', models.DateTimeField(auto_now_add=True, verbose_name='Created At')), - ('updated_at', models.DateTimeField(auto_now=True, verbose_name='Last Modified At')), - ('id', models.UUIDField(db_index=True, default=uuid.uuid4, editable=False, primary_key=True, serialize=False, unique=True)), - ('name', models.CharField(blank=True, max_length=100, null=True)), - ('created_by', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='%(class)s_created_by', to=settings.AUTH_USER_MODEL, verbose_name='Created By')), - ('org', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='common.org')), - ('updated_by', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='%(class)s_updated_by', to=settings.AUTH_USER_MODEL, verbose_name='Last Modified By')), - ], - options={ - 'verbose_name': 'Company', - 'verbose_name_plural': 'Companies', - 'db_table': 'company', - 'ordering': ('-created_at',), - }, - ), - migrations.CreateModel( - name='Lead', - fields=[ - ('created_at', models.DateTimeField(auto_now_add=True, verbose_name='Created At')), - ('updated_at', models.DateTimeField(auto_now=True, verbose_name='Last Modified At')), - ('id', models.UUIDField(db_index=True, default=uuid.uuid4, editable=False, primary_key=True, serialize=False, unique=True)), - ('title', models.CharField(max_length=64, verbose_name='Title')), - ('first_name', models.CharField(max_length=255, null=True, verbose_name='First name')), - ('last_name', models.CharField(max_length=255, null=True, verbose_name='Last name')), - ('email', models.EmailField(blank=True, max_length=254, null=True)), - ('phone', phonenumber_field.modelfields.PhoneNumberField(blank=True, max_length=128, null=True, region=None)), - ('status', models.CharField(blank=True, choices=[('assigned', 'Assigned'), ('in process', 'In Process'), ('converted', 'Converted'), ('recycled', 'Recycled'), ('closed', 'Closed')], max_length=255, null=True, verbose_name='Status of Lead')), - ('source', models.CharField(blank=True, choices=[('call', 'Call'), ('email', 'Email'), ('existing customer', 'Existing Customer'), ('partner', 'Partner'), ('public relations', 'Public Relations'), ('compaign', 'Campaign'), ('other', 'Other')], max_length=255, null=True, verbose_name='Source of Lead')), - ('address_line', models.CharField(blank=True, max_length=255, null=True, verbose_name='Address')), - ('street', models.CharField(blank=True, max_length=55, null=True, verbose_name='Street')), - ('city', models.CharField(blank=True, max_length=255, null=True, verbose_name='City')), - ('state', models.CharField(blank=True, max_length=255, null=True, verbose_name='State')), - ('postcode', models.CharField(blank=True, max_length=64, null=True, verbose_name='Post/Zip-code')), - ('country', models.CharField(blank=True, choices=[('GB', 'United Kingdom'), ('AF', 'Afghanistan'), ('AX', 'Aland Islands'), ('AL', 'Albania'), ('DZ', 'Algeria'), ('AS', 'American Samoa'), ('AD', 'Andorra'), ('AO', 'Angola'), ('AI', 'Anguilla'), ('AQ', 'Antarctica'), ('AG', 'Antigua and Barbuda'), ('AR', 'Argentina'), ('AM', 'Armenia'), ('AW', 'Aruba'), ('AU', 'Australia'), ('AT', 'Austria'), ('AZ', 'Azerbaijan'), ('BS', 'Bahamas'), ('BH', 'Bahrain'), ('BD', 'Bangladesh'), ('BB', 'Barbados'), ('BY', 'Belarus'), ('BE', 'Belgium'), ('BZ', 'Belize'), ('BJ', 'Benin'), ('BM', 'Bermuda'), ('BT', 'Bhutan'), ('BO', 'Bolivia'), ('BA', 'Bosnia and Herzegovina'), ('BW', 'Botswana'), ('BV', 'Bouvet Island'), ('BR', 'Brazil'), ('IO', 'British Indian Ocean Territory'), ('BN', 'Brunei Darussalam'), ('BG', 'Bulgaria'), ('BF', 'Burkina Faso'), ('BI', 'Burundi'), ('KH', 'Cambodia'), ('CM', 'Cameroon'), ('CA', 'Canada'), ('CV', 'Cape Verde'), ('KY', 'Cayman Islands'), ('CF', 'Central African Republic'), ('TD', 'Chad'), ('CL', 'Chile'), ('CN', 'China'), ('CX', 'Christmas Island'), ('CC', 'Cocos (Keeling) Islands'), ('CO', 'Colombia'), ('KM', 'Comoros'), ('CG', 'Congo'), ('CD', 'Congo, The Democratic Republic of the'), ('CK', 'Cook Islands'), ('CR', 'Costa Rica'), ('CI', "Cote d'Ivoire"), ('HR', 'Croatia'), ('CU', 'Cuba'), ('CY', 'Cyprus'), ('CZ', 'Czech Republic'), ('DK', 'Denmark'), ('DJ', 'Djibouti'), ('DM', 'Dominica'), ('DO', 'Dominican Republic'), ('EC', 'Ecuador'), ('EG', 'Egypt'), ('SV', 'El Salvador'), ('GQ', 'Equatorial Guinea'), ('ER', 'Eritrea'), ('EE', 'Estonia'), ('ET', 'Ethiopia'), ('FK', 'Falkland Islands (Malvinas)'), ('FO', 'Faroe Islands'), ('FJ', 'Fiji'), ('FI', 'Finland'), ('FR', 'France'), ('GF', 'French Guiana'), ('PF', 'French Polynesia'), ('TF', 'French Southern Territories'), ('GA', 'Gabon'), ('GM', 'Gambia'), ('GE', 'Georgia'), ('DE', 'Germany'), ('GH', 'Ghana'), ('GI', 'Gibraltar'), ('GR', 'Greece'), ('GL', 'Greenland'), ('GD', 'Grenada'), ('GP', 'Guadeloupe'), ('GU', 'Guam'), ('GT', 'Guatemala'), ('GG', 'Guernsey'), ('GN', 'Guinea'), ('GW', 'Guinea-Bissau'), ('GY', 'Guyana'), ('HT', 'Haiti'), ('HM', 'Heard Island and McDonald Islands'), ('VA', 'Holy See (Vatican City State)'), ('HN', 'Honduras'), ('HK', 'Hong Kong'), ('HU', 'Hungary'), ('IS', 'Iceland'), ('IN', 'India'), ('ID', 'Indonesia'), ('IR', 'Iran, Islamic Republic of'), ('IQ', 'Iraq'), ('IE', 'Ireland'), ('IM', 'Isle of Man'), ('IL', 'Israel'), ('IT', 'Italy'), ('JM', 'Jamaica'), ('JP', 'Japan'), ('JE', 'Jersey'), ('JO', 'Jordan'), ('KZ', 'Kazakhstan'), ('KE', 'Kenya'), ('KI', 'Kiribati'), ('KP', "Korea, Democratic People's Republic of"), ('KR', 'Korea, Republic of'), ('KW', 'Kuwait'), ('KG', 'Kyrgyzstan'), ('LA', "Lao People's Democratic Republic"), ('LV', 'Latvia'), ('LB', 'Lebanon'), ('LS', 'Lesotho'), ('LR', 'Liberia'), ('LY', 'Libyan Arab Jamahiriya'), ('LI', 'Liechtenstein'), ('LT', 'Lithuania'), ('LU', 'Luxembourg'), ('MO', 'Macao'), ('MK', 'Macedonia, The Former Yugoslav Republic of'), ('MG', 'Madagascar'), ('MW', 'Malawi'), ('MY', 'Malaysia'), ('MV', 'Maldives'), ('ML', 'Mali'), ('MT', 'Malta'), ('MH', 'Marshall Islands'), ('MQ', 'Martinique'), ('MR', 'Mauritania'), ('MU', 'Mauritius'), ('YT', 'Mayotte'), ('MX', 'Mexico'), ('FM', 'Micronesia, Federated States of'), ('MD', 'Moldova'), ('MC', 'Monaco'), ('MN', 'Mongolia'), ('ME', 'Montenegro'), ('MS', 'Montserrat'), ('MA', 'Morocco'), ('MZ', 'Mozambique'), ('MM', 'Myanmar'), ('NA', 'Namibia'), ('NR', 'Nauru'), ('NP', 'Nepal'), ('NL', 'Netherlands'), ('AN', 'Netherlands Antilles'), ('NC', 'New Caledonia'), ('NZ', 'New Zealand'), ('NI', 'Nicaragua'), ('NE', 'Niger'), ('NG', 'Nigeria'), ('NU', 'Niue'), ('NF', 'Norfolk Island'), ('MP', 'Northern Mariana Islands'), ('NO', 'Norway'), ('OM', 'Oman'), ('PK', 'Pakistan'), ('PW', 'Palau'), ('PS', 'Palestinian Territory, Occupied'), ('PA', 'Panama'), ('PG', 'Papua New Guinea'), ('PY', 'Paraguay'), ('PE', 'Peru'), ('PH', 'Philippines'), ('PN', 'Pitcairn'), ('PL', 'Poland'), ('PT', 'Portugal'), ('PR', 'Puerto Rico'), ('QA', 'Qatar'), ('RE', 'Reunion'), ('RO', 'Romania'), ('RU', 'Russian Federation'), ('RW', 'Rwanda'), ('BL', 'Saint Barthelemy'), ('SH', 'Saint Helena'), ('KN', 'Saint Kitts and Nevis'), ('LC', 'Saint Lucia'), ('MF', 'Saint Martin'), ('PM', 'Saint Pierre and Miquelon'), ('VC', 'Saint Vincent and the Grenadines'), ('WS', 'Samoa'), ('SM', 'San Marino'), ('ST', 'Sao Tome and Principe'), ('SA', 'Saudi Arabia'), ('SN', 'Senegal'), ('RS', 'Serbia'), ('SC', 'Seychelles'), ('SL', 'Sierra Leone'), ('SG', 'Singapore'), ('SK', 'Slovakia'), ('SI', 'Slovenia'), ('SB', 'Solomon Islands'), ('SO', 'Somalia'), ('ZA', 'South Africa'), ('GS', 'South Georgia and the South Sandwich Islands'), ('ES', 'Spain'), ('LK', 'Sri Lanka'), ('SD', 'Sudan'), ('SR', 'Suriname'), ('SJ', 'Svalbard and Jan Mayen'), ('SZ', 'Swaziland'), ('SE', 'Sweden'), ('CH', 'Switzerland'), ('SY', 'Syrian Arab Republic'), ('TW', 'Taiwan, Province of China'), ('TJ', 'Tajikistan'), ('TZ', 'Tanzania, United Republic of'), ('TH', 'Thailand'), ('TL', 'Timor-Leste'), ('TG', 'Togo'), ('TK', 'Tokelau'), ('TO', 'Tonga'), ('TT', 'Trinidad and Tobago'), ('TN', 'Tunisia'), ('TR', 'Turkey'), ('TM', 'Turkmenistan'), ('TC', 'Turks and Caicos Islands'), ('TV', 'Tuvalu'), ('UG', 'Uganda'), ('UA', 'Ukraine'), ('AE', 'United Arab Emirates'), ('US', 'United States'), ('UM', 'United States Minor Outlying Islands'), ('UY', 'Uruguay'), ('UZ', 'Uzbekistan'), ('VU', 'Vanuatu'), ('VE', 'Venezuela'), ('VN', 'Viet Nam'), ('VG', 'Virgin Islands, British'), ('VI', 'Virgin Islands, U.S.'), ('WF', 'Wallis and Futuna'), ('EH', 'Western Sahara'), ('YE', 'Yemen'), ('ZM', 'Zambia'), ('ZW', 'Zimbabwe')], max_length=3, null=True)), - ('website', models.CharField(blank=True, max_length=255, null=True, verbose_name='Website')), - ('description', models.TextField(blank=True, null=True)), - ('account_name', models.CharField(blank=True, max_length=255, null=True)), - ('opportunity_amount', models.DecimalField(blank=True, decimal_places=2, max_digits=12, null=True, verbose_name='Opportunity Amount')), - ('is_active', models.BooleanField(default=False)), - ('enquiry_type', models.CharField(blank=True, max_length=255, null=True)), - ('created_from_site', models.BooleanField(default=False)), - ('skype_ID', models.CharField(blank=True, max_length=100, null=True)), - ('industry', models.CharField(blank=True, choices=[('ADVERTISING', 'ADVERTISING'), ('AGRICULTURE', 'AGRICULTURE'), ('APPAREL & ACCESSORIES', 'APPAREL & ACCESSORIES'), ('AUTOMOTIVE', 'AUTOMOTIVE'), ('BANKING', 'BANKING'), ('BIOTECHNOLOGY', 'BIOTECHNOLOGY'), ('BUILDING MATERIALS & EQUIPMENT', 'BUILDING MATERIALS & EQUIPMENT'), ('CHEMICAL', 'CHEMICAL'), ('COMPUTER', 'COMPUTER'), ('EDUCATION', 'EDUCATION'), ('ELECTRONICS', 'ELECTRONICS'), ('ENERGY', 'ENERGY'), ('ENTERTAINMENT & LEISURE', 'ENTERTAINMENT & LEISURE'), ('FINANCE', 'FINANCE'), ('FOOD & BEVERAGE', 'FOOD & BEVERAGE'), ('GROCERY', 'GROCERY'), ('HEALTHCARE', 'HEALTHCARE'), ('INSURANCE', 'INSURANCE'), ('LEGAL', 'LEGAL'), ('MANUFACTURING', 'MANUFACTURING'), ('PUBLISHING', 'PUBLISHING'), ('REAL ESTATE', 'REAL ESTATE'), ('SERVICE', 'SERVICE'), ('SOFTWARE', 'SOFTWARE'), ('SPORTS', 'SPORTS'), ('TECHNOLOGY', 'TECHNOLOGY'), ('TELECOMMUNICATIONS', 'TELECOMMUNICATIONS'), ('TELEVISION', 'TELEVISION'), ('TRANSPORTATION', 'TRANSPORTATION'), ('VENTURE CAPITAL', 'VENTURE CAPITAL')], max_length=255, null=True, verbose_name='Industry Type')), - ('organization', models.CharField(max_length=255, null=True, verbose_name='Organization')), - ('probability', models.IntegerField(blank=True, default=0, null=True)), - ('close_date', models.DateField(default=None, null=True)), - ('assigned_to', models.ManyToManyField(related_name='lead_assigned_users', to='common.profile')), - ('company', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='lead_company', to='leads.company')), - ('contacts', models.ManyToManyField(related_name='lead_contacts', to='contacts.contact')), - ('created_by', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='lead_created_by', to='common.profile')), - ('org', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='lead_org', to='common.org')), - ('tags', models.ManyToManyField(blank=True, to='accounts.tags')), - ('teams', models.ManyToManyField(related_name='lead_teams', to='teams.teams')), - ('updated_by', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='%(class)s_updated_by', to=settings.AUTH_USER_MODEL, verbose_name='Last Modified By')), - ], - options={ - 'verbose_name': 'Lead', - 'verbose_name_plural': 'Leads', - 'db_table': 'lead', - 'ordering': ('-created_at',), - }, - ), - ] diff --git a/leads/migrations/0002_alter_lead_created_by.py b/leads/migrations/0002_alter_lead_created_by.py deleted file mode 100644 index 97a18363..00000000 --- a/leads/migrations/0002_alter_lead_created_by.py +++ /dev/null @@ -1,21 +0,0 @@ -# Generated by Django 4.2.1 on 2023-06-29 07:31 - -from django.conf import settings -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - migrations.swappable_dependency(settings.AUTH_USER_MODEL), - ('leads', '0001_initial'), - ] - - operations = [ - migrations.AlterField( - model_name='lead', - name='created_by', - field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='%(class)s_created_by', to=settings.AUTH_USER_MODEL, verbose_name='Created By'), - ), - ] diff --git a/opportunity/migrations/0001_initial.py b/opportunity/migrations/0001_initial.py deleted file mode 100644 index 9cc9679b..00000000 --- a/opportunity/migrations/0001_initial.py +++ /dev/null @@ -1,54 +0,0 @@ -# Generated by Django 4.2.1 on 2023-06-19 13:08 - -from django.conf import settings -from django.db import migrations, models -import django.db.models.deletion -import uuid - - -class Migration(migrations.Migration): - - initial = True - - dependencies = [ - ('teams', '0001_initial'), - ('accounts', '0001_initial'), - ('common', '0001_initial'), - migrations.swappable_dependency(settings.AUTH_USER_MODEL), - ('contacts', '0001_initial'), - ] - - operations = [ - migrations.CreateModel( - name='Opportunity', - fields=[ - ('created_at', models.DateTimeField(auto_now_add=True, verbose_name='Created At')), - ('updated_at', models.DateTimeField(auto_now=True, verbose_name='Last Modified At')), - ('id', models.UUIDField(db_index=True, default=uuid.uuid4, editable=False, primary_key=True, serialize=False, unique=True)), - ('name', models.CharField(max_length=64, verbose_name='Name')), - ('stage', models.CharField(choices=[('QUALIFICATION', 'QUALIFICATION'), ('NEEDS ANALYSIS', 'NEEDS ANALYSIS'), ('VALUE PROPOSITION', 'VALUE PROPOSITION'), ('ID.DECISION MAKERS', 'ID.DECISION MAKERS'), ('PERCEPTION ANALYSIS', 'PERCEPTION ANALYSIS'), ('PROPOSAL/PRICE QUOTE', 'PROPOSAL/PRICE QUOTE'), ('NEGOTIATION/REVIEW', 'NEGOTIATION/REVIEW'), ('CLOSED WON', 'CLOSED WON'), ('CLOSED LOST', 'CLOSED LOST')], max_length=64, verbose_name='Stage')), - ('currency', models.CharField(blank=True, choices=[('AED', 'AED, Dirham'), ('AFN', 'AFN, Afghani'), ('ALL', 'ALL, Lek'), ('AMD', 'AMD, Dram'), ('ANG', 'ANG, Guilder'), ('AOA', 'AOA, Kwanza'), ('ARS', 'ARS, Peso'), ('AUD', 'AUD, Dollar'), ('AWG', 'AWG, Guilder'), ('AZN', 'AZN, Manat'), ('BAM', 'BAM, Marka'), ('BBD', 'BBD, Dollar'), ('BDT', 'BDT, Taka'), ('BGN', 'BGN, Lev'), ('BHD', 'BHD, Dinar'), ('BIF', 'BIF, Franc'), ('BMD', 'BMD, Dollar'), ('BND', 'BND, Dollar'), ('BOB', 'BOB, Boliviano'), ('BRL', 'BRL, Real'), ('BSD', 'BSD, Dollar'), ('BTN', 'BTN, Ngultrum'), ('BWP', 'BWP, Pula'), ('BYR', 'BYR, Ruble'), ('BZD', 'BZD, Dollar'), ('CAD', 'CAD, Dollar'), ('CDF', 'CDF, Franc'), ('CHF', 'CHF, Franc'), ('CLP', 'CLP, Peso'), ('CNY', 'CNY, Yuan Renminbi'), ('COP', 'COP, Peso'), ('CRC', 'CRC, Colon'), ('CUP', 'CUP, Peso'), ('CVE', 'CVE, Escudo'), ('CZK', 'CZK, Koruna'), ('DJF', 'DJF, Franc'), ('DKK', 'DKK, Krone'), ('DOP', 'DOP, Peso'), ('DZD', 'DZD, Dinar'), ('EGP', 'EGP, Pound'), ('ERN', 'ERN, Nakfa'), ('ETB', 'ETB, Birr'), ('EUR', 'EUR, Euro'), ('FJD', 'FJD, Dollar'), ('FKP', 'FKP, Pound'), ('GBP', 'GBP, Pound'), ('GEL', 'GEL, Lari'), ('GHS', 'GHS, Cedi'), ('GIP', 'GIP, Pound'), ('GMD', 'GMD, Dalasi'), ('GNF', 'GNF, Franc'), ('GTQ', 'GTQ, Quetzal'), ('GYD', 'GYD, Dollar'), ('HKD', 'HKD, Dollar'), ('HNL', 'HNL, Lempira'), ('HRK', 'HRK, Kuna'), ('HTG', 'HTG, Gourde'), ('HUF', 'HUF, Forint'), ('IDR', 'IDR, Rupiah'), ('ILS', 'ILS, Shekel'), ('INR', 'INR, Rupee'), ('IQD', 'IQD, Dinar'), ('IRR', 'IRR, Rial'), ('ISK', 'ISK, Krona'), ('JMD', 'JMD, Dollar'), ('JOD', 'JOD, Dinar'), ('JPY', 'JPY, Yen'), ('KES', 'KES, Shilling'), ('KGS', 'KGS, Som'), ('KHR', 'KHR, Riels'), ('KMF', 'KMF, Franc'), ('KPW', 'KPW, Won'), ('KRW', 'KRW, Won'), ('KWD', 'KWD, Dinar'), ('KYD', 'KYD, Dollar'), ('KZT', 'KZT, Tenge'), ('LAK', 'LAK, Kip'), ('LBP', 'LBP, Pound'), ('LKR', 'LKR, Rupee'), ('LRD', 'LRD, Dollar'), ('LSL', 'LSL, Loti'), ('LTL', 'LTL, Litas'), ('LVL', 'LVL, Lat'), ('LYD', 'LYD, Dinar'), ('MAD', 'MAD, Dirham'), ('MDL', 'MDL, Leu'), ('MGA', 'MGA, Ariary'), ('MKD', 'MKD, Denar'), ('MMK', 'MMK, Kyat'), ('MNT', 'MNT, Tugrik'), ('MOP', 'MOP, Pataca'), ('MRO', 'MRO, Ouguiya'), ('MUR', 'MUR, Rupee'), ('MVR', 'MVR, Rufiyaa'), ('MWK', 'MWK, Kwacha'), ('MXN', 'MXN, Peso'), ('MYR', 'MYR, Ringgit'), ('MZN', 'MZN, Metical'), ('NAD', 'NAD, Dollar'), ('NGN', 'NGN, Naira'), ('NIO', 'NIO, Cordoba'), ('NOK', 'NOK, Krone'), ('NPR', 'NPR, Rupee'), ('NZD', 'NZD, Dollar'), ('OMR', 'OMR, Rial'), ('PAB', 'PAB, Balboa'), ('PEN', 'PEN, Sol'), ('PGK', 'PGK, Kina'), ('PHP', 'PHP, Peso'), ('PKR', 'PKR, Rupee'), ('PLN', 'PLN, Zloty'), ('PYG', 'PYG, Guarani'), ('QAR', 'QAR, Rial'), ('RON', 'RON, Leu'), ('RSD', 'RSD, Dinar'), ('RUB', 'RUB, Ruble'), ('RWF', 'RWF, Franc'), ('SAR', 'SAR, Rial'), ('SBD', 'SBD, Dollar'), ('SCR', 'SCR, Rupee'), ('SDG', 'SDG, Pound'), ('SEK', 'SEK, Krona'), ('SGD', 'SGD, Dollar'), ('SHP', 'SHP, Pound'), ('SLL', 'SLL, Leone'), ('SOS', 'SOS, Shilling'), ('SRD', 'SRD, Dollar'), ('SSP', 'SSP, Pound'), ('STD', 'STD, Dobra'), ('SYP', 'SYP, Pound'), ('SZL', 'SZL, Lilangeni'), ('THB', 'THB, Baht'), ('TJS', 'TJS, Somoni'), ('TMT', 'TMT, Manat'), ('TND', 'TND, Dinar'), ('TOP', 'TOP, Paanga'), ('TRY', 'TRY, Lira'), ('TTD', 'TTD, Dollar'), ('TWD', 'TWD, Dollar'), ('TZS', 'TZS, Shilling'), ('UAH', 'UAH, Hryvnia'), ('UGX', 'UGX, Shilling'), ('USD', '$, Dollar'), ('UYU', 'UYU, Peso'), ('UZS', 'UZS, Som'), ('VEF', 'VEF, Bolivar'), ('VND', 'VND, Dong'), ('VUV', 'VUV, Vatu'), ('WST', 'WST, Tala'), ('XAF', 'XAF, Franc'), ('XCD', 'XCD, Dollar'), ('XOF', 'XOF, Franc'), ('XPF', 'XPF, Franc'), ('YER', 'YER, Rial'), ('ZAR', 'ZAR, Rand'), ('ZMK', 'ZMK, Kwacha'), ('ZWL', 'ZWL, Dollar')], max_length=3, null=True)), - ('amount', models.DecimalField(blank=True, decimal_places=2, max_digits=12, null=True, verbose_name='Opportunity Amount')), - ('lead_source', models.CharField(blank=True, choices=[('NONE', 'NONE'), ('CALL', 'CALL'), ('EMAIL', ' EMAIL'), ('EXISTING CUSTOMER', 'EXISTING CUSTOMER'), ('PARTNER', 'PARTNER'), ('PUBLIC RELATIONS', 'PUBLIC RELATIONS'), ('CAMPAIGN', 'CAMPAIGN'), ('WEBSITE', 'WEBSITE'), ('OTHER', 'OTHER')], max_length=255, null=True, verbose_name='Source of Lead')), - ('probability', models.IntegerField(blank=True, default=0, null=True)), - ('closed_on', models.DateField(blank=True, null=True)), - ('description', models.TextField(blank=True, null=True)), - ('is_active', models.BooleanField(default=False)), - ('account', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='opportunities', to='accounts.account')), - ('assigned_to', models.ManyToManyField(related_name='opportunity_assigned_to', to='common.profile')), - ('closed_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='oppurtunity_closed_by', to='common.profile')), - ('contacts', models.ManyToManyField(to='contacts.contact')), - ('created_by', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='opportunity_created_by', to='common.profile')), - ('org', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='oppurtunity_org', to='common.org')), - ('tags', models.ManyToManyField(blank=True, to='accounts.tags')), - ('teams', models.ManyToManyField(related_name='oppurtunity_teams', to='teams.teams')), - ('updated_by', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='%(class)s_updated_by', to=settings.AUTH_USER_MODEL, verbose_name='Last Modified By')), - ], - options={ - 'verbose_name': 'Opportunity', - 'verbose_name_plural': 'Opportunities', - 'db_table': 'opportunity', - 'ordering': ('-created_at',), - }, - ), - ] diff --git a/opportunity/migrations/0002_alter_opportunity_created_by.py b/opportunity/migrations/0002_alter_opportunity_created_by.py deleted file mode 100644 index f4b2ec97..00000000 --- a/opportunity/migrations/0002_alter_opportunity_created_by.py +++ /dev/null @@ -1,21 +0,0 @@ -# Generated by Django 4.2.1 on 2023-10-31 12:35 - -from django.conf import settings -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - migrations.swappable_dependency(settings.AUTH_USER_MODEL), - ('opportunity', '0001_initial'), - ] - - operations = [ - migrations.AlterField( - model_name='opportunity', - name='created_by', - field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='%(class)s_created_by', to=settings.AUTH_USER_MODEL, verbose_name='Created By'), - ), - ] diff --git a/opportunity/models.py b/opportunity/models.py deleted file mode 100644 index be39c647..00000000 --- a/opportunity/models.py +++ /dev/null @@ -1,91 +0,0 @@ -import arrow -from django.db import models -from django.utils.translation import gettext_lazy as _ -from django.utils.translation import pgettext_lazy - -from accounts.models import Account, Tags -from common.models import Org, Profile -from common.base import BaseModel -from common.utils import CURRENCY_CODES, SOURCES, STAGES -from contacts.models import Contact -from teams.models import Teams - - -class Opportunity(BaseModel): - name = models.CharField(pgettext_lazy("Name of Opportunity", "Name"), max_length=64) - account = models.ForeignKey( - Account, - related_name="opportunities", - on_delete=models.CASCADE, - blank=True, - null=True, - ) - stage = models.CharField( - pgettext_lazy("Stage of Opportunity", "Stage"), max_length=64, choices=STAGES - ) - currency = models.CharField( - max_length=3, choices=CURRENCY_CODES, blank=True, null=True - ) - amount = models.DecimalField( - _("Opportunity Amount"), decimal_places=2, max_digits=12, blank=True, null=True - ) - lead_source = models.CharField( - _("Source of Lead"), max_length=255, choices=SOURCES, blank=True, null=True - ) - probability = models.IntegerField(default=0, blank=True, null=True) - contacts = models.ManyToManyField(Contact) - closed_by = models.ForeignKey( - Profile, - on_delete=models.SET_NULL, - null=True, - blank=True, - related_name="oppurtunity_closed_by", - ) - # closed_on = models.DateTimeField(blank=True, null=True) - closed_on = models.DateField(blank=True, null=True) - description = models.TextField(blank=True, null=True) - assigned_to = models.ManyToManyField( - Profile, related_name="opportunity_assigned_to" - ) - is_active = models.BooleanField(default=False) - tags = models.ManyToManyField(Tags, blank=True) - teams = models.ManyToManyField(Teams, related_name="oppurtunity_teams") - org = models.ForeignKey( - Org, - on_delete=models.SET_NULL, - null=True, - blank=True, - related_name="oppurtunity_org", - ) - - class Meta: - verbose_name = "Opportunity" - verbose_name_plural = "Opportunities" - db_table = "opportunity" - ordering = ("-created_at",) - - def __str__(self): - return f"{self.name}" - - @property - def created_on_arrow(self): - return arrow.get(self.created_at).humanize() - - @property - def get_team_users(self): - team_user_ids = list(self.teams.values_list("users__id", flat=True)) - return Profile.objects.filter(id__in=team_user_ids) - - @property - def get_team_and_assigned_users(self): - team_user_ids = list(self.teams.values_list("users__id", flat=True)) - assigned_user_ids = list(self.assigned_to.values_list("id", flat=True)) - user_ids = team_user_ids + assigned_user_ids - return Profile.objects.filter(id__in=user_ids) - - @property - def get_assigned_users_not_in_teams(self): - team_user_ids = list(self.teams.values_list("users__id", flat=True)) - assigned_user_ids = list(self.assigned_to.values_list("id", flat=True)) - user_ids = set(assigned_user_ids) - set(team_user_ids) - return Profile.objects.filter(id__in=list(user_ids)) diff --git a/planner/__init__.py b/planner/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/planner/admin.py b/planner/admin.py deleted file mode 100644 index c79ff80c..00000000 --- a/planner/admin.py +++ /dev/null @@ -1,8 +0,0 @@ -from django.contrib import admin - -from .models import Reminder - -# Register your models here. - -# admin.site.register(Event) -admin.site.register(Reminder) diff --git a/planner/apps.py b/planner/apps.py deleted file mode 100644 index a52d5f9f..00000000 --- a/planner/apps.py +++ /dev/null @@ -1,5 +0,0 @@ -from django.apps import AppConfig - - -class PlannerConfig(AppConfig): - name = "planner" diff --git a/planner/forms.py b/planner/forms.py deleted file mode 100644 index b2d481bb..00000000 --- a/planner/forms.py +++ /dev/null @@ -1,97 +0,0 @@ -from django import forms - -from planner.models import Reminder - -# class EventForm(forms.ModelForm): -# class Meta: -# model = Event -# fields = ['name', 'status', 'start_date', 'description', 'assigned_to', 'attendees_user', -# 'attendees_contacts', 'attendees_leads'] - -# start_date = forms.DateTimeField(input_formats=['%m/%d/%Y %H:%M:%S'], error_messages={ -# 'invalid': ("Invalid Startdate")}, required=True) -# parent_id = forms.IntegerField(required=False) -# parent_typeChoices = ( -# ('Account', 'Account'), ('Lead', 'Lead'), ('Opportunity', 'Opportunity'), -# ('Case', 'Case')) -# parent_type = forms.ChoiceField(choices=parent_typeChoices, error_messages={ -# 'invalid': ("Invalid parent_type selected.")}, required=False) - - -# class TaskEventForm(EventForm): -# class Meta(EventForm.Meta): -# model = Event -# fields = ['priority', 'close_date', 'event_type'] + EventForm.Meta.fields - -# parent_typeChoices = ( -# ('Account', 'Account'), ('Contact', 'Contact'), ('Lead', 'Lead'), ('Opportunity', 'Opportunity'), -# ('Case', 'Case')) -# parent_type = forms.ChoiceField(choices=parent_typeChoices, error_messages={ -# 'invalid': ("Invalid parent_type selected.")}, required=False) -# priority = forms.ChoiceField(choices=(('Low', 'Low'), ('Normal', 'Normal'), ('High', 'High'), ('Urgent', 'Urgent')), -# error_messages={ -# 'invalid': ("Invalid Priority selected.")}, required=True) # only tasks -# close_date = forms.DateTimeField(input_formats=['%m/%d/%Y %H:%M:%S'], required=True) - - -# class CallEventForm(EventForm): -# class Meta(EventForm.Meta): -# model = Event -# fields = ['direction', 'duration', 'event_type'] + EventForm.Meta.fields - -# direction = forms.ChoiceField(choices=(('Outbound', 'Outbound'), -# ('Inbound', 'Inbound')), error_messages={ -# 'invalid': ("Invalid Direction selected.")}, required=True) # only calls -# duration = forms.ChoiceField(choices=(("300", "5m"), -# ("600", "10m"), -# ("900", "15m"), -# ("1800", "30m"), -# ("2700", "45m"), -# ("3600", "1h"), -# ("7600", "2h")), error_messages={ -# 'invalid': ("Invalid Duration selected.")}, required=True) # not for tasks - - -class ReminderForm(forms.ModelForm): - class Meta: - model = Reminder - fields = "__all__" - - reminder_type = forms.ChoiceField( - choices=(("Email", "Email"), ("Popup", "Popup")), - widget=forms.Select(attrs={"class": "form-control input-sm"}), - ) - reminder_time = forms.ChoiceField( - choices=( - ("0", "on time"), - ("60", "1m before"), - ("120", "2m before"), - ("300", "5m before"), - ("600", "10m before"), - ("900", "15m before"), - ("1800", "30m before"), - ("3600", "1h before"), - ("7200", "2h before"), - ("10800", "3h before"), - ("18000", "5h before"), - ("86400", "1d before"), - ), - widget=forms.Select(attrs={"class": "form-control input-sm"}), - ) - - -# class MeetingEventForm(EventForm): -# class Meta(EventForm.Meta): -# model = Event -# fields = ['duration', 'close_date', 'event_type', ] + EventForm.Meta.fields - -# duration = forms.ChoiceField(choices=( -# ("900", "15m"), -# ("1800", "30m"), -# ("3600", "1h"), -# ("7200", "2h"), -# ("10800", "3h"), -# ("86400", "1d") -# ), error_messages={ -# 'invalid': ("Invalid Duration selected.")}, required=True) # not for tasks -# close_date = forms.DateTimeField(input_formats=['%m/%d/%Y %H:%M:%S'], required=True) diff --git a/planner/migrations/0001_initial.py b/planner/migrations/0001_initial.py deleted file mode 100644 index a50ab301..00000000 --- a/planner/migrations/0001_initial.py +++ /dev/null @@ -1,74 +0,0 @@ -# Generated by Django 4.2.1 on 2023-06-19 13:08 - -from django.conf import settings -from django.db import migrations, models -import django.db.models.deletion -import uuid - - -class Migration(migrations.Migration): - - initial = True - - dependencies = [ - ('contenttypes', '0002_remove_content_type_name'), - ('leads', '0001_initial'), - ('contacts', '0001_initial'), - migrations.swappable_dependency(settings.AUTH_USER_MODEL), - ] - - operations = [ - migrations.CreateModel( - name='Reminder', - fields=[ - ('created_at', models.DateTimeField(auto_now_add=True, verbose_name='Created At')), - ('updated_at', models.DateTimeField(auto_now=True, verbose_name='Last Modified At')), - ('id', models.UUIDField(db_index=True, default=uuid.uuid4, editable=False, primary_key=True, serialize=False, unique=True)), - ('reminder_type', models.CharField(blank=True, max_length=5, null=True)), - ('reminder_time', models.IntegerField(blank=True, null=True, verbose_name='Reminder')), - ('created_by', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='%(class)s_created_by', to=settings.AUTH_USER_MODEL, verbose_name='Created By')), - ('updated_by', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='%(class)s_updated_by', to=settings.AUTH_USER_MODEL, verbose_name='Last Modified By')), - ], - options={ - 'verbose_name': 'Reminder', - 'verbose_name_plural': 'Reminders', - 'db_table': 'reminder', - 'ordering': ('-created_at',), - }, - ), - migrations.CreateModel( - name='PlannerEvent', - fields=[ - ('created_at', models.DateTimeField(auto_now_add=True, verbose_name='Created At')), - ('updated_at', models.DateTimeField(auto_now=True, verbose_name='Last Modified At')), - ('id', models.UUIDField(db_index=True, default=uuid.uuid4, editable=False, primary_key=True, serialize=False, unique=True)), - ('name', models.CharField(max_length=64, verbose_name='Event')), - ('event_type', models.CharField(max_length=7, verbose_name='Type of the event')), - ('object_id', models.PositiveIntegerField(blank=True, null=True)), - ('status', models.CharField(blank=True, choices=[('Planned', 'Planned'), ('Held', 'Held'), ('Not Held', 'Not Held'), ('Not Started', 'Not Started'), ('Started', 'Started'), ('Completed', 'Completed'), ('Canceled', 'Canceled'), ('Deferred', 'Deferred')], max_length=64, verbose_name='Status')), - ('direction', models.CharField(blank=True, max_length=20)), - ('start_date', models.DateField(default=None)), - ('close_date', models.DateField(default=None, null=True)), - ('duration', models.IntegerField(default=None, null=True, verbose_name='Durations')), - ('priority', models.CharField(blank=True, max_length=10)), - ('updated_on', models.DateTimeField(auto_now=True)), - ('created_on', models.DateTimeField(auto_now_add=True, verbose_name='Created on')), - ('description', models.TextField(blank=True, null=True)), - ('is_active', models.BooleanField(default=False)), - ('assigned_to', models.ManyToManyField(blank=True, related_name='event_assigned_users', to=settings.AUTH_USER_MODEL)), - ('attendees_contacts', models.ManyToManyField(blank=True, related_name='attendees_contact', to='contacts.contact')), - ('attendees_leads', models.ManyToManyField(blank=True, related_name='attendees_lead', to='leads.lead')), - ('attendees_user', models.ManyToManyField(blank=True, related_name='attendees_user', to=settings.AUTH_USER_MODEL)), - ('content_type', models.ForeignKey(blank=True, choices=[(10, 'Account'), (13, 'Lead'), (14, 'Opportunity'), (11, 'Case')], limit_choices_to=models.Q(models.Q(('app_label', 'account'), ('id', 10), ('model', 'Account')), models.Q(('app_label', 'leads'), ('id', 13), ('model', 'Lead')), models.Q(('app_label', 'opportunity'), ('id', 14), ('model', 'Opportunity')), models.Q(('app_label', 'cases'), ('id', 11), ('model', 'Case')), _connector='OR'), null=True, on_delete=django.db.models.deletion.CASCADE, to='contenttypes.contenttype')), - ('created_by', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='event_created_by', to=settings.AUTH_USER_MODEL)), - ('reminders', models.ManyToManyField(blank=True, to='planner.reminder')), - ('updated_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='updated_user', to=settings.AUTH_USER_MODEL)), - ], - options={ - 'verbose_name': 'PlannerEvent', - 'verbose_name_plural': 'PlannerEvents', - 'db_table': 'planner_event', - 'ordering': ('-created_at',), - }, - ), - ] diff --git a/planner/migrations/__init__.py b/planner/migrations/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/planner/models.py b/planner/models.py deleted file mode 100644 index 2493f802..00000000 --- a/planner/models.py +++ /dev/null @@ -1,106 +0,0 @@ -from django.contrib.contenttypes.fields import GenericForeignKey -from django.contrib.contenttypes.models import ContentType -from django.db import models -from django.utils.translation import gettext_lazy as _ -from django.utils.translation import pgettext_lazy - -from common.models import User -from common.base import BaseModel -from common.utils import EVENT_PARENT_TYPE, EVENT_STATUS -from contacts.models import Contact -from leads.models import Lead - - -class Reminder(BaseModel): - reminder_type = models.CharField(max_length=5, blank=True, null=True) - reminder_time = models.IntegerField( - pgettext_lazy("time of the reminder to event in Seconds", "Reminder"), - blank=True, - null=True, - ) - - class Meta: - verbose_name = "Reminder" - verbose_name_plural = "Reminders" - db_table = "reminder" - ordering = ("-created_at",) - - def __str__(self): - return f"{self.reminder_type}" - - -class PlannerEvent(BaseModel): - limit = ( - models.Q(app_label="account", model="Account", id=10) - | models.Q(app_label="leads", model="Lead", id=13) - | models.Q(app_label="opportunity", model="Opportunity", id=14) - | models.Q(app_label="cases", model="Case", id=11) - ) - name = models.CharField(pgettext_lazy("Name of the Event", "Event"), max_length=64) - event_type = models.CharField( - _("Type of the event"), max_length=7 - ) # call meeting task - content_type = models.ForeignKey( - ContentType, - on_delete=models.CASCADE, - blank=True, - null=True, - limit_choices_to=limit, - choices=EVENT_PARENT_TYPE, - ) - object_id = models.PositiveIntegerField(blank=True, null=True) - parent = GenericForeignKey("content_type", "object_id") - status = models.CharField( - pgettext_lazy("status of the Event", "Status"), - choices=EVENT_STATUS, - max_length=64, - blank=True, - ) - direction = models.CharField(max_length=20, blank=True) # only for calls - # start_date = models.DateTimeField(default=None) - # close_date = models.DateTimeField(default=None, null=True) - start_date = models.DateField(default=None) - close_date = models.DateField(default=None, null=True) - - duration = models.IntegerField( - pgettext_lazy("Duration of the Event in Seconds", "Durations"), - default=None, - null=True, - ) # not for tasks - reminders = models.ManyToManyField(Reminder, blank=True) - priority = models.CharField(max_length=10, blank=True) # only for task - updated_on = models.DateTimeField(auto_now=True) - updated_by = models.ForeignKey( - User, - on_delete=models.SET_NULL, - null=True, - blank=True, - related_name="updated_user", - ) - attendees_user = models.ManyToManyField( - User, blank=True, related_name="attendees_user" - ) - attendees_contacts = models.ManyToManyField( - Contact, blank=True, related_name="attendees_contact" - ) - attendees_leads = models.ManyToManyField( - Lead, blank=True, related_name="attendees_lead" - ) - created_on = models.DateTimeField(_("Created on"), auto_now_add=True) - created_by = models.ForeignKey( - User, related_name="event_created_by", on_delete=models.SET_NULL, null=True - ) - assigned_to = models.ManyToManyField( - User, blank=True, related_name="event_assigned_users", - ) - description = models.TextField(blank=True, null=True) - is_active = models.BooleanField(default=False) - - class Meta: - verbose_name = "PlannerEvent" - verbose_name_plural = "PlannerEvents" - db_table = "planner_event" - ordering = ("-created_at",) - - def __str__(self): - return f"{self.name}" diff --git a/planner/serializer.py b/planner/serializer.py deleted file mode 100644 index e69de29b..00000000 diff --git a/planner/templates/calls.html b/planner/templates/calls.html deleted file mode 100644 index 029eca67..00000000 --- a/planner/templates/calls.html +++ /dev/null @@ -1,570 +0,0 @@ -{% extends 'sales/base.html' %} -{% load static %} -{% block content %} - -
-
CALLS
-
-
-
-
-
- -
- -
-
- -
-
- - - - - - - -    - - - - - -
-
-
- - - - -    - - - - -
-
- -
-
-
- - - - -    - - - - - -
-
-
- - - -   - - - -
- -
- - - -   - - - -
- -
- - - -   - - - -
- -
- - - - -    - - - - -
-
-
-
- - - - - - - - - -
-
- -
-
- - - - -
-
-
-
-
- {# #} - - -
-
-
-
-
- -
- - -
-
-
-
- filters -
-
-
-
- - -
-
-
-
- - -
-
-
-
- - -
-
-
-
- - -
-
-
-
- - -
-
-
-
- - - -
-
-
-
- - - -
-
-
-
-
-
-
- - -
-
-
-
- {% include 'planner/calls_list.html' %} -
- -
- -
- - - -
- - -
-
- - - - - -{% include 'planner/dialog_models.html' %} - - -{% endblock %} \ No newline at end of file diff --git a/planner/templates/calls_list.html b/planner/templates/calls_list.html deleted file mode 100644 index 081a797a..00000000 --- a/planner/templates/calls_list.html +++ /dev/null @@ -1,61 +0,0 @@ -{% load static %} - - - - - - - - - - - {% for call in calls %} - - - - - - - - - {% endfor %} - -
NameParentStatusDate StartActions
{{ call.name }}{{ call.parent }}{{ call.status }}{{ call.start_date }} - -
-{% if calls|length == 0 %} -
No Calls found
-{% endif %} -
-
    -
  • - {% if calls.has_previous %} - Previous - {% endif %} -
  • -
  • - {% for page in calls.paginator.page_range %} -
  • {{ page }} -
  • - {% endfor %} - -
  • - {% if calls.has_next %} - Next - {% endif %} -
  • -
-
- \ No newline at end of file diff --git a/planner/templates/contacts.html b/planner/templates/contacts.html deleted file mode 100644 index 4a0b0ebe..00000000 --- a/planner/templates/contacts.html +++ /dev/null @@ -1,63 +0,0 @@ - - - - - - - - - - {% ifequal contacts|length 0 %} - - - - {% endifequal %} - {% for contact in contacts %} - - - - - - {% endfor %} - -
- - - Name - - - - - Email - -
- NO CONTACTS FOUND!! -
- - - {{ contact.name }} - - {{ contact.email }} -
-
-
    -
  • - {% if contacts.has_previous %} - Previous - {% endif %} -
  • -
  • - {% for page in contacts.paginator.page_range %} -
  • {{ page }} -
  • - {% endfor %} - -
  • - {% if contacts.has_next %} - Next - {% endif %} -
  • -
-
- \ No newline at end of file diff --git a/planner/templates/dialog_models.html b/planner/templates/dialog_models.html deleted file mode 100644 index 35cfa7a6..00000000 --- a/planner/templates/dialog_models.html +++ /dev/null @@ -1,101 +0,0 @@ -{% load static %} - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/planner/templates/events_base.html b/planner/templates/events_base.html deleted file mode 100644 index d2a70256..00000000 --- a/planner/templates/events_base.html +++ /dev/null @@ -1,158 +0,0 @@ - -
-
Contacts
-
-
-
-
-
- - -
- -
- -
-
-
-
-
- - - -
-
-
-
-
- {% block addnew %}{% endblock %} -
-
- - -
-
-
-
- filters -
-
-
-
- - -
-
-
-
- - -
-
-
-
- - -
-
-
-
- - -
-
-
-
- - -
-
-
-
- - - -
-
-
-
- - - -
-
-
-
-
-
-
- - -
-
-
-
- - {% block eventcount %}{% endblock %} -
-
- {% block eventslist %}{% endblock %} -
-
-
-
-
- - - \ No newline at end of file diff --git a/planner/templates/leads.html b/planner/templates/leads.html deleted file mode 100644 index fbbb99c6..00000000 --- a/planner/templates/leads.html +++ /dev/null @@ -1,63 +0,0 @@ - - - - - - - - - - {% ifequal leads|length 0 %} - - - - {% endifequal %} - {% for lead in leads %} - - - - - - {% endfor %} - -
- - - Name - - - - - Email - -
- NO LEADS FOUND!! -
- - - {{ lead.first_name }} - - {{ lead.email }} -
-
-
    -
  • - {% if leads.has_previous %} - Previous - {% endif %} -
  • -
  • - {% for page in leads.paginator.page_range %} -
  • {{ page }} -
  • - {% endfor %} - -
  • - {% if leads.has_next %} - Next - {% endif %} -
  • -
-
- \ No newline at end of file diff --git a/planner/templates/meetings.html b/planner/templates/meetings.html deleted file mode 100644 index 1963c461..00000000 --- a/planner/templates/meetings.html +++ /dev/null @@ -1,519 +0,0 @@ -{% extends 'sales/base.html' %} -{% load static %} -{% block content %} - -
-
MEETINGS
-
-
-
-
-
- -
- -
-
- -
-
- - - - - - - -    - - - - - -
-
-
- - - - -    - - - - -
-
- -
-
-
- - - - -    - - - - -
- -
-
-
- - - -   - - - -
- -
- - - -   - - - -
- -
- - - -   - - - -
- -
- - - - -    - - - - -
-
-
-
- - - - - - - - - -
-
- -
-
- - - - -
-
-
-
-
- {# #} - - -
-
-
-
-
- -
- -
-
-
-
- {% include 'planner/meetings_list.html' %} -
- -
- -
-
- - - - - - -
-
- - - - - -{% include 'planner/dialog_models.html' %} - - -{% endblock %} \ No newline at end of file diff --git a/planner/templates/meetings_list.html b/planner/templates/meetings_list.html deleted file mode 100644 index f9261d49..00000000 --- a/planner/templates/meetings_list.html +++ /dev/null @@ -1,81 +0,0 @@ -{% load static %} - - - - - - - - - - - - - {% for meeting in meetings %} - - - - - - - - {% endfor %} - -
NameParentStatusDate StartActions
{{ meeting.name }}{{ meeting.parent }}{{ meeting.status }}{{ meeting.start_date }} - -
-{% if meetings|length == 0 %} -
No Meetings found
-{% endif %} -
-
    -
  • - {% if meetings.has_previous %} - Previous - {% endif %} -
  • -
  • - {% for page in meetings.paginator.page_range %} -
  • {{ page }} -
  • - {% endfor %} - -
  • - {% if meetings.has_next %} - Next - {% endif %} -
  • -
-
- - \ No newline at end of file diff --git a/planner/templates/reminder.html b/planner/templates/reminder.html deleted file mode 100644 index 7fd0a1de..00000000 --- a/planner/templates/reminder.html +++ /dev/null @@ -1,13 +0,0 @@ -{% load static %} -
- {{ reminder_form_set.management_form }} - {% for form in reminder_form_set %} -
- {{ form.reminder_type }} - {{ form.reminder_time }} - {{ form.DELETE }} - {{ form.id }} -
- {% endfor %} -
- \ No newline at end of file diff --git a/planner/templates/tasks.html b/planner/templates/tasks.html deleted file mode 100644 index ff555e96..00000000 --- a/planner/templates/tasks.html +++ /dev/null @@ -1,405 +0,0 @@ -{% extends 'sales/base.html' %} -{% load static %} -{% block content %} - -
-
TASKS
-
-
-
-
-
- -
- -
-
- -
-
- - - - - - - -    - - - - - -
-
-
- - - - -    - - - - -
-
- -
-
- - - -   - - - -
- -
- - - -   - - - -
- -
- - - -   - - - -
- -
- - - - - - - - - -
-
-
-
-
- - - - -
-
-
-
-
- {# #} - - -
-
-
-
-
- -
- - -
-
-
-
- filters -
-
-
-
- - -
-
-
-
- - -
-
-
-
- - -
-
-
-
- - -
-
-
-
- - -
-
-
-
- - - -
-
-
-
- - - -
-
-
-
-
-
-
- - -
-
-
-
- {% include 'planner/tasks_list.html' %} -
- -
- -
- -
-
-
- - - - - - - -{% include 'planner/dialog_models.html' %} - - -{% endblock %} \ No newline at end of file diff --git a/planner/templates/tasks_list.html b/planner/templates/tasks_list.html deleted file mode 100644 index 1fdae542..00000000 --- a/planner/templates/tasks_list.html +++ /dev/null @@ -1,66 +0,0 @@ -{% load static %} - - - - - - - - - - - - - - {% for task in tasks %} - - - - - - - - - - {% endfor %} - -
NameStatusPriorityDate DueActions
{{ task.name }}{{ task.status }}{{ task.priority }}{{ task.start_date }} - -
-{% if tasks|length == 0 %} -
No Tasks found
-{% endif %} -
-
    -
  • - {% if tasks.has_previous %} - Previous - {% endif %} -
  • -
  • - {% for page in tasks.paginator.page_range %} -
  • {{ page }} -
  • - {% endfor %} - -
  • - {% if tasks.has_next %} - Next - {% endif %} -
  • -
-
- \ No newline at end of file diff --git a/planner/templates/users.html b/planner/templates/users.html deleted file mode 100644 index c6529f16..00000000 --- a/planner/templates/users.html +++ /dev/null @@ -1,64 +0,0 @@ -{% load static %} - - - - - - - - - - {% ifequal users|length 0 %} - - - - {% endifequal %} - {% for user in users %} - - - - - - {% endfor %} - -
- - - Name - - - - - Email - -
- NO USERS FOUND!! -
- - - {{ user.email }} - - {{ user.email }} -
-
-
    -
  • - {% if users.has_previous %} - Previous - {% endif %} -
  • -
  • - {% for page in users.paginator.page_range %} -
  • {{ page }} -
  • - {% endfor %} - -
  • - {% if users.has_next %} - Next - {% endif %} -
  • -
-
- \ No newline at end of file diff --git a/planner/tests.py b/planner/tests.py deleted file mode 100644 index 51ae38d6..00000000 --- a/planner/tests.py +++ /dev/null @@ -1,282 +0,0 @@ -# import datetime -# from django.utils import timezone -# from django.test import TestCase -# from planner.models import Event -# from django.contrib.auth.models import User - - -# class EventObjects(object): -# def setUp(self): -# self.user = User.objects.create_superuser( -# 'user@micropyramid.com', 'username', 'password') - -# user_login = self.client.login(username='user@micropyramid.com', password='password') - -# self.meeting = Event.objects.create(event_type='Meeting', name='llll', status='Not Held', -# description='addsdasda', start_date=timezone.now(), -# close_date=timezone.now() + datetime.timedelta(days=5), created_user=self.user) -# self.task = Event.objects.create(event_type='Task', name='dddl', status='Not Held', -# description='addsdasda', start_date=timezone.now(), -# close_date=timezone.now() + datetime.timedelta(days=1), created_user=self.user) -# self.call = Event.objects.create(event_type='Call', name='asdfjkas dfasdfa 555', -# status='Held', -# description='addsdasda', start_date=timezone.now(), -# close_date=timezone.now() + datetime.timedelta(days=2), created_user=self.user) - - -# class EventCreateTestCase(EventObjects, TestCase): -# ''' -# Test for creating Events Through Models -# ''' - -# def test_create_meetings(self): -# self.assertEqual(self.meeting.id, 1) - -# def test_create_task(self): -# self.assertEqual(self.task.id, 2) - -# def test_create_call(self): -# self.assertEqual(self.call.id, 3) - - -# class EventListViewsTestCase(EventObjects, TestCase): -# '''Tests for events lists''' - -# def test_load_meetings(self): -# self.meetings = Event.objects.filter(event_type='Meeting').order_by('-id') -# response = self.client.get('/planner/meetings/list/') -# self.assertEqual(response.status_code, 200) -# self.assertTrue(response.context['meetings']) -# self.assertEqual(response.context['meetings'][0].id, self.meeting.id) -# self.assertTrue(response.context['reminder_form_set']) - -# def test_load_tasks(self): -# self.tasks = Event.objects.filter(event_type='Task').order_by('-id') -# response = self.client.get('/planner/tasks/list/') -# self.assertEqual(response.status_code, 200) -# self.assertEqual(response.context['tasks'][0].id, self.task.id) -# self.assertTrue(response.context['tasks']) - -# def test_load_calls(self): -# self.calls = Event.objects.filter(event_type='Call').order_by('-id') -# response = self.client.get('/planner/calls/list/') -# self.assertEqual(response.status_code, 200) -# self.assertTrue(response.context['calls']) -# self.assertEqual(response.context['calls'][0].id, self.call.id) -# self.assertTrue(response.context['reminder_form_set']) - - -# class EventCreateUsingURLsTestCase(EventObjects, TestCase): -# ''' -# Tests for testing Views using URLs and POST data -# ''' - -# def test_create_meeting(self): -# response = self.client.post('/planner/meeting/create/', {'name': 'dfasdf', -# 'parent_type': 'Case', -# 'parent_id': '', -# 'status': 'Held', -# 'event_type': 'Meeting', -# 'duration': '7200', -# 'start_date': str(timezone.now().strftime( -# '%m/%d/%Y %H:%M:%S')), -# 'close_date': str( -# (timezone.now() + datetime.timedelta( -# days=6)).strftime('%m/%d/%Y %H:%M:%S')), -# 'form-TOTAL_FORMS': '1', -# 'form-INITIAL_FORMS': '0', -# 'form-MAX_NUM_FORMS': '10', -# 'form-0-reminder_type': 'Email', -# 'form-0-reminder_time': '120', -# 'form-0-DELETE': '', -# 'form-0-id': '' -# }) - -# self.assertEqual(response.status_code, 200) -# self.assertEqual('Meeting Created', response.json()['success']) - -# def test_create_meeting_with_empty_data(self): -# response = self.client.post('/planner/meeting/create/', {'name': '', -# 'parent_type': '', -# 'status': '', -# 'event_type': '', -# 'parent_id': '', -# 'duration': '', -# 'start_date': '', -# 'close_date': '', -# 'form-TOTAL_FORMS': '', -# 'form-INITIAL_FORMS': '', -# 'form-MAX_NUM_FORMS': '', -# 'form-0-reminder_type': '', -# 'form-0-reminder_time': '', -# 'form-0-DELETE': '', -# 'form-0-id': '' -# }) - -# self.assertEqual(response.status_code, 200) -# self.assertIn('name', response.json().keys()) -# self.assertIn('duration', response.json().keys()) -# self.assertEqual(['This field is required.'], response.json()['name']) -# self.assertEqual(['This field is required.'], response.json()['event_type']) -# self.assertEqual(['This field is required.'], response.json()['start_date']) -# self.assertEqual(['This field is required.'], response.json()['close_date']) - -# def test_create_meeting_with_invalid_data(self): -# response = self.client.post('/planner/meeting/create/', {'name': '', -# 'parent_type': 'qqqweq', -# 'parent_id': '22', -# 'status': 'qweqw#e', -# 'event_type': 'eq##we', -# 'duration': 'qw66e', -# 'start_date': '654sad654', -# 'close_date': '65sda', -# 'form-TOTAL_FORMS': '', -# 'form-INITIAL_FORMS': '', -# 'form-MAX_NUM_FORMS': '', -# 'form-0-reminder_type': '', -# 'form-0-reminder_time': '', -# 'form-0-DELETE': '', -# 'form-0-id': '' -# }) - -# self.assertEqual(response.status_code, 200) -# self.assertEqual(['This field is required.'], response.json()['name']) -# self.assertEqual(['Enter a valid date/time.'], response.json()['close_date']) -# self.assertEqual(['Invalid Startdate'], response.json()['start_date']) -# self.assertEqual(['Select a valid choice. qw66e is not one of the available choices.'], -# response.json()['duration']) -# self.assertEqual(['Select a valid choice. qweqw#e is not one of the available choices.'], -# response.json()['status']) -# self.assertEqual(['Select a valid choice. qqqweq is not one of the available choices.'], -# response.json()['parent_type']) - -# def test_create_task(self): -# data = {'name': 'dfasdf', -# 'parent_type': 'Account', -# 'status': 'Held', -# 'event_type': 'Task', -# 'duration': '1800', -# 'priority': 'High', -# 'start_date': str(timezone.now().strftime('%m/%d/%Y %H:%M:%S')), -# 'close_date': str((timezone.now() + datetime.timedelta( -# days=6)).strftime('%m/%d/%Y %H:%M:%S')), -# } -# response = self.client.post('/planner/task/create/', data) -# self.assertEqual(response.status_code, 200) -# self.assertEqual('Task Created', response.json()['success']) - -# def test_create_call(self): -# response = self.client.post('/planner/call/create/', {'name': 'dfasdf', -# 'parent_type': 'Account', -# 'event_type': 'Call', -# 'duration': '3600', -# 'direction': 'Outbound', -# 'start_date': str(timezone.now().strftime( -# '%m/%d/%Y %H:%M:%S')), -# 'form-TOTAL_FORMS': '1', -# 'form-INITIAL_FORMS': '0', -# 'form-MAX_NUM_FORMS': '10', -# 'form-0-reminder_type': 'Email', -# 'form-0-reminder_time': '120', -# 'form-0-DELETE': '', -# 'form-0-id': '' -# }) - -# self.assertEqual(response.status_code, 200) -# self.assertEqual('Call Created', response.json()['success']) - - -# class EventsGetViewsTestCase(EventObjects, TestCase): -# ''' -# Tests for getting a meeting with ID -# ''' - -# def test_get_meeting_validID(self): -# response = self.client.post('/planner/get/meeting/', { -# 'meetingID': self.meeting.id -# }) -# self.assertEqual(response.status_code, 200) -# self.assertEqual('Meeting', response.json()['meeting']['event_type']) - -# def test_get_meeting_invalidID(self): -# response = self.client.post('/planner/get/meeting/', { -# 'meetingID': 6 -# }) -# self.assertEqual(response.status_code, 200) -# self.assertEqual({'Event': 'DoesNotExist'}, response.json()) - -# def test_get_task_validID(self): -# response = self.client.post('/planner/get/task/', { -# 'taskID': self.task.id -# }) -# self.assertEqual(response.status_code, 200) -# self.assertEqual('Task', response.json()['task']['event_type']) - -# def test_get_task_invalidID(self): -# response = self.client.post('/planner/get/task/', { -# 'taskID': 6 -# }) -# self.assertEqual(response.status_code, 200) -# self.assertEqual({'Event': 'DoesNotExist'}, response.json()) - -# def test_get_call_validID(self): -# response = self.client.post('/planner/get/call/', { -# 'callID': self.call.id -# }) -# self.assertEqual(response.status_code, 200) -# self.assertEqual('Call', response.json()['call']['event_type']) - -# def test_get_call_invalidID(self): -# response = self.client.post('/planner/get/call/', { -# 'callID': 67 -# }) -# self.assertEqual(response.status_code, 200) -# self.assertEqual({'Event': 'DoesNotExist'}, response.json()) - - -# class EventsDeleteViewsTestCase(EventObjects, TestCase): -# ''' -# Tests for getting a meeting with ID -# ''' - -# def test_delete_meeting_valid_ID(self): -# response = self.client.post('/planner/meeting/delete/', { -# 'meetingID': self.meeting.id -# }) -# self.assertEqual(response.status_code, 200) -# self.assertEqual({'success': 'Meeting Deleted'}, response.json()) - -# def test_delete_meeting_InvalidID(self): -# response = self.client.post('/planner/meeting/delete/', { -# 'meetingID': '5' -# }) -# self.assertEqual(response.status_code, 200) -# self.assertEqual({'Event': 'DoesNotExist'}, response.json()) - -# def test_delete_task_valid_ID(self): -# response = self.client.post('/planner/task/delete/', { -# 'taskID': self.task.id -# }) -# self.assertEqual(response.status_code, 200) -# self.assertEqual({'success': 'Task Deleted'}, response.json()) - -# def test_delete_task_InvalidID(self): -# response = self.client.post('/planner/task/delete/', { -# 'taskID': '5' -# }) -# self.assertEqual(response.status_code, 200) -# self.assertEqual({'Event': 'DoesNotExist'}, response.json()) - -# def test_delete_call_valid_ID(self): -# response = self.client.post('/planner/call/delete/', { -# 'callID': self.call.id -# }) -# self.assertEqual(response.status_code, 200) -# self.assertEqual({'success': 'Call Deleted'}, response.json()) - -# def test_call_task_InvalidID(self): -# response = self.client.post('/planner/call/delete/', { -# 'callID': '55' -# }) -# self.assertEqual(response.status_code, 200) -# self.assertEqual({'Event': 'DoesNotExist'}, response.json()) diff --git a/planner/urls.py b/planner/urls.py deleted file mode 100644 index d5403d9b..00000000 --- a/planner/urls.py +++ /dev/null @@ -1,38 +0,0 @@ -# from django.conf.urls import url -# from . import views - -# app_name = 'planner' - - -# urlpatterns = [ - -# url(r'^meetings/list/$', views.load_meetings, name='meetings_list'), -# url(r'^tasks/list/$', views.load_tasks, name='tasks_list'), -# url(r'^calls/list/$', views.load_calls, name='calls_list'), - -# url(r'^meeting/create/$', views.create_meeting, name='create_meeting'), -# url(r'^task/create/$', views.create_task, name='create_task'), -# url(r'^call/create/$', views.create_call, name='create_call'), - -# url(r'^meeting/delete/$', views.delete_meeting, name='delete_meeting'), -# url(r'^task/delete/$', views.delete_task, name='delete_task'), -# url(r'^call/delete/$', views.delete_call, name='delete_call'), - -# url(r'^get/meeting/$', views.get_meeting, name='get_meeting'), -# url(r'^get/task/$', views.get_task, name='get_task'), -# url(r'^get/call/$', views.get_call, name='get_call'), - -# url(r'^meeting/update/$', views.update_meeting, name='update_meeting'), -# url(r'^task/update/$', views.update_task, name='update_task'), -# url(r'^call/update/$', views.update_call, name='update_call'), - -# url(r'^get/reminders/$', views.get_reminder_form, name='get_reminder_form'), -# url(r'^get/users/$', views.get_users, name='get_users'), -# url(r'^get/contacts/$', views.get_contacts, name='get_contacts'), -# url(r'^get/leads/$', views.get_leads, name='get_leads'), - -# url(r'^event/set/status/$', views.update_event_status, name='update_event_status'), - -# url(r'^search/events/$', views.search_meetings, name='search_meetings'), - -# ] diff --git a/planner/views.py b/planner/views.py deleted file mode 100644 index b7d5b8d9..00000000 --- a/planner/views.py +++ /dev/null @@ -1,704 +0,0 @@ -# from django.shortcuts import render -# from planner.forms import ReminderForm, MeetingEventForm, CallEventForm, TaskEventForm -# from django.http import HttpResponse, JsonResponse -# from django.contrib.auth.decorators import login_required -# from django.forms import modelformset_factory -# from planner.models import Reminder, Event -# from planner import models -# from django.contrib.auth.models import User -# from accounts.models import Account -# from cases.models import Case -# from opportunity.models import Opportunity -# from contacts.models import Contact -# from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger -# from django.db.models import Q -# from leads.models import Lead -# from django.contrib.contenttypes.models import ContentType -# import datetime - - -# @login_required -# def load_meetings(request): -# if request.method == 'GET': -# RemindersFormSet = modelformset_factory(Reminder, form=ReminderForm, can_delete=True) -# data = { -# 'form-TOTAL_FORMS': '1', -# 'form-INITIAL_FORMS': '0', -# 'form-MAX_NUM_FORMS': '10', -# } -# reminder_form_set = RemindersFormSet(data) -# meetings = Event.objects.filter(Q(created_user=request.user) | Q(updated_user=request.user), -# event_type='Meeting').order_by('-id') -# paginator = Paginator(meetings, 5) -# try: -# meetings = paginator.page(request.GET.get('page')) -# return render(request, 'meetings_list.html', -# {'meetings': meetings}) -# except PageNotAnInteger: -# meetings = paginator.page(1) -# except EmptyPage: -# meetings = paginator.page(paginator.num_pages) -# return render(request, 'meetings.html', -# {'meetings': meetings, 'reminder_form_set': reminder_form_set}) -# else: -# return HttpResponse('Invalid Method or Not Authanticated in load_meetings') - - -# @login_required -# def load_tasks(request): -# if request.method == 'GET': -# tasks = Event.objects.filter(Q(created_user=request.user) | Q(updated_user=request.user), -# event_type='Task').order_by('-id') -# paginator = Paginator(tasks, 3) -# try: -# tasks = paginator.page(request.GET.get('page')) -# return render(request, 'tasks_list.html', -# {'tasks': tasks}) -# except PageNotAnInteger: -# tasks = paginator.page(1) -# except EmptyPage: -# tasks = paginator.page(paginator.num_pages) -# return render(request, 'tasks.html', {'tasks': tasks}) -# else: -# return HttpResponse('Invalid Method or Not Authanticated in load_tasks') - - -# @login_required -# def load_calls(request): -# if request.method == 'GET': -# RemindersFormSet = modelformset_factory(Reminder, form=ReminderForm, can_delete=True) -# data = { -# 'form-TOTAL_FORMS': '1', -# 'form-INITIAL_FORMS': '0', -# 'form-MAX_NUM_FORMS': '10', -# } -# reminder_form_set = RemindersFormSet(data) -# calls = Event.objects.filter(Q(created_user=request.user) | Q(updated_user=request.user), -# event_type='Call').order_by('-id') -# paginator = Paginator(calls, 3) -# try: -# calls = paginator.page(request.GET.get('page')) -# return render(request, 'calls_list.html', -# {'calls': calls}) -# except PageNotAnInteger: -# calls = paginator.page(1) -# except EmptyPage: -# calls = paginator.page(paginator.num_pages) -# return render(request, 'calls.html', {'calls': calls, 'reminder_form_set': reminder_form_set}) -# else: -# return HttpResponse('Invalid Method or Not Authanticated in load_calls') - - -# @login_required -# def create_meeting(request): -# if request.method == 'POST': -# eventForm = MeetingEventForm(request.POST) -# ReminderFormSet = modelformset_factory(Reminder, ReminderForm, can_delete=True) -# reminder_form_set = ReminderFormSet(request.POST) -# if eventForm.is_valid() and reminder_form_set.is_valid(): -# parent_name = None -# if eventForm.cleaned_data.get('parent_type') and eventForm.cleaned_data.get('parent_id'): -# meeting_object = add_parent(eventForm.cleaned_data.get('parent_type'), -# eventForm.cleaned_data.get('parent_id'), eventForm, request.user) -# meeting = meeting_object[0] -# parent_name = meeting_object[1] -# else: -# meeting = eventForm.save(commit=False) -# meeting.created_user = request.user -# meeting.save() -# eventForm.save_m2m() -# reminders = reminder_form_set.save() -# meeting.reminders.add(*reminders) -# return JsonResponse({'success': 'Meeting Created', -# 'id': meeting.id, -# 'name': meeting.name, -# 'parent': parent_name, -# 'status': meeting.status, -# 'startdate': meeting.start_date -# }) -# else: -# return JsonResponse(dict(eventForm.errors)) -# else: -# return JsonResponse({'METHOD': 'INVALID'}) - - -# @login_required -# def create_task(request): -# if request.method == 'POST': -# taskForm = TaskEventForm(request.POST) -# if taskForm.is_valid(): -# if taskForm.cleaned_data.get('parent_type') and taskForm.cleaned_data.get('parent_id'): -# task_object = add_parent(taskForm.cleaned_data.get('parent_type'), -# taskForm.cleaned_data.get('parent_id'), taskForm, request.user) -# task = task_object[0] -# else: -# task = taskForm.save(commit=False) -# task.created_user = request.user -# task.save() -# return JsonResponse({'success': 'Task Created', -# 'id': task.id, -# 'name': task.name, -# 'status': task.status, -# 'priority': task.priority, -# 'startdate': task.start_date}) -# else: -# return JsonResponse(dict(taskForm.errors)) -# else: -# return JsonResponse({'METHOD': 'INVALID'}) - - -# @login_required -# def create_call(request): -# if request.method == 'POST': -# callsForm = CallEventForm(request.POST) -# ReminderFormSet = modelformset_factory(Reminder, ReminderForm, can_delete=True) -# reminder_form_set = ReminderFormSet(request.POST) -# if callsForm.is_valid() and reminder_form_set.is_valid(): -# parent_name = None -# if callsForm.cleaned_data.get('parent_type') and callsForm.cleaned_data.get('parent_id'): -# call_object = add_parent(callsForm.cleaned_data.get('parent_type'), -# callsForm.cleaned_data.get('parent_id'), callsForm, request.user) -# call = call_object[0] -# parent_name = call_object[1] -# else: -# call = callsForm.save(commit=False) -# call.created_user = request.user -# call.save() -# callsForm.save_m2m() -# reminders = reminder_form_set.save() -# call.reminders.add(*reminders) -# return JsonResponse({'success': 'Call Created', -# 'id': call.id, -# 'name': call.name, -# 'parent': parent_name, -# 'status': call.status, -# 'start_date': call.start_date}) -# else: -# return JsonResponse(dict(callsForm.errors)) -# else: -# return JsonResponse({'METHOD': 'INVALID'}) - - -# @login_required -# def delete_meeting(request): -# if request.method == 'POST': -# try: -# Event.objects.get(id=int(request.POST.get('meetingID')), created_user=request.user).delete() -# return JsonResponse({'success': 'Meeting Deleted'}) -# except models.Event.DoesNotExist: -# return JsonResponse({'Event': 'DoesNotExist'}) -# else: -# return JsonResponse({'METHOD': 'INVALID'}) - - -# @login_required -# def delete_task(request): -# if request.method == 'POST': -# try: -# Event.objects.get(id=int(request.POST.get('taskID')), created_user=request.user).delete() -# return JsonResponse({'success': 'Task Deleted'}) -# except models.Event.DoesNotExist: -# return JsonResponse({'Event': 'DoesNotExist'}) -# else: -# return JsonResponse({'METHOD': 'INVALID'}) - - -# @login_required -# def delete_call(request): -# if request.method == 'POST': -# try: -# Event.objects.get(id=int(request.POST.get('callID')), created_user=request.user).delete() -# return JsonResponse({'success': 'Call Deleted'}) -# except models.Event.DoesNotExist: -# return JsonResponse({'Event': 'DoesNotExist'}) -# else: -# return JsonResponse({'METHOD': 'INVALID'}) - - -# @login_required -# def get_meeting(request): -# if request.method == 'POST': -# try: -# meeting = Event.objects.get(id=int(request.POST.get('meetingID')), created_user=request.user) -# ReminderFormSet = modelformset_factory(Reminder, ReminderForm, can_delete=True, extra=0) -# reminder_form_set = ReminderFormSet(queryset=meeting.reminders.all()) -# remindersHtML = render(request, 'reminder.html', {'reminder_form_set': reminder_form_set}) -# data = {} -# if meeting.parent: -# data['parent_type'] = meeting.parent.__class__.__name__ -# data['parent_name'] = meeting.parent.__str__() -# data['parent_id'] = meeting.object_id -# else: -# data['parent_name'] = '' -# data['parent_id'] = '' -# if meeting.assigned_users: data['assigned_users'] = { -# meeting.assigned_users.id: meeting.assigned_users.username} -# if meeting.attendees_user: data['attendees_user'] = {key.id: key.username for key in -# meeting.attendees_user.all()} -# if meeting.attendees_contacts: data['attendees_contacts'] = {key.id: key.name for key in -# meeting.attendees_contacts.all()} -# if meeting.attendees_leads: data['attendees_leads'] = {key.id: key.first_name for key in -# meeting.attendees_leads.all()} -# del meeting._state -# del meeting._parent_cache -# del meeting._assigned_users_cache -# meeting.__dict__['close_date'] = meeting.__dict__['close_date'].strftime('%m/%d/%Y %H:%M:%S') -# meeting.__dict__['start_date'] = meeting.__dict__['start_date'].strftime('%m/%d/%Y %H:%M:%S') -# data['meeting'] = meeting.__dict__ -# data['remindersHTML'] = str(remindersHtML.content) -# if meeting: -# return JsonResponse(data) -# else: -# return JsonResponse({'failed': 'ERROR'}) -# except models.Event.DoesNotExist: -# return JsonResponse({'Event': 'DoesNotExist'}) -# else: -# return JsonResponse({'METHOD': 'INVALID'}) - - -# @login_required -# def get_task(request): -# if request.method == 'POST': -# try: -# task = Event.objects.get(id=int(request.POST.get('taskID')), created_user=request.user) -# data = {} -# if task.parent: -# data['parent_type'] = task.parent.__class__.__name__ -# data['parent_name'] = task.parent.__str__() -# data['parent_id'] = task.object_id -# else: -# data['parent_name'] = '' -# data['parent_id'] = '' -# if task.assigned_users: data['assigned_users'] = { -# task.assigned_users.id: task.assigned_users.username} -# del task._state -# del task._parent_cache -# del task._assigned_users_cache -# task.__dict__['close_date'] = task.__dict__['close_date'].strftime('%m/%d/%Y %H:%M:%S') -# task.__dict__['start_date'] = task.__dict__['start_date'].strftime('%m/%d/%Y %H:%M:%S') -# data['task'] = task.__dict__ -# if task: -# return JsonResponse(data) -# else: -# return JsonResponse({'failed': 'ERROR'}) -# except models.Event.DoesNotExist: -# return JsonResponse({'Event': 'DoesNotExist'}) -# else: -# return JsonResponse({'METHOD': 'INVALID'}) - - -# @login_required -# def get_call(request): -# if request.method == 'POST': -# try: -# call = Event.objects.get(id=int(request.POST.get('callID')), created_user=request.user) -# ReminderFormSet = modelformset_factory(Reminder, ReminderForm, can_delete=True, extra=0) -# reminder_form_set = ReminderFormSet(queryset=call.reminders.all()) -# remindersHtML = render(request, 'planner/reminder.html', {'reminder_form_set': reminder_form_set}) -# data = {} -# if call.parent: -# data['parent_type'] = call.parent.__class__.__name__ -# data['parent_name'] = call.parent.__str__() -# data['parent_id'] = call.object_id -# else: -# data['parent_name'] = '' -# data['parent_id'] = '' -# if call.assigned_users: data['assigned_users'] = { -# call.assigned_users.id: call.assigned_users.username} -# if call.attendees_user: data['attendees_user'] = {key.id: key.username for key in -# call.attendees_user.all()} -# if call.attendees_contacts: data['attendees_contacts'] = {key.id: key.name for key in -# call.attendees_contacts.all()} -# if call.attendees_leads: data['attendees_leads'] = {key.id: key.first_name for key in -# call.attendees_leads.all()} -# del call._state -# del call._parent_cache -# del call._assigned_users_cache -# call.__dict__['start_date'] = call.__dict__['start_date'].strftime('%m/%d/%Y %H:%M:%S') -# data['call'] = call.__dict__ -# data['remindersHTML'] = str(remindersHtML.content) -# if call: -# return JsonResponse(data) -# else: -# return JsonResponse({'failed': 'ERROR'}) -# except models.Event.DoesNotExist: -# return JsonResponse({'Event': 'DoesNotExist'}) -# else: -# return JsonResponse({'METHOD': 'INVALID'}) - - -# @login_required -# def update_meeting(request): -# if request.method == 'POST': -# try: -# meeting = Event.objects.get(Q(created_user=request.user) | Q(updated_user=request.user), -# id=int(request.POST.get('meetingID'))) -# eventForm = MeetingEventForm(request.POST, instance=meeting) -# ReminderFormSet = modelformset_factory(Reminder, ReminderForm, can_delete=True) -# reminder_form_set = ReminderFormSet(request.POST) -# if eventForm.is_valid() and reminder_form_set.is_valid(): -# meeting = None -# parent_name = None -# if eventForm.cleaned_data.get('parent_type') and eventForm.cleaned_data.get('parent_id'): -# meeting_object = add_parent(eventForm.cleaned_data.get('parent_type'), -# eventForm.cleaned_data.get('parent_id'), eventForm, None) -# meeting = meeting_object[0] -# parent_name = meeting_object[1] -# else: -# meeting = eventForm.save(commit=False) -# meeting.updated_user = request.user -# meeting.save() -# eventForm.save_m2m() -# reminders = reminder_form_set.save() -# meeting.reminders.add(*reminders) -# return JsonResponse({'success': 'Meeting Updated', -# 'id': meeting.id, -# 'name': meeting.name, -# 'parent': parent_name or None, -# 'status': meeting.status, -# 'startdate': meeting.start_date -# }) -# else: -# if reminder_form_set.errors: -# return JsonResponse({'reminder': reminder_form_set.errors[-1]['__all__'][0]}) -# elif eventForm.errors: -# return JsonResponse(dict(eventForm.errors)) -# except models.Event.DoesNotExist: -# return JsonResponse({'Event': 'DoesNotExist'}) -# else: -# return JsonResponse({'METHOD': 'INVALID'}) - - -# @login_required -# def update_task(request): -# if request.method == 'POST': -# try: -# task = Event.objects.get(Q(created_user=request.user) | Q(updated_user=request.user), -# id=int(request.POST.get('taskID'))) -# eventForm = TaskEventForm(request.POST, instance=task) -# if eventForm.is_valid(): -# task = None -# if eventForm.cleaned_data.get('parent_type') and eventForm.cleaned_data.get('parent_id'): -# task_object = add_parent(eventForm.cleaned_data.get('parent_type'), -# eventForm.cleaned_data.get('parent_id'), eventForm, None) -# task = task_object[0] -# else: -# task = eventForm.save(commit=False) -# task.updated_user = request.user -# task.save() -# return JsonResponse({'success': 'Task Updated', -# 'name': task.name, -# 'id': task.id, -# 'status': task.status, -# 'priority': task.priority, -# 'startdate': task.start_date}) -# else: -# return JsonResponse(dict(eventForm.errors)) -# except models.Event.DoesNotExist: -# return JsonResponse({'Event': 'DoesNotExist'}) -# else: -# return JsonResponse({'METHOD': 'INVALID'}) - - -# @login_required -# def update_call(request): -# if request.method == 'POST': -# try: -# call = Event.objects.get(Q(created_user=request.user) | Q(updated_user=request.user), -# id=int(request.POST.get('callID'))) -# callsForm = CallEventForm(request.POST, instance=call) -# ReminderFormSet = modelformset_factory(Reminder, ReminderForm, can_delete=True) -# reminder_form_set = ReminderFormSet(request.POST) -# if callsForm.is_valid() and reminder_form_set.is_valid(): -# parent_name = None -# if callsForm.cleaned_data.get('parent_type') and callsForm.cleaned_data.get('parent_id'): -# call_object = add_parent(callsForm.cleaned_data.get('parent_type'), -# callsForm.cleaned_data.get('parent_id'), callsForm, None) -# call = call_object[0] -# parent_name = call_object[1] -# else: -# call = callsForm.save(commit=False) -# call.updated_user = request.user -# call.save() -# callsForm.save_m2m() -# reminders = reminder_form_set.save() -# call.reminders.add(*reminders) -# return JsonResponse({'success': 'Call Updated', -# 'id': call.id, -# 'name': call.name, -# 'parent': parent_name or None, -# 'status': call.status, -# 'startdate': call.start_date -# }) -# else: -# return JsonResponse(dict(callsForm.errors)) -# except models.Event.DoesNotExist: -# return JsonResponse({'Event': 'DoesNotExist'}) -# else: -# return JsonResponse({'METHOD': 'INVALID'}) - - -# @login_required -# def update_event_status(request): -# if request.method == 'POST': -# try: -# event = Event.objects.get(Q(created_user=request.user) | Q(updated_user=request.user), -# Q(assigned_users=request.user), Q(attendees_user=request.user), -# id=int(request.POST.get('id'))) -# if request.POST.get('status') == 'Held': -# event.status = request.POST.get('status') -# event.updated_user = request.user -# event.save() -# return JsonResponse({'success': 'Event Updated', -# 'status': event.status, -# 'id': event.id, -# }) -# elif request.POST.get('status') == 'Not Held': -# event.status = request.POST.get('status') -# event.save() -# return JsonResponse({'success': 'Event Updated', -# 'id': event.id, -# 'status': event.status, -# }) -# else: -# return JsonResponse({'INVALID': 'DATA'}) -# except models.Event.DoesNotExist: -# return JsonResponse({'Event': 'DoesNotExist'}) -# else: -# return JsonResponse({'METHOD': 'INVALID'}) - - -# @login_required -# def search_meetings(request): -# if request.method == 'GET': -# try: -# event = Event.objects.filter(Q(created_user=request.user) | Q(updated_user=request.user) | -# Q(assigned_users=request.user) | Q(attendees_user=request.user)).distinct() -# if request.GET.get('event_type'): -# event = event.filter(event_type=request.GET.get('event_type')) -# if request.GET.get('event_name'): -# event = event.filter(name=request.GET.get('event_name')) or event -# if request.GET.get('parent_type') and request.GET.get('parent_id'): -# parent = get_parent(request.GET.get('parent_type'), request.GET.get('parent_id')) -# if parent is not None: -# parent_content_type = ContentType.objects.get_for_model(parent) -# event = event.filter(content_type__pk=parent_content_type.id, object_id=parent.id) or event - -# if request.GET.get('start_date'): -# start_date = datetime.datetime.strptime(request.GET.get('start_date'), '%m/%d/%Y %H:%M:%S') -# event = event.filter(start_date=start_date) or event -# if request.GET.get('created_at'): -# created_at = datetime.datetime.strptime(request.GET.get('created_at'), '%m/%d/%Y %H:%M:%S') -# event = event.filter(created_at=created_at) or event -# if request.GET.get('updated_at'): -# updated_at = datetime.datetime.strptime(request.GET.get('updated_at'), '%m/%d/%Y %H:%M:%S') -# event = event.filter(updated_at=updated_at) or event - -# if request.GET.get('status'): -# event = event.filter(status=request.GET.get('status')) or event - -# if request.GET.getlist('attendees_contacts'): -# event = event.filter(attendees_contacts__in=request.GET.getlist('attendees_contacts')) or event -# if request.GET.getlist('attendees_user'): -# event = event.filter(attendees_user__in=request.GET.getlist('attendees_user')) or event -# if request.GET.getlist('attendees_leads'): -# event = event.filter(attendees_leads__in=request.GET.getlist('attendees_leads')) or event - -# if request.GET.get('assigned_users'): -# event = event.filter(assigned_users=request.GET.get('assigned_users')) or event -# if request.GET.get('created_user'): -# event = event.filter(created_user=request.GET.get('created_user')) or event -# if request.GET.get('updated_user'): -# event = event.filter(updated_user=request.GET.get('updated_user')) or event - -# paginator = Paginator(event, 5) -# if request.GET.get('event_type') == 'Meeting': -# try: -# event = paginator.page(request.GET.get('page')) -# return render(request, 'meetings_list.html', -# {'meetings': event}) -# except PageNotAnInteger: -# event = paginator.page(1) -# except EmptyPage: -# event = paginator.page(paginator.num_pages) -# return render(request, 'meetings_list.html', -# {'meetings': event}) -# elif request.GET.get('event_type') == 'Call': -# try: -# event = paginator.page(request.GET.get('page')) -# return render(request, 'calls_list.html', -# {'calls': event}) -# except PageNotAnInteger: -# event = paginator.page(1) -# except EmptyPage: -# event = paginator.page(paginator.num_pages) -# return render(request, 'calls_list.html', -# {'calls': event}) -# elif request.GET.get('event_type') == 'Task': -# try: -# event = paginator.page(request.GET.get('page')) -# return render(request, 'tasks_list.html', -# {'tasks': event}) -# except PageNotAnInteger: -# event = paginator.page(1) -# except EmptyPage: -# event = paginator.page(paginator.num_pages) -# return render(request, 'tasks_list.html', -# {'tasks': event}) -# except models.Event.DoesNotExist: -# return JsonResponse({'Event': 'DoesNotExist'}) -# else: -# return JsonResponse({'METHOD': 'INVALID'}) - - -# @login_required -# def get_reminder_form(request): -# if request.method == 'GET': -# RemindersFormSet = modelformset_factory(Reminder, form=ReminderForm, can_delete=True) -# data = { -# 'form-TOTAL_FORMS': '1', -# 'form-INITIAL_FORMS': '0', -# 'form-MAX_NUM_FORMS': '10', -# } -# reminder_form_set = RemindersFormSet(data) -# return render(request, 'reminder.html', {'reminder_form_set': reminder_form_set}) -# else: -# return JsonResponse({'METHOD': 'INVALID'}) - - -# def add_parent(parent_type, parent_id, form, request_user): -# if parent_type == 'Account': -# account = Account.objects.get(id=int(parent_id)) -# event = form.save(commit=False) -# event.parent = account -# if request_user is not None: -# event.created_user = request_user -# else: -# event.updated_user = request_user -# event.save() -# return (event, event.parent.name) -# elif parent_type == 'Case': -# case = Case.objects.get(id=int(parent_id)) -# event = form.save(commit=False) -# event.parent = case -# if request_user is not None: -# event.created_user = request_user -# else: -# event.updated_user = request_user -# event.save() -# return (event, event.parent.name) -# elif parent_type == 'Lead': -# lead = Lead.objects.get(id=int(parent_id)) -# event = form.save(commit=False) -# event.parent = lead -# if request_user is not None: -# event.created_user = request_user -# else: -# event.updated_user = request_user -# event.save() -# return (event, event.parent.first_name) - -# elif parent_type == 'Opportunity': -# opportunity = Opportunity.objects.get(id=int(parent_id)) -# event = form.save(commit=False) -# event.parent = opportunity -# if request_user is not None: -# event.created_user = request_user -# else: -# event.updated_user = request_user -# event.save() -# return (event, event.parent.name) -# elif parent_type == 'Contact': -# contact = Contact.objects.get(id=int(parent_id)) -# event = form.save(commit=False) -# event.parent = contact -# if request_user is not None: -# event.created_user = request_user -# else: -# event.updated_user = request_user -# event.save() -# return (event, event.parent.name) - - -# def get_parent(parent_type, parent_id): -# if parent_type == 'Account': -# try: -# account = Account.objects.get(id=parent_id) -# return account -# except Account.DoesNotExist: -# return None -# elif parent_type == 'Lead': -# try: -# lead = Lead.objects.get(id=parent_id) -# return lead -# except Lead.DoesNotExist: -# return None -# elif parent_type == 'Opportunity': -# try: -# opportunity = Opportunity.objects.get(id=parent_id) -# return opportunity -# except Opportunity.DoesNotExist: -# return None -# elif parent_type == 'Case': -# try: -# case = Case.objects.get(id=parent_id) -# return case -# except Case.DoesNotExist: -# return None -# elif parent_type == 'Contact': -# try: -# contact = Contact.objects.get(id=parent_id) -# return contact -# except Contact.DoesNotExist: -# return None - - -# def get_users(request): -# if request.method == 'GET': -# users = User.objects.all() -# paginator = Paginator(users, 5) -# try: -# users = paginator.page(request.GET.get('page')) -# return render(request, 'users.html', -# {'users': users}) -# except PageNotAnInteger: -# users = paginator.page(1) -# except EmptyPage: -# users = paginator.page(paginator.num_pages) -# return render(request, 'users.html', {'users': users}) -# else: -# return JsonResponse({'METHOD': 'INVALID'}) - - -# def get_contacts(request): -# if request.method == 'GET': -# contacts = Contact.objects.all() -# paginator = Paginator(contacts, 5) -# try: -# contacts = paginator.page(request.GET.get('page')) -# return render(request, 'contacts.html', -# {'contacts': contacts}) -# except PageNotAnInteger: -# contacts = paginator.page(1) -# except EmptyPage: -# contacts = paginator.page(paginator.num_pages) -# return render(request, 'contacts.html', {'contacts': contacts}) -# else: -# return JsonResponse({'METHOD': 'INVALID'}) - - -# def get_leads(request): -# if request.method == 'GET': -# leads = Lead.objects.all() -# paginator = Paginator(leads, 5) -# try: -# leads = paginator.page(request.GET.get('page')) -# return render(request, 'leads.html', -# {'leads': leads}) -# except PageNotAnInteger: -# leads = paginator.page(1) -# except EmptyPage: -# leads = paginator.page(paginator.num_pages) -# return render(request, 'leads.html', {'leads': leads}) -# else: -# return JsonResponse({'METHOD': 'INVALID'}) diff --git a/requirements.txt b/requirements.txt deleted file mode 100644 index 129686d6..00000000 --- a/requirements.txt +++ /dev/null @@ -1,22 +0,0 @@ -django==4.2.1 -celery==5.2.7 -python-dotenv==1.0.0 -django-cors-headers==4.0.0 -djangorestframework==3.14.0 -djangorestframework-simplejwt==5.2.2 -drf-spectacular==0.26.2 -django-ses==3.5.0 -psycopg2-binary==2.9.6 -whitenoise==6.4.0 -sentry-sdk==1.24.0 -wagtail==5.0.1 -django_extensions==3.2.1 -django_storages==1.13.2 - -drf-rw-serializers==1.0.5 -django-crum==0.7.9 -Redis==4.6.0 -# remove it -django-phonenumber-field==7.1.0 -arrow==1.2.3 -phonenumbers==8.13.13 diff --git a/scripts/gunicorn.sh b/scripts/gunicorn.sh deleted file mode 100755 index d93d6709..00000000 --- a/scripts/gunicorn.sh +++ /dev/null @@ -1,20 +0,0 @@ -#!/bin/bash - -set -euxo pipefail - -APP_NAME=bottlecrm-api - -cd /home/ubuntu/$APP_NAME/$APP_NAME -. ../venv/bin/activate - -# debug -whoami; pwd; ls -al; env - -exec gunicorn crm.wsgi:application \ - --name $APP_NAME \ - --workers 2 \ - --threads 4 \ - --worker-class gthread \ - --worker-tmp-dir /dev/shm \ - --bind 0.0.0.0:8000 \ - --log-level debug diff --git a/scripts/migrate.sh b/scripts/migrate.sh deleted file mode 100755 index ea8cbd39..00000000 --- a/scripts/migrate.sh +++ /dev/null @@ -1,13 +0,0 @@ -#!/bin/bash - -set -euxo pipefail - -APP_NAME=bottlecrm-api - -cd /home/ubuntu/$APP_NAME/$APP_NAME -. ../venv/bin/activate - -# debug -whoami; pwd; ls -al; env - -exec python manage.py migrate diff --git a/static/assets/css/animate.min.css b/static/assets/css/animate.min.css deleted file mode 100644 index ab93d29b..00000000 --- a/static/assets/css/animate.min.css +++ /dev/null @@ -1,7 +0,0 @@ -@charset "UTF-8";/*! - * animate.css - https://animate.style/ - * Version - 4.1.1 - * Licensed under the MIT license - http://opensource.org/licenses/MIT - * - * Copyright (c) 2020 Animate.css - */:root{--animate-duration:1s;--animate-delay:1s;--animate-repeat:1}.animate__animated{-webkit-animation-duration:1s;animation-duration:1s;-webkit-animation-duration:var(--animate-duration);animation-duration:var(--animate-duration);-webkit-animation-fill-mode:both;animation-fill-mode:both}.animate__animated.animate__infinite{-webkit-animation-iteration-count:infinite;animation-iteration-count:infinite}.animate__animated.animate__repeat-1{-webkit-animation-iteration-count:1;animation-iteration-count:1;-webkit-animation-iteration-count:var(--animate-repeat);animation-iteration-count:var(--animate-repeat)}.animate__animated.animate__repeat-2{-webkit-animation-iteration-count:2;animation-iteration-count:2;-webkit-animation-iteration-count:calc(var(--animate-repeat)*2);animation-iteration-count:calc(var(--animate-repeat)*2)}.animate__animated.animate__repeat-3{-webkit-animation-iteration-count:3;animation-iteration-count:3;-webkit-animation-iteration-count:calc(var(--animate-repeat)*3);animation-iteration-count:calc(var(--animate-repeat)*3)}.animate__animated.animate__delay-1s{-webkit-animation-delay:1s;animation-delay:1s;-webkit-animation-delay:var(--animate-delay);animation-delay:var(--animate-delay)}.animate__animated.animate__delay-2s{-webkit-animation-delay:2s;animation-delay:2s;-webkit-animation-delay:calc(var(--animate-delay)*2);animation-delay:calc(var(--animate-delay)*2)}.animate__animated.animate__delay-3s{-webkit-animation-delay:3s;animation-delay:3s;-webkit-animation-delay:calc(var(--animate-delay)*3);animation-delay:calc(var(--animate-delay)*3)}.animate__animated.animate__delay-4s{-webkit-animation-delay:4s;animation-delay:4s;-webkit-animation-delay:calc(var(--animate-delay)*4);animation-delay:calc(var(--animate-delay)*4)}.animate__animated.animate__delay-5s{-webkit-animation-delay:5s;animation-delay:5s;-webkit-animation-delay:calc(var(--animate-delay)*5);animation-delay:calc(var(--animate-delay)*5)}.animate__animated.animate__faster{-webkit-animation-duration:.5s;animation-duration:.5s;-webkit-animation-duration:calc(var(--animate-duration)/2);animation-duration:calc(var(--animate-duration)/2)}.animate__animated.animate__fast{-webkit-animation-duration:.8s;animation-duration:.8s;-webkit-animation-duration:calc(var(--animate-duration)*0.8);animation-duration:calc(var(--animate-duration)*0.8)}.animate__animated.animate__slow{-webkit-animation-duration:2s;animation-duration:2s;-webkit-animation-duration:calc(var(--animate-duration)*2);animation-duration:calc(var(--animate-duration)*2)}.animate__animated.animate__slower{-webkit-animation-duration:3s;animation-duration:3s;-webkit-animation-duration:calc(var(--animate-duration)*3);animation-duration:calc(var(--animate-duration)*3)}@media (prefers-reduced-motion:reduce),print{.animate__animated{-webkit-animation-duration:1ms!important;animation-duration:1ms!important;-webkit-transition-duration:1ms!important;transition-duration:1ms!important;-webkit-animation-iteration-count:1!important;animation-iteration-count:1!important}.animate__animated[class*=Out]{opacity:0}}@-webkit-keyframes bounce{0%,20%,53%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1);-webkit-transform:translateZ(0);transform:translateZ(0)}40%,43%{-webkit-animation-timing-function:cubic-bezier(.755,.05,.855,.06);animation-timing-function:cubic-bezier(.755,.05,.855,.06);-webkit-transform:translate3d(0,-30px,0) scaleY(1.1);transform:translate3d(0,-30px,0) scaleY(1.1)}70%{-webkit-animation-timing-function:cubic-bezier(.755,.05,.855,.06);animation-timing-function:cubic-bezier(.755,.05,.855,.06);-webkit-transform:translate3d(0,-15px,0) scaleY(1.05);transform:translate3d(0,-15px,0) scaleY(1.05)}80%{-webkit-transition-timing-function:cubic-bezier(.215,.61,.355,1);transition-timing-function:cubic-bezier(.215,.61,.355,1);-webkit-transform:translateZ(0) scaleY(.95);transform:translateZ(0) scaleY(.95)}90%{-webkit-transform:translate3d(0,-4px,0) scaleY(1.02);transform:translate3d(0,-4px,0) scaleY(1.02)}}@keyframes bounce{0%,20%,53%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1);-webkit-transform:translateZ(0);transform:translateZ(0)}40%,43%{-webkit-animation-timing-function:cubic-bezier(.755,.05,.855,.06);animation-timing-function:cubic-bezier(.755,.05,.855,.06);-webkit-transform:translate3d(0,-30px,0) scaleY(1.1);transform:translate3d(0,-30px,0) scaleY(1.1)}70%{-webkit-animation-timing-function:cubic-bezier(.755,.05,.855,.06);animation-timing-function:cubic-bezier(.755,.05,.855,.06);-webkit-transform:translate3d(0,-15px,0) scaleY(1.05);transform:translate3d(0,-15px,0) scaleY(1.05)}80%{-webkit-transition-timing-function:cubic-bezier(.215,.61,.355,1);transition-timing-function:cubic-bezier(.215,.61,.355,1);-webkit-transform:translateZ(0) scaleY(.95);transform:translateZ(0) scaleY(.95)}90%{-webkit-transform:translate3d(0,-4px,0) scaleY(1.02);transform:translate3d(0,-4px,0) scaleY(1.02)}}.animate__bounce{-webkit-animation-name:bounce;animation-name:bounce;-webkit-transform-origin:center bottom;transform-origin:center bottom}@-webkit-keyframes flash{0%,50%,to{opacity:1}25%,75%{opacity:0}}@keyframes flash{0%,50%,to{opacity:1}25%,75%{opacity:0}}.animate__flash{-webkit-animation-name:flash;animation-name:flash}@-webkit-keyframes pulse{0%{-webkit-transform:scaleX(1);transform:scaleX(1)}50%{-webkit-transform:scale3d(1.05,1.05,1.05);transform:scale3d(1.05,1.05,1.05)}to{-webkit-transform:scaleX(1);transform:scaleX(1)}}@keyframes pulse{0%{-webkit-transform:scaleX(1);transform:scaleX(1)}50%{-webkit-transform:scale3d(1.05,1.05,1.05);transform:scale3d(1.05,1.05,1.05)}to{-webkit-transform:scaleX(1);transform:scaleX(1)}}.animate__pulse{-webkit-animation-name:pulse;animation-name:pulse;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}@-webkit-keyframes rubberBand{0%{-webkit-transform:scaleX(1);transform:scaleX(1)}30%{-webkit-transform:scale3d(1.25,.75,1);transform:scale3d(1.25,.75,1)}40%{-webkit-transform:scale3d(.75,1.25,1);transform:scale3d(.75,1.25,1)}50%{-webkit-transform:scale3d(1.15,.85,1);transform:scale3d(1.15,.85,1)}65%{-webkit-transform:scale3d(.95,1.05,1);transform:scale3d(.95,1.05,1)}75%{-webkit-transform:scale3d(1.05,.95,1);transform:scale3d(1.05,.95,1)}to{-webkit-transform:scaleX(1);transform:scaleX(1)}}@keyframes rubberBand{0%{-webkit-transform:scaleX(1);transform:scaleX(1)}30%{-webkit-transform:scale3d(1.25,.75,1);transform:scale3d(1.25,.75,1)}40%{-webkit-transform:scale3d(.75,1.25,1);transform:scale3d(.75,1.25,1)}50%{-webkit-transform:scale3d(1.15,.85,1);transform:scale3d(1.15,.85,1)}65%{-webkit-transform:scale3d(.95,1.05,1);transform:scale3d(.95,1.05,1)}75%{-webkit-transform:scale3d(1.05,.95,1);transform:scale3d(1.05,.95,1)}to{-webkit-transform:scaleX(1);transform:scaleX(1)}}.animate__rubberBand{-webkit-animation-name:rubberBand;animation-name:rubberBand}@-webkit-keyframes shakeX{0%,to{-webkit-transform:translateZ(0);transform:translateZ(0)}10%,30%,50%,70%,90%{-webkit-transform:translate3d(-10px,0,0);transform:translate3d(-10px,0,0)}20%,40%,60%,80%{-webkit-transform:translate3d(10px,0,0);transform:translate3d(10px,0,0)}}@keyframes shakeX{0%,to{-webkit-transform:translateZ(0);transform:translateZ(0)}10%,30%,50%,70%,90%{-webkit-transform:translate3d(-10px,0,0);transform:translate3d(-10px,0,0)}20%,40%,60%,80%{-webkit-transform:translate3d(10px,0,0);transform:translate3d(10px,0,0)}}.animate__shakeX{-webkit-animation-name:shakeX;animation-name:shakeX}@-webkit-keyframes shakeY{0%,to{-webkit-transform:translateZ(0);transform:translateZ(0)}10%,30%,50%,70%,90%{-webkit-transform:translate3d(0,-10px,0);transform:translate3d(0,-10px,0)}20%,40%,60%,80%{-webkit-transform:translate3d(0,10px,0);transform:translate3d(0,10px,0)}}@keyframes shakeY{0%,to{-webkit-transform:translateZ(0);transform:translateZ(0)}10%,30%,50%,70%,90%{-webkit-transform:translate3d(0,-10px,0);transform:translate3d(0,-10px,0)}20%,40%,60%,80%{-webkit-transform:translate3d(0,10px,0);transform:translate3d(0,10px,0)}}.animate__shakeY{-webkit-animation-name:shakeY;animation-name:shakeY}@-webkit-keyframes headShake{0%{-webkit-transform:translateX(0);transform:translateX(0)}6.5%{-webkit-transform:translateX(-6px) rotateY(-9deg);transform:translateX(-6px) rotateY(-9deg)}18.5%{-webkit-transform:translateX(5px) rotateY(7deg);transform:translateX(5px) rotateY(7deg)}31.5%{-webkit-transform:translateX(-3px) rotateY(-5deg);transform:translateX(-3px) rotateY(-5deg)}43.5%{-webkit-transform:translateX(2px) rotateY(3deg);transform:translateX(2px) rotateY(3deg)}50%{-webkit-transform:translateX(0);transform:translateX(0)}}@keyframes headShake{0%{-webkit-transform:translateX(0);transform:translateX(0)}6.5%{-webkit-transform:translateX(-6px) rotateY(-9deg);transform:translateX(-6px) rotateY(-9deg)}18.5%{-webkit-transform:translateX(5px) rotateY(7deg);transform:translateX(5px) rotateY(7deg)}31.5%{-webkit-transform:translateX(-3px) rotateY(-5deg);transform:translateX(-3px) rotateY(-5deg)}43.5%{-webkit-transform:translateX(2px) rotateY(3deg);transform:translateX(2px) rotateY(3deg)}50%{-webkit-transform:translateX(0);transform:translateX(0)}}.animate__headShake{-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out;-webkit-animation-name:headShake;animation-name:headShake}@-webkit-keyframes swing{20%{-webkit-transform:rotate(15deg);transform:rotate(15deg)}40%{-webkit-transform:rotate(-10deg);transform:rotate(-10deg)}60%{-webkit-transform:rotate(5deg);transform:rotate(5deg)}80%{-webkit-transform:rotate(-5deg);transform:rotate(-5deg)}to{-webkit-transform:rotate(0deg);transform:rotate(0deg)}}@keyframes swing{20%{-webkit-transform:rotate(15deg);transform:rotate(15deg)}40%{-webkit-transform:rotate(-10deg);transform:rotate(-10deg)}60%{-webkit-transform:rotate(5deg);transform:rotate(5deg)}80%{-webkit-transform:rotate(-5deg);transform:rotate(-5deg)}to{-webkit-transform:rotate(0deg);transform:rotate(0deg)}}.animate__swing{-webkit-transform-origin:top center;transform-origin:top center;-webkit-animation-name:swing;animation-name:swing}@-webkit-keyframes tada{0%{-webkit-transform:scaleX(1);transform:scaleX(1)}10%,20%{-webkit-transform:scale3d(.9,.9,.9) rotate(-3deg);transform:scale3d(.9,.9,.9) rotate(-3deg)}30%,50%,70%,90%{-webkit-transform:scale3d(1.1,1.1,1.1) rotate(3deg);transform:scale3d(1.1,1.1,1.1) rotate(3deg)}40%,60%,80%{-webkit-transform:scale3d(1.1,1.1,1.1) rotate(-3deg);transform:scale3d(1.1,1.1,1.1) rotate(-3deg)}to{-webkit-transform:scaleX(1);transform:scaleX(1)}}@keyframes tada{0%{-webkit-transform:scaleX(1);transform:scaleX(1)}10%,20%{-webkit-transform:scale3d(.9,.9,.9) rotate(-3deg);transform:scale3d(.9,.9,.9) rotate(-3deg)}30%,50%,70%,90%{-webkit-transform:scale3d(1.1,1.1,1.1) rotate(3deg);transform:scale3d(1.1,1.1,1.1) rotate(3deg)}40%,60%,80%{-webkit-transform:scale3d(1.1,1.1,1.1) rotate(-3deg);transform:scale3d(1.1,1.1,1.1) rotate(-3deg)}to{-webkit-transform:scaleX(1);transform:scaleX(1)}}.animate__tada{-webkit-animation-name:tada;animation-name:tada}@-webkit-keyframes wobble{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}15%{-webkit-transform:translate3d(-25%,0,0) rotate(-5deg);transform:translate3d(-25%,0,0) rotate(-5deg)}30%{-webkit-transform:translate3d(20%,0,0) rotate(3deg);transform:translate3d(20%,0,0) rotate(3deg)}45%{-webkit-transform:translate3d(-15%,0,0) rotate(-3deg);transform:translate3d(-15%,0,0) rotate(-3deg)}60%{-webkit-transform:translate3d(10%,0,0) rotate(2deg);transform:translate3d(10%,0,0) rotate(2deg)}75%{-webkit-transform:translate3d(-5%,0,0) rotate(-1deg);transform:translate3d(-5%,0,0) rotate(-1deg)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes wobble{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}15%{-webkit-transform:translate3d(-25%,0,0) rotate(-5deg);transform:translate3d(-25%,0,0) rotate(-5deg)}30%{-webkit-transform:translate3d(20%,0,0) rotate(3deg);transform:translate3d(20%,0,0) rotate(3deg)}45%{-webkit-transform:translate3d(-15%,0,0) rotate(-3deg);transform:translate3d(-15%,0,0) rotate(-3deg)}60%{-webkit-transform:translate3d(10%,0,0) rotate(2deg);transform:translate3d(10%,0,0) rotate(2deg)}75%{-webkit-transform:translate3d(-5%,0,0) rotate(-1deg);transform:translate3d(-5%,0,0) rotate(-1deg)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}.animate__wobble{-webkit-animation-name:wobble;animation-name:wobble}@-webkit-keyframes jello{0%,11.1%,to{-webkit-transform:translateZ(0);transform:translateZ(0)}22.2%{-webkit-transform:skewX(-12.5deg) skewY(-12.5deg);transform:skewX(-12.5deg) skewY(-12.5deg)}33.3%{-webkit-transform:skewX(6.25deg) skewY(6.25deg);transform:skewX(6.25deg) skewY(6.25deg)}44.4%{-webkit-transform:skewX(-3.125deg) skewY(-3.125deg);transform:skewX(-3.125deg) skewY(-3.125deg)}55.5%{-webkit-transform:skewX(1.5625deg) skewY(1.5625deg);transform:skewX(1.5625deg) skewY(1.5625deg)}66.6%{-webkit-transform:skewX(-.78125deg) skewY(-.78125deg);transform:skewX(-.78125deg) skewY(-.78125deg)}77.7%{-webkit-transform:skewX(.390625deg) skewY(.390625deg);transform:skewX(.390625deg) skewY(.390625deg)}88.8%{-webkit-transform:skewX(-.1953125deg) skewY(-.1953125deg);transform:skewX(-.1953125deg) skewY(-.1953125deg)}}@keyframes jello{0%,11.1%,to{-webkit-transform:translateZ(0);transform:translateZ(0)}22.2%{-webkit-transform:skewX(-12.5deg) skewY(-12.5deg);transform:skewX(-12.5deg) skewY(-12.5deg)}33.3%{-webkit-transform:skewX(6.25deg) skewY(6.25deg);transform:skewX(6.25deg) skewY(6.25deg)}44.4%{-webkit-transform:skewX(-3.125deg) skewY(-3.125deg);transform:skewX(-3.125deg) skewY(-3.125deg)}55.5%{-webkit-transform:skewX(1.5625deg) skewY(1.5625deg);transform:skewX(1.5625deg) skewY(1.5625deg)}66.6%{-webkit-transform:skewX(-.78125deg) skewY(-.78125deg);transform:skewX(-.78125deg) skewY(-.78125deg)}77.7%{-webkit-transform:skewX(.390625deg) skewY(.390625deg);transform:skewX(.390625deg) skewY(.390625deg)}88.8%{-webkit-transform:skewX(-.1953125deg) skewY(-.1953125deg);transform:skewX(-.1953125deg) skewY(-.1953125deg)}}.animate__jello{-webkit-animation-name:jello;animation-name:jello;-webkit-transform-origin:center;transform-origin:center}@-webkit-keyframes heartBeat{0%{-webkit-transform:scale(1);transform:scale(1)}14%{-webkit-transform:scale(1.3);transform:scale(1.3)}28%{-webkit-transform:scale(1);transform:scale(1)}42%{-webkit-transform:scale(1.3);transform:scale(1.3)}70%{-webkit-transform:scale(1);transform:scale(1)}}@keyframes heartBeat{0%{-webkit-transform:scale(1);transform:scale(1)}14%{-webkit-transform:scale(1.3);transform:scale(1.3)}28%{-webkit-transform:scale(1);transform:scale(1)}42%{-webkit-transform:scale(1.3);transform:scale(1.3)}70%{-webkit-transform:scale(1);transform:scale(1)}}.animate__heartBeat{-webkit-animation-name:heartBeat;animation-name:heartBeat;-webkit-animation-duration:1.3s;animation-duration:1.3s;-webkit-animation-duration:calc(var(--animate-duration)*1.3);animation-duration:calc(var(--animate-duration)*1.3);-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}@-webkit-keyframes backInDown{0%{-webkit-transform:translateY(-1200px) scale(.7);transform:translateY(-1200px) scale(.7);opacity:.7}80%{-webkit-transform:translateY(0) scale(.7);transform:translateY(0) scale(.7);opacity:.7}to{-webkit-transform:scale(1);transform:scale(1);opacity:1}}@keyframes backInDown{0%{-webkit-transform:translateY(-1200px) scale(.7);transform:translateY(-1200px) scale(.7);opacity:.7}80%{-webkit-transform:translateY(0) scale(.7);transform:translateY(0) scale(.7);opacity:.7}to{-webkit-transform:scale(1);transform:scale(1);opacity:1}}.animate__backInDown{-webkit-animation-name:backInDown;animation-name:backInDown}@-webkit-keyframes backInLeft{0%{-webkit-transform:translateX(-2000px) scale(.7);transform:translateX(-2000px) scale(.7);opacity:.7}80%{-webkit-transform:translateX(0) scale(.7);transform:translateX(0) scale(.7);opacity:.7}to{-webkit-transform:scale(1);transform:scale(1);opacity:1}}@keyframes backInLeft{0%{-webkit-transform:translateX(-2000px) scale(.7);transform:translateX(-2000px) scale(.7);opacity:.7}80%{-webkit-transform:translateX(0) scale(.7);transform:translateX(0) scale(.7);opacity:.7}to{-webkit-transform:scale(1);transform:scale(1);opacity:1}}.animate__backInLeft{-webkit-animation-name:backInLeft;animation-name:backInLeft}@-webkit-keyframes backInRight{0%{-webkit-transform:translateX(2000px) scale(.7);transform:translateX(2000px) scale(.7);opacity:.7}80%{-webkit-transform:translateX(0) scale(.7);transform:translateX(0) scale(.7);opacity:.7}to{-webkit-transform:scale(1);transform:scale(1);opacity:1}}@keyframes backInRight{0%{-webkit-transform:translateX(2000px) scale(.7);transform:translateX(2000px) scale(.7);opacity:.7}80%{-webkit-transform:translateX(0) scale(.7);transform:translateX(0) scale(.7);opacity:.7}to{-webkit-transform:scale(1);transform:scale(1);opacity:1}}.animate__backInRight{-webkit-animation-name:backInRight;animation-name:backInRight}@-webkit-keyframes backInUp{0%{-webkit-transform:translateY(1200px) scale(.7);transform:translateY(1200px) scale(.7);opacity:.7}80%{-webkit-transform:translateY(0) scale(.7);transform:translateY(0) scale(.7);opacity:.7}to{-webkit-transform:scale(1);transform:scale(1);opacity:1}}@keyframes backInUp{0%{-webkit-transform:translateY(1200px) scale(.7);transform:translateY(1200px) scale(.7);opacity:.7}80%{-webkit-transform:translateY(0) scale(.7);transform:translateY(0) scale(.7);opacity:.7}to{-webkit-transform:scale(1);transform:scale(1);opacity:1}}.animate__backInUp{-webkit-animation-name:backInUp;animation-name:backInUp}@-webkit-keyframes backOutDown{0%{-webkit-transform:scale(1);transform:scale(1);opacity:1}20%{-webkit-transform:translateY(0) scale(.7);transform:translateY(0) scale(.7);opacity:.7}to{-webkit-transform:translateY(700px) scale(.7);transform:translateY(700px) scale(.7);opacity:.7}}@keyframes backOutDown{0%{-webkit-transform:scale(1);transform:scale(1);opacity:1}20%{-webkit-transform:translateY(0) scale(.7);transform:translateY(0) scale(.7);opacity:.7}to{-webkit-transform:translateY(700px) scale(.7);transform:translateY(700px) scale(.7);opacity:.7}}.animate__backOutDown{-webkit-animation-name:backOutDown;animation-name:backOutDown}@-webkit-keyframes backOutLeft{0%{-webkit-transform:scale(1);transform:scale(1);opacity:1}20%{-webkit-transform:translateX(0) scale(.7);transform:translateX(0) scale(.7);opacity:.7}to{-webkit-transform:translateX(-2000px) scale(.7);transform:translateX(-2000px) scale(.7);opacity:.7}}@keyframes backOutLeft{0%{-webkit-transform:scale(1);transform:scale(1);opacity:1}20%{-webkit-transform:translateX(0) scale(.7);transform:translateX(0) scale(.7);opacity:.7}to{-webkit-transform:translateX(-2000px) scale(.7);transform:translateX(-2000px) scale(.7);opacity:.7}}.animate__backOutLeft{-webkit-animation-name:backOutLeft;animation-name:backOutLeft}@-webkit-keyframes backOutRight{0%{-webkit-transform:scale(1);transform:scale(1);opacity:1}20%{-webkit-transform:translateX(0) scale(.7);transform:translateX(0) scale(.7);opacity:.7}to{-webkit-transform:translateX(2000px) scale(.7);transform:translateX(2000px) scale(.7);opacity:.7}}@keyframes backOutRight{0%{-webkit-transform:scale(1);transform:scale(1);opacity:1}20%{-webkit-transform:translateX(0) scale(.7);transform:translateX(0) scale(.7);opacity:.7}to{-webkit-transform:translateX(2000px) scale(.7);transform:translateX(2000px) scale(.7);opacity:.7}}.animate__backOutRight{-webkit-animation-name:backOutRight;animation-name:backOutRight}@-webkit-keyframes backOutUp{0%{-webkit-transform:scale(1);transform:scale(1);opacity:1}20%{-webkit-transform:translateY(0) scale(.7);transform:translateY(0) scale(.7);opacity:.7}to{-webkit-transform:translateY(-700px) scale(.7);transform:translateY(-700px) scale(.7);opacity:.7}}@keyframes backOutUp{0%{-webkit-transform:scale(1);transform:scale(1);opacity:1}20%{-webkit-transform:translateY(0) scale(.7);transform:translateY(0) scale(.7);opacity:.7}to{-webkit-transform:translateY(-700px) scale(.7);transform:translateY(-700px) scale(.7);opacity:.7}}.animate__backOutUp{-webkit-animation-name:backOutUp;animation-name:backOutUp}@-webkit-keyframes bounceIn{0%,20%,40%,60%,80%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}20%{-webkit-transform:scale3d(1.1,1.1,1.1);transform:scale3d(1.1,1.1,1.1)}40%{-webkit-transform:scale3d(.9,.9,.9);transform:scale3d(.9,.9,.9)}60%{opacity:1;-webkit-transform:scale3d(1.03,1.03,1.03);transform:scale3d(1.03,1.03,1.03)}80%{-webkit-transform:scale3d(.97,.97,.97);transform:scale3d(.97,.97,.97)}to{opacity:1;-webkit-transform:scaleX(1);transform:scaleX(1)}}@keyframes bounceIn{0%,20%,40%,60%,80%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}20%{-webkit-transform:scale3d(1.1,1.1,1.1);transform:scale3d(1.1,1.1,1.1)}40%{-webkit-transform:scale3d(.9,.9,.9);transform:scale3d(.9,.9,.9)}60%{opacity:1;-webkit-transform:scale3d(1.03,1.03,1.03);transform:scale3d(1.03,1.03,1.03)}80%{-webkit-transform:scale3d(.97,.97,.97);transform:scale3d(.97,.97,.97)}to{opacity:1;-webkit-transform:scaleX(1);transform:scaleX(1)}}.animate__bounceIn{-webkit-animation-duration:.75s;animation-duration:.75s;-webkit-animation-duration:calc(var(--animate-duration)*0.75);animation-duration:calc(var(--animate-duration)*0.75);-webkit-animation-name:bounceIn;animation-name:bounceIn}@-webkit-keyframes bounceInDown{0%,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(0,-3000px,0) scaleY(3);transform:translate3d(0,-3000px,0) scaleY(3)}60%{opacity:1;-webkit-transform:translate3d(0,25px,0) scaleY(.9);transform:translate3d(0,25px,0) scaleY(.9)}75%{-webkit-transform:translate3d(0,-10px,0) scaleY(.95);transform:translate3d(0,-10px,0) scaleY(.95)}90%{-webkit-transform:translate3d(0,5px,0) scaleY(.985);transform:translate3d(0,5px,0) scaleY(.985)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes bounceInDown{0%,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(0,-3000px,0) scaleY(3);transform:translate3d(0,-3000px,0) scaleY(3)}60%{opacity:1;-webkit-transform:translate3d(0,25px,0) scaleY(.9);transform:translate3d(0,25px,0) scaleY(.9)}75%{-webkit-transform:translate3d(0,-10px,0) scaleY(.95);transform:translate3d(0,-10px,0) scaleY(.95)}90%{-webkit-transform:translate3d(0,5px,0) scaleY(.985);transform:translate3d(0,5px,0) scaleY(.985)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}.animate__bounceInDown{-webkit-animation-name:bounceInDown;animation-name:bounceInDown}@-webkit-keyframes bounceInLeft{0%,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(-3000px,0,0) scaleX(3);transform:translate3d(-3000px,0,0) scaleX(3)}60%{opacity:1;-webkit-transform:translate3d(25px,0,0) scaleX(1);transform:translate3d(25px,0,0) scaleX(1)}75%{-webkit-transform:translate3d(-10px,0,0) scaleX(.98);transform:translate3d(-10px,0,0) scaleX(.98)}90%{-webkit-transform:translate3d(5px,0,0) scaleX(.995);transform:translate3d(5px,0,0) scaleX(.995)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes bounceInLeft{0%,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(-3000px,0,0) scaleX(3);transform:translate3d(-3000px,0,0) scaleX(3)}60%{opacity:1;-webkit-transform:translate3d(25px,0,0) scaleX(1);transform:translate3d(25px,0,0) scaleX(1)}75%{-webkit-transform:translate3d(-10px,0,0) scaleX(.98);transform:translate3d(-10px,0,0) scaleX(.98)}90%{-webkit-transform:translate3d(5px,0,0) scaleX(.995);transform:translate3d(5px,0,0) scaleX(.995)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}.animate__bounceInLeft{-webkit-animation-name:bounceInLeft;animation-name:bounceInLeft}@-webkit-keyframes bounceInRight{0%,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(3000px,0,0) scaleX(3);transform:translate3d(3000px,0,0) scaleX(3)}60%{opacity:1;-webkit-transform:translate3d(-25px,0,0) scaleX(1);transform:translate3d(-25px,0,0) scaleX(1)}75%{-webkit-transform:translate3d(10px,0,0) scaleX(.98);transform:translate3d(10px,0,0) scaleX(.98)}90%{-webkit-transform:translate3d(-5px,0,0) scaleX(.995);transform:translate3d(-5px,0,0) scaleX(.995)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes bounceInRight{0%,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(3000px,0,0) scaleX(3);transform:translate3d(3000px,0,0) scaleX(3)}60%{opacity:1;-webkit-transform:translate3d(-25px,0,0) scaleX(1);transform:translate3d(-25px,0,0) scaleX(1)}75%{-webkit-transform:translate3d(10px,0,0) scaleX(.98);transform:translate3d(10px,0,0) scaleX(.98)}90%{-webkit-transform:translate3d(-5px,0,0) scaleX(.995);transform:translate3d(-5px,0,0) scaleX(.995)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}.animate__bounceInRight{-webkit-animation-name:bounceInRight;animation-name:bounceInRight}@-webkit-keyframes bounceInUp{0%,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(0,3000px,0) scaleY(5);transform:translate3d(0,3000px,0) scaleY(5)}60%{opacity:1;-webkit-transform:translate3d(0,-20px,0) scaleY(.9);transform:translate3d(0,-20px,0) scaleY(.9)}75%{-webkit-transform:translate3d(0,10px,0) scaleY(.95);transform:translate3d(0,10px,0) scaleY(.95)}90%{-webkit-transform:translate3d(0,-5px,0) scaleY(.985);transform:translate3d(0,-5px,0) scaleY(.985)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes bounceInUp{0%,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(0,3000px,0) scaleY(5);transform:translate3d(0,3000px,0) scaleY(5)}60%{opacity:1;-webkit-transform:translate3d(0,-20px,0) scaleY(.9);transform:translate3d(0,-20px,0) scaleY(.9)}75%{-webkit-transform:translate3d(0,10px,0) scaleY(.95);transform:translate3d(0,10px,0) scaleY(.95)}90%{-webkit-transform:translate3d(0,-5px,0) scaleY(.985);transform:translate3d(0,-5px,0) scaleY(.985)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}.animate__bounceInUp{-webkit-animation-name:bounceInUp;animation-name:bounceInUp}@-webkit-keyframes bounceOut{20%{-webkit-transform:scale3d(.9,.9,.9);transform:scale3d(.9,.9,.9)}50%,55%{opacity:1;-webkit-transform:scale3d(1.1,1.1,1.1);transform:scale3d(1.1,1.1,1.1)}to{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}}@keyframes bounceOut{20%{-webkit-transform:scale3d(.9,.9,.9);transform:scale3d(.9,.9,.9)}50%,55%{opacity:1;-webkit-transform:scale3d(1.1,1.1,1.1);transform:scale3d(1.1,1.1,1.1)}to{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}}.animate__bounceOut{-webkit-animation-duration:.75s;animation-duration:.75s;-webkit-animation-duration:calc(var(--animate-duration)*0.75);animation-duration:calc(var(--animate-duration)*0.75);-webkit-animation-name:bounceOut;animation-name:bounceOut}@-webkit-keyframes bounceOutDown{20%{-webkit-transform:translate3d(0,10px,0) scaleY(.985);transform:translate3d(0,10px,0) scaleY(.985)}40%,45%{opacity:1;-webkit-transform:translate3d(0,-20px,0) scaleY(.9);transform:translate3d(0,-20px,0) scaleY(.9)}to{opacity:0;-webkit-transform:translate3d(0,2000px,0) scaleY(3);transform:translate3d(0,2000px,0) scaleY(3)}}@keyframes bounceOutDown{20%{-webkit-transform:translate3d(0,10px,0) scaleY(.985);transform:translate3d(0,10px,0) scaleY(.985)}40%,45%{opacity:1;-webkit-transform:translate3d(0,-20px,0) scaleY(.9);transform:translate3d(0,-20px,0) scaleY(.9)}to{opacity:0;-webkit-transform:translate3d(0,2000px,0) scaleY(3);transform:translate3d(0,2000px,0) scaleY(3)}}.animate__bounceOutDown{-webkit-animation-name:bounceOutDown;animation-name:bounceOutDown}@-webkit-keyframes bounceOutLeft{20%{opacity:1;-webkit-transform:translate3d(20px,0,0) scaleX(.9);transform:translate3d(20px,0,0) scaleX(.9)}to{opacity:0;-webkit-transform:translate3d(-2000px,0,0) scaleX(2);transform:translate3d(-2000px,0,0) scaleX(2)}}@keyframes bounceOutLeft{20%{opacity:1;-webkit-transform:translate3d(20px,0,0) scaleX(.9);transform:translate3d(20px,0,0) scaleX(.9)}to{opacity:0;-webkit-transform:translate3d(-2000px,0,0) scaleX(2);transform:translate3d(-2000px,0,0) scaleX(2)}}.animate__bounceOutLeft{-webkit-animation-name:bounceOutLeft;animation-name:bounceOutLeft}@-webkit-keyframes bounceOutRight{20%{opacity:1;-webkit-transform:translate3d(-20px,0,0) scaleX(.9);transform:translate3d(-20px,0,0) scaleX(.9)}to{opacity:0;-webkit-transform:translate3d(2000px,0,0) scaleX(2);transform:translate3d(2000px,0,0) scaleX(2)}}@keyframes bounceOutRight{20%{opacity:1;-webkit-transform:translate3d(-20px,0,0) scaleX(.9);transform:translate3d(-20px,0,0) scaleX(.9)}to{opacity:0;-webkit-transform:translate3d(2000px,0,0) scaleX(2);transform:translate3d(2000px,0,0) scaleX(2)}}.animate__bounceOutRight{-webkit-animation-name:bounceOutRight;animation-name:bounceOutRight}@-webkit-keyframes bounceOutUp{20%{-webkit-transform:translate3d(0,-10px,0) scaleY(.985);transform:translate3d(0,-10px,0) scaleY(.985)}40%,45%{opacity:1;-webkit-transform:translate3d(0,20px,0) scaleY(.9);transform:translate3d(0,20px,0) scaleY(.9)}to{opacity:0;-webkit-transform:translate3d(0,-2000px,0) scaleY(3);transform:translate3d(0,-2000px,0) scaleY(3)}}@keyframes bounceOutUp{20%{-webkit-transform:translate3d(0,-10px,0) scaleY(.985);transform:translate3d(0,-10px,0) scaleY(.985)}40%,45%{opacity:1;-webkit-transform:translate3d(0,20px,0) scaleY(.9);transform:translate3d(0,20px,0) scaleY(.9)}to{opacity:0;-webkit-transform:translate3d(0,-2000px,0) scaleY(3);transform:translate3d(0,-2000px,0) scaleY(3)}}.animate__bounceOutUp{-webkit-animation-name:bounceOutUp;animation-name:bounceOutUp}@-webkit-keyframes fadeIn{0%{opacity:0}to{opacity:1}}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}.animate__fadeIn{-webkit-animation-name:fadeIn;animation-name:fadeIn}@-webkit-keyframes fadeInDown{0%{opacity:0;-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes fadeInDown{0%{opacity:0;-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}.animate__fadeInDown{-webkit-animation-name:fadeInDown;animation-name:fadeInDown}@-webkit-keyframes fadeInDownBig{0%{opacity:0;-webkit-transform:translate3d(0,-2000px,0);transform:translate3d(0,-2000px,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes fadeInDownBig{0%{opacity:0;-webkit-transform:translate3d(0,-2000px,0);transform:translate3d(0,-2000px,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}.animate__fadeInDownBig{-webkit-animation-name:fadeInDownBig;animation-name:fadeInDownBig}@-webkit-keyframes fadeInLeft{0%{opacity:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes fadeInLeft{0%{opacity:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}.animate__fadeInLeft{-webkit-animation-name:fadeInLeft;animation-name:fadeInLeft}@-webkit-keyframes fadeInLeftBig{0%{opacity:0;-webkit-transform:translate3d(-2000px,0,0);transform:translate3d(-2000px,0,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes fadeInLeftBig{0%{opacity:0;-webkit-transform:translate3d(-2000px,0,0);transform:translate3d(-2000px,0,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}.animate__fadeInLeftBig{-webkit-animation-name:fadeInLeftBig;animation-name:fadeInLeftBig}@-webkit-keyframes fadeInRight{0%{opacity:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes fadeInRight{0%{opacity:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}.animate__fadeInRight{-webkit-animation-name:fadeInRight;animation-name:fadeInRight}@-webkit-keyframes fadeInRightBig{0%{opacity:0;-webkit-transform:translate3d(2000px,0,0);transform:translate3d(2000px,0,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes fadeInRightBig{0%{opacity:0;-webkit-transform:translate3d(2000px,0,0);transform:translate3d(2000px,0,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}.animate__fadeInRightBig{-webkit-animation-name:fadeInRightBig;animation-name:fadeInRightBig}@-webkit-keyframes fadeInUp{0%{opacity:0;-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes fadeInUp{0%{opacity:0;-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}.animate__fadeInUp{-webkit-animation-name:fadeInUp;animation-name:fadeInUp}@-webkit-keyframes fadeInUpBig{0%{opacity:0;-webkit-transform:translate3d(0,2000px,0);transform:translate3d(0,2000px,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes fadeInUpBig{0%{opacity:0;-webkit-transform:translate3d(0,2000px,0);transform:translate3d(0,2000px,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}.animate__fadeInUpBig{-webkit-animation-name:fadeInUpBig;animation-name:fadeInUpBig}@-webkit-keyframes fadeInTopLeft{0%{opacity:0;-webkit-transform:translate3d(-100%,-100%,0);transform:translate3d(-100%,-100%,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes fadeInTopLeft{0%{opacity:0;-webkit-transform:translate3d(-100%,-100%,0);transform:translate3d(-100%,-100%,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}.animate__fadeInTopLeft{-webkit-animation-name:fadeInTopLeft;animation-name:fadeInTopLeft}@-webkit-keyframes fadeInTopRight{0%{opacity:0;-webkit-transform:translate3d(100%,-100%,0);transform:translate3d(100%,-100%,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes fadeInTopRight{0%{opacity:0;-webkit-transform:translate3d(100%,-100%,0);transform:translate3d(100%,-100%,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}.animate__fadeInTopRight{-webkit-animation-name:fadeInTopRight;animation-name:fadeInTopRight}@-webkit-keyframes fadeInBottomLeft{0%{opacity:0;-webkit-transform:translate3d(-100%,100%,0);transform:translate3d(-100%,100%,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes fadeInBottomLeft{0%{opacity:0;-webkit-transform:translate3d(-100%,100%,0);transform:translate3d(-100%,100%,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}.animate__fadeInBottomLeft{-webkit-animation-name:fadeInBottomLeft;animation-name:fadeInBottomLeft}@-webkit-keyframes fadeInBottomRight{0%{opacity:0;-webkit-transform:translate3d(100%,100%,0);transform:translate3d(100%,100%,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes fadeInBottomRight{0%{opacity:0;-webkit-transform:translate3d(100%,100%,0);transform:translate3d(100%,100%,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}.animate__fadeInBottomRight{-webkit-animation-name:fadeInBottomRight;animation-name:fadeInBottomRight}@-webkit-keyframes fadeOut{0%{opacity:1}to{opacity:0}}@keyframes fadeOut{0%{opacity:1}to{opacity:0}}.animate__fadeOut{-webkit-animation-name:fadeOut;animation-name:fadeOut}@-webkit-keyframes fadeOutDown{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}}@keyframes fadeOutDown{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}}.animate__fadeOutDown{-webkit-animation-name:fadeOutDown;animation-name:fadeOutDown}@-webkit-keyframes fadeOutDownBig{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(0,2000px,0);transform:translate3d(0,2000px,0)}}@keyframes fadeOutDownBig{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(0,2000px,0);transform:translate3d(0,2000px,0)}}.animate__fadeOutDownBig{-webkit-animation-name:fadeOutDownBig;animation-name:fadeOutDownBig}@-webkit-keyframes fadeOutLeft{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}}@keyframes fadeOutLeft{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}}.animate__fadeOutLeft{-webkit-animation-name:fadeOutLeft;animation-name:fadeOutLeft}@-webkit-keyframes fadeOutLeftBig{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(-2000px,0,0);transform:translate3d(-2000px,0,0)}}@keyframes fadeOutLeftBig{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(-2000px,0,0);transform:translate3d(-2000px,0,0)}}.animate__fadeOutLeftBig{-webkit-animation-name:fadeOutLeftBig;animation-name:fadeOutLeftBig}@-webkit-keyframes fadeOutRight{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}}@keyframes fadeOutRight{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}}.animate__fadeOutRight{-webkit-animation-name:fadeOutRight;animation-name:fadeOutRight}@-webkit-keyframes fadeOutRightBig{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(2000px,0,0);transform:translate3d(2000px,0,0)}}@keyframes fadeOutRightBig{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(2000px,0,0);transform:translate3d(2000px,0,0)}}.animate__fadeOutRightBig{-webkit-animation-name:fadeOutRightBig;animation-name:fadeOutRightBig}@-webkit-keyframes fadeOutUp{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}}@keyframes fadeOutUp{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}}.animate__fadeOutUp{-webkit-animation-name:fadeOutUp;animation-name:fadeOutUp}@-webkit-keyframes fadeOutUpBig{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(0,-2000px,0);transform:translate3d(0,-2000px,0)}}@keyframes fadeOutUpBig{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(0,-2000px,0);transform:translate3d(0,-2000px,0)}}.animate__fadeOutUpBig{-webkit-animation-name:fadeOutUpBig;animation-name:fadeOutUpBig}@-webkit-keyframes fadeOutTopLeft{0%{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}to{opacity:0;-webkit-transform:translate3d(-100%,-100%,0);transform:translate3d(-100%,-100%,0)}}@keyframes fadeOutTopLeft{0%{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}to{opacity:0;-webkit-transform:translate3d(-100%,-100%,0);transform:translate3d(-100%,-100%,0)}}.animate__fadeOutTopLeft{-webkit-animation-name:fadeOutTopLeft;animation-name:fadeOutTopLeft}@-webkit-keyframes fadeOutTopRight{0%{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}to{opacity:0;-webkit-transform:translate3d(100%,-100%,0);transform:translate3d(100%,-100%,0)}}@keyframes fadeOutTopRight{0%{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}to{opacity:0;-webkit-transform:translate3d(100%,-100%,0);transform:translate3d(100%,-100%,0)}}.animate__fadeOutTopRight{-webkit-animation-name:fadeOutTopRight;animation-name:fadeOutTopRight}@-webkit-keyframes fadeOutBottomRight{0%{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}to{opacity:0;-webkit-transform:translate3d(100%,100%,0);transform:translate3d(100%,100%,0)}}@keyframes fadeOutBottomRight{0%{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}to{opacity:0;-webkit-transform:translate3d(100%,100%,0);transform:translate3d(100%,100%,0)}}.animate__fadeOutBottomRight{-webkit-animation-name:fadeOutBottomRight;animation-name:fadeOutBottomRight}@-webkit-keyframes fadeOutBottomLeft{0%{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}to{opacity:0;-webkit-transform:translate3d(-100%,100%,0);transform:translate3d(-100%,100%,0)}}@keyframes fadeOutBottomLeft{0%{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}to{opacity:0;-webkit-transform:translate3d(-100%,100%,0);transform:translate3d(-100%,100%,0)}}.animate__fadeOutBottomLeft{-webkit-animation-name:fadeOutBottomLeft;animation-name:fadeOutBottomLeft}@-webkit-keyframes flip{0%{-webkit-transform:perspective(400px) scaleX(1) translateZ(0) rotateY(-1turn);transform:perspective(400px) scaleX(1) translateZ(0) rotateY(-1turn);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}40%{-webkit-transform:perspective(400px) scaleX(1) translateZ(150px) rotateY(-190deg);transform:perspective(400px) scaleX(1) translateZ(150px) rotateY(-190deg);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}50%{-webkit-transform:perspective(400px) scaleX(1) translateZ(150px) rotateY(-170deg);transform:perspective(400px) scaleX(1) translateZ(150px) rotateY(-170deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}80%{-webkit-transform:perspective(400px) scale3d(.95,.95,.95) translateZ(0) rotateY(0deg);transform:perspective(400px) scale3d(.95,.95,.95) translateZ(0) rotateY(0deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}to{-webkit-transform:perspective(400px) scaleX(1) translateZ(0) rotateY(0deg);transform:perspective(400px) scaleX(1) translateZ(0) rotateY(0deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}}@keyframes flip{0%{-webkit-transform:perspective(400px) scaleX(1) translateZ(0) rotateY(-1turn);transform:perspective(400px) scaleX(1) translateZ(0) rotateY(-1turn);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}40%{-webkit-transform:perspective(400px) scaleX(1) translateZ(150px) rotateY(-190deg);transform:perspective(400px) scaleX(1) translateZ(150px) rotateY(-190deg);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}50%{-webkit-transform:perspective(400px) scaleX(1) translateZ(150px) rotateY(-170deg);transform:perspective(400px) scaleX(1) translateZ(150px) rotateY(-170deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}80%{-webkit-transform:perspective(400px) scale3d(.95,.95,.95) translateZ(0) rotateY(0deg);transform:perspective(400px) scale3d(.95,.95,.95) translateZ(0) rotateY(0deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}to{-webkit-transform:perspective(400px) scaleX(1) translateZ(0) rotateY(0deg);transform:perspective(400px) scaleX(1) translateZ(0) rotateY(0deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}}.animate__animated.animate__flip{-webkit-backface-visibility:visible;backface-visibility:visible;-webkit-animation-name:flip;animation-name:flip}@-webkit-keyframes flipInX{0%{-webkit-transform:perspective(400px) rotateX(90deg);transform:perspective(400px) rotateX(90deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in;opacity:0}40%{-webkit-transform:perspective(400px) rotateX(-20deg);transform:perspective(400px) rotateX(-20deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}60%{-webkit-transform:perspective(400px) rotateX(10deg);transform:perspective(400px) rotateX(10deg);opacity:1}80%{-webkit-transform:perspective(400px) rotateX(-5deg);transform:perspective(400px) rotateX(-5deg)}to{-webkit-transform:perspective(400px);transform:perspective(400px)}}@keyframes flipInX{0%{-webkit-transform:perspective(400px) rotateX(90deg);transform:perspective(400px) rotateX(90deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in;opacity:0}40%{-webkit-transform:perspective(400px) rotateX(-20deg);transform:perspective(400px) rotateX(-20deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}60%{-webkit-transform:perspective(400px) rotateX(10deg);transform:perspective(400px) rotateX(10deg);opacity:1}80%{-webkit-transform:perspective(400px) rotateX(-5deg);transform:perspective(400px) rotateX(-5deg)}to{-webkit-transform:perspective(400px);transform:perspective(400px)}}.animate__flipInX{-webkit-backface-visibility:visible!important;backface-visibility:visible!important;-webkit-animation-name:flipInX;animation-name:flipInX}@-webkit-keyframes flipInY{0%{-webkit-transform:perspective(400px) rotateY(90deg);transform:perspective(400px) rotateY(90deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in;opacity:0}40%{-webkit-transform:perspective(400px) rotateY(-20deg);transform:perspective(400px) rotateY(-20deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}60%{-webkit-transform:perspective(400px) rotateY(10deg);transform:perspective(400px) rotateY(10deg);opacity:1}80%{-webkit-transform:perspective(400px) rotateY(-5deg);transform:perspective(400px) rotateY(-5deg)}to{-webkit-transform:perspective(400px);transform:perspective(400px)}}@keyframes flipInY{0%{-webkit-transform:perspective(400px) rotateY(90deg);transform:perspective(400px) rotateY(90deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in;opacity:0}40%{-webkit-transform:perspective(400px) rotateY(-20deg);transform:perspective(400px) rotateY(-20deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}60%{-webkit-transform:perspective(400px) rotateY(10deg);transform:perspective(400px) rotateY(10deg);opacity:1}80%{-webkit-transform:perspective(400px) rotateY(-5deg);transform:perspective(400px) rotateY(-5deg)}to{-webkit-transform:perspective(400px);transform:perspective(400px)}}.animate__flipInY{-webkit-backface-visibility:visible!important;backface-visibility:visible!important;-webkit-animation-name:flipInY;animation-name:flipInY}@-webkit-keyframes flipOutX{0%{-webkit-transform:perspective(400px);transform:perspective(400px)}30%{-webkit-transform:perspective(400px) rotateX(-20deg);transform:perspective(400px) rotateX(-20deg);opacity:1}to{-webkit-transform:perspective(400px) rotateX(90deg);transform:perspective(400px) rotateX(90deg);opacity:0}}@keyframes flipOutX{0%{-webkit-transform:perspective(400px);transform:perspective(400px)}30%{-webkit-transform:perspective(400px) rotateX(-20deg);transform:perspective(400px) rotateX(-20deg);opacity:1}to{-webkit-transform:perspective(400px) rotateX(90deg);transform:perspective(400px) rotateX(90deg);opacity:0}}.animate__flipOutX{-webkit-animation-duration:.75s;animation-duration:.75s;-webkit-animation-duration:calc(var(--animate-duration)*0.75);animation-duration:calc(var(--animate-duration)*0.75);-webkit-animation-name:flipOutX;animation-name:flipOutX;-webkit-backface-visibility:visible!important;backface-visibility:visible!important}@-webkit-keyframes flipOutY{0%{-webkit-transform:perspective(400px);transform:perspective(400px)}30%{-webkit-transform:perspective(400px) rotateY(-15deg);transform:perspective(400px) rotateY(-15deg);opacity:1}to{-webkit-transform:perspective(400px) rotateY(90deg);transform:perspective(400px) rotateY(90deg);opacity:0}}@keyframes flipOutY{0%{-webkit-transform:perspective(400px);transform:perspective(400px)}30%{-webkit-transform:perspective(400px) rotateY(-15deg);transform:perspective(400px) rotateY(-15deg);opacity:1}to{-webkit-transform:perspective(400px) rotateY(90deg);transform:perspective(400px) rotateY(90deg);opacity:0}}.animate__flipOutY{-webkit-animation-duration:.75s;animation-duration:.75s;-webkit-animation-duration:calc(var(--animate-duration)*0.75);animation-duration:calc(var(--animate-duration)*0.75);-webkit-backface-visibility:visible!important;backface-visibility:visible!important;-webkit-animation-name:flipOutY;animation-name:flipOutY}@-webkit-keyframes lightSpeedInRight{0%{-webkit-transform:translate3d(100%,0,0) skewX(-30deg);transform:translate3d(100%,0,0) skewX(-30deg);opacity:0}60%{-webkit-transform:skewX(20deg);transform:skewX(20deg);opacity:1}80%{-webkit-transform:skewX(-5deg);transform:skewX(-5deg)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes lightSpeedInRight{0%{-webkit-transform:translate3d(100%,0,0) skewX(-30deg);transform:translate3d(100%,0,0) skewX(-30deg);opacity:0}60%{-webkit-transform:skewX(20deg);transform:skewX(20deg);opacity:1}80%{-webkit-transform:skewX(-5deg);transform:skewX(-5deg)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}.animate__lightSpeedInRight{-webkit-animation-name:lightSpeedInRight;animation-name:lightSpeedInRight;-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}@-webkit-keyframes lightSpeedInLeft{0%{-webkit-transform:translate3d(-100%,0,0) skewX(30deg);transform:translate3d(-100%,0,0) skewX(30deg);opacity:0}60%{-webkit-transform:skewX(-20deg);transform:skewX(-20deg);opacity:1}80%{-webkit-transform:skewX(5deg);transform:skewX(5deg)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes lightSpeedInLeft{0%{-webkit-transform:translate3d(-100%,0,0) skewX(30deg);transform:translate3d(-100%,0,0) skewX(30deg);opacity:0}60%{-webkit-transform:skewX(-20deg);transform:skewX(-20deg);opacity:1}80%{-webkit-transform:skewX(5deg);transform:skewX(5deg)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}.animate__lightSpeedInLeft{-webkit-animation-name:lightSpeedInLeft;animation-name:lightSpeedInLeft;-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}@-webkit-keyframes lightSpeedOutRight{0%{opacity:1}to{-webkit-transform:translate3d(100%,0,0) skewX(30deg);transform:translate3d(100%,0,0) skewX(30deg);opacity:0}}@keyframes lightSpeedOutRight{0%{opacity:1}to{-webkit-transform:translate3d(100%,0,0) skewX(30deg);transform:translate3d(100%,0,0) skewX(30deg);opacity:0}}.animate__lightSpeedOutRight{-webkit-animation-name:lightSpeedOutRight;animation-name:lightSpeedOutRight;-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}@-webkit-keyframes lightSpeedOutLeft{0%{opacity:1}to{-webkit-transform:translate3d(-100%,0,0) skewX(-30deg);transform:translate3d(-100%,0,0) skewX(-30deg);opacity:0}}@keyframes lightSpeedOutLeft{0%{opacity:1}to{-webkit-transform:translate3d(-100%,0,0) skewX(-30deg);transform:translate3d(-100%,0,0) skewX(-30deg);opacity:0}}.animate__lightSpeedOutLeft{-webkit-animation-name:lightSpeedOutLeft;animation-name:lightSpeedOutLeft;-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}@-webkit-keyframes rotateIn{0%{-webkit-transform:rotate(-200deg);transform:rotate(-200deg);opacity:0}to{-webkit-transform:translateZ(0);transform:translateZ(0);opacity:1}}@keyframes rotateIn{0%{-webkit-transform:rotate(-200deg);transform:rotate(-200deg);opacity:0}to{-webkit-transform:translateZ(0);transform:translateZ(0);opacity:1}}.animate__rotateIn{-webkit-animation-name:rotateIn;animation-name:rotateIn;-webkit-transform-origin:center;transform-origin:center}@-webkit-keyframes rotateInDownLeft{0%{-webkit-transform:rotate(-45deg);transform:rotate(-45deg);opacity:0}to{-webkit-transform:translateZ(0);transform:translateZ(0);opacity:1}}@keyframes rotateInDownLeft{0%{-webkit-transform:rotate(-45deg);transform:rotate(-45deg);opacity:0}to{-webkit-transform:translateZ(0);transform:translateZ(0);opacity:1}}.animate__rotateInDownLeft{-webkit-animation-name:rotateInDownLeft;animation-name:rotateInDownLeft;-webkit-transform-origin:left bottom;transform-origin:left bottom}@-webkit-keyframes rotateInDownRight{0%{-webkit-transform:rotate(45deg);transform:rotate(45deg);opacity:0}to{-webkit-transform:translateZ(0);transform:translateZ(0);opacity:1}}@keyframes rotateInDownRight{0%{-webkit-transform:rotate(45deg);transform:rotate(45deg);opacity:0}to{-webkit-transform:translateZ(0);transform:translateZ(0);opacity:1}}.animate__rotateInDownRight{-webkit-animation-name:rotateInDownRight;animation-name:rotateInDownRight;-webkit-transform-origin:right bottom;transform-origin:right bottom}@-webkit-keyframes rotateInUpLeft{0%{-webkit-transform:rotate(45deg);transform:rotate(45deg);opacity:0}to{-webkit-transform:translateZ(0);transform:translateZ(0);opacity:1}}@keyframes rotateInUpLeft{0%{-webkit-transform:rotate(45deg);transform:rotate(45deg);opacity:0}to{-webkit-transform:translateZ(0);transform:translateZ(0);opacity:1}}.animate__rotateInUpLeft{-webkit-animation-name:rotateInUpLeft;animation-name:rotateInUpLeft;-webkit-transform-origin:left bottom;transform-origin:left bottom}@-webkit-keyframes rotateInUpRight{0%{-webkit-transform:rotate(-90deg);transform:rotate(-90deg);opacity:0}to{-webkit-transform:translateZ(0);transform:translateZ(0);opacity:1}}@keyframes rotateInUpRight{0%{-webkit-transform:rotate(-90deg);transform:rotate(-90deg);opacity:0}to{-webkit-transform:translateZ(0);transform:translateZ(0);opacity:1}}.animate__rotateInUpRight{-webkit-animation-name:rotateInUpRight;animation-name:rotateInUpRight;-webkit-transform-origin:right bottom;transform-origin:right bottom}@-webkit-keyframes rotateOut{0%{opacity:1}to{-webkit-transform:rotate(200deg);transform:rotate(200deg);opacity:0}}@keyframes rotateOut{0%{opacity:1}to{-webkit-transform:rotate(200deg);transform:rotate(200deg);opacity:0}}.animate__rotateOut{-webkit-animation-name:rotateOut;animation-name:rotateOut;-webkit-transform-origin:center;transform-origin:center}@-webkit-keyframes rotateOutDownLeft{0%{opacity:1}to{-webkit-transform:rotate(45deg);transform:rotate(45deg);opacity:0}}@keyframes rotateOutDownLeft{0%{opacity:1}to{-webkit-transform:rotate(45deg);transform:rotate(45deg);opacity:0}}.animate__rotateOutDownLeft{-webkit-animation-name:rotateOutDownLeft;animation-name:rotateOutDownLeft;-webkit-transform-origin:left bottom;transform-origin:left bottom}@-webkit-keyframes rotateOutDownRight{0%{opacity:1}to{-webkit-transform:rotate(-45deg);transform:rotate(-45deg);opacity:0}}@keyframes rotateOutDownRight{0%{opacity:1}to{-webkit-transform:rotate(-45deg);transform:rotate(-45deg);opacity:0}}.animate__rotateOutDownRight{-webkit-animation-name:rotateOutDownRight;animation-name:rotateOutDownRight;-webkit-transform-origin:right bottom;transform-origin:right bottom}@-webkit-keyframes rotateOutUpLeft{0%{opacity:1}to{-webkit-transform:rotate(-45deg);transform:rotate(-45deg);opacity:0}}@keyframes rotateOutUpLeft{0%{opacity:1}to{-webkit-transform:rotate(-45deg);transform:rotate(-45deg);opacity:0}}.animate__rotateOutUpLeft{-webkit-animation-name:rotateOutUpLeft;animation-name:rotateOutUpLeft;-webkit-transform-origin:left bottom;transform-origin:left bottom}@-webkit-keyframes rotateOutUpRight{0%{opacity:1}to{-webkit-transform:rotate(90deg);transform:rotate(90deg);opacity:0}}@keyframes rotateOutUpRight{0%{opacity:1}to{-webkit-transform:rotate(90deg);transform:rotate(90deg);opacity:0}}.animate__rotateOutUpRight{-webkit-animation-name:rotateOutUpRight;animation-name:rotateOutUpRight;-webkit-transform-origin:right bottom;transform-origin:right bottom}@-webkit-keyframes hinge{0%{-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}20%,60%{-webkit-transform:rotate(80deg);transform:rotate(80deg);-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}40%,80%{-webkit-transform:rotate(60deg);transform:rotate(60deg);-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out;opacity:1}to{-webkit-transform:translate3d(0,700px,0);transform:translate3d(0,700px,0);opacity:0}}@keyframes hinge{0%{-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}20%,60%{-webkit-transform:rotate(80deg);transform:rotate(80deg);-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}40%,80%{-webkit-transform:rotate(60deg);transform:rotate(60deg);-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out;opacity:1}to{-webkit-transform:translate3d(0,700px,0);transform:translate3d(0,700px,0);opacity:0}}.animate__hinge{-webkit-animation-duration:2s;animation-duration:2s;-webkit-animation-duration:calc(var(--animate-duration)*2);animation-duration:calc(var(--animate-duration)*2);-webkit-animation-name:hinge;animation-name:hinge;-webkit-transform-origin:top left;transform-origin:top left}@-webkit-keyframes jackInTheBox{0%{opacity:0;-webkit-transform:scale(.1) rotate(30deg);transform:scale(.1) rotate(30deg);-webkit-transform-origin:center bottom;transform-origin:center bottom}50%{-webkit-transform:rotate(-10deg);transform:rotate(-10deg)}70%{-webkit-transform:rotate(3deg);transform:rotate(3deg)}to{opacity:1;-webkit-transform:scale(1);transform:scale(1)}}@keyframes jackInTheBox{0%{opacity:0;-webkit-transform:scale(.1) rotate(30deg);transform:scale(.1) rotate(30deg);-webkit-transform-origin:center bottom;transform-origin:center bottom}50%{-webkit-transform:rotate(-10deg);transform:rotate(-10deg)}70%{-webkit-transform:rotate(3deg);transform:rotate(3deg)}to{opacity:1;-webkit-transform:scale(1);transform:scale(1)}}.animate__jackInTheBox{-webkit-animation-name:jackInTheBox;animation-name:jackInTheBox}@-webkit-keyframes rollIn{0%{opacity:0;-webkit-transform:translate3d(-100%,0,0) rotate(-120deg);transform:translate3d(-100%,0,0) rotate(-120deg)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes rollIn{0%{opacity:0;-webkit-transform:translate3d(-100%,0,0) rotate(-120deg);transform:translate3d(-100%,0,0) rotate(-120deg)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}.animate__rollIn{-webkit-animation-name:rollIn;animation-name:rollIn}@-webkit-keyframes rollOut{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(100%,0,0) rotate(120deg);transform:translate3d(100%,0,0) rotate(120deg)}}@keyframes rollOut{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(100%,0,0) rotate(120deg);transform:translate3d(100%,0,0) rotate(120deg)}}.animate__rollOut{-webkit-animation-name:rollOut;animation-name:rollOut}@-webkit-keyframes zoomIn{0%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}50%{opacity:1}}@keyframes zoomIn{0%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}50%{opacity:1}}.animate__zoomIn{-webkit-animation-name:zoomIn;animation-name:zoomIn}@-webkit-keyframes zoomInDown{0%{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,-1000px,0);transform:scale3d(.1,.1,.1) translate3d(0,-1000px,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,60px,0);transform:scale3d(.475,.475,.475) translate3d(0,60px,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}@keyframes zoomInDown{0%{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,-1000px,0);transform:scale3d(.1,.1,.1) translate3d(0,-1000px,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,60px,0);transform:scale3d(.475,.475,.475) translate3d(0,60px,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}.animate__zoomInDown{-webkit-animation-name:zoomInDown;animation-name:zoomInDown}@-webkit-keyframes zoomInLeft{0%{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(-1000px,0,0);transform:scale3d(.1,.1,.1) translate3d(-1000px,0,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(10px,0,0);transform:scale3d(.475,.475,.475) translate3d(10px,0,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}@keyframes zoomInLeft{0%{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(-1000px,0,0);transform:scale3d(.1,.1,.1) translate3d(-1000px,0,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(10px,0,0);transform:scale3d(.475,.475,.475) translate3d(10px,0,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}.animate__zoomInLeft{-webkit-animation-name:zoomInLeft;animation-name:zoomInLeft}@-webkit-keyframes zoomInRight{0%{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(1000px,0,0);transform:scale3d(.1,.1,.1) translate3d(1000px,0,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(-10px,0,0);transform:scale3d(.475,.475,.475) translate3d(-10px,0,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}@keyframes zoomInRight{0%{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(1000px,0,0);transform:scale3d(.1,.1,.1) translate3d(1000px,0,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(-10px,0,0);transform:scale3d(.475,.475,.475) translate3d(-10px,0,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}.animate__zoomInRight{-webkit-animation-name:zoomInRight;animation-name:zoomInRight}@-webkit-keyframes zoomInUp{0%{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,1000px,0);transform:scale3d(.1,.1,.1) translate3d(0,1000px,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}@keyframes zoomInUp{0%{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,1000px,0);transform:scale3d(.1,.1,.1) translate3d(0,1000px,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}.animate__zoomInUp{-webkit-animation-name:zoomInUp;animation-name:zoomInUp}@-webkit-keyframes zoomOut{0%{opacity:1}50%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}to{opacity:0}}@keyframes zoomOut{0%{opacity:1}50%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}to{opacity:0}}.animate__zoomOut{-webkit-animation-name:zoomOut;animation-name:zoomOut}@-webkit-keyframes zoomOutDown{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}to{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,2000px,0);transform:scale3d(.1,.1,.1) translate3d(0,2000px,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}@keyframes zoomOutDown{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}to{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,2000px,0);transform:scale3d(.1,.1,.1) translate3d(0,2000px,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}.animate__zoomOutDown{-webkit-animation-name:zoomOutDown;animation-name:zoomOutDown;-webkit-transform-origin:center bottom;transform-origin:center bottom}@-webkit-keyframes zoomOutLeft{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(42px,0,0);transform:scale3d(.475,.475,.475) translate3d(42px,0,0)}to{opacity:0;-webkit-transform:scale(.1) translate3d(-2000px,0,0);transform:scale(.1) translate3d(-2000px,0,0)}}@keyframes zoomOutLeft{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(42px,0,0);transform:scale3d(.475,.475,.475) translate3d(42px,0,0)}to{opacity:0;-webkit-transform:scale(.1) translate3d(-2000px,0,0);transform:scale(.1) translate3d(-2000px,0,0)}}.animate__zoomOutLeft{-webkit-animation-name:zoomOutLeft;animation-name:zoomOutLeft;-webkit-transform-origin:left center;transform-origin:left center}@-webkit-keyframes zoomOutRight{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(-42px,0,0);transform:scale3d(.475,.475,.475) translate3d(-42px,0,0)}to{opacity:0;-webkit-transform:scale(.1) translate3d(2000px,0,0);transform:scale(.1) translate3d(2000px,0,0)}}@keyframes zoomOutRight{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(-42px,0,0);transform:scale3d(.475,.475,.475) translate3d(-42px,0,0)}to{opacity:0;-webkit-transform:scale(.1) translate3d(2000px,0,0);transform:scale(.1) translate3d(2000px,0,0)}}.animate__zoomOutRight{-webkit-animation-name:zoomOutRight;animation-name:zoomOutRight;-webkit-transform-origin:right center;transform-origin:right center}@-webkit-keyframes zoomOutUp{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,60px,0);transform:scale3d(.475,.475,.475) translate3d(0,60px,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}to{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,-2000px,0);transform:scale3d(.1,.1,.1) translate3d(0,-2000px,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}@keyframes zoomOutUp{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,60px,0);transform:scale3d(.475,.475,.475) translate3d(0,60px,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}to{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,-2000px,0);transform:scale3d(.1,.1,.1) translate3d(0,-2000px,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}.animate__zoomOutUp{-webkit-animation-name:zoomOutUp;animation-name:zoomOutUp;-webkit-transform-origin:center bottom;transform-origin:center bottom}@-webkit-keyframes slideInDown{0%{-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0);visibility:visible}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes slideInDown{0%{-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0);visibility:visible}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}.animate__slideInDown{-webkit-animation-name:slideInDown;animation-name:slideInDown}@-webkit-keyframes slideInLeft{0%{-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0);visibility:visible}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes slideInLeft{0%{-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0);visibility:visible}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}.animate__slideInLeft{-webkit-animation-name:slideInLeft;animation-name:slideInLeft}@-webkit-keyframes slideInRight{0%{-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0);visibility:visible}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes slideInRight{0%{-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0);visibility:visible}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}.animate__slideInRight{-webkit-animation-name:slideInRight;animation-name:slideInRight}@-webkit-keyframes slideInUp{0%{-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0);visibility:visible}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes slideInUp{0%{-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0);visibility:visible}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}.animate__slideInUp{-webkit-animation-name:slideInUp;animation-name:slideInUp}@-webkit-keyframes slideOutDown{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}to{visibility:hidden;-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}}@keyframes slideOutDown{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}to{visibility:hidden;-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}}.animate__slideOutDown{-webkit-animation-name:slideOutDown;animation-name:slideOutDown}@-webkit-keyframes slideOutLeft{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}to{visibility:hidden;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}}@keyframes slideOutLeft{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}to{visibility:hidden;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}}.animate__slideOutLeft{-webkit-animation-name:slideOutLeft;animation-name:slideOutLeft}@-webkit-keyframes slideOutRight{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}to{visibility:hidden;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}}@keyframes slideOutRight{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}to{visibility:hidden;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}}.animate__slideOutRight{-webkit-animation-name:slideOutRight;animation-name:slideOutRight}@-webkit-keyframes slideOutUp{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}to{visibility:hidden;-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}}@keyframes slideOutUp{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}to{visibility:hidden;-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}}.animate__slideOutUp{-webkit-animation-name:slideOutUp;animation-name:slideOutUp} \ No newline at end of file diff --git a/static/assets/css/bootstrap.min.css b/static/assets/css/bootstrap.min.css deleted file mode 100644 index 526a50e9..00000000 --- a/static/assets/css/bootstrap.min.css +++ /dev/null @@ -1,7 +0,0 @@ -@charset "UTF-8";/*! - * Bootstrap v5.0.0-beta1 (https://getbootstrap.com/) - * Copyright 2011-2020 The Bootstrap Authors - * Copyright 2011-2020 Twitter, Inc. - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) - */:root{--bs-blue:#0d6efd;--bs-indigo:#6610f2;--bs-purple:#6f42c1;--bs-pink:#d63384;--bs-red:#dc3545;--bs-orange:#fd7e14;--bs-yellow:#ffc107;--bs-green:#198754;--bs-teal:#20c997;--bs-cyan:#0dcaf0;--bs-white:#fff;--bs-gray:#6c757d;--bs-gray-dark:#343a40;--bs-primary:#0d6efd;--bs-secondary:#6c757d;--bs-success:#198754;--bs-info:#0dcaf0;--bs-warning:#ffc107;--bs-danger:#dc3545;--bs-light:#f8f9fa;--bs-dark:#212529;--bs-font-sans-serif:system-ui,-apple-system,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans","Liberation Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--bs-font-monospace:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--bs-gradient:linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0))}*,::after,::before{box-sizing:border-box}@media (prefers-reduced-motion:no-preference){:root{scroll-behavior:smooth}}body{margin:0;font-family:var(--bs-font-sans-serif);font-size:1rem;font-weight:400;line-height:1.5;color:#212529;background-color:#fff;-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:transparent}[tabindex="-1"]:focus:not(:focus-visible){outline:0!important}hr{margin:1rem 0;color:inherit;background-color:currentColor;border:0;opacity:.25}hr:not([size]){height:1px}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem;font-weight:500;line-height:1.2}.h1,h1{font-size:calc(1.375rem + 1.5vw)}@media (min-width:1200px){.h1,h1{font-size:2.5rem}}.h2,h2{font-size:calc(1.325rem + .9vw)}@media (min-width:1200px){.h2,h2{font-size:2rem}}.h3,h3{font-size:calc(1.3rem + .6vw)}@media (min-width:1200px){.h3,h3{font-size:1.75rem}}.h4,h4{font-size:calc(1.275rem + .3vw)}@media (min-width:1200px){.h4,h4{font-size:1.5rem}}.h5,h5{font-size:1.25rem}.h6,h6{font-size:1rem}p{margin-top:0;margin-bottom:1rem}abbr[data-bs-original-title],abbr[title]{text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none}address{margin-bottom:1rem;font-style:normal;line-height:inherit}ol,ul{padding-left:2rem}dl,ol,ul{margin-top:0;margin-bottom:1rem}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}.small,small{font-size:.875em}.mark,mark{padding:.2em;background-color:#fcf8e3}sub,sup{position:relative;font-size:.75em;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#0d6efd;text-decoration:underline}a:hover{color:#0a58ca}a:not([href]):not([class]),a:not([href]):not([class]):hover{color:inherit;text-decoration:none}code,kbd,pre,samp{font-family:var(--bs-font-monospace);font-size:1em;direction:ltr;unicode-bidi:bidi-override}pre{display:block;margin-top:0;margin-bottom:1rem;overflow:auto;font-size:.875em}pre code{font-size:inherit;color:inherit;word-break:normal}code{font-size:.875em;color:#d63384;word-wrap:break-word}a>code{color:inherit}kbd{padding:.2rem .4rem;font-size:.875em;color:#fff;background-color:#212529;border-radius:.2rem}kbd kbd{padding:0;font-size:1em;font-weight:700}figure{margin:0 0 1rem}img,svg{vertical-align:middle}table{caption-side:bottom;border-collapse:collapse}caption{padding-top:.5rem;padding-bottom:.5rem;color:#6c757d;text-align:left}th{text-align:inherit;text-align:-webkit-match-parent}tbody,td,tfoot,th,thead,tr{border-color:inherit;border-style:solid;border-width:0}label{display:inline-block}button{border-radius:0}button:focus{outline:dotted 1px;outline:-webkit-focus-ring-color auto 5px}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,select{text-transform:none}[role=button]{cursor:pointer}select{word-wrap:normal}[list]::-webkit-calendar-picker-indicator{display:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled),button:not(:disabled){cursor:pointer}::-moz-focus-inner{padding:0;border-style:none}textarea{resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{float:left;width:100%;padding:0;margin-bottom:.5rem;font-size:calc(1.275rem + .3vw);line-height:inherit}@media (min-width:1200px){legend{font-size:1.5rem}}legend+*{clear:left}::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-fields-wrapper,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-minute,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-text,::-webkit-datetime-edit-year-field{padding:0}::-webkit-inner-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:textfield}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-color-swatch-wrapper{padding:0}::file-selector-button{font:inherit}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}iframe{border:0}summary{display:list-item;cursor:pointer}progress{vertical-align:baseline}[hidden]{display:none!important}.lead{font-size:1.25rem;font-weight:300}.display-1{font-size:calc(1.625rem + 4.5vw);font-weight:300;line-height:1.2}@media (min-width:1200px){.display-1{font-size:5rem}}.display-2{font-size:calc(1.575rem + 3.9vw);font-weight:300;line-height:1.2}@media (min-width:1200px){.display-2{font-size:4.5rem}}.display-3{font-size:calc(1.525rem + 3.3vw);font-weight:300;line-height:1.2}@media (min-width:1200px){.display-3{font-size:4rem}}.display-4{font-size:calc(1.475rem + 2.7vw);font-weight:300;line-height:1.2}@media (min-width:1200px){.display-4{font-size:3.5rem}}.display-5{font-size:calc(1.425rem + 2.1vw);font-weight:300;line-height:1.2}@media (min-width:1200px){.display-5{font-size:3rem}}.display-6{font-size:calc(1.375rem + 1.5vw);font-weight:300;line-height:1.2}@media (min-width:1200px){.display-6{font-size:2.5rem}}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none}.list-inline-item{display:inline-block}.list-inline-item:not(:last-child){margin-right:.5rem}.initialism{font-size:.875em;text-transform:uppercase}.blockquote{margin-bottom:1rem;font-size:1.25rem}.blockquote>:last-child{margin-bottom:0}.blockquote-footer{margin-top:-1rem;margin-bottom:1rem;font-size:.875em;color:#6c757d}.blockquote-footer::before{content:"— "}.img-fluid{max-width:100%;height:auto}.img-thumbnail{padding:.25rem;background-color:#fff;border:1px solid #dee2e6;border-radius:.25rem;max-width:100%;height:auto}.figure{display:inline-block}.figure-img{margin-bottom:.5rem;line-height:1}.figure-caption{font-size:.875em;color:#6c757d}.container,.container-fluid,.container-lg,.container-md,.container-sm,.container-xl,.container-xxl{width:100%;padding-right:var(--bs-gutter-x,.75rem);padding-left:var(--bs-gutter-x,.75rem);margin-right:auto;margin-left:auto}@media (min-width:576px){.container,.container-sm{max-width:540px}}@media (min-width:768px){.container,.container-md,.container-sm{max-width:720px}}@media (min-width:992px){.container,.container-lg,.container-md,.container-sm{max-width:960px}}@media (min-width:1200px){.container,.container-lg,.container-md,.container-sm,.container-xl{max-width:1140px}}@media (min-width:1400px){.container,.container-lg,.container-md,.container-sm,.container-xl,.container-xxl{max-width:1320px}}.row{--bs-gutter-x:1.5rem;--bs-gutter-y:0;display:flex;flex-wrap:wrap;margin-top:calc(var(--bs-gutter-y) * -1);margin-right:calc(var(--bs-gutter-x)/ -2);margin-left:calc(var(--bs-gutter-x)/ -2)}.row>*{flex-shrink:0;width:100%;max-width:100%;padding-right:calc(var(--bs-gutter-x)/ 2);padding-left:calc(var(--bs-gutter-x)/ 2);margin-top:var(--bs-gutter-y)}.col{flex:1 0 0%}.row-cols-auto>*{flex:0 0 auto;width:auto}.row-cols-1>*{flex:0 0 auto;width:100%}.row-cols-2>*{flex:0 0 auto;width:50%}.row-cols-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-4>*{flex:0 0 auto;width:25%}.row-cols-5>*{flex:0 0 auto;width:20%}.row-cols-6>*{flex:0 0 auto;width:16.6666666667%}.col-auto{flex:0 0 auto;width:auto}.col-1{flex:0 0 auto;width:8.3333333333%}.col-2{flex:0 0 auto;width:16.6666666667%}.col-3{flex:0 0 auto;width:25%}.col-4{flex:0 0 auto;width:33.3333333333%}.col-5{flex:0 0 auto;width:41.6666666667%}.col-6{flex:0 0 auto;width:50%}.col-7{flex:0 0 auto;width:58.3333333333%}.col-8{flex:0 0 auto;width:66.6666666667%}.col-9{flex:0 0 auto;width:75%}.col-10{flex:0 0 auto;width:83.3333333333%}.col-11{flex:0 0 auto;width:91.6666666667%}.col-12{flex:0 0 auto;width:100%}.offset-1{margin-left:8.3333333333%}.offset-2{margin-left:16.6666666667%}.offset-3{margin-left:25%}.offset-4{margin-left:33.3333333333%}.offset-5{margin-left:41.6666666667%}.offset-6{margin-left:50%}.offset-7{margin-left:58.3333333333%}.offset-8{margin-left:66.6666666667%}.offset-9{margin-left:75%}.offset-10{margin-left:83.3333333333%}.offset-11{margin-left:91.6666666667%}.g-0,.gx-0{--bs-gutter-x:0}.g-0,.gy-0{--bs-gutter-y:0}.g-1,.gx-1{--bs-gutter-x:0.25rem}.g-1,.gy-1{--bs-gutter-y:0.25rem}.g-2,.gx-2{--bs-gutter-x:0.5rem}.g-2,.gy-2{--bs-gutter-y:0.5rem}.g-3,.gx-3{--bs-gutter-x:1rem}.g-3,.gy-3{--bs-gutter-y:1rem}.g-4,.gx-4{--bs-gutter-x:1.5rem}.g-4,.gy-4{--bs-gutter-y:1.5rem}.g-5,.gx-5{--bs-gutter-x:3rem}.g-5,.gy-5{--bs-gutter-y:3rem}@media (min-width:576px){.col-sm{flex:1 0 0%}.row-cols-sm-auto>*{flex:0 0 auto;width:auto}.row-cols-sm-1>*{flex:0 0 auto;width:100%}.row-cols-sm-2>*{flex:0 0 auto;width:50%}.row-cols-sm-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-sm-4>*{flex:0 0 auto;width:25%}.row-cols-sm-5>*{flex:0 0 auto;width:20%}.row-cols-sm-6>*{flex:0 0 auto;width:16.6666666667%}.col-sm-auto{flex:0 0 auto;width:auto}.col-sm-1{flex:0 0 auto;width:8.3333333333%}.col-sm-2{flex:0 0 auto;width:16.6666666667%}.col-sm-3{flex:0 0 auto;width:25%}.col-sm-4{flex:0 0 auto;width:33.3333333333%}.col-sm-5{flex:0 0 auto;width:41.6666666667%}.col-sm-6{flex:0 0 auto;width:50%}.col-sm-7{flex:0 0 auto;width:58.3333333333%}.col-sm-8{flex:0 0 auto;width:66.6666666667%}.col-sm-9{flex:0 0 auto;width:75%}.col-sm-10{flex:0 0 auto;width:83.3333333333%}.col-sm-11{flex:0 0 auto;width:91.6666666667%}.col-sm-12{flex:0 0 auto;width:100%}.offset-sm-0{margin-left:0}.offset-sm-1{margin-left:8.3333333333%}.offset-sm-2{margin-left:16.6666666667%}.offset-sm-3{margin-left:25%}.offset-sm-4{margin-left:33.3333333333%}.offset-sm-5{margin-left:41.6666666667%}.offset-sm-6{margin-left:50%}.offset-sm-7{margin-left:58.3333333333%}.offset-sm-8{margin-left:66.6666666667%}.offset-sm-9{margin-left:75%}.offset-sm-10{margin-left:83.3333333333%}.offset-sm-11{margin-left:91.6666666667%}.g-sm-0,.gx-sm-0{--bs-gutter-x:0}.g-sm-0,.gy-sm-0{--bs-gutter-y:0}.g-sm-1,.gx-sm-1{--bs-gutter-x:0.25rem}.g-sm-1,.gy-sm-1{--bs-gutter-y:0.25rem}.g-sm-2,.gx-sm-2{--bs-gutter-x:0.5rem}.g-sm-2,.gy-sm-2{--bs-gutter-y:0.5rem}.g-sm-3,.gx-sm-3{--bs-gutter-x:1rem}.g-sm-3,.gy-sm-3{--bs-gutter-y:1rem}.g-sm-4,.gx-sm-4{--bs-gutter-x:1.5rem}.g-sm-4,.gy-sm-4{--bs-gutter-y:1.5rem}.g-sm-5,.gx-sm-5{--bs-gutter-x:3rem}.g-sm-5,.gy-sm-5{--bs-gutter-y:3rem}}@media (min-width:768px){.col-md{flex:1 0 0%}.row-cols-md-auto>*{flex:0 0 auto;width:auto}.row-cols-md-1>*{flex:0 0 auto;width:100%}.row-cols-md-2>*{flex:0 0 auto;width:50%}.row-cols-md-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-md-4>*{flex:0 0 auto;width:25%}.row-cols-md-5>*{flex:0 0 auto;width:20%}.row-cols-md-6>*{flex:0 0 auto;width:16.6666666667%}.col-md-auto{flex:0 0 auto;width:auto}.col-md-1{flex:0 0 auto;width:8.3333333333%}.col-md-2{flex:0 0 auto;width:16.6666666667%}.col-md-3{flex:0 0 auto;width:25%}.col-md-4{flex:0 0 auto;width:33.3333333333%}.col-md-5{flex:0 0 auto;width:41.6666666667%}.col-md-6{flex:0 0 auto;width:50%}.col-md-7{flex:0 0 auto;width:58.3333333333%}.col-md-8{flex:0 0 auto;width:66.6666666667%}.col-md-9{flex:0 0 auto;width:75%}.col-md-10{flex:0 0 auto;width:83.3333333333%}.col-md-11{flex:0 0 auto;width:91.6666666667%}.col-md-12{flex:0 0 auto;width:100%}.offset-md-0{margin-left:0}.offset-md-1{margin-left:8.3333333333%}.offset-md-2{margin-left:16.6666666667%}.offset-md-3{margin-left:25%}.offset-md-4{margin-left:33.3333333333%}.offset-md-5{margin-left:41.6666666667%}.offset-md-6{margin-left:50%}.offset-md-7{margin-left:58.3333333333%}.offset-md-8{margin-left:66.6666666667%}.offset-md-9{margin-left:75%}.offset-md-10{margin-left:83.3333333333%}.offset-md-11{margin-left:91.6666666667%}.g-md-0,.gx-md-0{--bs-gutter-x:0}.g-md-0,.gy-md-0{--bs-gutter-y:0}.g-md-1,.gx-md-1{--bs-gutter-x:0.25rem}.g-md-1,.gy-md-1{--bs-gutter-y:0.25rem}.g-md-2,.gx-md-2{--bs-gutter-x:0.5rem}.g-md-2,.gy-md-2{--bs-gutter-y:0.5rem}.g-md-3,.gx-md-3{--bs-gutter-x:1rem}.g-md-3,.gy-md-3{--bs-gutter-y:1rem}.g-md-4,.gx-md-4{--bs-gutter-x:1.5rem}.g-md-4,.gy-md-4{--bs-gutter-y:1.5rem}.g-md-5,.gx-md-5{--bs-gutter-x:3rem}.g-md-5,.gy-md-5{--bs-gutter-y:3rem}}@media (min-width:992px){.col-lg{flex:1 0 0%}.row-cols-lg-auto>*{flex:0 0 auto;width:auto}.row-cols-lg-1>*{flex:0 0 auto;width:100%}.row-cols-lg-2>*{flex:0 0 auto;width:50%}.row-cols-lg-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-lg-4>*{flex:0 0 auto;width:25%}.row-cols-lg-5>*{flex:0 0 auto;width:20%}.row-cols-lg-6>*{flex:0 0 auto;width:16.6666666667%}.col-lg-auto{flex:0 0 auto;width:auto}.col-lg-1{flex:0 0 auto;width:8.3333333333%}.col-lg-2{flex:0 0 auto;width:16.6666666667%}.col-lg-3{flex:0 0 auto;width:25%}.col-lg-4{flex:0 0 auto;width:33.3333333333%}.col-lg-5{flex:0 0 auto;width:41.6666666667%}.col-lg-6{flex:0 0 auto;width:50%}.col-lg-7{flex:0 0 auto;width:58.3333333333%}.col-lg-8{flex:0 0 auto;width:66.6666666667%}.col-lg-9{flex:0 0 auto;width:75%}.col-lg-10{flex:0 0 auto;width:83.3333333333%}.col-lg-11{flex:0 0 auto;width:91.6666666667%}.col-lg-12{flex:0 0 auto;width:100%}.offset-lg-0{margin-left:0}.offset-lg-1{margin-left:8.3333333333%}.offset-lg-2{margin-left:16.6666666667%}.offset-lg-3{margin-left:25%}.offset-lg-4{margin-left:33.3333333333%}.offset-lg-5{margin-left:41.6666666667%}.offset-lg-6{margin-left:50%}.offset-lg-7{margin-left:58.3333333333%}.offset-lg-8{margin-left:66.6666666667%}.offset-lg-9{margin-left:75%}.offset-lg-10{margin-left:83.3333333333%}.offset-lg-11{margin-left:91.6666666667%}.g-lg-0,.gx-lg-0{--bs-gutter-x:0}.g-lg-0,.gy-lg-0{--bs-gutter-y:0}.g-lg-1,.gx-lg-1{--bs-gutter-x:0.25rem}.g-lg-1,.gy-lg-1{--bs-gutter-y:0.25rem}.g-lg-2,.gx-lg-2{--bs-gutter-x:0.5rem}.g-lg-2,.gy-lg-2{--bs-gutter-y:0.5rem}.g-lg-3,.gx-lg-3{--bs-gutter-x:1rem}.g-lg-3,.gy-lg-3{--bs-gutter-y:1rem}.g-lg-4,.gx-lg-4{--bs-gutter-x:1.5rem}.g-lg-4,.gy-lg-4{--bs-gutter-y:1.5rem}.g-lg-5,.gx-lg-5{--bs-gutter-x:3rem}.g-lg-5,.gy-lg-5{--bs-gutter-y:3rem}}@media (min-width:1200px){.col-xl{flex:1 0 0%}.row-cols-xl-auto>*{flex:0 0 auto;width:auto}.row-cols-xl-1>*{flex:0 0 auto;width:100%}.row-cols-xl-2>*{flex:0 0 auto;width:50%}.row-cols-xl-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-xl-4>*{flex:0 0 auto;width:25%}.row-cols-xl-5>*{flex:0 0 auto;width:20%}.row-cols-xl-6>*{flex:0 0 auto;width:16.6666666667%}.col-xl-auto{flex:0 0 auto;width:auto}.col-xl-1{flex:0 0 auto;width:8.3333333333%}.col-xl-2{flex:0 0 auto;width:16.6666666667%}.col-xl-3{flex:0 0 auto;width:25%}.col-xl-4{flex:0 0 auto;width:33.3333333333%}.col-xl-5{flex:0 0 auto;width:41.6666666667%}.col-xl-6{flex:0 0 auto;width:50%}.col-xl-7{flex:0 0 auto;width:58.3333333333%}.col-xl-8{flex:0 0 auto;width:66.6666666667%}.col-xl-9{flex:0 0 auto;width:75%}.col-xl-10{flex:0 0 auto;width:83.3333333333%}.col-xl-11{flex:0 0 auto;width:91.6666666667%}.col-xl-12{flex:0 0 auto;width:100%}.offset-xl-0{margin-left:0}.offset-xl-1{margin-left:8.3333333333%}.offset-xl-2{margin-left:16.6666666667%}.offset-xl-3{margin-left:25%}.offset-xl-4{margin-left:33.3333333333%}.offset-xl-5{margin-left:41.6666666667%}.offset-xl-6{margin-left:50%}.offset-xl-7{margin-left:58.3333333333%}.offset-xl-8{margin-left:66.6666666667%}.offset-xl-9{margin-left:75%}.offset-xl-10{margin-left:83.3333333333%}.offset-xl-11{margin-left:91.6666666667%}.g-xl-0,.gx-xl-0{--bs-gutter-x:0}.g-xl-0,.gy-xl-0{--bs-gutter-y:0}.g-xl-1,.gx-xl-1{--bs-gutter-x:0.25rem}.g-xl-1,.gy-xl-1{--bs-gutter-y:0.25rem}.g-xl-2,.gx-xl-2{--bs-gutter-x:0.5rem}.g-xl-2,.gy-xl-2{--bs-gutter-y:0.5rem}.g-xl-3,.gx-xl-3{--bs-gutter-x:1rem}.g-xl-3,.gy-xl-3{--bs-gutter-y:1rem}.g-xl-4,.gx-xl-4{--bs-gutter-x:1.5rem}.g-xl-4,.gy-xl-4{--bs-gutter-y:1.5rem}.g-xl-5,.gx-xl-5{--bs-gutter-x:3rem}.g-xl-5,.gy-xl-5{--bs-gutter-y:3rem}}@media (min-width:1400px){.col-xxl{flex:1 0 0%}.row-cols-xxl-auto>*{flex:0 0 auto;width:auto}.row-cols-xxl-1>*{flex:0 0 auto;width:100%}.row-cols-xxl-2>*{flex:0 0 auto;width:50%}.row-cols-xxl-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-xxl-4>*{flex:0 0 auto;width:25%}.row-cols-xxl-5>*{flex:0 0 auto;width:20%}.row-cols-xxl-6>*{flex:0 0 auto;width:16.6666666667%}.col-xxl-auto{flex:0 0 auto;width:auto}.col-xxl-1{flex:0 0 auto;width:8.3333333333%}.col-xxl-2{flex:0 0 auto;width:16.6666666667%}.col-xxl-3{flex:0 0 auto;width:25%}.col-xxl-4{flex:0 0 auto;width:33.3333333333%}.col-xxl-5{flex:0 0 auto;width:41.6666666667%}.col-xxl-6{flex:0 0 auto;width:50%}.col-xxl-7{flex:0 0 auto;width:58.3333333333%}.col-xxl-8{flex:0 0 auto;width:66.6666666667%}.col-xxl-9{flex:0 0 auto;width:75%}.col-xxl-10{flex:0 0 auto;width:83.3333333333%}.col-xxl-11{flex:0 0 auto;width:91.6666666667%}.col-xxl-12{flex:0 0 auto;width:100%}.offset-xxl-0{margin-left:0}.offset-xxl-1{margin-left:8.3333333333%}.offset-xxl-2{margin-left:16.6666666667%}.offset-xxl-3{margin-left:25%}.offset-xxl-4{margin-left:33.3333333333%}.offset-xxl-5{margin-left:41.6666666667%}.offset-xxl-6{margin-left:50%}.offset-xxl-7{margin-left:58.3333333333%}.offset-xxl-8{margin-left:66.6666666667%}.offset-xxl-9{margin-left:75%}.offset-xxl-10{margin-left:83.3333333333%}.offset-xxl-11{margin-left:91.6666666667%}.g-xxl-0,.gx-xxl-0{--bs-gutter-x:0}.g-xxl-0,.gy-xxl-0{--bs-gutter-y:0}.g-xxl-1,.gx-xxl-1{--bs-gutter-x:0.25rem}.g-xxl-1,.gy-xxl-1{--bs-gutter-y:0.25rem}.g-xxl-2,.gx-xxl-2{--bs-gutter-x:0.5rem}.g-xxl-2,.gy-xxl-2{--bs-gutter-y:0.5rem}.g-xxl-3,.gx-xxl-3{--bs-gutter-x:1rem}.g-xxl-3,.gy-xxl-3{--bs-gutter-y:1rem}.g-xxl-4,.gx-xxl-4{--bs-gutter-x:1.5rem}.g-xxl-4,.gy-xxl-4{--bs-gutter-y:1.5rem}.g-xxl-5,.gx-xxl-5{--bs-gutter-x:3rem}.g-xxl-5,.gy-xxl-5{--bs-gutter-y:3rem}}.table{--bs-table-bg:transparent;--bs-table-striped-color:#212529;--bs-table-striped-bg:rgba(0, 0, 0, 0.05);--bs-table-active-color:#212529;--bs-table-active-bg:rgba(0, 0, 0, 0.1);--bs-table-hover-color:#212529;--bs-table-hover-bg:rgba(0, 0, 0, 0.075);width:100%;margin-bottom:1rem;color:#212529;vertical-align:top;border-color:#dee2e6}.table>:not(caption)>*>*{padding:.5rem .5rem;background-color:var(--bs-table-bg);background-image:linear-gradient(var(--bs-table-accent-bg),var(--bs-table-accent-bg));border-bottom-width:1px}.table>tbody{vertical-align:inherit}.table>thead{vertical-align:bottom}.table>:not(:last-child)>:last-child>*{border-bottom-color:currentColor}.caption-top{caption-side:top}.table-sm>:not(caption)>*>*{padding:.25rem .25rem}.table-bordered>:not(caption)>*{border-width:1px 0}.table-bordered>:not(caption)>*>*{border-width:0 1px}.table-borderless>:not(caption)>*>*{border-bottom-width:0}.table-striped>tbody>tr:nth-of-type(odd){--bs-table-accent-bg:var(--bs-table-striped-bg);color:var(--bs-table-striped-color)}.table-active{--bs-table-accent-bg:var(--bs-table-active-bg);color:var(--bs-table-active-color)}.table-hover>tbody>tr:hover{--bs-table-accent-bg:var(--bs-table-hover-bg);color:var(--bs-table-hover-color)}.table-primary{--bs-table-bg:#cfe2ff;--bs-table-striped-bg:#c5d7f2;--bs-table-striped-color:#000;--bs-table-active-bg:#bacbe6;--bs-table-active-color:#000;--bs-table-hover-bg:#bfd1ec;--bs-table-hover-color:#000;color:#000;border-color:#bacbe6}.table-secondary{--bs-table-bg:#e2e3e5;--bs-table-striped-bg:#d7d8da;--bs-table-striped-color:#000;--bs-table-active-bg:#cbccce;--bs-table-active-color:#000;--bs-table-hover-bg:#d1d2d4;--bs-table-hover-color:#000;color:#000;border-color:#cbccce}.table-success{--bs-table-bg:#d1e7dd;--bs-table-striped-bg:#c7dbd2;--bs-table-striped-color:#000;--bs-table-active-bg:#bcd0c7;--bs-table-active-color:#000;--bs-table-hover-bg:#c1d6cc;--bs-table-hover-color:#000;color:#000;border-color:#bcd0c7}.table-info{--bs-table-bg:#cff4fc;--bs-table-striped-bg:#c5e8ef;--bs-table-striped-color:#000;--bs-table-active-bg:#badce3;--bs-table-active-color:#000;--bs-table-hover-bg:#bfe2e9;--bs-table-hover-color:#000;color:#000;border-color:#badce3}.table-warning{--bs-table-bg:#fff3cd;--bs-table-striped-bg:#f2e7c3;--bs-table-striped-color:#000;--bs-table-active-bg:#e6dbb9;--bs-table-active-color:#000;--bs-table-hover-bg:#ece1be;--bs-table-hover-color:#000;color:#000;border-color:#e6dbb9}.table-danger{--bs-table-bg:#f8d7da;--bs-table-striped-bg:#eccccf;--bs-table-striped-color:#000;--bs-table-active-bg:#dfc2c4;--bs-table-active-color:#000;--bs-table-hover-bg:#e5c7ca;--bs-table-hover-color:#000;color:#000;border-color:#dfc2c4}.table-light{--bs-table-bg:#f8f9fa;--bs-table-striped-bg:#ecedee;--bs-table-striped-color:#000;--bs-table-active-bg:#dfe0e1;--bs-table-active-color:#000;--bs-table-hover-bg:#e5e6e7;--bs-table-hover-color:#000;color:#000;border-color:#dfe0e1}.table-dark{--bs-table-bg:#212529;--bs-table-striped-bg:#2c3034;--bs-table-striped-color:#fff;--bs-table-active-bg:#373b3e;--bs-table-active-color:#fff;--bs-table-hover-bg:#323539;--bs-table-hover-color:#fff;color:#fff;border-color:#373b3e}.table-responsive{overflow-x:auto;-webkit-overflow-scrolling:touch}@media (max-width:575.98px){.table-responsive-sm{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media (max-width:767.98px){.table-responsive-md{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media (max-width:991.98px){.table-responsive-lg{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media (max-width:1199.98px){.table-responsive-xl{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media (max-width:1399.98px){.table-responsive-xxl{overflow-x:auto;-webkit-overflow-scrolling:touch}}.form-label{margin-bottom:.5rem}.col-form-label{padding-top:calc(.375rem + 1px);padding-bottom:calc(.375rem + 1px);margin-bottom:0;font-size:inherit;line-height:1.5}.col-form-label-lg{padding-top:calc(.5rem + 1px);padding-bottom:calc(.5rem + 1px);font-size:1.25rem}.col-form-label-sm{padding-top:calc(.25rem + 1px);padding-bottom:calc(.25rem + 1px);font-size:.875rem}.form-text{margin-top:.25rem;font-size:.875em;color:#6c757d}.form-control{display:block;width:100%;padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#212529;background-color:#fff;background-clip:padding-box;border:1px solid #ced4da;-webkit-appearance:none;-moz-appearance:none;appearance:none;border-radius:.25rem;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.form-control{transition:none}}.form-control[type=file]{overflow:hidden}.form-control[type=file]:not(:disabled):not([readonly]){cursor:pointer}.form-control:focus{color:#212529;background-color:#fff;border-color:#86b7fe;outline:0;box-shadow:0 0 0 .25rem rgba(13,110,253,.25)}.form-control::-webkit-date-and-time-value{height:1.5em}.form-control::-webkit-input-placeholder{color:#6c757d;opacity:1}.form-control::-moz-placeholder{color:#6c757d;opacity:1}.form-control::placeholder{color:#6c757d;opacity:1}.form-control:disabled,.form-control[readonly]{background-color:#e9ecef;opacity:1}.form-control::file-selector-button{padding:.375rem .75rem;margin:-.375rem -.75rem;-webkit-margin-end:.75rem;margin-inline-end:.75rem;color:#212529;background-color:#e9ecef;pointer-events:none;border-color:inherit;border-style:solid;border-width:0;border-inline-end-width:1px;border-radius:0;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.form-control::file-selector-button{transition:none}}.form-control:hover:not(:disabled):not([readonly])::file-selector-button{background-color:#dde0e3}.form-control::-webkit-file-upload-button{padding:.375rem .75rem;margin:-.375rem -.75rem;-webkit-margin-end:.75rem;margin-inline-end:.75rem;color:#212529;background-color:#e9ecef;pointer-events:none;border-color:inherit;border-style:solid;border-width:0;border-inline-end-width:1px;border-radius:0;-webkit-transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.form-control::-webkit-file-upload-button{-webkit-transition:none;transition:none}}.form-control:hover:not(:disabled):not([readonly])::-webkit-file-upload-button{background-color:#dde0e3}.form-control-plaintext{display:block;width:100%;padding:.375rem 0;margin-bottom:0;line-height:1.5;color:#212529;background-color:transparent;border:solid transparent;border-width:1px 0}.form-control-plaintext.form-control-lg,.form-control-plaintext.form-control-sm{padding-right:0;padding-left:0}.form-control-sm{min-height:calc(1.5em + .5rem + 2px);padding:.25rem .5rem;font-size:.875rem;border-radius:.2rem}.form-control-sm::file-selector-button{padding:.25rem .5rem;margin:-.25rem -.5rem;-webkit-margin-end:.5rem;margin-inline-end:.5rem}.form-control-sm::-webkit-file-upload-button{padding:.25rem .5rem;margin:-.25rem -.5rem;-webkit-margin-end:.5rem;margin-inline-end:.5rem}.form-control-lg{min-height:calc(1.5em + 1rem + 2px);padding:.5rem 1rem;font-size:1.25rem;border-radius:.3rem}.form-control-lg::file-selector-button{padding:.5rem 1rem;margin:-.5rem -1rem;-webkit-margin-end:1rem;margin-inline-end:1rem}.form-control-lg::-webkit-file-upload-button{padding:.5rem 1rem;margin:-.5rem -1rem;-webkit-margin-end:1rem;margin-inline-end:1rem}textarea.form-control{min-height:calc(1.5em + .75rem + 2px)}textarea.form-control-sm{min-height:calc(1.5em + .5rem + 2px)}textarea.form-control-lg{min-height:calc(1.5em + 1rem + 2px)}.form-control-color{max-width:3rem;height:auto;padding:.375rem}.form-control-color:not(:disabled):not([readonly]){cursor:pointer}.form-control-color::-moz-color-swatch{height:1.5em;border-radius:.25rem}.form-control-color::-webkit-color-swatch{height:1.5em;border-radius:.25rem}.form-select{display:block;width:100%;padding:.375rem 1.75rem .375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#212529;vertical-align:middle;background-color:#fff;background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:right .75rem center;background-size:16px 12px;border:1px solid #ced4da;border-radius:.25rem;-webkit-appearance:none;-moz-appearance:none;appearance:none}.form-select:focus{border-color:#86b7fe;outline:0;box-shadow:0 0 0 .25rem rgba(13,110,253,.25)}.form-select[multiple],.form-select[size]:not([size="1"]){padding-right:.75rem;background-image:none}.form-select:disabled{color:#6c757d;background-color:#e9ecef}.form-select:-moz-focusring{color:transparent;text-shadow:0 0 0 #212529}.form-select-sm{padding-top:.25rem;padding-bottom:.25rem;padding-left:.5rem;font-size:.875rem}.form-select-lg{padding-top:.5rem;padding-bottom:.5rem;padding-left:1rem;font-size:1.25rem}.form-check{display:block;min-height:1.5rem;padding-left:1.5em;margin-bottom:.125rem}.form-check .form-check-input{float:left;margin-left:-1.5em}.form-check-input{width:1em;height:1em;margin-top:.25em;vertical-align:top;background-color:#fff;background-repeat:no-repeat;background-position:center;background-size:contain;border:1px solid rgba(0,0,0,.25);-webkit-appearance:none;-moz-appearance:none;appearance:none;-webkit-print-color-adjust:exact;color-adjust:exact;transition:background-color .15s ease-in-out,background-position .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.form-check-input{transition:none}}.form-check-input[type=checkbox]{border-radius:.25em}.form-check-input[type=radio]{border-radius:50%}.form-check-input:active{filter:brightness(90%)}.form-check-input:focus{border-color:#86b7fe;outline:0;box-shadow:0 0 0 .25rem rgba(13,110,253,.25)}.form-check-input:checked{background-color:#0d6efd;border-color:#0d6efd}.form-check-input:checked[type=checkbox]{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10l3 3l6-6'/%3e%3c/svg%3e")}.form-check-input:checked[type=radio]{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='2' fill='%23fff'/%3e%3c/svg%3e")}.form-check-input[type=checkbox]:indeterminate{background-color:#0d6efd;border-color:#0d6efd;background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10h8'/%3e%3c/svg%3e")}.form-check-input:disabled{pointer-events:none;filter:none;opacity:.5}.form-check-input:disabled~.form-check-label,.form-check-input[disabled]~.form-check-label{opacity:.5}.form-switch{padding-left:2.5em}.form-switch .form-check-input{width:2em;margin-left:-2.5em;background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='rgba%280, 0, 0, 0.25%29'/%3e%3c/svg%3e");background-position:left center;border-radius:2em}.form-switch .form-check-input:focus{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%2386b7fe'/%3e%3c/svg%3e")}.form-switch .form-check-input:checked{background-position:right center;background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e")}.form-check-inline{display:inline-block;margin-right:1rem}.btn-check{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.btn-check:disabled+.btn,.btn-check[disabled]+.btn{pointer-events:none;filter:none;opacity:.65}.form-range{width:100%;height:1.5rem;padding:0;background-color:transparent;-webkit-appearance:none;-moz-appearance:none;appearance:none}.form-range:focus{outline:0}.form-range:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .25rem rgba(13,110,253,.25)}.form-range:focus::-moz-range-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .25rem rgba(13,110,253,.25)}.form-range::-moz-focus-outer{border:0}.form-range::-webkit-slider-thumb{width:1rem;height:1rem;margin-top:-.25rem;background-color:#0d6efd;border:0;border-radius:1rem;-webkit-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;-webkit-appearance:none;appearance:none}@media (prefers-reduced-motion:reduce){.form-range::-webkit-slider-thumb{-webkit-transition:none;transition:none}}.form-range::-webkit-slider-thumb:active{background-color:#b6d4fe}.form-range::-webkit-slider-runnable-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}.form-range::-moz-range-thumb{width:1rem;height:1rem;background-color:#0d6efd;border:0;border-radius:1rem;-moz-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;-moz-appearance:none;appearance:none}@media (prefers-reduced-motion:reduce){.form-range::-moz-range-thumb{-moz-transition:none;transition:none}}.form-range::-moz-range-thumb:active{background-color:#b6d4fe}.form-range::-moz-range-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}.form-range:disabled{pointer-events:none}.form-range:disabled::-webkit-slider-thumb{background-color:#adb5bd}.form-range:disabled::-moz-range-thumb{background-color:#adb5bd}.form-floating{position:relative}.form-floating>.form-control,.form-floating>.form-select{height:calc(3.5rem + 2px);padding:1rem .75rem}.form-floating>label{position:absolute;top:0;left:0;height:100%;padding:1rem .75rem;pointer-events:none;border:1px solid transparent;transform-origin:0 0;transition:opacity .1s ease-in-out,transform .1s ease-in-out}@media (prefers-reduced-motion:reduce){.form-floating>label{transition:none}}.form-floating>.form-control::-webkit-input-placeholder{color:transparent}.form-floating>.form-control::-moz-placeholder{color:transparent}.form-floating>.form-control::placeholder{color:transparent}.form-floating>.form-control:not(:-moz-placeholder-shown){padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-control:focus,.form-floating>.form-control:not(:placeholder-shown){padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-control:-webkit-autofill{padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-select{padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-control:not(:-moz-placeholder-shown)~label{opacity:.65;transform:scale(.85) translateY(-.5rem) translateX(.15rem)}.form-floating>.form-control:focus~label,.form-floating>.form-control:not(:placeholder-shown)~label,.form-floating>.form-select~label{opacity:.65;transform:scale(.85) translateY(-.5rem) translateX(.15rem)}.form-floating>.form-control:-webkit-autofill~label{opacity:.65;transform:scale(.85) translateY(-.5rem) translateX(.15rem)}.input-group{position:relative;display:flex;flex-wrap:wrap;align-items:stretch;width:100%}.input-group>.form-control,.input-group>.form-select{position:relative;flex:1 1 auto;width:1%;min-width:0}.input-group>.form-control:focus,.input-group>.form-select:focus{z-index:3}.input-group .btn{position:relative;z-index:2}.input-group .btn:focus{z-index:3}.input-group-text{display:flex;align-items:center;padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#212529;text-align:center;white-space:nowrap;background-color:#e9ecef;border:1px solid #ced4da;border-radius:.25rem}.input-group-lg>.btn,.input-group-lg>.form-control,.input-group-lg>.form-select,.input-group-lg>.input-group-text{padding:.5rem 1rem;font-size:1.25rem;border-radius:.3rem}.input-group-sm>.btn,.input-group-sm>.form-control,.input-group-sm>.form-select,.input-group-sm>.input-group-text{padding:.25rem .5rem;font-size:.875rem;border-radius:.2rem}.input-group-lg>.form-select,.input-group-sm>.form-select{padding-right:1.75rem}.input-group:not(.has-validation)>.dropdown-toggle:nth-last-child(n+3),.input-group:not(.has-validation)>:not(:last-child):not(.dropdown-toggle):not(.dropdown-menu){border-top-right-radius:0;border-bottom-right-radius:0}.input-group.has-validation>.dropdown-toggle:nth-last-child(n+4),.input-group.has-validation>:nth-last-child(n+3):not(.dropdown-toggle):not(.dropdown-menu){border-top-right-radius:0;border-bottom-right-radius:0}.input-group>:not(:first-child):not(.dropdown-menu):not(.valid-tooltip):not(.valid-feedback):not(.invalid-tooltip):not(.invalid-feedback){margin-left:-1px;border-top-left-radius:0;border-bottom-left-radius:0}.valid-feedback{display:none;width:100%;margin-top:.25rem;font-size:.875em;color:#198754}.valid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;color:#fff;background-color:rgba(25,135,84,.9);border-radius:.25rem}.is-valid~.valid-feedback,.is-valid~.valid-tooltip,.was-validated :valid~.valid-feedback,.was-validated :valid~.valid-tooltip{display:block}.form-control.is-valid,.was-validated .form-control:valid{border-color:#198754;padding-right:calc(1.5em + .75rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23198754' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:right calc(.375em + .1875rem) center;background-size:calc(.75em + .375rem) calc(.75em + .375rem)}.form-control.is-valid:focus,.was-validated .form-control:valid:focus{border-color:#198754;box-shadow:0 0 0 .25rem rgba(25,135,84,.25)}.was-validated textarea.form-control:valid,textarea.form-control.is-valid{padding-right:calc(1.5em + .75rem);background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem)}.form-select.is-valid,.was-validated .form-select:valid{border-color:#198754;padding-right:calc(.75em + 2.3125rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e"),url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23198754' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e");background-position:right .75rem center,center right 1.75rem;background-size:16px 12px,calc(.75em + .375rem) calc(.75em + .375rem)}.form-select.is-valid:focus,.was-validated .form-select:valid:focus{border-color:#198754;box-shadow:0 0 0 .25rem rgba(25,135,84,.25)}.form-check-input.is-valid,.was-validated .form-check-input:valid{border-color:#198754}.form-check-input.is-valid:checked,.was-validated .form-check-input:valid:checked{background-color:#198754}.form-check-input.is-valid:focus,.was-validated .form-check-input:valid:focus{box-shadow:0 0 0 .25rem rgba(25,135,84,.25)}.form-check-input.is-valid~.form-check-label,.was-validated .form-check-input:valid~.form-check-label{color:#198754}.form-check-inline .form-check-input~.valid-feedback{margin-left:.5em}.invalid-feedback{display:none;width:100%;margin-top:.25rem;font-size:.875em;color:#dc3545}.invalid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;color:#fff;background-color:rgba(220,53,69,.9);border-radius:.25rem}.is-invalid~.invalid-feedback,.is-invalid~.invalid-tooltip,.was-validated :invalid~.invalid-feedback,.was-validated :invalid~.invalid-tooltip{display:block}.form-control.is-invalid,.was-validated .form-control:invalid{border-color:#dc3545;padding-right:calc(1.5em + .75rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23dc3545'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:right calc(.375em + .1875rem) center;background-size:calc(.75em + .375rem) calc(.75em + .375rem)}.form-control.is-invalid:focus,.was-validated .form-control:invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .25rem rgba(220,53,69,.25)}.was-validated textarea.form-control:invalid,textarea.form-control.is-invalid{padding-right:calc(1.5em + .75rem);background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem)}.form-select.is-invalid,.was-validated .form-select:invalid{border-color:#dc3545;padding-right:calc(.75em + 2.3125rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e"),url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23dc3545'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e");background-position:right .75rem center,center right 1.75rem;background-size:16px 12px,calc(.75em + .375rem) calc(.75em + .375rem)}.form-select.is-invalid:focus,.was-validated .form-select:invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .25rem rgba(220,53,69,.25)}.form-check-input.is-invalid,.was-validated .form-check-input:invalid{border-color:#dc3545}.form-check-input.is-invalid:checked,.was-validated .form-check-input:invalid:checked{background-color:#dc3545}.form-check-input.is-invalid:focus,.was-validated .form-check-input:invalid:focus{box-shadow:0 0 0 .25rem rgba(220,53,69,.25)}.form-check-input.is-invalid~.form-check-label,.was-validated .form-check-input:invalid~.form-check-label{color:#dc3545}.form-check-inline .form-check-input~.invalid-feedback{margin-left:.5em}.btn{display:inline-block;font-weight:400;line-height:1.5;color:#212529;text-align:center;text-decoration:none;vertical-align:middle;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;user-select:none;background-color:transparent;border:1px solid transparent;padding:.375rem .75rem;font-size:1rem;border-radius:.25rem;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.btn{transition:none}}.btn:hover{color:#212529}.btn-check:focus+.btn,.btn:focus{outline:0;box-shadow:0 0 0 .25rem rgba(13,110,253,.25)}.btn.disabled,.btn:disabled,fieldset:disabled .btn{pointer-events:none;opacity:.65}.btn-primary{color:#fff;background-color:#0d6efd;border-color:#0d6efd}.btn-primary:hover{color:#fff;background-color:#0b5ed7;border-color:#0a58ca}.btn-check:focus+.btn-primary,.btn-primary:focus{color:#fff;background-color:#0b5ed7;border-color:#0a58ca;box-shadow:0 0 0 .25rem rgba(49,132,253,.5)}.btn-check:active+.btn-primary,.btn-check:checked+.btn-primary,.btn-primary.active,.btn-primary:active,.show>.btn-primary.dropdown-toggle{color:#fff;background-color:#0a58ca;border-color:#0a53be}.btn-check:active+.btn-primary:focus,.btn-check:checked+.btn-primary:focus,.btn-primary.active:focus,.btn-primary:active:focus,.show>.btn-primary.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(49,132,253,.5)}.btn-primary.disabled,.btn-primary:disabled{color:#fff;background-color:#0d6efd;border-color:#0d6efd}.btn-secondary{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-secondary:hover{color:#fff;background-color:#5c636a;border-color:#565e64}.btn-check:focus+.btn-secondary,.btn-secondary:focus{color:#fff;background-color:#5c636a;border-color:#565e64;box-shadow:0 0 0 .25rem rgba(130,138,145,.5)}.btn-check:active+.btn-secondary,.btn-check:checked+.btn-secondary,.btn-secondary.active,.btn-secondary:active,.show>.btn-secondary.dropdown-toggle{color:#fff;background-color:#565e64;border-color:#51585e}.btn-check:active+.btn-secondary:focus,.btn-check:checked+.btn-secondary:focus,.btn-secondary.active:focus,.btn-secondary:active:focus,.show>.btn-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(130,138,145,.5)}.btn-secondary.disabled,.btn-secondary:disabled{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-success{color:#fff;background-color:#198754;border-color:#198754}.btn-success:hover{color:#fff;background-color:#157347;border-color:#146c43}.btn-check:focus+.btn-success,.btn-success:focus{color:#fff;background-color:#157347;border-color:#146c43;box-shadow:0 0 0 .25rem rgba(60,153,110,.5)}.btn-check:active+.btn-success,.btn-check:checked+.btn-success,.btn-success.active,.btn-success:active,.show>.btn-success.dropdown-toggle{color:#fff;background-color:#146c43;border-color:#13653f}.btn-check:active+.btn-success:focus,.btn-check:checked+.btn-success:focus,.btn-success.active:focus,.btn-success:active:focus,.show>.btn-success.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(60,153,110,.5)}.btn-success.disabled,.btn-success:disabled{color:#fff;background-color:#198754;border-color:#198754}.btn-info{color:#000;background-color:#0dcaf0;border-color:#0dcaf0}.btn-info:hover{color:#000;background-color:#31d2f2;border-color:#25cff2}.btn-check:focus+.btn-info,.btn-info:focus{color:#000;background-color:#31d2f2;border-color:#25cff2;box-shadow:0 0 0 .25rem rgba(11,172,204,.5)}.btn-check:active+.btn-info,.btn-check:checked+.btn-info,.btn-info.active,.btn-info:active,.show>.btn-info.dropdown-toggle{color:#000;background-color:#3dd5f3;border-color:#25cff2}.btn-check:active+.btn-info:focus,.btn-check:checked+.btn-info:focus,.btn-info.active:focus,.btn-info:active:focus,.show>.btn-info.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(11,172,204,.5)}.btn-info.disabled,.btn-info:disabled{color:#000;background-color:#0dcaf0;border-color:#0dcaf0}.btn-warning{color:#000;background-color:#ffc107;border-color:#ffc107}.btn-warning:hover{color:#000;background-color:#ffca2c;border-color:#ffc720}.btn-check:focus+.btn-warning,.btn-warning:focus{color:#000;background-color:#ffca2c;border-color:#ffc720;box-shadow:0 0 0 .25rem rgba(217,164,6,.5)}.btn-check:active+.btn-warning,.btn-check:checked+.btn-warning,.btn-warning.active,.btn-warning:active,.show>.btn-warning.dropdown-toggle{color:#000;background-color:#ffcd39;border-color:#ffc720}.btn-check:active+.btn-warning:focus,.btn-check:checked+.btn-warning:focus,.btn-warning.active:focus,.btn-warning:active:focus,.show>.btn-warning.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(217,164,6,.5)}.btn-warning.disabled,.btn-warning:disabled{color:#000;background-color:#ffc107;border-color:#ffc107}.btn-danger{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-danger:hover{color:#fff;background-color:#bb2d3b;border-color:#b02a37}.btn-check:focus+.btn-danger,.btn-danger:focus{color:#fff;background-color:#bb2d3b;border-color:#b02a37;box-shadow:0 0 0 .25rem rgba(225,83,97,.5)}.btn-check:active+.btn-danger,.btn-check:checked+.btn-danger,.btn-danger.active,.btn-danger:active,.show>.btn-danger.dropdown-toggle{color:#fff;background-color:#b02a37;border-color:#a52834}.btn-check:active+.btn-danger:focus,.btn-check:checked+.btn-danger:focus,.btn-danger.active:focus,.btn-danger:active:focus,.show>.btn-danger.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(225,83,97,.5)}.btn-danger.disabled,.btn-danger:disabled{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-light{color:#000;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:hover{color:#000;background-color:#f9fafb;border-color:#f9fafb}.btn-check:focus+.btn-light,.btn-light:focus{color:#000;background-color:#f9fafb;border-color:#f9fafb;box-shadow:0 0 0 .25rem rgba(211,212,213,.5)}.btn-check:active+.btn-light,.btn-check:checked+.btn-light,.btn-light.active,.btn-light:active,.show>.btn-light.dropdown-toggle{color:#000;background-color:#f9fafb;border-color:#f9fafb}.btn-check:active+.btn-light:focus,.btn-check:checked+.btn-light:focus,.btn-light.active:focus,.btn-light:active:focus,.show>.btn-light.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(211,212,213,.5)}.btn-light.disabled,.btn-light:disabled{color:#000;background-color:#f8f9fa;border-color:#f8f9fa}.btn-dark{color:#fff;background-color:#212529;border-color:#212529}.btn-dark:hover{color:#fff;background-color:#1c1f23;border-color:#1a1e21}.btn-check:focus+.btn-dark,.btn-dark:focus{color:#fff;background-color:#1c1f23;border-color:#1a1e21;box-shadow:0 0 0 .25rem rgba(66,70,73,.5)}.btn-check:active+.btn-dark,.btn-check:checked+.btn-dark,.btn-dark.active,.btn-dark:active,.show>.btn-dark.dropdown-toggle{color:#fff;background-color:#1a1e21;border-color:#191c1f}.btn-check:active+.btn-dark:focus,.btn-check:checked+.btn-dark:focus,.btn-dark.active:focus,.btn-dark:active:focus,.show>.btn-dark.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(66,70,73,.5)}.btn-dark.disabled,.btn-dark:disabled{color:#fff;background-color:#212529;border-color:#212529}.btn-outline-primary{color:#0d6efd;border-color:#0d6efd}.btn-outline-primary:hover{color:#fff;background-color:#0d6efd;border-color:#0d6efd}.btn-check:focus+.btn-outline-primary,.btn-outline-primary:focus{box-shadow:0 0 0 .25rem rgba(13,110,253,.5)}.btn-check:active+.btn-outline-primary,.btn-check:checked+.btn-outline-primary,.btn-outline-primary.active,.btn-outline-primary.dropdown-toggle.show,.btn-outline-primary:active{color:#fff;background-color:#0d6efd;border-color:#0d6efd}.btn-check:active+.btn-outline-primary:focus,.btn-check:checked+.btn-outline-primary:focus,.btn-outline-primary.active:focus,.btn-outline-primary.dropdown-toggle.show:focus,.btn-outline-primary:active:focus{box-shadow:0 0 0 .25rem rgba(13,110,253,.5)}.btn-outline-primary.disabled,.btn-outline-primary:disabled{color:#0d6efd;background-color:transparent}.btn-outline-secondary{color:#6c757d;border-color:#6c757d}.btn-outline-secondary:hover{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-check:focus+.btn-outline-secondary,.btn-outline-secondary:focus{box-shadow:0 0 0 .25rem rgba(108,117,125,.5)}.btn-check:active+.btn-outline-secondary,.btn-check:checked+.btn-outline-secondary,.btn-outline-secondary.active,.btn-outline-secondary.dropdown-toggle.show,.btn-outline-secondary:active{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-check:active+.btn-outline-secondary:focus,.btn-check:checked+.btn-outline-secondary:focus,.btn-outline-secondary.active:focus,.btn-outline-secondary.dropdown-toggle.show:focus,.btn-outline-secondary:active:focus{box-shadow:0 0 0 .25rem rgba(108,117,125,.5)}.btn-outline-secondary.disabled,.btn-outline-secondary:disabled{color:#6c757d;background-color:transparent}.btn-outline-success{color:#198754;border-color:#198754}.btn-outline-success:hover{color:#fff;background-color:#198754;border-color:#198754}.btn-check:focus+.btn-outline-success,.btn-outline-success:focus{box-shadow:0 0 0 .25rem rgba(25,135,84,.5)}.btn-check:active+.btn-outline-success,.btn-check:checked+.btn-outline-success,.btn-outline-success.active,.btn-outline-success.dropdown-toggle.show,.btn-outline-success:active{color:#fff;background-color:#198754;border-color:#198754}.btn-check:active+.btn-outline-success:focus,.btn-check:checked+.btn-outline-success:focus,.btn-outline-success.active:focus,.btn-outline-success.dropdown-toggle.show:focus,.btn-outline-success:active:focus{box-shadow:0 0 0 .25rem rgba(25,135,84,.5)}.btn-outline-success.disabled,.btn-outline-success:disabled{color:#198754;background-color:transparent}.btn-outline-info{color:#0dcaf0;border-color:#0dcaf0}.btn-outline-info:hover{color:#000;background-color:#0dcaf0;border-color:#0dcaf0}.btn-check:focus+.btn-outline-info,.btn-outline-info:focus{box-shadow:0 0 0 .25rem rgba(13,202,240,.5)}.btn-check:active+.btn-outline-info,.btn-check:checked+.btn-outline-info,.btn-outline-info.active,.btn-outline-info.dropdown-toggle.show,.btn-outline-info:active{color:#000;background-color:#0dcaf0;border-color:#0dcaf0}.btn-check:active+.btn-outline-info:focus,.btn-check:checked+.btn-outline-info:focus,.btn-outline-info.active:focus,.btn-outline-info.dropdown-toggle.show:focus,.btn-outline-info:active:focus{box-shadow:0 0 0 .25rem rgba(13,202,240,.5)}.btn-outline-info.disabled,.btn-outline-info:disabled{color:#0dcaf0;background-color:transparent}.btn-outline-warning{color:#ffc107;border-color:#ffc107}.btn-outline-warning:hover{color:#000;background-color:#ffc107;border-color:#ffc107}.btn-check:focus+.btn-outline-warning,.btn-outline-warning:focus{box-shadow:0 0 0 .25rem rgba(255,193,7,.5)}.btn-check:active+.btn-outline-warning,.btn-check:checked+.btn-outline-warning,.btn-outline-warning.active,.btn-outline-warning.dropdown-toggle.show,.btn-outline-warning:active{color:#000;background-color:#ffc107;border-color:#ffc107}.btn-check:active+.btn-outline-warning:focus,.btn-check:checked+.btn-outline-warning:focus,.btn-outline-warning.active:focus,.btn-outline-warning.dropdown-toggle.show:focus,.btn-outline-warning:active:focus{box-shadow:0 0 0 .25rem rgba(255,193,7,.5)}.btn-outline-warning.disabled,.btn-outline-warning:disabled{color:#ffc107;background-color:transparent}.btn-outline-danger{color:#dc3545;border-color:#dc3545}.btn-outline-danger:hover{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-check:focus+.btn-outline-danger,.btn-outline-danger:focus{box-shadow:0 0 0 .25rem rgba(220,53,69,.5)}.btn-check:active+.btn-outline-danger,.btn-check:checked+.btn-outline-danger,.btn-outline-danger.active,.btn-outline-danger.dropdown-toggle.show,.btn-outline-danger:active{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-check:active+.btn-outline-danger:focus,.btn-check:checked+.btn-outline-danger:focus,.btn-outline-danger.active:focus,.btn-outline-danger.dropdown-toggle.show:focus,.btn-outline-danger:active:focus{box-shadow:0 0 0 .25rem rgba(220,53,69,.5)}.btn-outline-danger.disabled,.btn-outline-danger:disabled{color:#dc3545;background-color:transparent}.btn-outline-light{color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light:hover{color:#000;background-color:#f8f9fa;border-color:#f8f9fa}.btn-check:focus+.btn-outline-light,.btn-outline-light:focus{box-shadow:0 0 0 .25rem rgba(248,249,250,.5)}.btn-check:active+.btn-outline-light,.btn-check:checked+.btn-outline-light,.btn-outline-light.active,.btn-outline-light.dropdown-toggle.show,.btn-outline-light:active{color:#000;background-color:#f8f9fa;border-color:#f8f9fa}.btn-check:active+.btn-outline-light:focus,.btn-check:checked+.btn-outline-light:focus,.btn-outline-light.active:focus,.btn-outline-light.dropdown-toggle.show:focus,.btn-outline-light:active:focus{box-shadow:0 0 0 .25rem rgba(248,249,250,.5)}.btn-outline-light.disabled,.btn-outline-light:disabled{color:#f8f9fa;background-color:transparent}.btn-outline-dark{color:#212529;border-color:#212529}.btn-outline-dark:hover{color:#fff;background-color:#212529;border-color:#212529}.btn-check:focus+.btn-outline-dark,.btn-outline-dark:focus{box-shadow:0 0 0 .25rem rgba(33,37,41,.5)}.btn-check:active+.btn-outline-dark,.btn-check:checked+.btn-outline-dark,.btn-outline-dark.active,.btn-outline-dark.dropdown-toggle.show,.btn-outline-dark:active{color:#fff;background-color:#212529;border-color:#212529}.btn-check:active+.btn-outline-dark:focus,.btn-check:checked+.btn-outline-dark:focus,.btn-outline-dark.active:focus,.btn-outline-dark.dropdown-toggle.show:focus,.btn-outline-dark:active:focus{box-shadow:0 0 0 .25rem rgba(33,37,41,.5)}.btn-outline-dark.disabled,.btn-outline-dark:disabled{color:#212529;background-color:transparent}.btn-link{font-weight:400;color:#0d6efd;text-decoration:underline}.btn-link:hover{color:#0a58ca}.btn-link.disabled,.btn-link:disabled{color:#6c757d}.btn-group-lg>.btn,.btn-lg{padding:.5rem 1rem;font-size:1.25rem;border-radius:.3rem}.btn-group-sm>.btn,.btn-sm{padding:.25rem .5rem;font-size:.875rem;border-radius:.2rem}.fade{transition:opacity .15s linear}@media (prefers-reduced-motion:reduce){.fade{transition:none}}.fade:not(.show){opacity:0}.collapse:not(.show){display:none}.collapsing{height:0;overflow:hidden;transition:height .35s ease}@media (prefers-reduced-motion:reduce){.collapsing{transition:none}}.dropdown,.dropend,.dropstart,.dropup{position:relative}.dropdown-toggle{white-space:nowrap}.dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid;border-right:.3em solid transparent;border-bottom:0;border-left:.3em solid transparent}.dropdown-toggle:empty::after{margin-left:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;min-width:10rem;padding:.5rem 0;margin:.125rem 0 0;font-size:1rem;color:#212529;text-align:left;list-style:none;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.15);border-radius:.25rem}.dropdown-menu[style]{right:auto!important}.dropdown-menu-start{--bs-position:start;right:auto;left:0}.dropdown-menu-end{--bs-position:end;right:0;left:auto}@media (min-width:576px){.dropdown-menu-sm-start{--bs-position:start;right:auto;left:0}.dropdown-menu-sm-end{--bs-position:end;right:0;left:auto}}@media (min-width:768px){.dropdown-menu-md-start{--bs-position:start;right:auto;left:0}.dropdown-menu-md-end{--bs-position:end;right:0;left:auto}}@media (min-width:992px){.dropdown-menu-lg-start{--bs-position:start;right:auto;left:0}.dropdown-menu-lg-end{--bs-position:end;right:0;left:auto}}@media (min-width:1200px){.dropdown-menu-xl-start{--bs-position:start;right:auto;left:0}.dropdown-menu-xl-end{--bs-position:end;right:0;left:auto}}@media (min-width:1400px){.dropdown-menu-xxl-start{--bs-position:start;right:auto;left:0}.dropdown-menu-xxl-end{--bs-position:end;right:0;left:auto}}.dropup .dropdown-menu{top:auto;bottom:100%;margin-top:0;margin-bottom:.125rem}.dropup .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:0;border-right:.3em solid transparent;border-bottom:.3em solid;border-left:.3em solid transparent}.dropup .dropdown-toggle:empty::after{margin-left:0}.dropend .dropdown-menu{top:0;right:auto;left:100%;margin-top:0;margin-left:.125rem}.dropend .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:0;border-bottom:.3em solid transparent;border-left:.3em solid}.dropend .dropdown-toggle:empty::after{margin-left:0}.dropend .dropdown-toggle::after{vertical-align:0}.dropstart .dropdown-menu{top:0;right:100%;left:auto;margin-top:0;margin-right:.125rem}.dropstart .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:""}.dropstart .dropdown-toggle::after{display:none}.dropstart .dropdown-toggle::before{display:inline-block;margin-right:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:.3em solid;border-bottom:.3em solid transparent}.dropstart .dropdown-toggle:empty::after{margin-left:0}.dropstart .dropdown-toggle::before{vertical-align:0}.dropdown-divider{height:0;margin:.5rem 0;overflow:hidden;border-top:1px solid rgba(0,0,0,.15)}.dropdown-item{display:block;width:100%;padding:.25rem 1rem;clear:both;font-weight:400;color:#212529;text-align:inherit;text-decoration:none;white-space:nowrap;background-color:transparent;border:0}.dropdown-item:focus,.dropdown-item:hover{color:#1e2125;background-color:#f8f9fa}.dropdown-item.active,.dropdown-item:active{color:#fff;text-decoration:none;background-color:#0d6efd}.dropdown-item.disabled,.dropdown-item:disabled{color:#6c757d;pointer-events:none;background-color:transparent}.dropdown-menu.show{display:block}.dropdown-header{display:block;padding:.5rem 1rem;margin-bottom:0;font-size:.875rem;color:#6c757d;white-space:nowrap}.dropdown-item-text{display:block;padding:.25rem 1rem;color:#212529}.dropdown-menu-dark{color:#dee2e6;background-color:#343a40;border-color:rgba(0,0,0,.15)}.dropdown-menu-dark .dropdown-item{color:#dee2e6}.dropdown-menu-dark .dropdown-item:focus,.dropdown-menu-dark .dropdown-item:hover{color:#fff;background-color:rgba(255,255,255,.15)}.dropdown-menu-dark .dropdown-item.active,.dropdown-menu-dark .dropdown-item:active{color:#fff;background-color:#0d6efd}.dropdown-menu-dark .dropdown-item.disabled,.dropdown-menu-dark .dropdown-item:disabled{color:#adb5bd}.dropdown-menu-dark .dropdown-divider{border-color:rgba(0,0,0,.15)}.dropdown-menu-dark .dropdown-item-text{color:#dee2e6}.dropdown-menu-dark .dropdown-header{color:#adb5bd}.btn-group,.btn-group-vertical{position:relative;display:inline-flex;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;flex:1 1 auto}.btn-group-vertical>.btn-check:checked+.btn,.btn-group-vertical>.btn-check:focus+.btn,.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:hover,.btn-group>.btn-check:checked+.btn,.btn-group>.btn-check:focus+.btn,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus,.btn-group>.btn:hover{z-index:1}.btn-toolbar{display:flex;flex-wrap:wrap;justify-content:flex-start}.btn-toolbar .input-group{width:auto}.btn-group>.btn-group:not(:first-child),.btn-group>.btn:not(:first-child){margin-left:-1px}.btn-group>.btn-group:not(:last-child)>.btn,.btn-group>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:not(:first-child)>.btn,.btn-group>.btn:nth-child(n+3),.btn-group>:not(.btn-check)+.btn{border-top-left-radius:0;border-bottom-left-radius:0}.dropdown-toggle-split{padding-right:.5625rem;padding-left:.5625rem}.dropdown-toggle-split::after,.dropend .dropdown-toggle-split::after,.dropup .dropdown-toggle-split::after{margin-left:0}.dropstart .dropdown-toggle-split::before{margin-right:0}.btn-group-sm>.btn+.dropdown-toggle-split,.btn-sm+.dropdown-toggle-split{padding-right:.375rem;padding-left:.375rem}.btn-group-lg>.btn+.dropdown-toggle-split,.btn-lg+.dropdown-toggle-split{padding-right:.75rem;padding-left:.75rem}.btn-group-vertical{flex-direction:column;align-items:flex-start;justify-content:center}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group{width:100%}.btn-group-vertical>.btn-group:not(:first-child),.btn-group-vertical>.btn:not(:first-child){margin-top:-1px}.btn-group-vertical>.btn-group:not(:last-child)>.btn,.btn-group-vertical>.btn:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:not(:first-child)>.btn,.btn-group-vertical>.btn~.btn{border-top-left-radius:0;border-top-right-radius:0}.nav{display:flex;flex-wrap:wrap;padding-left:0;margin-bottom:0;list-style:none}.nav-link{display:block;padding:.5rem 1rem;text-decoration:none;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out}@media (prefers-reduced-motion:reduce){.nav-link{transition:none}}.nav-link.disabled{color:#6c757d;pointer-events:none;cursor:default}.nav-tabs{border-bottom:1px solid #dee2e6}.nav-tabs .nav-link{margin-bottom:-1px;border:1px solid transparent;border-top-left-radius:.25rem;border-top-right-radius:.25rem}.nav-tabs .nav-link:focus,.nav-tabs .nav-link:hover{border-color:#e9ecef #e9ecef #dee2e6}.nav-tabs .nav-link.disabled{color:#6c757d;background-color:transparent;border-color:transparent}.nav-tabs .nav-item.show .nav-link,.nav-tabs .nav-link.active{color:#495057;background-color:#fff;border-color:#dee2e6 #dee2e6 #fff}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.nav-pills .nav-link{border-radius:.25rem}.nav-pills .nav-link.active,.nav-pills .show>.nav-link{color:#fff;background-color:#0d6efd}.nav-fill .nav-item,.nav-fill>.nav-link{flex:1 1 auto;text-align:center}.nav-justified .nav-item,.nav-justified>.nav-link{flex-basis:0;flex-grow:1;text-align:center}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.navbar{position:relative;display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;padding-top:.5rem;padding-bottom:.5rem}.navbar>.container,.navbar>.container-fluid,.navbar>.container-lg,.navbar>.container-md,.navbar>.container-sm,.navbar>.container-xl,.navbar>.container-xxl{display:flex;flex-wrap:inherit;align-items:center;justify-content:space-between}.navbar-brand{padding-top:.3125rem;padding-bottom:.3125rem;margin-right:1rem;font-size:1.25rem;text-decoration:none;white-space:nowrap}.navbar-nav{display:flex;flex-direction:column;padding-left:0;margin-bottom:0;list-style:none}.navbar-nav .nav-link{padding-right:0;padding-left:0}.navbar-nav .dropdown-menu{position:static}.navbar-text{padding-top:.5rem;padding-bottom:.5rem}.navbar-collapse{align-items:center;width:100%}.navbar-toggler{padding:.25rem .75rem;font-size:1.25rem;line-height:1;background-color:transparent;border:1px solid transparent;border-radius:.25rem;transition:box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.navbar-toggler{transition:none}}.navbar-toggler:hover{text-decoration:none}.navbar-toggler:focus{text-decoration:none;outline:0;box-shadow:0 0 0 .25rem}.navbar-toggler-icon{display:inline-block;width:1.5em;height:1.5em;vertical-align:middle;background-repeat:no-repeat;background-position:center;background-size:100%}@media (min-width:576px){.navbar-expand-sm{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-sm .navbar-nav{flex-direction:row}.navbar-expand-sm .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-sm .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-sm .navbar-collapse{display:flex!important}.navbar-expand-sm .navbar-toggler{display:none}}@media (min-width:768px){.navbar-expand-md{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-md .navbar-nav{flex-direction:row}.navbar-expand-md .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-md .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-md .navbar-collapse{display:flex!important}.navbar-expand-md .navbar-toggler{display:none}}@media (min-width:992px){.navbar-expand-lg{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-lg .navbar-nav{flex-direction:row}.navbar-expand-lg .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-lg .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-lg .navbar-collapse{display:flex!important}.navbar-expand-lg .navbar-toggler{display:none}}@media (min-width:1200px){.navbar-expand-xl{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-xl .navbar-nav{flex-direction:row}.navbar-expand-xl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xl .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-xl .navbar-collapse{display:flex!important}.navbar-expand-xl .navbar-toggler{display:none}}@media (min-width:1400px){.navbar-expand-xxl{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-xxl .navbar-nav{flex-direction:row}.navbar-expand-xxl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xxl .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-xxl .navbar-collapse{display:flex!important}.navbar-expand-xxl .navbar-toggler{display:none}}.navbar-expand{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand .navbar-nav{flex-direction:row}.navbar-expand .navbar-nav .dropdown-menu{position:absolute}.navbar-expand .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand .navbar-collapse{display:flex!important}.navbar-expand .navbar-toggler{display:none}.navbar-light .navbar-brand{color:rgba(0,0,0,.9)}.navbar-light .navbar-brand:focus,.navbar-light .navbar-brand:hover{color:rgba(0,0,0,.9)}.navbar-light .navbar-nav .nav-link{color:rgba(0,0,0,.55)}.navbar-light .navbar-nav .nav-link:focus,.navbar-light .navbar-nav .nav-link:hover{color:rgba(0,0,0,.7)}.navbar-light .navbar-nav .nav-link.disabled{color:rgba(0,0,0,.3)}.navbar-light .navbar-nav .nav-link.active,.navbar-light .navbar-nav .show>.nav-link{color:rgba(0,0,0,.9)}.navbar-light .navbar-toggler{color:rgba(0,0,0,.55);border-color:rgba(0,0,0,.1)}.navbar-light .navbar-toggler-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%280, 0, 0, 0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}.navbar-light .navbar-text{color:rgba(0,0,0,.55)}.navbar-light .navbar-text a,.navbar-light .navbar-text a:focus,.navbar-light .navbar-text a:hover{color:rgba(0,0,0,.9)}.navbar-dark .navbar-brand{color:#fff}.navbar-dark .navbar-brand:focus,.navbar-dark .navbar-brand:hover{color:#fff}.navbar-dark .navbar-nav .nav-link{color:rgba(255,255,255,.55)}.navbar-dark .navbar-nav .nav-link:focus,.navbar-dark .navbar-nav .nav-link:hover{color:rgba(255,255,255,.75)}.navbar-dark .navbar-nav .nav-link.disabled{color:rgba(255,255,255,.25)}.navbar-dark .navbar-nav .nav-link.active,.navbar-dark .navbar-nav .show>.nav-link{color:#fff}.navbar-dark .navbar-toggler{color:rgba(255,255,255,.55);border-color:rgba(255,255,255,.1)}.navbar-dark .navbar-toggler-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255, 255, 255, 0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}.navbar-dark .navbar-text{color:rgba(255,255,255,.55)}.navbar-dark .navbar-text a,.navbar-dark .navbar-text a:focus,.navbar-dark .navbar-text a:hover{color:#fff}.card{position:relative;display:flex;flex-direction:column;min-width:0;word-wrap:break-word;background-color:#fff;background-clip:border-box;border:1px solid rgba(0,0,0,.125);border-radius:.25rem}.card>hr{margin-right:0;margin-left:0}.card>.list-group{border-top:inherit;border-bottom:inherit}.card>.list-group:first-child{border-top-width:0;border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.card>.list-group:last-child{border-bottom-width:0;border-bottom-right-radius:calc(.25rem - 1px);border-bottom-left-radius:calc(.25rem - 1px)}.card>.card-header+.list-group,.card>.list-group+.card-footer{border-top:0}.card-body{flex:1 1 auto;padding:1rem 1rem}.card-title{margin-bottom:.5rem}.card-subtitle{margin-top:-.25rem;margin-bottom:0}.card-text:last-child{margin-bottom:0}.card-link:hover{text-decoration:none}.card-link+.card-link{margin-left:1rem}.card-header{padding:.5rem 1rem;margin-bottom:0;background-color:rgba(0,0,0,.03);border-bottom:1px solid rgba(0,0,0,.125)}.card-header:first-child{border-radius:calc(.25rem - 1px) calc(.25rem - 1px) 0 0}.card-footer{padding:.5rem 1rem;background-color:rgba(0,0,0,.03);border-top:1px solid rgba(0,0,0,.125)}.card-footer:last-child{border-radius:0 0 calc(.25rem - 1px) calc(.25rem - 1px)}.card-header-tabs{margin-right:-.5rem;margin-bottom:-.5rem;margin-left:-.5rem;border-bottom:0}.card-header-pills{margin-right:-.5rem;margin-left:-.5rem}.card-img-overlay{position:absolute;top:0;right:0;bottom:0;left:0;padding:1rem;border-radius:calc(.25rem - 1px)}.card-img,.card-img-bottom,.card-img-top{width:100%}.card-img,.card-img-top{border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.card-img,.card-img-bottom{border-bottom-right-radius:calc(.25rem - 1px);border-bottom-left-radius:calc(.25rem - 1px)}.card-group>.card{margin-bottom:.75rem}@media (min-width:576px){.card-group{display:flex;flex-flow:row wrap}.card-group>.card{flex:1 0 0%;margin-bottom:0}.card-group>.card+.card{margin-left:0;border-left:0}.card-group>.card:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.card-group>.card:not(:last-child) .card-header,.card-group>.card:not(:last-child) .card-img-top{border-top-right-radius:0}.card-group>.card:not(:last-child) .card-footer,.card-group>.card:not(:last-child) .card-img-bottom{border-bottom-right-radius:0}.card-group>.card:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.card-group>.card:not(:first-child) .card-header,.card-group>.card:not(:first-child) .card-img-top{border-top-left-radius:0}.card-group>.card:not(:first-child) .card-footer,.card-group>.card:not(:first-child) .card-img-bottom{border-bottom-left-radius:0}}.accordion-button{position:relative;display:flex;align-items:center;width:100%;padding:1rem 1.25rem;font-size:1rem;color:#212529;background-color:transparent;border:1px solid rgba(0,0,0,.125);border-radius:0;overflow-anchor:none;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out,border-radius .15s ease}@media (prefers-reduced-motion:reduce){.accordion-button{transition:none}}.accordion-button.collapsed{border-bottom-width:0}.accordion-button:not(.collapsed){color:#0c63e4;background-color:#e7f1ff}.accordion-button:not(.collapsed)::after{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%230c63e4'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e");transform:rotate(180deg)}.accordion-button::after{flex-shrink:0;width:1.25rem;height:1.25rem;margin-left:auto;content:"";background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23212529'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e");background-repeat:no-repeat;background-size:1.25rem;transition:transform .2s ease-in-out}@media (prefers-reduced-motion:reduce){.accordion-button::after{transition:none}}.accordion-button:hover{z-index:2}.accordion-button:focus{z-index:3;border-color:#86b7fe;outline:0;box-shadow:0 0 0 .25rem rgba(13,110,253,.25)}.accordion-header{margin-bottom:0}.accordion-item:first-of-type .accordion-button{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.accordion-item:last-of-type .accordion-button.collapsed{border-bottom-width:1px;border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.accordion-item:last-of-type .accordion-collapse{border-bottom-width:1px;border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.accordion-collapse{border:solid rgba(0,0,0,.125);border-width:0 1px}.accordion-body{padding:1rem 1.25rem}.accordion-flush .accordion-button{border-right:0;border-left:0;border-radius:0}.accordion-flush .accordion-collapse{border-width:0}.accordion-flush .accordion-item:first-of-type .accordion-button{border-top-width:0;border-top-left-radius:0;border-top-right-radius:0}.accordion-flush .accordion-item:last-of-type .accordion-button.collapsed{border-bottom-width:0;border-bottom-right-radius:0;border-bottom-left-radius:0}.breadcrumb{display:flex;flex-wrap:wrap;padding:0 0;margin-bottom:1rem;list-style:none}.breadcrumb-item+.breadcrumb-item{padding-left:.5rem}.breadcrumb-item+.breadcrumb-item::before{float:left;padding-right:.5rem;color:#6c757d;content:var(--bs-breadcrumb-divider, "/")}.breadcrumb-item.active{color:#6c757d}.pagination{display:flex;padding-left:0;list-style:none}.page-link{position:relative;display:block;color:#0d6efd;text-decoration:none;background-color:#fff;border:1px solid #dee2e6;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.page-link{transition:none}}.page-link:hover{z-index:2;color:#0a58ca;background-color:#e9ecef;border-color:#dee2e6}.page-link:focus{z-index:3;color:#0a58ca;background-color:#e9ecef;outline:0;box-shadow:0 0 0 .25rem rgba(13,110,253,.25)}.page-item:not(:first-child) .page-link{margin-left:-1px}.page-item.active .page-link{z-index:3;color:#fff;background-color:#0d6efd;border-color:#0d6efd}.page-item.disabled .page-link{color:#6c757d;pointer-events:none;background-color:#fff;border-color:#dee2e6}.page-link{padding:.375rem .75rem}.page-item:first-child .page-link{border-top-left-radius:.25rem;border-bottom-left-radius:.25rem}.page-item:last-child .page-link{border-top-right-radius:.25rem;border-bottom-right-radius:.25rem}.pagination-lg .page-link{padding:.75rem 1.5rem;font-size:1.25rem}.pagination-lg .page-item:first-child .page-link{border-top-left-radius:.3rem;border-bottom-left-radius:.3rem}.pagination-lg .page-item:last-child .page-link{border-top-right-radius:.3rem;border-bottom-right-radius:.3rem}.pagination-sm .page-link{padding:.25rem .5rem;font-size:.875rem}.pagination-sm .page-item:first-child .page-link{border-top-left-radius:.2rem;border-bottom-left-radius:.2rem}.pagination-sm .page-item:last-child .page-link{border-top-right-radius:.2rem;border-bottom-right-radius:.2rem}.badge{display:inline-block;padding:.35em .65em;font-size:.75em;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25rem}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.alert{position:relative;padding:1rem 1rem;margin-bottom:1rem;border:1px solid transparent;border-radius:.25rem}.alert-heading{color:inherit}.alert-link{font-weight:700}.alert-dismissible{padding-right:3rem}.alert-dismissible .btn-close{position:absolute;top:0;right:0;z-index:2;padding:1.25rem 1rem}.alert-primary{color:#084298;background-color:#cfe2ff;border-color:#b6d4fe}.alert-primary .alert-link{color:#06357a}.alert-secondary{color:#41464b;background-color:#e2e3e5;border-color:#d3d6d8}.alert-secondary .alert-link{color:#34383c}.alert-success{color:#0f5132;background-color:#d1e7dd;border-color:#badbcc}.alert-success .alert-link{color:#0c4128}.alert-info{color:#055160;background-color:#cff4fc;border-color:#b6effb}.alert-info .alert-link{color:#04414d}.alert-warning{color:#664d03;background-color:#fff3cd;border-color:#ffecb5}.alert-warning .alert-link{color:#523e02}.alert-danger{color:#842029;background-color:#f8d7da;border-color:#f5c2c7}.alert-danger .alert-link{color:#6a1a21}.alert-light{color:#636464;background-color:#fefefe;border-color:#fdfdfe}.alert-light .alert-link{color:#4f5050}.alert-dark{color:#141619;background-color:#d3d3d4;border-color:#bcbebf}.alert-dark .alert-link{color:#101214}@-webkit-keyframes progress-bar-stripes{0%{background-position-x:1rem}}@keyframes progress-bar-stripes{0%{background-position-x:1rem}}.progress{display:flex;height:1rem;overflow:hidden;font-size:.75rem;background-color:#e9ecef;border-radius:.25rem}.progress-bar{display:flex;flex-direction:column;justify-content:center;overflow:hidden;color:#fff;text-align:center;white-space:nowrap;background-color:#0d6efd;transition:width .6s ease}@media (prefers-reduced-motion:reduce){.progress-bar{transition:none}}.progress-bar-striped{background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-size:1rem 1rem}.progress-bar-animated{-webkit-animation:1s linear infinite progress-bar-stripes;animation:1s linear infinite progress-bar-stripes}@media (prefers-reduced-motion:reduce){.progress-bar-animated{-webkit-animation:none;animation:none}}.list-group{display:flex;flex-direction:column;padding-left:0;margin-bottom:0;border-radius:.25rem}.list-group-item-action{width:100%;color:#495057;text-align:inherit}.list-group-item-action:focus,.list-group-item-action:hover{z-index:1;color:#495057;text-decoration:none;background-color:#f8f9fa}.list-group-item-action:active{color:#212529;background-color:#e9ecef}.list-group-item{position:relative;display:block;padding:.5rem 1rem;text-decoration:none;background-color:#fff;border:1px solid rgba(0,0,0,.125)}.list-group-item:first-child{border-top-left-radius:inherit;border-top-right-radius:inherit}.list-group-item:last-child{border-bottom-right-radius:inherit;border-bottom-left-radius:inherit}.list-group-item.disabled,.list-group-item:disabled{color:#6c757d;pointer-events:none;background-color:#fff}.list-group-item.active{z-index:2;color:#fff;background-color:#0d6efd;border-color:#0d6efd}.list-group-item+.list-group-item{border-top-width:0}.list-group-item+.list-group-item.active{margin-top:-1px;border-top-width:1px}.list-group-horizontal{flex-direction:row}.list-group-horizontal>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal>.list-group-item.active{margin-top:0}.list-group-horizontal>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}@media (min-width:576px){.list-group-horizontal-sm{flex-direction:row}.list-group-horizontal-sm>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-sm>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-sm>.list-group-item.active{margin-top:0}.list-group-horizontal-sm>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-sm>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media (min-width:768px){.list-group-horizontal-md{flex-direction:row}.list-group-horizontal-md>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-md>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-md>.list-group-item.active{margin-top:0}.list-group-horizontal-md>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-md>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media (min-width:992px){.list-group-horizontal-lg{flex-direction:row}.list-group-horizontal-lg>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-lg>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-lg>.list-group-item.active{margin-top:0}.list-group-horizontal-lg>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-lg>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media (min-width:1200px){.list-group-horizontal-xl{flex-direction:row}.list-group-horizontal-xl>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-xl>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-xl>.list-group-item.active{margin-top:0}.list-group-horizontal-xl>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-xl>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media (min-width:1400px){.list-group-horizontal-xxl{flex-direction:row}.list-group-horizontal-xxl>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-xxl>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-xxl>.list-group-item.active{margin-top:0}.list-group-horizontal-xxl>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-xxl>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}.list-group-flush{border-radius:0}.list-group-flush>.list-group-item{border-width:0 0 1px}.list-group-flush>.list-group-item:last-child{border-bottom-width:0}.list-group-item-primary{color:#084298;background-color:#cfe2ff}.list-group-item-primary.list-group-item-action:focus,.list-group-item-primary.list-group-item-action:hover{color:#084298;background-color:#bacbe6}.list-group-item-primary.list-group-item-action.active{color:#fff;background-color:#084298;border-color:#084298}.list-group-item-secondary{color:#41464b;background-color:#e2e3e5}.list-group-item-secondary.list-group-item-action:focus,.list-group-item-secondary.list-group-item-action:hover{color:#41464b;background-color:#cbccce}.list-group-item-secondary.list-group-item-action.active{color:#fff;background-color:#41464b;border-color:#41464b}.list-group-item-success{color:#0f5132;background-color:#d1e7dd}.list-group-item-success.list-group-item-action:focus,.list-group-item-success.list-group-item-action:hover{color:#0f5132;background-color:#bcd0c7}.list-group-item-success.list-group-item-action.active{color:#fff;background-color:#0f5132;border-color:#0f5132}.list-group-item-info{color:#055160;background-color:#cff4fc}.list-group-item-info.list-group-item-action:focus,.list-group-item-info.list-group-item-action:hover{color:#055160;background-color:#badce3}.list-group-item-info.list-group-item-action.active{color:#fff;background-color:#055160;border-color:#055160}.list-group-item-warning{color:#664d03;background-color:#fff3cd}.list-group-item-warning.list-group-item-action:focus,.list-group-item-warning.list-group-item-action:hover{color:#664d03;background-color:#e6dbb9}.list-group-item-warning.list-group-item-action.active{color:#fff;background-color:#664d03;border-color:#664d03}.list-group-item-danger{color:#842029;background-color:#f8d7da}.list-group-item-danger.list-group-item-action:focus,.list-group-item-danger.list-group-item-action:hover{color:#842029;background-color:#dfc2c4}.list-group-item-danger.list-group-item-action.active{color:#fff;background-color:#842029;border-color:#842029}.list-group-item-light{color:#636464;background-color:#fefefe}.list-group-item-light.list-group-item-action:focus,.list-group-item-light.list-group-item-action:hover{color:#636464;background-color:#e5e5e5}.list-group-item-light.list-group-item-action.active{color:#fff;background-color:#636464;border-color:#636464}.list-group-item-dark{color:#141619;background-color:#d3d3d4}.list-group-item-dark.list-group-item-action:focus,.list-group-item-dark.list-group-item-action:hover{color:#141619;background-color:#bebebf}.list-group-item-dark.list-group-item-action.active{color:#fff;background-color:#141619;border-color:#141619}.btn-close{box-sizing:content-box;width:1em;height:1em;padding:.25em .25em;color:#000;background:transparent url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23000'%3e%3cpath d='M.293.293a1 1 0 011.414 0L8 6.586 14.293.293a1 1 0 111.414 1.414L9.414 8l6.293 6.293a1 1 0 01-1.414 1.414L8 9.414l-6.293 6.293a1 1 0 01-1.414-1.414L6.586 8 .293 1.707a1 1 0 010-1.414z'/%3e%3c/svg%3e") center/1em auto no-repeat;border:0;border-radius:.25rem;opacity:.5}.btn-close:hover{color:#000;text-decoration:none;opacity:.75}.btn-close:focus{outline:0;box-shadow:0 0 0 .25rem rgba(13,110,253,.25);opacity:1}.btn-close.disabled,.btn-close:disabled{pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;opacity:.25}.btn-close-white{filter:invert(1) grayscale(100%) brightness(200%)}.toast{width:350px;max-width:100%;font-size:.875rem;pointer-events:auto;background-color:rgba(255,255,255,.85);background-clip:padding-box;border:1px solid rgba(0,0,0,.1);box-shadow:0 .5rem 1rem rgba(0,0,0,.15);border-radius:.25rem}.toast:not(.showing):not(.show){opacity:0}.toast.hide{display:none}.toast-container{width:-webkit-max-content;width:-moz-max-content;width:max-content;max-width:100%;pointer-events:none}.toast-container>:not(:last-child){margin-bottom:.75rem}.toast-header{display:flex;align-items:center;padding:.5rem .75rem;color:#6c757d;background-color:rgba(255,255,255,.85);background-clip:padding-box;border-bottom:1px solid rgba(0,0,0,.05);border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.toast-header .btn-close{margin-right:-.375rem;margin-left:.75rem}.toast-body{padding:.75rem}.modal-open{overflow:hidden}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal{position:fixed;top:0;left:0;z-index:1050;display:none;width:100%;height:100%;overflow:hidden;outline:0}.modal-dialog{position:relative;width:auto;margin:.5rem;pointer-events:none}.modal.fade .modal-dialog{transition:transform .3s ease-out;transform:translate(0,-50px)}@media (prefers-reduced-motion:reduce){.modal.fade .modal-dialog{transition:none}}.modal.show .modal-dialog{transform:none}.modal.modal-static .modal-dialog{transform:scale(1.02)}.modal-dialog-scrollable{height:calc(100% - 1rem)}.modal-dialog-scrollable .modal-content{max-height:100%;overflow:hidden}.modal-dialog-scrollable .modal-body{overflow-y:auto}.modal-dialog-centered{display:flex;align-items:center;min-height:calc(100% - 1rem)}.modal-content{position:relative;display:flex;flex-direction:column;width:100%;pointer-events:auto;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem;outline:0}.modal-backdrop{position:fixed;top:0;left:0;z-index:1040;width:100vw;height:100vh;background-color:#000}.modal-backdrop.fade{opacity:0}.modal-backdrop.show{opacity:.5}.modal-header{display:flex;flex-shrink:0;align-items:center;justify-content:space-between;padding:1rem 1rem;border-bottom:1px solid #dee2e6;border-top-left-radius:calc(.3rem - 1px);border-top-right-radius:calc(.3rem - 1px)}.modal-header .btn-close{padding:.5rem .5rem;margin:-.5rem -.5rem -.5rem auto}.modal-title{margin-bottom:0;line-height:1.5}.modal-body{position:relative;flex:1 1 auto;padding:1rem}.modal-footer{display:flex;flex-wrap:wrap;flex-shrink:0;align-items:center;justify-content:flex-end;padding:.75rem;border-top:1px solid #dee2e6;border-bottom-right-radius:calc(.3rem - 1px);border-bottom-left-radius:calc(.3rem - 1px)}.modal-footer>*{margin:.25rem}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:576px){.modal-dialog{max-width:500px;margin:1.75rem auto}.modal-dialog-scrollable{height:calc(100% - 3.5rem)}.modal-dialog-centered{min-height:calc(100% - 3.5rem)}.modal-sm{max-width:300px}}@media (min-width:992px){.modal-lg,.modal-xl{max-width:800px}}@media (min-width:1200px){.modal-xl{max-width:1140px}}.modal-fullscreen{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen .modal-header{border-radius:0}.modal-fullscreen .modal-body{overflow-y:auto}.modal-fullscreen .modal-footer{border-radius:0}@media (max-width:575.98px){.modal-fullscreen-sm-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-sm-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-sm-down .modal-header{border-radius:0}.modal-fullscreen-sm-down .modal-body{overflow-y:auto}.modal-fullscreen-sm-down .modal-footer{border-radius:0}}@media (max-width:767.98px){.modal-fullscreen-md-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-md-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-md-down .modal-header{border-radius:0}.modal-fullscreen-md-down .modal-body{overflow-y:auto}.modal-fullscreen-md-down .modal-footer{border-radius:0}}@media (max-width:991.98px){.modal-fullscreen-lg-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-lg-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-lg-down .modal-header{border-radius:0}.modal-fullscreen-lg-down .modal-body{overflow-y:auto}.modal-fullscreen-lg-down .modal-footer{border-radius:0}}@media (max-width:1199.98px){.modal-fullscreen-xl-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-xl-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-xl-down .modal-header{border-radius:0}.modal-fullscreen-xl-down .modal-body{overflow-y:auto}.modal-fullscreen-xl-down .modal-footer{border-radius:0}}@media (max-width:1399.98px){.modal-fullscreen-xxl-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-xxl-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-xxl-down .modal-header{border-radius:0}.modal-fullscreen-xxl-down .modal-body{overflow-y:auto}.modal-fullscreen-xxl-down .modal-footer{border-radius:0}}.tooltip{position:absolute;z-index:1070;display:block;margin:0;font-family:var(--bs-font-sans-serif);font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;opacity:0}.tooltip.show{opacity:.9}.tooltip .tooltip-arrow{position:absolute;display:block;width:.8rem;height:.4rem}.tooltip .tooltip-arrow::before{position:absolute;content:"";border-color:transparent;border-style:solid}.bs-tooltip-auto[data-popper-placement^=top],.bs-tooltip-top{padding:.4rem 0}.bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow,.bs-tooltip-top .tooltip-arrow{bottom:0}.bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow::before,.bs-tooltip-top .tooltip-arrow::before{top:-1px;border-width:.4rem .4rem 0;border-top-color:#000}.bs-tooltip-auto[data-popper-placement^=right],.bs-tooltip-end{padding:0 .4rem}.bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow,.bs-tooltip-end .tooltip-arrow{left:0;width:.4rem;height:.8rem}.bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow::before,.bs-tooltip-end .tooltip-arrow::before{right:-1px;border-width:.4rem .4rem .4rem 0;border-right-color:#000}.bs-tooltip-auto[data-popper-placement^=bottom],.bs-tooltip-bottom{padding:.4rem 0}.bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow,.bs-tooltip-bottom .tooltip-arrow{top:0}.bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow::before,.bs-tooltip-bottom .tooltip-arrow::before{bottom:-1px;border-width:0 .4rem .4rem;border-bottom-color:#000}.bs-tooltip-auto[data-popper-placement^=left],.bs-tooltip-start{padding:0 .4rem}.bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow,.bs-tooltip-start .tooltip-arrow{right:0;width:.4rem;height:.8rem}.bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow::before,.bs-tooltip-start .tooltip-arrow::before{left:-1px;border-width:.4rem 0 .4rem .4rem;border-left-color:#000}.tooltip-inner{max-width:200px;padding:.25rem .5rem;color:#fff;text-align:center;background-color:#000;border-radius:.25rem}.popover{position:absolute;top:0;left:0;z-index:1060;display:block;max-width:276px;font-family:var(--bs-font-sans-serif);font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem}.popover .popover-arrow{position:absolute;display:block;width:1rem;height:.5rem;margin:0 .3rem}.popover .popover-arrow::after,.popover .popover-arrow::before{position:absolute;display:block;content:"";border-color:transparent;border-style:solid}.bs-popover-auto[data-popper-placement^=top],.bs-popover-top{margin-bottom:.5rem!important}.bs-popover-auto[data-popper-placement^=top]>.popover-arrow,.bs-popover-top>.popover-arrow{bottom:calc(-.5rem - 1px)}.bs-popover-auto[data-popper-placement^=top]>.popover-arrow::before,.bs-popover-top>.popover-arrow::before{bottom:0;border-width:.5rem .5rem 0;border-top-color:rgba(0,0,0,.25)}.bs-popover-auto[data-popper-placement^=top]>.popover-arrow::after,.bs-popover-top>.popover-arrow::after{bottom:1px;border-width:.5rem .5rem 0;border-top-color:#fff}.bs-popover-auto[data-popper-placement^=right],.bs-popover-end{margin-left:.5rem!important}.bs-popover-auto[data-popper-placement^=right]>.popover-arrow,.bs-popover-end>.popover-arrow{left:calc(-.5rem - 1px);width:.5rem;height:1rem;margin:.3rem 0}.bs-popover-auto[data-popper-placement^=right]>.popover-arrow::before,.bs-popover-end>.popover-arrow::before{left:0;border-width:.5rem .5rem .5rem 0;border-right-color:rgba(0,0,0,.25)}.bs-popover-auto[data-popper-placement^=right]>.popover-arrow::after,.bs-popover-end>.popover-arrow::after{left:1px;border-width:.5rem .5rem .5rem 0;border-right-color:#fff}.bs-popover-auto[data-popper-placement^=bottom],.bs-popover-bottom{margin-top:.5rem!important}.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow,.bs-popover-bottom>.popover-arrow{top:calc(-.5rem - 1px)}.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow::before,.bs-popover-bottom>.popover-arrow::before{top:0;border-width:0 .5rem .5rem .5rem;border-bottom-color:rgba(0,0,0,.25)}.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow::after,.bs-popover-bottom>.popover-arrow::after{top:1px;border-width:0 .5rem .5rem .5rem;border-bottom-color:#fff}.bs-popover-auto[data-popper-placement^=bottom] .popover-header::before,.bs-popover-bottom .popover-header::before{position:absolute;top:0;left:50%;display:block;width:1rem;margin-left:-.5rem;content:"";border-bottom:1px solid #f0f0f0}.bs-popover-auto[data-popper-placement^=left],.bs-popover-start{margin-right:.5rem!important}.bs-popover-auto[data-popper-placement^=left]>.popover-arrow,.bs-popover-start>.popover-arrow{right:calc(-.5rem - 1px);width:.5rem;height:1rem;margin:.3rem 0}.bs-popover-auto[data-popper-placement^=left]>.popover-arrow::before,.bs-popover-start>.popover-arrow::before{right:0;border-width:.5rem 0 .5rem .5rem;border-left-color:rgba(0,0,0,.25)}.bs-popover-auto[data-popper-placement^=left]>.popover-arrow::after,.bs-popover-start>.popover-arrow::after{right:1px;border-width:.5rem 0 .5rem .5rem;border-left-color:#fff}.popover-header{padding:.5rem 1rem;margin-bottom:0;font-size:1rem;background-color:#f0f0f0;border-bottom:1px solid #d8d8d8;border-top-left-radius:calc(.3rem - 1px);border-top-right-radius:calc(.3rem - 1px)}.popover-header:empty{display:none}.popover-body{padding:1rem 1rem;color:#212529}.carousel{position:relative}.carousel.pointer-event{touch-action:pan-y}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner::after{display:block;clear:both;content:""}.carousel-item{position:relative;display:none;float:left;width:100%;margin-right:-100%;-webkit-backface-visibility:hidden;backface-visibility:hidden;transition:transform .6s ease-in-out}@media (prefers-reduced-motion:reduce){.carousel-item{transition:none}}.carousel-item-next,.carousel-item-prev,.carousel-item.active{display:block}.active.carousel-item-end,.carousel-item-next:not(.carousel-item-start){transform:translateX(100%)}.active.carousel-item-start,.carousel-item-prev:not(.carousel-item-end){transform:translateX(-100%)}.carousel-fade .carousel-item{opacity:0;transition-property:opacity;transform:none}.carousel-fade .carousel-item-next.carousel-item-start,.carousel-fade .carousel-item-prev.carousel-item-end,.carousel-fade .carousel-item.active{z-index:1;opacity:1}.carousel-fade .active.carousel-item-end,.carousel-fade .active.carousel-item-start{z-index:0;opacity:0;transition:opacity 0s .6s}@media (prefers-reduced-motion:reduce){.carousel-fade .active.carousel-item-end,.carousel-fade .active.carousel-item-start{transition:none}}.carousel-control-next,.carousel-control-prev{position:absolute;top:0;bottom:0;z-index:1;display:flex;align-items:center;justify-content:center;width:15%;color:#fff;text-align:center;opacity:.5;transition:opacity .15s ease}@media (prefers-reduced-motion:reduce){.carousel-control-next,.carousel-control-prev{transition:none}}.carousel-control-next:focus,.carousel-control-next:hover,.carousel-control-prev:focus,.carousel-control-prev:hover{color:#fff;text-decoration:none;outline:0;opacity:.9}.carousel-control-prev{left:0}.carousel-control-next{right:0}.carousel-control-next-icon,.carousel-control-prev-icon{display:inline-block;width:2rem;height:2rem;background-repeat:no-repeat;background-position:50%;background-size:100% 100%}.carousel-control-prev-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M11.354 1.646a.5.5 0 0 1 0 .708L5.707 8l5.647 5.646a.5.5 0 0 1-.708.708l-6-6a.5.5 0 0 1 0-.708l6-6a.5.5 0 0 1 .708 0z'/%3e%3c/svg%3e")}.carousel-control-next-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8 4.646 2.354a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e")}.carousel-indicators{position:absolute;right:0;bottom:0;left:0;z-index:2;display:flex;justify-content:center;padding-left:0;margin-right:15%;margin-left:15%;list-style:none}.carousel-indicators li{box-sizing:content-box;flex:0 1 auto;width:30px;height:3px;margin-right:3px;margin-left:3px;text-indent:-999px;cursor:pointer;background-color:#fff;background-clip:padding-box;border-top:10px solid transparent;border-bottom:10px solid transparent;opacity:.5;transition:opacity .6s ease}@media (prefers-reduced-motion:reduce){.carousel-indicators li{transition:none}}.carousel-indicators .active{opacity:1}.carousel-caption{position:absolute;right:15%;bottom:1.25rem;left:15%;padding-top:1.25rem;padding-bottom:1.25rem;color:#fff;text-align:center}.carousel-dark .carousel-control-next-icon,.carousel-dark .carousel-control-prev-icon{filter:invert(1) grayscale(100)}.carousel-dark .carousel-indicators li{background-color:#000}.carousel-dark .carousel-caption{color:#000}@-webkit-keyframes spinner-border{to{transform:rotate(360deg)}}@keyframes spinner-border{to{transform:rotate(360deg)}}.spinner-border{display:inline-block;width:2rem;height:2rem;vertical-align:text-bottom;border:.25em solid currentColor;border-right-color:transparent;border-radius:50%;-webkit-animation:.75s linear infinite spinner-border;animation:.75s linear infinite spinner-border}.spinner-border-sm{width:1rem;height:1rem;border-width:.2em}@-webkit-keyframes spinner-grow{0%{transform:scale(0)}50%{opacity:1;transform:none}}@keyframes spinner-grow{0%{transform:scale(0)}50%{opacity:1;transform:none}}.spinner-grow{display:inline-block;width:2rem;height:2rem;vertical-align:text-bottom;background-color:currentColor;border-radius:50%;opacity:0;-webkit-animation:.75s linear infinite spinner-grow;animation:.75s linear infinite spinner-grow}.spinner-grow-sm{width:1rem;height:1rem}@media (prefers-reduced-motion:reduce){.spinner-border,.spinner-grow{-webkit-animation-duration:1.5s;animation-duration:1.5s}}.clearfix::after{display:block;clear:both;content:""}.link-primary{color:#0d6efd}.link-primary:focus,.link-primary:hover{color:#0a58ca}.link-secondary{color:#6c757d}.link-secondary:focus,.link-secondary:hover{color:#565e64}.link-success{color:#198754}.link-success:focus,.link-success:hover{color:#146c43}.link-info{color:#0dcaf0}.link-info:focus,.link-info:hover{color:#3dd5f3}.link-warning{color:#ffc107}.link-warning:focus,.link-warning:hover{color:#ffcd39}.link-danger{color:#dc3545}.link-danger:focus,.link-danger:hover{color:#b02a37}.link-light{color:#f8f9fa}.link-light:focus,.link-light:hover{color:#f9fafb}.link-dark{color:#212529}.link-dark:focus,.link-dark:hover{color:#1a1e21}.ratio{position:relative;width:100%}.ratio::before{display:block;padding-top:var(--aspect-ratio);content:""}.ratio>*{position:absolute;top:0;left:0;width:100%;height:100%}.ratio-1x1{--aspect-ratio:100%}.ratio-4x3{--aspect-ratio:calc(3 / 4 * 100%)}.ratio-16x9{--aspect-ratio:calc(9 / 16 * 100%)}.ratio-21x9{--aspect-ratio:calc(9 / 21 * 100%)}.fixed-top{position:fixed;top:0;right:0;left:0;z-index:1030}.fixed-bottom{position:fixed;right:0;bottom:0;left:0;z-index:1030}.sticky-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}@media (min-width:576px){.sticky-sm-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}@media (min-width:768px){.sticky-md-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}@media (min-width:992px){.sticky-lg-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}@media (min-width:1200px){.sticky-xl-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}@media (min-width:1400px){.sticky-xxl-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}.visually-hidden,.visually-hidden-focusable:not(:focus){position:absolute!important;width:1px!important;height:1px!important;padding:0!important;margin:-1px!important;overflow:hidden!important;clip:rect(0,0,0,0)!important;white-space:nowrap!important;border:0!important}.stretched-link::after{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;content:""}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.align-baseline{vertical-align:baseline!important}.align-top{vertical-align:top!important}.align-middle{vertical-align:middle!important}.align-bottom{vertical-align:bottom!important}.align-text-bottom{vertical-align:text-bottom!important}.align-text-top{vertical-align:text-top!important}.float-start{float:left!important}.float-end{float:right!important}.float-none{float:none!important}.overflow-auto{overflow:auto!important}.overflow-hidden{overflow:hidden!important}.overflow-visible{overflow:visible!important}.overflow-scroll{overflow:scroll!important}.d-inline{display:inline!important}.d-inline-block{display:inline-block!important}.d-block{display:block!important}.d-grid{display:grid!important}.d-table{display:table!important}.d-table-row{display:table-row!important}.d-table-cell{display:table-cell!important}.d-flex{display:flex!important}.d-inline-flex{display:inline-flex!important}.d-none{display:none!important}.shadow{box-shadow:0 .5rem 1rem rgba(0,0,0,.15)!important}.shadow-sm{box-shadow:0 .125rem .25rem rgba(0,0,0,.075)!important}.shadow-lg{box-shadow:0 1rem 3rem rgba(0,0,0,.175)!important}.shadow-none{box-shadow:none!important}.position-static{position:static!important}.position-relative{position:relative!important}.position-absolute{position:absolute!important}.position-fixed{position:fixed!important}.position-sticky{position:-webkit-sticky!important;position:sticky!important}.top-0{top:0!important}.top-50{top:50%!important}.top-100{top:100%!important}.bottom-0{bottom:0!important}.bottom-50{bottom:50%!important}.bottom-100{bottom:100%!important}.start-0{left:0!important}.start-50{left:50%!important}.start-100{left:100%!important}.end-0{right:0!important}.end-50{right:50%!important}.end-100{right:100%!important}.translate-middle{transform:translate(-50%,-50%)!important}.translate-middle-x{transform:translateX(-50%)!important}.translate-middle-y{transform:translateY(-50%)!important}.border{border:1px solid #dee2e6!important}.border-0{border:0!important}.border-top{border-top:1px solid #dee2e6!important}.border-top-0{border-top:0!important}.border-end{border-right:1px solid #dee2e6!important}.border-end-0{border-right:0!important}.border-bottom{border-bottom:1px solid #dee2e6!important}.border-bottom-0{border-bottom:0!important}.border-start{border-left:1px solid #dee2e6!important}.border-start-0{border-left:0!important}.border-primary{border-color:#0d6efd!important}.border-secondary{border-color:#6c757d!important}.border-success{border-color:#198754!important}.border-info{border-color:#0dcaf0!important}.border-warning{border-color:#ffc107!important}.border-danger{border-color:#dc3545!important}.border-light{border-color:#f8f9fa!important}.border-dark{border-color:#212529!important}.border-white{border-color:#fff!important}.border-0{border-width:0!important}.border-1{border-width:1px!important}.border-2{border-width:2px!important}.border-3{border-width:3px!important}.border-4{border-width:4px!important}.border-5{border-width:5px!important}.w-25{width:25%!important}.w-50{width:50%!important}.w-75{width:75%!important}.w-100{width:100%!important}.w-auto{width:auto!important}.mw-100{max-width:100%!important}.vw-100{width:100vw!important}.min-vw-100{min-width:100vw!important}.h-25{height:25%!important}.h-50{height:50%!important}.h-75{height:75%!important}.h-100{height:100%!important}.h-auto{height:auto!important}.mh-100{max-height:100%!important}.vh-100{height:100vh!important}.min-vh-100{min-height:100vh!important}.flex-fill{flex:1 1 auto!important}.flex-row{flex-direction:row!important}.flex-column{flex-direction:column!important}.flex-row-reverse{flex-direction:row-reverse!important}.flex-column-reverse{flex-direction:column-reverse!important}.flex-grow-0{flex-grow:0!important}.flex-grow-1{flex-grow:1!important}.flex-shrink-0{flex-shrink:0!important}.flex-shrink-1{flex-shrink:1!important}.flex-wrap{flex-wrap:wrap!important}.flex-nowrap{flex-wrap:nowrap!important}.flex-wrap-reverse{flex-wrap:wrap-reverse!important}.gap-0{gap:0!important}.gap-1{gap:.25rem!important}.gap-2{gap:.5rem!important}.gap-3{gap:1rem!important}.gap-4{gap:1.5rem!important}.gap-5{gap:3rem!important}.justify-content-start{justify-content:flex-start!important}.justify-content-end{justify-content:flex-end!important}.justify-content-center{justify-content:center!important}.justify-content-between{justify-content:space-between!important}.justify-content-around{justify-content:space-around!important}.justify-content-evenly{justify-content:space-evenly!important}.align-items-start{align-items:flex-start!important}.align-items-end{align-items:flex-end!important}.align-items-center{align-items:center!important}.align-items-baseline{align-items:baseline!important}.align-items-stretch{align-items:stretch!important}.align-content-start{align-content:flex-start!important}.align-content-end{align-content:flex-end!important}.align-content-center{align-content:center!important}.align-content-between{align-content:space-between!important}.align-content-around{align-content:space-around!important}.align-content-stretch{align-content:stretch!important}.align-self-auto{align-self:auto!important}.align-self-start{align-self:flex-start!important}.align-self-end{align-self:flex-end!important}.align-self-center{align-self:center!important}.align-self-baseline{align-self:baseline!important}.align-self-stretch{align-self:stretch!important}.order-first{order:-1!important}.order-0{order:0!important}.order-1{order:1!important}.order-2{order:2!important}.order-3{order:3!important}.order-4{order:4!important}.order-5{order:5!important}.order-last{order:6!important}.m-0{margin:0!important}.m-1{margin:.25rem!important}.m-2{margin:.5rem!important}.m-3{margin:1rem!important}.m-4{margin:1.5rem!important}.m-5{margin:3rem!important}.m-auto{margin:auto!important}.mx-0{margin-right:0!important;margin-left:0!important}.mx-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-3{margin-right:1rem!important;margin-left:1rem!important}.mx-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-5{margin-right:3rem!important;margin-left:3rem!important}.mx-auto{margin-right:auto!important;margin-left:auto!important}.my-0{margin-top:0!important;margin-bottom:0!important}.my-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-0{margin-top:0!important}.mt-1{margin-top:.25rem!important}.mt-2{margin-top:.5rem!important}.mt-3{margin-top:1rem!important}.mt-4{margin-top:1.5rem!important}.mt-5{margin-top:3rem!important}.mt-auto{margin-top:auto!important}.me-0{margin-right:0!important}.me-1{margin-right:.25rem!important}.me-2{margin-right:.5rem!important}.me-3{margin-right:1rem!important}.me-4{margin-right:1.5rem!important}.me-5{margin-right:3rem!important}.me-auto{margin-right:auto!important}.mb-0{margin-bottom:0!important}.mb-1{margin-bottom:.25rem!important}.mb-2{margin-bottom:.5rem!important}.mb-3{margin-bottom:1rem!important}.mb-4{margin-bottom:1.5rem!important}.mb-5{margin-bottom:3rem!important}.mb-auto{margin-bottom:auto!important}.ms-0{margin-left:0!important}.ms-1{margin-left:.25rem!important}.ms-2{margin-left:.5rem!important}.ms-3{margin-left:1rem!important}.ms-4{margin-left:1.5rem!important}.ms-5{margin-left:3rem!important}.ms-auto{margin-left:auto!important}.p-0{padding:0!important}.p-1{padding:.25rem!important}.p-2{padding:.5rem!important}.p-3{padding:1rem!important}.p-4{padding:1.5rem!important}.p-5{padding:3rem!important}.px-0{padding-right:0!important;padding-left:0!important}.px-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-3{padding-right:1rem!important;padding-left:1rem!important}.px-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-5{padding-right:3rem!important;padding-left:3rem!important}.py-0{padding-top:0!important;padding-bottom:0!important}.py-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-0{padding-top:0!important}.pt-1{padding-top:.25rem!important}.pt-2{padding-top:.5rem!important}.pt-3{padding-top:1rem!important}.pt-4{padding-top:1.5rem!important}.pt-5{padding-top:3rem!important}.pe-0{padding-right:0!important}.pe-1{padding-right:.25rem!important}.pe-2{padding-right:.5rem!important}.pe-3{padding-right:1rem!important}.pe-4{padding-right:1.5rem!important}.pe-5{padding-right:3rem!important}.pb-0{padding-bottom:0!important}.pb-1{padding-bottom:.25rem!important}.pb-2{padding-bottom:.5rem!important}.pb-3{padding-bottom:1rem!important}.pb-4{padding-bottom:1.5rem!important}.pb-5{padding-bottom:3rem!important}.ps-0{padding-left:0!important}.ps-1{padding-left:.25rem!important}.ps-2{padding-left:.5rem!important}.ps-3{padding-left:1rem!important}.ps-4{padding-left:1.5rem!important}.ps-5{padding-left:3rem!important}.fs-1{font-size:calc(1.375rem + 1.5vw)!important}.fs-2{font-size:calc(1.325rem + .9vw)!important}.fs-3{font-size:calc(1.3rem + .6vw)!important}.fs-4{font-size:calc(1.275rem + .3vw)!important}.fs-5{font-size:1.25rem!important}.fs-6{font-size:1rem!important}.fst-italic{font-style:italic!important}.fst-normal{font-style:normal!important}.fw-light{font-weight:300!important}.fw-lighter{font-weight:lighter!important}.fw-normal{font-weight:400!important}.fw-bold{font-weight:700!important}.fw-bolder{font-weight:bolder!important}.text-lowercase{text-transform:lowercase!important}.text-uppercase{text-transform:uppercase!important}.text-capitalize{text-transform:capitalize!important}.text-start{text-align:left!important}.text-end{text-align:right!important}.text-center{text-align:center!important}.text-primary{color:#0d6efd!important}.text-secondary{color:#6c757d!important}.text-success{color:#198754!important}.text-info{color:#0dcaf0!important}.text-warning{color:#ffc107!important}.text-danger{color:#dc3545!important}.text-light{color:#f8f9fa!important}.text-dark{color:#212529!important}.text-white{color:#fff!important}.text-body{color:#212529!important}.text-muted{color:#6c757d!important}.text-black-50{color:rgba(0,0,0,.5)!important}.text-white-50{color:rgba(255,255,255,.5)!important}.text-reset{color:inherit!important}.lh-1{line-height:1!important}.lh-sm{line-height:1.25!important}.lh-base{line-height:1.5!important}.lh-lg{line-height:2!important}.bg-primary{background-color:#0d6efd!important}.bg-secondary{background-color:#6c757d!important}.bg-success{background-color:#198754!important}.bg-info{background-color:#0dcaf0!important}.bg-warning{background-color:#ffc107!important}.bg-danger{background-color:#dc3545!important}.bg-light{background-color:#f8f9fa!important}.bg-dark{background-color:#212529!important}.bg-body{background-color:#fff!important}.bg-white{background-color:#fff!important}.bg-transparent{background-color:transparent!important}.bg-gradient{background-image:var(--bs-gradient)!important}.text-wrap{white-space:normal!important}.text-nowrap{white-space:nowrap!important}.text-decoration-none{text-decoration:none!important}.text-decoration-underline{text-decoration:underline!important}.text-decoration-line-through{text-decoration:line-through!important}.text-break{word-wrap:break-word!important;word-break:break-word!important}.font-monospace{font-family:var(--bs-font-monospace)!important}.user-select-all{-webkit-user-select:all!important;-moz-user-select:all!important;user-select:all!important}.user-select-auto{-webkit-user-select:auto!important;-moz-user-select:auto!important;user-select:auto!important}.user-select-none{-webkit-user-select:none!important;-moz-user-select:none!important;user-select:none!important}.pe-none{pointer-events:none!important}.pe-auto{pointer-events:auto!important}.rounded{border-radius:.25rem!important}.rounded-0{border-radius:0!important}.rounded-1{border-radius:.2rem!important}.rounded-2{border-radius:.25rem!important}.rounded-3{border-radius:.3rem!important}.rounded-circle{border-radius:50%!important}.rounded-pill{border-radius:50rem!important}.rounded-top{border-top-left-radius:.25rem!important;border-top-right-radius:.25rem!important}.rounded-end{border-top-right-radius:.25rem!important;border-bottom-right-radius:.25rem!important}.rounded-bottom{border-bottom-right-radius:.25rem!important;border-bottom-left-radius:.25rem!important}.rounded-start{border-bottom-left-radius:.25rem!important;border-top-left-radius:.25rem!important}.visible{visibility:visible!important}.invisible{visibility:hidden!important}@media (min-width:576px){.float-sm-start{float:left!important}.float-sm-end{float:right!important}.float-sm-none{float:none!important}.d-sm-inline{display:inline!important}.d-sm-inline-block{display:inline-block!important}.d-sm-block{display:block!important}.d-sm-grid{display:grid!important}.d-sm-table{display:table!important}.d-sm-table-row{display:table-row!important}.d-sm-table-cell{display:table-cell!important}.d-sm-flex{display:flex!important}.d-sm-inline-flex{display:inline-flex!important}.d-sm-none{display:none!important}.flex-sm-fill{flex:1 1 auto!important}.flex-sm-row{flex-direction:row!important}.flex-sm-column{flex-direction:column!important}.flex-sm-row-reverse{flex-direction:row-reverse!important}.flex-sm-column-reverse{flex-direction:column-reverse!important}.flex-sm-grow-0{flex-grow:0!important}.flex-sm-grow-1{flex-grow:1!important}.flex-sm-shrink-0{flex-shrink:0!important}.flex-sm-shrink-1{flex-shrink:1!important}.flex-sm-wrap{flex-wrap:wrap!important}.flex-sm-nowrap{flex-wrap:nowrap!important}.flex-sm-wrap-reverse{flex-wrap:wrap-reverse!important}.gap-sm-0{gap:0!important}.gap-sm-1{gap:.25rem!important}.gap-sm-2{gap:.5rem!important}.gap-sm-3{gap:1rem!important}.gap-sm-4{gap:1.5rem!important}.gap-sm-5{gap:3rem!important}.justify-content-sm-start{justify-content:flex-start!important}.justify-content-sm-end{justify-content:flex-end!important}.justify-content-sm-center{justify-content:center!important}.justify-content-sm-between{justify-content:space-between!important}.justify-content-sm-around{justify-content:space-around!important}.justify-content-sm-evenly{justify-content:space-evenly!important}.align-items-sm-start{align-items:flex-start!important}.align-items-sm-end{align-items:flex-end!important}.align-items-sm-center{align-items:center!important}.align-items-sm-baseline{align-items:baseline!important}.align-items-sm-stretch{align-items:stretch!important}.align-content-sm-start{align-content:flex-start!important}.align-content-sm-end{align-content:flex-end!important}.align-content-sm-center{align-content:center!important}.align-content-sm-between{align-content:space-between!important}.align-content-sm-around{align-content:space-around!important}.align-content-sm-stretch{align-content:stretch!important}.align-self-sm-auto{align-self:auto!important}.align-self-sm-start{align-self:flex-start!important}.align-self-sm-end{align-self:flex-end!important}.align-self-sm-center{align-self:center!important}.align-self-sm-baseline{align-self:baseline!important}.align-self-sm-stretch{align-self:stretch!important}.order-sm-first{order:-1!important}.order-sm-0{order:0!important}.order-sm-1{order:1!important}.order-sm-2{order:2!important}.order-sm-3{order:3!important}.order-sm-4{order:4!important}.order-sm-5{order:5!important}.order-sm-last{order:6!important}.m-sm-0{margin:0!important}.m-sm-1{margin:.25rem!important}.m-sm-2{margin:.5rem!important}.m-sm-3{margin:1rem!important}.m-sm-4{margin:1.5rem!important}.m-sm-5{margin:3rem!important}.m-sm-auto{margin:auto!important}.mx-sm-0{margin-right:0!important;margin-left:0!important}.mx-sm-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-sm-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-sm-3{margin-right:1rem!important;margin-left:1rem!important}.mx-sm-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-sm-5{margin-right:3rem!important;margin-left:3rem!important}.mx-sm-auto{margin-right:auto!important;margin-left:auto!important}.my-sm-0{margin-top:0!important;margin-bottom:0!important}.my-sm-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-sm-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-sm-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-sm-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-sm-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-sm-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-sm-0{margin-top:0!important}.mt-sm-1{margin-top:.25rem!important}.mt-sm-2{margin-top:.5rem!important}.mt-sm-3{margin-top:1rem!important}.mt-sm-4{margin-top:1.5rem!important}.mt-sm-5{margin-top:3rem!important}.mt-sm-auto{margin-top:auto!important}.me-sm-0{margin-right:0!important}.me-sm-1{margin-right:.25rem!important}.me-sm-2{margin-right:.5rem!important}.me-sm-3{margin-right:1rem!important}.me-sm-4{margin-right:1.5rem!important}.me-sm-5{margin-right:3rem!important}.me-sm-auto{margin-right:auto!important}.mb-sm-0{margin-bottom:0!important}.mb-sm-1{margin-bottom:.25rem!important}.mb-sm-2{margin-bottom:.5rem!important}.mb-sm-3{margin-bottom:1rem!important}.mb-sm-4{margin-bottom:1.5rem!important}.mb-sm-5{margin-bottom:3rem!important}.mb-sm-auto{margin-bottom:auto!important}.ms-sm-0{margin-left:0!important}.ms-sm-1{margin-left:.25rem!important}.ms-sm-2{margin-left:.5rem!important}.ms-sm-3{margin-left:1rem!important}.ms-sm-4{margin-left:1.5rem!important}.ms-sm-5{margin-left:3rem!important}.ms-sm-auto{margin-left:auto!important}.p-sm-0{padding:0!important}.p-sm-1{padding:.25rem!important}.p-sm-2{padding:.5rem!important}.p-sm-3{padding:1rem!important}.p-sm-4{padding:1.5rem!important}.p-sm-5{padding:3rem!important}.px-sm-0{padding-right:0!important;padding-left:0!important}.px-sm-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-sm-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-sm-3{padding-right:1rem!important;padding-left:1rem!important}.px-sm-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-sm-5{padding-right:3rem!important;padding-left:3rem!important}.py-sm-0{padding-top:0!important;padding-bottom:0!important}.py-sm-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-sm-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-sm-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-sm-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-sm-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-sm-0{padding-top:0!important}.pt-sm-1{padding-top:.25rem!important}.pt-sm-2{padding-top:.5rem!important}.pt-sm-3{padding-top:1rem!important}.pt-sm-4{padding-top:1.5rem!important}.pt-sm-5{padding-top:3rem!important}.pe-sm-0{padding-right:0!important}.pe-sm-1{padding-right:.25rem!important}.pe-sm-2{padding-right:.5rem!important}.pe-sm-3{padding-right:1rem!important}.pe-sm-4{padding-right:1.5rem!important}.pe-sm-5{padding-right:3rem!important}.pb-sm-0{padding-bottom:0!important}.pb-sm-1{padding-bottom:.25rem!important}.pb-sm-2{padding-bottom:.5rem!important}.pb-sm-3{padding-bottom:1rem!important}.pb-sm-4{padding-bottom:1.5rem!important}.pb-sm-5{padding-bottom:3rem!important}.ps-sm-0{padding-left:0!important}.ps-sm-1{padding-left:.25rem!important}.ps-sm-2{padding-left:.5rem!important}.ps-sm-3{padding-left:1rem!important}.ps-sm-4{padding-left:1.5rem!important}.ps-sm-5{padding-left:3rem!important}.text-sm-start{text-align:left!important}.text-sm-end{text-align:right!important}.text-sm-center{text-align:center!important}}@media (min-width:768px){.float-md-start{float:left!important}.float-md-end{float:right!important}.float-md-none{float:none!important}.d-md-inline{display:inline!important}.d-md-inline-block{display:inline-block!important}.d-md-block{display:block!important}.d-md-grid{display:grid!important}.d-md-table{display:table!important}.d-md-table-row{display:table-row!important}.d-md-table-cell{display:table-cell!important}.d-md-flex{display:flex!important}.d-md-inline-flex{display:inline-flex!important}.d-md-none{display:none!important}.flex-md-fill{flex:1 1 auto!important}.flex-md-row{flex-direction:row!important}.flex-md-column{flex-direction:column!important}.flex-md-row-reverse{flex-direction:row-reverse!important}.flex-md-column-reverse{flex-direction:column-reverse!important}.flex-md-grow-0{flex-grow:0!important}.flex-md-grow-1{flex-grow:1!important}.flex-md-shrink-0{flex-shrink:0!important}.flex-md-shrink-1{flex-shrink:1!important}.flex-md-wrap{flex-wrap:wrap!important}.flex-md-nowrap{flex-wrap:nowrap!important}.flex-md-wrap-reverse{flex-wrap:wrap-reverse!important}.gap-md-0{gap:0!important}.gap-md-1{gap:.25rem!important}.gap-md-2{gap:.5rem!important}.gap-md-3{gap:1rem!important}.gap-md-4{gap:1.5rem!important}.gap-md-5{gap:3rem!important}.justify-content-md-start{justify-content:flex-start!important}.justify-content-md-end{justify-content:flex-end!important}.justify-content-md-center{justify-content:center!important}.justify-content-md-between{justify-content:space-between!important}.justify-content-md-around{justify-content:space-around!important}.justify-content-md-evenly{justify-content:space-evenly!important}.align-items-md-start{align-items:flex-start!important}.align-items-md-end{align-items:flex-end!important}.align-items-md-center{align-items:center!important}.align-items-md-baseline{align-items:baseline!important}.align-items-md-stretch{align-items:stretch!important}.align-content-md-start{align-content:flex-start!important}.align-content-md-end{align-content:flex-end!important}.align-content-md-center{align-content:center!important}.align-content-md-between{align-content:space-between!important}.align-content-md-around{align-content:space-around!important}.align-content-md-stretch{align-content:stretch!important}.align-self-md-auto{align-self:auto!important}.align-self-md-start{align-self:flex-start!important}.align-self-md-end{align-self:flex-end!important}.align-self-md-center{align-self:center!important}.align-self-md-baseline{align-self:baseline!important}.align-self-md-stretch{align-self:stretch!important}.order-md-first{order:-1!important}.order-md-0{order:0!important}.order-md-1{order:1!important}.order-md-2{order:2!important}.order-md-3{order:3!important}.order-md-4{order:4!important}.order-md-5{order:5!important}.order-md-last{order:6!important}.m-md-0{margin:0!important}.m-md-1{margin:.25rem!important}.m-md-2{margin:.5rem!important}.m-md-3{margin:1rem!important}.m-md-4{margin:1.5rem!important}.m-md-5{margin:3rem!important}.m-md-auto{margin:auto!important}.mx-md-0{margin-right:0!important;margin-left:0!important}.mx-md-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-md-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-md-3{margin-right:1rem!important;margin-left:1rem!important}.mx-md-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-md-5{margin-right:3rem!important;margin-left:3rem!important}.mx-md-auto{margin-right:auto!important;margin-left:auto!important}.my-md-0{margin-top:0!important;margin-bottom:0!important}.my-md-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-md-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-md-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-md-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-md-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-md-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-md-0{margin-top:0!important}.mt-md-1{margin-top:.25rem!important}.mt-md-2{margin-top:.5rem!important}.mt-md-3{margin-top:1rem!important}.mt-md-4{margin-top:1.5rem!important}.mt-md-5{margin-top:3rem!important}.mt-md-auto{margin-top:auto!important}.me-md-0{margin-right:0!important}.me-md-1{margin-right:.25rem!important}.me-md-2{margin-right:.5rem!important}.me-md-3{margin-right:1rem!important}.me-md-4{margin-right:1.5rem!important}.me-md-5{margin-right:3rem!important}.me-md-auto{margin-right:auto!important}.mb-md-0{margin-bottom:0!important}.mb-md-1{margin-bottom:.25rem!important}.mb-md-2{margin-bottom:.5rem!important}.mb-md-3{margin-bottom:1rem!important}.mb-md-4{margin-bottom:1.5rem!important}.mb-md-5{margin-bottom:3rem!important}.mb-md-auto{margin-bottom:auto!important}.ms-md-0{margin-left:0!important}.ms-md-1{margin-left:.25rem!important}.ms-md-2{margin-left:.5rem!important}.ms-md-3{margin-left:1rem!important}.ms-md-4{margin-left:1.5rem!important}.ms-md-5{margin-left:3rem!important}.ms-md-auto{margin-left:auto!important}.p-md-0{padding:0!important}.p-md-1{padding:.25rem!important}.p-md-2{padding:.5rem!important}.p-md-3{padding:1rem!important}.p-md-4{padding:1.5rem!important}.p-md-5{padding:3rem!important}.px-md-0{padding-right:0!important;padding-left:0!important}.px-md-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-md-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-md-3{padding-right:1rem!important;padding-left:1rem!important}.px-md-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-md-5{padding-right:3rem!important;padding-left:3rem!important}.py-md-0{padding-top:0!important;padding-bottom:0!important}.py-md-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-md-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-md-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-md-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-md-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-md-0{padding-top:0!important}.pt-md-1{padding-top:.25rem!important}.pt-md-2{padding-top:.5rem!important}.pt-md-3{padding-top:1rem!important}.pt-md-4{padding-top:1.5rem!important}.pt-md-5{padding-top:3rem!important}.pe-md-0{padding-right:0!important}.pe-md-1{padding-right:.25rem!important}.pe-md-2{padding-right:.5rem!important}.pe-md-3{padding-right:1rem!important}.pe-md-4{padding-right:1.5rem!important}.pe-md-5{padding-right:3rem!important}.pb-md-0{padding-bottom:0!important}.pb-md-1{padding-bottom:.25rem!important}.pb-md-2{padding-bottom:.5rem!important}.pb-md-3{padding-bottom:1rem!important}.pb-md-4{padding-bottom:1.5rem!important}.pb-md-5{padding-bottom:3rem!important}.ps-md-0{padding-left:0!important}.ps-md-1{padding-left:.25rem!important}.ps-md-2{padding-left:.5rem!important}.ps-md-3{padding-left:1rem!important}.ps-md-4{padding-left:1.5rem!important}.ps-md-5{padding-left:3rem!important}.text-md-start{text-align:left!important}.text-md-end{text-align:right!important}.text-md-center{text-align:center!important}}@media (min-width:992px){.float-lg-start{float:left!important}.float-lg-end{float:right!important}.float-lg-none{float:none!important}.d-lg-inline{display:inline!important}.d-lg-inline-block{display:inline-block!important}.d-lg-block{display:block!important}.d-lg-grid{display:grid!important}.d-lg-table{display:table!important}.d-lg-table-row{display:table-row!important}.d-lg-table-cell{display:table-cell!important}.d-lg-flex{display:flex!important}.d-lg-inline-flex{display:inline-flex!important}.d-lg-none{display:none!important}.flex-lg-fill{flex:1 1 auto!important}.flex-lg-row{flex-direction:row!important}.flex-lg-column{flex-direction:column!important}.flex-lg-row-reverse{flex-direction:row-reverse!important}.flex-lg-column-reverse{flex-direction:column-reverse!important}.flex-lg-grow-0{flex-grow:0!important}.flex-lg-grow-1{flex-grow:1!important}.flex-lg-shrink-0{flex-shrink:0!important}.flex-lg-shrink-1{flex-shrink:1!important}.flex-lg-wrap{flex-wrap:wrap!important}.flex-lg-nowrap{flex-wrap:nowrap!important}.flex-lg-wrap-reverse{flex-wrap:wrap-reverse!important}.gap-lg-0{gap:0!important}.gap-lg-1{gap:.25rem!important}.gap-lg-2{gap:.5rem!important}.gap-lg-3{gap:1rem!important}.gap-lg-4{gap:1.5rem!important}.gap-lg-5{gap:3rem!important}.justify-content-lg-start{justify-content:flex-start!important}.justify-content-lg-end{justify-content:flex-end!important}.justify-content-lg-center{justify-content:center!important}.justify-content-lg-between{justify-content:space-between!important}.justify-content-lg-around{justify-content:space-around!important}.justify-content-lg-evenly{justify-content:space-evenly!important}.align-items-lg-start{align-items:flex-start!important}.align-items-lg-end{align-items:flex-end!important}.align-items-lg-center{align-items:center!important}.align-items-lg-baseline{align-items:baseline!important}.align-items-lg-stretch{align-items:stretch!important}.align-content-lg-start{align-content:flex-start!important}.align-content-lg-end{align-content:flex-end!important}.align-content-lg-center{align-content:center!important}.align-content-lg-between{align-content:space-between!important}.align-content-lg-around{align-content:space-around!important}.align-content-lg-stretch{align-content:stretch!important}.align-self-lg-auto{align-self:auto!important}.align-self-lg-start{align-self:flex-start!important}.align-self-lg-end{align-self:flex-end!important}.align-self-lg-center{align-self:center!important}.align-self-lg-baseline{align-self:baseline!important}.align-self-lg-stretch{align-self:stretch!important}.order-lg-first{order:-1!important}.order-lg-0{order:0!important}.order-lg-1{order:1!important}.order-lg-2{order:2!important}.order-lg-3{order:3!important}.order-lg-4{order:4!important}.order-lg-5{order:5!important}.order-lg-last{order:6!important}.m-lg-0{margin:0!important}.m-lg-1{margin:.25rem!important}.m-lg-2{margin:.5rem!important}.m-lg-3{margin:1rem!important}.m-lg-4{margin:1.5rem!important}.m-lg-5{margin:3rem!important}.m-lg-auto{margin:auto!important}.mx-lg-0{margin-right:0!important;margin-left:0!important}.mx-lg-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-lg-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-lg-3{margin-right:1rem!important;margin-left:1rem!important}.mx-lg-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-lg-5{margin-right:3rem!important;margin-left:3rem!important}.mx-lg-auto{margin-right:auto!important;margin-left:auto!important}.my-lg-0{margin-top:0!important;margin-bottom:0!important}.my-lg-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-lg-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-lg-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-lg-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-lg-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-lg-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-lg-0{margin-top:0!important}.mt-lg-1{margin-top:.25rem!important}.mt-lg-2{margin-top:.5rem!important}.mt-lg-3{margin-top:1rem!important}.mt-lg-4{margin-top:1.5rem!important}.mt-lg-5{margin-top:3rem!important}.mt-lg-auto{margin-top:auto!important}.me-lg-0{margin-right:0!important}.me-lg-1{margin-right:.25rem!important}.me-lg-2{margin-right:.5rem!important}.me-lg-3{margin-right:1rem!important}.me-lg-4{margin-right:1.5rem!important}.me-lg-5{margin-right:3rem!important}.me-lg-auto{margin-right:auto!important}.mb-lg-0{margin-bottom:0!important}.mb-lg-1{margin-bottom:.25rem!important}.mb-lg-2{margin-bottom:.5rem!important}.mb-lg-3{margin-bottom:1rem!important}.mb-lg-4{margin-bottom:1.5rem!important}.mb-lg-5{margin-bottom:3rem!important}.mb-lg-auto{margin-bottom:auto!important}.ms-lg-0{margin-left:0!important}.ms-lg-1{margin-left:.25rem!important}.ms-lg-2{margin-left:.5rem!important}.ms-lg-3{margin-left:1rem!important}.ms-lg-4{margin-left:1.5rem!important}.ms-lg-5{margin-left:3rem!important}.ms-lg-auto{margin-left:auto!important}.p-lg-0{padding:0!important}.p-lg-1{padding:.25rem!important}.p-lg-2{padding:.5rem!important}.p-lg-3{padding:1rem!important}.p-lg-4{padding:1.5rem!important}.p-lg-5{padding:3rem!important}.px-lg-0{padding-right:0!important;padding-left:0!important}.px-lg-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-lg-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-lg-3{padding-right:1rem!important;padding-left:1rem!important}.px-lg-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-lg-5{padding-right:3rem!important;padding-left:3rem!important}.py-lg-0{padding-top:0!important;padding-bottom:0!important}.py-lg-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-lg-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-lg-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-lg-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-lg-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-lg-0{padding-top:0!important}.pt-lg-1{padding-top:.25rem!important}.pt-lg-2{padding-top:.5rem!important}.pt-lg-3{padding-top:1rem!important}.pt-lg-4{padding-top:1.5rem!important}.pt-lg-5{padding-top:3rem!important}.pe-lg-0{padding-right:0!important}.pe-lg-1{padding-right:.25rem!important}.pe-lg-2{padding-right:.5rem!important}.pe-lg-3{padding-right:1rem!important}.pe-lg-4{padding-right:1.5rem!important}.pe-lg-5{padding-right:3rem!important}.pb-lg-0{padding-bottom:0!important}.pb-lg-1{padding-bottom:.25rem!important}.pb-lg-2{padding-bottom:.5rem!important}.pb-lg-3{padding-bottom:1rem!important}.pb-lg-4{padding-bottom:1.5rem!important}.pb-lg-5{padding-bottom:3rem!important}.ps-lg-0{padding-left:0!important}.ps-lg-1{padding-left:.25rem!important}.ps-lg-2{padding-left:.5rem!important}.ps-lg-3{padding-left:1rem!important}.ps-lg-4{padding-left:1.5rem!important}.ps-lg-5{padding-left:3rem!important}.text-lg-start{text-align:left!important}.text-lg-end{text-align:right!important}.text-lg-center{text-align:center!important}}@media (min-width:1200px){.float-xl-start{float:left!important}.float-xl-end{float:right!important}.float-xl-none{float:none!important}.d-xl-inline{display:inline!important}.d-xl-inline-block{display:inline-block!important}.d-xl-block{display:block!important}.d-xl-grid{display:grid!important}.d-xl-table{display:table!important}.d-xl-table-row{display:table-row!important}.d-xl-table-cell{display:table-cell!important}.d-xl-flex{display:flex!important}.d-xl-inline-flex{display:inline-flex!important}.d-xl-none{display:none!important}.flex-xl-fill{flex:1 1 auto!important}.flex-xl-row{flex-direction:row!important}.flex-xl-column{flex-direction:column!important}.flex-xl-row-reverse{flex-direction:row-reverse!important}.flex-xl-column-reverse{flex-direction:column-reverse!important}.flex-xl-grow-0{flex-grow:0!important}.flex-xl-grow-1{flex-grow:1!important}.flex-xl-shrink-0{flex-shrink:0!important}.flex-xl-shrink-1{flex-shrink:1!important}.flex-xl-wrap{flex-wrap:wrap!important}.flex-xl-nowrap{flex-wrap:nowrap!important}.flex-xl-wrap-reverse{flex-wrap:wrap-reverse!important}.gap-xl-0{gap:0!important}.gap-xl-1{gap:.25rem!important}.gap-xl-2{gap:.5rem!important}.gap-xl-3{gap:1rem!important}.gap-xl-4{gap:1.5rem!important}.gap-xl-5{gap:3rem!important}.justify-content-xl-start{justify-content:flex-start!important}.justify-content-xl-end{justify-content:flex-end!important}.justify-content-xl-center{justify-content:center!important}.justify-content-xl-between{justify-content:space-between!important}.justify-content-xl-around{justify-content:space-around!important}.justify-content-xl-evenly{justify-content:space-evenly!important}.align-items-xl-start{align-items:flex-start!important}.align-items-xl-end{align-items:flex-end!important}.align-items-xl-center{align-items:center!important}.align-items-xl-baseline{align-items:baseline!important}.align-items-xl-stretch{align-items:stretch!important}.align-content-xl-start{align-content:flex-start!important}.align-content-xl-end{align-content:flex-end!important}.align-content-xl-center{align-content:center!important}.align-content-xl-between{align-content:space-between!important}.align-content-xl-around{align-content:space-around!important}.align-content-xl-stretch{align-content:stretch!important}.align-self-xl-auto{align-self:auto!important}.align-self-xl-start{align-self:flex-start!important}.align-self-xl-end{align-self:flex-end!important}.align-self-xl-center{align-self:center!important}.align-self-xl-baseline{align-self:baseline!important}.align-self-xl-stretch{align-self:stretch!important}.order-xl-first{order:-1!important}.order-xl-0{order:0!important}.order-xl-1{order:1!important}.order-xl-2{order:2!important}.order-xl-3{order:3!important}.order-xl-4{order:4!important}.order-xl-5{order:5!important}.order-xl-last{order:6!important}.m-xl-0{margin:0!important}.m-xl-1{margin:.25rem!important}.m-xl-2{margin:.5rem!important}.m-xl-3{margin:1rem!important}.m-xl-4{margin:1.5rem!important}.m-xl-5{margin:3rem!important}.m-xl-auto{margin:auto!important}.mx-xl-0{margin-right:0!important;margin-left:0!important}.mx-xl-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-xl-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-xl-3{margin-right:1rem!important;margin-left:1rem!important}.mx-xl-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-xl-5{margin-right:3rem!important;margin-left:3rem!important}.mx-xl-auto{margin-right:auto!important;margin-left:auto!important}.my-xl-0{margin-top:0!important;margin-bottom:0!important}.my-xl-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-xl-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-xl-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-xl-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-xl-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-xl-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-xl-0{margin-top:0!important}.mt-xl-1{margin-top:.25rem!important}.mt-xl-2{margin-top:.5rem!important}.mt-xl-3{margin-top:1rem!important}.mt-xl-4{margin-top:1.5rem!important}.mt-xl-5{margin-top:3rem!important}.mt-xl-auto{margin-top:auto!important}.me-xl-0{margin-right:0!important}.me-xl-1{margin-right:.25rem!important}.me-xl-2{margin-right:.5rem!important}.me-xl-3{margin-right:1rem!important}.me-xl-4{margin-right:1.5rem!important}.me-xl-5{margin-right:3rem!important}.me-xl-auto{margin-right:auto!important}.mb-xl-0{margin-bottom:0!important}.mb-xl-1{margin-bottom:.25rem!important}.mb-xl-2{margin-bottom:.5rem!important}.mb-xl-3{margin-bottom:1rem!important}.mb-xl-4{margin-bottom:1.5rem!important}.mb-xl-5{margin-bottom:3rem!important}.mb-xl-auto{margin-bottom:auto!important}.ms-xl-0{margin-left:0!important}.ms-xl-1{margin-left:.25rem!important}.ms-xl-2{margin-left:.5rem!important}.ms-xl-3{margin-left:1rem!important}.ms-xl-4{margin-left:1.5rem!important}.ms-xl-5{margin-left:3rem!important}.ms-xl-auto{margin-left:auto!important}.p-xl-0{padding:0!important}.p-xl-1{padding:.25rem!important}.p-xl-2{padding:.5rem!important}.p-xl-3{padding:1rem!important}.p-xl-4{padding:1.5rem!important}.p-xl-5{padding:3rem!important}.px-xl-0{padding-right:0!important;padding-left:0!important}.px-xl-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-xl-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-xl-3{padding-right:1rem!important;padding-left:1rem!important}.px-xl-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-xl-5{padding-right:3rem!important;padding-left:3rem!important}.py-xl-0{padding-top:0!important;padding-bottom:0!important}.py-xl-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-xl-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-xl-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-xl-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-xl-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-xl-0{padding-top:0!important}.pt-xl-1{padding-top:.25rem!important}.pt-xl-2{padding-top:.5rem!important}.pt-xl-3{padding-top:1rem!important}.pt-xl-4{padding-top:1.5rem!important}.pt-xl-5{padding-top:3rem!important}.pe-xl-0{padding-right:0!important}.pe-xl-1{padding-right:.25rem!important}.pe-xl-2{padding-right:.5rem!important}.pe-xl-3{padding-right:1rem!important}.pe-xl-4{padding-right:1.5rem!important}.pe-xl-5{padding-right:3rem!important}.pb-xl-0{padding-bottom:0!important}.pb-xl-1{padding-bottom:.25rem!important}.pb-xl-2{padding-bottom:.5rem!important}.pb-xl-3{padding-bottom:1rem!important}.pb-xl-4{padding-bottom:1.5rem!important}.pb-xl-5{padding-bottom:3rem!important}.ps-xl-0{padding-left:0!important}.ps-xl-1{padding-left:.25rem!important}.ps-xl-2{padding-left:.5rem!important}.ps-xl-3{padding-left:1rem!important}.ps-xl-4{padding-left:1.5rem!important}.ps-xl-5{padding-left:3rem!important}.text-xl-start{text-align:left!important}.text-xl-end{text-align:right!important}.text-xl-center{text-align:center!important}}@media (min-width:1400px){.float-xxl-start{float:left!important}.float-xxl-end{float:right!important}.float-xxl-none{float:none!important}.d-xxl-inline{display:inline!important}.d-xxl-inline-block{display:inline-block!important}.d-xxl-block{display:block!important}.d-xxl-grid{display:grid!important}.d-xxl-table{display:table!important}.d-xxl-table-row{display:table-row!important}.d-xxl-table-cell{display:table-cell!important}.d-xxl-flex{display:flex!important}.d-xxl-inline-flex{display:inline-flex!important}.d-xxl-none{display:none!important}.flex-xxl-fill{flex:1 1 auto!important}.flex-xxl-row{flex-direction:row!important}.flex-xxl-column{flex-direction:column!important}.flex-xxl-row-reverse{flex-direction:row-reverse!important}.flex-xxl-column-reverse{flex-direction:column-reverse!important}.flex-xxl-grow-0{flex-grow:0!important}.flex-xxl-grow-1{flex-grow:1!important}.flex-xxl-shrink-0{flex-shrink:0!important}.flex-xxl-shrink-1{flex-shrink:1!important}.flex-xxl-wrap{flex-wrap:wrap!important}.flex-xxl-nowrap{flex-wrap:nowrap!important}.flex-xxl-wrap-reverse{flex-wrap:wrap-reverse!important}.gap-xxl-0{gap:0!important}.gap-xxl-1{gap:.25rem!important}.gap-xxl-2{gap:.5rem!important}.gap-xxl-3{gap:1rem!important}.gap-xxl-4{gap:1.5rem!important}.gap-xxl-5{gap:3rem!important}.justify-content-xxl-start{justify-content:flex-start!important}.justify-content-xxl-end{justify-content:flex-end!important}.justify-content-xxl-center{justify-content:center!important}.justify-content-xxl-between{justify-content:space-between!important}.justify-content-xxl-around{justify-content:space-around!important}.justify-content-xxl-evenly{justify-content:space-evenly!important}.align-items-xxl-start{align-items:flex-start!important}.align-items-xxl-end{align-items:flex-end!important}.align-items-xxl-center{align-items:center!important}.align-items-xxl-baseline{align-items:baseline!important}.align-items-xxl-stretch{align-items:stretch!important}.align-content-xxl-start{align-content:flex-start!important}.align-content-xxl-end{align-content:flex-end!important}.align-content-xxl-center{align-content:center!important}.align-content-xxl-between{align-content:space-between!important}.align-content-xxl-around{align-content:space-around!important}.align-content-xxl-stretch{align-content:stretch!important}.align-self-xxl-auto{align-self:auto!important}.align-self-xxl-start{align-self:flex-start!important}.align-self-xxl-end{align-self:flex-end!important}.align-self-xxl-center{align-self:center!important}.align-self-xxl-baseline{align-self:baseline!important}.align-self-xxl-stretch{align-self:stretch!important}.order-xxl-first{order:-1!important}.order-xxl-0{order:0!important}.order-xxl-1{order:1!important}.order-xxl-2{order:2!important}.order-xxl-3{order:3!important}.order-xxl-4{order:4!important}.order-xxl-5{order:5!important}.order-xxl-last{order:6!important}.m-xxl-0{margin:0!important}.m-xxl-1{margin:.25rem!important}.m-xxl-2{margin:.5rem!important}.m-xxl-3{margin:1rem!important}.m-xxl-4{margin:1.5rem!important}.m-xxl-5{margin:3rem!important}.m-xxl-auto{margin:auto!important}.mx-xxl-0{margin-right:0!important;margin-left:0!important}.mx-xxl-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-xxl-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-xxl-3{margin-right:1rem!important;margin-left:1rem!important}.mx-xxl-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-xxl-5{margin-right:3rem!important;margin-left:3rem!important}.mx-xxl-auto{margin-right:auto!important;margin-left:auto!important}.my-xxl-0{margin-top:0!important;margin-bottom:0!important}.my-xxl-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-xxl-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-xxl-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-xxl-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-xxl-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-xxl-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-xxl-0{margin-top:0!important}.mt-xxl-1{margin-top:.25rem!important}.mt-xxl-2{margin-top:.5rem!important}.mt-xxl-3{margin-top:1rem!important}.mt-xxl-4{margin-top:1.5rem!important}.mt-xxl-5{margin-top:3rem!important}.mt-xxl-auto{margin-top:auto!important}.me-xxl-0{margin-right:0!important}.me-xxl-1{margin-right:.25rem!important}.me-xxl-2{margin-right:.5rem!important}.me-xxl-3{margin-right:1rem!important}.me-xxl-4{margin-right:1.5rem!important}.me-xxl-5{margin-right:3rem!important}.me-xxl-auto{margin-right:auto!important}.mb-xxl-0{margin-bottom:0!important}.mb-xxl-1{margin-bottom:.25rem!important}.mb-xxl-2{margin-bottom:.5rem!important}.mb-xxl-3{margin-bottom:1rem!important}.mb-xxl-4{margin-bottom:1.5rem!important}.mb-xxl-5{margin-bottom:3rem!important}.mb-xxl-auto{margin-bottom:auto!important}.ms-xxl-0{margin-left:0!important}.ms-xxl-1{margin-left:.25rem!important}.ms-xxl-2{margin-left:.5rem!important}.ms-xxl-3{margin-left:1rem!important}.ms-xxl-4{margin-left:1.5rem!important}.ms-xxl-5{margin-left:3rem!important}.ms-xxl-auto{margin-left:auto!important}.p-xxl-0{padding:0!important}.p-xxl-1{padding:.25rem!important}.p-xxl-2{padding:.5rem!important}.p-xxl-3{padding:1rem!important}.p-xxl-4{padding:1.5rem!important}.p-xxl-5{padding:3rem!important}.px-xxl-0{padding-right:0!important;padding-left:0!important}.px-xxl-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-xxl-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-xxl-3{padding-right:1rem!important;padding-left:1rem!important}.px-xxl-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-xxl-5{padding-right:3rem!important;padding-left:3rem!important}.py-xxl-0{padding-top:0!important;padding-bottom:0!important}.py-xxl-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-xxl-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-xxl-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-xxl-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-xxl-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-xxl-0{padding-top:0!important}.pt-xxl-1{padding-top:.25rem!important}.pt-xxl-2{padding-top:.5rem!important}.pt-xxl-3{padding-top:1rem!important}.pt-xxl-4{padding-top:1.5rem!important}.pt-xxl-5{padding-top:3rem!important}.pe-xxl-0{padding-right:0!important}.pe-xxl-1{padding-right:.25rem!important}.pe-xxl-2{padding-right:.5rem!important}.pe-xxl-3{padding-right:1rem!important}.pe-xxl-4{padding-right:1.5rem!important}.pe-xxl-5{padding-right:3rem!important}.pb-xxl-0{padding-bottom:0!important}.pb-xxl-1{padding-bottom:.25rem!important}.pb-xxl-2{padding-bottom:.5rem!important}.pb-xxl-3{padding-bottom:1rem!important}.pb-xxl-4{padding-bottom:1.5rem!important}.pb-xxl-5{padding-bottom:3rem!important}.ps-xxl-0{padding-left:0!important}.ps-xxl-1{padding-left:.25rem!important}.ps-xxl-2{padding-left:.5rem!important}.ps-xxl-3{padding-left:1rem!important}.ps-xxl-4{padding-left:1.5rem!important}.ps-xxl-5{padding-left:3rem!important}.text-xxl-start{text-align:left!important}.text-xxl-end{text-align:right!important}.text-xxl-center{text-align:center!important}}@media (min-width:1200px){.fs-1{font-size:2.5rem!important}.fs-2{font-size:2rem!important}.fs-3{font-size:1.75rem!important}.fs-4{font-size:1.5rem!important}.fs-sm-1{font-size:2.5rem!important}.fs-sm-2{font-size:2rem!important}.fs-sm-3{font-size:1.75rem!important}.fs-sm-4{font-size:1.5rem!important}.fs-md-1{font-size:2.5rem!important}.fs-md-2{font-size:2rem!important}.fs-md-3{font-size:1.75rem!important}.fs-md-4{font-size:1.5rem!important}.fs-lg-1{font-size:2.5rem!important}.fs-lg-2{font-size:2rem!important}.fs-lg-3{font-size:1.75rem!important}.fs-lg-4{font-size:1.5rem!important}}@media print{.d-print-inline{display:inline!important}.d-print-inline-block{display:inline-block!important}.d-print-block{display:block!important}.d-print-grid{display:grid!important}.d-print-table{display:table!important}.d-print-table-row{display:table-row!important}.d-print-table-cell{display:table-cell!important}.d-print-flex{display:flex!important}.d-print-inline-flex{display:inline-flex!important}.d-print-none{display:none!important}} -/*# sourceMappingURL=bootstrap.min.css.map */ \ No newline at end of file diff --git a/static/assets/css/bootstrap.min.css.map b/static/assets/css/bootstrap.min.css.map deleted file mode 100644 index e69de29b..00000000 diff --git a/static/assets/css/flaticon.css b/static/assets/css/flaticon.css deleted file mode 100644 index af40b678..00000000 --- a/static/assets/css/flaticon.css +++ /dev/null @@ -1,179 +0,0 @@ -/* -Flaticon icon font: Flaticon -*/ -@font-face { - font-family: "Flaticon"; - src: url("../../assets/webfonts/Flaticon.eot"); - src: url("../../assets/webfonts/Flaticon.eot?#iefix") format("embedded-opentype"), - url("../../assets/webfonts/Flaticon.woff2") format("woff2"), - url("../../assets/webfonts/Flaticon.woff") format("woff"), - url("../../assets/webfonts/Flaticon.ttf") format("truetype"), - url("../../assets/webfonts/Flaticon.svg#Flaticon") format("svg"); - font-weight: normal; - font-style: normal; -} -@media screen and (-webkit-min-device-pixel-ratio:0) { - @font-face { - font-family: "Flaticon"; - src: url("../../assets/webfonts/Flaticon.svg#Flaticon") format("svg"); - } -} -[class^="flaticon-"]:before, [class*=" flaticon-"]:before, -[class^="flaticon-"]:after, [class*=" flaticon-"]:after { - font-family: Flaticon; - font-style: normal; -} - -.flaticon-video-conference:before { content: "\f100"; } -.flaticon-bank:before { content: "\f101"; } -.flaticon-manufacturing:before { content: "\f102"; } -.flaticon-oil:before { content: "\f103"; } -.flaticon-oil-1:before { content: "\f104"; } -.flaticon-suitcase:before { content: "\f105"; } -.flaticon-refresh:before { content: "\f106"; } -.flaticon-checking:before { content: "\f107"; } -.flaticon-hacker:before { content: "\f108"; } -.flaticon-antivirus:before { content: "\f109"; } -.flaticon-internet:before { content: "\f10a"; } -.flaticon-edit:before { content: "\f10b"; } -.flaticon-promotion:before { content: "\f10c"; } -.flaticon-email:before { content: "\f10d"; } -.flaticon-education:before { content: "\f10e"; } -.flaticon-project-management:before { content: "\f10f"; } -.flaticon-social-media:before { content: "\f110"; } -.flaticon-sketch:before { content: "\f111"; } -.flaticon-enterprise:before { content: "\f112"; } -.flaticon-verified:before { content: "\f113"; } -.flaticon-www:before { content: "\f114"; } -.flaticon-data:before { content: "\f115"; } -.flaticon-book:before { content: "\f116"; } -.flaticon-heart:before { content: "\f117"; } -.flaticon-growth:before { content: "\f118"; } -.flaticon-fast-time:before { content: "\f119"; } -.flaticon-domain:before { content: "\f11a"; } -.flaticon-brain:before { content: "\f11b"; } -.flaticon-innovation:before { content: "\f11c"; } -.flaticon-chip:before { content: "\f11d"; } -.flaticon-tools:before { content: "\f11e"; } -.flaticon-startup:before { content: "\f11f"; } -.flaticon-smartphone:before { content: "\f120"; } -.flaticon-process:before { content: "\f121"; } -.flaticon-calendar:before { content: "\f122"; } -.flaticon-shopping-cart:before { content: "\f123"; } -.flaticon-calendar-1:before { content: "\f124"; } -.flaticon-coin:before { content: "\f125"; } -.flaticon-idea:before { content: "\f126"; } -.flaticon-thinking:before { content: "\f127"; } -.flaticon-paper-plane:before { content: "\f128"; } -.flaticon-debit-card:before { content: "\f129"; } -.flaticon-checklist:before { content: "\f12a"; } -.flaticon-university:before { content: "\f12b"; } -.flaticon-database:before { content: "\f12c"; } -.flaticon-promotion-1:before { content: "\f12d"; } -.flaticon-wifi:before { content: "\f12e"; } -.flaticon-soap:before { content: "\f12f"; } -.flaticon-diamond:before { content: "\f130"; } -.flaticon-planet-earth:before { content: "\f131"; } -.flaticon-folder:before { content: "\f132"; } -.flaticon-online-shop:before { content: "\f133"; } -.flaticon-quality:before { content: "\f134"; } -.flaticon-darts:before { content: "\f135"; } -.flaticon-garbage:before { content: "\f136"; } -.flaticon-idea-1:before { content: "\f137"; } -.flaticon-rating:before { content: "\f138"; } -.flaticon-key:before { content: "\f139"; } -.flaticon-discuss-issue:before { content: "\f13a"; } -.flaticon-megaphone:before { content: "\f13b"; } -.flaticon-target:before { content: "\f13c"; } -.flaticon-megaphone-1:before { content: "\f13d"; } -.flaticon-push-pin:before { content: "\f13e"; } -.flaticon-cloud-computing:before { content: "\f13f"; } -.flaticon-megaphone-2:before { content: "\f140"; } -.flaticon-around:before { content: "\f141"; } -.flaticon-rating-1:before { content: "\f142"; } -.flaticon-cake:before { content: "\f143"; } -.flaticon-research:before { content: "\f144"; } -.flaticon-locked:before { content: "\f145"; } -.flaticon-fingerprint:before { content: "\f146"; } -.flaticon-mental-health:before { content: "\f147"; } -.flaticon-folder-1:before { content: "\f148"; } -.flaticon-customer-service:before { content: "\f149"; } -.flaticon-analysis-1:before { content: "\f14a"; } -.flaticon-compose:before { content: "\f14b"; } -.flaticon-graduation-cap:before { content: "\f14c"; } -.flaticon-credit-card:before { content: "\f14d"; } -.flaticon-online-course:before { content: "\f14e"; } -.flaticon-stats:before { content: "\f14f"; } -.flaticon-business-and-trade:before { content: "\f150"; } -.flaticon-business-plan:before { content: "\f151"; } -.flaticon-money:before { content: "\f152"; } -.flaticon-goal:before { content: "\f153"; } -.flaticon-employee:before { content: "\f154"; } -.flaticon-business:before { content: "\f155"; } -.flaticon-money-1:before { content: "\f156"; } -.flaticon-business-1:before { content: "\f157"; } -.flaticon-launch:before { content: "\f158"; } -.flaticon-strategy:before { content: "\f159"; } -.flaticon-contract:before { content: "\f15a"; } -.flaticon-stock-market:before { content: "\f15b"; } -.flaticon-profits:before { content: "\f15c"; } -.flaticon-development:before { content: "\f15d"; } -.flaticon-puzzle-pieces:before { content: "\f15e"; } -.flaticon-benefit:before { content: "\f15f"; } -.flaticon-handcuff:before { content: "\f160"; } -.flaticon-piggy-bank:before { content: "\f161"; } -.flaticon-chat:before { content: "\f162"; } -.flaticon-planning:before { content: "\f163"; } -.flaticon-development-1:before { content: "\f164"; } -.flaticon-solution:before { content: "\f165"; } -.flaticon-contract-1:before { content: "\f166"; } -.flaticon-consultant-services:before { content: "\f167"; } -.flaticon-file:before { content: "\f168"; } -.flaticon-rating-2:before { content: "\f169"; } -.flaticon-group:before { content: "\f16a"; } -.flaticon-trophy:before { content: "\f16b"; } -.flaticon-digital-marketing:before { content: "\f16c"; } -.flaticon-statistics:before { content: "\f16d"; } -.flaticon-consulting:before { content: "\f16e"; } -.flaticon-graphic-design:before { content: "\f16f"; } -.flaticon-development-2:before { content: "\f170"; } -.flaticon-play-button:before { content: "\f171"; } -.flaticon-log-in:before { content: "\f172"; } -.flaticon-automation:before { content: "\f173"; } -.flaticon-customer-support:before { content: "\f174"; } -.flaticon-cloud-storage:before { content: "\f175"; } -.flaticon-mobile-app:before { content: "\f176"; } -.flaticon-ux:before { content: "\f177"; } -.flaticon-seo:before { content: "\f178"; } -.flaticon-application:before { content: "\f179"; } -.flaticon-bullhorn:before { content: "\f17a"; } -.flaticon-web-development:before { content: "\f17b"; } -.flaticon-development-3:before { content: "\f17c"; } -.flaticon-digital-marketing-1:before { content: "\f17d"; } -.flaticon-analytics:before { content: "\f17e"; } -.flaticon-solution-1:before { content: "\f17f"; } -.flaticon-consulting-1:before { content: "\f180"; } -.flaticon-analysis-2:before { content: "\f181"; } -.flaticon-project-management-1:before { content: "\f182"; } -.flaticon-analytics-1:before { content: "\f183"; } -.flaticon-innovation-1:before { content: "\f184"; } -.flaticon-growth-1:before { content: "\f185"; } -.flaticon-consultation:before { content: "\f186"; } -.flaticon-product-design:before { content: "\f187"; } -.flaticon-web-design:before { content: "\f188"; } -.flaticon-logo:before { content: "\f189"; } -.flaticon-print:before { content: "\f18a"; } -.flaticon-graphic-design-1:before { content: "\f18b"; } -.flaticon-motion-graphic:before { content: "\f18c"; } -.flaticon-engineering:before { content: "\f18d"; } -.flaticon-secure-data:before { content: "\f18e"; } -.flaticon-license:before { content: "\f18f"; } -.flaticon-planning-1:before { content: "\f190"; } -.flaticon-analytics-2:before { content: "\f191"; } -.flaticon-scalable:before { content: "\f192"; } -.flaticon-system-update:before { content: "\f193"; } -.flaticon-left-arrow:before { content: "\f194"; } -.flaticon-right-arrow:before { content: "\f195"; } -.flaticon-quotation:before { content: "\f196"; } -.flaticon-apple:before { content: "\f197"; } -.flaticon-play-store:before { content: "\f198"; } \ No newline at end of file diff --git a/static/assets/css/fontawesome.min.css b/static/assets/css/fontawesome.min.css deleted file mode 100644 index 656a5074..00000000 --- a/static/assets/css/fontawesome.min.css +++ /dev/null @@ -1,5 +0,0 @@ -/*! - * Font Awesome Free 5.15.1 by @fontawesome - https://fontawesome.com - * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) - */ -.fa,.fab,.fad,.fal,.far,.fas{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:inline-block;font-style:normal;font-variant:normal;text-rendering:auto;line-height:1}.fa-lg{font-size:1.33333em;line-height:.75em;vertical-align:-.0667em}.fa-xs{font-size:.75em}.fa-sm{font-size:.875em}.fa-1x{font-size:1em}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-6x{font-size:6em}.fa-7x{font-size:7em}.fa-8x{font-size:8em}.fa-9x{font-size:9em}.fa-10x{font-size:10em}.fa-fw{text-align:center;width:1.25em}.fa-ul{list-style-type:none;margin-left:2.5em;padding-left:0}.fa-ul>li{position:relative}.fa-li{left:-2em;position:absolute;text-align:center;width:2em;line-height:inherit}.fa-border{border:.08em solid #eee;border-radius:.1em;padding:.2em .25em .15em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left,.fab.fa-pull-left,.fal.fa-pull-left,.far.fa-pull-left,.fas.fa-pull-left{margin-right:.3em}.fa.fa-pull-right,.fab.fa-pull-right,.fal.fa-pull-right,.far.fa-pull-right,.fas.fa-pull-right{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s linear infinite;animation:fa-spin 2s linear infinite}.fa-pulse{-webkit-animation:fa-spin 1s steps(8) infinite;animation:fa-spin 1s steps(8) infinite}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}.fa-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";-webkit-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";-webkit-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";-webkit-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";-webkit-transform:scaleX(-1);transform:scaleX(-1)}.fa-flip-vertical{-webkit-transform:scaleY(-1);transform:scaleY(-1)}.fa-flip-both,.fa-flip-horizontal.fa-flip-vertical,.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)"}.fa-flip-both,.fa-flip-horizontal.fa-flip-vertical{-webkit-transform:scale(-1);transform:scale(-1)}:root .fa-flip-both,:root .fa-flip-horizontal,:root .fa-flip-vertical,:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270{-webkit-filter:none;filter:none}.fa-stack{display:inline-block;height:2em;line-height:2em;position:relative;vertical-align:middle;width:2.5em}.fa-stack-1x,.fa-stack-2x{left:0;position:absolute;text-align:center;width:100%}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-500px:before{content:"\f26e"}.fa-accessible-icon:before{content:"\f368"}.fa-accusoft:before{content:"\f369"}.fa-acquisitions-incorporated:before{content:"\f6af"}.fa-ad:before{content:"\f641"}.fa-address-book:before{content:"\f2b9"}.fa-address-card:before{content:"\f2bb"}.fa-adjust:before{content:"\f042"}.fa-adn:before{content:"\f170"}.fa-adversal:before{content:"\f36a"}.fa-affiliatetheme:before{content:"\f36b"}.fa-air-freshener:before{content:"\f5d0"}.fa-airbnb:before{content:"\f834"}.fa-algolia:before{content:"\f36c"}.fa-align-center:before{content:"\f037"}.fa-align-justify:before{content:"\f039"}.fa-align-left:before{content:"\f036"}.fa-align-right:before{content:"\f038"}.fa-alipay:before{content:"\f642"}.fa-allergies:before{content:"\f461"}.fa-amazon:before{content:"\f270"}.fa-amazon-pay:before{content:"\f42c"}.fa-ambulance:before{content:"\f0f9"}.fa-american-sign-language-interpreting:before{content:"\f2a3"}.fa-amilia:before{content:"\f36d"}.fa-anchor:before{content:"\f13d"}.fa-android:before{content:"\f17b"}.fa-angellist:before{content:"\f209"}.fa-angle-double-down:before{content:"\f103"}.fa-angle-double-left:before{content:"\f100"}.fa-angle-double-right:before{content:"\f101"}.fa-angle-double-up:before{content:"\f102"}.fa-angle-down:before{content:"\f107"}.fa-angle-left:before{content:"\f104"}.fa-angle-right:before{content:"\f105"}.fa-angle-up:before{content:"\f106"}.fa-angry:before{content:"\f556"}.fa-angrycreative:before{content:"\f36e"}.fa-angular:before{content:"\f420"}.fa-ankh:before{content:"\f644"}.fa-app-store:before{content:"\f36f"}.fa-app-store-ios:before{content:"\f370"}.fa-apper:before{content:"\f371"}.fa-apple:before{content:"\f179"}.fa-apple-alt:before{content:"\f5d1"}.fa-apple-pay:before{content:"\f415"}.fa-archive:before{content:"\f187"}.fa-archway:before{content:"\f557"}.fa-arrow-alt-circle-down:before{content:"\f358"}.fa-arrow-alt-circle-left:before{content:"\f359"}.fa-arrow-alt-circle-right:before{content:"\f35a"}.fa-arrow-alt-circle-up:before{content:"\f35b"}.fa-arrow-circle-down:before{content:"\f0ab"}.fa-arrow-circle-left:before{content:"\f0a8"}.fa-arrow-circle-right:before{content:"\f0a9"}.fa-arrow-circle-up:before{content:"\f0aa"}.fa-arrow-down:before{content:"\f063"}.fa-arrow-left:before{content:"\f060"}.fa-arrow-right:before{content:"\f061"}.fa-arrow-up:before{content:"\f062"}.fa-arrows-alt:before{content:"\f0b2"}.fa-arrows-alt-h:before{content:"\f337"}.fa-arrows-alt-v:before{content:"\f338"}.fa-artstation:before{content:"\f77a"}.fa-assistive-listening-systems:before{content:"\f2a2"}.fa-asterisk:before{content:"\f069"}.fa-asymmetrik:before{content:"\f372"}.fa-at:before{content:"\f1fa"}.fa-atlas:before{content:"\f558"}.fa-atlassian:before{content:"\f77b"}.fa-atom:before{content:"\f5d2"}.fa-audible:before{content:"\f373"}.fa-audio-description:before{content:"\f29e"}.fa-autoprefixer:before{content:"\f41c"}.fa-avianex:before{content:"\f374"}.fa-aviato:before{content:"\f421"}.fa-award:before{content:"\f559"}.fa-aws:before{content:"\f375"}.fa-baby:before{content:"\f77c"}.fa-baby-carriage:before{content:"\f77d"}.fa-backspace:before{content:"\f55a"}.fa-backward:before{content:"\f04a"}.fa-bacon:before{content:"\f7e5"}.fa-bacteria:before{content:"\e059"}.fa-bacterium:before{content:"\e05a"}.fa-bahai:before{content:"\f666"}.fa-balance-scale:before{content:"\f24e"}.fa-balance-scale-left:before{content:"\f515"}.fa-balance-scale-right:before{content:"\f516"}.fa-ban:before{content:"\f05e"}.fa-band-aid:before{content:"\f462"}.fa-bandcamp:before{content:"\f2d5"}.fa-barcode:before{content:"\f02a"}.fa-bars:before{content:"\f0c9"}.fa-baseball-ball:before{content:"\f433"}.fa-basketball-ball:before{content:"\f434"}.fa-bath:before{content:"\f2cd"}.fa-battery-empty:before{content:"\f244"}.fa-battery-full:before{content:"\f240"}.fa-battery-half:before{content:"\f242"}.fa-battery-quarter:before{content:"\f243"}.fa-battery-three-quarters:before{content:"\f241"}.fa-battle-net:before{content:"\f835"}.fa-bed:before{content:"\f236"}.fa-beer:before{content:"\f0fc"}.fa-behance:before{content:"\f1b4"}.fa-behance-square:before{content:"\f1b5"}.fa-bell:before{content:"\f0f3"}.fa-bell-slash:before{content:"\f1f6"}.fa-bezier-curve:before{content:"\f55b"}.fa-bible:before{content:"\f647"}.fa-bicycle:before{content:"\f206"}.fa-biking:before{content:"\f84a"}.fa-bimobject:before{content:"\f378"}.fa-binoculars:before{content:"\f1e5"}.fa-biohazard:before{content:"\f780"}.fa-birthday-cake:before{content:"\f1fd"}.fa-bitbucket:before{content:"\f171"}.fa-bitcoin:before{content:"\f379"}.fa-bity:before{content:"\f37a"}.fa-black-tie:before{content:"\f27e"}.fa-blackberry:before{content:"\f37b"}.fa-blender:before{content:"\f517"}.fa-blender-phone:before{content:"\f6b6"}.fa-blind:before{content:"\f29d"}.fa-blog:before{content:"\f781"}.fa-blogger:before{content:"\f37c"}.fa-blogger-b:before{content:"\f37d"}.fa-bluetooth:before{content:"\f293"}.fa-bluetooth-b:before{content:"\f294"}.fa-bold:before{content:"\f032"}.fa-bolt:before{content:"\f0e7"}.fa-bomb:before{content:"\f1e2"}.fa-bone:before{content:"\f5d7"}.fa-bong:before{content:"\f55c"}.fa-book:before{content:"\f02d"}.fa-book-dead:before{content:"\f6b7"}.fa-book-medical:before{content:"\f7e6"}.fa-book-open:before{content:"\f518"}.fa-book-reader:before{content:"\f5da"}.fa-bookmark:before{content:"\f02e"}.fa-bootstrap:before{content:"\f836"}.fa-border-all:before{content:"\f84c"}.fa-border-none:before{content:"\f850"}.fa-border-style:before{content:"\f853"}.fa-bowling-ball:before{content:"\f436"}.fa-box:before{content:"\f466"}.fa-box-open:before{content:"\f49e"}.fa-box-tissue:before{content:"\e05b"}.fa-boxes:before{content:"\f468"}.fa-braille:before{content:"\f2a1"}.fa-brain:before{content:"\f5dc"}.fa-bread-slice:before{content:"\f7ec"}.fa-briefcase:before{content:"\f0b1"}.fa-briefcase-medical:before{content:"\f469"}.fa-broadcast-tower:before{content:"\f519"}.fa-broom:before{content:"\f51a"}.fa-brush:before{content:"\f55d"}.fa-btc:before{content:"\f15a"}.fa-buffer:before{content:"\f837"}.fa-bug:before{content:"\f188"}.fa-building:before{content:"\f1ad"}.fa-bullhorn:before{content:"\f0a1"}.fa-bullseye:before{content:"\f140"}.fa-burn:before{content:"\f46a"}.fa-buromobelexperte:before{content:"\f37f"}.fa-bus:before{content:"\f207"}.fa-bus-alt:before{content:"\f55e"}.fa-business-time:before{content:"\f64a"}.fa-buy-n-large:before{content:"\f8a6"}.fa-buysellads:before{content:"\f20d"}.fa-calculator:before{content:"\f1ec"}.fa-calendar:before{content:"\f133"}.fa-calendar-alt:before{content:"\f073"}.fa-calendar-check:before{content:"\f274"}.fa-calendar-day:before{content:"\f783"}.fa-calendar-minus:before{content:"\f272"}.fa-calendar-plus:before{content:"\f271"}.fa-calendar-times:before{content:"\f273"}.fa-calendar-week:before{content:"\f784"}.fa-camera:before{content:"\f030"}.fa-camera-retro:before{content:"\f083"}.fa-campground:before{content:"\f6bb"}.fa-canadian-maple-leaf:before{content:"\f785"}.fa-candy-cane:before{content:"\f786"}.fa-cannabis:before{content:"\f55f"}.fa-capsules:before{content:"\f46b"}.fa-car:before{content:"\f1b9"}.fa-car-alt:before{content:"\f5de"}.fa-car-battery:before{content:"\f5df"}.fa-car-crash:before{content:"\f5e1"}.fa-car-side:before{content:"\f5e4"}.fa-caravan:before{content:"\f8ff"}.fa-caret-down:before{content:"\f0d7"}.fa-caret-left:before{content:"\f0d9"}.fa-caret-right:before{content:"\f0da"}.fa-caret-square-down:before{content:"\f150"}.fa-caret-square-left:before{content:"\f191"}.fa-caret-square-right:before{content:"\f152"}.fa-caret-square-up:before{content:"\f151"}.fa-caret-up:before{content:"\f0d8"}.fa-carrot:before{content:"\f787"}.fa-cart-arrow-down:before{content:"\f218"}.fa-cart-plus:before{content:"\f217"}.fa-cash-register:before{content:"\f788"}.fa-cat:before{content:"\f6be"}.fa-cc-amazon-pay:before{content:"\f42d"}.fa-cc-amex:before{content:"\f1f3"}.fa-cc-apple-pay:before{content:"\f416"}.fa-cc-diners-club:before{content:"\f24c"}.fa-cc-discover:before{content:"\f1f2"}.fa-cc-jcb:before{content:"\f24b"}.fa-cc-mastercard:before{content:"\f1f1"}.fa-cc-paypal:before{content:"\f1f4"}.fa-cc-stripe:before{content:"\f1f5"}.fa-cc-visa:before{content:"\f1f0"}.fa-centercode:before{content:"\f380"}.fa-centos:before{content:"\f789"}.fa-certificate:before{content:"\f0a3"}.fa-chair:before{content:"\f6c0"}.fa-chalkboard:before{content:"\f51b"}.fa-chalkboard-teacher:before{content:"\f51c"}.fa-charging-station:before{content:"\f5e7"}.fa-chart-area:before{content:"\f1fe"}.fa-chart-bar:before{content:"\f080"}.fa-chart-line:before{content:"\f201"}.fa-chart-pie:before{content:"\f200"}.fa-check:before{content:"\f00c"}.fa-check-circle:before{content:"\f058"}.fa-check-double:before{content:"\f560"}.fa-check-square:before{content:"\f14a"}.fa-cheese:before{content:"\f7ef"}.fa-chess:before{content:"\f439"}.fa-chess-bishop:before{content:"\f43a"}.fa-chess-board:before{content:"\f43c"}.fa-chess-king:before{content:"\f43f"}.fa-chess-knight:before{content:"\f441"}.fa-chess-pawn:before{content:"\f443"}.fa-chess-queen:before{content:"\f445"}.fa-chess-rook:before{content:"\f447"}.fa-chevron-circle-down:before{content:"\f13a"}.fa-chevron-circle-left:before{content:"\f137"}.fa-chevron-circle-right:before{content:"\f138"}.fa-chevron-circle-up:before{content:"\f139"}.fa-chevron-down:before{content:"\f078"}.fa-chevron-left:before{content:"\f053"}.fa-chevron-right:before{content:"\f054"}.fa-chevron-up:before{content:"\f077"}.fa-child:before{content:"\f1ae"}.fa-chrome:before{content:"\f268"}.fa-chromecast:before{content:"\f838"}.fa-church:before{content:"\f51d"}.fa-circle:before{content:"\f111"}.fa-circle-notch:before{content:"\f1ce"}.fa-city:before{content:"\f64f"}.fa-clinic-medical:before{content:"\f7f2"}.fa-clipboard:before{content:"\f328"}.fa-clipboard-check:before{content:"\f46c"}.fa-clipboard-list:before{content:"\f46d"}.fa-clock:before{content:"\f017"}.fa-clone:before{content:"\f24d"}.fa-closed-captioning:before{content:"\f20a"}.fa-cloud:before{content:"\f0c2"}.fa-cloud-download-alt:before{content:"\f381"}.fa-cloud-meatball:before{content:"\f73b"}.fa-cloud-moon:before{content:"\f6c3"}.fa-cloud-moon-rain:before{content:"\f73c"}.fa-cloud-rain:before{content:"\f73d"}.fa-cloud-showers-heavy:before{content:"\f740"}.fa-cloud-sun:before{content:"\f6c4"}.fa-cloud-sun-rain:before{content:"\f743"}.fa-cloud-upload-alt:before{content:"\f382"}.fa-cloudflare:before{content:"\e07d"}.fa-cloudscale:before{content:"\f383"}.fa-cloudsmith:before{content:"\f384"}.fa-cloudversify:before{content:"\f385"}.fa-cocktail:before{content:"\f561"}.fa-code:before{content:"\f121"}.fa-code-branch:before{content:"\f126"}.fa-codepen:before{content:"\f1cb"}.fa-codiepie:before{content:"\f284"}.fa-coffee:before{content:"\f0f4"}.fa-cog:before{content:"\f013"}.fa-cogs:before{content:"\f085"}.fa-coins:before{content:"\f51e"}.fa-columns:before{content:"\f0db"}.fa-comment:before{content:"\f075"}.fa-comment-alt:before{content:"\f27a"}.fa-comment-dollar:before{content:"\f651"}.fa-comment-dots:before{content:"\f4ad"}.fa-comment-medical:before{content:"\f7f5"}.fa-comment-slash:before{content:"\f4b3"}.fa-comments:before{content:"\f086"}.fa-comments-dollar:before{content:"\f653"}.fa-compact-disc:before{content:"\f51f"}.fa-compass:before{content:"\f14e"}.fa-compress:before{content:"\f066"}.fa-compress-alt:before{content:"\f422"}.fa-compress-arrows-alt:before{content:"\f78c"}.fa-concierge-bell:before{content:"\f562"}.fa-confluence:before{content:"\f78d"}.fa-connectdevelop:before{content:"\f20e"}.fa-contao:before{content:"\f26d"}.fa-cookie:before{content:"\f563"}.fa-cookie-bite:before{content:"\f564"}.fa-copy:before{content:"\f0c5"}.fa-copyright:before{content:"\f1f9"}.fa-cotton-bureau:before{content:"\f89e"}.fa-couch:before{content:"\f4b8"}.fa-cpanel:before{content:"\f388"}.fa-creative-commons:before{content:"\f25e"}.fa-creative-commons-by:before{content:"\f4e7"}.fa-creative-commons-nc:before{content:"\f4e8"}.fa-creative-commons-nc-eu:before{content:"\f4e9"}.fa-creative-commons-nc-jp:before{content:"\f4ea"}.fa-creative-commons-nd:before{content:"\f4eb"}.fa-creative-commons-pd:before{content:"\f4ec"}.fa-creative-commons-pd-alt:before{content:"\f4ed"}.fa-creative-commons-remix:before{content:"\f4ee"}.fa-creative-commons-sa:before{content:"\f4ef"}.fa-creative-commons-sampling:before{content:"\f4f0"}.fa-creative-commons-sampling-plus:before{content:"\f4f1"}.fa-creative-commons-share:before{content:"\f4f2"}.fa-creative-commons-zero:before{content:"\f4f3"}.fa-credit-card:before{content:"\f09d"}.fa-critical-role:before{content:"\f6c9"}.fa-crop:before{content:"\f125"}.fa-crop-alt:before{content:"\f565"}.fa-cross:before{content:"\f654"}.fa-crosshairs:before{content:"\f05b"}.fa-crow:before{content:"\f520"}.fa-crown:before{content:"\f521"}.fa-crutch:before{content:"\f7f7"}.fa-css3:before{content:"\f13c"}.fa-css3-alt:before{content:"\f38b"}.fa-cube:before{content:"\f1b2"}.fa-cubes:before{content:"\f1b3"}.fa-cut:before{content:"\f0c4"}.fa-cuttlefish:before{content:"\f38c"}.fa-d-and-d:before{content:"\f38d"}.fa-d-and-d-beyond:before{content:"\f6ca"}.fa-dailymotion:before{content:"\e052"}.fa-dashcube:before{content:"\f210"}.fa-database:before{content:"\f1c0"}.fa-deaf:before{content:"\f2a4"}.fa-deezer:before{content:"\e077"}.fa-delicious:before{content:"\f1a5"}.fa-democrat:before{content:"\f747"}.fa-deploydog:before{content:"\f38e"}.fa-deskpro:before{content:"\f38f"}.fa-desktop:before{content:"\f108"}.fa-dev:before{content:"\f6cc"}.fa-deviantart:before{content:"\f1bd"}.fa-dharmachakra:before{content:"\f655"}.fa-dhl:before{content:"\f790"}.fa-diagnoses:before{content:"\f470"}.fa-diaspora:before{content:"\f791"}.fa-dice:before{content:"\f522"}.fa-dice-d20:before{content:"\f6cf"}.fa-dice-d6:before{content:"\f6d1"}.fa-dice-five:before{content:"\f523"}.fa-dice-four:before{content:"\f524"}.fa-dice-one:before{content:"\f525"}.fa-dice-six:before{content:"\f526"}.fa-dice-three:before{content:"\f527"}.fa-dice-two:before{content:"\f528"}.fa-digg:before{content:"\f1a6"}.fa-digital-ocean:before{content:"\f391"}.fa-digital-tachograph:before{content:"\f566"}.fa-directions:before{content:"\f5eb"}.fa-discord:before{content:"\f392"}.fa-discourse:before{content:"\f393"}.fa-disease:before{content:"\f7fa"}.fa-divide:before{content:"\f529"}.fa-dizzy:before{content:"\f567"}.fa-dna:before{content:"\f471"}.fa-dochub:before{content:"\f394"}.fa-docker:before{content:"\f395"}.fa-dog:before{content:"\f6d3"}.fa-dollar-sign:before{content:"\f155"}.fa-dolly:before{content:"\f472"}.fa-dolly-flatbed:before{content:"\f474"}.fa-donate:before{content:"\f4b9"}.fa-door-closed:before{content:"\f52a"}.fa-door-open:before{content:"\f52b"}.fa-dot-circle:before{content:"\f192"}.fa-dove:before{content:"\f4ba"}.fa-download:before{content:"\f019"}.fa-draft2digital:before{content:"\f396"}.fa-drafting-compass:before{content:"\f568"}.fa-dragon:before{content:"\f6d5"}.fa-draw-polygon:before{content:"\f5ee"}.fa-dribbble:before{content:"\f17d"}.fa-dribbble-square:before{content:"\f397"}.fa-dropbox:before{content:"\f16b"}.fa-drum:before{content:"\f569"}.fa-drum-steelpan:before{content:"\f56a"}.fa-drumstick-bite:before{content:"\f6d7"}.fa-drupal:before{content:"\f1a9"}.fa-dumbbell:before{content:"\f44b"}.fa-dumpster:before{content:"\f793"}.fa-dumpster-fire:before{content:"\f794"}.fa-dungeon:before{content:"\f6d9"}.fa-dyalog:before{content:"\f399"}.fa-earlybirds:before{content:"\f39a"}.fa-ebay:before{content:"\f4f4"}.fa-edge:before{content:"\f282"}.fa-edge-legacy:before{content:"\e078"}.fa-edit:before{content:"\f044"}.fa-egg:before{content:"\f7fb"}.fa-eject:before{content:"\f052"}.fa-elementor:before{content:"\f430"}.fa-ellipsis-h:before{content:"\f141"}.fa-ellipsis-v:before{content:"\f142"}.fa-ello:before{content:"\f5f1"}.fa-ember:before{content:"\f423"}.fa-empire:before{content:"\f1d1"}.fa-envelope:before{content:"\f0e0"}.fa-envelope-open:before{content:"\f2b6"}.fa-envelope-open-text:before{content:"\f658"}.fa-envelope-square:before{content:"\f199"}.fa-envira:before{content:"\f299"}.fa-equals:before{content:"\f52c"}.fa-eraser:before{content:"\f12d"}.fa-erlang:before{content:"\f39d"}.fa-ethereum:before{content:"\f42e"}.fa-ethernet:before{content:"\f796"}.fa-etsy:before{content:"\f2d7"}.fa-euro-sign:before{content:"\f153"}.fa-evernote:before{content:"\f839"}.fa-exchange-alt:before{content:"\f362"}.fa-exclamation:before{content:"\f12a"}.fa-exclamation-circle:before{content:"\f06a"}.fa-exclamation-triangle:before{content:"\f071"}.fa-expand:before{content:"\f065"}.fa-expand-alt:before{content:"\f424"}.fa-expand-arrows-alt:before{content:"\f31e"}.fa-expeditedssl:before{content:"\f23e"}.fa-external-link-alt:before{content:"\f35d"}.fa-external-link-square-alt:before{content:"\f360"}.fa-eye:before{content:"\f06e"}.fa-eye-dropper:before{content:"\f1fb"}.fa-eye-slash:before{content:"\f070"}.fa-facebook:before{content:"\f09a"}.fa-facebook-f:before{content:"\f39e"}.fa-facebook-messenger:before{content:"\f39f"}.fa-facebook-square:before{content:"\f082"}.fa-fan:before{content:"\f863"}.fa-fantasy-flight-games:before{content:"\f6dc"}.fa-fast-backward:before{content:"\f049"}.fa-fast-forward:before{content:"\f050"}.fa-faucet:before{content:"\e005"}.fa-fax:before{content:"\f1ac"}.fa-feather:before{content:"\f52d"}.fa-feather-alt:before{content:"\f56b"}.fa-fedex:before{content:"\f797"}.fa-fedora:before{content:"\f798"}.fa-female:before{content:"\f182"}.fa-fighter-jet:before{content:"\f0fb"}.fa-figma:before{content:"\f799"}.fa-file:before{content:"\f15b"}.fa-file-alt:before{content:"\f15c"}.fa-file-archive:before{content:"\f1c6"}.fa-file-audio:before{content:"\f1c7"}.fa-file-code:before{content:"\f1c9"}.fa-file-contract:before{content:"\f56c"}.fa-file-csv:before{content:"\f6dd"}.fa-file-download:before{content:"\f56d"}.fa-file-excel:before{content:"\f1c3"}.fa-file-export:before{content:"\f56e"}.fa-file-image:before{content:"\f1c5"}.fa-file-import:before{content:"\f56f"}.fa-file-invoice:before{content:"\f570"}.fa-file-invoice-dollar:before{content:"\f571"}.fa-file-medical:before{content:"\f477"}.fa-file-medical-alt:before{content:"\f478"}.fa-file-pdf:before{content:"\f1c1"}.fa-file-powerpoint:before{content:"\f1c4"}.fa-file-prescription:before{content:"\f572"}.fa-file-signature:before{content:"\f573"}.fa-file-upload:before{content:"\f574"}.fa-file-video:before{content:"\f1c8"}.fa-file-word:before{content:"\f1c2"}.fa-fill:before{content:"\f575"}.fa-fill-drip:before{content:"\f576"}.fa-film:before{content:"\f008"}.fa-filter:before{content:"\f0b0"}.fa-fingerprint:before{content:"\f577"}.fa-fire:before{content:"\f06d"}.fa-fire-alt:before{content:"\f7e4"}.fa-fire-extinguisher:before{content:"\f134"}.fa-firefox:before{content:"\f269"}.fa-firefox-browser:before{content:"\e007"}.fa-first-aid:before{content:"\f479"}.fa-first-order:before{content:"\f2b0"}.fa-first-order-alt:before{content:"\f50a"}.fa-firstdraft:before{content:"\f3a1"}.fa-fish:before{content:"\f578"}.fa-fist-raised:before{content:"\f6de"}.fa-flag:before{content:"\f024"}.fa-flag-checkered:before{content:"\f11e"}.fa-flag-usa:before{content:"\f74d"}.fa-flask:before{content:"\f0c3"}.fa-flickr:before{content:"\f16e"}.fa-flipboard:before{content:"\f44d"}.fa-flushed:before{content:"\f579"}.fa-fly:before{content:"\f417"}.fa-folder:before{content:"\f07b"}.fa-folder-minus:before{content:"\f65d"}.fa-folder-open:before{content:"\f07c"}.fa-folder-plus:before{content:"\f65e"}.fa-font:before{content:"\f031"}.fa-font-awesome:before{content:"\f2b4"}.fa-font-awesome-alt:before{content:"\f35c"}.fa-font-awesome-flag:before{content:"\f425"}.fa-font-awesome-logo-full:before{content:"\f4e6"}.fa-fonticons:before{content:"\f280"}.fa-fonticons-fi:before{content:"\f3a2"}.fa-football-ball:before{content:"\f44e"}.fa-fort-awesome:before{content:"\f286"}.fa-fort-awesome-alt:before{content:"\f3a3"}.fa-forumbee:before{content:"\f211"}.fa-forward:before{content:"\f04e"}.fa-foursquare:before{content:"\f180"}.fa-free-code-camp:before{content:"\f2c5"}.fa-freebsd:before{content:"\f3a4"}.fa-frog:before{content:"\f52e"}.fa-frown:before{content:"\f119"}.fa-frown-open:before{content:"\f57a"}.fa-fulcrum:before{content:"\f50b"}.fa-funnel-dollar:before{content:"\f662"}.fa-futbol:before{content:"\f1e3"}.fa-galactic-republic:before{content:"\f50c"}.fa-galactic-senate:before{content:"\f50d"}.fa-gamepad:before{content:"\f11b"}.fa-gas-pump:before{content:"\f52f"}.fa-gavel:before{content:"\f0e3"}.fa-gem:before{content:"\f3a5"}.fa-genderless:before{content:"\f22d"}.fa-get-pocket:before{content:"\f265"}.fa-gg:before{content:"\f260"}.fa-gg-circle:before{content:"\f261"}.fa-ghost:before{content:"\f6e2"}.fa-gift:before{content:"\f06b"}.fa-gifts:before{content:"\f79c"}.fa-git:before{content:"\f1d3"}.fa-git-alt:before{content:"\f841"}.fa-git-square:before{content:"\f1d2"}.fa-github:before{content:"\f09b"}.fa-github-alt:before{content:"\f113"}.fa-github-square:before{content:"\f092"}.fa-gitkraken:before{content:"\f3a6"}.fa-gitlab:before{content:"\f296"}.fa-gitter:before{content:"\f426"}.fa-glass-cheers:before{content:"\f79f"}.fa-glass-martini:before{content:"\f000"}.fa-glass-martini-alt:before{content:"\f57b"}.fa-glass-whiskey:before{content:"\f7a0"}.fa-glasses:before{content:"\f530"}.fa-glide:before{content:"\f2a5"}.fa-glide-g:before{content:"\f2a6"}.fa-globe:before{content:"\f0ac"}.fa-globe-africa:before{content:"\f57c"}.fa-globe-americas:before{content:"\f57d"}.fa-globe-asia:before{content:"\f57e"}.fa-globe-europe:before{content:"\f7a2"}.fa-gofore:before{content:"\f3a7"}.fa-golf-ball:before{content:"\f450"}.fa-goodreads:before{content:"\f3a8"}.fa-goodreads-g:before{content:"\f3a9"}.fa-google:before{content:"\f1a0"}.fa-google-drive:before{content:"\f3aa"}.fa-google-pay:before{content:"\e079"}.fa-google-play:before{content:"\f3ab"}.fa-google-plus:before{content:"\f2b3"}.fa-google-plus-g:before{content:"\f0d5"}.fa-google-plus-square:before{content:"\f0d4"}.fa-google-wallet:before{content:"\f1ee"}.fa-gopuram:before{content:"\f664"}.fa-graduation-cap:before{content:"\f19d"}.fa-gratipay:before{content:"\f184"}.fa-grav:before{content:"\f2d6"}.fa-greater-than:before{content:"\f531"}.fa-greater-than-equal:before{content:"\f532"}.fa-grimace:before{content:"\f57f"}.fa-grin:before{content:"\f580"}.fa-grin-alt:before{content:"\f581"}.fa-grin-beam:before{content:"\f582"}.fa-grin-beam-sweat:before{content:"\f583"}.fa-grin-hearts:before{content:"\f584"}.fa-grin-squint:before{content:"\f585"}.fa-grin-squint-tears:before{content:"\f586"}.fa-grin-stars:before{content:"\f587"}.fa-grin-tears:before{content:"\f588"}.fa-grin-tongue:before{content:"\f589"}.fa-grin-tongue-squint:before{content:"\f58a"}.fa-grin-tongue-wink:before{content:"\f58b"}.fa-grin-wink:before{content:"\f58c"}.fa-grip-horizontal:before{content:"\f58d"}.fa-grip-lines:before{content:"\f7a4"}.fa-grip-lines-vertical:before{content:"\f7a5"}.fa-grip-vertical:before{content:"\f58e"}.fa-gripfire:before{content:"\f3ac"}.fa-grunt:before{content:"\f3ad"}.fa-guilded:before{content:"\e07e"}.fa-guitar:before{content:"\f7a6"}.fa-gulp:before{content:"\f3ae"}.fa-h-square:before{content:"\f0fd"}.fa-hacker-news:before{content:"\f1d4"}.fa-hacker-news-square:before{content:"\f3af"}.fa-hackerrank:before{content:"\f5f7"}.fa-hamburger:before{content:"\f805"}.fa-hammer:before{content:"\f6e3"}.fa-hamsa:before{content:"\f665"}.fa-hand-holding:before{content:"\f4bd"}.fa-hand-holding-heart:before{content:"\f4be"}.fa-hand-holding-medical:before{content:"\e05c"}.fa-hand-holding-usd:before{content:"\f4c0"}.fa-hand-holding-water:before{content:"\f4c1"}.fa-hand-lizard:before{content:"\f258"}.fa-hand-middle-finger:before{content:"\f806"}.fa-hand-paper:before{content:"\f256"}.fa-hand-peace:before{content:"\f25b"}.fa-hand-point-down:before{content:"\f0a7"}.fa-hand-point-left:before{content:"\f0a5"}.fa-hand-point-right:before{content:"\f0a4"}.fa-hand-point-up:before{content:"\f0a6"}.fa-hand-pointer:before{content:"\f25a"}.fa-hand-rock:before{content:"\f255"}.fa-hand-scissors:before{content:"\f257"}.fa-hand-sparkles:before{content:"\e05d"}.fa-hand-spock:before{content:"\f259"}.fa-hands:before{content:"\f4c2"}.fa-hands-helping:before{content:"\f4c4"}.fa-hands-wash:before{content:"\e05e"}.fa-handshake:before{content:"\f2b5"}.fa-handshake-alt-slash:before{content:"\e05f"}.fa-handshake-slash:before{content:"\e060"}.fa-hanukiah:before{content:"\f6e6"}.fa-hard-hat:before{content:"\f807"}.fa-hashtag:before{content:"\f292"}.fa-hat-cowboy:before{content:"\f8c0"}.fa-hat-cowboy-side:before{content:"\f8c1"}.fa-hat-wizard:before{content:"\f6e8"}.fa-hdd:before{content:"\f0a0"}.fa-head-side-cough:before{content:"\e061"}.fa-head-side-cough-slash:before{content:"\e062"}.fa-head-side-mask:before{content:"\e063"}.fa-head-side-virus:before{content:"\e064"}.fa-heading:before{content:"\f1dc"}.fa-headphones:before{content:"\f025"}.fa-headphones-alt:before{content:"\f58f"}.fa-headset:before{content:"\f590"}.fa-heart:before{content:"\f004"}.fa-heart-broken:before{content:"\f7a9"}.fa-heartbeat:before{content:"\f21e"}.fa-helicopter:before{content:"\f533"}.fa-highlighter:before{content:"\f591"}.fa-hiking:before{content:"\f6ec"}.fa-hippo:before{content:"\f6ed"}.fa-hips:before{content:"\f452"}.fa-hire-a-helper:before{content:"\f3b0"}.fa-history:before{content:"\f1da"}.fa-hive:before{content:"\e07f"}.fa-hockey-puck:before{content:"\f453"}.fa-holly-berry:before{content:"\f7aa"}.fa-home:before{content:"\f015"}.fa-hooli:before{content:"\f427"}.fa-hornbill:before{content:"\f592"}.fa-horse:before{content:"\f6f0"}.fa-horse-head:before{content:"\f7ab"}.fa-hospital:before{content:"\f0f8"}.fa-hospital-alt:before{content:"\f47d"}.fa-hospital-symbol:before{content:"\f47e"}.fa-hospital-user:before{content:"\f80d"}.fa-hot-tub:before{content:"\f593"}.fa-hotdog:before{content:"\f80f"}.fa-hotel:before{content:"\f594"}.fa-hotjar:before{content:"\f3b1"}.fa-hourglass:before{content:"\f254"}.fa-hourglass-end:before{content:"\f253"}.fa-hourglass-half:before{content:"\f252"}.fa-hourglass-start:before{content:"\f251"}.fa-house-damage:before{content:"\f6f1"}.fa-house-user:before{content:"\e065"}.fa-houzz:before{content:"\f27c"}.fa-hryvnia:before{content:"\f6f2"}.fa-html5:before{content:"\f13b"}.fa-hubspot:before{content:"\f3b2"}.fa-i-cursor:before{content:"\f246"}.fa-ice-cream:before{content:"\f810"}.fa-icicles:before{content:"\f7ad"}.fa-icons:before{content:"\f86d"}.fa-id-badge:before{content:"\f2c1"}.fa-id-card:before{content:"\f2c2"}.fa-id-card-alt:before{content:"\f47f"}.fa-ideal:before{content:"\e013"}.fa-igloo:before{content:"\f7ae"}.fa-image:before{content:"\f03e"}.fa-images:before{content:"\f302"}.fa-imdb:before{content:"\f2d8"}.fa-inbox:before{content:"\f01c"}.fa-indent:before{content:"\f03c"}.fa-industry:before{content:"\f275"}.fa-infinity:before{content:"\f534"}.fa-info:before{content:"\f129"}.fa-info-circle:before{content:"\f05a"}.fa-innosoft:before{content:"\e080"}.fa-instagram:before{content:"\f16d"}.fa-instagram-square:before{content:"\e055"}.fa-instalod:before{content:"\e081"}.fa-intercom:before{content:"\f7af"}.fa-internet-explorer:before{content:"\f26b"}.fa-invision:before{content:"\f7b0"}.fa-ioxhost:before{content:"\f208"}.fa-italic:before{content:"\f033"}.fa-itch-io:before{content:"\f83a"}.fa-itunes:before{content:"\f3b4"}.fa-itunes-note:before{content:"\f3b5"}.fa-java:before{content:"\f4e4"}.fa-jedi:before{content:"\f669"}.fa-jedi-order:before{content:"\f50e"}.fa-jenkins:before{content:"\f3b6"}.fa-jira:before{content:"\f7b1"}.fa-joget:before{content:"\f3b7"}.fa-joint:before{content:"\f595"}.fa-joomla:before{content:"\f1aa"}.fa-journal-whills:before{content:"\f66a"}.fa-js:before{content:"\f3b8"}.fa-js-square:before{content:"\f3b9"}.fa-jsfiddle:before{content:"\f1cc"}.fa-kaaba:before{content:"\f66b"}.fa-kaggle:before{content:"\f5fa"}.fa-key:before{content:"\f084"}.fa-keybase:before{content:"\f4f5"}.fa-keyboard:before{content:"\f11c"}.fa-keycdn:before{content:"\f3ba"}.fa-khanda:before{content:"\f66d"}.fa-kickstarter:before{content:"\f3bb"}.fa-kickstarter-k:before{content:"\f3bc"}.fa-kiss:before{content:"\f596"}.fa-kiss-beam:before{content:"\f597"}.fa-kiss-wink-heart:before{content:"\f598"}.fa-kiwi-bird:before{content:"\f535"}.fa-korvue:before{content:"\f42f"}.fa-landmark:before{content:"\f66f"}.fa-language:before{content:"\f1ab"}.fa-laptop:before{content:"\f109"}.fa-laptop-code:before{content:"\f5fc"}.fa-laptop-house:before{content:"\e066"}.fa-laptop-medical:before{content:"\f812"}.fa-laravel:before{content:"\f3bd"}.fa-lastfm:before{content:"\f202"}.fa-lastfm-square:before{content:"\f203"}.fa-laugh:before{content:"\f599"}.fa-laugh-beam:before{content:"\f59a"}.fa-laugh-squint:before{content:"\f59b"}.fa-laugh-wink:before{content:"\f59c"}.fa-layer-group:before{content:"\f5fd"}.fa-leaf:before{content:"\f06c"}.fa-leanpub:before{content:"\f212"}.fa-lemon:before{content:"\f094"}.fa-less:before{content:"\f41d"}.fa-less-than:before{content:"\f536"}.fa-less-than-equal:before{content:"\f537"}.fa-level-down-alt:before{content:"\f3be"}.fa-level-up-alt:before{content:"\f3bf"}.fa-life-ring:before{content:"\f1cd"}.fa-lightbulb:before{content:"\f0eb"}.fa-line:before{content:"\f3c0"}.fa-link:before{content:"\f0c1"}.fa-linkedin:before{content:"\f08c"}.fa-linkedin-in:before{content:"\f0e1"}.fa-linode:before{content:"\f2b8"}.fa-linux:before{content:"\f17c"}.fa-lira-sign:before{content:"\f195"}.fa-list:before{content:"\f03a"}.fa-list-alt:before{content:"\f022"}.fa-list-ol:before{content:"\f0cb"}.fa-list-ul:before{content:"\f0ca"}.fa-location-arrow:before{content:"\f124"}.fa-lock:before{content:"\f023"}.fa-lock-open:before{content:"\f3c1"}.fa-long-arrow-alt-down:before{content:"\f309"}.fa-long-arrow-alt-left:before{content:"\f30a"}.fa-long-arrow-alt-right:before{content:"\f30b"}.fa-long-arrow-alt-up:before{content:"\f30c"}.fa-low-vision:before{content:"\f2a8"}.fa-luggage-cart:before{content:"\f59d"}.fa-lungs:before{content:"\f604"}.fa-lungs-virus:before{content:"\e067"}.fa-lyft:before{content:"\f3c3"}.fa-magento:before{content:"\f3c4"}.fa-magic:before{content:"\f0d0"}.fa-magnet:before{content:"\f076"}.fa-mail-bulk:before{content:"\f674"}.fa-mailchimp:before{content:"\f59e"}.fa-male:before{content:"\f183"}.fa-mandalorian:before{content:"\f50f"}.fa-map:before{content:"\f279"}.fa-map-marked:before{content:"\f59f"}.fa-map-marked-alt:before{content:"\f5a0"}.fa-map-marker:before{content:"\f041"}.fa-map-marker-alt:before{content:"\f3c5"}.fa-map-pin:before{content:"\f276"}.fa-map-signs:before{content:"\f277"}.fa-markdown:before{content:"\f60f"}.fa-marker:before{content:"\f5a1"}.fa-mars:before{content:"\f222"}.fa-mars-double:before{content:"\f227"}.fa-mars-stroke:before{content:"\f229"}.fa-mars-stroke-h:before{content:"\f22b"}.fa-mars-stroke-v:before{content:"\f22a"}.fa-mask:before{content:"\f6fa"}.fa-mastodon:before{content:"\f4f6"}.fa-maxcdn:before{content:"\f136"}.fa-mdb:before{content:"\f8ca"}.fa-medal:before{content:"\f5a2"}.fa-medapps:before{content:"\f3c6"}.fa-medium:before{content:"\f23a"}.fa-medium-m:before{content:"\f3c7"}.fa-medkit:before{content:"\f0fa"}.fa-medrt:before{content:"\f3c8"}.fa-meetup:before{content:"\f2e0"}.fa-megaport:before{content:"\f5a3"}.fa-meh:before{content:"\f11a"}.fa-meh-blank:before{content:"\f5a4"}.fa-meh-rolling-eyes:before{content:"\f5a5"}.fa-memory:before{content:"\f538"}.fa-mendeley:before{content:"\f7b3"}.fa-menorah:before{content:"\f676"}.fa-mercury:before{content:"\f223"}.fa-meteor:before{content:"\f753"}.fa-microblog:before{content:"\e01a"}.fa-microchip:before{content:"\f2db"}.fa-microphone:before{content:"\f130"}.fa-microphone-alt:before{content:"\f3c9"}.fa-microphone-alt-slash:before{content:"\f539"}.fa-microphone-slash:before{content:"\f131"}.fa-microscope:before{content:"\f610"}.fa-microsoft:before{content:"\f3ca"}.fa-minus:before{content:"\f068"}.fa-minus-circle:before{content:"\f056"}.fa-minus-square:before{content:"\f146"}.fa-mitten:before{content:"\f7b5"}.fa-mix:before{content:"\f3cb"}.fa-mixcloud:before{content:"\f289"}.fa-mixer:before{content:"\e056"}.fa-mizuni:before{content:"\f3cc"}.fa-mobile:before{content:"\f10b"}.fa-mobile-alt:before{content:"\f3cd"}.fa-modx:before{content:"\f285"}.fa-monero:before{content:"\f3d0"}.fa-money-bill:before{content:"\f0d6"}.fa-money-bill-alt:before{content:"\f3d1"}.fa-money-bill-wave:before{content:"\f53a"}.fa-money-bill-wave-alt:before{content:"\f53b"}.fa-money-check:before{content:"\f53c"}.fa-money-check-alt:before{content:"\f53d"}.fa-monument:before{content:"\f5a6"}.fa-moon:before{content:"\f186"}.fa-mortar-pestle:before{content:"\f5a7"}.fa-mosque:before{content:"\f678"}.fa-motorcycle:before{content:"\f21c"}.fa-mountain:before{content:"\f6fc"}.fa-mouse:before{content:"\f8cc"}.fa-mouse-pointer:before{content:"\f245"}.fa-mug-hot:before{content:"\f7b6"}.fa-music:before{content:"\f001"}.fa-napster:before{content:"\f3d2"}.fa-neos:before{content:"\f612"}.fa-network-wired:before{content:"\f6ff"}.fa-neuter:before{content:"\f22c"}.fa-newspaper:before{content:"\f1ea"}.fa-nimblr:before{content:"\f5a8"}.fa-node:before{content:"\f419"}.fa-node-js:before{content:"\f3d3"}.fa-not-equal:before{content:"\f53e"}.fa-notes-medical:before{content:"\f481"}.fa-npm:before{content:"\f3d4"}.fa-ns8:before{content:"\f3d5"}.fa-nutritionix:before{content:"\f3d6"}.fa-object-group:before{content:"\f247"}.fa-object-ungroup:before{content:"\f248"}.fa-octopus-deploy:before{content:"\e082"}.fa-odnoklassniki:before{content:"\f263"}.fa-odnoklassniki-square:before{content:"\f264"}.fa-oil-can:before{content:"\f613"}.fa-old-republic:before{content:"\f510"}.fa-om:before{content:"\f679"}.fa-opencart:before{content:"\f23d"}.fa-openid:before{content:"\f19b"}.fa-opera:before{content:"\f26a"}.fa-optin-monster:before{content:"\f23c"}.fa-orcid:before{content:"\f8d2"}.fa-osi:before{content:"\f41a"}.fa-otter:before{content:"\f700"}.fa-outdent:before{content:"\f03b"}.fa-page4:before{content:"\f3d7"}.fa-pagelines:before{content:"\f18c"}.fa-pager:before{content:"\f815"}.fa-paint-brush:before{content:"\f1fc"}.fa-paint-roller:before{content:"\f5aa"}.fa-palette:before{content:"\f53f"}.fa-palfed:before{content:"\f3d8"}.fa-pallet:before{content:"\f482"}.fa-paper-plane:before{content:"\f1d8"}.fa-paperclip:before{content:"\f0c6"}.fa-parachute-box:before{content:"\f4cd"}.fa-paragraph:before{content:"\f1dd"}.fa-parking:before{content:"\f540"}.fa-passport:before{content:"\f5ab"}.fa-pastafarianism:before{content:"\f67b"}.fa-paste:before{content:"\f0ea"}.fa-patreon:before{content:"\f3d9"}.fa-pause:before{content:"\f04c"}.fa-pause-circle:before{content:"\f28b"}.fa-paw:before{content:"\f1b0"}.fa-paypal:before{content:"\f1ed"}.fa-peace:before{content:"\f67c"}.fa-pen:before{content:"\f304"}.fa-pen-alt:before{content:"\f305"}.fa-pen-fancy:before{content:"\f5ac"}.fa-pen-nib:before{content:"\f5ad"}.fa-pen-square:before{content:"\f14b"}.fa-pencil-alt:before{content:"\f303"}.fa-pencil-ruler:before{content:"\f5ae"}.fa-penny-arcade:before{content:"\f704"}.fa-people-arrows:before{content:"\e068"}.fa-people-carry:before{content:"\f4ce"}.fa-pepper-hot:before{content:"\f816"}.fa-perbyte:before{content:"\e083"}.fa-percent:before{content:"\f295"}.fa-percentage:before{content:"\f541"}.fa-periscope:before{content:"\f3da"}.fa-person-booth:before{content:"\f756"}.fa-phabricator:before{content:"\f3db"}.fa-phoenix-framework:before{content:"\f3dc"}.fa-phoenix-squadron:before{content:"\f511"}.fa-phone:before{content:"\f095"}.fa-phone-alt:before{content:"\f879"}.fa-phone-slash:before{content:"\f3dd"}.fa-phone-square:before{content:"\f098"}.fa-phone-square-alt:before{content:"\f87b"}.fa-phone-volume:before{content:"\f2a0"}.fa-photo-video:before{content:"\f87c"}.fa-php:before{content:"\f457"}.fa-pied-piper:before{content:"\f2ae"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-pied-piper-hat:before{content:"\f4e5"}.fa-pied-piper-pp:before{content:"\f1a7"}.fa-pied-piper-square:before{content:"\e01e"}.fa-piggy-bank:before{content:"\f4d3"}.fa-pills:before{content:"\f484"}.fa-pinterest:before{content:"\f0d2"}.fa-pinterest-p:before{content:"\f231"}.fa-pinterest-square:before{content:"\f0d3"}.fa-pizza-slice:before{content:"\f818"}.fa-place-of-worship:before{content:"\f67f"}.fa-plane:before{content:"\f072"}.fa-plane-arrival:before{content:"\f5af"}.fa-plane-departure:before{content:"\f5b0"}.fa-plane-slash:before{content:"\e069"}.fa-play:before{content:"\f04b"}.fa-play-circle:before{content:"\f144"}.fa-playstation:before{content:"\f3df"}.fa-plug:before{content:"\f1e6"}.fa-plus:before{content:"\f067"}.fa-plus-circle:before{content:"\f055"}.fa-plus-square:before{content:"\f0fe"}.fa-podcast:before{content:"\f2ce"}.fa-poll:before{content:"\f681"}.fa-poll-h:before{content:"\f682"}.fa-poo:before{content:"\f2fe"}.fa-poo-storm:before{content:"\f75a"}.fa-poop:before{content:"\f619"}.fa-portrait:before{content:"\f3e0"}.fa-pound-sign:before{content:"\f154"}.fa-power-off:before{content:"\f011"}.fa-pray:before{content:"\f683"}.fa-praying-hands:before{content:"\f684"}.fa-prescription:before{content:"\f5b1"}.fa-prescription-bottle:before{content:"\f485"}.fa-prescription-bottle-alt:before{content:"\f486"}.fa-print:before{content:"\f02f"}.fa-procedures:before{content:"\f487"}.fa-product-hunt:before{content:"\f288"}.fa-project-diagram:before{content:"\f542"}.fa-pump-medical:before{content:"\e06a"}.fa-pump-soap:before{content:"\e06b"}.fa-pushed:before{content:"\f3e1"}.fa-puzzle-piece:before{content:"\f12e"}.fa-python:before{content:"\f3e2"}.fa-qq:before{content:"\f1d6"}.fa-qrcode:before{content:"\f029"}.fa-question:before{content:"\f128"}.fa-question-circle:before{content:"\f059"}.fa-quidditch:before{content:"\f458"}.fa-quinscape:before{content:"\f459"}.fa-quora:before{content:"\f2c4"}.fa-quote-left:before{content:"\f10d"}.fa-quote-right:before{content:"\f10e"}.fa-quran:before{content:"\f687"}.fa-r-project:before{content:"\f4f7"}.fa-radiation:before{content:"\f7b9"}.fa-radiation-alt:before{content:"\f7ba"}.fa-rainbow:before{content:"\f75b"}.fa-random:before{content:"\f074"}.fa-raspberry-pi:before{content:"\f7bb"}.fa-ravelry:before{content:"\f2d9"}.fa-react:before{content:"\f41b"}.fa-reacteurope:before{content:"\f75d"}.fa-readme:before{content:"\f4d5"}.fa-rebel:before{content:"\f1d0"}.fa-receipt:before{content:"\f543"}.fa-record-vinyl:before{content:"\f8d9"}.fa-recycle:before{content:"\f1b8"}.fa-red-river:before{content:"\f3e3"}.fa-reddit:before{content:"\f1a1"}.fa-reddit-alien:before{content:"\f281"}.fa-reddit-square:before{content:"\f1a2"}.fa-redhat:before{content:"\f7bc"}.fa-redo:before{content:"\f01e"}.fa-redo-alt:before{content:"\f2f9"}.fa-registered:before{content:"\f25d"}.fa-remove-format:before{content:"\f87d"}.fa-renren:before{content:"\f18b"}.fa-reply:before{content:"\f3e5"}.fa-reply-all:before{content:"\f122"}.fa-replyd:before{content:"\f3e6"}.fa-republican:before{content:"\f75e"}.fa-researchgate:before{content:"\f4f8"}.fa-resolving:before{content:"\f3e7"}.fa-restroom:before{content:"\f7bd"}.fa-retweet:before{content:"\f079"}.fa-rev:before{content:"\f5b2"}.fa-ribbon:before{content:"\f4d6"}.fa-ring:before{content:"\f70b"}.fa-road:before{content:"\f018"}.fa-robot:before{content:"\f544"}.fa-rocket:before{content:"\f135"}.fa-rocketchat:before{content:"\f3e8"}.fa-rockrms:before{content:"\f3e9"}.fa-route:before{content:"\f4d7"}.fa-rss:before{content:"\f09e"}.fa-rss-square:before{content:"\f143"}.fa-ruble-sign:before{content:"\f158"}.fa-ruler:before{content:"\f545"}.fa-ruler-combined:before{content:"\f546"}.fa-ruler-horizontal:before{content:"\f547"}.fa-ruler-vertical:before{content:"\f548"}.fa-running:before{content:"\f70c"}.fa-rupee-sign:before{content:"\f156"}.fa-rust:before{content:"\e07a"}.fa-sad-cry:before{content:"\f5b3"}.fa-sad-tear:before{content:"\f5b4"}.fa-safari:before{content:"\f267"}.fa-salesforce:before{content:"\f83b"}.fa-sass:before{content:"\f41e"}.fa-satellite:before{content:"\f7bf"}.fa-satellite-dish:before{content:"\f7c0"}.fa-save:before{content:"\f0c7"}.fa-schlix:before{content:"\f3ea"}.fa-school:before{content:"\f549"}.fa-screwdriver:before{content:"\f54a"}.fa-scribd:before{content:"\f28a"}.fa-scroll:before{content:"\f70e"}.fa-sd-card:before{content:"\f7c2"}.fa-search:before{content:"\f002"}.fa-search-dollar:before{content:"\f688"}.fa-search-location:before{content:"\f689"}.fa-search-minus:before{content:"\f010"}.fa-search-plus:before{content:"\f00e"}.fa-searchengin:before{content:"\f3eb"}.fa-seedling:before{content:"\f4d8"}.fa-sellcast:before{content:"\f2da"}.fa-sellsy:before{content:"\f213"}.fa-server:before{content:"\f233"}.fa-servicestack:before{content:"\f3ec"}.fa-shapes:before{content:"\f61f"}.fa-share:before{content:"\f064"}.fa-share-alt:before{content:"\f1e0"}.fa-share-alt-square:before{content:"\f1e1"}.fa-share-square:before{content:"\f14d"}.fa-shekel-sign:before{content:"\f20b"}.fa-shield-alt:before{content:"\f3ed"}.fa-shield-virus:before{content:"\e06c"}.fa-ship:before{content:"\f21a"}.fa-shipping-fast:before{content:"\f48b"}.fa-shirtsinbulk:before{content:"\f214"}.fa-shoe-prints:before{content:"\f54b"}.fa-shopify:before{content:"\e057"}.fa-shopping-bag:before{content:"\f290"}.fa-shopping-basket:before{content:"\f291"}.fa-shopping-cart:before{content:"\f07a"}.fa-shopware:before{content:"\f5b5"}.fa-shower:before{content:"\f2cc"}.fa-shuttle-van:before{content:"\f5b6"}.fa-sign:before{content:"\f4d9"}.fa-sign-in-alt:before{content:"\f2f6"}.fa-sign-language:before{content:"\f2a7"}.fa-sign-out-alt:before{content:"\f2f5"}.fa-signal:before{content:"\f012"}.fa-signature:before{content:"\f5b7"}.fa-sim-card:before{content:"\f7c4"}.fa-simplybuilt:before{content:"\f215"}.fa-sink:before{content:"\e06d"}.fa-sistrix:before{content:"\f3ee"}.fa-sitemap:before{content:"\f0e8"}.fa-sith:before{content:"\f512"}.fa-skating:before{content:"\f7c5"}.fa-sketch:before{content:"\f7c6"}.fa-skiing:before{content:"\f7c9"}.fa-skiing-nordic:before{content:"\f7ca"}.fa-skull:before{content:"\f54c"}.fa-skull-crossbones:before{content:"\f714"}.fa-skyatlas:before{content:"\f216"}.fa-skype:before{content:"\f17e"}.fa-slack:before{content:"\f198"}.fa-slack-hash:before{content:"\f3ef"}.fa-slash:before{content:"\f715"}.fa-sleigh:before{content:"\f7cc"}.fa-sliders-h:before{content:"\f1de"}.fa-slideshare:before{content:"\f1e7"}.fa-smile:before{content:"\f118"}.fa-smile-beam:before{content:"\f5b8"}.fa-smile-wink:before{content:"\f4da"}.fa-smog:before{content:"\f75f"}.fa-smoking:before{content:"\f48d"}.fa-smoking-ban:before{content:"\f54d"}.fa-sms:before{content:"\f7cd"}.fa-snapchat:before{content:"\f2ab"}.fa-snapchat-ghost:before{content:"\f2ac"}.fa-snapchat-square:before{content:"\f2ad"}.fa-snowboarding:before{content:"\f7ce"}.fa-snowflake:before{content:"\f2dc"}.fa-snowman:before{content:"\f7d0"}.fa-snowplow:before{content:"\f7d2"}.fa-soap:before{content:"\e06e"}.fa-socks:before{content:"\f696"}.fa-solar-panel:before{content:"\f5ba"}.fa-sort:before{content:"\f0dc"}.fa-sort-alpha-down:before{content:"\f15d"}.fa-sort-alpha-down-alt:before{content:"\f881"}.fa-sort-alpha-up:before{content:"\f15e"}.fa-sort-alpha-up-alt:before{content:"\f882"}.fa-sort-amount-down:before{content:"\f160"}.fa-sort-amount-down-alt:before{content:"\f884"}.fa-sort-amount-up:before{content:"\f161"}.fa-sort-amount-up-alt:before{content:"\f885"}.fa-sort-down:before{content:"\f0dd"}.fa-sort-numeric-down:before{content:"\f162"}.fa-sort-numeric-down-alt:before{content:"\f886"}.fa-sort-numeric-up:before{content:"\f163"}.fa-sort-numeric-up-alt:before{content:"\f887"}.fa-sort-up:before{content:"\f0de"}.fa-soundcloud:before{content:"\f1be"}.fa-sourcetree:before{content:"\f7d3"}.fa-spa:before{content:"\f5bb"}.fa-space-shuttle:before{content:"\f197"}.fa-speakap:before{content:"\f3f3"}.fa-speaker-deck:before{content:"\f83c"}.fa-spell-check:before{content:"\f891"}.fa-spider:before{content:"\f717"}.fa-spinner:before{content:"\f110"}.fa-splotch:before{content:"\f5bc"}.fa-spotify:before{content:"\f1bc"}.fa-spray-can:before{content:"\f5bd"}.fa-square:before{content:"\f0c8"}.fa-square-full:before{content:"\f45c"}.fa-square-root-alt:before{content:"\f698"}.fa-squarespace:before{content:"\f5be"}.fa-stack-exchange:before{content:"\f18d"}.fa-stack-overflow:before{content:"\f16c"}.fa-stackpath:before{content:"\f842"}.fa-stamp:before{content:"\f5bf"}.fa-star:before{content:"\f005"}.fa-star-and-crescent:before{content:"\f699"}.fa-star-half:before{content:"\f089"}.fa-star-half-alt:before{content:"\f5c0"}.fa-star-of-david:before{content:"\f69a"}.fa-star-of-life:before{content:"\f621"}.fa-staylinked:before{content:"\f3f5"}.fa-steam:before{content:"\f1b6"}.fa-steam-square:before{content:"\f1b7"}.fa-steam-symbol:before{content:"\f3f6"}.fa-step-backward:before{content:"\f048"}.fa-step-forward:before{content:"\f051"}.fa-stethoscope:before{content:"\f0f1"}.fa-sticker-mule:before{content:"\f3f7"}.fa-sticky-note:before{content:"\f249"}.fa-stop:before{content:"\f04d"}.fa-stop-circle:before{content:"\f28d"}.fa-stopwatch:before{content:"\f2f2"}.fa-stopwatch-20:before{content:"\e06f"}.fa-store:before{content:"\f54e"}.fa-store-alt:before{content:"\f54f"}.fa-store-alt-slash:before{content:"\e070"}.fa-store-slash:before{content:"\e071"}.fa-strava:before{content:"\f428"}.fa-stream:before{content:"\f550"}.fa-street-view:before{content:"\f21d"}.fa-strikethrough:before{content:"\f0cc"}.fa-stripe:before{content:"\f429"}.fa-stripe-s:before{content:"\f42a"}.fa-stroopwafel:before{content:"\f551"}.fa-studiovinari:before{content:"\f3f8"}.fa-stumbleupon:before{content:"\f1a4"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-subscript:before{content:"\f12c"}.fa-subway:before{content:"\f239"}.fa-suitcase:before{content:"\f0f2"}.fa-suitcase-rolling:before{content:"\f5c1"}.fa-sun:before{content:"\f185"}.fa-superpowers:before{content:"\f2dd"}.fa-superscript:before{content:"\f12b"}.fa-supple:before{content:"\f3f9"}.fa-surprise:before{content:"\f5c2"}.fa-suse:before{content:"\f7d6"}.fa-swatchbook:before{content:"\f5c3"}.fa-swift:before{content:"\f8e1"}.fa-swimmer:before{content:"\f5c4"}.fa-swimming-pool:before{content:"\f5c5"}.fa-symfony:before{content:"\f83d"}.fa-synagogue:before{content:"\f69b"}.fa-sync:before{content:"\f021"}.fa-sync-alt:before{content:"\f2f1"}.fa-syringe:before{content:"\f48e"}.fa-table:before{content:"\f0ce"}.fa-table-tennis:before{content:"\f45d"}.fa-tablet:before{content:"\f10a"}.fa-tablet-alt:before{content:"\f3fa"}.fa-tablets:before{content:"\f490"}.fa-tachometer-alt:before{content:"\f3fd"}.fa-tag:before{content:"\f02b"}.fa-tags:before{content:"\f02c"}.fa-tape:before{content:"\f4db"}.fa-tasks:before{content:"\f0ae"}.fa-taxi:before{content:"\f1ba"}.fa-teamspeak:before{content:"\f4f9"}.fa-teeth:before{content:"\f62e"}.fa-teeth-open:before{content:"\f62f"}.fa-telegram:before{content:"\f2c6"}.fa-telegram-plane:before{content:"\f3fe"}.fa-temperature-high:before{content:"\f769"}.fa-temperature-low:before{content:"\f76b"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-tenge:before{content:"\f7d7"}.fa-terminal:before{content:"\f120"}.fa-text-height:before{content:"\f034"}.fa-text-width:before{content:"\f035"}.fa-th:before{content:"\f00a"}.fa-th-large:before{content:"\f009"}.fa-th-list:before{content:"\f00b"}.fa-the-red-yeti:before{content:"\f69d"}.fa-theater-masks:before{content:"\f630"}.fa-themeco:before{content:"\f5c6"}.fa-themeisle:before{content:"\f2b2"}.fa-thermometer:before{content:"\f491"}.fa-thermometer-empty:before{content:"\f2cb"}.fa-thermometer-full:before{content:"\f2c7"}.fa-thermometer-half:before{content:"\f2c9"}.fa-thermometer-quarter:before{content:"\f2ca"}.fa-thermometer-three-quarters:before{content:"\f2c8"}.fa-think-peaks:before{content:"\f731"}.fa-thumbs-down:before{content:"\f165"}.fa-thumbs-up:before{content:"\f164"}.fa-thumbtack:before{content:"\f08d"}.fa-ticket-alt:before{content:"\f3ff"}.fa-tiktok:before{content:"\e07b"}.fa-times:before{content:"\f00d"}.fa-times-circle:before{content:"\f057"}.fa-tint:before{content:"\f043"}.fa-tint-slash:before{content:"\f5c7"}.fa-tired:before{content:"\f5c8"}.fa-toggle-off:before{content:"\f204"}.fa-toggle-on:before{content:"\f205"}.fa-toilet:before{content:"\f7d8"}.fa-toilet-paper:before{content:"\f71e"}.fa-toilet-paper-slash:before{content:"\e072"}.fa-toolbox:before{content:"\f552"}.fa-tools:before{content:"\f7d9"}.fa-tooth:before{content:"\f5c9"}.fa-torah:before{content:"\f6a0"}.fa-torii-gate:before{content:"\f6a1"}.fa-tractor:before{content:"\f722"}.fa-trade-federation:before{content:"\f513"}.fa-trademark:before{content:"\f25c"}.fa-traffic-light:before{content:"\f637"}.fa-trailer:before{content:"\e041"}.fa-train:before{content:"\f238"}.fa-tram:before{content:"\f7da"}.fa-transgender:before{content:"\f224"}.fa-transgender-alt:before{content:"\f225"}.fa-trash:before{content:"\f1f8"}.fa-trash-alt:before{content:"\f2ed"}.fa-trash-restore:before{content:"\f829"}.fa-trash-restore-alt:before{content:"\f82a"}.fa-tree:before{content:"\f1bb"}.fa-trello:before{content:"\f181"}.fa-tripadvisor:before{content:"\f262"}.fa-trophy:before{content:"\f091"}.fa-truck:before{content:"\f0d1"}.fa-truck-loading:before{content:"\f4de"}.fa-truck-monster:before{content:"\f63b"}.fa-truck-moving:before{content:"\f4df"}.fa-truck-pickup:before{content:"\f63c"}.fa-tshirt:before{content:"\f553"}.fa-tty:before{content:"\f1e4"}.fa-tumblr:before{content:"\f173"}.fa-tumblr-square:before{content:"\f174"}.fa-tv:before{content:"\f26c"}.fa-twitch:before{content:"\f1e8"}.fa-twitter:before{content:"\f099"}.fa-twitter-square:before{content:"\f081"}.fa-typo3:before{content:"\f42b"}.fa-uber:before{content:"\f402"}.fa-ubuntu:before{content:"\f7df"}.fa-uikit:before{content:"\f403"}.fa-umbraco:before{content:"\f8e8"}.fa-umbrella:before{content:"\f0e9"}.fa-umbrella-beach:before{content:"\f5ca"}.fa-uncharted:before{content:"\e084"}.fa-underline:before{content:"\f0cd"}.fa-undo:before{content:"\f0e2"}.fa-undo-alt:before{content:"\f2ea"}.fa-uniregistry:before{content:"\f404"}.fa-unity:before{content:"\e049"}.fa-universal-access:before{content:"\f29a"}.fa-university:before{content:"\f19c"}.fa-unlink:before{content:"\f127"}.fa-unlock:before{content:"\f09c"}.fa-unlock-alt:before{content:"\f13e"}.fa-unsplash:before{content:"\e07c"}.fa-untappd:before{content:"\f405"}.fa-upload:before{content:"\f093"}.fa-ups:before{content:"\f7e0"}.fa-usb:before{content:"\f287"}.fa-user:before{content:"\f007"}.fa-user-alt:before{content:"\f406"}.fa-user-alt-slash:before{content:"\f4fa"}.fa-user-astronaut:before{content:"\f4fb"}.fa-user-check:before{content:"\f4fc"}.fa-user-circle:before{content:"\f2bd"}.fa-user-clock:before{content:"\f4fd"}.fa-user-cog:before{content:"\f4fe"}.fa-user-edit:before{content:"\f4ff"}.fa-user-friends:before{content:"\f500"}.fa-user-graduate:before{content:"\f501"}.fa-user-injured:before{content:"\f728"}.fa-user-lock:before{content:"\f502"}.fa-user-md:before{content:"\f0f0"}.fa-user-minus:before{content:"\f503"}.fa-user-ninja:before{content:"\f504"}.fa-user-nurse:before{content:"\f82f"}.fa-user-plus:before{content:"\f234"}.fa-user-secret:before{content:"\f21b"}.fa-user-shield:before{content:"\f505"}.fa-user-slash:before{content:"\f506"}.fa-user-tag:before{content:"\f507"}.fa-user-tie:before{content:"\f508"}.fa-user-times:before{content:"\f235"}.fa-users:before{content:"\f0c0"}.fa-users-cog:before{content:"\f509"}.fa-users-slash:before{content:"\e073"}.fa-usps:before{content:"\f7e1"}.fa-ussunnah:before{content:"\f407"}.fa-utensil-spoon:before{content:"\f2e5"}.fa-utensils:before{content:"\f2e7"}.fa-vaadin:before{content:"\f408"}.fa-vector-square:before{content:"\f5cb"}.fa-venus:before{content:"\f221"}.fa-venus-double:before{content:"\f226"}.fa-venus-mars:before{content:"\f228"}.fa-vest:before{content:"\e085"}.fa-vest-patches:before{content:"\e086"}.fa-viacoin:before{content:"\f237"}.fa-viadeo:before{content:"\f2a9"}.fa-viadeo-square:before{content:"\f2aa"}.fa-vial:before{content:"\f492"}.fa-vials:before{content:"\f493"}.fa-viber:before{content:"\f409"}.fa-video:before{content:"\f03d"}.fa-video-slash:before{content:"\f4e2"}.fa-vihara:before{content:"\f6a7"}.fa-vimeo:before{content:"\f40a"}.fa-vimeo-square:before{content:"\f194"}.fa-vimeo-v:before{content:"\f27d"}.fa-vine:before{content:"\f1ca"}.fa-virus:before{content:"\e074"}.fa-virus-slash:before{content:"\e075"}.fa-viruses:before{content:"\e076"}.fa-vk:before{content:"\f189"}.fa-vnv:before{content:"\f40b"}.fa-voicemail:before{content:"\f897"}.fa-volleyball-ball:before{content:"\f45f"}.fa-volume-down:before{content:"\f027"}.fa-volume-mute:before{content:"\f6a9"}.fa-volume-off:before{content:"\f026"}.fa-volume-up:before{content:"\f028"}.fa-vote-yea:before{content:"\f772"}.fa-vr-cardboard:before{content:"\f729"}.fa-vuejs:before{content:"\f41f"}.fa-walking:before{content:"\f554"}.fa-wallet:before{content:"\f555"}.fa-warehouse:before{content:"\f494"}.fa-watchman-monitoring:before{content:"\e087"}.fa-water:before{content:"\f773"}.fa-wave-square:before{content:"\f83e"}.fa-waze:before{content:"\f83f"}.fa-weebly:before{content:"\f5cc"}.fa-weibo:before{content:"\f18a"}.fa-weight:before{content:"\f496"}.fa-weight-hanging:before{content:"\f5cd"}.fa-weixin:before{content:"\f1d7"}.fa-whatsapp:before{content:"\f232"}.fa-whatsapp-square:before{content:"\f40c"}.fa-wheelchair:before{content:"\f193"}.fa-whmcs:before{content:"\f40d"}.fa-wifi:before{content:"\f1eb"}.fa-wikipedia-w:before{content:"\f266"}.fa-wind:before{content:"\f72e"}.fa-window-close:before{content:"\f410"}.fa-window-maximize:before{content:"\f2d0"}.fa-window-minimize:before{content:"\f2d1"}.fa-window-restore:before{content:"\f2d2"}.fa-windows:before{content:"\f17a"}.fa-wine-bottle:before{content:"\f72f"}.fa-wine-glass:before{content:"\f4e3"}.fa-wine-glass-alt:before{content:"\f5ce"}.fa-wix:before{content:"\f5cf"}.fa-wizards-of-the-coast:before{content:"\f730"}.fa-wodu:before{content:"\e088"}.fa-wolf-pack-battalion:before{content:"\f514"}.fa-won-sign:before{content:"\f159"}.fa-wordpress:before{content:"\f19a"}.fa-wordpress-simple:before{content:"\f411"}.fa-wpbeginner:before{content:"\f297"}.fa-wpexplorer:before{content:"\f2de"}.fa-wpforms:before{content:"\f298"}.fa-wpressr:before{content:"\f3e4"}.fa-wrench:before{content:"\f0ad"}.fa-x-ray:before{content:"\f497"}.fa-xbox:before{content:"\f412"}.fa-xing:before{content:"\f168"}.fa-xing-square:before{content:"\f169"}.fa-y-combinator:before{content:"\f23b"}.fa-yahoo:before{content:"\f19e"}.fa-yammer:before{content:"\f840"}.fa-yandex:before{content:"\f413"}.fa-yandex-international:before{content:"\f414"}.fa-yarn:before{content:"\f7e3"}.fa-yelp:before{content:"\f1e9"}.fa-yen-sign:before{content:"\f157"}.fa-yin-yang:before{content:"\f6ad"}.fa-yoast:before{content:"\f2b1"}.fa-youtube:before{content:"\f167"}.fa-youtube-square:before{content:"\f431"}.fa-zhihu:before{content:"\f63f"}.sr-only{border:0;clip:rect(0,0,0,0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.sr-only-focusable:active,.sr-only-focusable:focus{clip:auto;height:auto;margin:0;overflow:visible;position:static;width:auto}@font-face{font-family:"Font Awesome 5 Brands";font-style:normal;font-weight:400;font-display:block;src:url(../webfonts/fa-brands-400.eot);src:url(../webfonts/fa-brands-400.eot?#iefix) format("embedded-opentype"),url(../webfonts/fa-brands-400.woff2) format("woff2"),url(../webfonts/fa-brands-400.woff) format("woff"),url(../webfonts/fa-brands-400.ttf) format("truetype"),url(../webfonts/fa-brands-400.svg#fontawesome) format("svg")}.fab{font-family:"Font Awesome 5 Brands"}@font-face{font-family:"Font Awesome 5 Free";font-style:normal;font-weight:400;font-display:block;src:url(../webfonts/fa-regular-400.eot);src:url(../webfonts/fa-regular-400.eot?#iefix) format("embedded-opentype"),url(../webfonts/fa-regular-400.woff2) format("woff2"),url(../webfonts/fa-regular-400.woff) format("woff"),url(../webfonts/fa-regular-400.ttf) format("truetype"),url(../webfonts/fa-regular-400.svg#fontawesome) format("svg")}.fab,.far{font-weight:400}@font-face{font-family:"Font Awesome 5 Free";font-style:normal;font-weight:900;font-display:block;src:url(../webfonts/fa-solid-900.eot);src:url(../webfonts/fa-solid-900.eot?#iefix) format("embedded-opentype"),url(../webfonts/fa-solid-900.woff2) format("woff2"),url(../webfonts/fa-solid-900.woff) format("woff"),url(../webfonts/fa-solid-900.ttf) format("truetype"),url(../webfonts/fa-solid-900.svg#fontawesome) format("svg")}.fa,.far,.fas{font-family:"Font Awesome 5 Free"}.fa,.fas{font-weight:900} \ No newline at end of file diff --git a/static/assets/css/magnific-popup.min.css b/static/assets/css/magnific-popup.min.css deleted file mode 100644 index c00c6ff9..00000000 --- a/static/assets/css/magnific-popup.min.css +++ /dev/null @@ -1 +0,0 @@ -.mfp-bg{top:0;left:0;width:100%;height:100%;z-index:1042;overflow:hidden;position:fixed;background:#0b0b0b;opacity:.8}.mfp-wrap{top:0;left:0;width:100%;height:100%;z-index:1043;position:fixed;outline:none !important;-webkit-backface-visibility:hidden}.mfp-container{text-align:center;position:absolute;width:100%;height:100%;left:0;top:0;padding:0 8px;box-sizing:border-box}.mfp-container:before{content:'';display:inline-block;height:100%;vertical-align:middle}.mfp-align-top .mfp-container:before{display:none}.mfp-content{position:relative;display:inline-block;vertical-align:middle;margin:0 auto;text-align:left;z-index:1045}.mfp-inline-holder .mfp-content,.mfp-ajax-holder .mfp-content{width:100%;cursor:auto}.mfp-ajax-cur{cursor:progress}.mfp-zoom-out-cur,.mfp-zoom-out-cur .mfp-image-holder .mfp-close{cursor:-moz-zoom-out;cursor:-webkit-zoom-out;cursor:zoom-out}.mfp-zoom{cursor:pointer;cursor:-webkit-zoom-in;cursor:-moz-zoom-in;cursor:zoom-in}.mfp-auto-cursor .mfp-content{cursor:auto}.mfp-close,.mfp-arrow,.mfp-preloader,.mfp-counter{-webkit-user-select:none;-moz-user-select:none;user-select:none}.mfp-loading.mfp-figure{display:none}.mfp-hide{display:none !important}.mfp-preloader{color:#CCC;position:absolute;top:50%;width:auto;text-align:center;margin-top:-0.8em;left:8px;right:8px;z-index:1044}.mfp-preloader a{color:#CCC}.mfp-preloader a:hover{color:#FFF}.mfp-s-ready .mfp-preloader{display:none}.mfp-s-error .mfp-content{display:none}button.mfp-close,button.mfp-arrow{overflow:visible;cursor:pointer;background:transparent;border:0;-webkit-appearance:none;display:block;outline:0;padding:0;z-index:1046;box-shadow:none;touch-action:manipulation}button::-moz-focus-inner{padding:0;border:0}.mfp-close{width:44px;height:44px;line-height:44px;position:absolute;right:0;top:0;text-decoration:none;text-align:center;opacity:.65;padding:0 0 18px 10px;color:#FFF;font-style:normal;font-size:28px;font-family:Arial,Baskerville,monospace}.mfp-close:hover,.mfp-close:focus{opacity:1}.mfp-close:active{top:1px}.mfp-close-btn-in .mfp-close{color:#333}.mfp-image-holder .mfp-close,.mfp-iframe-holder .mfp-close{color:#FFF;right:-6px;text-align:right;padding-right:6px;width:100%}.mfp-counter{position:absolute;top:0;right:0;color:#CCC;font-size:12px;line-height:18px;white-space:nowrap}.mfp-arrow{position:absolute;opacity:.65;margin:0;top:50%;margin-top:-55px;padding:0;width:90px;height:110px;-webkit-tap-highlight-color:transparent}.mfp-arrow:active{margin-top:-54px}.mfp-arrow:hover,.mfp-arrow:focus{opacity:1}.mfp-arrow:before,.mfp-arrow:after{content:'';display:block;width:0;height:0;position:absolute;left:0;top:0;margin-top:35px;margin-left:35px;border:medium inset transparent}.mfp-arrow:after{border-top-width:13px;border-bottom-width:13px;top:8px}.mfp-arrow:before{border-top-width:21px;border-bottom-width:21px;opacity:.7}.mfp-arrow-left{left:0}.mfp-arrow-left:after{border-right:17px solid #FFF;margin-left:31px}.mfp-arrow-left:before{margin-left:25px;border-right:27px solid #3f3f3f}.mfp-arrow-right{right:0}.mfp-arrow-right:after{border-left:17px solid #FFF;margin-left:39px}.mfp-arrow-right:before{border-left:27px solid #3f3f3f}.mfp-iframe-holder{padding-top:40px;padding-bottom:40px}.mfp-iframe-holder .mfp-content{line-height:0;width:100%;max-width:900px}.mfp-iframe-holder .mfp-close{top:-40px}.mfp-iframe-scaler{width:100%;height:0;overflow:hidden;padding-top:56.25%}.mfp-iframe-scaler iframe{position:absolute;display:block;top:0;left:0;width:100%;height:100%;box-shadow:0 0 8px rgba(0,0,0,0.6);background:#000}img.mfp-img{width:auto;max-width:100%;height:auto;display:block;line-height:0;box-sizing:border-box;padding:40px 0 40px;margin:0 auto}.mfp-figure{line-height:0}.mfp-figure:after{content:'';position:absolute;left:0;top:40px;bottom:40px;display:block;right:0;width:auto;height:auto;z-index:-1;box-shadow:0 0 8px rgba(0,0,0,0.6);background:#444}.mfp-figure small{color:#bdbdbd;display:block;font-size:12px;line-height:14px}.mfp-figure figure{margin:0}.mfp-bottom-bar{margin-top:-36px;position:absolute;top:100%;left:0;width:100%;cursor:auto}.mfp-title{text-align:left;line-height:18px;color:#f3f3f3;word-wrap:break-word;padding-right:36px}.mfp-image-holder .mfp-content{max-width:100%}.mfp-gallery .mfp-image-holder .mfp-figure{cursor:pointer}@media screen and (max-width:800px) and (orientation:landscape),screen and (max-height:300px){.mfp-img-mobile .mfp-image-holder{padding-left:0;padding-right:0}.mfp-img-mobile img.mfp-img{padding:0}.mfp-img-mobile .mfp-figure:after{top:0;bottom:0}.mfp-img-mobile .mfp-figure small{display:inline;margin-left:5px}.mfp-img-mobile .mfp-bottom-bar{background:rgba(0,0,0,0.6);bottom:0;margin:0;top:auto;padding:3px 5px;position:fixed;box-sizing:border-box}.mfp-img-mobile .mfp-bottom-bar:empty{padding:0}.mfp-img-mobile .mfp-counter{right:5px;top:3px}.mfp-img-mobile .mfp-close{top:0;right:0;width:35px;height:35px;line-height:35px;background:rgba(0,0,0,0.6);position:fixed;text-align:center;padding:0}}@media all and (max-width:900px){.mfp-arrow{-webkit-transform:scale(0.75);transform:scale(0.75)}.mfp-arrow-left{-webkit-transform-origin:0 0;transform-origin:0 0}.mfp-arrow-right{-webkit-transform-origin:100%;transform-origin:100%}.mfp-container{padding-left:6px;padding-right:6px}} \ No newline at end of file diff --git a/static/assets/css/meanmenu.min.css b/static/assets/css/meanmenu.min.css deleted file mode 100644 index 3a73cd9a..00000000 --- a/static/assets/css/meanmenu.min.css +++ /dev/null @@ -1,8 +0,0 @@ -/*! ####################################################################### - - MeanMenu 2.0.7 - -------- - - To be used with jquery.meanmenu.js by Chris Wharton (http://www.meanthemes.com/plugins/meanmenu/) - -####################################################################### */a.meanmenu-reveal{display:none}.mean-container .mean-bar{float:left;width:100%;position:relative;background:#0c1923;padding:4px 0;min-height:42px;z-index:999999}.mean-container a.meanmenu-reveal{width:22px;height:22px;padding:13px 13px 11px;position:absolute;top:0;right:0;cursor:pointer;color:#fff;text-decoration:none;font-size:16px;text-indent:-9999em;line-height:22px;font-size:1px;display:block;font-family:Arial,Helvetica,sans-serif;font-weight:700}.mean-container a.meanmenu-reveal span{display:block;background:#fff;height:3px;margin-top:3px}.mean-container .mean-nav{float:left;width:100%;background:#0c1923;margin-top:44px}.mean-container .mean-nav ul{padding:0;margin:0;width:100%;list-style-type:none}.mean-container .mean-nav ul li{position:relative;float:left;width:100%}.mean-container .mean-nav ul li a{display:block;float:left;width:90%;padding:1em 5%;margin:0;text-align:left;color:#fff;border-top:1px solid #383838;border-top:1px solid rgba(255,255,255,.5);text-decoration:none;text-transform:uppercase}.mean-container .mean-nav ul li li a{width:80%;padding:1em 10%;border-top:1px solid #f1f1f1;border-top:1px solid rgba(255,255,255,.25);opacity:.75;filter:alpha(opacity=75);text-shadow:none!important;visibility:visible}.mean-container .mean-nav ul li.mean-last a{border-bottom:0;margin-bottom:0}.mean-container .mean-nav ul li li li a{width:70%;padding:1em 15%}.mean-container .mean-nav ul li li li li a{width:60%;padding:1em 20%}.mean-container .mean-nav ul li li li li li a{width:50%;padding:1em 25%}.mean-container .mean-nav ul li a:hover{background:#252525;background:rgba(255,255,255,.1)}.mean-container .mean-nav ul li a.mean-expand{margin-top:1px;width:26px;height:32px;padding:12px!important;text-align:center;position:absolute;right:0;top:0;z-index:2;font-weight:700;background:rgba(255,255,255,.1);border:0!important;border-left:1px solid rgba(255,255,255,.4)!important;border-bottom:1px solid rgba(255,255,255,.2)!important}.mean-container .mean-nav ul li a.mean-expand:hover{background:rgba(0,0,0,.9)}.mean-container .mean-push{float:left;width:100%;padding:0;margin:0;clear:both}.mean-nav .wrapper{width:100%;padding:0;margin:0}.mean-container .mean-bar,.mean-container .mean-bar *{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}.mean-remove{display:none!important} \ No newline at end of file diff --git a/static/assets/css/odometer.min.css b/static/assets/css/odometer.min.css deleted file mode 100644 index ac13c6f6..00000000 --- a/static/assets/css/odometer.min.css +++ /dev/null @@ -1,2 +0,0 @@ -/*! odometer 0.4.8 */ -.odometer.odometer-auto-theme,.odometer.odometer-theme-default{display:inline-block;vertical-align:middle;*vertical-align:auto;*zoom:1;*display:inline;position:relative}.odometer.odometer-auto-theme .odometer-digit,.odometer.odometer-theme-default .odometer-digit{display:inline-block;vertical-align:middle;*vertical-align:auto;*zoom:1;*display:inline;position:relative}.odometer.odometer-auto-theme .odometer-digit .odometer-digit-spacer,.odometer.odometer-theme-default .odometer-digit .odometer-digit-spacer{display:inline-block;vertical-align:middle;*vertical-align:auto;*zoom:1;*display:inline;visibility:hidden}.odometer.odometer-auto-theme .odometer-digit .odometer-digit-inner,.odometer.odometer-theme-default .odometer-digit .odometer-digit-inner{text-align:left;display:block;position:absolute;top:0;left:0;right:0;bottom:0;overflow:hidden}.odometer.odometer-auto-theme .odometer-digit .odometer-ribbon,.odometer.odometer-theme-default .odometer-digit .odometer-ribbon{display:block}.odometer.odometer-auto-theme .odometer-digit .odometer-ribbon-inner,.odometer.odometer-theme-default .odometer-digit .odometer-ribbon-inner{display:block;-webkit-backface-visibility:hidden}.odometer.odometer-auto-theme .odometer-digit .odometer-value,.odometer.odometer-theme-default .odometer-digit .odometer-value{display:block;-webkit-transform:translateZ(0)}.odometer.odometer-auto-theme .odometer-digit .odometer-value.odometer-last-value,.odometer.odometer-theme-default .odometer-digit .odometer-value.odometer-last-value{position:absolute}.odometer.odometer-auto-theme.odometer-animating-up .odometer-ribbon-inner,.odometer.odometer-theme-default.odometer-animating-up .odometer-ribbon-inner{-webkit-transition:-webkit-transform 2s;-moz-transition:-moz-transform 2s;-ms-transition:-ms-transform 2s;-o-transition:-o-transform 2s;transition:transform 2s}.odometer.odometer-auto-theme.odometer-animating-up.odometer-animating .odometer-ribbon-inner,.odometer.odometer-theme-default.odometer-animating-up.odometer-animating .odometer-ribbon-inner{-webkit-transform:translateY(-100%);-moz-transform:translateY(-100%);-ms-transform:translateY(-100%);-o-transform:translateY(-100%);transform:translateY(-100%)}.odometer.odometer-auto-theme.odometer-animating-down .odometer-ribbon-inner,.odometer.odometer-theme-default.odometer-animating-down .odometer-ribbon-inner{-webkit-transform:translateY(-100%);-moz-transform:translateY(-100%);-ms-transform:translateY(-100%);-o-transform:translateY(-100%);transform:translateY(-100%)}.odometer.odometer-auto-theme.odometer-animating-down.odometer-animating .odometer-ribbon-inner,.odometer.odometer-theme-default.odometer-animating-down.odometer-animating .odometer-ribbon-inner{-webkit-transition:-webkit-transform 2s;-moz-transition:-moz-transform 2s;-ms-transition:-ms-transform 2s;-o-transition:-o-transform 2s;transition:transform 2s;-webkit-transform:translateY(0);-moz-transform:translateY(0);-ms-transform:translateY(0);-o-transform:translateY(0);transform:translateY(0)}.odometer.odometer-auto-theme .odometer-value,.odometer.odometer-theme-default .odometer-value{text-align:center} \ No newline at end of file diff --git a/static/assets/css/owl.carousel.min.css b/static/assets/css/owl.carousel.min.css deleted file mode 100644 index 1b3ecda6..00000000 --- a/static/assets/css/owl.carousel.min.css +++ /dev/null @@ -1,6 +0,0 @@ -/** - * Owl Carousel v2.3.4 - * Copyright 2013-2018 David Deutsch - * Licensed under: SEE LICENSE IN https://github.com/OwlCarousel2/OwlCarousel2/blob/master/LICENSE - */ - .owl-carousel,.owl-carousel .owl-item{-webkit-tap-highlight-color:transparent;position:relative}.owl-carousel{display:none;width:100%;z-index:1}.owl-carousel .owl-stage{position:relative;-ms-touch-action:pan-Y;touch-action:manipulation;-moz-backface-visibility:hidden}.owl-carousel .owl-stage:after{content:".";display:block;clear:both;visibility:hidden;line-height:0;height:0}.owl-carousel .owl-stage-outer{position:relative;overflow:hidden;-webkit-transform:translate3d(0,0,0)}.owl-carousel .owl-item,.owl-carousel .owl-wrapper{-webkit-backface-visibility:hidden;-moz-backface-visibility:hidden;-ms-backface-visibility:hidden;-webkit-transform:translate3d(0,0,0);-moz-transform:translate3d(0,0,0);-ms-transform:translate3d(0,0,0)}.owl-carousel .owl-item{min-height:1px;float:left;-webkit-backface-visibility:hidden;-webkit-touch-callout:none}.owl-carousel .owl-item img{display:block;width:100%}.owl-carousel .owl-dots.disabled,.owl-carousel .owl-nav.disabled{display:none}.no-js .owl-carousel,.owl-carousel.owl-loaded{display:block}.owl-carousel .owl-dot,.owl-carousel .owl-nav .owl-next,.owl-carousel .owl-nav .owl-prev{cursor:pointer;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.owl-carousel .owl-nav button.owl-next,.owl-carousel .owl-nav button.owl-prev,.owl-carousel button.owl-dot{background:0 0;color:inherit;border:none;padding:0!important;font:inherit}.owl-carousel.owl-loading{opacity:0;display:block}.owl-carousel.owl-hidden{opacity:0}.owl-carousel.owl-refresh .owl-item{visibility:hidden}.owl-carousel.owl-drag .owl-item{-ms-touch-action:pan-y;touch-action:pan-y;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.owl-carousel.owl-grab{cursor:move;cursor:grab}.owl-carousel.owl-rtl{direction:rtl}.owl-carousel.owl-rtl .owl-item{float:right}.owl-carousel .animated{animation-duration:1s;animation-fill-mode:both}.owl-carousel .owl-animated-in{z-index:0}.owl-carousel .owl-animated-out{z-index:1}.owl-carousel .fadeOut{animation-name:fadeOut}@keyframes fadeOut{0%{opacity:1}100%{opacity:0}}.owl-height{transition:height .5s ease-in-out}.owl-carousel .owl-item .owl-lazy{opacity:0;transition:opacity .4s ease}.owl-carousel .owl-item .owl-lazy:not([src]),.owl-carousel .owl-item .owl-lazy[src^=""]{max-height:0}.owl-carousel .owl-item img.owl-lazy{transform-style:preserve-3d}.owl-carousel .owl-video-wrapper{position:relative;height:100%;background:#000}.owl-carousel .owl-video-play-icon{position:absolute;height:80px;width:80px;left:50%;top:50%;margin-left:-40px;margin-top:-40px;background:url(owl.video.play.png) no-repeat;cursor:pointer;z-index:1;-webkit-backface-visibility:hidden;transition:transform .1s ease}.owl-carousel .owl-video-play-icon:hover{-ms-transform:scale(1.3,1.3);transform:scale(1.3,1.3)}.owl-carousel .owl-video-playing .owl-video-play-icon,.owl-carousel .owl-video-playing .owl-video-tn{display:none}.owl-carousel .owl-video-tn{opacity:0;height:100%;background-position:center center;background-repeat:no-repeat;background-size:contain;transition:opacity .4s ease}.owl-carousel .owl-video-frame{position:relative;z-index:1;height:100%;width:100%} \ No newline at end of file diff --git a/static/assets/css/owl.theme.default.min.css b/static/assets/css/owl.theme.default.min.css deleted file mode 100644 index d86a30fa..00000000 --- a/static/assets/css/owl.theme.default.min.css +++ /dev/null @@ -1,6 +0,0 @@ -/** - * Owl Carousel v2.3.4 - * Copyright 2013-2018 David Deutsch - * Licensed under: SEE LICENSE IN https://github.com/OwlCarousel2/OwlCarousel2/blob/master/LICENSE - */ - .owl-theme .owl-dots,.owl-theme .owl-nav{text-align:center;-webkit-tap-highlight-color:transparent}.owl-theme .owl-nav{margin-top:10px}.owl-theme .owl-nav [class*=owl-]{color:#FFF;font-size:14px;margin:5px;padding:4px 7px;background:#D6D6D6;display:inline-block;cursor:pointer;border-radius:3px}.owl-theme .owl-nav [class*=owl-]:hover{background:#869791;color:#FFF;text-decoration:none}.owl-theme .owl-nav .disabled{opacity:.5;cursor:default}.owl-theme .owl-nav.disabled+.owl-dots{margin-top:10px}.owl-theme .owl-dots .owl-dot{display:inline-block;zoom:1}.owl-theme .owl-dots .owl-dot span{width:10px;height:10px;margin:5px 7px;background:#D6D6D6;display:block;-webkit-backface-visibility:visible;transition:opacity .2s ease;border-radius:30px}.owl-theme .owl-dots .owl-dot.active span,.owl-theme .owl-dots .owl-dot:hover span{background:#869791} \ No newline at end of file diff --git a/static/assets/css/owl.video.play.png b/static/assets/css/owl.video.play.png deleted file mode 100644 index 5d0218d4665113fc6cbde7126edf9662cc56108e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4976 zcmaJ_XIN89x86wzRf-7GAqJ^Z5{jXBq(gwfp-KtCV1PhqQCdJnKtMzgDbhp%1?hs+ zpdt!_pfm*msY(+mO6SJ&opZkXpXYZNW&sy)SwdUPxX6*#Dr4cJLKQjOTtR}_= zHnbM~`(~u4JyVXaSI`>1U_*ysTcUSxmQ4u|=8X~O?dwm?_} z=;QD{#+OMr+sl?1>}3L0)eEkz1=Ap_(E$8#!5%QOpRa$A8d($mC$1W;|NFH(9QLP3 zFhLXkAEO*B&@g=>2?tY_L&#zgXA!WoNI9gU5(Lc_JNTi{n3erGNR~4bJs$h5ysfbkkTi1Yy4e`VI2mh_>^1it{< z%mz4;Pbkjo9Es=$`_o}HpMSRn^{;q;>3aRUEh_)2D^D{<{`a!}uVw!G6^%Q;yZ?}u zHu#73IDZ<~Ni}$Vsl%0A;2lG!!z>8L*~z#POx} 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 diff --git a/static/assets/css/rangeSlider.min.css b/static/assets/css/rangeSlider.min.css deleted file mode 100644 index 0ed3591f..00000000 --- a/static/assets/css/rangeSlider.min.css +++ /dev/null @@ -1,4 +0,0 @@ -/* -!Ion.RangeSlider, 2.3.0, © Denis Ineshin, 2010 - 2018, IonDen.com, Build date: 2018-12-12 00:07:25 -*/ -.irs{position:relative;display:block;-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;font-size:12px;font-family:Arial,sans-serif}.irs-line{position:relative;display:block;overflow:hidden;outline:none !important}.irs-bar{position:absolute;display:block;left:0;width:0}.irs-shadow{position:absolute;display:none;left:0;width:0}.irs-handle{position:absolute;display:block;box-sizing:border-box;cursor:default;z-index:1}.irs-handle.type_last{z-index:2}.irs-min,.irs-max{position:absolute;display:block;cursor:default}.irs-min{left:0}.irs-max{right:0}.irs-from,.irs-to,.irs-single{position:absolute;display:block;top:0;left:0;cursor:default;white-space:nowrap}.irs-grid{position:absolute;display:none;bottom:0;left:0;width:100%;height:20px}.irs-with-grid .irs-grid{display:block}.irs-grid-pol{position:absolute;top:0;left:0;width:1px;height:8px;background:#000}.irs-grid-pol.small{height:4px}.irs-grid-text{position:absolute;bottom:0;left:0;white-space:nowrap;text-align:center;font-size:9px;line-height:9px;padding:0 3px;color:#000}.irs-disable-mask{position:absolute;display:block;top:0;left:-1%;width:102%;height:100%;cursor:default;background:rgba(0,0,0,0);z-index:2}.lt-ie9 .irs-disable-mask{background:#000;filter:alpha(opacity=0);cursor:not-allowed}.irs-disabled{opacity:.4}.irs-hidden-input{position:absolute !important;display:block !important;top:0 !important;left:0 !important;width:0 !important;height:0 !important;font-size:0 !important;line-height:0 !important;padding:0 !important;margin:0 !important;overflow:hidden;outline:none !important;z-index:-9999 !important;background:none !important;border-style:solid !important;border-color:transparent !important}.irs--flat{height:40px}.irs--flat.irs-with-grid{height:60px}.irs--flat .irs-line{top:25px;height:12px;background-color:#e1e4e9;border-radius:4px}.irs--flat .irs-bar{top:25px;height:12px;background-color:#ed5565}.irs--flat .irs-bar--single{border-radius:4px 0 0 4px}.irs--flat .irs-shadow{height:1px;bottom:16px;background-color:#e1e4e9}.irs--flat .irs-handle{top:22px;width:16px;height:18px;background-color:transparent}.irs--flat .irs-handle>i:first-child{position:absolute;display:block;top:0;left:50%;width:2px;height:100%;margin-left:-1px;background-color:#da4453}.irs--flat .irs-handle.state_hover>i:first-child,.irs--flat .irs-handle:hover>i:first-child{background-color:#a43540}.irs--flat .irs-min,.irs--flat .irs-max{top:0;padding:1px 3px;color:#999;font-size:10px;line-height:1.333;text-shadow:none;background-color:#e1e4e9;border-radius:4px}.irs--flat .irs-from,.irs--flat .irs-to,.irs--flat .irs-single{color:white;font-size:10px;line-height:1.333;text-shadow:none;padding:1px 5px;background-color:#ed5565;border-radius:4px}.irs--flat .irs-from:before,.irs--flat .irs-to:before,.irs--flat .irs-single:before{position:absolute;display:block;content:"";bottom:-6px;left:50%;width:0;height:0;margin-left:-3px;overflow:hidden;border:3px solid transparent;border-top-color:#ed5565}.irs--flat .irs-grid-pol{background-color:#e1e4e9}.irs--flat .irs-grid-text{color:#999}.irs--big{height:55px}.irs--big.irs-with-grid{height:70px}.irs--big .irs-line{top:33px;height:12px;background-color:white;background:linear-gradient(to bottom, #ddd -50%, white 150%);border:1px solid #ccc;border-radius:12px}.irs--big .irs-bar{top:33px;height:12px;background-color:#92bce0;border:1px solid #428bca;background:linear-gradient(to bottom, #ffffff 0%, #428bca 30%, #b9d4ec 100%);box-shadow:inset 0 0 1px 1px rgba(255,255,255,0.5)}.irs--big .irs-bar--single{border-radius:12px 0 0 12px}.irs--big .irs-shadow{height:1px;bottom:16px;background-color:rgba(66,139,202,0.5)}.irs--big .irs-handle{top:25px;width:30px;height:30px;border:1px solid rgba(0,0,0,0.3);background-color:#cbcfd5;background:linear-gradient(to bottom, white 0%, #B4B9BE 30%, white 100%);box-shadow:1px 1px 2px rgba(0,0,0,0.2),inset 0 0 3px 1px white;border-radius:30px}.irs--big .irs-handle.state_hover,.irs--big .irs-handle:hover{border-color:rgba(0,0,0,0.45);background-color:#939ba7;background:linear-gradient(to bottom, white 0%, #919BA5 30%, white 100%)}.irs--big .irs-min,.irs--big .irs-max{top:0;padding:1px 5px;color:white;text-shadow:none;background-color:#9f9f9f;border-radius:3px}.irs--big .irs-from,.irs--big .irs-to,.irs--big .irs-single{color:white;text-shadow:none;padding:1px 5px;background-color:#428bca;background:linear-gradient(to bottom, #428bca 0%, #3071a9 100%);border-radius:3px}.irs--big .irs-grid-pol{background-color:#428bca}.irs--big .irs-grid-text{color:#428bca}.irs--modern{height:55px}.irs--modern.irs-with-grid{height:55px}.irs--modern .irs-line{top:25px;height:5px;background-color:#d1d6e0;background:linear-gradient(to bottom, #e0e4ea 0%, #d1d6e0 100%);border:1px solid #a3adc1;border-bottom-width:0;border-radius:5px}.irs--modern .irs-bar{top:25px;height:5px;background:#20b426;background:linear-gradient(to bottom, #20b426 0%, #18891d 100%)}.irs--modern .irs-bar--single{border-radius:5px 0 0 5px}.irs--modern .irs-shadow{height:1px;bottom:21px;background-color:rgba(209,214,224,0.5)}.irs--modern .irs-handle{top:37px;width:12px;height:13px;border:1px solid #a3adc1;border-top-width:0;box-shadow:1px 1px 1px rgba(0,0,0,0.1);border-radius:0 0 3px 3px}.irs--modern .irs-handle>i:nth-child(1){position:absolute;display:block;top:-4px;left:1px;width:6px;height:6px;border:1px solid #a3adc1;background:white;transform:rotate(45deg)}.irs--modern .irs-handle>i:nth-child(2){position:absolute;display:block;box-sizing:border-box;top:0;left:0;width:10px;height:12px;background:#e9e6e6;background:linear-gradient(to bottom, white 0%, #e9e6e6 100%);border-radius:0 0 3px 3px}.irs--modern .irs-handle>i:nth-child(3){position:absolute;display:block;box-sizing:border-box;top:3px;left:3px;width:4px;height:5px;border-left:1px solid #a3adc1;border-right:1px solid #a3adc1}.irs--modern .irs-handle.state_hover,.irs--modern .irs-handle:hover{border-color:#7685a2;background:#c3c7cd;background:linear-gradient(to bottom, #ffffff 0%, #919ba5 30%, #ffffff 100%)}.irs--modern .irs-handle.state_hover>i:nth-child(1),.irs--modern .irs-handle:hover>i:nth-child(1){border-color:#7685a2}.irs--modern .irs-handle.state_hover>i:nth-child(3),.irs--modern .irs-handle:hover>i:nth-child(3){border-color:#48536a}.irs--modern .irs-min,.irs--modern .irs-max{top:0;font-size:10px;line-height:1.333;text-shadow:none;padding:1px 5px;color:white;background-color:#d1d6e0;border-radius:5px}.irs--modern .irs-from,.irs--modern .irs-to,.irs--modern .irs-single{font-size:10px;line-height:1.333;text-shadow:none;padding:1px 5px;background-color:#20b426;color:white;border-radius:5px}.irs--modern .irs-from:before,.irs--modern .irs-to:before,.irs--modern .irs-single:before{position:absolute;display:block;content:"";bottom:-6px;left:50%;width:0;height:0;margin-left:-3px;overflow:hidden;border:3px solid transparent;border-top-color:#20b426}.irs--modern .irs-grid{height:25px}.irs--modern .irs-grid-pol{background-color:#dedede}.irs--modern .irs-grid-text{color:silver;font-size:13px}.irs--sharp{height:50px;font-size:12px;line-height:1}.irs--sharp.irs-with-grid{height:57px}.irs--sharp .irs-line{top:30px;height:2px;background-color:black;border-radius:2px}.irs--sharp .irs-bar{top:30px;height:2px;background-color:#ee22fa}.irs--sharp .irs-bar--single{border-radius:2px 0 0 2px}.irs--sharp .irs-shadow{height:1px;bottom:21px;background-color:rgba(0,0,0,0.5)}.irs--sharp .irs-handle{top:25px;width:10px;height:10px;background-color:#a804b2}.irs--sharp .irs-handle>i:first-child{position:absolute;display:block;top:100%;left:0;width:0;height:0;border:5px solid transparent;border-top-color:#a804b2}.irs--sharp .irs-handle.state_hover,.irs--sharp .irs-handle:hover{background-color:black}.irs--sharp .irs-handle.state_hover>i:first-child,.irs--sharp .irs-handle:hover>i:first-child{border-top-color:black}.irs--sharp .irs-min,.irs--sharp .irs-max{color:white;font-size:14px;line-height:1;top:0;padding:3px 4px;opacity:.4;background-color:#a804b2;border-radius:2px}.irs--sharp .irs-from,.irs--sharp .irs-to,.irs--sharp .irs-single{font-size:14px;line-height:1;text-shadow:none;padding:3px 4px;background-color:#a804b2;color:white;border-radius:2px}.irs--sharp .irs-from:before,.irs--sharp .irs-to:before,.irs--sharp .irs-single:before{position:absolute;display:block;content:"";bottom:-6px;left:50%;width:0;height:0;margin-left:-3px;overflow:hidden;border:3px solid transparent;border-top-color:#a804b2}.irs--sharp .irs-grid{height:25px}.irs--sharp .irs-grid-pol{background-color:#dedede}.irs--sharp .irs-grid-text{color:silver;font-size:13px}.irs--round{height:50px}.irs--round.irs-with-grid{height:65px}.irs--round .irs-line{top:36px;height:4px;background-color:#dee4ec;border-radius:4px}.irs--round .irs-bar{top:36px;height:4px;background-color:#006cfa}.irs--round .irs-bar--single{border-radius:4px 0 0 4px}.irs--round .irs-shadow{height:4px;bottom:21px;background-color:rgba(222,228,236,0.5)}.irs--round .irs-handle{top:26px;width:24px;height:24px;border:4px solid #006cfa;background-color:white;border-radius:24px;box-shadow:0 1px 3px rgba(0,0,255,0.3)}.irs--round .irs-handle.state_hover,.irs--round .irs-handle:hover{background-color:#f0f6ff}.irs--round .irs-min,.irs--round .irs-max{color:#333;font-size:14px;line-height:1;top:0;padding:3px 5px;background-color:rgba(0,0,0,0.1);border-radius:4px}.irs--round .irs-from,.irs--round .irs-to,.irs--round .irs-single{font-size:14px;line-height:1;text-shadow:none;padding:3px 5px;background-color:#006cfa;color:white;border-radius:4px}.irs--round .irs-from:before,.irs--round .irs-to:before,.irs--round .irs-single:before{position:absolute;display:block;content:"";bottom:-6px;left:50%;width:0;height:0;margin-left:-3px;overflow:hidden;border:3px solid transparent;border-top-color:#006cfa}.irs--round .irs-grid{height:25px}.irs--round .irs-grid-pol{background-color:#dedede}.irs--round .irs-grid-text{color:silver;font-size:13px}.irs--square{height:50px}.irs--square.irs-with-grid{height:60px}.irs--square .irs-line{top:31px;height:4px;background-color:#dedede}.irs--square .irs-bar{top:31px;height:4px;background-color:black}.irs--square .irs-shadow{height:2px;bottom:21px;background-color:#dedede}.irs--square .irs-handle{top:25px;width:16px;height:16px;border:3px solid black;background-color:white;-webkit-transform:rotate(45deg);-ms-transform:rotate(45deg);transform:rotate(45deg)}.irs--square .irs-handle.state_hover,.irs--square .irs-handle:hover{background-color:#f0f6ff}.irs--square .irs-min,.irs--square .irs-max{color:#333;font-size:14px;line-height:1;top:0;padding:3px 5px;background-color:rgba(0,0,0,0.1)}.irs--square .irs-from,.irs--square .irs-to,.irs--square .irs-single{font-size:14px;line-height:1;text-shadow:none;padding:3px 5px;background-color:black;color:white}.irs--square .irs-grid{height:25px}.irs--square .irs-grid-pol{background-color:#dedede}.irs--square .irs-grid-text{color:silver;font-size:11px} \ No newline at end of file diff --git a/static/assets/css/responsive.css b/static/assets/css/responsive.css deleted file mode 100644 index 3ce36649..00000000 --- a/static/assets/css/responsive.css +++ /dev/null @@ -1,4956 +0,0 @@ -/* Max width 767px */ -@media only screen and (max-width: 767px) { - body { - font-size: 13.5px; - } - p { - font-size: 13.5px; - } - .ptb-100 { - padding-top: 60px; - padding-bottom: 60px; - } - .pt-100 { - padding-top: 60px; - } - .pb-100 { - padding-bottom: 60px; - } - .ptb-70 { - padding-top: 30px; - padding-bottom: 30px; - } - .pt-70 { - padding-top: 30px; - } - .pb-70 { - padding-bottom: 30px; - } - .default-btn { - padding: 11px 40px 11px 25px; - font-size: 13.5px; - } - .default-btn i { - right: 25px; - font-size: 12px; - } - .default-btn:hover i { - right: 20px; - } - .section-title { - max-width: 100%; - margin-left: 0; - margin-right: 0; - margin-bottom: 40px; - margin-top: -2px; - } - .section-title .sub-title { - font-size: 13px; - } - .section-title h2 { - font-size: 22px; - } - .section-title p { - max-width: 100%; - margin-top: 12px; - } - .section-title.style-two { - padding-left: 0; - text-align: center; - margin-bottom: 40px; - } - .section-title.style-two h2 { - font-size: 22px; - } - .section-title.style-two h2::before { - display: none; - } - .section-title.style-two p { - max-width: 100%; - } - .section-title.style-three h2 span { - padding-left: 10px; - padding-right: 10px; - } - .section-title.style-four { - text-align: center; - margin-bottom: 40px; - } - .section-title.style-four h2 { - font-size: 22px; - } - .section-title.style-four::before { - left: 50%; - -webkit-transform: translateX(-50%); - transform: translateX(-50%); - } - .form-control { - font-size: 13.5px; - } - .top-header-area { - text-align: center; - } - .top-header-area .container-fluid { - max-width: 100%; - } - .top-header-area.top-header-style-two .container-fluid { - max-width: 100%; - } - .top-header-area.top-header-style-three .container-fluid { - max-width: 100%; - } - .top-header-contact-info { - text-align: center !important; - } - .top-header-contact-info .email { - padding-left: 20px; - margin-right: 10px; - margin-top: 10px; - } - .top-header-contact-info .email i { - top: 4.5px; - } - .top-header-contact-info .number { - padding-left: 20px; - margin-top: 10px; - } - .top-header-contact-info .number i { - top: 4px; - } - .top-header-contact-info .lang-switcher { - padding-left: 18px; - margin-left: 10px; - margin-top: 10px; - } - .search-overlay .search-overlay-form { - max-width: 290px; - width: 290px; - } - .search-overlay .search-overlay-form form .input-search { - height: 50px; - font-size: 15px; - } - .search-overlay .search-overlay-form form button { - font-size: 18px; - } - .header-area.p-responsive-relative { - position: relative; - } - .startup-banner-area .container-fluid { - max-width: 100%; - padding-left: 0; - padding-right: 0; - } - .startup-banner-inner { - padding-top: 60px; - padding-left: 15px; - padding-right: 15px; - padding-bottom: 60px; - } - .startup-banner-content { - padding-right: 0; - text-align: center; - } - .startup-banner-content .sub-title { - font-size: 13px; - } - .startup-banner-content h1 { - margin-bottom: 18px; - font-size: 25px; - } - .startup-banner-content p { - max-width: 100%; - } - .startup-banner-content .default-btn { - margin-top: 5px; - } - .startup-banner-image { - padding-left: 0; - margin-top: 30px; - } - .marketing-banner-area { - padding-top: 60px; - padding-bottom: 60px; - } - .marketing-banner-content { - text-align: center; - padding-right: 0; - } - .marketing-banner-content .sub-title { - font-size: 13px; - } - .marketing-banner-content h1 { - margin-bottom: 18px; - font-size: 25px; - } - .marketing-banner-content p { - max-width: 100%; - } - .marketing-banner-content .default-btn { - margin-top: 5px; - } - .marketing-banner-image { - margin-top: 30px; - } - .business-banner-area { - padding-top: 60px; - padding-bottom: 60px; - } - .business-banner-area .container { - max-width: 100%; - } - .business-banner-area::before { - display: none; - } - .business-banner-content { - padding-right: 0; - text-align: center; - max-width: 100%; - } - .business-banner-content .sub-title { - font-size: 13px; - } - .business-banner-content h1 { - margin-bottom: 12px; - font-size: 25px; - } - .business-banner-content p { - max-width: 100%; - } - .business-banner-content .default-btn { - margin-top: 5px; - } - .business-banner-image { - margin-top: 30px; - } - .business-banner-image img { - border-radius: 0; - } - .app-banner-area { - padding-top: 60px; - padding-bottom: 60px; - } - .app-banner-area .container { - max-width: 100%; - } - .app-banner-content { - text-align: center; - } - .app-banner-content h1 { - margin-bottom: 20px; - font-size: 25px; - } - .app-banner-content .btn-box { - margin-top: 25px; - } - .app-banner-content .btn-box .store-btn { - padding: 10px 10px 10px 45px; - font-size: 12px; - text-align: start; - margin-left: 3px; - margin-right: 3px; - } - .app-banner-content .btn-box .store-btn:first-child { - margin-left: 0; - } - .app-banner-content .btn-box .store-btn img { - left: 10px; - width: 25px; - } - .app-banner-content .btn-box .store-btn span { - font-size: 14px; - } - .app-banner-image { - padding-left: 0; - margin-top: 35px; - } - .saas-banner-area { - padding-top: 60px; - } - .saas-banner-area .container-fluid { - padding-left: 15px; - padding-right: 15px; - } - .saas-banner-content { - text-align: center; - max-width: 100%; - margin-left: 0; - } - .saas-banner-content .sub-title { - font-size: 13px; - } - .saas-banner-content h1 { - margin-bottom: 18px; - font-size: 25px; - } - .saas-banner-content p { - max-width: 100%; - } - .saas-banner-content .default-btn { - margin-top: 5px; - } - .saas-banner-image { - margin-top: 35px; - } - .personal-portfolio-banner-area { - padding-top: 60px; - padding-bottom: 60px; - } - .personal-portfolio-banner-area .container { - max-width: 100%; - } - .personal-portfolio-banner-content { - text-align: center; - } - .personal-portfolio-banner-content .sub-title { - font-size: 13px; - padding-left: 0; - } - .personal-portfolio-banner-content .sub-title::before { - display: none; - } - .personal-portfolio-banner-content h1 { - margin-bottom: 15px; - font-size: 25px; - } - .personal-portfolio-banner-content h4 { - margin-bottom: 15px; - font-size: 16px; - } - .personal-portfolio-banner-content p { - max-width: 100%; - } - .personal-portfolio-banner-image { - margin-top: 30px; - } - .consulting-banner-area { - padding-top: 235px; - padding-bottom: 60px; - } - .consulting-banner-area .container { - max-width: 100%; - } - .consulting-banner-area::before { - display: block; - } - .consulting-banner-content { - text-align: center; - max-width: 100%; - } - .consulting-banner-content h1 { - margin-bottom: 15px; - font-size: 25px; - } - .consulting-banner-content p { - max-width: 100%; - } - .consulting-banner-content .default-btn { - margin-top: 5px; - } - .it-agency-banner-area .it-agency-inner-banner { - padding-top: 230px; - padding-bottom: 60px; - } - .it-agency-banner-content { - max-width: 100%; - } - .it-agency-banner-content h1 { - margin-bottom: 15px; - font-size: 25px; - } - .it-agency-banner-content p { - max-width: 100%; - } - .it-agency-banner-content .default-btn { - margin-top: 5px; - } - .banner-video-box { - max-width: 100%; - margin-top: 60px; - } - .banner-video-box .video-btn { - width: 60px; - height: 60px; - font-size: 25px; - } - .shop-banner-area { - background-position: left center; - padding-top: 60px; - padding-bottom: 60px; - } - .shop-banner-content .sub-title { - font-size: 15px; - margin-bottom: 8px; - } - .shop-banner-content h1 { - margin-bottom: 12px; - font-size: 25px; - } - .shop-banner-content h4 { - font-size: 16px; - } - .shop-banner-content .default-btn { - margin-top: 20px; - } - .blog-banner-area { - padding-top: 60px; - padding-bottom: 60px; - } - .blog-banner-item { - margin-bottom: 30px; - } - .blog-banner-item .content { - max-width: 100%; - padding: 20px 15px; - top: 0; - background-color: white; - position: relative; - -webkit-transform: translateY(0); - transform: translateY(0); - } - .blog-banner-item .content h3 { - font-size: 16px; - } - .blog-banner-item .content .meta li a i { - top: 6px; - } - .blog-banner-item-list .single-blog-banner-item .image { - height: auto; - background-image: unset !important; - } - .blog-banner-item-list .single-blog-banner-item .image img { - display: inline-block; - } - .blog-banner-item-list .single-blog-banner-item .content { - padding-left: 0; - padding-bottom: 0; - padding-top: 20px; - } - .blog-banner-item-list .single-blog-banner-item .content h3 { - margin-bottom: 12px; - font-size: 16px; - } - .blog-banner-item-list .single-blog-banner-item .content .date i { - top: 2px; - } - .furniture-banner-item { - padding-top: 60px; - padding-bottom: 95px; - } - .furniture-banner-content { - padding: 20px 15px; - max-width: 100%; - text-align: center; - border-width: 2px; - } - .furniture-banner-content h1 { - margin-bottom: 12px; - font-size: 25px; - } - .furniture-banner-content .default-btn { - margin-top: 5px; - } - .furniture-banner-slides.owl-theme .owl-dots { - top: auto; - -webkit-transform: translateY(0); - transform: translateY(0); - bottom: 30px; - left: 0; - right: 0; - } - .furniture-banner-slides.owl-theme .owl-dots .owl-dot { - display: inline-block; - margin: 0 5px; - } - .furniture-banner-slides.owl-theme .owl-dots .owl-dot span { - width: 35px; - } - .minimal-portfolio-banner-area { - padding-top: 150px; - padding-bottom: 140px; - } - .minimal-portfolio-banner-content { - max-width: 100%; - } - .minimal-portfolio-banner-content .typewrite { - margin-bottom: 25px; - padding: 6px 15px; - font-size: 13px; - } - .minimal-portfolio-banner-content h1 { - font-size: 25px; - margin-bottom: 25px; - } - .shape1, .shape13, .shape2, .shape3, .shape4, .shape5, .shape6, .shape7, .shape8, .shape9, .shape16, .shape17, .divider, .shape18, .shape19 { - display: none !important; - } - .shape10 { - max-width: 290px; - } - .features-area { - padding-top: 60px; - padding-bottom: 30px; - } - .single-features-box { - padding-left: 0; - padding-right: 0; - } - .single-features-box .icon { - font-size: 40px; - margin-bottom: 20px; - -webkit-transform: translateY(0) !important; - transform: translateY(0) !important; - } - .single-features-box h3 { - font-size: 16px; - -webkit-transform: translateY(0) !important; - transform: translateY(0) !important; - } - .single-features-box p { - -webkit-transform: translateY(0) !important; - transform: translateY(0) !important; - } - .single-features-box .link-btn { - left: 0; - bottom: 0 !important; - opacity: 1; - -webkit-transform: unset; - transform: unset; - margin-top: 15px; - position: relative; - visibility: visible; - } - .single-features-box .link-btn i { - top: 5px; - font-size: 11px; - } - .features-box { - padding: 20px 15px; - } - .features-box h3 { - font-size: 16px; - } - .features-box .icon { - width: 60px; - height: 60px; - font-size: 30px; - line-height: 60px; - margin-bottom: 20px; - } - .single-features-item { - text-align: center; - padding-left: 0; - } - .single-features-item .icon { - position: relative; - font-size: 35px; - display: inline-block; - margin-bottom: 15px; - } - .single-features-item h3 { - font-size: 16px; - } - .single-features-item h3 br { - display: none; - } - .shape15 { - display: none; - } - .features-item { - padding: 20px 15px; - } - .features-item h3 { - font-size: 16px; - } - .features-item .icon { - font-size: 25px; - margin-right: 10px; - } - .startup-about-area { - border-bottom: 1px solid #eeeeee; - margin-bottom: 60px; - } - .startup-about-area .container-fluid { - max-width: 100%; - } - .startup-about-image { - margin-right: 0; - padding: 0; - } - .startup-about-image .video-btn { - left: 50%; - width: 60px; - height: 60px; - font-size: 22px; - -webkit-transform: translateY(-50%) translateX(-50%); - transform: translateY(-50%) translateX(-50%); - } - .startup-about-image .video-btn::after, .startup-about-image .video-btn::before { - border-width: 1px; - } - .startup-about-content { - padding-left: 0; - text-align: center; - margin-top: 30px; - max-width: 100%; - } - .startup-about-content .sub-title { - font-size: 13px; - } - .startup-about-content h2 { - font-size: 22px; - } - .startup-about-content .features-list { - padding-left: 0; - list-style-type: none; - } - .startup-about-content .features-list li { - font-weight: 600; - } - .marketing-about-image { - margin-right: 0; - } - .marketing-about-content { - padding-left: 0; - text-align: center; - margin-top: 30px; - } - .marketing-about-content .sub-title { - font-size: 13px; - } - .marketing-about-content h2 { - font-size: 22px; - } - .marketing-about-content .features-list { - padding-left: 0; - list-style-type: none; - } - .marketing-about-content .features-list li { - font-weight: 600; - } - .business-about-image { - padding-right: 0; - } - .business-about-content { - padding-left: 0; - text-align: center; - margin-top: 30px; - } - .business-about-content .sub-title { - font-size: 13px; - } - .business-about-content h2 { - font-size: 22px; - } - .shape11, .shape12 { - display: none; - } - .app-about-content { - padding-right: 0; - } - .app-about-content h3 { - margin-bottom: 15px; - font-size: 16px; - } - .app-about-content .default-btn { - margin-top: 5px; - } - .app-about-image { - padding-left: 0; - margin-top: 30px; - } - .saas-about-image { - padding-right: 0; - margin-bottom: 30px; - } - .saas-about-content { - padding-left: 0; - } - .saas-about-content .sub-title { - font-size: 13px; - } - .saas-about-content h2 { - font-size: 22px; - } - .it-agency-about-image { - margin-right: 0; - text-align: end; - padding-right: 0; - padding-bottom: 0; - } - .it-agency-about-image .main-image { - padding-bottom: 100px; - padding-right: 0; - padding-left: 80px; - } - .it-agency-about-image .main-image img:nth-child(2) { - right: 0; - left: 0; - position: relative; - top: 0; - } - .it-agency-about-image .main-image img:nth-child(1) { - left: 0; - bottom: 0; - z-index: 2; - max-width: 200px; - position: absolute; - } - .it-agency-about-content { - padding-left: 0; - text-align: center; - margin-top: 30px; - } - .it-agency-about-content .sub-title { - font-size: 13px; - } - .it-agency-about-content h2 { - font-size: 22px; - } - .it-agency-about-content .features-list { - padding-left: 0; - list-style-type: none; - } - .it-agency-about-content .features-list li { - font-weight: 600; - } - .single-services-box .content { - padding: 15px; - } - .single-services-box .content .icon { - font-size: 35px; - margin-bottom: 15px; - -webkit-transform: translateY(0) !important; - transform: translateY(0) !important; - } - .single-services-box .content h3 { - font-size: 16px; - -webkit-transform: translateY(0) !important; - transform: translateY(0) !important; - } - .single-services-box .content p { - -webkit-transform: translateY(0) !important; - transform: translateY(0) !important; - } - .single-services-box .content .link-btn { - left: 0; - bottom: 0 !important; - opacity: 1; - -webkit-transform: unset; - transform: unset; - margin-top: 13px; - position: relative; - visibility: visible; - } - .single-services-box .content .link-btn i { - top: 5px; - font-size: 11px; - } - .single-services-box::before { - background: -webkit-gradient(linear, left bottom, left top, color-stop(0, rgba(35, 35, 37, 0.9)), color-stop(50%, rgba(35, 35, 37, 0.7)), color-stop(75%, rgba(22, 22, 23, 0)), to(rgba(0, 0, 0, 0))); - background: linear-gradient(to top, rgba(35, 35, 37, 0.9) 0, rgba(35, 35, 37, 0.7) 50%, rgba(22, 22, 23, 0) 75%, rgba(0, 0, 0, 0) 100%); - } - .single-services-item .content { - padding-top: 20px; - padding-left: 0; - padding-right: 0; - } - .single-services-item .content h3 { - font-size: 16px; - } - .services-tabs .nav { - margin-bottom: 20px; - border-bottom: 1px solid #eeeeee; - padding-bottom: 10px; - } - .services-tabs .nav .nav-item { - margin-left: 10px; - margin-right: 10px; - margin-bottom: 20px; - } - .services-tabs .nav .nav-item .nav-link { - font-size: 14px; - } - .services-tabs .nav .nav-item .nav-link .icon { - width: 60px; - height: 60px; - line-height: 60px; - font-size: 25px; - padding-right: 5px; - margin-bottom: 12px; - } - .single-main-services .content { - padding-right: 0; - text-align: center; - margin-bottom: 30px; - } - .single-main-services .content h3 { - font-size: 19px; - } - .single-main-services .content p { - max-width: 100%; - } - .services-box { - padding: 20px 15px; - } - .services-box .icon { - font-size: 40px; - margin-bottom: 20px; - } - .services-box h3 { - font-size: 16px; - } - .services-item h3 { - font-size: 16px; - margin-top: 20px; - } - .services-item .hover-content { - padding: 20px 15px; - } - .services-item .hover-content .link-btn i { - top: 6px; - } - .col-lg-3:nth-child(2) .services-box, .col-lg-3:nth-child(4) .services-box { - margin-top: 0; - } - .col-lg-3:nth-child(5) .services-box, .col-lg-3:nth-child(7) .services-box { - margin-top: 0; - } - .single-it-services-box { - padding: 20px 15px; - text-align: center; - } - .single-it-services-box .icon { - left: 0; - top: 0; - font-size: 35px; - display: block; - position: relative; - margin-bottom: 20px; - } - .single-it-services-box h3 { - font-size: 16px; - } - .services-details-desc h3 { - font-size: 17px; - } - .screenshot-wrap .screenshot-frame { - display: none; - } - .screenshot-slides.owl-theme { - padding-top: 40px; - } - .screenshot-slides.owl-theme .owl-nav [class*=owl-] { - left: 15px; - width: 30px; - line-height: 30px; - height: 30px; - font-size: 15px; - top: 0; - -webkit-transform: translateY(0); - transform: translateY(0); - } - .screenshot-slides.owl-theme .owl-nav [class*=owl-].owl-next { - left: auto; - right: 15px; - } - .expertise-box { - text-align: center; - } - .expertise-box .icon { - width: 60px; - height: 60px; - font-size: 30px; - line-height: 60px; - margin-left: auto; - margin-right: auto; - margin-bottom: 20px; - } - .expertise-box h3 { - font-size: 16px; - } - .categories-box h3 { - font-size: 16px; - padding-left: 15px; - padding-right: 15px; - } - .categories-slides.owl-theme .owl-nav { - opacity: 1; - visibility: visible; - margin-bottom: 30px; - } - .categories-slides.owl-theme .owl-nav [class*=owl-] { - margin: 0 5px; - position: relative; - left: 0; - top: 0; - width: 30px; - height: 30px; - line-height: 30px; - -webkit-transform: unset; - transform: unset; - } - .categories-slides.owl-theme .owl-nav [class*=owl-].owl-next { - right: 0; - } - .who-we-are-content { - padding: 20px 15px; - text-align: center; - } - .who-we-are-content .sub-title { - font-size: 13px; - } - .who-we-are-content h2 { - font-size: 16px; - } - .who-we-are-content .default-btn { - margin-top: 5px; - } - .who-we-are-image .video-btn { - width: 60px; - height: 60px; - font-size: 20px; - } - .categories-area { - border-bottom: 1px solid #eeeeee; - margin-bottom: 55px; - } - .single-categories-box h3 { - top: 15px; - left: 15px; - font-size: 15px; - padding: 7px 20px; - } - .startup-works-area { - border-top: 1px solid #eeeeee; - border-bottom: 1px solid #eeeeee; - padding-top: 60px; - margin-bottom: 60px; - } - .startup-works-area .section-title { - padding-top: 0; - text-align: center; - margin-bottom: 40px; - } - .startup-works-area .section-title h2 { - font-size: 22px; - } - .startup-works-content { - text-align: center; - position: relative; - border-top: 1px solid #eeeeee; - margin-top: 15px; - padding-top: 50px; - padding-right: 0; - } - .startup-works-content h3 { - font-size: 16px; - margin-bottom: 12px; - } - .startup-works-content .custom-owl-nav { - margin-top: 0; - } - .startup-works-content .custom-owl-nav [class*=owl-] { - margin: 0 3px; - font-size: 13px; - padding: 6px 20px 6px !important; - position: absolute; - left: 0; - top: -15px; - } - .startup-works-content .custom-owl-nav [class*=owl-].custom-owl-next { - left: auto; - right: 0; - } - .startup-works-image { - margin-left: 0; - margin-top: 15px; - padding-top: 0; - padding-right: 0; - padding-bottom: 0; - } - .single-works-box .works-image .works-overlay h3 { - font-size: 16px; - } - .works-box h3 { - opacity: 1; - visibility: visible; - top: auto; - -webkit-transform: translateY(0); - transform: translateY(0); - bottom: 0; - font-size: 16px; - padding: 10px; - margin-left: 0; - margin-right: 0; - margin-top: 0; - } - .works-box-btn { - margin-top: 5px; - } - .single-works-item .content { - padding-left: 15px; - padding-right: 15px; - } - .single-works-item .content .link-btn { - width: 40px; - height: 40px; - line-height: 40px; - } - .single-works-item .content h3 { - font-size: 16px; - } - .how-it-works-content { - padding-right: 0; - } - .how-it-works-content ul li { - padding-left: 50px; - } - .how-it-works-content ul li i { - font-size: 30px; - } - .how-it-works-content ul li h3 { - font-size: 16px; - } - .how-it-works-image { - margin-top: 30px; - } - .single-process-box { - padding: 25px 15px; - } - .single-process-box h3 { - font-size: 16px; - } - .funfacts-inner { - padding-left: 15px; - padding-right: 15px; - } - .funfacts-inner.border-radius.ptb-70 { - padding-bottom: 10px; - } - .single-funfacts-box { - text-align: center; - padding: 20px 10px; - } - .single-funfacts-box .icon { - position: relative; - top: 0; - line-height: 1; - -webkit-transform: translateY(0); - transform: translateY(0); - left: 0; - font-size: 30px; - margin-bottom: 15px; - display: block; - } - .single-funfacts-box h3 { - font-size: 30px; - } - .single-funfacts-box.without-bg-color { - border-right: none; - margin-right: 0; - padding: 0; - } - .single-funfacts-box.text-center { - border-right: none; - padding: 0; - } - .single-products-box .image .buttons-list li { - -webkit-transform: translateY(0); - transform: translateY(0); - visibility: visible; - opacity: 1; - } - .single-products-box .image .buttons-list li a .tooltip-label::before { - bottom: -12px; - } - .single-products-box .image .buttons-list li a:hover .tooltip-label { - top: -40px; - } - .single-products-box .content h3 { - font-size: 16px; - } - .single-products-box .content .rating { - margin-bottom: 10px; - font-size: 12px; - } - .single-products-box .content .price span { - font-size: 14px; - } - .startup-testimonials-area .container-fluid { - max-width: 100%; - } - .startup-testimonials-image { - padding: 0; - } - .startup-testimonials-image .main-image { - -webkit-animation: unset !important; - animation: unset !important; - } - .startup-testimonials-content { - padding-left: 15px; - padding-right: 15px; - padding-bottom: 30px; - padding-top: 30px; - } - .startup-testimonials-content .icon { - margin-bottom: 15px; - font-size: 30px; - } - .startup-testimonials-content p { - font-size: 15px; - } - .startup-testimonials-content .info { - margin-top: 20px; - padding-top: 20px; - } - .startup-testimonials-content .info h3 { - font-size: 15px; - margin-bottom: 7px; - } - .startup-testimonials-slides.owl-theme .owl-nav { - right: 0; - bottom: 0; - -webkit-transform: unset; - transform: unset; - position: relative; - padding-bottom: 30px; - } - .startup-testimonials-slides.owl-theme .owl-nav [class*=owl-] { - margin: 0 3px; - font-size: 13px; - padding: 6px 20px 6px !important; - } - .marketing-testimonials-image { - margin-left: 0; - margin-right: 0; - margin-bottom: 30px; - } - .marketing-testimonials-content { - padding-bottom: 0; - } - .marketing-testimonials-content .icon { - margin-bottom: 15px; - font-size: 30px; - } - .marketing-testimonials-content p { - font-size: 15px; - } - .marketing-testimonials-content .info { - margin-top: 20px; - } - .marketing-testimonials-content .info h3 { - font-size: 15px; - margin-bottom: 7px; - } - .marketing-testimonials-slides.owl-theme .owl-nav { - right: 0; - bottom: 0; - margin-top: 25px; - -webkit-transform: unset; - transform: unset; - position: relative; - } - .marketing-testimonials-slides.owl-theme .owl-nav [class*=owl-] { - margin: 0 3px; - font-size: 13px; - padding: 6px 20px 6px !important; - } - .business-testimonials-image { - margin-right: 0; - margin-bottom: 40px; - } - .business-testimonials-content .icon { - margin-bottom: 15px; - font-size: 30px; - } - .business-testimonials-content p { - font-size: 15px; - } - .business-testimonials-content .info { - margin-top: 20px; - } - .business-testimonials-content .info h3 { - font-size: 15px; - margin-bottom: 7px; - } - .testimonials-slides.owl-theme { - padding-left: 0; - padding-right: 0; - } - .testimonials-slides.owl-theme .owl-nav { - margin-top: 30px; - } - .testimonials-slides.owl-theme .owl-nav [class*=owl-] { - padding: 6px 20px 6px !important; - left: 0; - top: 0; - -webkit-transform: unset; - transform: unset; - position: relative; - font-size: 13px; - margin: 0 4px; - } - .testimonials-inner { - padding-left: 15px; - padding-right: 15px; - } - .testimonials-inner .testimonials-slides.owl-theme .owl-nav [class*=owl-] { - margin: 0 5px; - font-size: 15px; - width: 35px; - height: 35px; - line-height: 35px; - } - .testimonials-inner.it-agency-color { - padding-left: 0; - padding-right: 0; - } - .testimonials-inner.minimal-portfolio-color { - padding-left: 0; - padding-right: 0; - } - .testimonials-inner.shop-color { - padding-left: 0; - padding-right: 0; - } - .testimonials-item { - max-width: 100%; - } - .testimonials-item .icon { - margin-bottom: 15px; - font-size: 30px; - } - .testimonials-item p { - font-size: 15px; - } - .testimonials-item .info { - margin-top: 20px; - } - .testimonials-item .info img { - width: 70px !important; - height: 70px; - } - .testimonials-item .info .title h3 { - font-size: 15px; - margin-bottom: 7px; - } - .saas-testimonials-slides.owl-theme { - margin-top: 30px; - padding-left: 0; - padding-right: 0; - } - .saas-testimonials-slides.owl-theme .owl-nav { - margin-top: 20px; - } - .saas-testimonials-slides.owl-theme .owl-nav [class*=owl-] { - top: 0; - left: 0; - margin: 0 6px; - font-size: 20px; - -webkit-transform: unset; - transform: unset; - position: relative; - } - .saas-testimonials-slides.owl-theme .owl-nav [class*=owl-].owl-next { - right: 0; - } - .saas-testimonials-item { - padding: 20px 15px; - text-align: center; - } - .saas-testimonials-item .info { - margin-bottom: 20px; - -webkit-box-pack: center; - -ms-flex-pack: center; - justify-content: center; - text-align: start; - } - .saas-testimonials-item .info img { - width: 65px !important; - height: 65px; - } - .saas-testimonials-item .info .title { - text-align: start; - } - .saas-testimonials-item .info .title h3 { - font-size: 15px; - } - .saas-testimonials-item p { - font-size: 14px; - } - .testimonials-box { - padding: 20px 15px; - } - .testimonials-box .icon { - width: 60px; - height: 60px; - line-height: 60px; - font-size: 25px; - margin-bottom: 15px; - } - .testimonials-box p { - font-size: 14px; - } - .testimonials-box .info { - margin-top: 20px; - } - .testimonials-box .info h3 { - font-size: 15px; - } - .single-skills-box { - padding: 20px; - } - .short-brief-area .row .col-lg-6:last-child .short-brief-content { - border-bottom: none; - margin-bottom: 0; - } - .short-brief-content { - border-bottom: 1px solid #eeeeee; - padding-bottom: 30px; - } - .short-brief-content .timeline-content h3 { - font-size: 16px; - margin-bottom: 12px; - } - .short-brief-content .timeline-item { - padding-left: 30px; - } - .short-brief-content .timeline-info .sub-title { - margin-bottom: 10px; - } - .short-brief-content .timeline-info .sub-title span { - font-size: 15px; - } - .video-box .video-btn { - top: 50%; - -webkit-transform: translateY(-50%) translateX(-50%); - transform: translateY(-50%) translateX(-50%); - width: 55px; - height: 55px; - font-size: 20px; - } - .single-team-member .content { - padding: 20px 15px; - } - .single-team-member .content::before { - opacity: 1; - visibility: visible; - } - .single-team-member .content h3 { - font-size: 16px; - -webkit-transform: translateY(0) !important; - transform: translateY(0) !important; - } - .single-team-member .content span { - -webkit-transform: translateY(0) !important; - transform: translateY(0) !important; - } - .single-team-member .content .social { - bottom: auto; - opacity: 1; - visibility: visible; - top: -30px; - } - .single-team-member .content .social li a { - font-size: 15px; - } - .single-team-box .image .social { - margin-bottom: 0; - opacity: 1; - visibility: visible; - padding: 20px; - } - .single-team-box .content { - margin-top: 20px; - } - .single-team-box .content h3 { - font-size: 16px; - } - .team-member .content { - padding: 20px 15px; - margin-top: 0; - } - .team-member .content::before { - opacity: 1; - visibility: visible; - } - .team-member .content h3 { - font-size: 16px; - -webkit-transform: translateY(0) !important; - transform: translateY(0) !important; - } - .team-member .content span { - -webkit-transform: translateY(0) !important; - transform: translateY(0) !important; - } - .team-member .content .social { - visibility: visible; - bottom: auto; - opacity: 1; - top: -30px; - } - .team-member .content .social li a { - font-size: 15px; - } - .team-box .content { - visibility: visible; - position: relative; - padding: 20px 15px; - opacity: 1; - bottom: 0; - } - .team-box .content h3 { - font-size: 16px; - } - .team-box .content .social li a { - font-size: 17px; - } - .single-pricing-box { - text-align: center; - padding: 20px 15px; - } - .single-pricing-box .pricing-header { - margin-bottom: 20px; - padding-bottom: 20px; - } - .single-pricing-box .pricing-header h3 { - font-size: 30px; - } - .single-pricing-box .pricing-header h3 span { - font-size: 13px; - } - .single-pricing-box .features-list { - max-width: 176px; - text-align: start; - margin-bottom: 20px; - margin-left: auto; - margin-right: auto; - } - .single-pricing-box .features-list li { - padding-left: 20px; - } - .single-pricing-box .features-list li i { - top: 3.5px; - } - .pricing-box { - padding: 25px; - } - .pricing-box .pricing-header { - margin: -25px -25px 25px; - padding: 25px; - } - .pricing-box .pricing-header h3 { - font-size: 16px; - } - .pricing-box .pricing-header .price { - font-size: 30px; - } - .pricing-box .pricing-header .price span { - font-size: 13px; - } - .pricing-box .features-list { - margin-bottom: 25px; - } - .pricing-box.bg-black .pricing-header { - padding: 0 0 25px; - } - .pricing-tabs { - margin-top: 0; - } - .pricing-tabs .nav { - margin-bottom: 40px; - } - .pricing-tabs .nav .nav-item .nav-link { - padding: 11px 30px; - font-size: 14px; - } - .pricing-item { - padding: 20px 15px; - } - .pricing-item .pricing-header { - margin: -20px 0 20px; - padding: 20px 15px; - } - .pricing-item .pricing-header h3 { - font-size: 16px; - } - .pricing-item .pricing-header .price { - font-size: 30px; - } - .pricing-item .pricing-header .price span { - font-size: 13px; - } - .pricing-item .features-list { - margin-bottom: 20px; - } - .single-clients-box a { - padding: 10px; - } - .services-details-content { - text-align: center; - } - .services-details-content h2 { - font-size: 22px; - } - .services-details-video { - margin-left: 0; - margin-top: 30px; - } - .services-details-video iframe { - height: 162px; - } - .showMoreItemsList + .button-box button { - margin-top: 0; - padding: 11px 30px; - font-size: 14px; - } - .single-featured-video-box .content h3 { - font-size: 16px; - } - .featured-video-item-list .single-featured-video-item .image { - height: auto; - background-image: unset !important; - } - .featured-video-item-list .single-featured-video-item .image img { - display: inline-block; - } - .featured-video-item-list .single-featured-video-item .content { - padding-top: 20px; - padding-left: 0; - padding-bottom: 0; - } - .featured-video-item-list .single-featured-video-item .content h3 { - font-size: 16px; - } - .latest-posts-area .widget-area { - margin-top: 10px; - margin-bottom: 30px; - } - .single-latest-post-box .post-content { - padding-top: 20px; - padding-left: 0; - padding-right: 0; - } - .single-latest-post-box .post-content h3 { - font-size: 16px; - } - .single-latest-post-box .post-content .link-btn i { - top: 6px; - } - .what-we-do-content { - text-align: center; - } - .what-we-do-content .section-title { - text-align: center; - margin-bottom: 0; - } - .what-we-do-content .section-title p { - margin-top: 12px; - } - .what-we-do-content .single-what-we-do-box { - margin-top: 30px; - } - .single-what-we-do-box .icon { - font-size: 35px; - margin-bottom: 20px; - } - .single-what-we-do-box h3 { - font-size: 16px; - } - .what-we-do-image { - margin-top: 30px; - } - .shorting-menu { - margin-bottom: 15px; - } - .shorting-menu .filter { - font-size: 14px; - margin-bottom: 15px; - margin-right: 10px; - margin-left: 10px; - } - .works-slides-style-one.owl-theme .owl-nav, .works-slides-style-two.owl-theme .owl-nav { - opacity: 1; - visibility: visible; - } - .works-slides-style-one.owl-theme .owl-nav [class*=owl-], .works-slides-style-two.owl-theme .owl-nav [class*=owl-] { - left: 15px; - width: 35px; - height: 35px; - line-height: 35px; - font-size: 16px; - } - .works-slides-style-one.owl-theme .owl-nav [class*=owl-].owl-next, .works-slides-style-two.owl-theme .owl-nav [class*=owl-].owl-next { - left: auto; - right: 15px; - } - .works-slides-style-one.owl-theme .owl-dots, .works-slides-style-two.owl-theme .owl-dots { - margin-top: 30px; - } - .works-slides-style-one.owl-theme .owl-dots .owl-dot span, .works-slides-style-two.owl-theme .owl-dots .owl-dot span { - width: 15px; - height: 15px; - margin: 0 3px; - } - .portfolio-details-desc h3 { - font-size: 17px; - } - .portfolio-details-desc .image { - padding-right: 0; - } - .portfolio-details-desc .content { - margin-top: 0; - margin-bottom: 15px; - } - .portfolio-details-info { - padding: 20px; - margin-left: 0; - margin-top: 30px; - } - .portfolio-details-info ul li .icon { - top: 6px; - font-size: 20px; - } - .portfolio-details-info ul li span { - margin-bottom: 8px; - font-size: 15px; - } - .portfolio-details-slides.owl-theme .owl-nav { - opacity: 1; - visibility: visible; - } - .portfolio-details-slides.owl-theme .owl-nav [class*=owl-] { - left: 15px; - width: 35px; - height: 35px; - line-height: 35px; - font-size: 16px; - } - .portfolio-details-slides.owl-theme .owl-nav [class*=owl-].owl-next { - left: auto; - right: 15px; - } - .portfolio-details-left a { - padding-left: 20px; - font-size: 13px; - } - .menu-icon { - font-size: 18px; - } - .portfolio-details-right a { - padding-right: 20px; - font-size: 13px; - } - .widget-area { - margin-top: 40px; - } - .widget-area .widget .widget-title { - font-size: 16px; - padding-bottom: 10px; - } - .widget-area .widget_service_categories ul li a i { - font-size: 11px; - } - .widget-area .widget_about_author .about-author { - padding: 20px 15px; - } - .widget-area .widget_noke_posts_thumb .item { - padding-left: 95px; - } - .widget-area .widget_noke_posts_thumb .item .thumb { - width: 80px; - } - .widget-area .widget_noke_posts_thumb .item .thumb .fullimage { - width: 80px; - } - .widget-area .widget_noke_posts_thumb .item .info .title { - font-size: 13px; - } - .widget-area .widget_recent_posts .item .title { - font-size: 14px; - } - .widget-area .widget_newsletter { - padding: 20px 15px; - } - .widget-area .widget_newsletter h4 { - font-size: 17px; - } - .widget-area .widget_tag_cloud .tagcloud a { - font-size: 13px !important; - } - .widget-area.extra-padding { - padding-left: 0; - } - .widget-area.extra-padding.left-sidebar { - padding-right: 0; - margin-top: 0; - margin-bottom: 40px; - } - .widget-area .widget_price_filter .collection_filter_by_price { - padding-right: 15px; - } - .widget-area .widget_colors ul li a span:nth-child(1) { - width: 15px; - height: 15px; - } - .widget-area .widget_top_rated_products .item .info .title { - margin-bottom: 6px; - font-size: 13px; - } - .products-details-desc { - padding-left: 0; - margin-top: 30px; - } - .products-details-desc h3 { - margin-bottom: 15px; - font-size: 16px; - } - .products-details-desc .products-review .rating { - font-size: 13px; - } - .products-details-desc .price { - font-size: 14px; - } - .products-details-tabs { - margin-top: 30px; - } - .products-details-tabs .single-tabs-box h2 { - font-size: 17px; - } - .products-details-tabs .single-tabs-box .inner-box h3 { - font-size: 16px; - margin-bottom: 15px; - } - .products-details-tabs .single-tabs-box .inner-box .table-striped tbody tr td { - font-size: 13px; - white-space: nowrap; - } - .products-details-tabs .single-tabs-box .inner-box .products-review-comments .user-review { - padding-left: 0; - } - .products-details-tabs .single-tabs-box .inner-box .products-review-comments .user-review .sub-comment { - margin-bottom: 6px; - } - .products-details-tabs .single-tabs-box .inner-box .products-review-comments .user-review img { - top: 0; - left: 0; - position: relative; - margin-bottom: 15px; - } - .products-details-tabs .single-tabs-box .inner-box .review-form-wrapper form button { - margin-top: 20px; - font-size: 14px; - } - .cart-table-desc table thead tr th { - font-size: 14px; - white-space: nowrap; - } - .cart-table-desc table tbody tr td { - padding-right: 20px; - white-space: nowrap; - font-size: 13px; - text-align: center; - } - .cart-buttons-desc .shopping-coupon-code .form-control { - padding-left: 10px; - } - .cart-buttons-desc .shopping-coupon-code button { - padding: 0 15px; - font-size: 12px; - } - .cart-buttons-desc .text-end { - text-align: center !important; - margin-top: 30px; - } - .cart-totals-desc { - margin-top: 30px; - padding: 20px 15px; - } - .cart-totals-desc h3 { - font-size: 16px; - padding-top: 15px; - padding-left: 15px; - padding-right: 15px; - padding-bottom: 14px; - margin-left: -15px; - margin-right: -15px; - margin-bottom: 20px; - margin-top: -20px; - } - .cart-totals-desc .default-btn { - margin-top: 20px; - } - .billing-details-desc { - padding: 20px 15px; - } - .billing-details-desc h3 { - font-size: 16px; - padding-top: 15px; - padding-left: 15px; - padding-right: 15px; - padding-bottom: 14px; - margin-left: -15px; - margin-right: -15px; - margin-bottom: 20px; - margin-top: -20px; - } - .billing-details-desc .form-group .nice-select { - font-size: 13px; - } - .billing-details-desc .form-group .nice-select .list .option { - font-size: 14px; - } - .order-details-desc { - margin-top: 30px; - padding: 20px 15px; - } - .order-details-desc h3 { - font-size: 16px; - padding-top: 15px; - padding-left: 15px; - padding-right: 15px; - padding-bottom: 14px; - margin-left: -15px; - margin-right: -15px; - margin-bottom: 20px; - margin-top: -20px; - } - .order-details-desc .default-btn { - margin-top: 20px; - } - .blog-details-desc .article-content .entry-meta { - margin-top: -10px; - } - .blog-details-desc .article-content .entry-meta ul li { - margin-right: 10px; - margin-top: 10px; - } - .blog-details-desc .article-content h3 { - font-size: 16px; - line-height: 1.5; - margin-bottom: 12px; - margin-top: 20px; - } - .blog-details-desc .article-footer { - text-align: center; - } - .blog-details-desc .article-footer .article-tags { - -webkit-box-flex: 0; - -ms-flex: 0 0 100%; - flex: 0 0 100%; - max-width: 100%; - } - .blog-details-desc .article-footer .article-tags .d-flex { - display: block !important; - } - .blog-details-desc .article-footer .article-tags p { - display: block; - margin-bottom: 0; - } - .blog-details-desc .article-footer .article-tags a { - margin-top: 10px; - } - .blog-details-desc .article-footer .article-share { - -webkit-box-flex: 0; - -ms-flex: 0 0 100%; - flex: 0 0 100%; - max-width: 100%; - margin-top: 20px; - } - .blog-details-desc .article-footer .article-share .social { - text-align: center; - } - blockquote { - padding: 20px !important; - } - blockquote::after, blockquote::after { - width: 1px; - } - blockquote p { - font-size: 14px !important; - } - .comments-area { - margin-top: 25px; - } - .comments-area .comments-title { - font-size: 16px; - } - .comments-area .comment-author { - font-size: 14px; - } - .comments-area .comment-author .avatar { - top: 0; - left: 0; - display: block; - position: relative; - margin-bottom: 12px; - } - .comments-area .comment-body .reply a { - font-size: 12px; - } - .comments-area .comment-body { - padding-left: 0; - } - .comments-area .comment-respond { - margin-top: 25px; - } - .comments-area .comment-respond .comment-reply-title { - font-size: 16px; - } - .comments-area .comment-respond .comment-form-author { - width: 100%; - padding-right: 0; - } - .comments-area .comment-respond .comment-form-email { - width: 100%; - padding-left: 0; - } - .comments-area .comment-respond input[type="date"], .comments-area .comment-respond input[type="time"], .comments-area .comment-respond input[type="datetime-local"], .comments-area .comment-respond input[type="week"], .comments-area .comment-respond input[type="month"], .comments-area .comment-respond input[type="text"], .comments-area .comment-respond input[type="email"], .comments-area .comment-respond input[type="url"], .comments-area .comment-respond input[type="password"], .comments-area .comment-respond input[type="search"], .comments-area .comment-respond input[type="tel"], .comments-area .comment-respond input[type="number"], .comments-area .comment-respond textarea { - font-size: 14px; - padding-left: 12px; - } - .comments-area .comment-respond textarea { - padding-top: 12px; - } - .comments-area .comment-respond .comment-form-cookies-consent label { - font-size: 14px; - } - .comments-area .comment-respond .form-submit input { - font-size: 13px; - } - .faq-accordion .accordion-item .accordion-button { - padding: 15px 15px 15px 40px; - font-size: 14px; - } - .faq-accordion .accordion-item .accordion-button::after { - left: 15px; - top: 20px; - width: 12px; - height: 12px; - background-size: 12px; - } - .faq-accordion .accordion-item .accordion-body { - padding: 0 15px 15px 40px; - } - .facility-content { - padding-right: 0; - margin-bottom: 30px; - } - .facility-content .item { - padding-left: 0; - text-align: center; - } - .facility-content .item i { - line-height: 1; - font-size: 35px; - position: relative; - margin-bottom: 20px; - display: inline-block; - } - .facility-content .item h3 { - font-size: 16px; - } - .cta-content { - max-width: 100%; - } - .cta-content h2 { - font-size: 22px; - } - .cta-content p { - max-width: 100%; - margin-top: 15px; - } - .cta-content .default-btn { - margin-top: 10px; - } - .call-to-action-content { - text-align: center; - } - .call-to-action-content h2 { - font-size: 22px; - } - .call-to-action-btn { - text-align: center; - margin-top: 25px; - } - .call-to-action-inner { - padding-left: 15px; - padding-right: 15px; - } - .profile-authentication-area { - height: auto; - padding-bottom: 70px; - padding-top: 130px; - } - .signin-form { - max-width: 100%; - text-align: center; - padding: 20px 15px; - } - .signin-form h2 { - font-size: 25px; - margin-bottom: 25px; - } - .signin-form form .lost-your-password-wrap { - text-align: start; - margin-top: 15px; - } - .signin-form form .form-group { - margin-bottom: 15px; - } - .signin-form form button { - padding: 12px 30px; - font-size: 14px; - } - .signin-form form .dont-account { - margin-top: 20px; - } - .signin-form form .sign-in-with-button { - margin-top: 20px; - } - .signup-form { - max-width: 100%; - text-align: center; - padding: 20px 15px; - } - .signup-form h2 { - font-size: 25px; - margin-bottom: 25px; - } - .signup-form form .lost-your-password-wrap { - text-align: start; - margin-top: 15px; - } - .signup-form form .form-group { - margin-bottom: 15px; - } - .signup-form form button { - padding: 12px 30px; - font-size: 14px; - } - .signup-form form .dont-account { - margin-top: 20px; - } - .signup-form form .sign-in-with-button { - margin-top: 20px; - } - .noke-grid-sorting { - margin-bottom: 30px; - text-align: center; - } - .noke-grid-sorting .ordering { - text-align: center; - margin-top: 15px; - } - .noke-grid-sorting .ordering select { - font-size: 14px; - } - .app-download-area .col-lg-6:nth-child(1) { - -webkit-box-ordinal-group: 3; - -ms-flex-order: 2; - order: 2; - } - .app-download-area .col-lg-6:nth-child(2) { - -webkit-box-ordinal-group: 2; - -ms-flex-order: 1; - order: 1; - } - .app-download-content { - text-align: center; - } - .app-download-content .sub-title { - font-size: 13px; - } - .app-download-content h2 { - font-size: 22px; - } - .app-download-content .btn-box { - margin-top: 25px; - } - .app-download-content .btn-box .store-btn { - padding: 10px 10px 10px 45px; - font-size: 12px; - text-align: start; - margin-left: 3px; - margin-right: 3px; - } - .app-download-content .btn-box .store-btn:first-child { - margin-left: 0; - } - .app-download-content .btn-box .store-btn img { - left: 10px; - width: 25px; - } - .app-download-content .btn-box .store-btn span { - font-size: 14px; - } - .app-download-image { - padding-right: 0; - margin-top: 30px; - } - .trending-style-image { - margin-right: 0; - padding-bottom: 0; - padding-right: 0; - } - .trending-style-image img:nth-child(2) { - position: relative; - margin-top: 30px; - width: auto; - } - .trending-style-content { - text-align: center; - padding-left: 0; - margin-top: 30px; - } - .trending-style-content .sub-title { - font-size: 13px; - } - .trending-style-content h2 { - margin-bottom: 13px; - font-size: 22px; - } - .trending-style-content h3 { - font-size: 15px; - margin-bottom: 13px; - } - .trending-style-content .default-btn { - margin-top: 5px; - } - .page-title-area { - padding-top: 60px; - padding-bottom: 70px; - } - .page-title-area.style-three { - padding-top: 60px; - padding-bottom: 60px; - } - .page-title-area.style-four { - padding-top: 60px; - padding-bottom: 60px; - } - .page-title-area.style-four::before { - background-image: unset !important; - background-color: rgba(255, 255, 255, 0.85); - } - .page-title-area.style-two { - padding-bottom: 60px; - padding-top: 245px; - } - .page-title-content.text-start { - text-align: center !important; - } - .page-title-content h2 { - font-size: 25px; - } - .page-title-content ul { - margin-top: 10px; - } - .page-title-content ul li { - font-size: 14px; - } - .privacy-policy-content h3 { - font-size: 16px; - margin-bottom: 13px; - } - .terms-conditions-content h3 { - font-size: 16px; - margin-bottom: 13px; - } - .error-content h3 { - font-size: 20px; - margin-bottom: 15px; - margin-top: 30px; - } - .error-content .default-btn { - margin-top: 20px; - } - .coming-soon-image { - height: auto; - background-image: unset !important; - } - .coming-soon-image img { - display: inline-block; - } - .coming-soon-content { - height: auto; - padding-top: 60px; - padding-bottom: 60px; - padding-left: 15px; - padding-right: 15px; - } - .coming-soon-content h2 { - font-size: 25px; - margin-top: 25px; - } - .coming-soon-content #timer { - margin-top: 10px; - } - .coming-soon-content #timer div { - width: 95px; - height: 100px; - font-size: 30px; - margin-top: 20px; - } - .coming-soon-content #timer div span { - font-size: 14px; - } - .coming-soon-content #timer div:first-child { - margin-left: 10px; - } - .coming-soon-content #timer div:last-child { - margin-right: 10px; - } - .coming-soon-content form { - max-width: 100%; - margin-top: 30px; - } - .coming-soon-content form .default-btn { - position: relative; - right: 0; - bottom: 0; - display: block; - width: 100%; - padding: 13px 20px; - margin-top: 15px; - } - .coming-soon-content form .input-newsletter { - padding: 0 0 0 15px; - height: 50px; - font-size: 13px; - } - .single-blog-post .content { - padding: 15px; - } - .single-blog-post .content .meta li i { - top: 3px; - } - .single-blog-post .content h3 { - font-size: 16px; - } - .single-post-item .post-content { - padding: 20px 15px; - } - .single-post-item .post-content .meta { - margin-bottom: 3px; - } - .single-post-item .post-content .meta li { - padding-left: 19px; - margin-right: 10px; - margin-bottom: 10px; - } - .single-post-item .post-content .tag { - margin-bottom: 12px; - } - .single-post-item .post-content h3 { - font-size: 16px; - } - .single-post-item .post-content .link-btn i { - top: 6px; - } - .single-post-item.without-box-shadow .post-content { - padding-left: 0; - padding-right: 0; - } - .blog-section-title { - text-align: center; - margin-bottom: 40px; - } - .blog-section-title .sub-title { - font-size: 13px; - } - .blog-section-title h2 { - font-size: 22px; - } - .blog-section-title .default-btn { - margin-top: 5px; - } - .pagination-area { - margin-top: 10px; - } - .pagination-area .page-numbers { - width: 35px; - height: 35px; - line-height: 33px; - font-size: 15px; - } - .single-contact-info-box { - padding: 20px 15px; - text-align: center; - } - .single-contact-info-box .icon { - font-size: 30px; - margin-bottom: 20px; - } - .single-contact-info-box h3 { - font-size: 16px; - margin-bottom: 12px; - } - .single-contact-info-box.style-two .icon { - width: 60px; - height: 60px; - font-size: 25px; - margin-bottom: 20px; - } - .contact-form { - padding: 20px; - } - .footer-area { - padding-top: 60px; - } - .footer-area.marketing-footer .footer-top { - margin-bottom: 60px; - padding-bottom: 0; - } - .footer-area.business-footer .footer-top { - margin-bottom: 60px; - padding-top: 50px; - padding-bottom: 50px; - } - .footer-top { - text-align: center; - padding-bottom: 30px; - margin-bottom: 30px; - } - .footer-top .logo { - margin-bottom: 25px; - } - .footer-top .content.d-flex { - display: block !important; - } - .footer-top .content h3 { - font-size: 16px; - margin-bottom: 25px; - } - .single-footer-widget h3 { - font-size: 16px; - } - .single-footer-widget.pl-4 { - padding-left: 0; - } - .single-footer-widget.pl-2 { - padding-left: 0; - } - .single-footer-widget.style-two h3 { - padding-left: 0; - } - .single-footer-widget.style-two h3::before { - display: none; - } - .copyright-area { - margin-top: 30px; - padding-top: 20px; - padding-bottom: 20px; - } - .copyright-area .text-start { - text-align: center !important; - margin-bottom: 15px; - } - .copyright-area .social-links { - text-align: center; - margin-top: 15px; - } - .go-top { - width: 38px; - height: 38px; - font-size: 15px; - } - .productsQuickView .modal-dialog { - max-width: 100%; - } - .productsQuickView .modal-content { - padding: 15px; - } - .productsQuickView .modal-content button.btn-close { - font-size: 15px; - } - .productsQuickView .modal-content .products-content { - margin-top: 25px; - } - .productsQuickView .modal-content .products-content h3 { - font-size: 16px; - } - .productsQuickView .modal-content .products-content .price { - font-size: 14px; - } - .productsQuickView .modal-content .products-content .products-add-to-cart { - margin-top: 20px; - } - .productsQuickView .modal-content .products-content .social-share { - margin-top: 25px; - } -} - -/* Min width 576px to Max width 767px */ -@media only screen and (min-width: 576px) and (max-width: 767px) { - .top-header-area .container-fluid { - max-width: 540px; - } - .top-header-area.top-header-style-two .container-fluid { - max-width: 540px; - } - .top-header-area.top-header-style-three .container-fluid { - max-width: 540px; - } - .startup-banner-inner { - padding-left: 25px; - padding-right: 25px; - } - .startup-banner-content { - max-width: 540px; - margin-left: auto; - margin-right: auto; - padding-left: 15px; - padding-right: 15px; - } - .startup-banner-image { - max-width: 540px; - margin-left: auto; - margin-right: auto; - padding-left: 15px; - padding-right: 15px; - } - .business-banner-area .container { - max-width: 540px; - } - .app-banner-area .container { - max-width: 540px; - } - .saas-banner-area .container-fluid { - max-width: 540px; - } - .personal-portfolio-banner-area .container { - max-width: 540px; - } - .consulting-banner-area .container { - max-width: 540px; - } - .screenshot-wrap .screenshot-frame { - display: block; - height: 500px; - width: 240px; - top: 40px; - } - .screenshot-slides.owl-theme .owl-nav [class*=owl-] { - left: 0; - } - .screenshot-slides.owl-theme .owl-nav [class*=owl-].owl-next { - left: auto; - right: 0; - } - .startup-about-area .container-fluid { - max-width: 540px; - } - .single-services-box .content { - padding: 25px; - } - .single-blog-post .content { - padding: 25px; - } - .works-area .container-fluid { - max-width: 540px; - } - .facility-content { - display: -webkit-box; - display: -ms-flexbox; - display: flex; - -ms-flex-wrap: wrap; - flex-wrap: wrap; - margin-right: -15px; - margin-left: -15px; - margin-bottom: 0; - } - .facility-content .item { - -webkit-box-flex: 0; - -ms-flex: 0 0 50%; - flex: 0 0 50%; - max-width: 50%; - margin-bottom: 30px !important; - padding-left: 15px; - padding-right: 15px; - } - .startup-testimonials-area .container-fluid { - max-width: 540px; - } - .trending-style-image { - padding-right: 100px; - padding-bottom: 80px; - } - .trending-style-image img:nth-child(2) { - position: absolute; - margin-top: 0; - width: 250px; - } - .productsQuickView .modal-dialog { - max-width: 430px; - } - .productsQuickView .modal-content { - padding: 30px; - } -} - -/* Min width 768px to Max width 991px */ -@media only screen and (min-width: 768px) and (max-width: 991px) { - body { - font-size: 14.5px; - } - p { - font-size: 14.5px; - } - .ptb-100 { - padding-top: 80px; - padding-bottom: 80px; - } - .pt-100 { - padding-top: 80px; - } - .pb-100 { - padding-bottom: 80px; - } - .ptb-70 { - padding-top: 50px; - padding-bottom: 50px; - } - .pt-70 { - padding-top: 50px; - } - .pb-70 { - padding-bottom: 50px; - } - .default-btn { - font-size: 14.5px; - } - .section-title { - max-width: 550px; - margin-bottom: 50px; - } - .section-title h2 { - font-size: 30px; - } - .section-title.style-two { - text-align: center; - padding-left: 0; - margin-left: auto; - margin-right: auto; - margin-bottom: 50px; - } - .section-title.style-two h2::before { - display: none; - } - .section-title.style-four { - text-align: center; - } - .section-title.style-four h2 { - font-size: 25px; - } - .section-title.style-four::before { - left: 50%; - -webkit-transform: translateX(-50%); - transform: translateX(-50%); - } - .top-header-area .container-fluid { - max-width: 720px; - } - .top-header-area.top-header-style-two .container-fluid { - max-width: 720px; - } - .top-header-area.top-header-style-three .container-fluid { - max-width: 720px; - } - .noke-responsive-nav .others-option { - display: -webkit-box !important; - display: -ms-flexbox !important; - display: flex !important; - } - .others-option-for-responsive { - display: none; - } - .startup-banner-area .container-fluid { - max-width: 100%; - padding-left: 0; - padding-right: 0; - } - .startup-banner-inner { - padding-top: 80px; - padding-bottom: 80px; - padding-left: 25px; - padding-right: 25px; - } - .startup-banner-content { - max-width: 720px; - text-align: center; - margin-left: auto; - margin-right: auto; - padding-left: 15px; - padding-right: 15px; - } - .startup-banner-content p { - margin-left: auto; - margin-right: auto; - } - .startup-banner-content h1 { - margin-bottom: 20px; - font-size: 35px; - } - .startup-banner-content .default-btn { - margin-top: 5px; - } - .startup-banner-image { - max-width: 720px; - padding-left: 15px; - padding-right: 15px; - margin-left: auto; - margin-right: auto; - margin-top: 30px; - } - .marketing-banner-area { - padding-top: 70px; - padding-bottom: 70px; - } - .marketing-banner-content { - padding-right: 0; - text-align: center; - } - .marketing-banner-content p { - margin-left: auto; - margin-right: auto; - } - .marketing-banner-content h1 { - margin-bottom: 15px; - font-size: 35px; - } - .marketing-banner-content .default-btn { - margin-top: 5px; - } - .marketing-banner-image { - margin-top: 30px; - } - .business-banner-area { - padding-top: 80px; - padding-bottom: 80px; - } - .business-banner-area .container { - max-width: 720px; - } - .business-banner-area::before { - display: none; - } - .business-banner-content { - padding-right: 0; - text-align: center; - max-width: 100%; - } - .business-banner-content p { - margin-left: auto; - margin-right: auto; - } - .business-banner-content h1 { - margin-bottom: 15px; - font-size: 36px; - } - .business-banner-content .default-btn { - margin-top: 5px; - } - .business-banner-image { - margin-top: 30px; - } - .app-banner-area { - padding-top: 80px; - padding-bottom: 80px; - } - .app-banner-area .container { - max-width: 720px; - } - .app-banner-content { - text-align: center; - } - .app-banner-content p { - margin-left: auto; - margin-right: auto; - } - .app-banner-content h1 { - margin-bottom: 15px; - font-size: 40px; - } - .app-banner-content .btn-box { - margin-top: 20px; - } - .app-banner-content .btn-box .store-btn { - text-align: start; - } - .app-banner-content .btn-box .store-btn span { - font-size: 16px; - } - .app-banner-image { - padding-left: 0; - margin-top: 35px; - } - .personal-portfolio-banner-area { - padding-top: 80px; - padding-bottom: 80px; - } - .personal-portfolio-banner-area .container { - max-width: 720px; - } - .personal-portfolio-banner-content { - text-align: center; - } - .personal-portfolio-banner-content .sub-title { - padding-left: 0; - font-size: 16px; - } - .personal-portfolio-banner-content .sub-title::before { - display: none; - } - .personal-portfolio-banner-content p { - margin-left: auto; - margin-right: auto; - } - .personal-portfolio-banner-content h4 { - margin-bottom: 15px; - font-size: 20px; - } - .personal-portfolio-banner-content h1 { - margin-bottom: 15px; - font-size: 40px; - } - .personal-portfolio-banner-content .default-btn { - margin-top: 5px; - } - .personal-portfolio-banner-image { - margin-top: 30px; - } - .personal-portfolio-banner-image img { - width: 100%; - } - .shape1, .shape2, .shape3, .shape4, .shape5, .shape6, .shape7, .shape8, .shape9, .shape16, .shape17, .shape18, .shape19 { - display: none !important; - } - .saas-banner-area { - padding-top: 80px; - } - .saas-banner-area .container-fluid { - max-width: 720px; - padding-left: 15px; - padding-right: 15px; - } - .saas-banner-content { - margin-left: 0; - text-align: center; - max-width: 100%; - } - .saas-banner-content h1 { - margin-bottom: 15px; - font-size: 40px; - } - .saas-banner-content p { - margin-left: auto; - margin-right: auto; - } - .saas-banner-image { - margin-top: 35px; - } - .consulting-banner-area { - padding-top: 215px; - padding-bottom: 80px; - } - .consulting-banner-area .container { - max-width: 720px; - } - .consulting-banner-area::before { - display: block; - } - .consulting-banner-content { - text-align: center; - max-width: 100%; - } - .consulting-banner-content h1 { - margin-bottom: 15px; - font-size: 35px; - } - .consulting-banner-content p { - margin-left: auto; - margin-right: auto; - } - .consulting-banner-content .default-btn { - margin-top: 5px; - } - .it-agency-banner-area .it-agency-inner-banner { - padding-top: 200px; - padding-bottom: 230px; - } - .it-agency-banner-content { - max-width: 100%; - } - .it-agency-banner-content h1 { - font-size: 40px; - margin-bottom: 15px; - } - .it-agency-banner-content .default-btn { - margin-top: 8px; - } - .banner-video-box { - max-width: 100%; - margin-top: -130px; - } - .shop-banner-area { - padding-top: 100px; - padding-bottom: 100px; - } - .shop-banner-content .sub-title { - font-size: 20px; - } - .shop-banner-content h1 { - margin-bottom: 15px; - font-size: 40px; - } - .shop-banner-content h4 { - font-size: 20px; - } - .shop-banner-content .default-btn { - margin-top: 25px; - } - .blog-banner-area { - padding-top: 80px; - padding-bottom: 80px; - } - .blog-banner-item { - margin-bottom: 30px; - } - .blog-banner-item .content { - padding: 25px; - max-width: 510px; - } - .blog-banner-item .content h3 { - font-size: 20px; - } - .blog-banner-item-list .single-blog-banner-item .image { - background-image: unset !important; - height: auto; - } - .blog-banner-item-list .single-blog-banner-item .image img { - display: inline-block; - } - .blog-banner-item-list .single-blog-banner-item .content { - padding-top: 20px; - padding-bottom: 0; - padding-left: 0; - } - .blog-banner-item-list .single-blog-banner-item .content h3 { - font-size: 18px; - } - .furniture-banner-item { - padding-top: 100px; - padding-bottom: 100px; - } - .furniture-banner-content { - border-left-width: 3px; - padding: 30px; - } - .furniture-banner-content h1 { - font-size: 35px; - } - .minimal-portfolio-banner-area { - padding-bottom: 170px; - padding-top: 200px; - } - .minimal-portfolio-banner-content { - max-width: 600px; - } - .minimal-portfolio-banner-content .typewrite { - padding: 8px 20px; - margin-bottom: 25px; - font-size: 15px; - } - .minimal-portfolio-banner-content h1 { - font-size: 35px; - margin-bottom: 25px; - } - .features-area.ptb-70 { - padding-bottom: 20px; - } - .single-features-box { - padding-left: 0; - padding-right: 0; - } - .single-features-box .icon { - font-size: 40px; - -webkit-transform: translateY(0) !important; - transform: translateY(0) !important; - } - .single-features-box h3 { - font-size: 18px; - -webkit-transform: translateY(0) !important; - transform: translateY(0) !important; - } - .single-features-box p { - -webkit-transform: translateY(0) !important; - transform: translateY(0) !important; - } - .single-features-box .link-btn { - left: 0; - opacity: 1; - -webkit-transform: unset; - transform: unset; - margin-top: 13px; - position: relative; - visibility: visible; - bottom: 0 !important; - } - .single-features-box .link-btn i { - top: 6.5px; - } - .features-box { - padding: 25px 20px; - } - .features-box h3 { - font-size: 18px; - } - .features-box .icon { - width: 80px; - height: 80px; - font-size: 40px; - line-height: 80px; - } - .single-features-item { - padding-left: 55px; - } - .single-features-item .icon { - font-size: 40px; - } - .single-features-item h3 { - font-size: 17px; - } - .features-item { - padding: 25px 20px; - } - .features-item .icon { - font-size: 30px; - } - .features-item h3 { - font-size: 18px; - } - .startup-about-area { - border-bottom: 1px solid #eeeeee; - margin-bottom: 80px; - } - .startup-about-area .container-fluid { - max-width: 720px; - } - .startup-about-image { - margin-right: 0; - padding: 0; - } - .startup-about-image .video-btn { - left: 50%; - -webkit-transform: translateY(-50%) translateX(-50%); - transform: translateY(-50%) translateX(-50%); - } - .startup-about-content { - padding-left: 0; - text-align: center; - max-width: 100%; - margin-top: 30px; - } - .startup-about-content h2 { - font-size: 30px; - } - .startup-about-content .features-list { - padding-left: 0; - list-style-type: none; - } - .startup-about-content .features-list li { - font-weight: 600; - } - .marketing-about-image { - margin-right: 0; - } - .marketing-about-content { - padding-left: 0; - text-align: center; - margin-top: 30px; - } - .marketing-about-content h2 { - font-size: 30px; - } - .marketing-about-content .features-list { - padding-left: 0; - list-style-type: none; - } - .marketing-about-content .features-list li { - font-weight: 600; - } - .business-about-image { - padding-right: 0; - margin-bottom: 30px; - } - .business-about-content { - padding-left: 0; - text-align: center; - } - .business-about-content h2 { - font-size: 30px; - } - .app-about-content { - padding-right: 0; - } - .app-about-content h3 { - font-size: 19px; - margin-bottom: 15px; - } - .app-about-image { - padding-left: 0; - margin-top: 30px; - } - .saas-about-image { - padding-right: 0; - margin-bottom: 30px; - } - .saas-about-content { - padding-left: 0; - } - .saas-about-content h2 { - font-size: 30px; - } - .it-agency-about-image { - padding-right: 0; - margin-right: 0; - padding-bottom: 0; - } - .it-agency-about-content { - padding-left: 0; - text-align: center; - margin-top: 35px; - } - .it-agency-about-content h2 { - font-size: 30px; - } - .it-agency-about-content .features-list { - padding-left: 0; - list-style-type: none; - } - .it-agency-about-content .features-list li { - font-weight: 600; - } - .expertise-box { - text-align: center; - } - .expertise-box .icon { - width: 70px; - height: 70px; - line-height: 70px; - font-size: 35px; - margin-left: auto; - margin-right: auto; - } - .expertise-box h3 { - font-size: 18px; - } - .who-we-are-content { - text-align: center; - padding: 30px; - } - .who-we-are-content h2 { - font-size: 20px; - } - .who-we-are-content .default-btn { - margin-top: 5px; - } - .single-services-box .content { - padding: 20px; - } - .single-services-box .content .icon { - font-size: 40px; - margin-bottom: 15px; - -webkit-transform: translateY(0) !important; - transform: translateY(0) !important; - } - .single-services-box .content h3 { - font-size: 18px; - -webkit-transform: translateY(0) !important; - transform: translateY(0) !important; - } - .single-services-box .content p { - -webkit-transform: translateY(0) !important; - transform: translateY(0) !important; - } - .single-services-box .content .link-btn { - left: 0; - opacity: 1; - -webkit-transform: unset; - transform: unset; - margin-top: 13px; - position: relative; - visibility: visible; - bottom: 0 !important; - } - .single-services-box .content .link-btn i { - top: 6px; - } - .single-services-box::before { - background: -webkit-gradient(linear, left bottom, left top, color-stop(0, rgba(35, 35, 37, 0.9)), color-stop(50%, rgba(35, 35, 37, 0.7)), color-stop(75%, rgba(22, 22, 23, 0)), to(rgba(0, 0, 0, 0))); - background: linear-gradient(to top, rgba(35, 35, 37, 0.9) 0, rgba(35, 35, 37, 0.7) 50%, rgba(22, 22, 23, 0) 75%, rgba(0, 0, 0, 0) 100%); - } - .single-services-item .content { - padding-left: 0; - padding-right: 0; - } - .single-services-item .content h3 { - font-size: 18px; - } - .services-tabs .nav { - margin-bottom: 35px; - border-bottom: 1px solid #eeeeee; - padding-bottom: 20px; - } - .services-tabs .nav .nav-item { - margin-left: 15px; - margin-right: 15px; - margin-bottom: 30px; - } - .services-tabs .nav .nav-item .nav-link { - font-size: 16px; - } - .services-tabs .nav .nav-item .nav-link .icon { - width: 70px; - height: 70px; - font-size: 30px; - line-height: 70px; - margin-bottom: 15px; - } - .single-main-services .content { - padding-right: 0; - text-align: center; - } - .single-main-services .content h3 { - font-size: 21px; - } - .single-main-services .content p { - max-width: 100%; - } - .single-main-services .image { - margin-top: 30px; - } - .services-box { - padding: 25px 20px; - } - .services-box .icon { - font-size: 50px; - } - .services-box h3 { - font-size: 18px; - } - .col-lg-3:nth-child(2) .services-box, .col-lg-3:nth-child(4) .services-box { - margin-top: 0; - } - .col-lg-3:nth-child(5) .services-box, .col-lg-3:nth-child(7) .services-box { - margin-top: 0; - } - .services-item h3 { - font-size: 18px; - margin-top: 20px; - } - .services-item .hover-content { - padding: 20px; - } - .single-it-services-box { - padding: 25px 20px 25px 70px; - } - .single-it-services-box .icon { - left: 20px; - top: 25px; - font-size: 35px; - } - .single-it-services-box h3 { - font-size: 18px; - } - .single-categories-box h3 { - font-size: 16px; - left: 20px; - top: 20px; - } - .categories-box h3 { - font-size: 17px; - padding-left: 15px; - padding-right: 15px; - } - .categories-slides.owl-theme .owl-nav { - opacity: 1; - visibility: visible; - margin-bottom: 30px; - } - .categories-slides.owl-theme .owl-nav [class*=owl-] { - margin: 0 5px; - position: relative; - left: 0; - top: 0; - -webkit-transform: unset; - transform: unset; - } - .categories-slides.owl-theme .owl-nav [class*=owl-].owl-next { - right: 0; - } - .startup-works-area { - border-top: 1px solid #eeeeee; - border-bottom: 1px solid #eeeeee; - padding-top: 80px; - margin-bottom: 80px; - } - .startup-works-area .section-title { - padding-top: 0; - text-align: center; - margin-bottom: 50px; - margin-left: auto; - margin-right: auto; - } - .startup-works-area .section-title h2 { - font-size: 30px; - } - .startup-works-content { - margin-top: 18px; - position: relative; - text-align: center; - border-top: 1px solid #eeeeee; - padding-right: 0; - padding-top: 55px; - } - .startup-works-content h3 { - font-size: 18px; - } - .startup-works-content .custom-owl-nav { - margin-top: 0; - } - .startup-works-content .custom-owl-nav [class*=owl-] { - margin: 0 3px; - font-size: 13px; - padding: 6px 20px 6px !important; - position: absolute; - left: 0; - top: -18px; - } - .startup-works-content .custom-owl-nav [class*=owl-].custom-owl-next { - left: auto; - right: 0; - } - .startup-works-image { - padding: 0; - margin-left: 0; - margin-top: 15px; - } - .single-works-box .works-image .works-overlay h3 { - font-size: 18px; - } - .works-box h3 { - top: auto; - -webkit-transform: translateY(0); - transform: translateY(0); - bottom: 0; - font-size: 18px; - opacity: 1; - visibility: visible; - margin-top: 0; - margin-right: 0; - margin-left: 0; - } - .single-featured-video-box .content h3 { - font-size: 18px; - } - .featured-video-item-list .single-featured-video-item .image { - height: auto; - background-image: unset !important; - } - .featured-video-item-list .single-featured-video-item .image img { - display: inline-block; - } - .featured-video-item-list .single-featured-video-item .content { - padding-bottom: 0; - padding-left: 0; - padding-top: 20px; - } - .featured-video-item-list .single-featured-video-item .content h3 { - font-size: 18px; - } - .latest-posts-area .widget-area { - margin-top: 10px; - } - .single-latest-post-box .post-content { - padding-top: 20px; - padding-right: 0; - padding-left: 0; - } - .single-latest-post-box .post-content h3 { - font-size: 18px; - } - .facility-content { - display: -webkit-box; - display: -ms-flexbox; - display: flex; - -ms-flex-wrap: wrap; - flex-wrap: wrap; - padding-right: 0; - margin-right: -15px; - margin-left: -15px; - margin-bottom: 0; - } - .facility-content .item { - -webkit-box-flex: 0; - -ms-flex: 0 0 50%; - flex: 0 0 50%; - max-width: 50%; - margin-bottom: 30px !important; - text-align: center; - padding-left: 15px; - padding-right: 15px; - } - .facility-content .item i { - line-height: 1; - position: relative; - margin-bottom: 20px; - display: inline-block; - font-size: 40px; - } - .facility-content .item h3 { - font-size: 18px; - } - .short-brief-area .row .col-lg-6:last-child .short-brief-content { - border-bottom: none; - margin-bottom: 0; - } - .short-brief-content { - border-bottom: 1px solid #eeeeee; - padding-bottom: 30px; - } - .short-brief-content .timeline-content h3 { - font-size: 18px; - margin-bottom: 12px; - } - .short-brief-content .timeline-info .sub-title { - margin-bottom: 10px; - } - .short-brief-content .timeline-info .sub-title span { - font-size: 17px; - } - .shorting-menu .filter { - font-size: 15px; - margin-left: 15px; - margin-right: 15px; - } - .widget-area { - margin-top: 40px; - } - .widget-area .widget .widget-title { - font-size: 17px; - } - .widget-area .widget_about_author .about-author { - padding: 25px; - } - .widget-area .widget_noke_posts_thumb .item .info .title { - font-size: 14px; - } - .widget-area .widget_newsletter h4 { - font-size: 18px; - } - .widget-area .widget_tag_cloud .tagcloud a { - font-size: 13px !important; - } - .widget-area .widget_recent_posts .item .title { - font-size: 14px; - } - .widget-area.extra-padding { - padding-left: 0; - } - .widget-area.extra-padding.left-sidebar { - padding-right: 0; - margin-top: 0; - margin-bottom: 40px; - } - .services-details-content { - text-align: center; - } - .services-details-content h2 { - font-size: 30px; - } - .services-details-video { - margin-left: 0; - margin-top: 30px; - } - .services-details-video iframe { - height: 387px; - } - .single-funfacts-box { - text-align: center; - padding: 30px; - } - .single-funfacts-box .icon { - position: relative; - left: 0; - line-height: 1; - top: 0; - -webkit-transform: translateY(0); - transform: translateY(0); - font-size: 40px; - display: block; - margin-bottom: 15px; - } - .single-funfacts-box h3 { - margin-bottom: 5px; - font-size: 35px; - } - .single-funfacts-box.without-bg-color { - margin-right: -15px; - padding-top: 5px; - padding-bottom: 5px; - padding-left: 0; - } - .single-funfacts-box.text-center { - padding: 0; - border-right: none; - } - .funfacts-inner { - padding-left: 20px; - padding-right: 20px; - } - .funfacts-inner.border-radius.ptb-70 { - padding-bottom: 20px; - } - .single-skills-box { - padding: 25px 20px; - } - .how-it-works-content { - padding-right: 0; - } - .how-it-works-content ul li { - padding-left: 60px; - } - .how-it-works-content ul li h3 { - font-size: 18px; - } - .how-it-works-content ul li i { - font-size: 40px; - } - .how-it-works-image { - margin-top: 30px; - } - .short-brief-content h3 { - font-size: 18px; - margin-bottom: 13px; - } - .screenshot-wrap .screenshot-frame { - border-radius: 20px; - width: 215px; - height: 448px; - } - .screenshot-slides.owl-theme .owl-nav [class*=owl-] { - left: -27px; - width: 30px; - line-height: 30px; - height: 30px; - font-size: 15px; - } - .screenshot-slides.owl-theme .owl-nav [class*=owl-].owl-next { - left: auto; - right: -27px; - } - .single-post-item .post-content { - padding: 20px 0 0; - } - .single-clients-box a { - padding: 20px; - } - .what-we-do-content .section-title { - text-align: center; - margin-bottom: 0; - } - .what-we-do-content .section-title p { - max-width: 540px; - margin-left: auto; - margin-right: auto; - } - .what-we-do-content .single-what-we-do-box { - margin-top: 30px; - } - .single-what-we-do-box { - text-align: center; - } - .single-what-we-do-box .icon { - font-size: 35px; - margin-bottom: 25px; - } - .single-what-we-do-box h3 { - font-size: 18px; - } - .what-we-do-image { - margin-top: 30px; - } - .single-process-box { - padding: 30px 20px; - } - .single-process-box h3 { - font-size: 18px; - } - .startup-testimonials-area .container-fluid { - max-width: 720px; - } - .startup-testimonials-content { - padding: 40px 30px; - } - .startup-testimonials-content .icon { - font-size: 40px; - } - .startup-testimonials-content p { - font-size: 16px; - } - .startup-testimonials-content .info h3 { - font-size: 16px; - } - .startup-testimonials-image { - padding: 0; - } - .startup-testimonials-slides.owl-theme .owl-nav { - margin-top: 0; - position: relative; - right: 0; - bottom: 0; - -webkit-transform: unset; - transform: unset; - padding-bottom: 40px; - } - .startup-testimonials-slides.owl-theme .owl-nav [class*=owl-] { - margin: 0 3px; - font-size: 13px; - padding: 6px 20px 6px !important; - } - .marketing-testimonials-image { - margin-left: 30px; - margin-right: 30px; - margin-bottom: 40px; - } - .marketing-testimonials-content { - padding-bottom: 0; - } - .marketing-testimonials-content .icon { - font-size: 40px; - } - .marketing-testimonials-content p { - font-size: 16px; - } - .marketing-testimonials-content .info h3 { - font-size: 16px; - } - .marketing-testimonials-slides.owl-theme .owl-nav { - margin-top: 30px; - position: relative; - right: 0; - bottom: 0; - -webkit-transform: unset; - transform: unset; - } - .marketing-testimonials-slides.owl-theme .owl-nav [class*=owl-] { - margin: 0 3px; - font-size: 13px; - padding: 6px 20px 6px !important; - } - .business-testimonials-area { - background-repeat: repeat; - background-size: contain; - } - .business-testimonials-image { - margin-right: 0; - margin-bottom: 35px; - } - .business-testimonials-content .icon { - font-size: 40px; - } - .business-testimonials-content p { - font-size: 16px; - } - .business-testimonials-content .info h3 { - font-size: 16px; - } - .testimonials-slides.owl-theme { - padding-left: 90px; - padding-right: 90px; - } - .testimonials-slides.owl-theme .owl-nav [class*=owl-] { - margin: 0 3px; - font-size: 13px; - padding: 6px 20px 6px !important; - } - .testimonials-inner { - padding-left: 25px; - padding-right: 25px; - } - .testimonials-inner .testimonials-slides.owl-theme .owl-nav [class*=owl-] { - font-size: 17px; - width: 40px; - height: 40px; - line-height: 40px; - } - .testimonials-item .icon { - font-size: 40px; - } - .testimonials-item p { - font-size: 16px; - } - .testimonials-item .info { - margin-top: 20px; - } - .testimonials-item .info .title h3 { - font-size: 16px; - } - .saas-testimonials-item { - padding: 25px; - } - .saas-testimonials-item .info .title h3 { - font-size: 16px; - } - .saas-testimonials-item p { - font-size: 15px; - } - .saas-testimonials-slides.owl-theme { - margin-top: -50px; - padding-left: 40px; - padding-right: 40px; - } - .saas-testimonials-slides.owl-theme .owl-nav [class*=owl-] { - left: 0; - font-size: 18px; - } - .saas-testimonials-slides.owl-theme .owl-nav [class*=owl-].owl-next { - left: auto; - right: 0; - } - .testimonials-box { - padding: 25px 20px; - } - .testimonials-box .icon { - width: 70px; - height: 70px; - font-size: 30px; - line-height: 70px; - } - .testimonials-box p { - font-size: 15px; - } - .testimonials-box .info { - margin-top: 20px; - } - .testimonials-box .info h3 { - font-size: 16px; - } - .single-products-box .image .buttons-list li { - -webkit-transform: translateY(0); - transform: translateY(0); - visibility: visible; - opacity: 1; - } - .single-products-box .image .buttons-list li a .tooltip-label::before { - bottom: -12px; - } - .single-products-box .image .buttons-list li a:hover .tooltip-label { - top: -40px; - } - .single-products-box .content h3 { - font-size: 18px; - } - .single-products-box .content .rating { - margin-bottom: 10px; - font-size: 15px; - } - .single-products-box .content .price span { - font-size: 16px; - } - .trending-style-image { - margin-right: 0; - } - .trending-style-content { - padding-left: 0; - text-align: center; - margin-top: 30px; - } - .trending-style-content .sub-title { - font-size: 13px; - } - .trending-style-content h2 { - font-size: 30px; - } - .trending-style-content h3 { - font-size: 17px; - } - .single-pricing-box { - padding: 30px; - } - .single-pricing-box .pricing-header { - margin-bottom: 20px; - padding-bottom: 20px; - } - .single-pricing-box .pricing-header h3 { - font-size: 35px; - } - .pricing-box .pricing-header h3 { - font-size: 18px; - } - .pricing-box .pricing-header .price { - font-size: 35px; - } - .pricing-tabs .nav .nav-item .nav-link { - font-size: 14px; - } - .pricing-item .pricing-header h3 { - font-size: 18px; - } - .pricing-item .pricing-header .price { - font-size: 35px; - } - .single-team-member .content::before { - opacity: 1; - visibility: visible; - } - .single-team-member .content h3 { - font-size: 18px; - -webkit-transform: translateY(0) !important; - transform: translateY(0) !important; - } - .single-team-member .content span { - -webkit-transform: translateY(0) !important; - transform: translateY(0) !important; - } - .single-team-member .content .social { - bottom: auto; - opacity: 1; - visibility: visible; - top: -30px; - } - .single-team-member .content .social li a { - font-size: 15px; - } - .single-team-box .image .social { - margin-bottom: 0; - opacity: 1; - visibility: visible; - padding: 20px; - } - .single-team-box .content { - margin-top: 20px; - } - .single-team-box .content h3 { - font-size: 18px; - } - .team-member .content { - margin-top: 0; - } - .team-member .content::before { - opacity: 1; - visibility: visible; - } - .team-member .content h3 { - font-size: 18px; - -webkit-transform: translateY(0) !important; - transform: translateY(0) !important; - } - .team-member .content span { - -webkit-transform: translateY(0) !important; - transform: translateY(0) !important; - } - .team-member .content .social { - bottom: auto; - opacity: 1; - visibility: visible; - top: -30px; - } - .team-member .content .social li a { - font-size: 15px; - } - .team-box .content { - visibility: visible; - position: relative; - opacity: 1; - bottom: 0; - } - .team-box .content h3 { - font-size: 18px; - } - .video-box .video-btn { - width: 70px; - height: 70px; - font-size: 25px; - } - .cta-content h2 { - font-size: 30px; - } - .cta-content p { - margin-top: 15px; - } - .cta-content .default-btn { - margin-top: 10px; - } - .call-to-action-content { - text-align: center; - } - .call-to-action-content h2 { - font-size: 30px; - } - .call-to-action-btn { - text-align: center; - margin-top: 30px; - } - .call-to-action-inner { - padding-left: 25px; - padding-right: 25px; - } - .blog-section-title { - text-align: center; - margin-bottom: 50px; - } - .blog-section-title h2 { - font-size: 30px; - } - .single-blog-post .content { - padding: 20px; - } - .single-blog-post .content h3 { - font-size: 18px; - } - .single-post-item .post-content .meta { - margin-bottom: 3px; - } - .single-post-item .post-content .meta li { - padding-left: 20px; - margin-right: 10px; - margin-bottom: 10px; - } - .single-post-item .post-content h3 { - margin-bottom: 12px; - font-size: 18px; - } - .single-post-item .post-content .link-btn i { - top: 6px; - } - .app-download-area .col-lg-6:nth-child(1) { - -webkit-box-ordinal-group: 3; - -ms-flex-order: 2; - order: 2; - } - .app-download-area .col-lg-6:nth-child(2) { - -webkit-box-ordinal-group: 2; - -ms-flex-order: 1; - order: 1; - } - .app-download-content { - text-align: center; - margin-bottom: 35px; - } - .app-download-content h2 { - font-size: 30px; - } - .app-download-content p { - max-width: 540px; - margin-left: auto; - margin-right: auto; - } - .app-download-content .btn-box .store-btn { - text-align: start; - } - .app-download-content .btn-box .store-btn span { - font-size: 16px; - } - .app-download-image { - padding-right: 0; - } - .works-area .container-fluid { - max-width: 720px; - } - .single-works-item .content h3 { - font-size: 18px; - } - .portfolio-details-desc h3 { - font-size: 20px; - } - .portfolio-details-info { - padding: 30px; - margin-left: 0; - margin-top: 30px; - } - .portfolio-details-info ul li { - padding-left: 38px; - } - .portfolio-details-info ul li span { - font-size: 16px; - } - .portfolio-details-slides.owl-theme .owl-nav { - opacity: 1; - visibility: visible; - } - .page-title-area { - padding-top: 100px; - padding-bottom: 110px; - } - .page-title-area.style-four { - padding-top: 100px; - padding-bottom: 100px; - } - .page-title-area.style-two { - padding-top: 210px; - padding-bottom: 100px; - } - .page-title-area.style-three { - padding-top: 240px; - padding-bottom: 100px; - } - .page-title-content h2 { - margin-bottom: 0; - font-size: 35px; - } - .page-title-content ul { - margin-top: 15px; - } - .page-title-content ul li { - font-size: 15px; - } - .pagination-area { - margin-top: 15px; - } - .pagination-area .page-numbers { - width: 40px; - height: 40px; - line-height: 38px; - font-size: 16px; - } - .services-details-desc h3 { - font-size: 20px; - } - .faq-accordion .accordion-item .accordion-button { - font-size: 16px; - } - .products-details-desc { - padding-left: 0; - margin-top: 30px; - } - .products-details-desc h3 { - font-size: 18px; - } - .products-details-desc .products-review .rating { - font-size: 13px; - } - .products-details-desc .price { - font-size: 15px; - } - .products-details-tabs { - margin-top: 40px; - } - .products-details-tabs .single-tabs-box h2 { - font-size: 20px; - } - .products-details-tabs .single-tabs-box .inner-box h3 { - font-size: 18px; - } - .products-details-tabs .single-tabs-box .inner-box .table-striped tbody tr td { - font-size: 15px; - } - .cart-table-desc table tbody tr td { - white-space: nowrap; - } - .cart-totals-desc { - margin-top: 30px; - } - .billing-details-desc h3 { - font-size: 18px; - } - .order-details-desc { - margin-top: 30px; - } - .order-details-desc h3 { - font-size: 18px; - } - .profile-authentication-area { - height: auto; - padding-bottom: 100px; - padding-top: 160px; - } - .signin-form { - padding: 35px; - text-align: center; - } - .signin-form form .remember-me-wrap { - text-align: start; - } - .signup-form { - padding: 35px; - text-align: center; - } - .signup-form form .remember-me-wrap { - text-align: start; - } - .privacy-policy-content h3 { - font-size: 18px; - } - .terms-conditions-content h3 { - font-size: 18px; - } - .error-content h3 { - font-size: 22px; - margin-bottom: 15px; - margin-top: 35px; - } - .error-content .default-btn { - margin-top: 20px; - } - .coming-soon-image { - height: auto; - background-image: unset !important; - } - .coming-soon-image img { - display: inline-block; - } - .coming-soon-content { - height: auto; - padding-top: 100px; - padding-bottom: 100px; - } - .coming-soon-content h2 { - font-size: 30px; - } - .works-slides-style-one.owl-theme .owl-nav, .works-slides-style-two.owl-theme .owl-nav { - opacity: 1; - visibility: visible; - } - .blog-details-desc .article-content h3 { - font-size: 20px; - } - .comments-area .comments-title { - font-size: 20px; - } - .comments-area .comment-respond .comment-reply-title { - font-size: 20px; - } - .single-contact-info-box { - padding: 30px; - text-align: center; - } - .single-contact-info-box .icon { - font-size: 35px; - margin-bottom: 20px; - } - .single-contact-info-box h3 { - font-size: 18px; - margin-bottom: 12px; - } - .single-contact-info-box.style-two .icon { - width: 70px; - height: 70px; - font-size: 30px; - margin-bottom: 20px; - } - .footer-area { - padding-top: 80px; - } - .footer-area.business-footer .footer-top { - margin-bottom: 80px; - padding-top: 60px; - padding-bottom: 60px; - } - .footer-top { - text-align: center; - margin-bottom: 50px; - padding-bottom: 50px; - } - .footer-top .logo { - margin-bottom: 30px; - } - .footer-top .content { - text-align: start; - } - .footer-top .content h3 { - font-size: 18px; - } - .single-footer-widget h3 { - font-size: 18px; - } - .single-footer-widget.pl-4 { - padding-left: 0; - } - .single-footer-widget.pl-2 { - padding-left: 0; - } - .single-footer-widget.style-two h3 { - padding-left: 0; - } - .single-footer-widget.style-two h3::before { - display: none; - } - .copyright-area { - margin-top: 50px; - } - .copyright-area .text-start { - text-align: center !important; - margin-bottom: 15px; - } - .copyright-area .social-links { - text-align: center; - margin-top: 15px; - } - .productsQuickView .modal-dialog { - max-width: 700px; - } - .productsQuickView .modal-content { - padding: 20px; - } - .productsQuickView .modal-content button.btn-close { - font-size: 15px; - } - .productsQuickView .modal-content .products-content h3 { - font-size: 18px; - } - .productsQuickView .modal-content .products-content .price { - font-size: 15px; - } -} - -/* Min width 992px to Max width 1199px */ -@media only screen and (min-width: 992px) and (max-width: 1199px) { - body { - font-size: 15px; - } - p { - font-size: 15px; - } - .ptb-100 { - padding-top: 90px; - padding-bottom: 90px; - } - .pt-100 { - padding-top: 90px; - } - .pb-100 { - padding-bottom: 90px; - } - .ptb-70 { - padding-top: 60px; - padding-bottom: 60px; - } - .pt-70 { - padding-top: 60px; - } - .pb-70 { - padding-bottom: 60px; - } - .top-header-area .container-fluid { - max-width: 960px; - } - .top-header-area.top-header-style-two .container-fluid { - max-width: 960px; - } - .top-header-area.top-header-style-three .container-fluid { - max-width: 960px; - } - .noke-responsive-nav .others-option { - display: -webkit-box !important; - display: -ms-flexbox !important; - display: flex !important; - } - .others-option-for-responsive { - display: none; - } - .startup-banner-area .container-fluid { - max-width: 960px; - } - .startup-banner-content { - padding-right: 0; - } - .startup-banner-content h1 { - font-size: 50px; - } - .startup-banner-inner { - padding-top: 100px; - padding-bottom: 100px; - padding-left: 30px; - padding-right: 30px; - } - .startup-banner-image { - padding-left: 0; - } - .marketing-banner-content { - padding-right: 0; - } - .marketing-banner-content h1 { - font-size: 50px; - margin-bottom: 20px; - } - .marketing-banner-content p { - max-width: 100%; - } - .business-banner-area { - padding-top: 90px; - padding-bottom: 90px; - } - .business-banner-area .container { - max-width: 960px; - } - .business-banner-area::before { - opacity: 0.3; - } - .business-banner-content { - padding-right: 0; - max-width: 100%; - } - .business-banner-content h1 { - font-size: 48px; - margin-bottom: 20px; - } - .business-banner-content p { - max-width: 100%; - } - .app-banner-area .container { - max-width: 990px; - } - .app-banner-content h1 { - font-size: 50px; - margin-bottom: 20px; - } - .app-banner-content p { - max-width: 100%; - } - .app-banner-content .btn-box { - margin-top: 20px; - } - .app-banner-content .btn-box .store-btn span { - font-size: 16px; - } - .app-banner-image { - padding-left: 0; - } - .saas-banner-area .container-fluid { - max-width: 990px; - padding-left: 15px; - padding-right: 15px; - } - .saas-banner-content { - margin-left: 0; - max-width: 100%; - } - .saas-banner-content h1 { - font-size: 50px; - margin-bottom: 20px; - } - .saas-banner-content p { - max-width: 100%; - } - .personal-portfolio-banner-area .container { - max-width: 960px; - } - .personal-portfolio-banner-content h1 { - font-size: 52px; - } - .personal-portfolio-banner-content h4 { - font-size: 25px; - } - .consulting-banner-area { - padding-top: 270px; - padding-bottom: 150px; - } - .consulting-banner-area .container { - max-width: 960px; - } - .consulting-banner-content { - max-width: 635px; - } - .consulting-banner-content h1 { - font-size: 40px; - margin-bottom: 20px; - } - .consulting-banner-content .default-btn { - margin-top: 5px; - } - .it-agency-banner-area .it-agency-inner-banner { - padding-top: 250px; - padding-bottom: 300px; - } - .it-agency-banner-content { - max-width: 100%; - } - .it-agency-banner-content h1 { - font-size: 50px; - } - .banner-video-box { - max-width: 100%; - } - .shop-banner-area { - padding-top: 150px; - padding-bottom: 150px; - } - .shop-banner-content .sub-title { - font-size: 25px; - } - .shop-banner-content h1 { - font-size: 50px; - } - .shop-banner-content h4 { - font-size: 25px; - } - .blog-banner-item .content { - padding: 20px; - max-width: 480px; - } - .blog-banner-item .content h3 { - font-size: 22px; - } - .blog-banner-item-list .single-blog-banner-item .content { - padding-top: 0; - padding-bottom: 0; - padding-left: 15px; - } - .blog-banner-item-list .single-blog-banner-item .content h3 { - margin-bottom: 12px; - font-size: 15px; - } - .furniture-banner-item { - padding-top: 150px; - padding-bottom: 150px; - } - .furniture-banner-content h1 { - margin-bottom: 15px; - font-size: 40px; - } - .minimal-portfolio-banner-area { - padding-top: 230px; - padding-bottom: 200px; - } - .minimal-portfolio-banner-content { - max-width: 730px; - } - .minimal-portfolio-banner-content .typewrite { - font-size: 18px; - } - .minimal-portfolio-banner-content h1 { - font-size: 50px; - margin-bottom: 30px; - } - .single-features-box { - padding-left: 0; - padding-right: 0; - } - .single-features-item { - padding-left: 65px; - } - .features-item { - padding: 25px; - } - .startup-about-area .container-fluid { - max-width: 960px; - } - .startup-about-image { - margin-right: 0; - padding-top: 60px; - padding-left: 29px; - padding-bottom: 60px; - } - .startup-about-image .video-btn { - left: 55%; - -webkit-transform: translateY(-50%) translateX(-55%); - transform: translateY(-50%) translateX(-55%); - } - .startup-about-content { - padding-left: 0; - max-width: 100%; - } - .startup-about-content h2 { - font-size: 38px; - } - .marketing-about-image { - margin-right: 0; - } - .marketing-about-content { - padding-left: 0; - } - .business-about-image { - padding-right: 0; - } - .business-about-content { - padding-left: 0; - } - .saas-about-image { - padding-right: 0; - } - .saas-about-content { - padding-left: 0; - } - .it-agency-about-image { - margin-right: 0; - padding: 0; - } - .it-agency-about-image .main-image { - padding-bottom: 100px; - } - .it-agency-about-image .main-image img:nth-child(2) { - max-width: 300px; - } - .it-agency-about-content { - padding-left: 0; - } - .startup-works-area .section-title { - max-width: 650px; - text-align: center; - padding-top: 0; - margin-left: auto; - margin-right: auto; - margin-bottom: 60px; - } - .startup-works-area .section-title h2 { - font-size: 40px; - } - .startup-works-content { - padding-top: 0; - padding-right: 0; - } - .startup-works-image { - margin-left: 0; - padding: 0; - } - .startup-works-slides .row { - -webkit-box-align: center; - -ms-flex-align: center; - align-items: center; - } - .single-services-item .content { - padding-left: 0; - padding-right: 0; - } - .services-tabs .nav { - margin-bottom: 50px; - } - .services-tabs .nav .nav-item { - margin-left: 16px; - margin-right: 16px; - } - .services-tabs .nav .nav-item .nav-link { - font-size: 17px; - } - .single-main-services .content { - padding-right: 0; - } - .single-main-services .content h3 { - font-size: 30px; - } - .single-main-services .content p { - max-width: 100%; - } - .col-lg-3:nth-child(2) .services-box, .col-lg-3:nth-child(4) .services-box { - margin-top: 0; - } - .col-lg-3:nth-child(5) .services-box, .col-lg-3:nth-child(7) .services-box { - margin-top: 0; - } - .services-item h3 { - font-size: 20px; - } - .services-item .hover-content { - padding: 20px; - } - .facility-content { - padding-right: 0; - } - .single-funfacts-box { - padding-top: 30px; - padding-bottom: 30px; - padding-left: 75px; - padding-right: 20px; - } - .single-funfacts-box .icon { - left: 20px; - font-size: 40px; - } - .single-funfacts-box h3 { - font-size: 35px; - } - .single-funfacts-box .sub-title { - font-size: 14.5px; - } - .single-funfacts-box.without-bg-color { - margin-right: 0; - padding-left: 60px; - } - .app-screenshot-area::before { - height: 100px; - } - .screenshot-slides.owl-theme .owl-nav [class*=owl-] { - left: -25px; - width: 35px; - line-height: 35px; - height: 35px; - font-size: 15px; - } - .screenshot-slides.owl-theme .owl-nav [class*=owl-].owl-next { - left: auto; - right: -25px; - } - .screenshot-wrap .screenshot-frame { - width: 175px; - height: 355px; - } - .categories-box h3 { - padding-left: 20px; - padding-right: 20px; - } - .categories-slides.owl-theme .owl-nav [class*=owl-] { - left: -40px; - } - .categories-slides.owl-theme .owl-nav [class*=owl-].owl-next { - left: auto; - right: -40px; - } - .startup-testimonials-area .container-fluid { - max-width: 960px; - } - .startup-testimonials-image { - background-color: transparent; - padding-top: 0; - padding-bottom: 23px; - padding-left: 0; - } - .startup-testimonials-image .main-image { - -webkit-animation: unset !important; - animation: unset !important; - margin-bottom: 15px; - } - .startup-testimonials-content { - padding-left: 0; - padding-right: 0; - padding-bottom: 30px; - padding-top: 30px; - } - .startup-testimonials-content p { - font-size: 15px; - } - .startup-testimonials-content .info { - margin-top: 20px; - padding-top: 20px; - } - .startup-testimonials-content .info h3 { - font-size: 17px; - } - .startup-testimonials-slides.owl-theme .owl-nav { - bottom: 0; - right: 80%; - -webkit-transform: translateX(80%); - transform: translateX(80%); - } - .marketing-testimonials-image { - margin-right: 30px; - margin-left: 0; - } - .marketing-testimonials-content { - padding-bottom: 50px; - } - .marketing-testimonials-content p { - font-size: 16px; - } - .marketing-testimonials-content .info { - margin-top: 20px; - } - .marketing-testimonials-content .info h3 { - font-size: 17px; - } - .marketing-testimonials-slides.owl-theme .owl-nav { - bottom: 40px; - right: 20%; - -webkit-transform: translateX(20%); - transform: translateX(20%); - } - .business-testimonials-image { - margin-right: 0; - } - .testimonials-slides.owl-theme { - padding-left: 100px; - padding-right: 100px; - } - .business-testimonials-content p { - font-size: 18px; - } - .saas-testimonials-slides.owl-theme { - margin-top: -65px; - } - .testimonials-box { - padding: 20px; - } - .shape1, .shape2, .shape3, .shape4, .shape5, .shape6, .shape7, .shape8, .shape9, .shape16 { - display: none !important; - } - .page-title-area { - padding-top: 100px; - padding-bottom: 110px; - } - .page-title-area.style-three { - padding-top: 250px; - padding-bottom: 110px; - } - .page-title-area.style-two { - padding-bottom: 100px; - padding-top: 220px; - } - .page-title-area.style-four { - padding-top: 120px; - padding-bottom: 120px; - } - .who-we-are-content { - padding: 25px; - } - .who-we-are-content h2 { - font-size: 20px; - } - .who-we-are-content .default-btn { - margin-top: 5px; - } - .app-download-area .row.align-items-center { - -webkit-box-align: unset !important; - -ms-flex-align: unset !important; - align-items: unset !important; - } - .call-to-action-inner { - padding-left: 30px; - padding-right: 30px; - } - .services-details-content h2 { - font-size: 38px; - } - .services-details-video { - margin-left: 0; - } - .services-details-video iframe { - height: 251px; - } - .single-pricing-box { - padding: 30px; - } - .single-pricing-box .pricing-header h3 { - font-size: 40px; - } - .featured-video-item-list .single-featured-video-item .content { - padding-top: 5px; - padding-bottom: 5px; - padding-left: 15px; - } - .featured-video-item-list .single-featured-video-item .content h3 { - font-size: 17px; - } - .single-clients-box a { - padding: 20px; - } - .coming-soon-content { - padding-left: 15px; - padding-right: 15px; - } - .coming-soon-content #timer div { - width: 100px; - height: 100px; - font-size: 30px; - } - .coming-soon-content form { - max-width: 100%; - } - .trending-style-content { - padding-left: 0; - } - .trending-style-image { - padding-right: 80px; - margin-right: 0; - } - .trending-style-image img:nth-child(2) { - width: 250px; - } - .widget-area .widget_about_author .about-author { - padding: 20px; - } - .widget-area .widget_noke_posts_thumb .item { - padding-left: 95px; - } - .widget-area .widget_noke_posts_thumb .item .thumb { - width: 80px; - } - .widget-area .widget_noke_posts_thumb .item .thumb .fullimage { - width: 80px; - } - .widget-area .widget_noke_posts_thumb .item .info .title { - font-size: 14px; - } - .blog-section-title h2 { - font-size: 35px; - } - .single-blog-post .content .meta li i { - top: 2px; - } - .single-post-item .post-content { - padding: 20px; - } - .single-post-item .post-content .meta { - margin-bottom: 3px; - } - .single-post-item .post-content .meta li { - margin-right: 10px; - margin-bottom: 10px; - } - .portfolio-details-info { - padding: 20px; - } - .products-details-desc { - padding-left: 0; - } - .single-contact-info-box { - padding: 25px; - } - .footer-area { - padding-top: 90px; - } - .footer-top { - padding-bottom: 60px; - margin-bottom: 60px; - } - .single-footer-widget.pl-4 { - padding-left: 0; - } - .single-footer-widget.pl-2 { - padding-left: 0; - } - .single-footer-widget.style-two h3 { - padding-left: 40px; - } - .single-footer-widget.style-two h3::before { - width: 25px; - } - .copyright-area { - margin-top: 60px; - } - .productsQuickView .modal-dialog { - max-width: 830px; - } - .productsQuickView .modal-content { - padding: 25px; - } -} - -/* Min width 1200px to Max width 1355px */ -@media only screen and (min-width: 1200px) and (max-width: 1355px) { - .top-header-area .container-fluid { - max-width: 1140px; - } - .top-header-area.top-header-style-two .container-fluid { - max-width: 1140px; - } - .top-header-area.top-header-style-three .container-fluid { - max-width: 1140px; - } - .navbar-area.navbar-style-three .noke-nav .container-fluid { - max-width: 1140px; - } - .navbar-area.navbar-style-two .noke-nav .container-fluid { - max-width: 1140px; - } - .navbar-area.navbar-style-four .noke-nav .container-fluid { - max-width: 1140px; - } - .navbar-area.navbar-style-five .noke-nav .container-fluid { - max-width: 1140px; - } - .noke-nav .container-fluid { - max-width: 1140px; - } - .startup-banner-area .container-fluid { - max-width: 100%; - } - .startup-banner-inner { - padding: 100px 40px; - } - .startup-banner-content h1 { - font-size: 55px; - } - .marketing-banner-content h1 { - font-size: 55px; - } - .marketing-banner-content p { - max-width: 510px; - } - .business-banner-area .container { - max-width: 1140px; - } - .business-banner-content { - padding-right: 0; - max-width: 100%; - } - .business-banner-content h1 { - font-size: 55px; - } - .app-banner-area .container { - max-width: 1140px; - } - .app-banner-content h1 { - font-size: 49px; - } - .personal-portfolio-banner-area .container { - max-width: 1140px; - } - .personal-portfolio-banner-content h1 { - font-size: 60px; - } - .personal-portfolio-banner-content h4 { - font-size: 30px; - } - .consulting-banner-area .container { - max-width: 1140px; - } - .consulting-banner-content { - max-width: 715px; - } - .consulting-banner-content h1 { - font-size: 45px; - } - .it-agency-banner-content h1 { - font-size: 55px; - } - .blog-banner-item-list .single-blog-banner-item .content { - padding-bottom: 3.3px; - padding-top: 3.3px; - } - .blog-banner-item-list .single-blog-banner-item .content h3 { - font-size: 16px; - } - .startup-about-area .container-fluid { - max-width: 100%; - } - .it-agency-about-image .main-image img:nth-child(2) { - max-width: 300px; - } - .startup-testimonials-area .container-fluid { - max-width: 100%; - } - .marketing-testimonials-slides.owl-theme .owl-nav { - right: 20%; - bottom: 55px; - -webkit-transform: translateX(20%); - transform: translateX(20%); - } - .services-tabs .nav .nav-item { - margin-left: 25px; - margin-right: 25px; - } - .single-main-services .content h3 { - font-size: 35px; - } - .who-we-are-content h2 { - font-size: 20px; - } - .app-screenshot-area::before { - height: 150px; - } - .screenshot-wrap .screenshot-frame { - width: 210px; - height: 430px; - } - .screenshot-slides.owl-theme .owl-nav [class*=owl-] { - left: -34px; - } - .screenshot-slides.owl-theme .owl-nav [class*=owl-].owl-next { - left: auto; - right: -34px; - } - .services-box { - padding: 30px 20px; - } - .startup-works-area .section-title { - padding-top: 20px; - margin-bottom: -180px; - } - .startup-works-content { - padding-top: 210px; - } - .featured-video-item-list .single-featured-video-item .content { - padding-top: 6px; - padding-bottom: 6px; - } - .featured-video-item-list .single-featured-video-item .content h3 { - font-size: 17px; - } - .call-to-action-content h2 { - font-size: 35px; - } - .single-post-item .post-content .meta { - margin-bottom: 3px; - } - .single-post-item .post-content .meta li { - margin-right: 10px; - margin-bottom: 10px; - } - .facility-content { - padding-right: 0; - } - .single-funfacts-box.without-bg-color { - margin-right: 15px; - } -} - -/* Min width 1535px */ -@media only screen and (min-width: 1550px) { - .top-header-area.top-header-style-two .container-fluid { - max-width: 1470px; - } - .navbar-area.navbar-style-three .noke-nav .container-fluid { - max-width: 1450px; - } - .navbar-area.navbar-style-four .noke-nav .container-fluid { - max-width: 1470px; - } - .noke-nav .container-fluid { - max-width: 1470px; - } - .startup-banner-area .container-fluid { - max-width: 1470px; - } - .startup-banner-inner { - padding-top: 140px; - padding-bottom: 140px; - padding-left: 120px; - padding-right: 120px; - } - .shape3 { - right: 34.3%; - bottom: 7%; - } - .startup-about-area .container-fluid { - max-width: 1470px; - } - .startup-about-image { - padding-left: 100px; - padding-bottom: 100px; - } - .startup-works-image { - padding-top: 100px; - padding-right: 100px; - padding-bottom: 100px; - } - .shape6 { - top: 67px; - } - .startup-testimonials-area .container-fluid { - max-width: 1470px; - } - .startup-testimonials-image { - padding-top: 100px; - padding-left: 100px; - padding-bottom: 100px; - } - .shape7 { - left: 40px; - top: 30px; - } - .shape8 { - bottom: 70px; - left: 70px; - } - .shape9 { - right: 0; - top: 85px; - } - .shape16 { - right: 150px; - } -} -/*# sourceMappingURL=responsive.css.map */ \ No newline at end of file diff --git a/static/assets/css/responsive.css.map b/static/assets/css/responsive.css.map deleted file mode 100644 index 8b137891..00000000 --- a/static/assets/css/responsive.css.map +++ /dev/null @@ -1 +0,0 @@ - diff --git a/static/assets/css/responsive.scss b/static/assets/css/responsive.scss deleted file mode 100644 index 269a7e15..00000000 --- a/static/assets/css/responsive.scss +++ /dev/null @@ -1,6664 +0,0 @@ -$media: screen; -$feature_min: min-width; -$feature_max: max-width; -$value_one: 576px; -$value_two: 767px; -$value_three: 768px; -$value_four: 991px; -$value_five: 992px; -$value_six: 1199px; -$value_seven: 1200px; -$value_eight: 1355px; -$value_nine: 1550px; - -/* Max width 767px */ -@media only #{$media} and ($feature_max : $value_two) { - - body { - font-size: 13.5px; - } - p { - font-size: 13.5px; - } - .ptb-100 { - padding: { - top: 60px; - bottom: 60px; - }; - } - .pt-100 { - padding-top: 60px; - } - .pb-100 { - padding-bottom: 60px; - } - .ptb-70 { - padding: { - top: 30px; - bottom: 30px; - }; - } - .pt-70 { - padding-top: 30px; - } - .pb-70 { - padding-bottom: 30px; - } - .default-btn { - padding: 11px 40px 11px 25px; - font-size: 13.5px; - - i { - right: 25px; - font-size: 12px; - } - &:hover { - i { - right: 20px; - } - } - } - .section-title { - max-width: 100%; - margin: { - left: 0; - right: 0; - bottom: 40px; - top: -2px; - }; - .sub-title { - font-size: 13px; - } - h2 { - font-size: 22px; - } - p { - max-width: 100%; - margin-top: 12px; - } - &.style-two { - padding-left: 0; - text-align: center; - margin-bottom: 40px; - - h2 { - font-size: 22px; - - &::before { - display: none; - } - } - p { - max-width: 100%; - } - } - &.style-three { - h2 { - span { - padding: { - left: 10px; - right: 10px; - }; - } - } - } - &.style-four { - text-align: center; - margin-bottom: 40px; - - h2 { - font-size: 22px; - } - &::before { - left: 50%; - transform: translateX(-50%); - } - } - } - .form-control { - font-size: 13.5px; - } - - .top-header-area { - text-align: center; - - .container-fluid { - max-width: 100%; - } - &.top-header-style-two { - .container-fluid { - max-width: 100%; - } - } - &.top-header-style-three { - .container-fluid { - max-width: 100%; - } - } - } - .top-header-contact-info { - text-align: center !important; - - .email { - padding-left: 20px; - margin: { - right: 10px; - top: 10px; - }; - i { - top: 4.5px; - } - } - .number { - padding-left: 20px; - margin-top: 10px; - - i { - top: 4px; - } - } - .lang-switcher { - padding-left: 18px; - margin: { - left: 10px; - top: 10px; - }; - } - } - - .search-overlay { - .search-overlay-form { - max-width: 290px; - width: 290px; - - form { - .input-search { - height: 50px; - font-size: 15px; - } - button { - font-size: 18px; - } - } - } - } - - .header-area { - &.p-responsive-relative { - position: relative; - } - } - - .startup-banner-area { - .container-fluid { - max-width: 100%; - padding: { - left: 0; - right: 0; - }; - } - } - .startup-banner-inner { - padding: { - top: 60px; - left: 15px; - right: 15px; - bottom: 60px; - }; - } - .startup-banner-content { - padding-right: 0; - text-align: center; - - .sub-title { - font-size: 13px; - } - h1 { - margin-bottom: 18px; - font-size: 25px; - } - p { - max-width: 100%; - } - .default-btn { - margin-top: 5px; - } - } - .startup-banner-image { - padding-left: 0; - margin-top: 30px; - } - .marketing-banner-area { - padding: { - top: 60px; - bottom: 60px; - }; - } - .marketing-banner-content { - text-align: center; - padding-right: 0; - - .sub-title { - font-size: 13px; - } - h1 { - margin-bottom: 18px; - font-size: 25px; - } - p { - max-width: 100%; - } - .default-btn { - margin-top: 5px; - } - } - .marketing-banner-image { - margin-top: 30px; - } - .business-banner-area { - padding: { - top: 60px; - bottom: 60px; - }; - .container { - max-width: 100%; - } - &::before { - display: none; - } - } - .business-banner-content { - padding-right: 0; - text-align: center; - max-width: 100%; - - .sub-title { - font-size: 13px; - } - h1 { - margin-bottom: 12px; - font-size: 25px; - } - p { - max-width: 100%; - } - .default-btn { - margin-top: 5px; - } - } - .business-banner-image { - margin-top: 30px; - - img { - border-radius: 0; - } - } - .app-banner-area { - padding: { - top: 60px; - bottom: 60px; - }; - .container { - max-width: 100%; - } - } - .app-banner-content { - text-align: center; - - h1 { - margin-bottom: 20px; - font-size: 25px; - } - .btn-box { - margin-top: 25px; - - .store-btn { - padding: 10px 10px 10px 45px; - font-size: 12px; - text-align: start; - margin: { - left: 3px; - right: 3px; - }; - &:first-child { - margin-left: 0; - } - img { - left: 10px; - width: 25px; - } - span { - font-size: 14px; - } - } - } - } - .app-banner-image { - padding-left: 0; - margin-top: 35px; - } - .saas-banner-area { - padding-top: 60px; - - .container-fluid { - padding: { - left: 15px; - right: 15px; - }; - } - } - .saas-banner-content { - text-align: center; - max-width: 100%; - margin-left: 0; - - .sub-title { - font-size: 13px; - } - h1 { - margin-bottom: 18px; - font-size: 25px; - } - p { - max-width: 100%; - } - .default-btn { - margin-top: 5px; - } - } - .saas-banner-image { - margin-top: 35px; - } - .personal-portfolio-banner-area { - padding: { - top: 60px; - bottom: 60px; - }; - .container { - max-width: 100%; - } - } - .personal-portfolio-banner-content { - text-align: center; - - .sub-title { - font-size: 13px; - padding-left: 0; - - &::before { - display: none; - } - } - h1 { - margin-bottom: 15px; - font-size: 25px; - } - h4 { - margin-bottom: 15px; - font-size: 16px; - } - p { - max-width: 100%; - } - } - .personal-portfolio-banner-image { - margin-top: 30px; - } - .consulting-banner-area { - padding: { - top: 235px; - bottom: 60px; - }; - .container { - max-width: 100%; - } - &::before { - display: block; - } - } - .consulting-banner-content { - text-align: center; - max-width: 100%; - - h1 { - margin-bottom: 15px; - font-size: 25px; - } - p { - max-width: 100%; - } - .default-btn { - margin-top: 5px; - } - } - .it-agency-banner-area { - .it-agency-inner-banner { - padding: { - top: 230px; - bottom: 60px; - }; - } - } - .it-agency-banner-content { - max-width: 100%; - - h1 { - margin-bottom: 15px; - font-size: 25px; - } - p { - max-width: 100%; - } - .default-btn { - margin-top: 5px; - } - } - .banner-video-box { - max-width: 100%; - margin-top: 60px; - - .video-btn { - width: 60px; - height: 60px; - font-size: 25px; - } - } - .shop-banner-area { - background-position: left center; - padding: { - top: 60px; - bottom: 60px; - }; - } - .shop-banner-content { - .sub-title { - font-size: 15px; - margin-bottom: 8px; - } - h1 { - margin-bottom: 12px; - font-size: 25px; - } - h4 { - font-size: 16px; - } - .default-btn { - margin-top: 20px; - } - } - .blog-banner-area { - padding: { - top: 60px; - bottom: 60px; - }; - } - .blog-banner-item { - margin-bottom: 30px; - - .content { - max-width: 100%; - padding: 20px 15px; - top: 0; - background-color: rgba(255, 255, 255, 1); - position: relative; - transform: translateY(0); - - h3 { - font-size: 16px; - } - .meta { - li { - a { - i { - top: 6px; - } - } - } - } - } - } - .blog-banner-item-list { - .single-blog-banner-item { - .image { - height: auto; - background-image: unset !important; - - img { - display: inline-block; - } - } - .content { - padding: { - left: 0; - bottom: 0; - top: 20px; - }; - h3 { - margin-bottom: 12px; - font-size: 16px; - } - .date { - i { - top: 2px; - } - } - } - } - } - .furniture-banner-item { - padding: { - top: 60px; - bottom: 95px; - }; - } - .furniture-banner-content { - padding: 20px 15px; - max-width: 100%; - text-align: center; - border-width: 2px; - - h1 { - margin-bottom: 12px; - font-size: 25px; - } - .default-btn { - margin-top: 5px; - } - } - .furniture-banner-slides { - &.owl-theme { - .owl-dots { - top: auto; - transform: translateY(0); - bottom: 30px; - left: 0; - right: 0; - - .owl-dot { - display: inline-block; - margin: 0 5px; - - span { - width: 35px; - } - } - } - } - } - .minimal-portfolio-banner-area { - padding: { - top: 150px; - bottom: 140px; - }; - } - .minimal-portfolio-banner-content { - max-width: 100%; - - .typewrite { - margin-bottom: 25px; - padding: 6px 15px; - font-size: 13px; - } - h1 { - font-size: 25px; - margin-bottom: 25px; - } - } - .shape1, .shape13, .shape2, .shape3, .shape4, .shape5, .shape6, .shape7, .shape8, .shape9, .shape16, .shape17, .divider, .shape18, .shape19 { - display: none !important; - } - .shape10 { - max-width: 290px; - } - - .features-area { - padding: { - top: 60px; - bottom: 30px; - }; - } - .single-features-box { - padding: { - left: 0; - right: 0; - }; - .icon { - font-size: 40px; - margin-bottom: 20px; - transform: translateY(0) !important; - } - h3 { - font-size: 16px; - transform: translateY(0) !important; - } - p { - transform: translateY(0) !important; - } - .link-btn { - left: 0; - bottom: 0 !important; - opacity: 1; - transform: unset; - margin-top: 15px; - position: relative; - visibility: visible; - - i { - top: 5px; - font-size: 11px; - } - } - } - .features-box { - padding: 20px 15px; - - h3 { - font-size: 16px; - } - .icon { - width: 60px; - height: 60px; - font-size: 30px; - line-height: 60px; - margin-bottom: 20px; - } - } - .single-features-item { - text-align: center; - padding-left: 0; - - .icon { - position: relative; - font-size: 35px; - display: inline-block; - margin-bottom: 15px; - } - h3 { - font-size: 16px; - - br { - display: none; - } - } - } - .shape15 { - display: none; - } - .features-item { - padding: 20px 15px; - - h3 { - font-size: 16px; - } - .icon { - font-size: 25px; - margin-right: 10px; - } - } - - .startup-about-area { - border-bottom: 1px solid #eeeeee; - margin-bottom: 60px; - - .container-fluid { - max-width: 100%; - } - } - .startup-about-image { - margin-right: 0; - padding: 0; - - .video-btn { - left: 50%; - width: 60px; - height: 60px; - font-size: 22px; - transform: translateY(-50%) translateX(-50%); - - &::after, &::before { - border-width: 1px; - } - } - } - .startup-about-content { - padding-left: 0; - text-align: center; - margin-top: 30px; - max-width: 100%; - - .sub-title { - font-size: 13px; - } - h2 { - font-size: 22px; - } - .features-list { - padding-left: 0; - list-style-type: none; - - li { - font-weight: 600; - } - } - } - .marketing-about-image { - margin-right: 0; - } - .marketing-about-content { - padding-left: 0; - text-align: center; - margin-top: 30px; - - .sub-title { - font-size: 13px; - } - h2 { - font-size: 22px; - } - .features-list { - padding-left: 0; - list-style-type: none; - - li { - font-weight: 600; - } - } - } - .business-about-image { - padding-right: 0; - } - .business-about-content { - padding-left: 0; - text-align: center; - margin-top: 30px; - - .sub-title { - font-size: 13px; - } - h2 { - font-size: 22px; - } - } - .shape11, .shape12 { - display: none; - } - .app-about-content { - padding-right: 0; - - h3 { - margin-bottom: 15px; - font-size: 16px; - } - .default-btn { - margin-top: 5px; - } - } - .app-about-image { - padding-left: 0; - margin-top: 30px; - } - .saas-about-image { - padding-right: 0; - margin-bottom: 30px; - } - .saas-about-content { - padding-left: 0; - - .sub-title { - font-size: 13px; - } - h2 { - font-size: 22px; - } - } - .it-agency-about-image { - margin-right: 0; - text-align: end; - padding: { - right: 0; - bottom: 0; - }; - .main-image { - padding: { - bottom: 100px; - right: 0; - left: 80px; - }; - img { - &:nth-child(2) { - right: 0; - left: 0; - position: relative; - top: 0; - } - &:nth-child(1) { - left: 0; - bottom: 0; - z-index: 2; - max-width: 200px; - position: absolute; - } - } - } - } - .it-agency-about-content { - padding-left: 0; - text-align: center; - margin-top: 30px; - - .sub-title { - font-size: 13px; - } - h2 { - font-size: 22px; - } - .features-list { - padding-left: 0; - list-style-type: none; - - li { - font-weight: 600; - } - } - } - - .single-services-box { - .content { - padding: 15px; - - .icon { - font-size: 35px; - margin-bottom: 15px; - transform: translateY(0) !important; - } - h3 { - font-size: 16px; - transform: translateY(0) !important; - } - p { - transform: translateY(0) !important; - } - .link-btn { - left: 0; - bottom: 0 !important; - opacity: 1; - transform: unset; - margin-top: 13px; - position: relative; - visibility: visible; - - i { - top: 5px; - font-size: 11px; - } - } - } - &::before { - background: linear-gradient(to top, rgba(35, 35, 37, 0.9) 0, rgba(35, 35, 37, 0.7) 50%, rgba(22, 22, 23, 0) 75%, rgba(0, 0, 0, 0) 100%); - } - } - .single-services-item { - .content { - padding: { - top: 20px; - left: 0; - right: 0; - }; - h3 { - font-size: 16px; - } - } - } - .services-tabs { - .nav { - margin-bottom: 20px; - border-bottom: 1px solid #eeeeee; - padding-bottom: 10px; - - .nav-item { - margin: { - left: 10px; - right: 10px; - bottom: 20px; - }; - .nav-link { - font-size: 14px; - - .icon { - width: 60px; - height: 60px; - line-height: 60px; - font-size: 25px; - padding-right: 5px; - margin-bottom: 12px; - } - } - } - } - } - .single-main-services { - .content { - padding-right: 0; - text-align: center; - margin-bottom: 30px; - - h3 { - font-size: 19px; - } - p { - max-width: 100%; - } - } - } - .services-box { - padding: 20px 15px; - - .icon { - font-size: 40px; - margin-bottom: 20px; - } - h3 { - font-size: 16px; - } - } - .services-item { - h3 { - font-size: 16px; - margin-top: 20px; - } - .hover-content { - padding: 20px 15px; - - .link-btn { - i { - top: 6px; - } - } - } - } - .col-lg-3 { - &:nth-child(2), &:nth-child(4) { - .services-box { - margin-top: 0; - } - } - &:nth-child(5), &:nth-child(7) { - .services-box { - margin-top: 0; - } - } - } - .single-it-services-box { - padding: 20px 15px; - text-align: center; - - .icon { - left: 0; - top: 0; - font-size: 35px; - display: block; - position: relative; - margin-bottom: 20px; - } - h3 { - font-size: 16px; - } - } - - .services-details-desc { - h3 { - font-size: 17px; - } - } - - .screenshot-wrap { - .screenshot-frame { - display: none; - } - } - .screenshot-slides { - &.owl-theme { - padding-top: 40px; - - .owl-nav { - [class*=owl-] { - left: 15px; - width: 30px; - line-height: 30px; - height: 30px; - font-size: 15px; - top: 0; - transform: translateY(0); - - &.owl-next { - left: auto; - right: 15px; - } - } - } - } - } - - .expertise-box { - text-align: center; - - .icon { - width: 60px; - height: 60px; - font-size: 30px; - line-height: 60px; - margin: { - left: auto; - right: auto; - bottom: 20px; - }; - } - h3 { - font-size: 16px; - } - } - - .categories-box { - h3 { - font-size: 16px; - padding: { - left: 15px; - right: 15px; - }; - } - } - .categories-slides { - &.owl-theme { - .owl-nav { - opacity: 1; - visibility: visible; - margin-bottom: 30px; - - [class*=owl-] { - margin: 0 5px; - position: relative; - left: 0; - top: 0; - width: 30px; - height: 30px; - line-height: 30px; - transform: unset; - - &.owl-next { - right: 0; - } - } - } - } - } - - .who-we-are-content { - padding: 20px 15px; - text-align: center; - - .sub-title { - font-size: 13px; - } - h2 { - font-size: 16px; - } - .default-btn { - margin-top: 5px; - } - } - .who-we-are-image { - .video-btn { - width: 60px; - height: 60px; - font-size: 20px; - } - } - - .categories-area { - border-bottom: 1px solid #eeeeee; - margin-bottom: 55px; - } - .single-categories-box { - h3 { - top: 15px; - left: 15px; - font-size: 15px; - padding: 7px 20px; - } - } - - .startup-works-area { - border-top: 1px solid #eeeeee; - border-bottom: 1px solid #eeeeee; - padding-top: 60px; - margin-bottom: 60px; - - .section-title { - padding-top: 0; - text-align: center; - margin-bottom: 40px; - - h2 { - font-size: 22px; - } - } - } - .startup-works-content { - text-align: center; - position: relative; - border-top: 1px solid #eeeeee; - margin-top: 15px; - padding: { - top: 50px; - right: 0; - }; - h3 { - font-size: 16px; - margin-bottom: 12px; - } - .custom-owl-nav { - margin-top: 0; - - [class*=owl-] { - margin: 0 3px; - font-size: 13px; - padding: 6px 20px 6px !important; - position: absolute; - left: 0; - top: -15px; - - &.custom-owl-next { - left: auto; - right: 0; - } - } - } - } - .startup-works-image { - margin: { - left: 0; - top: 15px; - }; - padding: { - top: 0; - right: 0; - bottom: 0; - }; - } - .single-works-box { - .works-image { - .works-overlay { - h3 { - font-size: 16px; - } - } - } - } - .works-box { - h3 { - opacity: 1; - visibility: visible; - top: auto; - transform: translateY(0); - bottom: 0; - font-size: 16px; - padding: 10px; - margin: { - left: 0; - right: 0; - top: 0; - }; - } - } - .works-box-btn { - margin-top: 5px; - } - .single-works-item { - .content { - padding: { - left: 15px; - right: 15px; - }; - .link-btn { - width: 40px; - height: 40px; - line-height: 40px; - } - h3 { - font-size: 16px; - } - } - } - - .how-it-works-content { - padding-right: 0; - - ul { - li { - padding-left: 50px; - - i { - font-size: 30px; - } - h3 { - font-size: 16px; - } - } - } - } - .how-it-works-image { - margin-top: 30px; - } - - .single-process-box { - padding: 25px 15px; - - h3 { - font-size: 16px; - } - } - - .funfacts-inner { - padding: { - left: 15px; - right: 15px; - }; - &.border-radius { - &.ptb-70 { - padding-bottom: 10px; - } - } - } - .single-funfacts-box { - text-align: center; - padding: 20px 10px; - - .icon { - position: relative; - top: 0; - line-height: 1; - transform: translateY(0); - left: 0; - font-size: 30px; - margin-bottom: 15px; - display: block; - } - h3 { - font-size: 30px; - } - &.without-bg-color { - border-right: none; - margin-right: 0; - padding: 0; - } - &.text-center { - border-right: none; - padding: 0; - } - } - - .single-products-box { - .image { - .buttons-list { - li { - transform: translateY(0); - visibility: visible; - opacity: 1; - - a { - .tooltip-label { - &::before { - bottom: -12px; - } - } - &:hover { - .tooltip-label { - top: -40px; - } - } - } - } - } - } - .content { - h3 { - font-size: 16px; - } - .rating { - margin-bottom: 10px; - font-size: 12px; - } - .price { - span { - font-size: 14px; - } - } - } - } - - .startup-testimonials-area { - .container-fluid { - max-width: 100%; - } - } - .startup-testimonials-image { - padding: 0; - - .main-image { - animation: unset !important; - } - } - .startup-testimonials-content { - padding: { - left: 15px; - right: 15px; - bottom: 30px; - top: 30px; - }; - .icon { - margin-bottom: 15px; - font-size: 30px; - } - p { - font-size: 15px; - } - .info { - margin-top: 20px; - padding-top: 20px; - - h3 { - font-size: 15px; - margin-bottom: 7px; - } - } - } - .startup-testimonials-slides { - &.owl-theme { - .owl-nav { - right: 0; - bottom: 0; - transform: unset; - position: relative; - padding-bottom: 30px; - - [class*=owl-] { - margin: 0 3px; - font-size: 13px; - padding: 6px 20px 6px !important; - } - } - } - } - .marketing-testimonials-image { - margin: { - left: 0; - right: 0; - bottom: 30px; - }; - } - .marketing-testimonials-content { - padding-bottom: 0; - - .icon { - margin-bottom: 15px; - font-size: 30px; - } - p { - font-size: 15px; - } - .info { - margin-top: 20px; - - h3 { - font-size: 15px; - margin-bottom: 7px; - } - } - } - .marketing-testimonials-slides { - &.owl-theme { - .owl-nav { - right: 0; - bottom: 0; - margin-top: 25px; - transform: unset; - position: relative; - - [class*=owl-] { - margin: 0 3px; - font-size: 13px; - padding: 6px 20px 6px !important; - } - } - } - } - .business-testimonials-image { - margin: { - right: 0; - bottom: 40px; - }; - } - .business-testimonials-content { - .icon { - margin-bottom: 15px; - font-size: 30px; - } - p { - font-size: 15px; - } - .info { - margin-top: 20px; - - h3 { - font-size: 15px; - margin-bottom: 7px; - } - } - } - .testimonials-slides { - &.owl-theme { - padding: { - left: 0; - right: 0; - }; - .owl-nav { - margin-top: 30px; - - [class*=owl-] { - padding: 6px 20px 6px !important; - left: 0; - top: 0; - transform: unset; - position: relative; - font-size: 13px; - margin: 0 4px; - } - } - } - } - .testimonials-inner { - padding: { - left: 15px; - right: 15px; - }; - .testimonials-slides { - &.owl-theme { - .owl-nav { - [class*=owl-] { - margin: 0 5px; - font-size: 15px; - width: 35px; - height: 35px; - line-height: 35px; - } - } - } - } - &.it-agency-color { - padding: { - left: 0; - right: 0; - }; - } - &.minimal-portfolio-color { - padding: { - left: 0; - right: 0; - }; - } - &.shop-color { - padding: { - left: 0; - right: 0; - }; - } - } - .testimonials-item { - max-width: 100%; - - .icon { - margin-bottom: 15px; - font-size: 30px; - } - p { - font-size: 15px; - } - .info { - margin-top: 20px; - - img { - width: 70px !important; - height: 70px; - } - .title { - h3 { - font-size: 15px; - margin-bottom: 7px; - } - } - } - } - .saas-testimonials-slides { - &.owl-theme { - margin-top: 30px; - padding: { - left: 0; - right: 0; - }; - .owl-nav { - margin-top: 20px; - - [class*=owl-] { - top: 0; - left: 0; - margin: 0 6px; - font-size: 20px; - transform: unset; - position: relative; - - &.owl-next { - right: 0; - } - } - } - } - } - .saas-testimonials-item { - padding: 20px 15px; - text-align: center; - - .info { - margin-bottom: 20px; - justify-content: center; - text-align: start; - - img { - width: 65px !important; - height: 65px; - } - .title { - text-align: start; - - h3 { - font-size: 15px; - } - } - } - p { - font-size: 14px; - } - } - .testimonials-box { - padding: 20px 15px; - - .icon { - width: 60px; - height: 60px; - line-height: 60px; - font-size: 25px; - margin-bottom: 15px; - } - p { - font-size: 14px; - } - .info { - margin-top: 20px; - - h3 { - font-size: 15px; - } - } - } - - .single-skills-box { - padding: 20px; - } - - .short-brief-area { - .row { - .col-lg-6 { - &:last-child { - .short-brief-content { - border-bottom: none; - margin-bottom: 0; - } - } - } - } - } - .short-brief-content { - border-bottom: 1px solid #eeeeee; - padding-bottom: 30px; - - .timeline-content { - h3 { - font-size: 16px; - margin-bottom: 12px; - } - } - .timeline-item { - padding-left: 30px; - } - .timeline-info { - .sub-title { - margin-bottom: 10px; - - span { - font-size: 15px; - } - } - } - } - - .video-box { - .video-btn { - top: 50%; - transform: translateY(-50%) translateX(-50%); - width: 55px; - height: 55px; - font-size: 20px; - } - } - - .single-team-member { - .content { - padding: 20px 15px; - - &::before { - opacity: 1; - visibility: visible; - } - h3 { - font-size: 16px; - transform: translateY(0) !important; - } - span { - transform: translateY(0) !important; - } - .social { - bottom: auto; - opacity: 1; - visibility: visible; - top: -30px; - - li { - a { - font-size: 15px; - } - } - } - } - } - .single-team-box { - .image { - .social { - margin-bottom: 0; - opacity: 1; - visibility: visible; - padding: 20px; - } - } - .content { - margin-top: 20px; - - h3 { - font-size: 16px; - } - } - } - .team-member { - .content { - padding: 20px 15px; - margin-top: 0; - - &::before { - opacity: 1; - visibility: visible; - } - h3 { - font-size: 16px; - transform: translateY(0) !important; - } - span { - transform: translateY(0) !important; - } - .social { - visibility: visible; - bottom: auto; - opacity: 1; - top: -30px; - - li { - a { - font-size: 15px; - } - } - } - } - } - .team-box { - .content { - visibility: visible; - position: relative; - padding: 20px 15px; - opacity: 1; - bottom: 0; - - h3 { - font-size: 16px; - } - .social { - li { - a { - font-size: 17px; - } - } - } - } - } - - .single-pricing-box { - text-align: center; - padding: 20px 15px; - - .pricing-header { - margin-bottom: 20px; - padding-bottom: 20px; - - h3 { - font-size: 30px; - - span { - font-size: 13px; - } - } - } - .features-list { - max-width: 176px; - text-align: start; - margin: { - bottom: 20px; - left: auto; - right: auto; - }; - li { - padding-left: 20px; - - i { - top: 3.5px; - } - } - } - } - .pricing-box { - padding: 25px; - - .pricing-header { - margin: -25px -25px 25px; - padding: 25px; - - h3 { - font-size: 16px; - } - .price { - font-size: 30px; - - span { - font-size: 13px; - } - } - } - .features-list { - margin-bottom: 25px; - } - &.bg-black { - .pricing-header { - padding: 0 0 25px; - } - } - } - .pricing-tabs { - margin-top: 0; - - .nav { - margin-bottom: 40px; - - .nav-item { - .nav-link { - padding: 11px 30px; - font-size: 14px; - } - } - } - } - .pricing-item { - padding: 20px 15px; - - .pricing-header { - margin: -20px 0 20px; - padding: 20px 15px; - - h3 { - font-size: 16px; - } - .price { - font-size: 30px; - - span { - font-size: 13px; - } - } - } - .features-list { - margin-bottom: 20px; - } - } - - .single-clients-box { - a { - padding: 10px; - } - } - - .services-details-content { - text-align: center; - - h2 { - font-size: 22px; - } - } - .services-details-video { - margin: { - left: 0; - top: 30px; - }; - iframe { - height: 162px; - } - } - - .showMoreItemsList + .button-box button { - margin-top: 0; - padding: 11px 30px; - font-size: 14px; - } - - .single-featured-video-box { - .content { - h3 { - font-size: 16px; - } - } - } - .featured-video-item-list { - .single-featured-video-item { - .image { - height: auto; - background-image: unset !important; - - img { - display: inline-block; - } - } - .content { - padding: { - top: 20px; - left: 0; - bottom: 0; - }; - h3 { - font-size: 16px; - } - } - } - } - - .latest-posts-area { - .widget-area { - margin: { - top: 10px; - bottom: 30px; - }; - } - } - .single-latest-post-box { - .post-content { - padding: { - top: 20px; - left: 0; - right: 0; - }; - h3 { - font-size: 16px; - } - .link-btn { - i { - top: 6px; - } - } - } - } - - .what-we-do-content { - text-align: center; - - .section-title { - text-align: center; - margin-bottom: 0; - - p { - margin-top: 12px; - } - } - .single-what-we-do-box { - margin-top: 30px; - } - } - .single-what-we-do-box { - .icon { - font-size: 35px; - margin-bottom: 20px; - } - h3 { - font-size: 16px; - } - } - .what-we-do-image { - margin-top: 30px; - } - - .shorting-menu { - margin-bottom: 15px; - - .filter { - font-size: 14px; - margin: { - bottom: 15px; - right: 10px; - left: 10px; - }; - } - } - .works-slides-style-one, .works-slides-style-two { - &.owl-theme { - .owl-nav { - opacity: 1; - visibility: visible; - - [class*=owl-] { - left: 15px; - width: 35px; - height: 35px; - line-height: 35px; - font-size: 16px; - - &.owl-next { - left: auto; - right: 15px; - } - } - } - .owl-dots { - margin-top: 30px; - - .owl-dot { - span { - width: 15px; - height: 15px; - margin: 0 3px; - } - } - } - } - } - - .portfolio-details-desc { - h3 { - font-size: 17px; - } - .image { - padding-right: 0; - } - .content { - margin-top: 0; - margin-bottom: 15px; - } - } - .portfolio-details-info { - padding: 20px; - margin: { - left: 0; - top: 30px; - }; - ul { - li { - .icon { - top: 6px; - font-size: 20px; - } - span { - margin-bottom: 8px; - font-size: 15px; - } - } - } - } - .portfolio-details-slides { - &.owl-theme { - .owl-nav { - opacity: 1; - visibility: visible; - - [class*=owl-] { - left: 15px; - width: 35px; - height: 35px; - line-height: 35px; - font-size: 16px; - - &.owl-next { - left: auto; - right: 15px; - } - } - } - } - } - - .portfolio-details-left { - a { - padding-left: 20px; - font-size: 13px; - } - } - .menu-icon { - font-size: 18px; - } - .portfolio-details-right { - a { - padding-right: 20px; - font-size: 13px; - } - } - - .widget-area { - margin-top: 40px; - - .widget { - .widget-title { - font-size: 16px; - padding-bottom: 10px; - } - } - .widget_service_categories { - ul { - li { - a { - i { - font-size: 11px; - } - } - } - } - } - .widget_about_author { - .about-author { - padding: 20px 15px; - } - } - .widget_noke_posts_thumb { - .item { - padding-left: 95px; - - .thumb { - width: 80px; - - .fullimage { - width: 80px; - } - } - .info { - .title { - font-size: 13px; - } - } - } - } - .widget_recent_posts { - .item { - .title { - font-size: 14px; - } - } - } - .widget_newsletter { - padding: 20px 15px; - - h4 { - font-size: 17px; - } - } - .widget_tag_cloud { - .tagcloud { - a { - font-size: 13px !important; - } - } - } - &.extra-padding { - padding-left: 0; - - &.left-sidebar { - padding-right: 0; - margin: { - top: 0; - bottom: 40px; - }; - } - } - .widget_price_filter { - .collection_filter_by_price { - padding-right: 15px; - } - } - .widget_colors { - ul { - li { - a { - span { - &:nth-child(1) { - width: 15px; - height: 15px; - } - } - } - } - } - } - .widget_top_rated_products { - .item { - .info { - .title { - margin-bottom: 6px; - font-size: 13px; - } - } - } - } - } - - .products-details-desc { - padding-left: 0; - margin-top: 30px; - - h3 { - margin-bottom: 15px; - font-size: 16px; - } - .products-review { - .rating { - font-size: 13px; - } - } - .price { - font-size: 14px; - } - } - .products-details-tabs { - margin-top: 30px; - - .single-tabs-box { - h2 { - font-size: 17px; - } - .inner-box { - h3 { - font-size: 16px; - margin-bottom: 15px; - } - .table-striped { - tbody tr td { - font-size: 13px; - white-space: nowrap; - } - } - .products-review-comments { - .user-review { - padding-left: 0; - - .sub-comment { - margin-bottom: 6px; - } - img { - top: 0; - left: 0; - position: relative; - margin-bottom: 15px; - } - } - } - .review-form-wrapper { - form { - button { - margin-top: 20px; - font-size: 14px; - } - } - } - } - } - } - - .cart-table-desc { - table { - thead { - tr { - th { - font-size: 14px; - white-space: nowrap; - } - } - } - tbody { - tr { - td { - padding-right: 20px; - white-space: nowrap; - font-size: 13px; - text-align: center; - } - } - } - } - } - .cart-buttons-desc { - .shopping-coupon-code { - .form-control { - padding-left: 10px; - } - button { - padding: 0 15px; - font-size: 12px; - } - } - .text-end { - text-align: center !important; - margin-top: 30px; - } - } - .cart-totals-desc { - margin-top: 30px; - padding: 20px 15px; - - h3 { - font-size: 16px; - padding: { - top: 15px; - left: 15px; - right: 15px; - bottom: 14px; - }; - margin: { - left: -15px; - right: -15px; - bottom: 20px; - top: -20px; - }; - } - .default-btn { - margin-top: 20px; - } - } - - .billing-details-desc { - padding: 20px 15px; - - h3 { - font-size: 16px; - padding: { - top: 15px; - left: 15px; - right: 15px; - bottom: 14px; - }; - margin: { - left: -15px; - right: -15px; - bottom: 20px; - top: -20px; - }; - } - .form-group { - .nice-select { - font-size: 13px; - - .list { - .option { - font-size: 14px; - } - } - } - } - } - .order-details-desc { - margin-top: 30px; - padding: 20px 15px; - - h3 { - font-size: 16px; - padding: { - top: 15px; - left: 15px; - right: 15px; - bottom: 14px; - }; - margin: { - left: -15px; - right: -15px; - bottom: 20px; - top: -20px; - }; - } - .default-btn { - margin-top: 20px; - } - } - - .blog-details-desc { - .article-content { - .entry-meta { - margin-top: -10px; - - ul { - li { - margin: { - right: 10px; - top: 10px; - }; - } - } - } - h3 { - font-size: 16px; - line-height: 1.5; - margin: { - bottom: 12px; - top: 20px; - }; - } - } - .article-footer { - text-align: center; - - .article-tags { - flex: 0 0 100%; - max-width: 100%; - - .d-flex { - display: block !important; - } - p { - display: block; - margin-bottom: 0; - } - a { - margin-top: 10px; - } - } - .article-share { - flex: 0 0 100%; - max-width: 100%; - margin-top: 20px; - - .social { - text-align: center; - } - } - } - } - blockquote { - padding: 20px !important; - - &::after, &::after { - width: 1px; - } - p { - font-size: 14px !important; - } - } - .comments-area { - margin-top: 25px; - - .comments-title { - font-size: 16px; - } - .comment-author { - font-size: 14px; - - .avatar { - top: 0; - left: 0; - display: block; - position: relative; - margin-bottom: 12px; - } - } - .comment-body { - .reply { - a { - font-size: 12px; - } - } - } - .comment-body { - padding-left: 0; - } - .comment-respond { - margin-top: 25px; - - .comment-reply-title { - font-size: 16px; - } - .comment-form-author { - width: 100%; - padding-right: 0; - } - .comment-form-email { - width: 100%; - padding-left: 0; - } - input[type="date"], input[type="time"], input[type="datetime-local"], input[type="week"], input[type="month"], input[type="text"], input[type="email"], input[type="url"], input[type="password"], input[type="search"], input[type="tel"], input[type="number"], textarea { - font-size: 14px; - padding-left: 12px; - } - textarea { - padding-top: 12px; - } - .comment-form-cookies-consent { - label { - font-size: 14px; - } - } - .form-submit { - input { - font-size: 13px; - } - } - } - } - - .faq-accordion { - .accordion-item { - .accordion-button { - padding: 15px 15px 15px 40px; - font-size: 14px; - - &::after { - left: 15px; - top: 20px; - width: 12px; - height: 12px; - background-size: 12px; - } - } - .accordion-body { - padding: 0 15px 15px 40px; - } - } - } - - .facility-content { - padding-right: 0; - margin-bottom: 30px; - - .item { - padding-left: 0; - text-align: center; - - i { - line-height: 1; - font-size: 35px; - position: relative; - margin-bottom: 20px; - display: inline-block; - } - h3 { - font-size: 16px; - } - } - } - - .cta-content { - max-width: 100%; - - h2 { - font-size: 22px; - } - p { - max-width: 100%; - margin-top: 15px; - } - .default-btn { - margin-top: 10px; - } - } - .call-to-action-content { - text-align: center; - - h2 { - font-size: 22px; - } - } - .call-to-action-btn { - text-align: center; - margin-top: 25px; - } - .call-to-action-inner { - padding: { - left: 15px; - right: 15px; - }; - } - - .profile-authentication-area { - height: auto; - padding: { - bottom: 70px; - top: 130px; - }; - } - .signin-form { - max-width: 100%; - text-align: center; - padding: 20px 15px; - - h2 { - font-size: 25px; - margin-bottom: 25px; - } - form { - .lost-your-password-wrap { - text-align: start; - margin-top: 15px; - } - .form-group { - margin-bottom: 15px; - } - button { - padding: 12px 30px; - font-size: 14px; - } - .dont-account { - margin-top: 20px; - } - .sign-in-with-button { - margin-top: 20px; - } - } - } - .signup-form { - max-width: 100%; - text-align: center; - padding: 20px 15px; - - h2 { - font-size: 25px; - margin-bottom: 25px; - } - form { - .lost-your-password-wrap { - text-align: start; - margin-top: 15px; - } - .form-group { - margin-bottom: 15px; - } - button { - padding: 12px 30px; - font-size: 14px; - } - .dont-account { - margin-top: 20px; - } - .sign-in-with-button { - margin-top: 20px; - } - } - } - - .noke-grid-sorting { - margin-bottom: 30px; - text-align: center; - - .ordering { - text-align: center; - margin-top: 15px; - - select { - font-size: 14px; - } - } - } - - .app-download-area { - .col-lg-6 { - &:nth-child(1) { - order: 2; - } - &:nth-child(2) { - order: 1; - } - } - } - .app-download-content { - text-align: center; - - .sub-title { - font-size: 13px; - } - h2 { - font-size: 22px; - } - .btn-box { - margin-top: 25px; - - .store-btn { - padding: 10px 10px 10px 45px; - font-size: 12px; - text-align: start; - margin: { - left: 3px; - right: 3px; - }; - &:first-child { - margin-left: 0; - } - img { - left: 10px; - width: 25px; - } - span { - font-size: 14px; - } - } - } - } - .app-download-image { - padding-right: 0; - margin-top: 30px; - } - - .trending-style-image { - margin-right: 0; - padding: { - bottom: 0; - right: 0; - }; - img { - &:nth-child(2) { - position: relative; - margin-top: 30px; - width: auto; - } - } - } - .trending-style-content { - text-align: center; - padding-left: 0; - margin-top: 30px; - - .sub-title { - font-size: 13px; - } - h2 { - margin-bottom: 13px; - font-size: 22px; - } - h3 { - font-size: 15px; - margin-bottom: 13px; - } - .default-btn { - margin-top: 5px; - } - } - - .page-title-area { - padding: { - top: 60px; - bottom: 70px; - }; - &.style-three { - padding: { - top: 60px; - bottom: 60px; - }; - } - &.style-four { - padding: { - top: 60px; - bottom: 60px; - }; - &::before { - background: { - image: unset !important; - color: rgba(255, 255, 255, .85); - }; - } - } - &.style-two { - padding: { - bottom: 60px; - top: 245px; - }; - } - } - .page-title-content { - &.text-start { - text-align: center !important; - } - h2 { - font-size: 25px; - } - ul { - margin-top: 10px; - - li { - font-size: 14px; - } - } - } - - .privacy-policy-content { - h3 { - font-size: 16px; - margin-bottom: 13px; - } - } - - .terms-conditions-content { - h3 { - font-size: 16px; - margin-bottom: 13px; - } - } - - .error-content { - h3 { - font-size: 20px; - margin: { - bottom: 15px; - top: 30px; - }; - } - .default-btn { - margin-top: 20px; - } - } - - .coming-soon-image { - height: auto; - background-image: unset !important; - - img { - display: inline-block; - } - } - .coming-soon-content { - height: auto; - padding: { - top: 60px; - bottom: 60px; - left: 15px; - right: 15px; - }; - h2 { - font-size: 25px; - margin-top: 25px; - } - #timer { - margin-top: 10px; - - div { - width: 95px; - height: 100px; - font-size: 30px; - margin-top: 20px; - - span { - font-size: 14px; - } - &:first-child { - margin-left: 10px; - } - &:last-child { - margin-right: 10px; - } - } - } - form { - max-width: 100%; - margin-top: 30px; - - .default-btn { - position: relative; - right: 0; - bottom: 0; - display: block; - width: 100%; - padding: 13px 20px; - margin-top: 15px; - } - .input-newsletter { - padding: 0 0 0 15px; - height: 50px; - font-size: 13px; - } - } - } - - .single-blog-post { - .content { - padding: 15px; - - .meta { - li { - i { - top: 3px; - } - } - } - h3 { - font-size: 16px; - } - } - } - .single-post-item { - .post-content { - padding: 20px 15px; - - .meta { - margin-bottom: 3px; - - li { - padding-left: 19px; - margin: { - right: 10px; - bottom: 10px; - }; - } - } - .tag { - margin-bottom: 12px; - } - h3 { - font-size: 16px; - } - .link-btn { - i { - top: 6px; - } - } - } - &.without-box-shadow { - .post-content { - padding: { - left: 0; - right: 0; - }; - } - } - } - .blog-section-title { - text-align: center; - margin-bottom: 40px; - - .sub-title { - font-size: 13px; - } - h2 { - font-size: 22px; - } - .default-btn { - margin-top: 5px; - } - } - - .pagination-area { - margin-top: 10px; - - .page-numbers { - width: 35px; - height: 35px; - line-height: 33px; - font-size: 15px; - } - } - - .single-contact-info-box { - padding: 20px 15px; - text-align: center; - - .icon { - font-size: 30px; - margin-bottom: 20px; - } - h3 { - font-size: 16px; - margin-bottom: 12px; - } - &.style-two { - .icon { - width: 60px; - height: 60px; - font-size: 25px; - margin-bottom: 20px; - } - } - } - .contact-form { - padding: 20px; - } - - .footer-area { - padding-top: 60px; - - &.marketing-footer { - .footer-top { - margin-bottom: 60px; - padding-bottom: 0; - } - } - &.business-footer { - .footer-top { - margin-bottom: 60px; - padding: { - top: 50px; - bottom: 50px; - }; - } - } - } - .footer-top { - text-align: center; - padding-bottom: 30px; - margin-bottom: 30px; - - .logo { - margin-bottom: 25px; - } - .content { - &.d-flex { - display: block !important; - } - h3 { - font-size: 16px; - margin-bottom: 25px; - } - } - } - .single-footer-widget { - h3 { - font-size: 16px; - } - &.pl-4 { - padding-left: 0; - } - &.pl-2 { - padding-left: 0; - } - &.style-two { - h3 { - padding-left: 0; - - &::before { - display: none; - } - } - } - } - .copyright-area { - margin-top: 30px; - padding: { - top: 20px; - bottom: 20px; - }; - .text-start { - text-align: center!important; - margin-bottom: 15px; - } - .social-links { - text-align: center; - margin-top: 15px; - } - } - .go-top { - width: 38px; - height: 38px; - font-size: 15px; - } - - .productsQuickView { - .modal-dialog { - max-width: 100%; - } - .modal-content { - padding: 15px; - - button { - &.btn-close { - font-size: 15px; - } - } - .products-content { - margin-top: 25px; - - h3 { - font-size: 16px; - } - .price { - font-size: 14px; - } - .products-add-to-cart { - margin-top: 20px; - } - .social-share { - margin-top: 25px; - } - } - } - } - -} - -/* Min width 576px to Max width 767px */ -@media only #{$media} and ($feature_min : $value_one) and ($feature_max : $value_two) { - - .top-header-area { - .container-fluid { - max-width: 540px; - } - &.top-header-style-two { - .container-fluid { - max-width: 540px; - } - } - &.top-header-style-three { - .container-fluid { - max-width: 540px; - } - } - } - - .startup-banner-inner { - padding: { - left: 25px; - right: 25px; - }; - } - .startup-banner-content { - max-width: 540px; - margin: { - left: auto; - right: auto; - }; - padding: { - left: 15px; - right: 15px; - }; - } - .startup-banner-image { - max-width: 540px; - margin: { - left: auto; - right: auto; - }; - padding: { - left: 15px; - right: 15px; - }; - } - .business-banner-area { - .container { - max-width: 540px; - } - } - .app-banner-area { - .container { - max-width: 540px; - } - } - .saas-banner-area { - .container-fluid { - max-width: 540px; - } - } - .personal-portfolio-banner-area { - .container { - max-width: 540px; - } - } - .consulting-banner-area { - .container { - max-width: 540px; - } - } - - .screenshot-wrap { - .screenshot-frame { - display: block; - height: 500px; - width: 240px; - top: 40px; - } - } - .screenshot-slides { - &.owl-theme { - .owl-nav { - [class*=owl-] { - left: 0; - - &.owl-next { - left: auto; - right: 0; - } - } - } - } - } - - .startup-about-area { - .container-fluid { - max-width: 540px; - } - } - - .single-services-box { - .content { - padding: 25px; - } - } - - .single-blog-post { - .content { - padding: 25px; - } - } - - .works-area { - .container-fluid { - max-width: 540px; - } - } - - .facility-content { - display: flex; - flex-wrap: wrap; - margin: { - right: -15px; - left: -15px; - bottom: 0; - }; - .item { - flex: 0 0 50%; - max-width: 50%; - margin-bottom: 30px !important; - padding: { - left: 15px; - right: 15px; - }; - } - } - - .startup-testimonials-area { - .container-fluid { - max-width: 540px; - } - } - - .trending-style-image { - padding: { - right: 100px; - bottom: 80px; - }; - img { - &:nth-child(2) { - position: absolute; - margin-top: 0; - width: 250px; - } - } - } - - .productsQuickView { - .modal-dialog { - max-width: 430px; - } - .modal-content { - padding: 30px; - } - } - -} - -/* Min width 768px to Max width 991px */ -@media only #{$media} and ($feature_min : $value_three) and ($feature_max : $value_four) { - - body { - font-size: 14.5px; - } - p { - font-size: 14.5px; - } - .ptb-100 { - padding: { - top: 80px; - bottom: 80px; - }; - } - .pt-100 { - padding-top: 80px; - } - .pb-100 { - padding-bottom: 80px; - } - .ptb-70 { - padding: { - top: 50px; - bottom: 50px; - }; - } - .pt-70 { - padding-top: 50px; - } - .pb-70 { - padding-bottom: 50px; - } - .default-btn { - font-size: 14.5px; - } - .section-title { - max-width: 550px; - margin-bottom: 50px; - - h2 { - font-size: 30px; - } - &.style-two { - text-align: center; - padding-left: 0; - margin: { - left: auto; - right: auto; - bottom: 50px; - }; - h2 { - &::before { - display: none; - } - } - } - &.style-four { - text-align: center; - - h2 { - font-size: 25px; - } - &::before { - left: 50%; - transform: translateX(-50%); - } - } - } - - .top-header-area { - .container-fluid { - max-width: 720px; - } - &.top-header-style-two { - .container-fluid { - max-width: 720px; - } - } - &.top-header-style-three { - .container-fluid { - max-width: 720px; - } - } - } - - .noke-responsive-nav { - .others-option { - display: flex !important; - } - } - .others-option-for-responsive { - display: none; - } - - .startup-banner-area { - .container-fluid { - max-width: 100%; - padding: { - left: 0; - right: 0; - }; - } - } - .startup-banner-inner { - padding: { - top: 80px; - bottom: 80px; - left: 25px; - right: 25px; - }; - } - .startup-banner-content { - max-width: 720px; - text-align: center; - margin: { - left: auto; - right: auto; - }; - padding: { - left: 15px; - right: 15px; - }; - p { - margin: { - left: auto; - right: auto; - }; - } - h1 { - margin-bottom: 20px; - font-size: 35px; - } - .default-btn { - margin-top: 5px; - } - } - .startup-banner-image { - max-width: 720px; - padding: { - left: 15px; - right: 15px; - }; - margin: { - left: auto; - right: auto; - top: 30px; - }; - } - .marketing-banner-area { - padding: { - top: 70px; - bottom: 70px; - }; - } - .marketing-banner-content { - padding-right: 0; - text-align: center; - - p { - margin: { - left: auto; - right: auto; - }; - } - h1 { - margin-bottom: 15px; - font-size: 35px; - } - .default-btn { - margin-top: 5px; - } - } - .marketing-banner-image { - margin-top: 30px; - } - .business-banner-area { - padding: { - top: 80px; - bottom: 80px; - }; - .container { - max-width: 720px; - } - &::before { - display: none; - } - } - .business-banner-content { - padding-right: 0; - text-align: center; - max-width: 100%; - - p { - margin: { - left: auto; - right: auto; - }; - } - h1 { - margin-bottom: 15px; - font-size: 36px; - } - .default-btn { - margin-top: 5px; - } - } - .business-banner-image { - margin-top: 30px; - } - .app-banner-area { - padding: { - top: 80px; - bottom: 80px; - }; - .container { - max-width: 720px; - } - } - .app-banner-content { - text-align: center; - - p { - margin: { - left: auto; - right: auto; - }; - } - h1 { - margin-bottom: 15px; - font-size: 40px; - } - .btn-box { - margin-top: 20px; - - .store-btn { - text-align: start; - - span { - font-size: 16px; - } - } - } - } - .app-banner-image { - padding-left: 0; - margin-top: 35px; - } - .personal-portfolio-banner-area { - padding: { - top: 80px; - bottom: 80px; - }; - .container { - max-width: 720px; - } - } - .personal-portfolio-banner-content { - text-align: center; - - .sub-title { - padding-left: 0; - font-size: 16px; - - &::before { - display: none; - } - } - p { - margin: { - left: auto; - right: auto; - }; - } - h4 { - margin-bottom: 15px; - font-size: 20px; - } - h1 { - margin-bottom: 15px; - font-size: 40px; - } - .default-btn { - margin-top: 5px; - } - } - .personal-portfolio-banner-image { - margin-top: 30px; - - img { - width: 100%; - } - } - .shape1, .shape2, .shape3, .shape4, .shape5, .shape6, .shape7, .shape8, .shape9, .shape16, .shape17, .shape18, .shape19 { - display: none !important; - } - .saas-banner-area { - padding-top: 80px; - - .container-fluid { - max-width: 720px; - padding: { - left: 15px; - right: 15px; - }; - } - } - .saas-banner-content { - margin-left: 0; - text-align: center; - max-width: 100%; - - h1 { - margin-bottom: 15px; - font-size: 40px; - } - p { - margin: { - left: auto; - right: auto; - }; - } - } - .saas-banner-image { - margin-top: 35px; - } - .consulting-banner-area { - padding: { - top: 215px; - bottom: 80px; - }; - .container { - max-width: 720px; - } - &::before { - display: block; - } - } - .consulting-banner-content { - text-align: center; - max-width: 100%; - - h1 { - margin-bottom: 15px; - font-size: 35px; - } - p { - margin: { - left: auto; - right: auto; - }; - } - .default-btn { - margin-top: 5px; - } - } - .it-agency-banner-area { - .it-agency-inner-banner { - padding: { - top: 200px; - bottom: 230px; - }; - } - } - .it-agency-banner-content { - max-width: 100%; - - h1 { - font-size: 40px; - margin-bottom: 15px; - } - .default-btn { - margin-top: 8px; - } - } - .banner-video-box { - max-width: 100%; - margin-top: -130px; - } - .shop-banner-area { - padding: { - top: 100px; - bottom: 100px; - }; - } - .shop-banner-content { - .sub-title { - font-size: 20px; - } - h1 { - margin-bottom: 15px; - font-size: 40px; - } - h4 { - font-size: 20px; - } - .default-btn { - margin-top: 25px; - } - } - .blog-banner-area { - padding: { - top: 80px; - bottom: 80px; - }; - } - .blog-banner-item { - margin-bottom: 30px; - - .content { - padding: 25px; - max-width: 510px; - - h3 { - font-size: 20px; - } - } - } - .blog-banner-item-list { - .single-blog-banner-item { - .image { - background-image: unset !important; - height: auto; - - img { - display: inline-block; - } - } - .content { - padding: { - top: 20px; - bottom: 0; - left: 0; - }; - h3 { - font-size: 18px; - } - } - } - } - .furniture-banner-item { - padding: { - top: 100px; - bottom: 100px; - }; - } - .furniture-banner-content { - border-left-width: 3px; - padding: 30px; - - h1 { - font-size: 35px; - } - } - .minimal-portfolio-banner-area { - padding: { - bottom: 170px; - top: 200px; - }; - } - .minimal-portfolio-banner-content { - max-width: 600px; - - .typewrite { - padding: 8px 20px; - margin-bottom: 25px; - font-size: 15px; - } - h1 { - font-size: 35px; - margin-bottom: 25px; - } - } - - .features-area { - &.ptb-70 { - padding-bottom: 20px; - } - } - .single-features-box { - padding: { - left: 0; - right: 0; - }; - .icon { - font-size: 40px; - transform: translateY(0) !important; - } - h3 { - font-size: 18px; - transform: translateY(0) !important; - } - p { - transform: translateY(0) !important; - } - .link-btn { - left: 0; - opacity: 1; - transform: unset; - margin-top: 13px; - position: relative; - visibility: visible; - bottom: 0 !important; - - i { - top: 6.5px; - } - } - } - .features-box { - padding: 25px 20px; - - h3 { - font-size: 18px; - } - .icon { - width: 80px; - height: 80px; - font-size: 40px; - line-height: 80px; - } - } - .single-features-item { - padding-left: 55px; - - .icon { - font-size: 40px; - } - h3 { - font-size: 17px; - } - } - .features-item { - padding: 25px 20px; - - .icon { - font-size: 30px; - } - h3 { - font-size: 18px; - } - } - - .startup-about-area { - border-bottom: 1px solid #eeeeee; - margin-bottom: 80px; - - .container-fluid { - max-width: 720px; - } - } - .startup-about-image { - margin-right: 0; - padding: 0; - - .video-btn { - left: 50%; - transform: translateY(-50%) translateX(-50%); - } - } - .startup-about-content { - padding-left: 0; - text-align: center; - max-width: 100%; - margin-top: 30px; - - h2 { - font-size: 30px; - } - .features-list { - padding-left: 0; - list-style-type: none; - - li { - font-weight: 600; - } - } - } - .marketing-about-image { - margin-right: 0; - } - .marketing-about-content { - padding-left: 0; - text-align: center; - margin-top: 30px; - - h2 { - font-size: 30px; - } - .features-list { - padding-left: 0; - list-style-type: none; - - li { - font-weight: 600; - } - } - } - .business-about-image { - padding-right: 0; - margin-bottom: 30px; - } - .business-about-content { - padding-left: 0; - text-align: center; - - h2 { - font-size: 30px; - } - } - .app-about-content { - padding-right: 0; - - h3 { - font-size: 19px; - margin-bottom: 15px; - } - } - .app-about-image { - padding-left: 0; - margin-top: 30px; - } - .saas-about-image { - padding-right: 0; - margin-bottom: 30px; - } - .saas-about-content { - padding-left: 0; - - h2 { - font-size: 30px; - } - } - .it-agency-about-image { - padding-right: 0; - margin-right: 0; - padding-bottom: 0; - } - .it-agency-about-content { - padding-left: 0; - text-align: center; - margin-top: 35px; - - h2 { - font-size: 30px; - } - .features-list { - padding-left: 0; - list-style-type: none; - - li { - font-weight: 600; - } - } - } - - .expertise-box { - text-align: center; - - .icon { - width: 70px; - height: 70px; - line-height: 70px; - font-size: 35px; - margin: { - left: auto; - right: auto; - }; - } - h3 { - font-size: 18px; - } - } - - .who-we-are-content { - text-align: center; - padding: 30px; - - h2 { - font-size: 20px; - } - .default-btn { - margin-top: 5px; - } - } - - .single-services-box { - .content { - padding: 20px; - - .icon { - font-size: 40px; - margin-bottom: 15px; - transform: translateY(0) !important; - } - h3 { - font-size: 18px; - transform: translateY(0) !important; - } - p { - transform: translateY(0) !important; - } - .link-btn { - left: 0; - opacity: 1; - transform: unset; - margin-top: 13px; - position: relative; - visibility: visible; - bottom: 0 !important; - - i { - top: 6px; - } - } - } - &::before { - background: linear-gradient(to top, rgba(35, 35, 37, 0.9) 0, rgba(35, 35, 37, 0.7) 50%, rgba(22, 22, 23, 0) 75%, rgba(0, 0, 0, 0) 100%); - } - } - .single-services-item { - .content { - padding: { - left: 0; - right: 0; - }; - h3 { - font-size: 18px; - } - } - } - .services-tabs { - .nav { - margin-bottom: 35px; - border-bottom: 1px solid #eeeeee; - padding-bottom: 20px; - - .nav-item { - margin: { - left: 15px; - right: 15px; - bottom: 30px; - }; - .nav-link { - font-size: 16px; - - .icon { - width: 70px; - height: 70px; - font-size: 30px; - line-height: 70px; - margin-bottom: 15px; - } - } - } - } - } - .single-main-services { - .content { - padding-right: 0; - text-align: center; - - h3 { - font-size: 21px; - } - p { - max-width: 100%; - } - } - .image { - margin-top: 30px; - } - } - .services-box { - padding: 25px 20px; - - .icon { - font-size: 50px; - } - h3 { - font-size: 18px; - } - } - .col-lg-3 { - &:nth-child(2), &:nth-child(4) { - .services-box { - margin-top: 0; - } - } - &:nth-child(5), &:nth-child(7) { - .services-box { - margin-top: 0; - } - } - } - .services-item { - h3 { - font-size: 18px; - margin-top: 20px; - } - .hover-content { - padding: 20px; - } - } - .single-it-services-box { - padding: 25px 20px 25px 70px; - - .icon { - left: 20px; - top: 25px; - font-size: 35px; - } - h3 { - font-size: 18px; - } - } - - .single-categories-box { - h3 { - font-size: 16px; - left: 20px; - top: 20px; - } - } - .categories-box { - h3 { - font-size: 17px; - padding: { - left: 15px; - right: 15px; - }; - } - } - .categories-slides { - &.owl-theme { - .owl-nav { - opacity: 1; - visibility: visible; - margin-bottom: 30px; - - [class*=owl-] { - margin: 0 5px; - position: relative; - left: 0; - top: 0; - transform: unset; - - &.owl-next { - right: 0; - } - } - } - } - } - - .startup-works-area { - border-top: 1px solid #eeeeee; - border-bottom: 1px solid #eeeeee; - padding-top: 80px; - margin-bottom: 80px; - - .section-title { - padding-top: 0; - text-align: center; - margin: { - bottom: 50px; - left: auto; - right: auto; - }; - h2 { - font-size: 30px; - } - } - } - .startup-works-content { - margin-top: 18px; - position: relative; - text-align: center; - border-top: 1px solid #eeeeee; - padding: { - right: 0; - top: 55px; - }; - h3 { - font-size: 18px; - } - .custom-owl-nav { - margin-top: 0; - - [class*=owl-] { - margin: 0 3px; - font-size: 13px; - padding: 6px 20px 6px !important; - position: absolute; - left: 0; - top: -18px; - - &.custom-owl-next { - left: auto; - right: 0; - } - } - } - } - .startup-works-image { - padding: 0; - margin: { - left: 0; - top: 15px; - }; - } - .single-works-box { - .works-image { - .works-overlay { - h3 { - font-size: 18px; - } - } - } - } - .works-box { - h3 { - top: auto; - transform: translateY(0); - bottom: 0; - font-size: 18px; - opacity: 1; - visibility: visible; - margin: { - top: 0; - right: 0; - left: 0; - }; - } - } - - .single-featured-video-box { - .content { - h3 { - font-size: 18px; - } - } - } - .featured-video-item-list { - .single-featured-video-item { - .image { - height: auto; - background-image: unset !important; - - img { - display: inline-block; - } - } - .content { - padding: { - bottom: 0; - left: 0; - top: 20px; - }; - h3 { - font-size: 18px; - } - } - } - } - - .latest-posts-area { - .widget-area { - margin-top: 10px; - } - } - .single-latest-post-box { - .post-content { - padding: { - top: 20px; - right: 0; - left: 0; - }; - h3 { - font-size: 18px; - } - } - } - - .facility-content { - display: flex; - flex-wrap: wrap; - padding-right: 0; - margin: { - right: -15px; - left: -15px; - bottom: 0; - }; - .item { - flex: 0 0 50%; - max-width: 50%; - margin-bottom: 30px !important; - text-align: center; - padding: { - left: 15px; - right: 15px; - }; - i { - line-height: 1; - position: relative; - margin-bottom: 20px; - display: inline-block; - font-size: 40px; - } - h3 { - font-size: 18px; - } - } - } - - .short-brief-area { - .row { - .col-lg-6 { - &:last-child { - .short-brief-content { - border-bottom: none; - margin-bottom: 0; - } - } - } - } - } - .short-brief-content { - border-bottom: 1px solid #eeeeee; - padding-bottom: 30px; - - .timeline-content { - h3 { - font-size: 18px; - margin-bottom: 12px; - } - } - .timeline-info { - .sub-title { - margin-bottom: 10px; - - span { - font-size: 17px; - } - } - } - } - - .shorting-menu { - .filter { - font-size: 15px; - margin: { - left: 15px; - right: 15px; - }; - } - } - - .widget-area { - margin-top: 40px; - - .widget { - .widget-title { - font-size: 17px; - } - } - .widget_about_author { - .about-author { - padding: 25px; - } - } - .widget_noke_posts_thumb { - .item { - .info { - .title { - font-size: 14px; - } - } - } - } - .widget_newsletter { - h4 { - font-size: 18px; - } - } - .widget_tag_cloud { - .tagcloud { - a { - font-size: 13px !important; - } - } - } - .widget_recent_posts { - .item { - .title { - font-size: 14px; - } - } - } - &.extra-padding { - padding-left: 0; - - &.left-sidebar { - padding-right: 0; - margin: { - top: 0; - bottom: 40px; - }; - } - } - } - - .services-details-content { - text-align: center; - - h2 { - font-size: 30px; - } - } - .services-details-video { - margin: { - left: 0; - top: 30px; - }; - iframe { - height: 387px; - } - } - - .single-funfacts-box { - text-align: center; - padding: 30px; - - .icon { - position: relative; - left: 0; - line-height: 1; - top: 0; - transform: translateY(0); - font-size: 40px; - display: block; - margin-bottom: 15px; - } - h3 { - margin-bottom: 5px; - font-size: 35px; - } - &.without-bg-color { - margin-right: -15px; - padding: { - top: 5px; - bottom: 5px; - left: 0; - }; - } - &.text-center { - padding: 0; - border-right: none; - } - } - .funfacts-inner { - padding: { - left: 20px; - right: 20px; - }; - &.border-radius { - &.ptb-70 { - padding-bottom: 20px; - } - } - } - - .single-skills-box { - padding: 25px 20px; - } - - .how-it-works-content { - padding-right: 0; - - ul { - li { - padding-left: 60px; - - h3 { - font-size: 18px; - } - i { - font-size: 40px; - } - } - } - } - .how-it-works-image { - margin-top: 30px; - } - - .short-brief-content { - h3 { - font-size: 18px; - margin-bottom: 13px; - } - } - - .screenshot-wrap { - .screenshot-frame { - border-radius: 20px; - width: 215px; - height: 448px; - } - } - .screenshot-slides { - &.owl-theme { - .owl-nav { - [class*=owl-] { - left: -27px; - width: 30px; - line-height: 30px; - height: 30px; - font-size: 15px; - - &.owl-next { - left: auto; - right: -27px; - } - } - } - } - } - - .single-post-item { - .post-content { - padding: 20px 0 0; - } - } - - .single-clients-box { - a { - padding: 20px; - } - } - - .what-we-do-content { - .section-title { - text-align: center; - margin-bottom: 0; - - p { - max-width: 540px; - margin: { - left: auto; - right: auto; - }; - } - } - .single-what-we-do-box { - margin-top: 30px; - } - } - .single-what-we-do-box { - text-align: center; - - .icon { - font-size: 35px; - margin-bottom: 25px; - } - h3 { - font-size: 18px; - } - } - .what-we-do-image { - margin-top: 30px; - } - - .single-process-box { - padding: 30px 20px; - - h3 { - font-size: 18px; - } - } - - .startup-testimonials-area { - .container-fluid { - max-width: 720px; - } - } - .startup-testimonials-content { - padding: 40px 30px; - - .icon { - font-size: 40px; - } - p { - font-size: 16px; - } - .info { - h3 { - font-size: 16px; - } - } - } - .startup-testimonials-image { - padding: 0; - } - .startup-testimonials-slides { - &.owl-theme { - .owl-nav { - margin-top: 0; - position: relative; - right: 0; - bottom: 0; - transform: unset; - padding-bottom: 40px; - - [class*=owl-] { - margin: 0 3px; - font-size: 13px; - padding: 6px 20px 6px !important; - } - } - } - } - .marketing-testimonials-image { - margin: { - left: 30px; - right: 30px; - bottom: 40px; - }; - } - .marketing-testimonials-content { - padding-bottom: 0; - - .icon { - font-size: 40px; - } - p { - font-size: 16px; - } - .info { - h3 { - font-size: 16px; - } - } - } - .marketing-testimonials-slides { - &.owl-theme { - .owl-nav { - margin-top: 30px; - position: relative; - right: 0; - bottom: 0; - transform: unset; - - [class*=owl-] { - margin: 0 3px; - font-size: 13px; - padding: 6px 20px 6px !important; - } - } - } - } - .business-testimonials-area { - background: { - repeat: repeat; - size: contain; - }; - } - .business-testimonials-image { - margin: { - right: 0; - bottom: 35px; - }; - } - .business-testimonials-content { - .icon { - font-size: 40px; - } - p { - font-size: 16px; - } - .info { - h3 { - font-size: 16px; - } - } - } - .testimonials-slides { - &.owl-theme { - padding: { - left: 90px; - right: 90px; - }; - .owl-nav { - [class*=owl-] { - margin: 0 3px; - font-size: 13px; - padding: 6px 20px 6px !important; - } - } - } - } - .testimonials-inner { - padding: { - left: 25px; - right: 25px; - }; - .testimonials-slides { - &.owl-theme { - .owl-nav { - [class*=owl-] { - font-size: 17px; - width: 40px; - height: 40px; - line-height: 40px; - } - } - } - } - } - .testimonials-item { - .icon { - font-size: 40px; - } - p { - font-size: 16px; - } - .info { - margin-top: 20px; - - .title { - h3 { - font-size: 16px; - } - } - } - } - .saas-testimonials-item { - padding: 25px; - - .info { - .title { - h3 { - font-size: 16px; - } - } - } - p { - font-size: 15px; - } - } - .saas-testimonials-slides { - &.owl-theme { - margin-top: -50px; - padding: { - left: 40px; - right: 40px; - }; - .owl-nav { - [class*=owl-] { - left: 0; - font-size: 18px; - - &.owl-next { - left: auto; - right: 0; - } - } - } - } - } - .testimonials-box { - padding: 25px 20px; - - .icon { - width: 70px; - height: 70px; - font-size: 30px; - line-height: 70px; - } - p { - font-size: 15px; - } - .info { - margin-top: 20px; - - h3 { - font-size: 16px; - } - } - } - - .single-products-box { - .image { - .buttons-list { - li { - transform: translateY(0); - visibility: visible; - opacity: 1; - - a { - .tooltip-label { - &::before { - bottom: -12px; - } - } - &:hover { - .tooltip-label { - top: -40px; - } - } - } - } - } - } - .content { - h3 { - font-size: 18px; - } - .rating { - margin-bottom: 10px; - font-size: 15px; - } - .price { - span { - font-size: 16px; - } - } - } - } - - .trending-style-image { - margin-right: 0; - } - .trending-style-content { - padding-left: 0; - text-align: center; - margin-top: 30px; - - .sub-title { - font-size: 13px; - } - h2 { - font-size: 30px; - } - h3 { - font-size: 17px; - } - } - - .single-pricing-box { - padding: 30px; - - .pricing-header { - margin-bottom: 20px; - padding-bottom: 20px; - - h3 { - font-size: 35px; - } - } - } - .pricing-box { - .pricing-header { - h3 { - font-size: 18px; - } - .price { - font-size: 35px; - } - } - } - .pricing-tabs { - .nav { - .nav-item { - .nav-link { - font-size: 14px; - } - } - } - } - .pricing-item { - .pricing-header { - h3 { - font-size: 18px; - } - .price { - font-size: 35px; - } - } - } - - .single-team-member { - .content { - &::before { - opacity: 1; - visibility: visible; - } - h3 { - font-size: 18px; - transform: translateY(0) !important; - } - span { - transform: translateY(0) !important; - } - .social { - bottom: auto; - opacity: 1; - visibility: visible; - top: -30px; - - li { - a { - font-size: 15px; - } - } - } - } - } - .single-team-box { - .image { - .social { - margin-bottom: 0; - opacity: 1; - visibility: visible; - padding: 20px; - } - } - .content { - margin-top: 20px; - - h3 { - font-size: 18px; - } - } - } - .team-member { - .content { - margin-top: 0; - - &::before { - opacity: 1; - visibility: visible; - } - h3 { - font-size: 18px; - transform: translateY(0) !important; - } - span { - transform: translateY(0) !important; - } - .social { - bottom: auto; - opacity: 1; - visibility: visible; - top: -30px; - - li { - a { - font-size: 15px; - } - } - } - } - } - .team-box { - .content { - visibility: visible; - position: relative; - opacity: 1; - bottom: 0; - - h3 { - font-size: 18px; - } - } - } - - .video-box { - .video-btn { - width: 70px; - height: 70px; - font-size: 25px; - } - } - - .cta-content { - h2 { - font-size: 30px; - } - p { - margin-top: 15px; - } - .default-btn { - margin-top: 10px; - } - } - .call-to-action-content { - text-align: center; - - h2 { - font-size: 30px; - } - } - .call-to-action-btn { - text-align: center; - margin-top: 30px; - } - .call-to-action-inner { - padding: { - left: 25px; - right: 25px; - }; - } - - .blog-section-title { - text-align: center; - margin-bottom: 50px; - - h2 { - font-size: 30px; - } - } - .single-blog-post { - .content { - padding: 20px; - - h3 { - font-size: 18px; - } - } - } - .single-post-item { - .post-content { - .meta { - margin-bottom: 3px; - - li { - padding-left: 20px; - margin: { - right: 10px; - bottom: 10px; - }; - } - } - h3 { - margin-bottom: 12px; - font-size: 18px; - } - .link-btn { - i { - top: 6px; - } - } - } - } - - .app-download-area { - .col-lg-6 { - &:nth-child(1) { - order: 2; - } - &:nth-child(2) { - order: 1; - } - } - } - .app-download-content { - text-align: center; - margin-bottom: 35px; - - h2 { - font-size: 30px; - } - p { - max-width: 540px; - margin: { - left: auto; - right: auto; - }; - } - .btn-box { - .store-btn { - text-align: start; - - span { - font-size: 16px; - } - } - } - } - .app-download-image { - padding-right: 0; - } - - .works-area { - .container-fluid { - max-width: 720px; - } - } - .single-works-item { - .content { - h3 { - font-size: 18px; - } - } - } - - .portfolio-details-desc { - h3 { - font-size: 20px; - } - } - .portfolio-details-info { - padding: 30px; - margin: { - left: 0; - top: 30px; - }; - ul { - li { - padding-left: 38px; - - span { - font-size: 16px; - } - } - } - } - .portfolio-details-slides { - &.owl-theme { - .owl-nav { - opacity: 1; - visibility: visible; - } - } - } - - .page-title-area { - padding: { - top: 100px; - bottom: 110px; - }; - &.style-four { - padding: { - top: 100px; - bottom: 100px; - }; - } - &.style-two { - padding: { - top: 210px; - bottom: 100px; - }; - } - &.style-three { - padding: { - top: 240px; - bottom: 100px; - }; - } - } - .page-title-content { - h2 { - margin-bottom: 0; - font-size: 35px; - } - ul { - margin-top: 15px; - - li { - font-size: 15px; - } - } - } - - .pagination-area { - margin-top: 15px; - - .page-numbers { - width: 40px; - height: 40px; - line-height: 38px; - font-size: 16px; - } - } - - .services-details-desc { - h3 { - font-size: 20px; - } - } - - .faq-accordion { - .accordion-item { - .accordion-button { - font-size: 16px; - } - } - } - - .products-details-desc { - padding-left: 0; - margin-top: 30px; - - h3 { - font-size: 18px; - } - .products-review { - .rating { - font-size: 13px; - } - } - .price { - font-size: 15px; - } - } - .products-details-tabs { - margin-top: 40px; - - .single-tabs-box { - h2 { - font-size: 20px; - } - .inner-box { - h3 { - font-size: 18px; - } - .table-striped { - tbody { - tr { - td { - font-size: 15px; - } - } - } - } - } - } - } - - .cart-table-desc { - table { - tbody { - tr { - td { - white-space: nowrap; - } - } - } - } - } - .cart-totals-desc { - margin-top: 30px; - } - - .billing-details-desc { - h3 { - font-size: 18px; - } - } - .order-details-desc { - margin-top: 30px; - - h3 { - font-size: 18px; - } - } - - .profile-authentication-area { - height: auto; - padding: { - bottom: 100px; - top: 160px; - }; - } - .signin-form { - padding: 35px; - text-align: center; - - form { - .remember-me-wrap { - text-align: start; - } - } - } - .signup-form { - padding: 35px; - text-align: center; - - form { - .remember-me-wrap { - text-align: start; - } - } - } - - .privacy-policy-content { - h3 { - font-size: 18px; - } - } - - .terms-conditions-content { - h3 { - font-size: 18px; - } - } - - .error-content { - h3 { - font-size: 22px; - margin: { - bottom: 15px; - top: 35px; - }; - } - .default-btn { - margin-top: 20px; - } - } - - .coming-soon-image { - height: auto; - background-image: unset !important; - - img { - display: inline-block; - } - } - .coming-soon-content { - height: auto; - padding: { - top: 100px; - bottom: 100px; - }; - h2 { - font-size: 30px; - } - } - - .works-slides-style-one, .works-slides-style-two { - &.owl-theme { - .owl-nav { - opacity: 1; - visibility: visible; - } - } - } - - .blog-details-desc { - .article-content { - h3 { - font-size: 20px; - } - } - } - .comments-area { - .comments-title { - font-size: 20px; - } - .comment-respond { - .comment-reply-title { - font-size: 20px; - } - } - } - - .single-contact-info-box { - padding: 30px; - text-align: center; - - .icon { - font-size: 35px; - margin-bottom: 20px; - } - h3 { - font-size: 18px; - margin-bottom: 12px; - } - &.style-two { - .icon { - width: 70px; - height: 70px; - font-size: 30px; - margin-bottom: 20px; - } - } - } - - .footer-area { - padding-top: 80px; - - &.business-footer { - .footer-top { - margin-bottom: 80px; - padding: { - top: 60px; - bottom: 60px; - }; - } - } - } - .footer-top { - text-align: center; - margin-bottom: 50px; - padding-bottom: 50px; - - .logo { - margin-bottom: 30px; - } - .content { - text-align: start; - - h3 { - font-size: 18px; - } - } - } - .single-footer-widget { - h3 { - font-size: 18px; - } - &.pl-4 { - padding-left: 0; - } - &.pl-2 { - padding-left: 0; - } - &.style-two { - h3 { - padding-left: 0; - - &::before { - display: none; - } - } - } - } - .copyright-area { - margin-top: 50px; - - .text-start { - text-align: center !important; - margin-bottom: 15px; - } - .social-links { - text-align: center; - margin-top: 15px; - } - } - - .productsQuickView { - .modal-dialog { - max-width: 700px; - } - .modal-content { - padding: 20px; - - button { - &.btn-close { - font-size: 15px; - } - } - .products-content { - h3 { - font-size: 18px; - } - .price { - font-size: 15px; - } - } - } - } - -} - -/* Min width 992px to Max width 1199px */ -@media only #{$media} and ($feature_min : $value_five) and ($feature_max : $value_six) { - - body { - font-size: 15px; - } - p { - font-size: 15px; - } - .ptb-100 { - padding: { - top: 90px; - bottom: 90px; - }; - } - .pt-100 { - padding-top: 90px; - } - .pb-100 { - padding-bottom: 90px; - } - .ptb-70 { - padding: { - top: 60px; - bottom: 60px; - }; - } - .pt-70 { - padding-top: 60px; - } - .pb-70 { - padding-bottom: 60px; - } - - .top-header-area { - .container-fluid { - max-width: 960px; - } - &.top-header-style-two { - .container-fluid { - max-width: 960px; - } - } - &.top-header-style-three { - .container-fluid { - max-width: 960px; - } - } - } - - .noke-responsive-nav { - .others-option { - display: flex !important; - } - } - .others-option-for-responsive { - display: none; - } - - .startup-banner-area { - .container-fluid { - max-width: 960px; - } - } - .startup-banner-content { - padding-right: 0; - - h1 { - font-size: 50px; - } - } - .startup-banner-inner { - padding: { - top: 100px; - bottom: 100px; - left: 30px; - right: 30px; - }; - } - .startup-banner-image { - padding-left: 0; - } - .marketing-banner-content { - padding-right: 0; - - h1 { - font-size: 50px; - margin-bottom: 20px; - } - p { - max-width: 100%; - } - } - .business-banner-area { - padding: { - top: 90px; - bottom: 90px; - }; - .container { - max-width: 960px; - } - &::before { - opacity: 0.3; - } - } - .business-banner-content { - padding-right: 0; - max-width: 100%; - - h1 { - font-size: 48px; - margin-bottom: 20px; - } - p { - max-width: 100%; - } - } - .app-banner-area { - .container { - max-width: 990px; - } - } - .app-banner-content { - h1 { - font-size: 50px; - margin-bottom: 20px; - } - p { - max-width: 100%; - } - .btn-box { - margin-top: 20px; - - .store-btn span { - font-size: 16px; - } - } - } - .app-banner-image { - padding-left: 0; - } - .saas-banner-area { - .container-fluid { - max-width: 990px; - padding: { - left: 15px; - right: 15px; - }; - } - } - .saas-banner-content { - margin-left: 0; - max-width: 100%; - - h1 { - font-size: 50px; - margin-bottom: 20px; - } - p { - max-width: 100%; - } - } - .personal-portfolio-banner-area { - .container { - max-width: 960px; - } - } - .personal-portfolio-banner-content { - h1 { - font-size: 52px; - } - h4 { - font-size: 25px; - } - } - .consulting-banner-area { - padding: { - top: 270px; - bottom: 150px; - }; - .container { - max-width: 960px; - } - } - .consulting-banner-content { - max-width: 635px; - - h1 { - font-size: 40px; - margin-bottom: 20px; - } - .default-btn { - margin-top: 5px; - } - } - .it-agency-banner-area { - .it-agency-inner-banner { - padding: { - top: 250px; - bottom: 300px; - }; - } - } - .it-agency-banner-content { - max-width: 100%; - - h1 { - font-size: 50px; - } - } - .banner-video-box { - max-width: 100%; - } - .shop-banner-area { - padding: { - top: 150px; - bottom: 150px; - }; - } - .shop-banner-content { - .sub-title { - font-size: 25px; - } - h1 { - font-size: 50px; - } - h4 { - font-size: 25px; - } - } - .blog-banner-item { - .content { - padding: 20px; - max-width: 480px; - - h3 { - font-size: 22px; - } - } - } - .blog-banner-item-list { - .single-blog-banner-item { - .content { - padding: { - top: 0; - bottom: 0; - left: 15px; - }; - h3 { - margin-bottom: 12px; - font-size: 15px; - } - } - } - } - .furniture-banner-item { - padding: { - top: 150px; - bottom: 150px; - }; - } - .furniture-banner-content { - h1 { - margin-bottom: 15px; - font-size: 40px; - } - } - .minimal-portfolio-banner-area { - padding: { - top: 230px; - bottom: 200px; - }; - } - .minimal-portfolio-banner-content { - max-width: 730px; - - .typewrite { - font-size: 18px; - } - h1 { - font-size: 50px; - margin-bottom: 30px; - } - } - - .single-features-box { - padding-left: 0; - padding-right: 0; - } - .single-features-item { - padding-left: 65px; - } - .features-item { - padding: 25px; - } - - .startup-about-area { - .container-fluid { - max-width: 960px; - } - } - .startup-about-image { - margin-right: 0; - padding: { - top: 60px; - left: 29px; - bottom: 60px; - }; - .video-btn { - left: 55%; - transform: translateY(-50%) translateX(-55%); - } - } - .startup-about-content { - padding-left: 0; - max-width: 100%; - - h2 { - font-size: 38px; - } - } - .marketing-about-image { - margin-right: 0; - } - .marketing-about-content { - padding-left: 0; - } - .business-about-image { - padding-right: 0; - } - .business-about-content { - padding-left: 0; - } - .saas-about-image { - padding-right: 0; - } - .saas-about-content { - padding-left: 0; - } - .it-agency-about-image { - margin-right: 0; - padding: 0; - - .main-image { - padding-bottom: 100px; - - img { - &:nth-child(2) { - max-width: 300px; - } - } - } - } - .it-agency-about-content { - padding-left: 0; - } - - .startup-works-area { - .section-title { - max-width: 650px; - text-align: center; - padding-top: 0; - margin: { - left: auto; - right: auto; - bottom: 60px; - }; - h2 { - font-size: 40px; - } - } - } - .startup-works-content { - padding-top: 0; - padding-right: 0; - } - .startup-works-image { - margin-left: 0; - padding: 0; - } - .startup-works-slides { - .row { - align-items: center; - } - } - - .single-services-item { - .content { - padding: { - left: 0; - right: 0; - }; - } - } - .services-tabs { - .nav { - margin-bottom: 50px; - - .nav-item { - margin: { - left: 16px; - right: 16px; - }; - .nav-link { - font-size: 17px; - } - } - } - } - .single-main-services { - .content { - padding-right: 0; - - h3 { - font-size: 30px; - } - p { - max-width: 100%; - } - } - } - .col-lg-3 { - &:nth-child(2), &:nth-child(4) { - .services-box { - margin-top: 0; - } - } - &:nth-child(5), &:nth-child(7) { - .services-box { - margin-top: 0; - } - } - } - .services-item { - h3 { - font-size: 20px; - } - .hover-content { - padding: 20px; - } - } - - .facility-content { - padding-right: 0; - } - - .single-funfacts-box { - padding: { - top: 30px; - bottom: 30px; - left: 75px; - right: 20px; - }; - .icon { - left: 20px; - font-size: 40px; - } - h3 { - font-size: 35px; - } - .sub-title { - font-size: 14.5px; - } - &.without-bg-color { - margin-right: 0; - padding-left: 60px; - } - } - - .app-screenshot-area { - &::before { - height: 100px; - } - } - .screenshot-slides { - &.owl-theme { - .owl-nav { - [class*=owl-] { - left: -25px; - width: 35px; - line-height: 35px; - height: 35px; - font-size: 15px; - - &.owl-next { - left: auto; - right: -25px; - } - } - } - } - } - .screenshot-wrap { - .screenshot-frame { - width: 175px; - height: 355px; - } - } - - .categories-box { - h3 { - padding: { - left: 20px; - right: 20px; - }; - } - } - .categories-slides { - &.owl-theme { - .owl-nav { - [class*=owl-] { - left: -40px; - - &.owl-next { - left: auto; - right: -40px; - } - } - } - } - } - - .startup-testimonials-area { - .container-fluid { - max-width: 960px; - } - } - .startup-testimonials-image { - background-color: transparent; - padding: { - top: 0; - bottom: 23px; - left: 0; - }; - .main-image { - animation: unset !important; - margin-bottom: 15px; - } - } - .startup-testimonials-content { - padding: { - left: 0; - right: 0; - bottom: 30px; - top: 30px; - }; - p { - font-size: 15px; - } - .info { - margin-top: 20px; - padding-top: 20px; - - h3 { - font-size: 17px; - } - } - } - .startup-testimonials-slides { - &.owl-theme { - .owl-nav { - bottom: 0; - right: 80%; - transform: translateX(80%); - } - } - } - .marketing-testimonials-image { - margin: { - right: 30px; - left: 0; - }; - } - .marketing-testimonials-content { - padding-bottom: 50px; - - p { - font-size: 16px; - } - .info { - margin-top: 20px; - - h3 { - font-size: 17px; - } - } - } - .marketing-testimonials-slides { - &.owl-theme { - .owl-nav { - bottom: 40px; - right: 20%; - transform: translateX(20%); - } - } - } - .business-testimonials-image { - margin-right: 0; - } - .testimonials-slides { - &.owl-theme { - padding: { - left: 100px; - right: 100px; - }; - } - } - .business-testimonials-content { - p { - font-size: 18px; - } - } - .saas-testimonials-slides { - &.owl-theme { - margin-top: -65px; - } - } - .testimonials-box { - padding: 20px; - } - .shape1, .shape2, .shape3, .shape4, .shape5, .shape6, .shape7, .shape8, .shape9, .shape16 { - display: none !important; - } - - .page-title-area { - padding: { - top: 100px; - bottom: 110px; - }; - &.style-three { - padding: { - top: 250px; - bottom: 110px; - }; - } - &.style-two { - padding: { - bottom: 100px; - top: 220px; - }; - } - &.style-four { - padding: { - top: 120px; - bottom: 120px; - }; - } - } - - .who-we-are-content { - padding: 25px; - - h2 { - font-size: 20px; - } - .default-btn { - margin-top: 5px; - } - } - - .app-download-area { - .row { - &.align-items-center { - align-items: unset !important; - } - } - } - - .call-to-action-inner { - padding: { - left: 30px; - right: 30px; - }; - } - - .services-details-content { - h2 { - font-size: 38px; - } - } - .services-details-video { - margin-left: 0; - - iframe { - height: 251px; - } - } - - .single-pricing-box { - padding: 30px; - - .pricing-header { - h3 { - font-size: 40px; - } - } - } - - .featured-video-item-list { - .single-featured-video-item { - .content { - padding: { - top: 5px; - bottom: 5px; - left: 15px; - }; - h3 { - font-size: 17px; - } - } - } - } - - .single-clients-box { - a { - padding: 20px; - } - } - - .coming-soon-content { - padding: { - left: 15px; - right: 15px; - }; - #timer { - div { - width: 100px; - height: 100px; - font-size: 30px; - } - } - form { - max-width: 100%; - } - } - - .trending-style-content { - padding-left: 0; - } - .trending-style-image { - padding-right: 80px; - margin-right: 0; - - img { - &:nth-child(2) { - width: 250px; - } - } - } - - .widget-area { - .widget_about_author { - .about-author { - padding: 20px; - } - } - .widget_noke_posts_thumb { - .item { - padding-left: 95px; - - .thumb { - width: 80px; - - .fullimage { - width: 80px; - } - } - .info { - .title { - font-size: 14px; - } - } - } - } - } - - .blog-section-title { - h2 { - font-size: 35px; - } - } - .single-blog-post { - .content { - .meta { - li { - i { - top: 2px; - } - } - } - } - } - .single-post-item { - .post-content { - padding: 20px; - - .meta { - margin-bottom: 3px; - - li { - margin: { - right: 10px; - bottom: 10px; - }; - } - } - } - } - - .portfolio-details-info { - padding: 20px; - } - - .products-details-desc { - padding-left: 0; - } - - .single-contact-info-box { - padding: 25px; - } - - .footer-area { - padding-top: 90px; - } - .footer-top { - padding-bottom: 60px; - margin-bottom: 60px; - } - .single-footer-widget { - &.pl-4 { - padding-left: 0; - } - &.pl-2 { - padding-left: 0; - } - &.style-two { - h3 { - padding-left: 40px; - - &::before { - width: 25px; - } - } - } - } - .copyright-area { - margin-top: 60px; - } - - .productsQuickView { - .modal-dialog { - max-width: 830px; - } - .modal-content { - padding: 25px; - } - } - -} - -/* Min width 1200px to Max width 1355px */ -@media only #{$media} and ($feature_min : $value_seven) and ($feature_max : $value_eight) { - - .top-header-area { - .container-fluid { - max-width: 1140px; - } - &.top-header-style-two { - .container-fluid { - max-width: 1140px; - } - } - &.top-header-style-three { - .container-fluid { - max-width: 1140px; - } - } - } - - .navbar-area { - &.navbar-style-three { - .noke-nav { - .container-fluid { - max-width: 1140px; - } - } - } - &.navbar-style-two { - .noke-nav { - .container-fluid { - max-width: 1140px; - } - } - } - &.navbar-style-four { - .noke-nav { - .container-fluid { - max-width: 1140px; - } - } - } - &.navbar-style-five { - .noke-nav { - .container-fluid { - max-width: 1140px; - } - } - } - } - .noke-nav { - .container-fluid { - max-width: 1140px; - } - } - - .startup-banner-area { - .container-fluid { - max-width: 100%; - } - } - .startup-banner-inner { - padding: 100px 40px; - } - .startup-banner-content { - h1 { - font-size: 55px; - } - } - .marketing-banner-content { - h1 { - font-size: 55px; - } - p { - max-width: 510px; - } - } - .business-banner-area { - .container { - max-width: 1140px; - } - } - .business-banner-content { - padding-right: 0; - max-width: 100%; - - h1 { - font-size: 55px; - } - } - .app-banner-area { - .container { - max-width: 1140px; - } - } - .app-banner-content { - h1 { - font-size: 49px; - } - } - .personal-portfolio-banner-area { - .container { - max-width: 1140px; - } - } - .personal-portfolio-banner-content { - h1 { - font-size: 60px; - } - h4 { - font-size: 30px; - } - } - .consulting-banner-area { - .container { - max-width: 1140px; - } - } - .consulting-banner-content { - max-width: 715px; - - h1 { - font-size: 45px; - } - } - .it-agency-banner-content { - h1 { - font-size: 55px; - } - } - .blog-banner-item-list { - .single-blog-banner-item { - .content { - padding: { - bottom: 3.3px; - top: 3.3px; - }; - h3 { - font-size: 16px; - } - } - } - } - - .startup-about-area { - .container-fluid { - max-width: 100%; - } - } - .it-agency-about-image { - .main-image { - img:nth-child(2) { - max-width: 300px; - } - } - } - - .startup-testimonials-area { - .container-fluid { - max-width: 100%; - } - } - .marketing-testimonials-slides { - &.owl-theme { - .owl-nav { - right: 20%; - bottom: 55px; - transform: translateX(20%); - } - } - } - - .services-tabs { - .nav { - .nav-item { - margin: { - left: 25px; - right: 25px; - }; - } - } - } - .single-main-services { - .content { - h3 { - font-size: 35px; - } - } - } - - .who-we-are-content { - h2 { - font-size: 20px; - } - } - - .app-screenshot-area { - &::before { - height: 150px; - } - } - .screenshot-wrap { - .screenshot-frame { - width: 210px; - height: 430px; - } - } - .screenshot-slides { - &.owl-theme { - .owl-nav { - [class*=owl-] { - left: -34px; - - &.owl-next { - left: auto; - right: -34px; - } - } - } - } - } - - .services-box { - padding: 30px 20px; - } - - .startup-works-area { - .section-title { - padding-top: 20px; - margin-bottom: -180px; - } - } - .startup-works-content { - padding-top: 210px; - } - - .featured-video-item-list { - .single-featured-video-item { - .content { - padding: { - top: 6px; - bottom: 6px; - }; - h3 { - font-size: 17px; - } - } - } - } - - .call-to-action-content { - h2 { - font-size: 35px; - } - } - - .single-post-item { - .post-content { - .meta { - margin-bottom: 3px; - - li { - margin: { - right: 10px; - bottom: 10px; - }; - } - } - } - } - - .facility-content { - padding-right: 0; - } - - .single-funfacts-box { - &.without-bg-color { - margin-right: 15px; - } - } - -} - -/* Min width 1535px */ -@media only #{$media} and ($feature_min : $value_nine) { - - .top-header-area { - &.top-header-style-two { - .container-fluid { - max-width: 1470px; - } - } - } - - .navbar-area { - &.navbar-style-three { - .noke-nav { - .container-fluid { - max-width: 1450px; - } - } - } - &.navbar-style-four { - .noke-nav { - .container-fluid { - max-width: 1470px; - } - } - } - } - .noke-nav { - .container-fluid { - max-width: 1470px; - } - } - - .startup-banner-area { - .container-fluid { - max-width: 1470px; - } - } - .startup-banner-inner { - padding: { - top: 140px; - bottom: 140px; - left: 120px; - right: 120px; - }; - } - .shape3 { - right: 34.3%; - bottom: 7%; - } - - .startup-about-area { - .container-fluid { - max-width: 1470px; - } - } - .startup-about-image { - padding: { - left: 100px; - bottom: 100px; - }; - } - - .startup-works-image { - padding: { - top: 100px; - right: 100px; - bottom: 100px; - }; - } - .shape6 { - top: 67px; - } - - .startup-testimonials-area { - .container-fluid { - max-width: 1470px; - } - } - .startup-testimonials-image { - padding: { - top: 100px; - left: 100px; - bottom: 100px; - }; - } - .shape7 { - left: 40px; - top: 30px; - } - .shape8 { - bottom: 70px; - left: 70px; - } - .shape9 { - right: 0; - top: 85px; - } - .shape16 { - right: 150px; - } - -} \ No newline at end of file diff --git a/static/assets/css/showMoreItems-theme.min.css b/static/assets/css/showMoreItems-theme.min.css deleted file mode 100644 index 195b28de..00000000 --- a/static/assets/css/showMoreItems-theme.min.css +++ /dev/null @@ -1 +0,0 @@ -.showMoreItemsList{height: auto;overflow: hidden;list-style: none;}.showMoreItemsList .item{float: left;width: 33.33%;box-sizing: border-box;padding: 0 8px;}.showMoreItemsList .item .box{max-width: 400px;margin: 0 auto 30px;}.showMoreItemsList .item .name{text-align: center;}.showMoreItemsList .item .pic img{max-width: 100%}.showMoreItemsList + .button-box{text-align: center;clear: both;margin-bottom: 50px;}.showMoreItemsList + .button-box button{padding: 8px 20px;border:none;box-shadow: 0 0 0;outline: 0;cursor: pointer;background: #db3434; color: #fff; text-align: center; text-decoration: none; width: 158px; border-radius: 30px;}@media screen and (max-width:1280px){.showMoreItemsList .item{width: 50%;}}@media screen and (max-width:600px){.showMoreItemsList .item{width: 100%;}} \ No newline at end of file diff --git a/static/assets/css/style.css b/static/assets/css/style.css deleted file mode 100644 index e1ca08e9..00000000 --- a/static/assets/css/style.css +++ /dev/null @@ -1,15936 +0,0 @@ -/* -@File: Noke Template Styles - -* This file contains the styling for the actual template, this -is the file you need to edit to change the look of the -template. - -This files table contents are outlined below>>>>> - -******************************************* -******************************************* - -** - Default CSS -** - Top Header Area CSS -** - Navbar Area CSS -** - Search Overlay CSS -** - Startup Banner Area CSS -** - Marketing Banner Area CSS -** - Business Banner Area CSS -** - App Banner Area CSS -** - Saas Banner Area CSS -** - Personal Portfolio Banner Area CSS -** - Consulting Banner Area CSS -** - IT Agency Banner Area CSS -** - Shop Banner Area CSS -** - Blog Banner Area CSS -** - Furniture Banner Area CSS -** - Minimal Portfolio Banner Area CSS -** - Features Area CSS -** - About Area CSS -** - Services Area CSS -** - Services Details Area CSS -** - Works Area CSS -** - What We Do Area CSS -** - Categories Area CSS -** - Who We Are Area CSS -** - Video Area CSS -** - Process Area CSS -** - Funfacts Area CSS -** - Products Area CSS -** - Products Details Area CSS -** - Cart Area CSS -** - Checkout Area CSS -** - Testimonials Area CSS -** - Team Area CSS -** - How It Works Area CSS -** - Skills Area CSS -** - Expertise Area CSS -** - CTA Area CSS -** - Timeline/Short Brief Area CSS -** - App Download Area CSS -** - Trending Style Area CSS -** - Pricing Area CSS -** - App Screenshot Area CSS -** - Facility Area CSS -** - Latest Posts Area CSS -** - Partner Area CSS -** - Clients Area CSS -** - Featured Video Area CSS -** - Blog Area CSS -** - Blog Details Area CSS -** - Widget Area CSS -** - Profile Authentication Area CSS -** - Instagram Area CSS -** - Page Title Area CSS -** - Pagination Area CSS -** - Gallery Area CSS -** - Portfolio Details Area CSS -** - Portfolio Details Navigation Area CSS -** - Privacy Policy Area CSS -** - Terms & Conditions Area CSS -** - FAQ Area CSS -** - 404 Error Area CSS -** - Coming Soon Area CSS -** - Contact Area CSS -** - Footer Area CSS -** - Go Top CSS -** - Modal CSS -*/ -/*================================================ -Default CSS -=================================================*/ -@import url("https://fonts.googleapis.com/css2?family=Manrope:wght@200;300;400;500;600;700;800&display=swap"); -@import url("https://fonts.googleapis.com/css2?family=Poppins:ital,wght@0,100;0,200;0,300;0,400;0,500;0,600;0,700;0,800;0,900;1,100;1,200;1,300;1,400;1,500;1,600;1,700;1,800;1,900&display=swap"); -:root { - --fontFamily: 'Manrope', sans-serif; - --headingFontFamily: 'Poppins', sans-serif; - --startupMainColor: #fd5444; - --marketingMainColor: #2f4eac; - --businessMainColor: #5d3dec; - --businessGradientColor: linear-gradient(to right, #4651e6, #5749ed, #693ff3, #7c30f7, #8f11fa); - --appMainColor: #0042bb; - --appGradientColor: linear-gradient(to right bottom, #0042bb, #093ea8, #113a96, #163584, #1a3172); - --saasMainColor: #296dfe; - --saasGradientColor: linear-gradient(to right top, #257ef7, #0094fb, #00a7f5, #00b6ea, #17c3dd); - --personalPortfolioMainColor: #111111; - --itAgencyMainColor: #ff4a17; - --itAgencyGradientColor: linear-gradient(to right, #ff4a17, #fd5d15, #fb6d16, #f87b1a, #f68821); - --consultingMainColor: #4eaf4e; - --shopMainColor: #111111; - --minimalPortfolioColor: #4ab19d; - --optionalColor: #6f6f6f; - --whiteColor: #ffffff; - --blackColor: #2d2d37; - --fontSize: 15.5px; - --transition: .5s; -} - -body { - margin: 0; - padding: 0; - color: var(--blackColor); - font-size: var(--fontSize); - font-family: var(--fontFamily); -} - -.h1, .h2, .h3, .h4, .h5, .h6, h1, h2, h3, h4, h5, h6 { - color: var(--blackColor); - font-weight: 600; - font-family: var(--headingFontFamily); -} - -a { - -webkit-transition: var(--transition); - transition: var(--transition); - color: var(--blackColor); - text-decoration: none; - outline: 0 !important; -} - -a:hover { - color: var(--optionalColor); - text-decoration: none; -} - -:focus { - outline: 0 !important; -} - -.d-table { - width: 100%; - height: 100%; -} - -.d-table-cell { - vertical-align: middle; -} - -img { - max-width: 100%; - height: auto; -} - -p { - color: var(--optionalColor); - margin-bottom: 15px; - line-height: 1.8; - font-weight: 500; - font-size: var(--fontSize); -} - -p:last-child { - margin-bottom: 0; -} - -.ptb-100 { - padding-top: 100px; - padding-bottom: 100px; -} - -.pt-100 { - padding-top: 100px; -} - -.pb-100 { - padding-bottom: 100px; -} - -.ptb-70 { - padding-top: 70px; - padding-bottom: 70px; -} - -.pt-70 { - padding-top: 70px; -} - -.pb-70 { - padding-bottom: 70px; -} - -.bg-f9f4f0 { - background-color: #f9f4f0; -} - -.bg-faf7f2 { - background-color: #faf7f2; -} - -.bg-1b2232 { - background-color: #1b2232; -} - -.bg-f3f4f7 { - background-color: #f3f4f7; -} - -.bg-f9f9f9 { - background-color: #f9f9f9; -} - -.bg-dark { - background-color: #06080e !important; -} - -.bg-dark .section-title { - color: var(--whiteColor); -} - -.bg-dark .section-title h2 { - color: var(--whiteColor); -} - -.bg-dark .section-title p { - color: var(--whiteColor); -} - -.bg-f6f7f9 { - background-color: #f6f7f9; -} - -/*section-title*/ -.section-title { - text-align: center; - max-width: 655px; - margin-bottom: 60px; - margin-left: auto; - margin-right: auto; -} - -.section-title h2 { - margin-bottom: 0; - font-size: 40px; -} - -.section-title p { - max-width: 540px; - margin-top: 15px; - margin-left: auto; - margin-right: auto; -} - -.section-title .sub-title { - display: block; - margin-bottom: 12px; - color: var(--startupMainColor); - font-family: var(--headingFontFamily); - font-weight: 600; - font-size: 14px; -} - -.section-title .sub-title.marketing-color { - color: var(--marketingMainColor); -} - -.section-title .sub-title.business-color { - color: var(--businessMainColor); -} - -.section-title .sub-title.app-color { - color: var(--appMainColor); -} - -.section-title .sub-title.saas-color { - color: var(--saasMainColor); -} - -.section-title .sub-title.consulting-color { - color: var(--consultingMainColor); -} - -.section-title .sub-title.it-agency-color { - color: var(--itAgencyMainColor); -} - -.section-title .sub-title.minimal-portfolio-color { - color: var(--minimalPortfolioColor); -} - -.section-title.style-two { - text-align: start; - padding-left: 90px; - margin-left: 0; - margin-right: 0; - margin-bottom: 50px; -} - -.section-title.style-two h2 { - position: relative; - font-size: 30px; -} - -.section-title.style-two h2::before { - left: -90px; - top: 50%; - width: 70px; - height: 1px; - content: ''; - position: absolute; - -webkit-transform: translateY(-50%); - transform: translateY(-50%); - background-color: var(--personalPortfolioMainColor); -} - -.section-title.style-two p { - margin-left: 0; - margin-right: 0; -} - -.section-title.style-three { - max-width: 100%; -} - -.section-title.style-three h2 { - position: relative; - z-index: 1; -} - -.section-title.style-three h2 span { - display: inline-block; - background-color: var(--whiteColor); - padding-left: 30px; - padding-right: 30px; -} - -.section-title.style-three h2::before { - content: ''; - position: absolute; - left: 0; - right: 0; - top: 50%; - -webkit-transform: translateY(-50%); - transform: translateY(-50%); - background-color: #cfcfcf; - height: 1px; - z-index: -1; -} - -.section-title.style-four { - border-bottom: 1px solid #eeeeee; - padding-bottom: 12px; - position: relative; - text-align: start; - max-width: 100%; - margin-left: 0; - margin-right: 0; - margin-bottom: 45px; -} - -.section-title.style-four h2 { - font-size: 30px; -} - -.section-title.style-four::before { - content: ''; - position: absolute; - left: 0; - bottom: -1px; - width: 70px; - height: 1px; - background-color: var(--blackColor); -} - -/*default-btn*/ -.default-btn { - -webkit-box-shadow: 0 0.25rem 0.5rem rgba(0, 0, 0, 0.05), 0 1.5rem 2.2rem rgba(0, 0, 0, 0.1); - box-shadow: 0 0.25rem 0.5rem rgba(0, 0, 0, 0.05), 0 1.5rem 2.2rem rgba(0, 0, 0, 0.1); - -webkit-transition: var(--transition); - transition: var(--transition); - display: inline-block; - background-color: var(--startupMainColor); - color: var(--whiteColor); - position: relative; - border-radius: 5px; - border: none; - padding: 13px 50px 13px 35px; - font-size: var(--fontSize); - font-weight: 700; -} - -.default-btn i { - position: absolute; - right: 35px; - top: 50%; - -webkit-transform: translateY(-50%); - transform: translateY(-50%); - margin-top: 1px; - font-size: 14px; - -webkit-transition: var(--transition); - transition: var(--transition); -} - -.default-btn:hover { - color: var(--whiteColor); - background-color: var(--startupMainColor); - -webkit-box-shadow: 0 0.5rem 1.2rem rgba(0, 0, 0, 0.1), 0 2rem 3rem rgba(0, 0, 0, 0.15); - box-shadow: 0 0.5rem 1.2rem rgba(0, 0, 0, 0.1), 0 2rem 3rem rgba(0, 0, 0, 0.15); -} - -.default-btn:hover i { - right: 30px; -} - -.default-btn.marketing-color { - background-color: var(--marketingMainColor); - color: var(--whiteColor); -} - -.default-btn.marketing-color:hover { - color: var(--whiteColor); - background-color: var(--marketingMainColor); -} - -.default-btn.business-color { - background: var(--businessGradientColor); -} - -.default-btn.app-color { - background: var(--appGradientColor); -} - -.default-btn.saas-color { - background: var(--saasGradientColor); -} - -.default-btn.personal-portfolio-color { - background: var(--personalPortfolioMainColor); -} - -.default-btn.consulting-color { - background: var(--consultingMainColor); -} - -.default-btn.it-agency-color { - background: var(--itAgencyGradientColor); -} - -.default-btn.shop-color { - background: var(--shopMainColor); -} - -.default-btn.minimal-portfolio-color { - background: var(--minimalPortfolioColor); -} - -/*form-control*/ -.form-control { - border-radius: 0; - background-color: #f5f5f5 !important; - -webkit-box-shadow: unset !important; - box-shadow: unset !important; - -webkit-transition: var(--transition); - transition: var(--transition); - border: none !important; - height: 50px; - padding-left: 15px; - color: var(--blackColor); - font-size: var(--fontSize); - font-weight: 500; -} - -.form-control::-webkit-input-placeholder { - color: #999999; - -webkit-transition: var(--transition); - transition: var(--transition); -} - -.form-control:-ms-input-placeholder { - color: #999999; - -webkit-transition: var(--transition); - transition: var(--transition); -} - -.form-control::-ms-input-placeholder { - color: #999999; - -webkit-transition: var(--transition); - transition: var(--transition); -} - -.form-control::placeholder { - color: #999999; - -webkit-transition: var(--transition); - transition: var(--transition); -} - -.form-control:focus::-webkit-input-placeholder { - color: transparent; -} - -.form-control:focus:-ms-input-placeholder { - color: transparent; -} - -.form-control:focus::-ms-input-placeholder { - color: transparent; -} - -.form-control:focus::placeholder { - color: transparent; -} - -textarea.form-control { - padding-top: 15px; - height: auto; -} - -/*================================================ -Top Header Area CSS -=================================================*/ -.header-area.p-absolute { - position: absolute; - left: 0; - right: 0; - top: 0; - height: auto; - z-index: 3; -} - -.header-area.p-absolute .navbar-area { - background-color: transparent; -} - -.top-header-area { - background-color: var(--startupMainColor); - padding-top: 12px; - padding-bottom: 12px; -} - -.top-header-area .container-fluid { - max-width: 1400px; -} - -.top-header-area.business-color { - background: var(--businessGradientColor); -} - -.top-header-area.saas-color { - background: var(--saasGradientColor); -} - -.top-header-area.top-header-style-two .container-fluid { - max-width: 1470px; -} - -.top-header-area.top-header-style-three .container-fluid { - max-width: 1450px; -} - -.top-header-area.it-agency-color { - background: var(--itAgencyGradientColor); -} - -.top-header-area.bg-f3f4f7 { - background: #f3f4f7; -} - -.top-header-area.bg-f3f4f7 .top-header-social-links li a { - color: var(--blackColor); -} - -.top-header-area.bg-f3f4f7 .top-header-social-links li a:hover { - color: var(--startupMainColor); -} - -.top-header-area.bg-f3f4f7 .top-header-contact-info { - color: var(--blackColor); -} - -.top-header-area.bg-f3f4f7 .top-header-contact-info .number { - color: var(--blackColor); -} - -.top-header-area.bg-f3f4f7 .top-header-contact-info .email { - color: var(--blackColor); -} - -.top-header-area.bg-f3f4f7 .top-header-contact-info .lang-switcher label { - color: var(--startupMainColor); -} - -.top-header-area.bg-f3f4f7 .top-header-contact-info .lang-switcher select { - color: var(--blackColor); -} - -.top-header-area.bg-f3f4f7 .top-header-contact-info .lang-switcher select option { - color: var(--blackColor); -} - -.top-header-area.bg-f3f4f7.consulting-color .top-header-social-links li a:hover { - color: var(--consultingMainColor); -} - -.top-header-area.bg-f3f4f7.consulting-color .top-header-contact-info .lang-switcher label { - color: var(--consultingMainColor); -} - -.top-header-area.bg-f3f4f7.consulting-color .top-header-info .number i { - color: var(--consultingMainColor); -} - -.top-header-area.bg-f3f4f7.consulting-color .top-header-info .email i { - color: var(--consultingMainColor); -} - -.top-header-area.shop-color { - background: var(--shopMainColor); -} - -.top-header-info .number { - display: inline-block; - position: relative; - padding-left: 25px; -} - -.top-header-info .number i { - position: absolute; - left: 0; - top: 4px; - color: var(--startupMainColor); -} - -.top-header-info .email { - display: inline-block; - position: relative; - padding-left: 25px; - margin-right: 20px; -} - -.top-header-info .email i { - position: absolute; - left: 0; - top: 4px; - color: var(--startupMainColor); -} - -.top-header-social-links { - padding-left: 0; - margin-bottom: 0; - list-style-type: none; -} - -.top-header-social-links li { - display: inline-block; - margin-right: 15px; -} - -.top-header-social-links li a { - display: block; - color: var(--whiteColor); -} - -.top-header-social-links li a:hover { - opacity: 0.8; -} - -.top-header-social-links li:last-child { - margin-right: 0; -} - -.top-header-contact-info { - color: var(--whiteColor); -} - -.top-header-contact-info .number { - display: inline-block; - color: var(--whiteColor); - position: relative; - padding-left: 25px; -} - -.top-header-contact-info .number i { - position: absolute; - left: 0; - top: 4px; -} - -.top-header-contact-info .email { - display: inline-block; - color: var(--whiteColor); - position: relative; - padding-left: 25px; - margin-right: 20px; -} - -.top-header-contact-info .email i { - position: absolute; - left: 0; - top: 4px; -} - -.top-header-contact-info .lang-switcher { - display: inline-block; - position: relative; - margin-left: 20px; - padding-left: 20px; -} - -.top-header-contact-info .lang-switcher label { - display: block; - margin-bottom: 0; - position: absolute; - left: 0; - top: 1px; -} - -.top-header-contact-info .lang-switcher select { - cursor: pointer; - background-color: transparent; - color: var(--whiteColor); - border: none; -} - -.top-header-contact-info .lang-switcher select option { - color: var(--blackColor); -} - -/*================================================ -Navbar Area CSS -=================================================*/ -.navbar-area { - padding: 5px 0; - position: relative; - background-color: var(--whiteColor); -} - -.navbar-area.p-absolute { - position: absolute; - left: 0; - right: 0; - top: 0; - height: auto; - z-index: 9; -} - -.navbar-area.is-sticky { - top: 0; - left: 0; - width: 100%; - z-index: 999; - position: fixed; - background-color: var(--whiteColor) !important; - -webkit-box-shadow: 0 2px 28px 0 rgba(0, 0, 0, 0.09); - box-shadow: 0 2px 28px 0 rgba(0, 0, 0, 0.09); - -webkit-animation: 500ms ease-in-out 0s normal none 1 running fadeInDown; - animation: 500ms ease-in-out 0s normal none 1 running fadeInDown; -} - -.navbar-area.is-sticky.bg-dark { - background-color: #06080e !important; - -webkit-box-shadow: 0 2px 28px 0 rgba(255, 255, 255, 0.05); - box-shadow: 0 2px 28px 0 rgba(255, 255, 255, 0.05); -} - -.navbar-area.bg-f9faff { - background-color: #f9faff; -} - -.navbar-area.navbar-style-two .noke-nav .container-fluid { - max-width: 1400px; -} - -.navbar-area.navbar-style-three .noke-nav .container-fluid { - max-width: 1450px; -} - -.navbar-area.navbar-style-four .noke-nav .container-fluid { - max-width: 1470px; -} - -.navbar-area.navbar-style-five { - padding-top: 0; - padding-bottom: 0; -} - -.navbar-area.navbar-style-five .noke-nav .container-fluid { - max-width: 1450px; -} - -.navbar-area.navbar-style-five .noke-nav .navbar { - background-color: var(--whiteColor); - padding-left: 25px; - padding-right: 25px; -} - -.navbar-area.bg-dark { - color: var(--whiteColor); -} - -.navbar-area.bg-dark .noke-nav .navbar .navbar-nav .nav-item a { - color: var(--whiteColor); -} - -.navbar-area.bg-dark .noke-nav .navbar .navbar-nav .nav-item a:hover, .navbar-area.bg-dark .noke-nav .navbar .navbar-nav .nav-item a:focus, .navbar-area.bg-dark .noke-nav .navbar .navbar-nav .nav-item a.active { - color: var(--startupMainColor); -} - -.navbar-area.bg-dark .noke-nav .navbar .navbar-nav .nav-item:hover a, .navbar-area.bg-dark .noke-nav .navbar .navbar-nav .nav-item.active a { - color: var(--startupMainColor); -} - -.navbar-area.bg-dark .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li a { - color: var(--blackColor); -} - -.navbar-area.bg-dark .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li a:hover, .navbar-area.bg-dark .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li a:focus, .navbar-area.bg-dark .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li a.active { - color: var(--startupMainColor); -} - -.navbar-area.bg-dark .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li .dropdown-menu li a { - color: var(--blackColor); -} - -.navbar-area.bg-dark .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li .dropdown-menu li a:hover, .navbar-area.bg-dark .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li .dropdown-menu li a:focus, .navbar-area.bg-dark .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li .dropdown-menu li a.active { - color: var(--startupMainColor); -} - -.navbar-area.bg-dark .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li .dropdown-menu li .dropdown-menu li a { - color: var(--blackColor); -} - -.navbar-area.bg-dark .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li .dropdown-menu li .dropdown-menu li a:hover, .navbar-area.bg-dark .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li .dropdown-menu li .dropdown-menu li a:focus, .navbar-area.bg-dark .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li .dropdown-menu li .dropdown-menu li a.active { - color: var(--startupMainColor); -} - -.navbar-area.bg-dark .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li .dropdown-menu li .dropdown-menu li .dropdown-menu li a { - color: var(--blackColor); -} - -.navbar-area.bg-dark .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li .dropdown-menu li .dropdown-menu li .dropdown-menu li a:hover, .navbar-area.bg-dark .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li .dropdown-menu li .dropdown-menu li .dropdown-menu li a:focus, .navbar-area.bg-dark .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li .dropdown-menu li .dropdown-menu li .dropdown-menu li a.active { - color: var(--startupMainColor); -} - -.navbar-area.bg-dark .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li .dropdown-menu li .dropdown-menu li .dropdown-menu li.active a { - color: var(--startupMainColor); -} - -.navbar-area.bg-dark .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li .dropdown-menu li .dropdown-menu li.active a { - color: var(--startupMainColor); -} - -.navbar-area.bg-dark .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li .dropdown-menu li.active a { - color: var(--startupMainColor); -} - -.navbar-area.bg-dark .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li.active a { - color: var(--startupMainColor); -} - -.navbar-area.bg-dark .noke-nav .navbar .navbar-nav .nav-item.megamenu .dropdown-menu .submenu-title::before { - background-color: var(--startupMainColor); -} - -.navbar-area.bg-dark .noke-nav .navbar .navbar-nav .nav-item.megamenu .dropdown-menu .megamenu-submenu li a:hover, .navbar-area.bg-dark .noke-nav .navbar .navbar-nav .nav-item.megamenu .dropdown-menu .megamenu-submenu li a.active { - color: var(--startupMainColor); -} - -.navbar-area.bg-dark .noke-nav .navbar .others-option .option-item .search-icon { - color: var(--startupMainColor); -} - -.navbar-area.bg-dark .noke-nav .navbar .others-option .option-item .search-icon:hover { - color: var(--startupMainColor); -} - -.navbar-area.bg-dark .noke-nav .navbar .others-option .option-item .social-links li a { - color: var(--whiteColor); -} - -.navbar-area.bg-dark .noke-nav .navbar .others-option .option-item .social-links li a:hover { - color: var(--startupMainColor); -} - -.navbar-area.bg-dark .noke-nav .navbar .others-option .search-box .input-search { - color: var(--whiteColor); -} - -.navbar-area.bg-dark .noke-nav .navbar .others-option .search-box .input-search::-webkit-input-placeholder { - color: var(--whiteColor); -} - -.navbar-area.bg-dark .noke-nav .navbar .others-option .search-box .input-search:-ms-input-placeholder { - color: var(--whiteColor); -} - -.navbar-area.bg-dark .noke-nav .navbar .others-option .search-box .input-search::-ms-input-placeholder { - color: var(--whiteColor); -} - -.navbar-area.bg-dark .noke-nav .navbar .others-option .search-box .input-search::placeholder { - color: var(--whiteColor); -} - -.navbar-area.bg-dark .noke-nav .navbar .others-option .search-box .input-search:focus::-webkit-input-placeholder { - color: transparent; -} - -.navbar-area.bg-dark .noke-nav .navbar .others-option .search-box .input-search:focus:-ms-input-placeholder { - color: transparent; -} - -.navbar-area.bg-dark .noke-nav .navbar .others-option .search-box .input-search:focus::-ms-input-placeholder { - color: transparent; -} - -.navbar-area.bg-dark .noke-nav .navbar .others-option .search-box .input-search:focus::placeholder { - color: transparent; -} - -.navbar-area.bg-dark .noke-nav .navbar .others-option .search-box button { - color: var(--whiteColor); -} - -.navbar-area.bg-dark .noke-nav .navbar .others-option .search-box button:hover { - color: var(--startupMainColor); -} - -.navbar-area.bg-dark .noke-nav .navbar .others-option .lang-switcher { - color: var(--whiteColor); -} - -.navbar-area.bg-dark .noke-nav .navbar .others-option .lang-switcher select { - color: var(--whiteColor); -} - -.navbar-area.bg-dark .noke-nav .navbar .others-option .lang-switcher select option { - color: var(--blackColor); -} - -.navbar-area.bg-dark .others-option-for-responsive .dot-menu .inner .circle { - background-color: var(--whiteColor); -} - -.navbar-area.bg-dark .others-option-for-responsive .dot-menu:hover .inner .circle { - background-color: var(--startupMainColor); -} - -.navbar-area.color-white.is-sticky { - background-color: #06080e !important; - -webkit-box-shadow: 0 2px 28px 0 rgba(255, 255, 255, 0.05); - box-shadow: 0 2px 28px 0 rgba(255, 255, 255, 0.05); -} - -.noke-responsive-nav { - display: none; -} - -.noke-nav .container-fluid { - max-width: 1400px; -} - -.noke-nav .navbar { - padding: 0; - position: inherit; -} - -.noke-nav .navbar .navbar-brand { - font-size: inherit; - line-height: 1; - padding: 0; -} - -.noke-nav .navbar ul { - padding-left: 0; - list-style-type: none; - margin-bottom: 0; -} - -.noke-nav .navbar .navbar-nav { - margin-left: auto; - position: relative; -} - -.noke-nav .navbar .navbar-nav .nav-item { - position: relative; - margin-left: 15px; - margin-right: 15px; -} - -.noke-nav .navbar .navbar-nav .nav-item a { - position: relative; - color: var(--blackColor); - -webkit-transition: var(--transition); - transition: var(--transition); - font-weight: 700; - font-size: var(--fontSize); - padding-left: 0; - padding-right: 0; - padding-top: 30px; - padding-bottom: 30px; -} - -.noke-nav .navbar .navbar-nav .nav-item a:hover, .noke-nav .navbar .navbar-nav .nav-item a:focus, .noke-nav .navbar .navbar-nav .nav-item a.active { - color: var(--startupMainColor); -} - -.noke-nav .navbar .navbar-nav .nav-item .dropdown-toggle { - padding-right: 14px; -} - -.noke-nav .navbar .navbar-nav .nav-item .dropdown-toggle::after { - display: none; -} - -.noke-nav .navbar .navbar-nav .nav-item .dropdown-toggle::before { - -webkit-font-smoothing: antialiased; - text-rendering: auto; - position: absolute; - content: "\f078"; - line-height: 1; - top: 37px; - right: 0; - font-family: "Font Awesome 5 Free"; - -webkit-font-variant-ligatures: normal; - font-variant-ligatures: normal; - font-variant-caps: normal; - font-style: normal; - font-weight: 900; - font-size: 10px; -} - -.noke-nav .navbar .navbar-nav .nav-item:last-child { - margin-right: 0; -} - -.noke-nav .navbar .navbar-nav .nav-item:first-child { - margin-left: 0; -} - -.noke-nav .navbar .navbar-nav .nav-item:hover a, .noke-nav .navbar .navbar-nav .nav-item.active a { - color: var(--startupMainColor); -} - -.noke-nav .navbar .navbar-nav .nav-item .dropdown-menu { - left: 0; - top: 80px; - opacity: 0; - z-index: 99; - border: none; - width: 250px; - margin-top: 0; - display: block; - padding: 10px 0; - border-radius: 0; - position: absolute; - visibility: hidden; - background: var(--whiteColor); - -webkit-transition: all 0.2s ease-in-out; - transition: all 0.2s ease-in-out; - -webkit-box-shadow: 0px 0px 15px 0px rgba(0, 0, 0, 0.1); - box-shadow: 0px 0px 15px 0px rgba(0, 0, 0, 0.1); -} - -.noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li { - margin: 0; -} - -.noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li a { - display: block; - padding: 9px 20px; - position: relative; - color: var(--blackColor); - font-size: 14.5px; - font-weight: 600; -} - -.noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li a i { - top: 50%; - margin: 0; - right: 15px; - font-size: 11px; - position: absolute; - -webkit-transform: translateY(-50%); - transform: translateY(-50%); -} - -.noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li a:hover, .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li a:focus { - color: var(--startupMainColor); - padding-left: 25px; -} - -.noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li a.active { - color: var(--startupMainColor); -} - -.noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li .dropdown-menu { - top: 0; - opacity: 0; - left: auto; - right: 250px; - margin-top: 0; - visibility: hidden; - -webkit-transform: translateX(0); - transform: translateX(0); -} - -.noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li .dropdown-menu li a { - color: var(--blackColor); - padding-left: 20px; -} - -.noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li .dropdown-menu li a:hover, .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li .dropdown-menu li a:focus { - color: var(--startupMainColor); - padding-left: 25px; -} - -.noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li .dropdown-menu li a.active { - color: var(--startupMainColor); -} - -.noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li .dropdown-menu li .dropdown-menu { - top: 0; - opacity: 0; - right: 250px; - visibility: hidden; -} - -.noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li .dropdown-menu li .dropdown-menu li a { - color: var(--blackColor); - padding-left: 20px; -} - -.noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li .dropdown-menu li .dropdown-menu li a:hover, .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li .dropdown-menu li .dropdown-menu li a:focus { - padding-left: 25px; - color: var(--startupMainColor); -} - -.noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li .dropdown-menu li .dropdown-menu li a.active { - color: var(--startupMainColor); -} - -.noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li .dropdown-menu li .dropdown-menu li .dropdown-menu { - top: 0; - opacity: 0; - right: 250px; - visibility: hidden; -} - -.noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li .dropdown-menu li .dropdown-menu li .dropdown-menu li a { - padding-left: 20px; - color: var(--blackColor); -} - -.noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li .dropdown-menu li .dropdown-menu li .dropdown-menu li a:hover, .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li .dropdown-menu li .dropdown-menu li .dropdown-menu li a:focus { - color: var(--startupMainColor); - padding-left: 25px; -} - -.noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li .dropdown-menu li .dropdown-menu li .dropdown-menu li a.active { - color: var(--startupMainColor); -} - -.noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li .dropdown-menu li .dropdown-menu li .dropdown-menu li.active a { - color: var(--startupMainColor); -} - -.noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li .dropdown-menu li .dropdown-menu li .dropdown-menu li:hover .dropdown-menu { - opacity: 1; - visibility: visible; -} - -.noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li .dropdown-menu li .dropdown-menu li.active a { - color: var(--startupMainColor); -} - -.noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li .dropdown-menu li .dropdown-menu li:hover .dropdown-menu { - opacity: 1; - visibility: visible; -} - -.noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li .dropdown-menu li.active a { - color: var(--startupMainColor); -} - -.noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li .dropdown-menu li:hover .dropdown-menu { - opacity: 1; - visibility: visible; -} - -.noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li.active a { - color: var(--startupMainColor); -} - -.noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li:hover .dropdown-menu { - opacity: 1; - margin-top: 0; - visibility: visible; -} - -.noke-nav .navbar .navbar-nav .nav-item:hover .dropdown-menu { - opacity: 1; - visibility: visible; -} - -.noke-nav .navbar .navbar-nav .nav-item.megamenu { - position: unset; -} - -.noke-nav .navbar .navbar-nav .nav-item.megamenu .dropdown-menu { - left: 0; - top: auto; - width: 100%; - padding: 25px; - margin-top: 0; - position: absolute; - -webkit-transform: unset !important; - transform: unset !important; -} - -.noke-nav .navbar .navbar-nav .nav-item.megamenu .dropdown-menu .submenu-title { - position: relative; - border-bottom: 1px solid #eeeeee; - padding-bottom: 8px; - text-transform: uppercase; - margin-bottom: 25px; - margin-top: 30px; - font-size: var(--fontSize); - font-weight: 600; -} - -.noke-nav .navbar .navbar-nav .nav-item.megamenu .dropdown-menu .submenu-title::before { - width: 50px; - height: 1px; - content: ''; - position: absolute; - left: 0; - bottom: -1px; - background-color: var(--startupMainColor); -} - -.noke-nav .navbar .navbar-nav .nav-item.megamenu .dropdown-menu .submenu-title:first-child { - margin-top: 0; -} - -.noke-nav .navbar .navbar-nav .nav-item.megamenu .dropdown-menu a { - border-bottom: none !important; -} - -.noke-nav .navbar .navbar-nav .nav-item.megamenu .dropdown-menu .megamenu-submenu li a { - padding: 0; - margin-top: 18px; - color: var(--blackColor); -} - -.noke-nav .navbar .navbar-nav .nav-item.megamenu .dropdown-menu .megamenu-submenu li a .count { - float: right; - width: 20px; - height: 20px; - display: block; - font-size: 12px; - line-height: 20px; - text-align: center; - border-radius: 5px; - background-color: #f4f4f4; - -webkit-transition: var(--transition); - transition: var(--transition); -} - -.noke-nav .navbar .navbar-nav .nav-item.megamenu .dropdown-menu .megamenu-submenu li a:hover, .noke-nav .navbar .navbar-nav .nav-item.megamenu .dropdown-menu .megamenu-submenu li a.active { - color: var(--startupMainColor); -} - -.noke-nav .navbar .others-option { - margin-left: 30px; -} - -.noke-nav .navbar .others-option .option-item { - position: relative; - margin-left: 15px; - top: 1px; -} - -.noke-nav .navbar .others-option .option-item:first-child { - margin-left: 0; -} - -.noke-nav .navbar .others-option .option-item .search-icon { - line-height: 1; - font-size: 18px; - cursor: pointer; - display: inline-block; - color: var(--blackColor); - -webkit-transition: var(--transition); - transition: var(--transition); - border-left: 1px solid rgba(0, 0, 0, 0.2); - border-right: 1px solid rgba(0, 0, 0, 0.2); - padding-left: 15px; - padding-right: 15px; -} - -.noke-nav .navbar .others-option .option-item .search-icon:hover { - color: var(--startupMainColor); -} - -.noke-nav .navbar .others-option .option-item .social-links { - position: relative; - top: -1px; -} - -.noke-nav .navbar .others-option .option-item .social-links span { - display: inline-block; - margin-left: 15px; - line-height: 1; -} - -.noke-nav .navbar .others-option .option-item .social-links span a { - font-size: 17px; - display: block; -} - -.noke-nav .navbar .others-option .option-item .social-links span a:hover { - color: var(--startupMainColor); -} - -.noke-nav .navbar .others-option .option-item .social-links span:first-child { - margin-left: 0; -} - -.noke-nav .navbar .others-option .option-item .link-btn { - display: inline-block; - font-size: 18px; - line-height: 1; -} - -.noke-nav .navbar .others-option .option-item .icon-btn { - position: relative; - font-size: 18px; - line-height: 1; - padding-right: 10px; - margin-left: 5px; -} - -.noke-nav .navbar .others-option .option-item .icon-btn span { - display: inline-block; - position: absolute; - right: 0; - top: -5px; - width: 16px; - height: 16px; - border-radius: 50%; - background-color: red; - text-align: center; - line-height: 17px; - color: var(--whiteColor); - font-weight: 700; - font-size: 9px; -} - -.noke-nav .navbar .others-option .search-box { - position: relative; - width: 200px; -} - -.noke-nav .navbar .others-option .search-box .input-search { - display: block; - width: 100%; - background-color: transparent; - border: none; - border-bottom: 1px solid #eeeeee; - height: auto; - padding-bottom: 8px; - font-size: 14px; - color: var(--blackColor); - -webkit-transition: var(--transition); - transition: var(--transition); -} - -.noke-nav .navbar .others-option .search-box .input-search::-webkit-input-placeholder { - -webkit-transition: var(--transition); - transition: var(--transition); - color: var(--optionalColor); -} - -.noke-nav .navbar .others-option .search-box .input-search:-ms-input-placeholder { - -webkit-transition: var(--transition); - transition: var(--transition); - color: var(--optionalColor); -} - -.noke-nav .navbar .others-option .search-box .input-search::-ms-input-placeholder { - -webkit-transition: var(--transition); - transition: var(--transition); - color: var(--optionalColor); -} - -.noke-nav .navbar .others-option .search-box .input-search::placeholder { - -webkit-transition: var(--transition); - transition: var(--transition); - color: var(--optionalColor); -} - -.noke-nav .navbar .others-option .search-box .input-search:focus { - border-color: var(--startupMainColor); -} - -.noke-nav .navbar .others-option .search-box .input-search:focus::-webkit-input-placeholder { - color: transparent; -} - -.noke-nav .navbar .others-option .search-box .input-search:focus:-ms-input-placeholder { - color: transparent; -} - -.noke-nav .navbar .others-option .search-box .input-search:focus::-ms-input-placeholder { - color: transparent; -} - -.noke-nav .navbar .others-option .search-box .input-search:focus::placeholder { - color: transparent; -} - -.noke-nav .navbar .others-option .search-box button { - position: absolute; - right: 0; - top: 0; - background-color: transparent; - border: none; - color: var(--optionalColor); - -webkit-transition: var(--transition); - transition: var(--transition); -} - -.noke-nav .navbar .others-option .search-box button:hover { - color: var(--startupMainColor); -} - -.noke-nav .navbar .others-option .lang-switcher { - position: relative; - padding-left: 34px; - position: relative; - top: -2px; - border-left: 1px solid rgba(0, 0, 0, 0.2); -} - -.noke-nav .navbar .others-option .lang-switcher label { - display: block; - margin-bottom: 0; - position: absolute; - left: 15px; - top: 0; -} - -.noke-nav .navbar .others-option .lang-switcher select { - background-color: transparent; - cursor: pointer; - border: none; - margin-top: -3px; -} - -.others-option-for-responsive { - display: none; -} - -.others-option-for-responsive .dot-menu { - top: -37px; - right: 60px; - height: 30px; - z-index: 999; - padding: 0 10px; - cursor: pointer; - position: absolute; -} - -.others-option-for-responsive .dot-menu .inner { - display: -webkit-box; - display: -ms-flexbox; - display: flex; - -webkit-box-align: center; - -ms-flex-align: center; - align-items: center; - height: 30px; -} - -.others-option-for-responsive .dot-menu .inner .circle { - height: 5px; - width: 5px; - border-radius: 100%; - margin: 0 2px; - -webkit-transition: var(--transition); - transition: var(--transition); - background-color: var(--blackColor); -} - -.others-option-for-responsive .dot-menu:hover .inner .circle { - background-color: var(--startupMainColor); -} - -.others-option-for-responsive .container { - position: relative; -} - -.others-option-for-responsive .container .container { - right: 0; - top: 15px; - opacity: 0; - z-index: 2; - max-width: 300px; - margin-left: auto; - visibility: hidden; - position: absolute; - -webkit-transform: scaleX(0); - transform: scaleX(0); - -webkit-transition: var(--transition); - transition: var(--transition); - padding-left: 15px; - padding-right: 15px; -} - -.others-option-for-responsive .container .container.active { - opacity: 1; - visibility: visible; - -webkit-transform: scaleX(1); - transform: scaleX(1); -} - -.others-option-for-responsive .option-inner { - padding: 15px 20px; - -webkit-box-shadow: 0 15px 40px rgba(0, 0, 0, 0.09); - box-shadow: 0 15px 40px rgba(0, 0, 0, 0.09); - background-color: var(--whiteColor); - text-align: center; -} - -.others-option-for-responsive .option-inner .others-option .option-item { - position: relative; - margin-left: 20px; - display: inline-block; -} - -.others-option-for-responsive .option-inner .others-option .option-item:first-child { - margin-left: 0; -} - -.others-option-for-responsive .option-inner .others-option .option-item .search-icon { - line-height: 1; - font-size: 18px; - cursor: pointer; - display: inline-block; - color: var(--blackColor); - -webkit-transition: var(--transition); - transition: var(--transition); - border-right: 1px solid rgba(0, 0, 0, 0.2); - padding-right: 20px; -} - -.others-option-for-responsive .option-inner .others-option .option-item .search-icon:hover { - color: var(--startupMainColor); -} - -.others-option-for-responsive .option-inner .others-option .option-item .social-links { - position: relative; - top: -1px; -} - -.others-option-for-responsive .option-inner .others-option .option-item .social-links span { - display: inline-block; - margin-left: 15px; - line-height: 1; -} - -.others-option-for-responsive .option-inner .others-option .option-item .social-links span a { - font-size: 17px; - display: block; -} - -.others-option-for-responsive .option-inner .others-option .option-item .social-links span a:hover { - color: var(--startupMainColor); -} - -.others-option-for-responsive .option-inner .others-option .option-item .social-links span:first-child { - margin-left: 0; -} - -.others-option-for-responsive .option-inner .others-option .search-box { - position: relative; - width: 100%; -} - -.others-option-for-responsive .option-inner .others-option .search-box .input-search { - display: block; - width: 100%; - background-color: transparent; - border: none; - border-bottom: 1px solid #eeeeee; - height: auto; - padding-bottom: 8px; - font-size: 14px; - color: var(--blackColor); - -webkit-transition: var(--transition); - transition: var(--transition); -} - -.others-option-for-responsive .option-inner .others-option .search-box .input-search::-webkit-input-placeholder { - -webkit-transition: var(--transition); - transition: var(--transition); - color: var(--optionalColor); -} - -.others-option-for-responsive .option-inner .others-option .search-box .input-search:-ms-input-placeholder { - -webkit-transition: var(--transition); - transition: var(--transition); - color: var(--optionalColor); -} - -.others-option-for-responsive .option-inner .others-option .search-box .input-search::-ms-input-placeholder { - -webkit-transition: var(--transition); - transition: var(--transition); - color: var(--optionalColor); -} - -.others-option-for-responsive .option-inner .others-option .search-box .input-search::placeholder { - -webkit-transition: var(--transition); - transition: var(--transition); - color: var(--optionalColor); -} - -.others-option-for-responsive .option-inner .others-option .search-box .input-search:focus { - border-color: var(--startupMainColor); -} - -.others-option-for-responsive .option-inner .others-option .search-box .input-search:focus::-webkit-input-placeholder { - color: transparent; -} - -.others-option-for-responsive .option-inner .others-option .search-box .input-search:focus:-ms-input-placeholder { - color: transparent; -} - -.others-option-for-responsive .option-inner .others-option .search-box .input-search:focus::-ms-input-placeholder { - color: transparent; -} - -.others-option-for-responsive .option-inner .others-option .search-box .input-search:focus::placeholder { - color: transparent; -} - -.others-option-for-responsive .option-inner .others-option .search-box button { - position: absolute; - right: 0; - top: 0; - background-color: transparent; - border: none; - color: var(--optionalColor); - -webkit-transition: var(--transition); - transition: var(--transition); -} - -.others-option-for-responsive .option-inner .others-option .search-box button:hover { - color: var(--startupMainColor); -} - -.others-option-for-responsive .option-inner .others-option .lang-switcher { - top: -2px; - position: relative; - padding-left: 25px; - position: relative; - margin-left: -10px; - border-left: 1px solid rgba(0, 0, 0, 0.2); -} - -.others-option-for-responsive .option-inner .others-option .lang-switcher label { - display: block; - margin-bottom: 0; - position: absolute; - left: 10px; - top: 0; -} - -.others-option-for-responsive .option-inner .others-option .lang-switcher select { - background-color: transparent; - cursor: pointer; - border: none; - margin-top: -3px; -} - -.others-option-for-responsive .option-inner .others-option .link-btn { - display: inline-block; - font-size: 18px; - line-height: 1; -} - -.others-option-for-responsive .option-inner .others-option .icon-btn { - position: relative; - font-size: 18px; - line-height: 1; - padding-right: 10px; - margin-left: 5px; -} - -.others-option-for-responsive .option-inner .others-option .icon-btn span { - display: inline-block; - position: absolute; - right: 0; - top: -5px; - width: 16px; - height: 16px; - border-radius: 50%; - background-color: red; - text-align: center; - line-height: 17px; - color: var(--whiteColor); - font-weight: 700; - font-size: 9px; -} - -.marketing-color .noke-nav .navbar .navbar-nav .nav-item a:hover, .marketing-color .noke-nav .navbar .navbar-nav .nav-item a:focus, .marketing-color .noke-nav .navbar .navbar-nav .nav-item a.active { - color: var(--marketingMainColor); -} - -.marketing-color .noke-nav .navbar .navbar-nav .nav-item:hover a, .marketing-color .noke-nav .navbar .navbar-nav .nav-item.active a { - color: var(--marketingMainColor); -} - -.marketing-color .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li a { - color: var(--blackColor); -} - -.marketing-color .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li a:hover, .marketing-color .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li a:focus, .marketing-color .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li a.active { - color: var(--marketingMainColor); -} - -.marketing-color .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li .dropdown-menu li a { - color: var(--blackColor); -} - -.marketing-color .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li .dropdown-menu li a:hover, .marketing-color .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li .dropdown-menu li a:focus, .marketing-color .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li .dropdown-menu li a.active { - color: var(--marketingMainColor); -} - -.marketing-color .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li .dropdown-menu li .dropdown-menu li a { - color: var(--blackColor); -} - -.marketing-color .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li .dropdown-menu li .dropdown-menu li a:hover, .marketing-color .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li .dropdown-menu li .dropdown-menu li a:focus, .marketing-color .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li .dropdown-menu li .dropdown-menu li a.active { - color: var(--marketingMainColor); -} - -.marketing-color .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li .dropdown-menu li .dropdown-menu li .dropdown-menu li a { - color: var(--blackColor); -} - -.marketing-color .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li .dropdown-menu li .dropdown-menu li .dropdown-menu li a:hover, .marketing-color .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li .dropdown-menu li .dropdown-menu li .dropdown-menu li a:focus, .marketing-color .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li .dropdown-menu li .dropdown-menu li .dropdown-menu li a.active { - color: var(--marketingMainColor); -} - -.marketing-color .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li .dropdown-menu li .dropdown-menu li .dropdown-menu li.active a { - color: var(--marketingMainColor); -} - -.marketing-color .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li .dropdown-menu li .dropdown-menu li.active a { - color: var(--marketingMainColor); -} - -.marketing-color .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li .dropdown-menu li.active a { - color: var(--marketingMainColor); -} - -.marketing-color .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li.active a { - color: var(--marketingMainColor); -} - -.marketing-color .noke-nav .navbar .navbar-nav .nav-item.megamenu .dropdown-menu .submenu-title::before { - background-color: var(--marketingMainColor); -} - -.marketing-color .noke-nav .navbar .navbar-nav .nav-item.megamenu .dropdown-menu .megamenu-submenu li a:hover, .marketing-color .noke-nav .navbar .navbar-nav .nav-item.megamenu .dropdown-menu .megamenu-submenu li a.active { - color: var(--marketingMainColor); -} - -.marketing-color .noke-nav .navbar .others-option .option-item .search-icon:hover { - color: var(--marketingMainColor); -} - -.marketing-color .noke-nav .navbar .others-option .option-item .social-links span a:hover { - color: var(--marketingMainColor); -} - -.marketing-color .noke-nav .navbar .others-option .search-box .input-search:focus { - border-color: var(--marketingMainColor); -} - -.marketing-color .noke-nav .navbar .others-option .search-box button:hover { - color: var(--marketingMainColor); -} - -.marketing-color .others-option-for-responsive .dot-menu:hover .inner .circle { - background-color: var(--marketingMainColor); -} - -.marketing-color .others-option-for-responsive .option-inner .others-option .option-item .search-icon:hover { - color: var(--marketingMainColor); -} - -.marketing-color .others-option-for-responsive .option-inner .others-option .option-item .social-links span a:hover { - color: var(--marketingMainColor); -} - -.marketing-color .others-option-for-responsive .option-inner .others-option .search-box .input-search:focus { - border-color: var(--marketingMainColor); -} - -.marketing-color .others-option-for-responsive .option-inner .others-option .search-box button:hover { - color: var(--marketingMainColor); -} - -.business-color .noke-nav .navbar .navbar-nav .nav-item a:hover, .business-color .noke-nav .navbar .navbar-nav .nav-item a:focus, .business-color .noke-nav .navbar .navbar-nav .nav-item a.active { - color: var(--businessMainColor); -} - -.business-color .noke-nav .navbar .navbar-nav .nav-item:hover a, .business-color .noke-nav .navbar .navbar-nav .nav-item.active a { - color: var(--businessMainColor); -} - -.business-color .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li a { - color: var(--blackColor); -} - -.business-color .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li a:hover, .business-color .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li a:focus, .business-color .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li a.active { - color: var(--businessMainColor); -} - -.business-color .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li .dropdown-menu li a { - color: var(--blackColor); -} - -.business-color .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li .dropdown-menu li a:hover, .business-color .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li .dropdown-menu li a:focus, .business-color .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li .dropdown-menu li a.active { - color: var(--businessMainColor); -} - -.business-color .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li .dropdown-menu li .dropdown-menu li a { - color: var(--blackColor); -} - -.business-color .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li .dropdown-menu li .dropdown-menu li a:hover, .business-color .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li .dropdown-menu li .dropdown-menu li a:focus, .business-color .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li .dropdown-menu li .dropdown-menu li a.active { - color: var(--businessMainColor); -} - -.business-color .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li .dropdown-menu li .dropdown-menu li .dropdown-menu li a { - color: var(--blackColor); -} - -.business-color .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li .dropdown-menu li .dropdown-menu li .dropdown-menu li a:hover, .business-color .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li .dropdown-menu li .dropdown-menu li .dropdown-menu li a:focus, .business-color .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li .dropdown-menu li .dropdown-menu li .dropdown-menu li a.active { - color: var(--businessMainColor); -} - -.business-color .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li .dropdown-menu li .dropdown-menu li .dropdown-menu li.active a { - color: var(--businessMainColor); -} - -.business-color .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li .dropdown-menu li .dropdown-menu li.active a { - color: var(--businessMainColor); -} - -.business-color .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li .dropdown-menu li.active a { - color: var(--businessMainColor); -} - -.business-color .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li.active a { - color: var(--businessMainColor); -} - -.business-color .noke-nav .navbar .navbar-nav .nav-item.megamenu .dropdown-menu .submenu-title::before { - background-color: var(--businessMainColor); -} - -.business-color .noke-nav .navbar .navbar-nav .nav-item.megamenu .dropdown-menu .megamenu-submenu li a:hover, .business-color .noke-nav .navbar .navbar-nav .nav-item.megamenu .dropdown-menu .megamenu-submenu li a.active { - color: var(--businessMainColor); -} - -.business-color .noke-nav .navbar .others-option .option-item .search-icon:hover { - color: var(--businessMainColor); -} - -.business-color .noke-nav .navbar .others-option .option-item .social-links span a:hover { - color: var(--businessMainColor); -} - -.business-color .noke-nav .navbar .others-option .search-box .input-search:focus { - border-color: var(--businessMainColor); -} - -.business-color .noke-nav .navbar .others-option .search-box button:hover { - color: var(--businessMainColor); -} - -.business-color .others-option-for-responsive .dot-menu:hover .inner .circle { - background-color: var(--businessMainColor); -} - -.business-color .others-option-for-responsive .option-inner .others-option .option-item .search-icon:hover { - color: var(--businessMainColor); -} - -.business-color .others-option-for-responsive .option-inner .others-option .option-item .social-links span a:hover { - color: var(--businessMainColor); -} - -.business-color .others-option-for-responsive .option-inner .others-option .search-box .input-search:focus { - border-color: var(--businessMainColor); -} - -.business-color .others-option-for-responsive .option-inner .others-option .search-box button:hover { - color: var(--businessMainColor); -} - -.app-color .noke-nav .navbar .navbar-nav .nav-item a:hover, .app-color .noke-nav .navbar .navbar-nav .nav-item a:focus, .app-color .noke-nav .navbar .navbar-nav .nav-item a.active { - color: var(--appMainColor); -} - -.app-color .noke-nav .navbar .navbar-nav .nav-item:hover a, .app-color .noke-nav .navbar .navbar-nav .nav-item.active a { - color: var(--appMainColor); -} - -.app-color .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li a { - color: var(--blackColor); -} - -.app-color .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li a:hover, .app-color .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li a:focus, .app-color .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li a.active { - color: var(--appMainColor); -} - -.app-color .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li .dropdown-menu li a { - color: var(--blackColor); -} - -.app-color .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li .dropdown-menu li a:hover, .app-color .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li .dropdown-menu li a:focus, .app-color .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li .dropdown-menu li a.active { - color: var(--appMainColor); -} - -.app-color .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li .dropdown-menu li .dropdown-menu li a { - color: var(--blackColor); -} - -.app-color .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li .dropdown-menu li .dropdown-menu li a:hover, .app-color .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li .dropdown-menu li .dropdown-menu li a:focus, .app-color .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li .dropdown-menu li .dropdown-menu li a.active { - color: var(--appMainColor); -} - -.app-color .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li .dropdown-menu li .dropdown-menu li .dropdown-menu li a { - color: var(--blackColor); -} - -.app-color .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li .dropdown-menu li .dropdown-menu li .dropdown-menu li a:hover, .app-color .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li .dropdown-menu li .dropdown-menu li .dropdown-menu li a:focus, .app-color .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li .dropdown-menu li .dropdown-menu li .dropdown-menu li a.active { - color: var(--appMainColor); -} - -.app-color .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li .dropdown-menu li .dropdown-menu li .dropdown-menu li.active a { - color: var(--appMainColor); -} - -.app-color .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li .dropdown-menu li .dropdown-menu li.active a { - color: var(--appMainColor); -} - -.app-color .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li .dropdown-menu li.active a { - color: var(--appMainColor); -} - -.app-color .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li.active a { - color: var(--appMainColor); -} - -.app-color .noke-nav .navbar .navbar-nav .nav-item.megamenu .dropdown-menu .submenu-title::before { - background-color: var(--appMainColor); -} - -.app-color .noke-nav .navbar .navbar-nav .nav-item.megamenu .dropdown-menu .megamenu-submenu li a:hover, .app-color .noke-nav .navbar .navbar-nav .nav-item.megamenu .dropdown-menu .megamenu-submenu li a.active { - color: var(--appMainColor); -} - -.app-color .noke-nav .navbar .others-option .option-item .search-icon:hover { - color: var(--appMainColor); -} - -.app-color .noke-nav .navbar .others-option .option-item .social-links span a:hover { - color: var(--appMainColor); -} - -.app-color .noke-nav .navbar .others-option .search-box .input-search:focus { - border-color: var(--appMainColor); -} - -.app-color .noke-nav .navbar .others-option .search-box button:hover { - color: var(--appMainColor); -} - -.app-color .others-option-for-responsive .dot-menu:hover .inner .circle { - background-color: var(--appMainColor); -} - -.app-color .others-option-for-responsive .option-inner .others-option .option-item .search-icon:hover { - color: var(--appMainColor); -} - -.app-color .others-option-for-responsive .option-inner .others-option .option-item .social-links span a:hover { - color: var(--appMainColor); -} - -.app-color .others-option-for-responsive .option-inner .others-option .search-box .input-search:focus { - border-color: var(--appMainColor); -} - -.app-color .others-option-for-responsive .option-inner .others-option .search-box button:hover { - color: var(--appMainColor); -} - -.personal-portfolio-color .noke-nav .navbar .navbar-nav .nav-item a:hover, .personal-portfolio-color .noke-nav .navbar .navbar-nav .nav-item a:focus, .personal-portfolio-color .noke-nav .navbar .navbar-nav .nav-item a.active { - color: var(--personalPortfolioMainColor); -} - -.personal-portfolio-color .noke-nav .navbar .navbar-nav .nav-item:hover a, .personal-portfolio-color .noke-nav .navbar .navbar-nav .nav-item.active a { - color: var(--personalPortfolioMainColor); -} - -.personal-portfolio-color .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li a { - color: var(--blackColor); -} - -.personal-portfolio-color .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li a:hover, .personal-portfolio-color .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li a:focus, .personal-portfolio-color .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li a.active { - color: var(--personalPortfolioMainColor); -} - -.personal-portfolio-color .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li .dropdown-menu li a { - color: var(--blackColor); -} - -.personal-portfolio-color .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li .dropdown-menu li a:hover, .personal-portfolio-color .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li .dropdown-menu li a:focus, .personal-portfolio-color .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li .dropdown-menu li a.active { - color: var(--personalPortfolioMainColor); -} - -.personal-portfolio-color .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li .dropdown-menu li .dropdown-menu li a { - color: var(--blackColor); -} - -.personal-portfolio-color .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li .dropdown-menu li .dropdown-menu li a:hover, .personal-portfolio-color .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li .dropdown-menu li .dropdown-menu li a:focus, .personal-portfolio-color .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li .dropdown-menu li .dropdown-menu li a.active { - color: var(--personalPortfolioMainColor); -} - -.personal-portfolio-color .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li .dropdown-menu li .dropdown-menu li .dropdown-menu li a { - color: var(--blackColor); -} - -.personal-portfolio-color .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li .dropdown-menu li .dropdown-menu li .dropdown-menu li a:hover, .personal-portfolio-color .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li .dropdown-menu li .dropdown-menu li .dropdown-menu li a:focus, .personal-portfolio-color .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li .dropdown-menu li .dropdown-menu li .dropdown-menu li a.active { - color: var(--personalPortfolioMainColor); -} - -.personal-portfolio-color .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li .dropdown-menu li .dropdown-menu li .dropdown-menu li.active a { - color: var(--personalPortfolioMainColor); -} - -.personal-portfolio-color .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li .dropdown-menu li .dropdown-menu li.active a { - color: var(--personalPortfolioMainColor); -} - -.personal-portfolio-color .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li .dropdown-menu li.active a { - color: var(--personalPortfolioMainColor); -} - -.personal-portfolio-color .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li.active a { - color: var(--personalPortfolioMainColor); -} - -.personal-portfolio-color .noke-nav .navbar .navbar-nav .nav-item.megamenu .dropdown-menu .submenu-title::before { - background-color: var(--personalPortfolioMainColor); -} - -.personal-portfolio-color .noke-nav .navbar .navbar-nav .nav-item.megamenu .dropdown-menu .megamenu-submenu li a:hover, .personal-portfolio-color .noke-nav .navbar .navbar-nav .nav-item.megamenu .dropdown-menu .megamenu-submenu li a.active { - color: var(--personalPortfolioMainColor); -} - -.personal-portfolio-color .noke-nav .navbar .others-option .option-item .search-icon:hover { - color: var(--personalPortfolioMainColor); -} - -.personal-portfolio-color .noke-nav .navbar .others-option .option-item .social-links span a:hover { - color: var(--personalPortfolioMainColor); -} - -.personal-portfolio-color .noke-nav .navbar .others-option .search-box .input-search:focus { - border-color: var(--personalPortfolioMainColor); -} - -.personal-portfolio-color .noke-nav .navbar .others-option .search-box button:hover { - color: var(--personalPortfolioMainColor); -} - -.personal-portfolio-color .others-option-for-responsive .dot-menu:hover .inner .circle { - background-color: var(--personalPortfolioMainColor); -} - -.personal-portfolio-color .others-option-for-responsive .option-inner .others-option .option-item .search-icon:hover { - color: var(--personalPortfolioMainColor); -} - -.personal-portfolio-color .others-option-for-responsive .option-inner .others-option .option-item .social-links span a:hover { - color: var(--personalPortfolioMainColor); -} - -.personal-portfolio-color .others-option-for-responsive .option-inner .others-option .search-box .input-search:focus { - border-color: var(--personalPortfolioMainColor); -} - -.personal-portfolio-color .others-option-for-responsive .option-inner .others-option .search-box button:hover { - color: var(--personalPortfolioMainColor); -} - -.saas-color.bg-dark .noke-nav .navbar .navbar-nav .nav-item a:hover, .saas-color.bg-dark .noke-nav .navbar .navbar-nav .nav-item a:focus, .saas-color.bg-dark .noke-nav .navbar .navbar-nav .nav-item a.active { - color: var(--saasMainColor); -} - -.saas-color.bg-dark .noke-nav .navbar .navbar-nav .nav-item:hover a, .saas-color.bg-dark .noke-nav .navbar .navbar-nav .nav-item.active a { - color: var(--saasMainColor); -} - -.saas-color.bg-dark .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li a { - color: var(--blackColor); -} - -.saas-color.bg-dark .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li a:hover, .saas-color.bg-dark .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li a:focus, .saas-color.bg-dark .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li a.active { - color: var(--saasMainColor); -} - -.saas-color.bg-dark .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li .dropdown-menu li a { - color: var(--blackColor); -} - -.saas-color.bg-dark .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li .dropdown-menu li a:hover, .saas-color.bg-dark .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li .dropdown-menu li a:focus, .saas-color.bg-dark .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li .dropdown-menu li a.active { - color: var(--saasMainColor); -} - -.saas-color.bg-dark .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li .dropdown-menu li .dropdown-menu li a { - color: var(--blackColor); -} - -.saas-color.bg-dark .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li .dropdown-menu li .dropdown-menu li a:hover, .saas-color.bg-dark .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li .dropdown-menu li .dropdown-menu li a:focus, .saas-color.bg-dark .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li .dropdown-menu li .dropdown-menu li a.active { - color: var(--saasMainColor); -} - -.saas-color.bg-dark .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li .dropdown-menu li .dropdown-menu li .dropdown-menu li a { - color: var(--blackColor); -} - -.saas-color.bg-dark .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li .dropdown-menu li .dropdown-menu li .dropdown-menu li a:hover, .saas-color.bg-dark .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li .dropdown-menu li .dropdown-menu li .dropdown-menu li a:focus, .saas-color.bg-dark .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li .dropdown-menu li .dropdown-menu li .dropdown-menu li a.active { - color: var(--saasMainColor); -} - -.saas-color.bg-dark .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li .dropdown-menu li .dropdown-menu li .dropdown-menu li.active a { - color: var(--saasMainColor); -} - -.saas-color.bg-dark .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li .dropdown-menu li .dropdown-menu li.active a { - color: var(--saasMainColor); -} - -.saas-color.bg-dark .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li .dropdown-menu li.active a { - color: var(--saasMainColor); -} - -.saas-color.bg-dark .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li.active a { - color: var(--saasMainColor); -} - -.saas-color.bg-dark .noke-nav .navbar .navbar-nav .nav-item.megamenu .dropdown-menu .submenu-title::before { - background-color: var(--saasMainColor); -} - -.saas-color.bg-dark .noke-nav .navbar .navbar-nav .nav-item.megamenu .dropdown-menu .megamenu-submenu li a:hover, .saas-color.bg-dark .noke-nav .navbar .navbar-nav .nav-item.megamenu .dropdown-menu .megamenu-submenu li a.active { - color: var(--saasMainColor); -} - -.saas-color.bg-dark .noke-nav .navbar .others-option .option-item .search-icon:hover { - color: var(--saasMainColor); -} - -.saas-color.bg-dark .noke-nav .navbar .others-option .option-item .social-links span a:hover { - color: var(--saasMainColor); -} - -.saas-color.bg-dark .noke-nav .navbar .others-option .search-box .input-search:focus { - border-color: var(--saasMainColor); -} - -.saas-color.bg-dark .noke-nav .navbar .others-option .search-box button:hover { - color: var(--saasMainColor); -} - -.saas-color.bg-dark .others-option-for-responsive .dot-menu:hover .inner .circle { - background-color: var(--saasMainColor); -} - -.saas-color.bg-dark .others-option-for-responsive .option-inner .others-option .option-item .search-icon:hover { - color: var(--saasMainColor); -} - -.saas-color.bg-dark .others-option-for-responsive .option-inner .others-option .option-item .social-links li a:hover { - color: var(--saasMainColor); -} - -.saas-color.bg-dark .others-option-for-responsive .option-inner .others-option .search-box .input-search:focus { - border-color: var(--saasMainColor); -} - -.saas-color.bg-dark .others-option-for-responsive .option-inner .others-option .search-box button:hover { - color: var(--saasMainColor); -} - -.color-white .noke-nav .navbar .navbar-nav .nav-item a { - color: var(--whiteColor); -} - -.color-white .noke-nav .navbar .navbar-nav .nav-item a:hover, .color-white .noke-nav .navbar .navbar-nav .nav-item a:focus, .color-white .noke-nav .navbar .navbar-nav .nav-item a.active { - color: var(--startupMainColor); -} - -.color-white .noke-nav .navbar .navbar-nav .nav-item:hover a, .color-white .noke-nav .navbar .navbar-nav .nav-item.active a { - color: var(--startupMainColor); -} - -.color-white .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li a { - color: var(--blackColor); -} - -.color-white .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li a:hover, .color-white .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li a:focus, .color-white .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li a.active { - color: var(--startupMainColor); -} - -.color-white .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li .dropdown-menu li a { - color: var(--blackColor); -} - -.color-white .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li .dropdown-menu li a:hover, .color-white .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li .dropdown-menu li a:focus, .color-white .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li .dropdown-menu li a.active { - color: var(--startupMainColor); -} - -.color-white .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li .dropdown-menu li .dropdown-menu li a { - color: var(--blackColor); -} - -.color-white .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li .dropdown-menu li .dropdown-menu li a:hover, .color-white .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li .dropdown-menu li .dropdown-menu li a:focus, .color-white .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li .dropdown-menu li .dropdown-menu li a.active { - color: var(--startupMainColor); -} - -.color-white .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li .dropdown-menu li .dropdown-menu li .dropdown-menu li a { - color: var(--blackColor); -} - -.color-white .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li .dropdown-menu li .dropdown-menu li .dropdown-menu li a:hover, .color-white .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li .dropdown-menu li .dropdown-menu li .dropdown-menu li a:focus, .color-white .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li .dropdown-menu li .dropdown-menu li .dropdown-menu li a.active { - color: var(--startupMainColor); -} - -.color-white .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li .dropdown-menu li .dropdown-menu li .dropdown-menu li.active a { - color: var(--startupMainColor); -} - -.color-white .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li .dropdown-menu li .dropdown-menu li.active a { - color: var(--startupMainColor); -} - -.color-white .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li .dropdown-menu li.active a { - color: var(--startupMainColor); -} - -.color-white .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li.active a { - color: var(--startupMainColor); -} - -.color-white .noke-nav .navbar .navbar-nav .nav-item.megamenu .dropdown-menu .submenu-title::before { - background-color: var(--startupMainColor); -} - -.color-white .noke-nav .navbar .navbar-nav .nav-item.megamenu .dropdown-menu .megamenu-submenu li a:hover, .color-white .noke-nav .navbar .navbar-nav .nav-item.megamenu .dropdown-menu .megamenu-submenu li a.active { - color: var(--startupMainColor); -} - -.color-white .noke-nav .navbar .others-option .option-item .search-icon { - color: var(--whiteColor); -} - -.color-white .noke-nav .navbar .others-option .option-item .search-icon:hover { - color: var(--startupMainColor); -} - -.color-white .noke-nav .navbar .others-option .option-item .social-links li a { - color: var(--whiteColor); -} - -.color-white .noke-nav .navbar .others-option .option-item .social-links li a:hover { - color: var(--startupMainColor); -} - -.color-white .noke-nav .navbar .others-option .search-box .input-search { - color: var(--whiteColor); -} - -.color-white .noke-nav .navbar .others-option .search-box .input-search::-webkit-input-placeholder { - color: var(--whiteColor); -} - -.color-white .noke-nav .navbar .others-option .search-box .input-search:-ms-input-placeholder { - color: var(--whiteColor); -} - -.color-white .noke-nav .navbar .others-option .search-box .input-search::-ms-input-placeholder { - color: var(--whiteColor); -} - -.color-white .noke-nav .navbar .others-option .search-box .input-search::placeholder { - color: var(--whiteColor); -} - -.color-white .noke-nav .navbar .others-option .search-box .input-search:focus::-webkit-input-placeholder { - color: transparent; -} - -.color-white .noke-nav .navbar .others-option .search-box .input-search:focus:-ms-input-placeholder { - color: transparent; -} - -.color-white .noke-nav .navbar .others-option .search-box .input-search:focus::-ms-input-placeholder { - color: transparent; -} - -.color-white .noke-nav .navbar .others-option .search-box .input-search:focus::placeholder { - color: transparent; -} - -.color-white .noke-nav .navbar .others-option .search-box button { - color: var(--whiteColor); -} - -.color-white .noke-nav .navbar .others-option .search-box button:hover { - color: var(--startupMainColor); -} - -.color-white .noke-nav .navbar .others-option .lang-switcher { - color: var(--whiteColor); -} - -.color-white .noke-nav .navbar .others-option .lang-switcher select { - color: var(--whiteColor); -} - -.color-white .noke-nav .navbar .others-option .lang-switcher select option { - color: var(--blackColor); -} - -.color-white .others-option-for-responsive .dot-menu .inner .circle { - background-color: var(--whiteColor); -} - -.color-white .others-option-for-responsive .dot-menu:hover .inner .circle { - background-color: var(--startupMainColor); -} - -.it-agency-color.color-white .noke-nav .navbar .navbar-nav .nav-item a { - color: var(--whiteColor); -} - -.it-agency-color.color-white .noke-nav .navbar .navbar-nav .nav-item a:hover, .it-agency-color.color-white .noke-nav .navbar .navbar-nav .nav-item a:focus, .it-agency-color.color-white .noke-nav .navbar .navbar-nav .nav-item a.active { - color: var(--itAgencyMainColor); -} - -.it-agency-color.color-white .noke-nav .navbar .navbar-nav .nav-item:hover a, .it-agency-color.color-white .noke-nav .navbar .navbar-nav .nav-item.active a { - color: var(--itAgencyMainColor); -} - -.it-agency-color.color-white .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li a { - color: var(--blackColor); -} - -.it-agency-color.color-white .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li a:hover, .it-agency-color.color-white .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li a:focus, .it-agency-color.color-white .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li a.active { - color: var(--itAgencyMainColor); -} - -.it-agency-color.color-white .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li .dropdown-menu li a { - color: var(--blackColor); -} - -.it-agency-color.color-white .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li .dropdown-menu li a:hover, .it-agency-color.color-white .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li .dropdown-menu li a:focus, .it-agency-color.color-white .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li .dropdown-menu li a.active { - color: var(--itAgencyMainColor); -} - -.it-agency-color.color-white .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li .dropdown-menu li .dropdown-menu li a { - color: var(--blackColor); -} - -.it-agency-color.color-white .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li .dropdown-menu li .dropdown-menu li a:hover, .it-agency-color.color-white .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li .dropdown-menu li .dropdown-menu li a:focus, .it-agency-color.color-white .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li .dropdown-menu li .dropdown-menu li a.active { - color: var(--itAgencyMainColor); -} - -.it-agency-color.color-white .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li .dropdown-menu li .dropdown-menu li .dropdown-menu li a { - color: var(--blackColor); -} - -.it-agency-color.color-white .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li .dropdown-menu li .dropdown-menu li .dropdown-menu li a:hover, .it-agency-color.color-white .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li .dropdown-menu li .dropdown-menu li .dropdown-menu li a:focus, .it-agency-color.color-white .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li .dropdown-menu li .dropdown-menu li .dropdown-menu li a.active { - color: var(--itAgencyMainColor); -} - -.it-agency-color.color-white .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li .dropdown-menu li .dropdown-menu li .dropdown-menu li.active a { - color: var(--itAgencyMainColor); -} - -.it-agency-color.color-white .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li .dropdown-menu li .dropdown-menu li.active a { - color: var(--itAgencyMainColor); -} - -.it-agency-color.color-white .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li .dropdown-menu li.active a { - color: var(--itAgencyMainColor); -} - -.it-agency-color.color-white .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li.active a { - color: var(--itAgencyMainColor); -} - -.it-agency-color.color-white .noke-nav .navbar .navbar-nav .nav-item.megamenu .dropdown-menu .submenu-title::before { - background-color: var(--itAgencyMainColor); -} - -.it-agency-color.color-white .noke-nav .navbar .navbar-nav .nav-item.megamenu .dropdown-menu .megamenu-submenu li a:hover, .it-agency-color.color-white .noke-nav .navbar .navbar-nav .nav-item.megamenu .dropdown-menu .megamenu-submenu li a.active { - color: var(--itAgencyMainColor); -} - -.it-agency-color.color-white .noke-nav .navbar .others-option .option-item .search-icon { - color: var(--itAgencyMainColor); -} - -.it-agency-color.color-white .noke-nav .navbar .others-option .option-item .search-icon:hover { - color: var(--itAgencyMainColor); -} - -.it-agency-color.color-white .noke-nav .navbar .others-option .option-item .social-links li a:hover { - color: var(--itAgencyMainColor); -} - -.it-agency-color.color-white .noke-nav .navbar .others-option .search-box button:hover { - color: var(--itAgencyMainColor); -} - -.it-agency-color.color-white .others-option-for-responsive .dot-menu:hover .inner .circle { - background-color: var(--itAgencyMainColor); -} - -.it-agency-color.color-white .others-option-for-responsive .option-inner .others-option .option-item .search-icon:hover { - color: var(--itAgencyMainColor); -} - -.it-agency-color.color-white .others-option-for-responsive .option-inner .others-option .option-item .social-links span a:hover { - color: var(--itAgencyMainColor); -} - -.it-agency-color.color-white .others-option-for-responsive .option-inner .others-option .search-box .input-search:focus { - border-color: var(--itAgencyMainColor); -} - -.it-agency-color.color-white .others-option-for-responsive .option-inner .others-option .search-box button:hover { - color: var(--itAgencyMainColor); -} - -.consulting-color .noke-nav .navbar .navbar-nav .nav-item a:hover, .consulting-color .noke-nav .navbar .navbar-nav .nav-item a:focus, .consulting-color .noke-nav .navbar .navbar-nav .nav-item a.active { - color: var(--consultingMainColor); -} - -.consulting-color .noke-nav .navbar .navbar-nav .nav-item:hover a, .consulting-color .noke-nav .navbar .navbar-nav .nav-item.active a { - color: var(--consultingMainColor); -} - -.consulting-color .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li a { - color: var(--blackColor); -} - -.consulting-color .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li a:hover, .consulting-color .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li a:focus, .consulting-color .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li a.active { - color: var(--consultingMainColor); -} - -.consulting-color .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li .dropdown-menu li a { - color: var(--blackColor); -} - -.consulting-color .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li .dropdown-menu li a:hover, .consulting-color .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li .dropdown-menu li a:focus, .consulting-color .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li .dropdown-menu li a.active { - color: var(--consultingMainColor); -} - -.consulting-color .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li .dropdown-menu li .dropdown-menu li a { - color: var(--blackColor); -} - -.consulting-color .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li .dropdown-menu li .dropdown-menu li a:hover, .consulting-color .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li .dropdown-menu li .dropdown-menu li a:focus, .consulting-color .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li .dropdown-menu li .dropdown-menu li a.active { - color: var(--consultingMainColor); -} - -.consulting-color .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li .dropdown-menu li .dropdown-menu li .dropdown-menu li a { - color: var(--blackColor); -} - -.consulting-color .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li .dropdown-menu li .dropdown-menu li .dropdown-menu li a:hover, .consulting-color .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li .dropdown-menu li .dropdown-menu li .dropdown-menu li a:focus, .consulting-color .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li .dropdown-menu li .dropdown-menu li .dropdown-menu li a.active { - color: var(--consultingMainColor); -} - -.consulting-color .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li .dropdown-menu li .dropdown-menu li .dropdown-menu li.active a { - color: var(--consultingMainColor); -} - -.consulting-color .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li .dropdown-menu li .dropdown-menu li.active a { - color: var(--consultingMainColor); -} - -.consulting-color .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li .dropdown-menu li.active a { - color: var(--consultingMainColor); -} - -.consulting-color .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li.active a { - color: var(--consultingMainColor); -} - -.consulting-color .noke-nav .navbar .navbar-nav .nav-item.megamenu .dropdown-menu .submenu-title::before { - background-color: var(--consultingMainColor); -} - -.consulting-color .noke-nav .navbar .navbar-nav .nav-item.megamenu .dropdown-menu .megamenu-submenu li a:hover, .consulting-color .noke-nav .navbar .navbar-nav .nav-item.megamenu .dropdown-menu .megamenu-submenu li a.active { - color: var(--consultingMainColor); -} - -.consulting-color .noke-nav .navbar .others-option .option-item .search-icon:hover { - color: var(--consultingMainColor); -} - -.consulting-color .noke-nav .navbar .others-option .option-item .social-links span a:hover { - color: var(--consultingMainColor); -} - -.consulting-color .noke-nav .navbar .others-option .search-box .input-search:focus { - border-color: var(--consultingMainColor); -} - -.consulting-color .noke-nav .navbar .others-option .search-box button:hover { - color: var(--consultingMainColor); -} - -.consulting-color .others-option-for-responsive .dot-menu:hover .inner .circle { - background-color: var(--consultingMainColor); -} - -.consulting-color .others-option-for-responsive .option-inner .others-option .option-item .search-icon:hover { - color: var(--consultingMainColor); -} - -.consulting-color .others-option-for-responsive .option-inner .others-option .option-item .social-links span a:hover { - color: var(--consultingMainColor); -} - -.consulting-color .others-option-for-responsive .option-inner .others-option .search-box .input-search:focus { - border-color: var(--consultingMainColor); -} - -.consulting-color .others-option-for-responsive .option-inner .others-option .search-box button:hover { - color: var(--consultingMainColor); -} - -.shop-color .noke-nav .navbar .navbar-nav .nav-item a:hover, .shop-color .noke-nav .navbar .navbar-nav .nav-item a:focus, .shop-color .noke-nav .navbar .navbar-nav .nav-item a.active { - color: var(--shopMainColor); -} - -.shop-color .noke-nav .navbar .navbar-nav .nav-item:hover a, .shop-color .noke-nav .navbar .navbar-nav .nav-item.active a { - color: var(--shopMainColor); -} - -.shop-color .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li a { - color: var(--blackColor); -} - -.shop-color .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li a:hover, .shop-color .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li a:focus, .shop-color .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li a.active { - color: var(--shopMainColor); -} - -.shop-color .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li .dropdown-menu li a { - color: var(--blackColor); -} - -.shop-color .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li .dropdown-menu li a:hover, .shop-color .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li .dropdown-menu li a:focus, .shop-color .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li .dropdown-menu li a.active { - color: var(--shopMainColor); -} - -.shop-color .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li .dropdown-menu li .dropdown-menu li a { - color: var(--blackColor); -} - -.shop-color .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li .dropdown-menu li .dropdown-menu li a:hover, .shop-color .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li .dropdown-menu li .dropdown-menu li a:focus, .shop-color .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li .dropdown-menu li .dropdown-menu li a.active { - color: var(--shopMainColor); -} - -.shop-color .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li .dropdown-menu li .dropdown-menu li .dropdown-menu li a { - color: var(--blackColor); -} - -.shop-color .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li .dropdown-menu li .dropdown-menu li .dropdown-menu li a:hover, .shop-color .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li .dropdown-menu li .dropdown-menu li .dropdown-menu li a:focus, .shop-color .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li .dropdown-menu li .dropdown-menu li .dropdown-menu li a.active { - color: var(--shopMainColor); -} - -.shop-color .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li .dropdown-menu li .dropdown-menu li .dropdown-menu li.active a { - color: var(--shopMainColor); -} - -.shop-color .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li .dropdown-menu li .dropdown-menu li.active a { - color: var(--shopMainColor); -} - -.shop-color .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li .dropdown-menu li.active a { - color: var(--shopMainColor); -} - -.shop-color .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li.active a { - color: var(--shopMainColor); -} - -.shop-color .noke-nav .navbar .navbar-nav .nav-item.megamenu .dropdown-menu .submenu-title::before { - background-color: var(--shopMainColor); -} - -.shop-color .noke-nav .navbar .navbar-nav .nav-item.megamenu .dropdown-menu .megamenu-submenu li a:hover, .shop-color .noke-nav .navbar .navbar-nav .nav-item.megamenu .dropdown-menu .megamenu-submenu li a.active { - color: var(--shopMainColor); -} - -.shop-color .noke-nav .navbar .others-option .option-item .search-icon:hover { - color: var(--shopMainColor); -} - -.shop-color .noke-nav .navbar .others-option .option-item .social-links span a:hover { - color: var(--shopMainColor); -} - -.shop-color .noke-nav .navbar .others-option .search-box .input-search:focus { - border-color: var(--shopMainColor); -} - -.shop-color .noke-nav .navbar .others-option .search-box button:hover { - color: var(--shopMainColor); -} - -.shop-color .others-option-for-responsive .dot-menu:hover .inner .circle { - background-color: var(--shopMainColor); -} - -.shop-color .others-option-for-responsive .option-inner .others-option .option-item .search-icon:hover { - color: var(--shopMainColor); -} - -.shop-color .others-option-for-responsive .option-inner .others-option .option-item .social-links span a:hover { - color: var(--shopMainColor); -} - -.shop-color .others-option-for-responsive .option-inner .others-option .search-box .input-search:focus { - border-color: var(--shopMainColor); -} - -.shop-color .others-option-for-responsive .option-inner .others-option .search-box button:hover { - color: var(--shopMainColor); -} - -.blog-color .noke-nav .navbar .navbar-nav .nav-item a:hover, .blog-color .noke-nav .navbar .navbar-nav .nav-item a:focus, .blog-color .noke-nav .navbar .navbar-nav .nav-item a.active { - color: var(--blackColor); -} - -.blog-color .noke-nav .navbar .navbar-nav .nav-item:hover a, .blog-color .noke-nav .navbar .navbar-nav .nav-item.active a { - color: var(--blackColor); -} - -.blog-color .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li a { - color: var(--blackColor); -} - -.blog-color .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li a:hover, .blog-color .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li a:focus, .blog-color .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li a.active { - color: var(--blackColor); -} - -.blog-color .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li .dropdown-menu li a { - color: var(--blackColor); -} - -.blog-color .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li .dropdown-menu li a:hover, .blog-color .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li .dropdown-menu li a:focus, .blog-color .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li .dropdown-menu li a.active { - color: var(--blackColor); -} - -.blog-color .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li .dropdown-menu li .dropdown-menu li a { - color: var(--blackColor); -} - -.blog-color .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li .dropdown-menu li .dropdown-menu li a:hover, .blog-color .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li .dropdown-menu li .dropdown-menu li a:focus, .blog-color .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li .dropdown-menu li .dropdown-menu li a.active { - color: var(--blackColor); -} - -.blog-color .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li .dropdown-menu li .dropdown-menu li .dropdown-menu li a { - color: var(--blackColor); -} - -.blog-color .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li .dropdown-menu li .dropdown-menu li .dropdown-menu li a:hover, .blog-color .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li .dropdown-menu li .dropdown-menu li .dropdown-menu li a:focus, .blog-color .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li .dropdown-menu li .dropdown-menu li .dropdown-menu li a.active { - color: var(--blackColor); -} - -.blog-color .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li .dropdown-menu li .dropdown-menu li .dropdown-menu li.active a { - color: var(--blackColor); -} - -.blog-color .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li .dropdown-menu li .dropdown-menu li.active a { - color: var(--blackColor); -} - -.blog-color .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li .dropdown-menu li.active a { - color: var(--blackColor); -} - -.blog-color .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li.active a { - color: var(--blackColor); -} - -.blog-color .noke-nav .navbar .navbar-nav .nav-item.megamenu .dropdown-menu .submenu-title::before { - background-color: var(--blackColor); -} - -.blog-color .noke-nav .navbar .navbar-nav .nav-item.megamenu .dropdown-menu .megamenu-submenu li a:hover, .blog-color .noke-nav .navbar .navbar-nav .nav-item.megamenu .dropdown-menu .megamenu-submenu li a.active { - color: var(--blackColor); -} - -.blog-color .noke-nav .navbar .others-option .option-item .search-icon:hover { - color: var(--blackColor); -} - -.blog-color .noke-nav .navbar .others-option .option-item .social-links span a:hover { - color: var(--blackColor); -} - -.blog-color .noke-nav .navbar .others-option .search-box .input-search:focus { - border-color: var(--blackColor); -} - -.blog-color .noke-nav .navbar .others-option .search-box button:hover { - color: var(--blackColor); -} - -.blog-color .others-option-for-responsive .dot-menu:hover .inner .circle { - background-color: var(--blackColor); -} - -.blog-color .others-option-for-responsive .option-inner .others-option .option-item .search-icon:hover { - color: var(--blackColor); -} - -.blog-color .others-option-for-responsive .option-inner .others-option .option-item .social-links span a:hover { - color: var(--blackColor); -} - -.blog-color .others-option-for-responsive .option-inner .others-option .search-box .input-search:focus { - border-color: var(--blackColor); -} - -.blog-color .others-option-for-responsive .option-inner .others-option .search-box button:hover { - color: var(--blackColor); -} - -.minimal-portfolio-color .noke-nav .navbar .navbar-nav .nav-item a:hover, .minimal-portfolio-color .noke-nav .navbar .navbar-nav .nav-item a:focus, .minimal-portfolio-color .noke-nav .navbar .navbar-nav .nav-item a.active { - color: var(--minimalPortfolioColor); -} - -.minimal-portfolio-color .noke-nav .navbar .navbar-nav .nav-item:hover a, .minimal-portfolio-color .noke-nav .navbar .navbar-nav .nav-item.active a { - color: var(--minimalPortfolioColor); -} - -.minimal-portfolio-color .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li a { - color: var(--blackColor); -} - -.minimal-portfolio-color .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li a:hover, .minimal-portfolio-color .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li a:focus, .minimal-portfolio-color .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li a.active { - color: var(--minimalPortfolioColor); -} - -.minimal-portfolio-color .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li .dropdown-menu li a { - color: var(--blackColor); -} - -.minimal-portfolio-color .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li .dropdown-menu li a:hover, .minimal-portfolio-color .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li .dropdown-menu li a:focus, .minimal-portfolio-color .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li .dropdown-menu li a.active { - color: var(--minimalPortfolioColor); -} - -.minimal-portfolio-color .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li .dropdown-menu li .dropdown-menu li a { - color: var(--blackColor); -} - -.minimal-portfolio-color .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li .dropdown-menu li .dropdown-menu li a:hover, .minimal-portfolio-color .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li .dropdown-menu li .dropdown-menu li a:focus, .minimal-portfolio-color .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li .dropdown-menu li .dropdown-menu li a.active { - color: var(--minimalPortfolioColor); -} - -.minimal-portfolio-color .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li .dropdown-menu li .dropdown-menu li .dropdown-menu li a { - color: var(--blackColor); -} - -.minimal-portfolio-color .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li .dropdown-menu li .dropdown-menu li .dropdown-menu li a:hover, .minimal-portfolio-color .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li .dropdown-menu li .dropdown-menu li .dropdown-menu li a:focus, .minimal-portfolio-color .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li .dropdown-menu li .dropdown-menu li .dropdown-menu li a.active { - color: var(--minimalPortfolioColor); -} - -.minimal-portfolio-color .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li .dropdown-menu li .dropdown-menu li .dropdown-menu li.active a { - color: var(--minimalPortfolioColor); -} - -.minimal-portfolio-color .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li .dropdown-menu li .dropdown-menu li.active a { - color: var(--minimalPortfolioColor); -} - -.minimal-portfolio-color .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li .dropdown-menu li.active a { - color: var(--minimalPortfolioColor); -} - -.minimal-portfolio-color .noke-nav .navbar .navbar-nav .nav-item .dropdown-menu li.active a { - color: var(--minimalPortfolioColor); -} - -.minimal-portfolio-color .noke-nav .navbar .navbar-nav .nav-item.megamenu .dropdown-menu .submenu-title::before { - background-color: var(--minimalPortfolioColor); -} - -.minimal-portfolio-color .noke-nav .navbar .navbar-nav .nav-item.megamenu .dropdown-menu .megamenu-submenu li a:hover, .minimal-portfolio-color .noke-nav .navbar .navbar-nav .nav-item.megamenu .dropdown-menu .megamenu-submenu li a.active { - color: var(--minimalPortfolioColor); -} - -.minimal-portfolio-color .noke-nav .navbar .others-option .option-item .search-icon:hover { - color: var(--minimalPortfolioColor); -} - -.minimal-portfolio-color .noke-nav .navbar .others-option .option-item .social-links span a:hover { - color: var(--minimalPortfolioColor); -} - -.minimal-portfolio-color .noke-nav .navbar .others-option .search-box .input-search:focus { - border-color: var(--minimalPortfolioColor); -} - -.minimal-portfolio-color .noke-nav .navbar .others-option .search-box button:hover { - color: var(--minimalPortfolioColor); -} - -.minimal-portfolio-color .others-option-for-responsive .dot-menu:hover .inner .circle { - background-color: var(--minimalPortfolioColor); -} - -.minimal-portfolio-color .others-option-for-responsive .option-inner .others-option .option-item .search-icon:hover { - color: var(--minimalPortfolioColor); -} - -.minimal-portfolio-color .others-option-for-responsive .option-inner .others-option .option-item .social-links span a:hover { - color: var(--minimalPortfolioColor); -} - -.minimal-portfolio-color .others-option-for-responsive .option-inner .others-option .search-box .input-search:focus { - border-color: var(--minimalPortfolioColor); -} - -.minimal-portfolio-color .others-option-for-responsive .option-inner .others-option .search-box button:hover { - color: var(--minimalPortfolioColor); -} - -@media only screen and (max-width: 1199px) { - .header-area.p-absolute .navbar-area.navbar-style-five { - border-bottom: none; - background-color: var(--whiteColor); - } - .navbar-area { - padding-top: 15px; - padding-bottom: 15px; - } - .navbar-area.is-sticky { - padding-top: 15px; - padding-bottom: 15px; - } - .navbar-area.bg-dark { - border-bottom: 1px solid rgba(255, 255, 255, 0.07); - } - .navbar-area.bg-dark .noke-responsive-nav .mean-container a.meanmenu-reveal { - color: var(--whiteColor); - } - .navbar-area.bg-dark .noke-responsive-nav .mean-container a.meanmenu-reveal span { - background: var(--whiteColor); - } - .navbar-area.bg-dark .noke-responsive-nav .others-option .search-box .input-search { - border-bottom: 1px solid #6e6a6a; - color: var(--whiteColor); - } - .navbar-area.bg-dark .noke-responsive-nav .others-option .search-box .input-search::-webkit-input-placeholder { - color: var(--whiteColor); - } - .navbar-area.bg-dark .noke-responsive-nav .others-option .search-box .input-search:-ms-input-placeholder { - color: var(--whiteColor); - } - .navbar-area.bg-dark .noke-responsive-nav .others-option .search-box .input-search::-ms-input-placeholder { - color: var(--whiteColor); - } - .navbar-area.bg-dark .noke-responsive-nav .others-option .search-box .input-search::placeholder { - color: var(--whiteColor); - } - .navbar-area.bg-dark .noke-responsive-nav .others-option .search-box .input-search:focus { - border-color: var(--whiteColor); - } - .navbar-area.bg-dark .noke-responsive-nav .others-option .search-box button { - color: var(--whiteColor); - } - .navbar-area.bg-dark .noke-responsive-nav .others-option .search-box button:hover { - color: var(--whiteColor); - } - .navbar-area.color-white { - border-bottom: 1px solid rgba(255, 255, 255, 0.07); - } - .navbar-area.color-white .noke-responsive-nav .mean-container a.meanmenu-reveal { - color: var(--whiteColor); - } - .navbar-area.color-white .noke-responsive-nav .mean-container a.meanmenu-reveal span { - background: var(--whiteColor); - } - .navbar-area.color-white .noke-responsive-nav .others-option .search-box .input-search { - border-bottom: 1px solid #6e6a6a; - color: var(--whiteColor); - } - .navbar-area.color-white .noke-responsive-nav .others-option .search-box .input-search::-webkit-input-placeholder { - color: var(--whiteColor); - } - .navbar-area.color-white .noke-responsive-nav .others-option .search-box .input-search:-ms-input-placeholder { - color: var(--whiteColor); - } - .navbar-area.color-white .noke-responsive-nav .others-option .search-box .input-search::-ms-input-placeholder { - color: var(--whiteColor); - } - .navbar-area.color-white .noke-responsive-nav .others-option .search-box .input-search::placeholder { - color: var(--whiteColor); - } - .navbar-area.color-white .noke-responsive-nav .others-option .search-box .input-search:focus { - border-color: var(--whiteColor); - } - .navbar-area.color-white .noke-responsive-nav .others-option .search-box button { - color: var(--whiteColor); - } - .navbar-area.color-white .noke-responsive-nav .others-option .search-box button:hover { - color: var(--whiteColor); - } - .navbar-area.navbar-style-five { - border-bottom: 1px solid #eeeeee; - padding-top: 15px; - padding-bottom: 15px; - } - .noke-responsive-nav { - display: block; - } - .noke-responsive-nav .noke-responsive-menu { - position: relative; - } - .noke-responsive-nav .noke-responsive-menu.mean-container .mean-nav { - margin-top: 63px; - background-color: var(--whiteColor); - } - .noke-responsive-nav .noke-responsive-menu.mean-container .mean-nav ul { - font-size: 14px; - border: none !important; - } - .noke-responsive-nav .noke-responsive-menu.mean-container .mean-nav ul li a { - color: var(--blackColor); - border-top-color: #DBEEFD; - text-transform: unset; - font-weight: 500; - } - .noke-responsive-nav .noke-responsive-menu.mean-container .mean-nav ul li a i { - display: none; - } - .noke-responsive-nav .noke-responsive-menu.mean-container .mean-nav ul li a.mean-expand { - width: 50%; - height: 28px; - text-align: end; - padding: 11px !important; - background: transparent !important; - border-left: none !important; - border-bottom: none !important; - } - .noke-responsive-nav .noke-responsive-menu.mean-container .mean-nav ul li a.active { - color: var(--startupMainColor); - } - .noke-responsive-nav .noke-responsive-menu.mean-container .mean-nav ul li li a { - font-size: 14px; - } - .noke-responsive-nav .noke-responsive-menu.mean-container .navbar-nav { - height: 301px; - overflow-y: scroll; - -webkit-box-shadow: 0 7px 13px 0 rgba(0, 0, 0, 0.1); - box-shadow: 0 7px 13px 0 rgba(0, 0, 0, 0.1); - } - .noke-responsive-nav .mean-container a.meanmenu-reveal { - top: 0; - padding: 0; - width: 35px; - height: 30px; - padding-top: 13px; - color: var(--blackColor); - font-family: var(--fontFamily); - } - .noke-responsive-nav .mean-container a.meanmenu-reveal span { - background: var(--blackColor); - height: 4px; - margin-top: -6px; - border-radius: 3px; - position: relative; - top: 8px; - } - .noke-responsive-nav .mean-container .mean-bar { - background: transparent; - position: absolute; - z-index: 999; - padding: 0; - } - .noke-responsive-nav .mean-container .navbar-nav .nav-item.megamenu .dropdown-menu .nav-item { - width: 90%; - overflow: hidden; - padding: 1em 5% 5px; - } - .noke-responsive-nav .mean-container .navbar-nav .nav-item.megamenu .dropdown-menu .nav-item .row { - display: block; - -ms-flex-wrap: unset; - flex-wrap: unset; - margin-left: 0; - margin-right: 0; - margin-top: -20px; - } - .noke-responsive-nav .mean-container .navbar-nav .nav-item.megamenu .dropdown-menu .nav-item .row .col { - -ms-flex-preferred-size: unset; - flex-basis: unset; - -webkit-box-flex: unset; - -ms-flex-positive: unset; - flex-grow: unset; - max-width: 100%; - padding-left: 0; - padding-right: 0; - padding-top: 20px; - } - .noke-responsive-nav .mean-container .navbar-nav .nav-item.megamenu .dropdown-menu .nav-item .row .col:last-child { - margin-bottom: 15px; - } - .noke-responsive-nav .mean-container .navbar-nav .nav-item.megamenu .dropdown-menu .nav-item a { - width: 100%; - float: unset; - display: block; - } - .noke-responsive-nav .mean-container .navbar-nav .nav-item.megamenu .dropdown-menu .nav-item a.p-0 { - border: none !important; - margin-top: 15px; - } - .noke-responsive-nav .mean-container .navbar-nav .nav-item.megamenu .dropdown-menu .submenu-title { - position: relative; - padding-bottom: 8px; - color: var(--blackColor); - text-transform: uppercase; - border-bottom: 1px solid #eeeeee; - margin-bottom: 5px; - margin-top: 25px; - margin-left: 0; - margin-right: 0; - font-size: 12.5px; - font-weight: 600; - } - .noke-responsive-nav .mean-container .navbar-nav .nav-item.megamenu .dropdown-menu .submenu-title::before { - width: 30px; - height: 1px; - content: ''; - position: absolute; - left: 0; - bottom: -1px; - background-color: var(--startupMainColor); - } - .noke-responsive-nav .mean-container .navbar-nav .nav-item.megamenu .dropdown-menu .submenu-title:first-child { - margin-top: 0; - } - .noke-responsive-nav .mean-container .navbar-nav .nav-item.megamenu .dropdown-menu a { - border-bottom: none !important; - } - .noke-responsive-nav .mean-container .navbar-nav .nav-item.megamenu .dropdown-menu .mean-expand { - display: none !important; - } - .noke-responsive-nav .mean-container .navbar-nav .nav-item.megamenu .dropdown-menu .megamenu-submenu { - width: auto; - overflow: hidden; - display: block !important; - padding-left: 0; - padding-right: 0; - } - .noke-responsive-nav .mean-container .navbar-nav .nav-item.megamenu .dropdown-menu .megamenu-submenu li a { - padding: 0; - border: none; - margin-top: 15px; - font-weight: 500; - color: var(--blackColor); - } - .noke-responsive-nav .mean-container .navbar-nav .nav-item.megamenu .dropdown-menu .megamenu-submenu li a:hover, .noke-responsive-nav .mean-container .navbar-nav .nav-item.megamenu .dropdown-menu .megamenu-submenu li a.active { - color: var(--startupMainColor); - } - .noke-responsive-nav .dropdown-toggle::after { - display: none !important; - } - .noke-responsive-nav .others-option { - display: none !important; - position: absolute; - right: 60px; - top: 16px; - } - .noke-responsive-nav .others-option .option-item { - position: relative; - margin-left: 20px; - display: inline-block; - } - .noke-responsive-nav .others-option .option-item:first-child { - margin-left: 0; - } - .noke-responsive-nav .others-option .option-item .search-icon { - line-height: 1; - font-size: 18px; - cursor: pointer; - display: inline-block; - color: var(--blackColor); - -webkit-transition: var(--transition); - transition: var(--transition); - border-right: 1px solid rgba(0, 0, 0, 0.2); - padding-right: 20px; - } - .noke-responsive-nav .others-option .option-item .search-icon:hover { - color: var(--startupMainColor); - } - .noke-responsive-nav .others-option .option-item .social-links { - position: relative; - top: -1px; - } - .noke-responsive-nav .others-option .option-item .social-links span { - display: inline-block; - margin-left: 15px; - line-height: 1; - } - .noke-responsive-nav .others-option .option-item .social-links span a { - font-size: 17px; - display: block; - } - .noke-responsive-nav .others-option .option-item .social-links span a:hover { - color: var(--startupMainColor); - } - .noke-responsive-nav .others-option .option-item .social-links span:first-child { - margin-left: 0; - } - .noke-responsive-nav .others-option .search-box { - position: relative; - width: 250px; - top: -7px; - } - .noke-responsive-nav .others-option .search-box .input-search { - display: block; - width: 100%; - background-color: transparent; - border: none; - border-bottom: 1px solid #eeeeee; - height: auto; - padding-bottom: 8px; - font-size: 14px; - color: var(--blackColor); - -webkit-transition: var(--transition); - transition: var(--transition); - } - .noke-responsive-nav .others-option .search-box .input-search::-webkit-input-placeholder { - -webkit-transition: var(--transition); - transition: var(--transition); - color: var(--optionalColor); - } - .noke-responsive-nav .others-option .search-box .input-search:-ms-input-placeholder { - -webkit-transition: var(--transition); - transition: var(--transition); - color: var(--optionalColor); - } - .noke-responsive-nav .others-option .search-box .input-search::-ms-input-placeholder { - -webkit-transition: var(--transition); - transition: var(--transition); - color: var(--optionalColor); - } - .noke-responsive-nav .others-option .search-box .input-search::placeholder { - -webkit-transition: var(--transition); - transition: var(--transition); - color: var(--optionalColor); - } - .noke-responsive-nav .others-option .search-box .input-search:focus { - border-color: var(--startupMainColor); - } - .noke-responsive-nav .others-option .search-box .input-search:focus::-webkit-input-placeholder { - color: transparent; - } - .noke-responsive-nav .others-option .search-box .input-search:focus:-ms-input-placeholder { - color: transparent; - } - .noke-responsive-nav .others-option .search-box .input-search:focus::-ms-input-placeholder { - color: transparent; - } - .noke-responsive-nav .others-option .search-box .input-search:focus::placeholder { - color: transparent; - } - .noke-responsive-nav .others-option .search-box button { - position: absolute; - right: 0; - top: 0; - background-color: transparent; - border: none; - color: var(--optionalColor); - -webkit-transition: var(--transition); - transition: var(--transition); - } - .noke-responsive-nav .others-option .search-box button:hover { - color: var(--startupMainColor); - } - .noke-responsive-nav .others-option .lang-switcher { - top: -2px; - position: relative; - padding-left: 25px; - position: relative; - margin-left: -10px; - border-left: 1px solid rgba(0, 0, 0, 0.2); - } - .noke-responsive-nav .others-option .lang-switcher label { - display: block; - margin-bottom: 0; - position: absolute; - left: 10px; - top: 0; - } - .noke-responsive-nav .others-option .lang-switcher select { - background-color: transparent; - cursor: pointer; - border: none; - margin-top: -3px; - } - .noke-responsive-nav .others-option .link-btn { - display: inline-block; - font-size: 18px; - line-height: 1; - } - .noke-responsive-nav .others-option .icon-btn { - position: relative; - font-size: 18px; - line-height: 1; - padding-right: 10px; - margin-left: 5px; - } - .noke-responsive-nav .others-option .icon-btn span { - display: inline-block; - position: absolute; - right: 0; - top: -5px; - width: 16px; - height: 16px; - border-radius: 50%; - background-color: red; - text-align: center; - line-height: 17px; - color: var(--whiteColor); - font-weight: 700; - font-size: 9px; - } - .noke-responsive-nav .logo { - position: relative; - width: 60%; - z-index: 999; - } - .noke-nav { - display: none; - } - .others-option-for-responsive { - display: block; - } - .marketing-color .noke-responsive-nav .noke-responsive-menu.mean-container .mean-nav ul li a.active { - color: var(--marketingMainColor); - } - .marketing-color .noke-responsive-nav .mean-container .navbar-nav .nav-item.megamenu .dropdown-menu .submenu-title::before { - background-color: var(--marketingMainColor); - } - .marketing-color .noke-responsive-nav .mean-container .navbar-nav .nav-item.megamenu .dropdown-menu .megamenu-submenu li a:hover, .marketing-color .noke-responsive-nav .mean-container .navbar-nav .nav-item.megamenu .dropdown-menu .megamenu-submenu li a.active { - color: var(--marketingMainColor); - } - .marketing-color .noke-responsive-nav .others-option .option-item .search-icon:hover { - color: var(--marketingMainColor); - } - .marketing-color .noke-responsive-nav .others-option .option-item .social-links span a:hover { - color: var(--marketingMainColor); - } - .marketing-color .noke-responsive-nav .others-option .search-box .input-search:focus { - border-color: var(--marketingMainColor); - } - .marketing-color .noke-responsive-nav .others-option .search-box button:hover { - color: var(--marketingMainColor); - } - .business-color .noke-responsive-nav .noke-responsive-menu.mean-container .mean-nav ul li a.active { - color: var(--businessMainColor); - } - .business-color .noke-responsive-nav .mean-container .navbar-nav .nav-item.megamenu .dropdown-menu .submenu-title::before { - background-color: var(--businessMainColor); - } - .business-color .noke-responsive-nav .mean-container .navbar-nav .nav-item.megamenu .dropdown-menu .megamenu-submenu li a:hover, .business-color .noke-responsive-nav .mean-container .navbar-nav .nav-item.megamenu .dropdown-menu .megamenu-submenu li a.active { - color: var(--businessMainColor); - } - .business-color .noke-responsive-nav .others-option .option-item .search-icon:hover { - color: var(--businessMainColor); - } - .business-color .noke-responsive-nav .others-option .option-item .social-links span a:hover { - color: var(--businessMainColor); - } - .business-color .noke-responsive-nav .others-option .search-box .input-search:focus { - border-color: var(--businessMainColor); - } - .business-color .noke-responsive-nav .others-option .search-box button:hover { - color: var(--businessMainColor); - } - .app-color .noke-responsive-nav .noke-responsive-menu.mean-container .mean-nav ul li a.active { - color: var(--appMainColor); - } - .app-color .noke-responsive-nav .mean-container .navbar-nav .nav-item.megamenu .dropdown-menu .submenu-title::before { - background-color: var(--appMainColor); - } - .app-color .noke-responsive-nav .mean-container .navbar-nav .nav-item.megamenu .dropdown-menu .megamenu-submenu li a:hover, .app-color .noke-responsive-nav .mean-container .navbar-nav .nav-item.megamenu .dropdown-menu .megamenu-submenu li a.active { - color: var(--appMainColor); - } - .app-color .noke-responsive-nav .others-option .option-item .search-icon:hover { - color: var(--appMainColor); - } - .app-color .noke-responsive-nav .others-option .option-item .social-links span a:hover { - color: var(--appMainColor); - } - .app-color .noke-responsive-nav .others-option .search-box .input-search:focus { - border-color: var(--appMainColor); - } - .app-color .noke-responsive-nav .others-option .search-box button:hover { - color: var(--appMainColor); - } - .it-agency-color .noke-responsive-nav .noke-responsive-menu.mean-container .mean-nav ul li a.active { - color: var(--itAgencyMainColor); - } - .it-agency-color .noke-responsive-nav .mean-container .navbar-nav .nav-item.megamenu .dropdown-menu .submenu-title::before { - background-color: var(--itAgencyMainColor); - } - .it-agency-color .noke-responsive-nav .mean-container .navbar-nav .nav-item.megamenu .dropdown-menu .megamenu-submenu li a:hover, .it-agency-color .noke-responsive-nav .mean-container .navbar-nav .nav-item.megamenu .dropdown-menu .megamenu-submenu li a.active { - color: var(--itAgencyMainColor); - } - .it-agency-color .noke-responsive-nav .others-option .option-item .search-icon:hover { - color: var(--itAgencyMainColor); - } - .it-agency-color .noke-responsive-nav .others-option .option-item .social-links span a:hover { - color: var(--itAgencyMainColor); - } - .it-agency-color .noke-responsive-nav .others-option .search-box .input-search:focus { - border-color: var(--itAgencyMainColor); - } - .it-agency-color .noke-responsive-nav .others-option .search-box button:hover { - color: var(--itAgencyMainColor); - } - .consulting-color .noke-responsive-nav .noke-responsive-menu.mean-container .mean-nav ul li a.active { - color: var(--consultingMainColor); - } - .consulting-color .noke-responsive-nav .mean-container .navbar-nav .nav-item.megamenu .dropdown-menu .submenu-title::before { - background-color: var(--consultingMainColor); - } - .consulting-color .noke-responsive-nav .mean-container .navbar-nav .nav-item.megamenu .dropdown-menu .megamenu-submenu li a:hover, .consulting-color .noke-responsive-nav .mean-container .navbar-nav .nav-item.megamenu .dropdown-menu .megamenu-submenu li a.active { - color: var(--consultingMainColor); - } - .consulting-color .noke-responsive-nav .others-option .option-item .search-icon:hover { - color: var(--consultingMainColor); - } - .consulting-color .noke-responsive-nav .others-option .option-item .social-links span a:hover { - color: var(--consultingMainColor); - } - .consulting-color .noke-responsive-nav .others-option .search-box .input-search:focus { - border-color: var(--consultingMainColor); - } - .consulting-color .noke-responsive-nav .others-option .search-box button:hover { - color: var(--consultingMainColor); - } - .saas-color .noke-responsive-nav .noke-responsive-menu.mean-container .mean-nav ul li a.active { - color: var(--saasMainColor); - } - .saas-color .noke-responsive-nav .mean-container .navbar-nav .nav-item.megamenu .dropdown-menu .submenu-title::before { - background-color: var(--saasMainColor); - } - .saas-color .noke-responsive-nav .mean-container .navbar-nav .nav-item.megamenu .dropdown-menu .megamenu-submenu li a:hover, .saas-color .noke-responsive-nav .mean-container .navbar-nav .nav-item.megamenu .dropdown-menu .megamenu-submenu li a.active { - color: var(--saasMainColor); - } - .saas-color .noke-responsive-nav .others-option .option-item .search-icon:hover { - color: var(--saasMainColor); - } - .saas-color .noke-responsive-nav .others-option .option-item .social-links span a:hover { - color: var(--saasMainColor); - } - .saas-color .noke-responsive-nav .others-option .search-box .input-search:focus { - border-color: var(--saasMainColor); - } - .saas-color .noke-responsive-nav .others-option .search-box button:hover { - color: var(--saasMainColor); - } - .shop-color .noke-responsive-nav .noke-responsive-menu.mean-container .mean-nav ul li a.active { - color: var(--shopMainColor); - } - .shop-color .noke-responsive-nav .mean-container .navbar-nav .nav-item.megamenu .dropdown-menu .submenu-title::before { - background-color: var(--shopMainColor); - } - .shop-color .noke-responsive-nav .mean-container .navbar-nav .nav-item.megamenu .dropdown-menu .megamenu-submenu li a:hover, .shop-color .noke-responsive-nav .mean-container .navbar-nav .nav-item.megamenu .dropdown-menu .megamenu-submenu li a.active { - color: var(--shopMainColor); - } - .shop-color .noke-responsive-nav .others-option .option-item .search-icon:hover { - color: var(--shopMainColor); - } - .shop-color .noke-responsive-nav .others-option .option-item .social-links span a:hover { - color: var(--shopMainColor); - } - .shop-color .noke-responsive-nav .others-option .search-box .input-search:focus { - border-color: var(--shopMainColor); - } - .shop-color .noke-responsive-nav .others-option .search-box button:hover { - color: var(--shopMainColor); - } - .blog-color .noke-responsive-nav .noke-responsive-menu.mean-container .mean-nav ul li a.active { - color: var(--personalPortfolioMainColor); - } - .blog-color .noke-responsive-nav .mean-container .navbar-nav .nav-item.megamenu .dropdown-menu .submenu-title::before { - background-color: var(--personalPortfolioMainColor); - } - .blog-color .noke-responsive-nav .mean-container .navbar-nav .nav-item.megamenu .dropdown-menu .megamenu-submenu li a:hover, .blog-color .noke-responsive-nav .mean-container .navbar-nav .nav-item.megamenu .dropdown-menu .megamenu-submenu li a.active { - color: var(--personalPortfolioMainColor); - } - .blog-color .noke-responsive-nav .others-option .option-item .search-icon:hover { - color: var(--personalPortfolioMainColor); - } - .blog-color .noke-responsive-nav .others-option .option-item .social-links span a:hover { - color: var(--personalPortfolioMainColor); - } - .blog-color .noke-responsive-nav .others-option .search-box .input-search:focus { - border-color: var(--personalPortfolioMainColor); - } - .blog-color .noke-responsive-nav .others-option .search-box button:hover { - color: var(--personalPortfolioMainColor); - } - .personal-portfolio-color .noke-responsive-nav .noke-responsive-menu.mean-container .mean-nav ul li a.active { - color: var(--personalPortfolioMainColor); - } - .personal-portfolio-color .noke-responsive-nav .mean-container .navbar-nav .nav-item.megamenu .dropdown-menu .submenu-title::before { - background-color: var(--personalPortfolioMainColor); - } - .personal-portfolio-color .noke-responsive-nav .mean-container .navbar-nav .nav-item.megamenu .dropdown-menu .megamenu-submenu li a:hover, .personal-portfolio-color .noke-responsive-nav .mean-container .navbar-nav .nav-item.megamenu .dropdown-menu .megamenu-submenu li a.active { - color: var(--personalPortfolioMainColor); - } - .personal-portfolio-color .noke-responsive-nav .others-option .option-item .search-icon:hover { - color: var(--personalPortfolioMainColor); - } - .personal-portfolio-color .noke-responsive-nav .others-option .option-item .social-links span a:hover { - color: var(--personalPortfolioMainColor); - } - .personal-portfolio-color .noke-responsive-nav .others-option .search-box .input-search:focus { - border-color: var(--personalPortfolioMainColor); - } - .personal-portfolio-color .noke-responsive-nav .others-option .search-box button:hover { - color: var(--personalPortfolioMainColor); - } - .minimal-portfolio-color .noke-responsive-nav .noke-responsive-menu.mean-container .mean-nav ul li a.active { - color: var(--minimalPortfolioColor); - } - .minimal-portfolio-color .noke-responsive-nav .mean-container .navbar-nav .nav-item.megamenu .dropdown-menu .submenu-title::before { - background-color: var(--minimalPortfolioColor); - } - .minimal-portfolio-color .noke-responsive-nav .mean-container .navbar-nav .nav-item.megamenu .dropdown-menu .megamenu-submenu li a:hover, .minimal-portfolio-color .noke-responsive-nav .mean-container .navbar-nav .nav-item.megamenu .dropdown-menu .megamenu-submenu li a.active { - color: var(--minimalPortfolioColor); - } - .minimal-portfolio-color .noke-responsive-nav .others-option .option-item .search-icon:hover { - color: var(--minimalPortfolioColor); - } - .minimal-portfolio-color .noke-responsive-nav .others-option .option-item .social-links span a:hover { - color: var(--minimalPortfolioColor); - } - .minimal-portfolio-color .noke-responsive-nav .others-option .search-box .input-search:focus { - border-color: var(--minimalPortfolioColor); - } - .minimal-portfolio-color .noke-responsive-nav .others-option .search-box button:hover { - color: var(--minimalPortfolioColor); - } -} - -/*================================================ -Search Overlay CSS -=================================================*/ -.search-overlay { - position: fixed; - top: 0; - right: 0; - bottom: 0; - left: 0; - z-index: 99999; - opacity: 0; - visibility: hidden; - -webkit-transition: all 0.3s ease-in-out; - transition: all 0.3s ease-in-out; - overflow: hidden; -} - -.search-overlay .search-overlay-layer { - position: absolute; - top: 0; - right: 0; - bottom: 0; - z-index: 1; - -webkit-transform: translateX(100%); - transform: translateX(100%); -} - -.search-overlay .search-overlay-layer:nth-child(1) { - left: 0; - background-color: rgba(0, 0, 0, 0.5); - -webkit-transition: all 0.3s ease-in-out 0s; - transition: all 0.3s ease-in-out 0s; -} - -.search-overlay .search-overlay-layer:nth-child(2) { - left: 0; - background-color: rgba(0, 0, 0, 0.4); - -webkit-transition: all 0.3s ease-in-out 0.3s; - transition: all 0.3s ease-in-out 0.3s; -} - -.search-overlay .search-overlay-layer:nth-child(3) { - left: 0; - background-color: rgba(0, 0, 0, 0.7); - -webkit-transition: all 0.9s ease-in-out 0.6s; - transition: all 0.9s ease-in-out 0.6s; -} - -.search-overlay .search-overlay-close { - position: absolute; - top: 40px; - right: 40px; - width: 50px; - z-index: 2; - text-align: center; - cursor: pointer; - padding: 10px; - -webkit-transition: all 0.9s ease-in-out 1.5s; - transition: all 0.9s ease-in-out 1.5s; - opacity: 0; - visibility: hidden; -} - -.search-overlay .search-overlay-close .search-overlay-close-line { - width: 100%; - height: 3px; - float: left; - margin-bottom: 5px; - background-color: var(--whiteColor); - -webkit-transition: all 500ms ease; - transition: all 500ms ease; -} - -.search-overlay .search-overlay-close .search-overlay-close-line:nth-child(1) { - -webkit-transform: rotate(45deg); - transform: rotate(45deg); -} - -.search-overlay .search-overlay-close .search-overlay-close-line:nth-child(2) { - margin-top: -7px; - -webkit-transform: rotate(-45deg); - transform: rotate(-45deg); -} - -.search-overlay .search-overlay-close:hover .search-overlay-close-line { - background: red; - -webkit-transform: rotate(180deg); - transform: rotate(180deg); -} - -.search-overlay .search-overlay-form { - -webkit-transform: translateY(-50%) translateX(-50%); - transform: translateY(-50%) translateX(-50%); - -webkit-transition: all 0.9s ease-in-out 1.4s; - transition: all 0.9s ease-in-out 1.4s; - visibility: hidden; - position: absolute; - max-width: 600px; - width: 600px; - opacity: 0; - z-index: 2; - left: 50%; - top: 50%; -} - -.search-overlay .search-overlay-form form { - position: relative; -} - -.search-overlay .search-overlay-form form .input-search { - display: block; - width: 100%; - height: 70px; - border: none; - background-color: transparent; - color: var(--whiteColor); - padding: 0; - -webkit-transition: var(--transition); - transition: var(--transition); - border-bottom: 1px solid rgba(255, 255, 255, 0.4); - font-size: 22px; - font-weight: 500; -} - -.search-overlay .search-overlay-form form .input-search::-webkit-input-placeholder { - -webkit-transition: var(--transition); - transition: var(--transition); - color: rgba(255, 255, 255, 0.6); - font-weight: 100; -} - -.search-overlay .search-overlay-form form .input-search:-ms-input-placeholder { - -webkit-transition: var(--transition); - transition: var(--transition); - color: rgba(255, 255, 255, 0.6); - font-weight: 100; -} - -.search-overlay .search-overlay-form form .input-search::-ms-input-placeholder { - -webkit-transition: var(--transition); - transition: var(--transition); - color: rgba(255, 255, 255, 0.6); - font-weight: 100; -} - -.search-overlay .search-overlay-form form .input-search::placeholder { - -webkit-transition: var(--transition); - transition: var(--transition); - color: rgba(255, 255, 255, 0.6); - font-weight: 100; -} - -.search-overlay .search-overlay-form form .input-search:focus { - border-color: var(--whiteColor); -} - -.search-overlay .search-overlay-form form .input-search:focus::-webkit-input-placeholder { - color: transparent; -} - -.search-overlay .search-overlay-form form .input-search:focus:-ms-input-placeholder { - color: transparent; -} - -.search-overlay .search-overlay-form form .input-search:focus::-ms-input-placeholder { - color: transparent; -} - -.search-overlay .search-overlay-form form .input-search:focus::placeholder { - color: transparent; -} - -.search-overlay .search-overlay-form form button { - position: absolute; - right: 0; - top: 13px; - color: var(--whiteColor); - -webkit-transition: var(--transition); - transition: var(--transition); - background-color: transparent; - border: none; - font-size: 25px; - opacity: 0.7; -} - -.search-overlay .search-overlay-form form button:hover { - opacity: 1; -} - -.search-overlay.search-overlay-active.search-overlay { - opacity: 1; - visibility: visible; -} - -.search-overlay.search-overlay-active.search-overlay .search-overlay-layer { - -webkit-transform: translateX(0); - transform: translateX(0); -} - -.search-overlay.search-overlay-active.search-overlay .search-overlay-close { - opacity: 1; - visibility: visible; -} - -.search-overlay.search-overlay-active.search-overlay .search-overlay-form { - opacity: 1; - visibility: visible; -} - -/*================================================ -Startup Banner Area CSS -=================================================*/ -.startup-banner-area .container-fluid { - max-width: 1400px; -} - -.startup-banner-inner { - position: relative; - z-index: 1; - padding-top: 140px; - padding-bottom: 140px; - padding-left: 100px; - padding-right: 100px; -} - -.startup-banner-content { - padding-right: 15px; -} - -.startup-banner-content .sub-title { - display: block; - margin-bottom: 10px; - color: var(--startupMainColor); - font-family: var(--headingFontFamily); - font-weight: 600; - font-size: 14px; -} - -.startup-banner-content h1 { - margin-bottom: 25px; - font-size: 60px; -} - -.startup-banner-content p { - max-width: 580px; -} - -.startup-banner-content .default-btn { - margin-top: 10px; -} - -.startup-banner-image { - text-align: center; - padding-left: 15px; -} - -/*================================================ -Marketing Banner Area CSS -=================================================*/ -.marketing-banner-area { - z-index: 1; - position: relative; - border-top: 1px solid #f0f0f0; - border-bottom: 1px solid #f0f0f0; - padding-top: 80px; - padding-bottom: 80px; -} - -.marketing-banner-content { - padding-right: 25px; -} - -.marketing-banner-content .sub-title { - display: block; - margin-bottom: 10px; - color: var(--marketingMainColor); - font-family: var(--headingFontFamily); - font-weight: 600; - font-size: 14px; -} - -.marketing-banner-content h1 { - margin-bottom: 25px; - font-size: 60px; -} - -.marketing-banner-content p { - max-width: 550px; -} - -.marketing-banner-content .default-btn { - margin-top: 10px; -} - -.marketing-banner-image { - text-align: center; -} - -/*================================================ -Business Banner Area CSS -=================================================*/ -.business-banner-area { - z-index: 1; - position: relative; - padding-top: 100px; - padding-bottom: 100px; -} - -.business-banner-area::before { - -webkit-animation: moveleftbounce 5s linear infinite; - animation: moveleftbounce 5s linear infinite; - position: absolute; - left: 0; - right: 0; - top: 0; - bottom: 0; - z-index: -1; - content: ''; - margin-left: 20px; - margin-right: 20px; - background-image: url(../../assets/img/bg2.jpg); - background-position: center center; - background-repeat: no-repeat; - background-size: cover; -} - -.business-banner-area .container { - max-width: 1400px; -} - -.business-banner-content { - padding-right: 25px; - max-width: 745px; -} - -.business-banner-content .sub-title { - display: block; - margin-bottom: 10px; - color: var(--businessMainColor); - font-family: var(--headingFontFamily); - font-weight: 600; - font-size: 14px; -} - -.business-banner-content h1 { - margin-bottom: 25px; - font-size: 60px; -} - -.business-banner-content p { - max-width: 550px; -} - -.business-banner-content .default-btn { - margin-top: 10px; -} - -.business-banner-image { - text-align: center; -} - -.business-banner-image img { - border-radius: 0 0 0 100px; -} - -/*================================================ -App Banner Area CSS -=================================================*/ -.app-banner-area { - z-index: 1; - position: relative; - background: var(--appGradientColor); - background-image: url(../../assets/img/bg3.jpg); - background-position: center center; - background-repeat: no-repeat; - background-size: cover; - padding-top: 100px; - padding-bottom: 100px; -} - -.app-banner-area .container { - max-width: 1450px; -} - -.app-banner-content h1 { - margin-bottom: 25px; - font-size: 60px; - color: var(--whiteColor); -} - -.app-banner-content p { - max-width: 550px; - color: var(--whiteColor); -} - -.app-banner-content .btn-box { - margin-top: 35px; -} - -.app-banner-content .btn-box .store-btn { - display: inline-block; - background-color: var(--whiteColor); - position: relative; - color: var(--optionalColor); - padding: 11px 25px 11px 65px; - margin-right: 15px; - border-radius: 5px; - font-size: 13.5px; - font-weight: 600; -} - -.app-banner-content .btn-box .store-btn img { - position: absolute; - left: 15px; - top: 50%; - -webkit-transform: translateY(-50%); - transform: translateY(-50%); - color: var(--blackColor); - font-size: 40px; - font-weight: normal; -} - -.app-banner-content .btn-box .store-btn span { - display: block; - color: var(--blackColor); - margin-top: 2px; - font-size: 18px; - font-weight: 700; -} - -.app-banner-content .btn-box .store-btn:last-child { - margin-right: 0; -} - -.app-banner-image { - text-align: center; - padding-left: 15px; -} - -/*================================================ -Saas Banner Area CSS -=================================================*/ -.saas-banner-area { - background-color: #06080e; - padding-top: 80px; -} - -.saas-banner-area .container-fluid { - padding-right: 30px; - padding-left: 30px; -} - -.saas-banner-content { - margin-left: auto; - max-width: 710px; -} - -.saas-banner-content h1 { - color: var(--whiteColor); - margin-bottom: 25px; - font-size: 64px; -} - -.saas-banner-content p { - opacity: 0.9; - max-width: 535px; - color: var(--whiteColor); -} - -.saas-banner-content .default-btn { - margin-top: 10px; -} - -.saas-banner-image { - text-align: center; -} - -/*================================================ -Personal Portfolio Banner Area CSS -=================================================*/ -.personal-portfolio-banner-area { - border-bottom: 1px solid #f0f0f0; - position: relative; - z-index: 1; - padding-top: 100px; - padding-bottom: 100px; -} - -.personal-portfolio-banner-area .container { - max-width: 1450px; -} - -.personal-portfolio-banner-content .sub-title { - display: block; - position: relative; - padding-left: 65px; - margin-bottom: 12px; - font-size: 20px; - font-weight: 500; -} - -.personal-portfolio-banner-content .sub-title::before { - left: 0; - top: 50%; - width: 50px; - height: 1px; - content: ''; - position: absolute; - -webkit-transform: translateY(-50%); - transform: translateY(-50%); - background-color: var(--personalPortfolioMainColor); -} - -.personal-portfolio-banner-content h1 { - margin-bottom: 15px; - font-size: 80px; - font-weight: 700; -} - -.personal-portfolio-banner-content h4 { - margin-bottom: 20px; - font-size: 40px; - font-weight: 500; -} - -.personal-portfolio-banner-content p { - max-width: 535px; -} - -.personal-portfolio-banner-content .default-btn { - margin-top: 10px; -} - -.personal-portfolio-banner-image { - text-align: center; -} - -/*================================================ -Consulting Banner Area CSS -=================================================*/ -.consulting-banner-area { - position: relative; - z-index: 1; - background-size: cover; - background-repeat: no-repeat; - background-position: left center; - background-image: url(../../assets/img/consulting-banner-bg.jpg); - padding-top: 300px; - padding-bottom: 180px; -} - -.consulting-banner-area .container { - max-width: 1450px; -} - -.consulting-banner-area::before { - content: ''; - position: absolute; - left: 0; - right: 0; - top: 0; - bottom: 0; - z-index: -1; - background-color: var(--whiteColor); - opacity: 0.85; - display: none; -} - -.consulting-banner-content { - max-width: 790px; -} - -.consulting-banner-content h1 { - margin-bottom: 25px; - font-size: 50px; - font-weight: 700; -} - -.consulting-banner-content p { - max-width: 580px; -} - -.consulting-banner-content .default-btn { - margin-top: 15px; -} - -/*================================================ -IT Agency Banner Area CSS -=================================================*/ -.it-agency-banner-area .it-agency-inner-banner { - position: relative; - z-index: 1; - background-image: url(../../assets/img/it-agency-banner-bg.jpg); - background-position: center center; - background-size: cover; - background-repeat: no-repeat; - padding-top: 280px; - padding-bottom: 330px; -} - -.it-agency-banner-area .it-agency-inner-banner::before { - content: ''; - position: absolute; - left: 0; - right: 0; - top: 0; - bottom: 0; - z-index: -1; - background-color: #000000; - opacity: 0.8; -} - -.it-agency-banner-content { - max-width: 1000px; - text-align: center; - color: var(--whiteColor); - margin-left: auto; - margin-right: auto; -} - -.it-agency-banner-content h1 { - color: var(--whiteColor); - margin-bottom: 20px; - line-height: 1.3; - font-size: 60px; -} - -.it-agency-banner-content p { - color: var(--whiteColor); - max-width: 600px; - opacity: 0.9; - margin-left: auto; - margin-right: auto; -} - -.it-agency-banner-content .default-btn { - margin-top: 15px; -} - -.banner-video-box { - z-index: 1; - max-width: 1000px; - position: relative; - text-align: center; - border-radius: 10px; - margin-left: auto; - margin-right: auto; - margin-top: -130px; -} - -.banner-video-box img { - border-radius: 10px; -} - -.banner-video-box .video-btn { - top: 50%; - left: 50%; - width: 80px; - height: 80px; - font-size: 30px; - border-radius: 50%; - position: absolute; - display: inline-block; - color: var(--whiteColor); - background-color: rgba(255, 74, 23, 0.75); - -webkit-transform: translateY(-50%) translateX(-50%); - transform: translateY(-50%) translateX(-50%); -} - -.banner-video-box .video-btn i { - position: absolute; - left: 0; - right: 0; - top: 50%; - -webkit-transform: translateY(-50%); - transform: translateY(-50%); -} - -.banner-video-box .video-btn::after, .banner-video-box .video-btn::before { - content: ''; - display: block; - position: absolute; - top: 0; - right: 0; - z-index: -1; - bottom: 0; - left: 0; - border-radius: 50%; - border: 1.5px solid var(--whiteColor); -} - -.banner-video-box .video-btn::before { - -webkit-animation: ripple 2s linear infinite; - animation: ripple 2s linear infinite; -} - -.banner-video-box .video-btn::after { - -webkit-animation: ripple 2s linear 1s infinite; - animation: ripple 2s linear 1s infinite; -} - -/*================================================ -Shop Banner Area CSS -=================================================*/ -.shop-banner-area { - padding-top: 200px; - padding-bottom: 200px; - background-image: url(../../assets/img/shop-banner-bg.jpg); - background-position: top center; - background-repeat: no-repeat; - background-size: cover; -} - -.shop-banner-content .sub-title { - display: block; - font-size: 30px; - margin-bottom: 8px; -} - -.shop-banner-content h1 { - margin-bottom: 15px; - font-size: 60px; - font-weight: 700; -} - -.shop-banner-content h4 { - margin-bottom: 0; - font-size: 30px; -} - -.shop-banner-content .default-btn { - margin-top: 30px; -} - -/*================================================ -Blog Banner Area CSS -=================================================*/ -.blog-banner-area { - background-image: url(../../assets/img/bg11.jpg); - background-position: center center; - background-repeat: no-repeat; - background-size: cover; - padding-top: 100px; - padding-bottom: 100px; -} - -.blog-banner-item { - position: relative; - text-align: center; - overflow: hidden; -} - -.blog-banner-item img { - -webkit-transition: var(--transition); - transition: var(--transition); -} - -.blog-banner-item .content { - position: absolute; - top: 50%; - -webkit-transform: translateY(-50%); - transform: translateY(-50%); - left: 0; - right: 0; - padding: 30px; - background-color: rgba(255, 255, 255, 0.9); - max-width: 525px; - margin-left: auto; - margin-right: auto; -} - -.blog-banner-item .content .tag { - display: inline-block; - margin-bottom: 12px; - font-weight: 500; -} - -.blog-banner-item .content h3 { - font-size: 25px; - line-height: 1.4; - margin-bottom: 12px; -} - -.blog-banner-item .content p { - margin-bottom: 20px; -} - -.blog-banner-item .content .meta { - padding-left: 0; - margin-bottom: 0; - list-style-type: none; -} - -.blog-banner-item .content .meta li a { - display: inline-block; - font-weight: 600; - position: relative; - padding-right: 12px; -} - -.blog-banner-item .content .meta li a i { - position: absolute; - right: 0; - top: 7px; - font-size: 12px; -} - -.blog-banner-item .content .meta li a::before { - content: ''; - position: absolute; - right: 0; - bottom: 0; - width: 0%; - height: 1px; - background-color: var(--blackColor); - -webkit-transition: var(--transition); - transition: var(--transition); -} - -.blog-banner-item .content .meta li a:hover { - padding-right: 15px; - color: var(--blackColor); -} - -.blog-banner-item .content .meta li a:hover::before { - width: 100%; - right: auto; - left: 0; -} - -.blog-banner-item .content .meta li.date { - padding-left: 20px; - position: relative; -} - -.blog-banner-item .content .meta li.date i { - position: absolute; - left: 0; - top: 3px; -} - -.blog-banner-item:hover img { - -webkit-transform: scale(1.1); - transform: scale(1.1); -} - -.blog-banner-item-list { - margin-bottom: -30px; -} - -.blog-banner-item-list .single-blog-banner-item { - margin-bottom: 30px; -} - -.blog-banner-item-list .single-blog-banner-item .row { - margin-left: 0; - margin-right: 0; -} - -.blog-banner-item-list .single-blog-banner-item .row .col-lg-4, .blog-banner-item-list .single-blog-banner-item .row .col-lg-8 { - padding-left: 0; - padding-right: 0; -} - -.blog-banner-item-list .single-blog-banner-item .image { - height: 100%; - position: relative; - background-position: center center; - background-repeat: no-repeat; - background-size: cover; -} - -.blog-banner-item-list .single-blog-banner-item .image.bg1 { - background-image: url(../../assets/img/blog-banner/blog-banner-list1.jpg); -} - -.blog-banner-item-list .single-blog-banner-item .image.bg2 { - background-image: url(../../assets/img/blog-banner/blog-banner-list2.jpg); -} - -.blog-banner-item-list .single-blog-banner-item .image.bg3 { - background-image: url(../../assets/img/blog-banner/blog-banner-list3.jpg); -} - -.blog-banner-item-list .single-blog-banner-item .image.bg4 { - background-image: url(../../assets/img/blog-banner/blog-banner-list4.jpg); -} - -.blog-banner-item-list .single-blog-banner-item .image img { - display: none; -} - -.blog-banner-item-list .single-blog-banner-item .image .link-btn { - position: absolute; - left: 0; - right: 0; - top: 0; - bottom: 0; - display: block; - z-index: 1; -} - -.blog-banner-item-list .single-blog-banner-item .content { - padding-left: 25px; - padding-top: 9.1px; - padding-bottom: 9.1px; -} - -.blog-banner-item-list .single-blog-banner-item .content h3 { - margin-bottom: 15px; - color: var(--whiteColor); - line-height: 1.4; - font-size: 18px; -} - -.blog-banner-item-list .single-blog-banner-item .content h3 a { - color: var(--whiteColor); -} - -.blog-banner-item-list .single-blog-banner-item .content .date { - color: var(--whiteColor); - padding-left: 20px; - position: relative; - opacity: 0.9; -} - -.blog-banner-item-list .single-blog-banner-item .content .date i { - position: absolute; - left: 0; - top: 3px; -} - -/*================================================ -Furniture Banner Area CSS -=================================================*/ -.furniture-banner-item { - padding-top: 200px; - padding-bottom: 200px; - background-position: center center; - background-repeat: no-repeat; - background-size: cover; -} - -.furniture-banner-item.bg-item1 { - background-image: url(../../assets/img/furniture-banner-bg1.jpg); -} - -.furniture-banner-item.bg-item2 { - background-image: url(../../assets/img/furniture-banner-bg2.jpg); -} - -.furniture-banner-item.bg-item3 { - background-image: url(../../assets/img/furniture-banner-bg3.jpg); -} - -.furniture-banner-content { - padding: 40px; - max-width: 560px; - background-color: var(--whiteColor); - border-left: 5px solid var(--blackColor); -} - -.furniture-banner-content h1 { - margin-bottom: 15px; - font-size: 45px; -} - -.furniture-banner-content .default-btn { - margin-top: 10px; -} - -.furniture-banner-slides.owl-theme .owl-nav.disabled + .owl-dots { - margin-top: 0; -} - -.furniture-banner-slides.owl-theme .owl-dots { - position: absolute; - right: 15px; - top: 50%; - -webkit-transform: translateY(-50%); - transform: translateY(-50%); -} - -.furniture-banner-slides.owl-theme .owl-dots .owl-dot { - display: block; - margin-top: 10px; - margin-bottom: 10px; -} - -.furniture-banner-slides.owl-theme .owl-dots .owl-dot span { - margin: 0; - border-radius: 0; - width: 50px; - height: 6px; - background-color: var(--whiteColor); - -webkit-transition: var(--transition); - transition: var(--transition); -} - -.furniture-banner-slides.owl-theme .owl-dots .owl-dot:hover span, .furniture-banner-slides.owl-theme .owl-dots .owl-dot.active span { - background-color: var(--blackColor); -} - -/*================================================ -Minimal Portfolio Banner Area CSS -=================================================*/ -.minimal-portfolio-banner-area { - position: relative; - z-index: 1; - padding-top: 250px; - padding-bottom: 220px; -} - -.minimal-portfolio-banner-content { - text-align: center; - max-width: 770px; - margin-left: auto; - margin-right: auto; -} - -.minimal-portfolio-banner-content .typewrite { - margin-bottom: 30px; - display: inline-block; - color: var(--blackColor); - padding: 8px 20px; - line-height: 1; - letter-spacing: 2px; - background-color: #ebebeb; - font-size: 20px; - font-weight: 300; -} - -.minimal-portfolio-banner-content h1 { - font-size: 60px; - margin-bottom: 40px; - text-shadow: -1px 1px 0 var(--minimalPortfolioColor), 1px 1px 0 var(--startupMainColor), 1px -1px 0 var(--consultingMainColor), -1px -1px 0 var(--itAgencyMainColor); -} - -.scroll-container { - left: 50%; - bottom: 0; - width: 30px; - height: 60px; - position: absolute; - border-radius: 15px; - border: 3px solid #eeeeee; - -webkit-transform: translateX(-50%); - transform: translateX(-50%); -} - -.scroller { - width: 16px; - border-radius: 8px; - background-color: var(--minimalPortfolioColor); - position: absolute; - top: 4px; - left: 4px; - bottom: 34px; - -webkit-animation: scroller 1500ms ease-out infinite; - animation: scroller 1500ms ease-out infinite; -} - -/*================================================ -Features Area CSS -=================================================*/ -.features-area { - position: relative; - z-index: 1; -} - -.features-area.ptb-70 { - padding-bottom: 40px; -} - -.single-features-box { - text-align: center; - margin-bottom: 30px; - -webkit-transition: var(--transition); - transition: var(--transition); - position: relative; - padding-left: 15px; - padding-right: 15px; -} - -.single-features-box .icon { - line-height: 1; - display: block; - font-size: 50px; - margin-bottom: 22px; - -webkit-transition: var(--transition); - transition: var(--transition); -} - -.single-features-box h3 { - font-size: 20px; - margin-bottom: 12px; - -webkit-transition: var(--transition); - transition: var(--transition); -} - -.single-features-box p { - margin-bottom: 0; - -webkit-transition: var(--transition); - transition: var(--transition); -} - -.single-features-box .link-btn { - display: inline-block; - font-weight: 700; - padding-right: 12px; - position: absolute; - left: 50%; - bottom: 0; - opacity: 0; - visibility: hidden; - -webkit-transform: translateX(-50%); - transform: translateX(-50%); -} - -.single-features-box .link-btn i { - position: absolute; - right: 0; - top: 7px; - font-size: 12px; -} - -.single-features-box .link-btn::before { - content: ''; - position: absolute; - right: 0; - bottom: 0; - width: 0%; - height: 2px; - background-color: #eeeeee; - -webkit-transition: var(--transition); - transition: var(--transition); -} - -.single-features-box .link-btn:hover { - color: var(--startupMainColor); - padding-right: 15px; -} - -.single-features-box .link-btn:hover::before { - width: 100%; - right: auto; - left: 0; -} - -.single-features-box:hover .icon { - -webkit-transform: translateY(-20px); - transform: translateY(-20px); - color: var(--startupMainColor); -} - -.single-features-box:hover h3 { - -webkit-transform: translateY(-20px); - transform: translateY(-20px); -} - -.single-features-box:hover p { - -webkit-transform: translateY(-20px); - transform: translateY(-20px); -} - -.single-features-box:hover .link-btn { - opacity: 1; - bottom: -15px; - visibility: visible; -} - -.features-box { - text-align: center; - margin-bottom: 30px; - background-color: var(--whiteColor); - -webkit-box-shadow: 3px 5px 25px 0 rgba(0, 0, 0, 0.1); - box-shadow: 3px 5px 25px 0 rgba(0, 0, 0, 0.1); - padding: 35px 25px; - -webkit-transition: var(--transition); - transition: var(--transition); -} - -.features-box .icon { - display: block; - width: 100px; - height: 100px; - position: relative; - font-size: 55px; - line-height: 100px; - z-index: 1; - color: var(--appMainColor); - border-radius: 10px; - -webkit-transition: var(--transition); - transition: var(--transition); - margin-left: auto; - margin-right: auto; - margin-bottom: 25px; -} - -.features-box .icon::after { - content: ''; - position: absolute; - -webkit-transition: var(--transition); - transition: var(--transition); - left: 0; - right: 0; - top: 0; - bottom: 0; - border-radius: 10px; - z-index: -1; - background-color: var(--appMainColor); - opacity: .10; -} - -.features-box .icon.bg-7669ff { - color: #7669ff; -} - -.features-box .icon.bg-7669ff::after { - background-color: #7669ff; -} - -.features-box .icon.bg-ff9f07 { - color: #ff9f07; -} - -.features-box .icon.bg-ff9f07::after { - background-color: #ff9f07; -} - -.features-box .icon.bg-89c111 { - color: #89c111; -} - -.features-box .icon.bg-89c111::after { - background-color: #89c111; -} - -.features-box .icon.bg-2ea7ff { - color: #2ea7ff; -} - -.features-box .icon.bg-2ea7ff::after { - background-color: #2ea7ff; -} - -.features-box .icon.bg-ca83ff { - color: #ca83ff; -} - -.features-box .icon.bg-ca83ff::after { - background-color: #ca83ff; -} - -.features-box .icon.bg-ff5f5f { - color: #ff5f5f; -} - -.features-box .icon.bg-ff5f5f::after { - background-color: #ff5f5f; -} - -.features-box h3 { - margin-bottom: 12px; - font-size: 20px; -} - -.features-box:hover { - -webkit-transform: translateY(-10px); - transform: translateY(-10px); -} - -.features-box:hover .icon { - color: var(--whiteColor); -} - -.features-box:hover .icon::after { - opacity: 1; -} - -.features-box.without-box-shadow { - -webkit-box-shadow: unset; - box-shadow: unset; -} - -.single-features-item { - margin-bottom: 30px; - position: relative; - padding-left: 70px; -} - -.single-features-item .icon { - position: absolute; - left: 0; - line-height: 1; - top: 0; - font-size: 45px; - color: var(--consultingMainColor); -} - -.single-features-item h3 { - margin-bottom: 0; - font-size: 20px; -} - -.single-features-item.color-white h3 { - color: var(--whiteColor); -} - -.single-features-item.startup-color .icon { - color: var(--startupMainColor); -} - -.features-item { - margin-bottom: 30px; - -webkit-transition: var(--transition); - transition: var(--transition); - border-radius: 10px; - position: relative; - padding: 30px; - z-index: 1; -} - -.features-item .icon { - display: block; - line-height: 1; - -webkit-transition: var(--transition); - transition: var(--transition); - font-size: 35px; - color: var(--itAgencyMainColor); - margin-right: 15px; -} - -.features-item h3 { - -webkit-transition: var(--transition); - transition: var(--transition); - position: relative; - font-size: 20px; - margin-bottom: 0; -} - -.features-item p { - -webkit-transition: var(--transition); - transition: var(--transition); - margin-top: 15px; -} - -.features-item::before { - content: ''; - position: absolute; - left: 0; - right: 0; - top: 0; - bottom: 0; - border-radius: 10px; - background-color: var(--itAgencyMainColor); - z-index: -1; - -webkit-transition: var(--transition); - transition: var(--transition); - opacity: 0.07; -} - -.features-item::after { - content: ''; - position: absolute; - left: 0; - top: 0; - -webkit-transition: .3s; - transition: .3s; - border-radius: 10px; - height: 0; - width: 100%; - z-index: -1; - background: var(--itAgencyGradientColor); -} - -.features-item.bg-6d5fff .icon { - color: #6d5fff; -} - -.features-item.bg-6d5fff::before { - background-color: #6d5fff; -} - -.features-item.bg-ff9f07 .icon { - color: #ff9f07; -} - -.features-item.bg-ff9f07::before { - background-color: #ff9f07; -} - -.features-item.bg-2ea7ff .icon { - color: #2ea7ff; -} - -.features-item.bg-2ea7ff::before { - background-color: #2ea7ff; -} - -.features-item:hover::before { - opacity: 0; - visibility: hidden; -} - -.features-item:hover::after { - height: 100%; -} - -.features-item:hover p { - color: var(--whiteColor); -} - -.features-item:hover h3 { - color: var(--whiteColor); -} - -.features-item:hover h3 a { - color: var(--whiteColor); -} - -.features-item:hover .icon { - color: var(--whiteColor); -} - -/*================================================ -About Area CSS -=================================================*/ -.about-area.with-border { - border-bottom: 1px solid #f0f0f0; -} - -.startup-about-area .container-fluid { - max-width: 1400px; -} - -.startup-about-image { - z-index: 1; - margin-right: 15px; - text-align: center; - position: relative; - background-color: #f9f4f0; - padding-top: 80px; - padding-left: 80px; - padding-bottom: 80px; -} - -.startup-about-image .video-btn { - position: absolute; - left: 57%; - display: inline-block; - top: 50%; - -webkit-transform: translateY(-50%) translateX(-57%); - transform: translateY(-50%) translateX(-57%); - width: 80px; - height: 80px; - background-color: rgba(0, 0, 0, 0.75); - border-radius: 50%; - color: var(--whiteColor); - font-size: 30px; -} - -.startup-about-image .video-btn i { - position: absolute; - left: 0; - right: 0; - top: 50%; - -webkit-transform: translateY(-50%); - transform: translateY(-50%); -} - -.startup-about-image .video-btn::after, .startup-about-image .video-btn::before { - content: ''; - display: block; - position: absolute; - top: 0; - right: 0; - z-index: -1; - bottom: 0; - left: 0; - border-radius: 50%; - border: 2px solid var(--whiteColor); -} - -.startup-about-image .video-btn::before { - -webkit-animation: ripple 2s linear infinite; - animation: ripple 2s linear infinite; -} - -.startup-about-image .video-btn::after { - -webkit-animation: ripple 2s linear 1s infinite; - animation: ripple 2s linear 1s infinite; -} - -.startup-about-content { - padding-left: 15px; - max-width: 600px; -} - -.startup-about-content .sub-title { - display: block; - margin-bottom: 12px; - color: var(--startupMainColor); - font-family: var(--headingFontFamily); - font-weight: 600; - font-size: 14px; -} - -.startup-about-content h2 { - margin-bottom: 15px; - font-size: 40px; -} - -.startup-about-content p strong { - color: var(--blackColor); -} - -.startup-about-content .features-list { - padding-left: 0; - margin-left: 16px; - margin-bottom: 0; -} - -.startup-about-content .features-list li { - margin-bottom: 12px; - color: var(--optionalColor); - font-weight: 500; -} - -.startup-about-content .features-list li:last-child { - margin-bottom: 0; -} - -.startup-about-content .default-btn { - margin-top: 5px; -} - -.marketing-about-area { - border-bottom: 1px solid #f0f0f0; -} - -.marketing-about-image { - margin-right: 15px; - text-align: center; -} - -.marketing-about-content { - padding-left: 15px; -} - -.marketing-about-content .sub-title { - display: block; - margin-bottom: 12px; - color: var(--marketingMainColor); - font-family: var(--headingFontFamily); - font-weight: 600; - font-size: 14px; -} - -.marketing-about-content h2 { - margin-bottom: 15px; - font-size: 40px; -} - -.marketing-about-content .default-btn { - margin-top: 10px; -} - -.marketing-about-content .features-list { - padding-left: 0; - margin-left: 16px; - margin-bottom: 0; -} - -.marketing-about-content .features-list li { - margin-bottom: 12px; - color: var(--optionalColor); - font-weight: 500; -} - -.marketing-about-content .features-list li:last-child { - margin-bottom: 0; -} - -.business-about-content { - padding-left: 15px; -} - -.business-about-content .sub-title { - display: block; - margin-bottom: 12px; - color: var(--businessMainColor); - font-family: var(--headingFontFamily); - font-weight: 600; - font-size: 14px; -} - -.business-about-content h2 { - margin-bottom: 15px; - font-size: 40px; -} - -.business-about-content .default-btn { - margin-top: 10px; -} - -.business-about-image { - z-index: 1; - text-align: center; - padding-right: 15px; - position: relative; -} - -.app-about-content { - padding-right: 15px; -} - -.app-about-content h3 { - margin-bottom: 16px; - font-size: 24px; -} - -.app-about-content .features-list { - padding-left: 0; - margin-bottom: 15px; - list-style-type: none; -} - -.app-about-content .features-list li { - margin-bottom: 12px; - position: relative; - color: var(--optionalColor); - font-weight: 500; - padding-left: 24px; -} - -.app-about-content .features-list li i { - position: absolute; - left: 0; - top: 4px; - color: var(--appMainColor); -} - -.app-about-content .features-list li:last-child { - margin-bottom: 0; -} - -.app-about-content .default-btn { - margin-top: 10px; -} - -.app-about-image { - padding-left: 15px; - text-align: center; -} - -.saas-about-content { - padding-left: 15px; -} - -.saas-about-content .sub-title { - display: block; - margin-bottom: 12px; - color: var(--saasMainColor); - font-family: var(--headingFontFamily); - font-weight: 600; - font-size: 14px; -} - -.saas-about-content h2 { - margin-bottom: 15px; - font-size: 40px; -} - -.saas-about-content .features-list { - padding-left: 0; - margin-bottom: 15px; - list-style-type: none; -} - -.saas-about-content .features-list li { - margin-bottom: 12px; - position: relative; - color: var(--optionalColor); - font-weight: 500; - padding-left: 24px; -} - -.saas-about-content .features-list li i { - position: absolute; - left: 0; - top: 4px; - color: var(--saasMainColor); -} - -.saas-about-content .features-list li:last-child { - margin-bottom: 0; -} - -.saas-about-content .default-btn { - margin-top: 10px; -} - -.saas-about-content.white-color { - color: var(--whiteColor); -} - -.saas-about-content.white-color h2 { - color: var(--whiteColor); -} - -.saas-about-content.white-color p { - color: var(--whiteColor); - opacity: 0.9; -} - -.saas-about-content.white-color .features-list li { - color: var(--whiteColor); - opacity: 0.9; -} - -.saas-about-content.white-color .features-list li i { - color: var(--whiteColor); -} - -.saas-about-image { - padding-right: 15px; - text-align: center; -} - -.it-agency-about-content { - padding-left: 15px; -} - -.it-agency-about-content .sub-title { - display: block; - margin-bottom: 12px; - color: var(--itAgencyMainColor); - font-family: var(--headingFontFamily); - font-weight: 600; - font-size: 14px; -} - -.it-agency-about-content h2 { - margin-bottom: 15px; - font-size: 40px; -} - -.it-agency-about-content .default-btn { - margin-top: 10px; -} - -.it-agency-about-content .features-list { - padding-left: 0; - margin-left: 16px; - margin-bottom: 15px; -} - -.it-agency-about-content .features-list li { - margin-bottom: 12px; - color: var(--optionalColor); - font-weight: 500; -} - -.it-agency-about-content .features-list li:last-child { - margin-bottom: 0; -} - -.it-agency-about-image { - text-align: start; - position: relative; - margin-right: 20px; - padding-right: 20px; - padding-bottom: 20px; -} - -.it-agency-about-image .main-image { - position: relative; - padding-bottom: 150px; -} - -.it-agency-about-image .main-image img { - border-radius: 10px; -} - -.it-agency-about-image .main-image img:nth-child(2) { - position: absolute; - right: 0; - bottom: 0; - z-index: 1; -} - -/*================================================ -Services Area CSS -=================================================*/ -.services-area.with-black-border { - border-top: 1px solid #12141a; - border-bottom: 1px solid #12141a; -} - -.single-services-box { - margin-bottom: 30px; - position: relative; - overflow: hidden; -} - -.single-services-box img { - -webkit-transition: var(--transition); - transition: var(--transition); -} - -.single-services-box .content { - position: absolute; - left: 0; - right: 0; - bottom: 0; - padding: 30px; - z-index: 2; - -webkit-transition: var(--transition); - transition: var(--transition); -} - -.single-services-box .content .icon { - line-height: 1; - display: block; - font-size: 50px; - margin-bottom: 20px; - -webkit-transition: var(--transition); - transition: var(--transition); - color: var(--startupMainColor); -} - -.single-services-box .content h3 { - font-size: 20px; - margin-bottom: 10px; - color: var(--whiteColor); - -webkit-transition: var(--transition); - transition: var(--transition); -} - -.single-services-box .content h3 a { - color: var(--whiteColor); -} - -.single-services-box .content h3 a:hover { - color: var(--startupMainColor); -} - -.single-services-box .content p { - -webkit-transition: var(--transition); - transition: var(--transition); - color: var(--whiteColor); - margin-bottom: 0; - opacity: 0.9; -} - -.single-services-box .content .link-btn { - font-weight: 700; - padding-right: 12px; - position: absolute; - left: 30px; - display: inline-block; - bottom: 0; - color: var(--whiteColor); - opacity: 0; - visibility: hidden; -} - -.single-services-box .content .link-btn i { - position: absolute; - right: 0; - top: 7px; - font-size: 12px; -} - -.single-services-box .content .link-btn::before { - content: ''; - position: absolute; - right: 0; - bottom: 0; - width: 0%; - height: 2px; - background-color: #eeeeee; - -webkit-transition: var(--transition); - transition: var(--transition); -} - -.single-services-box .content .link-btn:hover { - padding-right: 15px; -} - -.single-services-box .content .link-btn:hover::before { - width: 100%; - right: auto; - left: 0; -} - -.single-services-box::before { - position: absolute; - height: 100%; - content: ""; - width: 100%; - z-index: 1; - left: 0; - top: 0; - background: -webkit-gradient(linear, left bottom, left top, color-stop(0, rgba(35, 35, 37, 0.9)), color-stop(35%, rgba(35, 35, 37, 0.7)), color-stop(60%, rgba(22, 22, 23, 0)), to(rgba(0, 0, 0, 0))); - background: linear-gradient(to top, rgba(35, 35, 37, 0.9) 0, rgba(35, 35, 37, 0.7) 35%, rgba(22, 22, 23, 0) 60%, rgba(0, 0, 0, 0) 100%); -} - -.single-services-box:hover img { - -webkit-transform: scale(1.05); - transform: scale(1.05); -} - -.single-services-box:hover .content .icon { - -webkit-transform: translateY(-30px); - transform: translateY(-30px); -} - -.single-services-box:hover .content p { - -webkit-transform: translateY(-30px); - transform: translateY(-30px); -} - -.single-services-box:hover .content h3 { - -webkit-transform: translateY(-30px); - transform: translateY(-30px); -} - -.single-services-box:hover .content .link-btn { - opacity: 1; - bottom: 25px; - visibility: visible; -} - -.single-services-item { - margin-bottom: 30px; -} - -.single-services-item .content { - padding-top: 25px; - padding-left: 20px; - padding-right: 20px; -} - -.single-services-item .content h3 { - font-size: 20px; - margin-bottom: 10px; -} - -.services-tabs .nav { - padding-left: 0; - margin-bottom: 60px; - border: none; - list-style-type: none; - text-align: center; - -webkit-box-pack: center; - -ms-flex-pack: center; - justify-content: center; -} - -.services-tabs .nav .nav-item { - margin-left: 42px; - margin-right: 42px; -} - -.services-tabs .nav .nav-item .nav-link { - display: inline-block; - padding: 0; - border: none; - margin: 0; - font-size: 19px; - font-weight: 700; -} - -.services-tabs .nav .nav-item .nav-link .icon { - display: block; - width: 80px; - height: 80px; - position: relative; - z-index: 1; - line-height: 75px; - color: var(--businessMainColor); - font-weight: normal; - -webkit-transition: var(--transition); - transition: var(--transition); - font-size: 35px; - border-radius: 30% 70% 70% 30% / 30% 30% 70% 70%; - padding-right: 10px; - margin-left: auto; - margin-right: auto; - margin-bottom: 15px; -} - -.services-tabs .nav .nav-item .nav-link .icon::after { - content: ''; - position: absolute; - left: 0; - right: 0; - top: 0; - border-radius: 30% 70% 70% 30% / 30% 30% 70% 70%; - z-index: -1; - bottom: 0; - background: var(--businessGradientColor); - -webkit-transition: var(--transition); - transition: var(--transition); - opacity: 0.10; -} - -.services-tabs .nav .nav-item .nav-link:hover, .services-tabs .nav .nav-item .nav-link.active { - color: var(--businessMainColor); -} - -.services-tabs .nav .nav-item .nav-link:hover .icon, .services-tabs .nav .nav-item .nav-link.active .icon { - color: var(--whiteColor); -} - -.services-tabs .nav .nav-item .nav-link:hover .icon::after, .services-tabs .nav .nav-item .nav-link.active .icon::after { - opacity: 1; -} - -.services-tabs .nav .nav-item:last-child { - margin-right: 0; -} - -.services-tabs .nav .nav-item:first-child { - margin-left: 0; -} - -.single-main-services { - margin-bottom: 30px; -} - -.single-main-services .content { - padding-right: 50px; -} - -.single-main-services .content h3 { - font-size: 40px; - margin-bottom: 15px; - line-height: 1.4; -} - -.single-main-services .content p { - max-width: 540px; -} - -.single-main-services .content .default-btn { - margin-top: 10px; -} - -.single-main-services .image { - text-align: center; -} - -.services-box { - text-align: center; - margin-bottom: 30px; - border: 1px solid #eeeeee; - background-color: var(--whiteColor); - padding: 35px 30px; - -webkit-transition: var(--transition); - transition: var(--transition); -} - -.services-box .icon { - font-size: 60px; - line-height: 1; - background: var(--saasGradientColor); - -webkit-background-clip: text; - background-clip: text; - -webkit-text-fill-color: transparent; - margin-bottom: 22px; - display: block; -} - -.services-box h3 { - margin-bottom: 12px; - font-size: 20px; -} - -.services-box h3 a:hover { - color: var(--saasMainColor); -} - -.services-box.color-white { - border-color: #272836; - background-color: #040611; -} - -.services-box.color-white h3 { - color: var(--whiteColor); -} - -.services-box.color-white h3 a { - color: var(--whiteColor); -} - -.services-box.color-white p { - opacity: 0.9; - color: var(--whiteColor); -} - -.services-box:hover { - border-color: var(--saasMainColor) !important; -} - -.services-box.startup-color .icon { - background: var(--startupMainColor); - -webkit-background-clip: text; - background-clip: text; - -webkit-text-fill-color: transparent; -} - -.services-box.startup-color:hover { - border-color: var(--startupMainColor) !important; -} - -.services-item { - margin-bottom: 30px; - text-align: center; - position: relative; - overflow: hidden; -} - -.services-item img { - -webkit-transition: var(--transition); - transition: var(--transition); -} - -.services-item::before { - content: ''; - position: absolute; - left: 0; - right: 0; - top: 0; - bottom: 0; - opacity: 0; - visibility: hidden; - z-index: 1; - -webkit-transition: var(--transition); - transition: var(--transition); - background-color: var(--consultingMainColor); -} - -.services-item h3 { - font-size: 20px; - -webkit-transition: var(--transition); - transition: var(--transition); - margin-top: 25px; - margin-bottom: 0; -} - -.services-item .hover-content { - left: 0; - right: 0; - top: 50%; - padding: 30px; - position: absolute; - -webkit-transform: translateY(-50%); - transform: translateY(-50%); - z-index: 2; - opacity: 0; - visibility: hidden; - -webkit-transition: var(--transition); - transition: var(--transition); - color: var(--whiteColor); -} - -.services-item .hover-content h3 { - opacity: 1 !important; - visibility: visible !important; - color: var(--whiteColor); - margin-top: 0; - margin-bottom: 12px; -} - -.services-item .hover-content h3 a { - color: var(--whiteColor); -} - -.services-item .hover-content p { - color: var(--whiteColor); -} - -.services-item .hover-content .link-btn { - font-weight: 700; - position: relative; - display: inline-block; - padding-right: 12px; - color: var(--whiteColor); -} - -.services-item .hover-content .link-btn i { - position: absolute; - right: 0; - top: 7px; - font-size: 12px; -} - -.services-item .hover-content .link-btn::before { - content: ''; - position: absolute; - right: 0; - bottom: 0; - width: 0%; - height: 1px; - background-color: var(--whiteColor); - -webkit-transition: var(--transition); - transition: var(--transition); -} - -.services-item .hover-content .link-btn:hover { - padding-right: 15px; -} - -.services-item .hover-content .link-btn:hover::before { - width: 100%; - right: auto; - left: 0; -} - -.services-item:hover img { - -webkit-transform: scale(1.7); - transform: scale(1.7); -} - -.services-item:hover h3 { - opacity: 0; - visibility: hidden; -} - -.services-item:hover .hover-content { - opacity: 1; - visibility: visible; -} - -.services-item:hover::before { - opacity: .90; - visibility: visible; -} - -.services-item.startup-color::before { - background-color: var(--startupMainColor); -} - -.col-lg-3:nth-child(2) .services-box, .col-lg-3:nth-child(4) .services-box { - margin-top: 30px; -} - -.col-lg-3:nth-child(5) .services-box, .col-lg-3:nth-child(7) .services-box { - margin-top: -30px; -} - -.single-it-services-box { - margin-bottom: 30px; - border-radius: 10px; - position: relative; - padding: 30px 30px 30px 100px; - z-index: 1; -} - -.single-it-services-box .icon { - position: absolute; - left: 30px; - top: 30px; - line-height: 1; - font-size: 45px; - color: var(--itAgencyMainColor); - -webkit-transition: var(--transition); - transition: var(--transition); -} - -.single-it-services-box h3 { - -webkit-transition: var(--transition); - transition: var(--transition); - margin-bottom: 12px; - font-size: 20px; -} - -.single-it-services-box h3 a { - display: inline-block; -} - -.single-it-services-box h3 a:hover { - color: var(--itAgencyGradientColor); -} - -.single-it-services-box p { - -webkit-transition: var(--transition); - transition: var(--transition); -} - -.single-it-services-box::before { - left: 0; - right: 0; - top: 0; - bottom: 0; - z-index: -1; - content: ''; - opacity: .06; - position: absolute; - border-radius: 10px; - -webkit-transition: var(--transition); - transition: var(--transition); - background-color: var(--itAgencyMainColor); -} - -.single-it-services-box.bg-6d5fff .icon { - color: #6d5fff; -} - -.single-it-services-box.bg-6d5fff::before { - background-color: #6d5fff; -} - -.single-it-services-box.bg-ff9f07 .icon { - color: #ff9f07; -} - -.single-it-services-box.bg-ff9f07::before { - background-color: #ff9f07; -} - -.single-it-services-box.bg-89c111 .icon { - color: #89c111; -} - -.single-it-services-box.bg-89c111::before { - background-color: #89c111; -} - -.single-it-services-box.bg-ca83ff .icon { - color: #ca83ff; -} - -.single-it-services-box.bg-ca83ff::before { - background-color: #ca83ff; -} - -.single-it-services-box.bg-ff5f5f .icon { - color: #ff5f5f; -} - -.single-it-services-box.bg-ff5f5f::before { - background-color: #ff5f5f; -} - -.single-it-services-box.bg-2ea7ff .icon { - color: #2ea7ff; -} - -.single-it-services-box.bg-2ea7ff::before { - background-color: #2ea7ff; -} - -.single-it-services-box:hover .icon { - color: var(--whiteColor) !important; -} - -.single-it-services-box:hover h3 { - color: var(--whiteColor) !important; -} - -.single-it-services-box:hover h3 a { - color: var(--whiteColor) !important; -} - -.single-it-services-box:hover p { - color: var(--whiteColor); -} - -.single-it-services-box:hover::before { - opacity: 1; - visibility: visible; -} - -/*================================================ -Services Details Area CSS -=================================================*/ -.services-details-desc h3 { - font-size: 24px; - margin-bottom: 15px; - margin-top: 30px; -} - -.services-details-desc h3:first-child { - margin-top: 0; -} - -.services-details-desc ul li { - margin-bottom: 12px; - color: var(--optionalColor); - font-weight: 500; -} - -.services-details-desc ul li:last-child { - margin-bottom: 0; -} - -.services-details-desc p strong { - color: var(--blackColor); -} - -.services-details-desc p a { - color: var(--startupMainColor); -} - -.services-details-desc p a:hover { - text-decoration: underline; -} - -.services-details-desc img { - margin-top: 20px; - margin-bottom: 20px; -} - -.services-details-content h2 { - font-size: 40px; - line-height: 1.4; - margin-bottom: 15px; -} - -.services-details-video { - margin-left: 30px; - text-align: center; - background-color: #f5f5f5; -} - -.services-details-video iframe { - width: 100%; - border: none; - height: 336px; - display: block; -} - -.services-details-video .default-btn { - margin-top: 20px; - margin-left: 30px; - margin-right: 30px; - margin-bottom: 20px; -} - -.services-details-overview .overview-content h2 { - font-size: 40px; - line-height: 1.4; - margin-bottom: 15px; -} - -/*================================================ -Works Area CSS -=================================================*/ -.startup-works-area .section-title { - max-width: 100%; - text-align: start; - padding-top: 100px; - margin-left: 0; - margin-right: 0; - margin-bottom: -220px; -} - -.startup-works-area .section-title h2 { - font-size: 35px; -} - -.startup-works-content { - padding-top: 245px; - padding-right: 15px; -} - -.startup-works-content h3 { - font-size: 20px; - margin-bottom: 15px; -} - -.startup-works-content h3 a { - display: inline-block; -} - -.startup-works-content h3 a:hover { - color: var(--startupMainColor); -} - -.startup-works-content .custom-owl-nav { - margin-top: 25px; -} - -.startup-works-content .custom-owl-nav [class*=owl-] { - margin: 0 5px; - background-color: var(--startupMainColor); - color: var(--whiteColor); - padding: 8px 25px 7px !important; - border-radius: 0; - -webkit-transition: var(--transition); - transition: var(--transition); - border: none; - cursor: pointer; - font-size: var(--fontSize); -} - -.startup-works-content .custom-owl-nav [class*=owl-] i { - line-height: 1; -} - -.startup-works-content .custom-owl-nav [class*=owl-].owl-prev { - margin-left: 0; -} - -.startup-works-content .custom-owl-nav [class*=owl-].owl-next { - margin-right: 0; -} - -.startup-works-content .custom-owl-nav [class*=owl-]:hover { - background-color: var(--blackColor); - color: var(--whiteColor); -} - -.startup-works-image { - z-index: 1; - margin-left: 15px; - text-align: center; - position: relative; - background-color: #f9f4f0; - padding-top: 80px; - padding-right: 80px; - padding-bottom: 80px; -} - -.startup-works-image .link-btn { - position: absolute; - left: 0; - right: 0; - top: 0; - bottom: 0; - z-index: 1; - display: block; -} - -.single-works-box { - overflow: hidden; - position: relative; - margin-bottom: 30px; -} - -.single-works-box .works-image { - position: relative; -} - -.single-works-box .works-image img { - -webkit-transition: var(--transition); - transition: var(--transition); -} - -.single-works-box .works-image .works-overlay { - position: absolute; - overflow: hidden; - top: 10px; - left: 10px; - right: 10px; - bottom: 10px; -} - -.single-works-box .works-image .works-overlay::before { - content: ''; - -webkit-transition: var(--transition); - transition: var(--transition); - position: absolute; - width: 100%; - bottom: 0; - height: 50%; - background: var(--businessGradientColor); - right: -100%; -} - -.single-works-box .works-image .works-overlay::after { - content: ''; - -webkit-transition: var(--transition); - transition: var(--transition); - position: absolute; - background: var(--businessGradientColor); - top: 0; - height: 50%; - width: 100%; - left: -100%; -} - -.single-works-box .works-image .works-overlay h3 { - color: transparent; - overflow: hidden; - position: absolute; - top: 30px; - text-align: center; - right: 25px; - z-index: 2; - -webkit-transition: var(--transition); - transition: var(--transition); - font-size: 20px; - margin-bottom: 5px; -} - -.single-works-box .works-image .works-overlay h3::before { - content: ''; - background: var(--blackColor); - position: absolute; - width: 100%; - bottom: 0; - -webkit-transition: var(--transition); - transition: var(--transition); - left: 100%; - top: 0; - right: auto; -} - -.single-works-box .works-image .works-overlay span { - color: transparent; - overflow: hidden; - z-index: 2; - position: absolute; - top: 62px; - display: block; - right: 25px; - -webkit-transition: var(--transition); - transition: var(--transition); - text-align: center; -} - -.single-works-box .works-image .works-overlay span::before { - content: ''; - background: var(--whiteColor); - width: 100%; - top: 0; - bottom: 0; - position: absolute; - -webkit-transition: var(--transition); - transition: var(--transition); - right: 100%; -} - -.single-works-box .link-btn { - position: absolute; - left: 0; - right: 0; - top: 0; - bottom: 0; - z-index: 5; -} - -.single-works-box:hover .works-image img { - -webkit-transform: scale(1.3); - transform: scale(1.3); -} - -.single-works-box:hover .works-image .works-overlay::before { - right: 0; - opacity: 1; - width: 100%; - height: 50%; - -webkit-transition: all .8s; - transition: all .8s; -} - -.single-works-box:hover .works-image .works-overlay::after { - left: 0; - opacity: 1; - -webkit-transition: all .8s; - transition: all .8s; -} - -.single-works-box:hover .works-image .works-overlay span { - color: var(--whiteColor); -} - -.single-works-box:hover .works-image .works-overlay span::before { - right: -100%; -} - -.single-works-box:hover .works-image .works-overlay h3 { - color: var(--whiteColor); -} - -.single-works-box:hover .works-image .works-overlay h3::before { - left: -100%; -} - -.single-works-box.startup-color .works-image .works-overlay::before { - background: var(--startupMainColor); -} - -.single-works-box.startup-color .works-image .works-overlay::after { - background: var(--startupMainColor); -} - -.works-box { - margin-bottom: 30px; - text-align: center; - position: relative; - overflow: hidden; -} - -.works-box img { - -webkit-transition: var(--transition); - transition: var(--transition); -} - -.works-box .link-btn { - display: block; - left: 0; - right: 0; - top: 0; - bottom: 0; - position: absolute; - z-index: 2; -} - -.works-box h3 { - margin-bottom: 0; - font-size: 20px; - position: absolute; - left: 0; - right: 0; - top: 50%; - opacity: 0; - visibility: hidden; - -webkit-transition: var(--transition); - transition: var(--transition); - -webkit-transform: translateY(-50%); - transform: translateY(-50%); - color: var(--whiteColor); - background-color: rgba(0, 0, 0, 0.75); - padding: 15px; - margin-left: 25px; - margin-right: 25px; - margin-top: 25px; -} - -.works-box:hover img { - -webkit-transform: scale(1.05); - transform: scale(1.05); -} - -.works-box:hover h3 { - margin-top: 0; - visibility: visible; - opacity: 1; -} - -.works-box-btn { - text-align: center; - margin-top: 20px; -} - -.single-works-item { - margin-bottom: 30px; - text-align: center; - position: relative; - overflow: hidden; -} - -.single-works-item img { - -webkit-transition: var(--transition); - transition: var(--transition); -} - -.single-works-item::before { - content: ''; - position: absolute; - left: 0; - right: 0; - top: 0; - bottom: 0; - background-color: var(--startupMainColor); - z-index: 1; - opacity: 0; - visibility: hidden; - -webkit-transition: .3s; - transition: .3s; -} - -.single-works-item .content { - position: absolute; - left: 0; - right: 0; - top: 50%; - -webkit-transform: translateY(-50%); - transform: translateY(-50%); - margin-top: 15px; - -webkit-transition: var(--transition); - transition: var(--transition); - opacity: 0; - visibility: hidden; - z-index: 2; - padding-left: 20px; - padding-right: 20px; -} - -.single-works-item .content .link-btn { - width: 45px; - height: 45px; - line-height: 45px; - color: var(--whiteColor); - border: 1px solid var(--whiteColor); - border-radius: 50%; - margin-bottom: 20px; - display: inline-block; -} - -.single-works-item .content .link-btn:hover { - color: var(--blackColor); - background-color: var(--whiteColor); -} - -.single-works-item .content h3 { - font-size: 22px; - color: var(--whiteColor); - margin-bottom: 12px; -} - -.single-works-item .content h3 a { - color: var(--whiteColor); -} - -.single-works-item .content span { - display: block; - color: var(--whiteColor); - opacity: 0.9; -} - -.single-works-item:hover img { - -webkit-transform: scale(1.1); - transform: scale(1.1); -} - -.single-works-item:hover::before { - opacity: 1; - margin: 10px; - visibility: visible; -} - -.single-works-item:hover .content { - opacity: 1; - visibility: visible; - margin-top: 0; -} - -.single-works-item.minimal-portfolio-color::before { - background-color: var(--minimalPortfolioColor); -} - -.showMoreItemsList + .button-box { - margin-bottom: 0; - text-align: start; -} - -.showMoreItemsList + .button-box button { - background-color: transparent; - border: 1px solid #d6d9dc; - color: var(--blackColor); - padding: 12px 45px; - -webkit-transition: var(--transition); - transition: var(--transition); - display: inline-block; - width: auto; - margin-top: 10px; - border-radius: 0; - font-size: var(--fontSize); - font-weight: 500; -} - -.showMoreItemsList + .button-box button:hover { - background-color: var(--startupMainColor); - border-color: var(--startupMainColor); - color: var(--whiteColor); -} - -.works-slides-style-one.owl-theme .single-works-item, .works-slides-style-one.owl-theme .works-box, .works-slides-style-two.owl-theme .single-works-item, .works-slides-style-two.owl-theme .works-box { - margin-bottom: 0; -} - -.works-slides-style-one.owl-theme .owl-nav, .works-slides-style-two.owl-theme .owl-nav { - opacity: 0; - margin-top: 0; - visibility: hidden; - -webkit-transition: var(--transition); - transition: var(--transition); -} - -.works-slides-style-one.owl-theme .owl-nav [class*=owl-], .works-slides-style-two.owl-theme .owl-nav [class*=owl-] { - margin: 0; - background-color: var(--whiteColor); - color: var(--blackColor); - padding: 0 !important; - border-radius: 0; - -webkit-transition: var(--transition); - transition: var(--transition); - border: none; - cursor: pointer; - position: absolute; - left: 25px; - top: 50%; - width: 45px; - height: 45px; - line-height: 45px; - border-radius: 50%; - -webkit-transform: translateY(-50%); - transform: translateY(-50%); - font-size: 20px; -} - -.works-slides-style-one.owl-theme .owl-nav [class*=owl-].owl-next, .works-slides-style-two.owl-theme .owl-nav [class*=owl-].owl-next { - left: auto; - right: 25px; -} - -.works-slides-style-one.owl-theme .owl-nav [class*=owl-] i, .works-slides-style-two.owl-theme .owl-nav [class*=owl-] i { - line-height: 1; -} - -.works-slides-style-one.owl-theme .owl-nav [class*=owl-]:hover, .works-slides-style-two.owl-theme .owl-nav [class*=owl-]:hover { - background-color: var(--blackColor); - border-color: var(--blackColor); - color: var(--whiteColor); -} - -.works-slides-style-one.owl-theme:hover .owl-nav, .works-slides-style-two.owl-theme:hover .owl-nav { - opacity: 1; - visibility: visible; -} - -.works-slides-style-one.owl-theme .owl-dots, .works-slides-style-two.owl-theme .owl-dots { - margin-top: 40px; -} - -.works-slides-style-one.owl-theme .owl-dots .owl-dot span, .works-slides-style-two.owl-theme .owl-dots .owl-dot span { - width: 18px; - height: 18px; - border-radius: 50%; - -webkit-transition: var(--transition); - transition: var(--transition); - margin: 0 5px; -} - -.works-slides-style-one.owl-theme .owl-dots .owl-dot:hover span, .works-slides-style-one.owl-theme .owl-dots .owl-dot.active span, .works-slides-style-two.owl-theme .owl-dots .owl-dot:hover span, .works-slides-style-two.owl-theme .owl-dots .owl-dot.active span { - background-color: var(--startupMainColor); -} - -/*================================================ -What We Do Area CSS -=================================================*/ -.what-we-do-content .section-title { - text-align: start; - max-width: 100%; - margin-left: 0; - margin-right: 0; - margin-bottom: 30px; -} - -.what-we-do-content .section-title p { - max-width: 100%; - margin-left: 0; - margin-right: 0; -} - -.what-we-do-content .single-what-we-do-box { - margin-bottom: 0; -} - -.single-what-we-do-box { - margin-bottom: 30px; -} - -.single-what-we-do-box .icon { - display: block; - line-height: 1; - font-size: 45px; - margin-bottom: 25px; - color: var(--consultingMainColor); -} - -.single-what-we-do-box h3 { - font-size: 20px; - margin-bottom: 12px; -} - -/*================================================ -Categories Area CSS -=================================================*/ -.single-categories-box { - margin-bottom: 30px; - overflow: hidden; - position: relative; -} - -.single-categories-box img { - -webkit-transition: var(--transition); - transition: var(--transition); -} - -.single-categories-box h3 { - margin-bottom: 0; - font-size: 20px; - position: absolute; - left: 25px; - top: 25px; - background-color: var(--whiteColor); - padding: 7px 20px; - -webkit-clip-path: polygon(5% 0, 100% 0, 95% 100%, 0% 100%); - clip-path: polygon(5% 0, 100% 0, 95% 100%, 0% 100%); - -webkit-transition: var(--transition); - transition: var(--transition); -} - -.single-categories-box .link-btn { - display: block; - width: 100%; - height: 100%; - position: absolute; - left: 0; - top: 0; - z-index: 2; -} - -.single-categories-box:hover img { - -webkit-transform: scale(1.1); - transform: scale(1.1); -} - -.single-categories-box:hover h3 { - background-color: var(--blackColor); - color: var(--whiteColor); -} - -.categories-box { - margin-bottom: 30px; - position: relative; - text-align: center; - overflow: hidden; -} - -.categories-box img { - -webkit-transition: var(--transition); - transition: var(--transition); -} - -.categories-box h3 { - top: 50%; - left: 50%; - margin-bottom: 0; - position: absolute; - -webkit-transform: translateX(-50%) translateY(-50%); - transform: translateX(-50%) translateY(-50%); - font-size: 20px; - z-index: 1; - background-color: rgba(255, 255, 255, 0.8); - -webkit-transition: var(--transition); - transition: var(--transition); - padding-top: 5px; - padding-bottom: 5px; - padding-left: 30px; - padding-right: 30px; -} - -.categories-box .link-btn { - position: absolute; - left: 0; - right: 0; - top: 0; - bottom: 0; - display: block; - z-index: 2; -} - -.categories-box:hover img { - -webkit-transform: scale(1.05); - transform: scale(1.05); -} - -.categories-box:hover h3 { - background-color: var(--whiteColor); -} - -.categories-slides.owl-theme .owl-nav { - margin-top: 0; - opacity: 0; - visibility: hidden; - -webkit-transition: var(--transition); - transition: var(--transition); -} - -.categories-slides.owl-theme .owl-nav [class*=owl-] { - margin: 0; - background-color: transparent; - color: var(--optionalColor); - padding: 0 !important; - border-radius: 0; - -webkit-transition: var(--transition); - transition: var(--transition); - border: none; - cursor: pointer; - position: absolute; - left: -45px; - top: 50%; - width: 35px; - height: 35px; - line-height: 35px; - border-radius: 50%; - -webkit-transform: translateY(-50%); - transform: translateY(-50%); - border: 1px solid var(--optionalColor); - font-size: var(--fontSize); -} - -.categories-slides.owl-theme .owl-nav [class*=owl-].owl-next { - left: auto; - right: -45px; -} - -.categories-slides.owl-theme .owl-nav [class*=owl-] i { - line-height: 1; -} - -.categories-slides.owl-theme .owl-nav [class*=owl-]:hover { - background-color: var(--blackColor); - border-color: var(--blackColor); - color: var(--whiteColor); -} - -.categories-slides.owl-theme:hover .owl-nav { - opacity: 1; - visibility: visible; -} - -/*================================================ -Who We Are Area CSS -=================================================*/ -.who-we-are-area .row { - margin-left: 0; - margin-right: 0; -} - -.who-we-are-area .row .col-lg-6 { - padding-left: 0; - padding-right: 0; -} - -.who-we-are-content { - padding: 40px; - background-color: #f3f4f7; -} - -.who-we-are-content .sub-title { - display: block; - margin-bottom: 10px; - color: var(--consultingMainColor); - font-family: var(--headingFontFamily); - font-weight: 600; - font-size: 14px; -} - -.who-we-are-content h2 { - margin-bottom: 15px; - line-height: 1.5; - font-size: 21px; -} - -.who-we-are-content .default-btn { - margin-top: 10px; -} - -.who-we-are-image { - text-align: center; - position: relative; -} - -.who-we-are-image .video-btn { - top: 50%; - left: 50%; - width: 80px; - height: 80px; - font-size: 30px; - border-radius: 50%; - position: absolute; - display: inline-block; - color: var(--blackColor); - background-color: var(--whiteColor); - -webkit-transform: translateY(-50%) translateX(-50%); - transform: translateY(-50%) translateX(-50%); -} - -.who-we-are-image .video-btn i { - position: absolute; - left: 0; - right: 0; - top: 50%; - -webkit-transform: translateY(-50%); - transform: translateY(-50%); -} - -.who-we-are-image .video-btn::after, .who-we-are-image .video-btn::before { - content: ''; - display: block; - position: absolute; - top: 0; - right: 0; - z-index: -1; - bottom: 0; - left: 0; - border-radius: 50%; - border: 1.5px solid var(--saasMainColor); -} - -.who-we-are-image .video-btn::before { - -webkit-animation: ripple 2s linear infinite; - animation: ripple 2s linear infinite; -} - -.who-we-are-image .video-btn::after { - -webkit-animation: ripple 2s linear 1s infinite; - animation: ripple 2s linear 1s infinite; -} - -/*================================================ -Video Area CSS -=================================================*/ -.video-box { - text-align: center; - position: relative; -} - -.video-box img { - width: 100%; -} - -.video-box .video-btn { - position: absolute; - left: 50%; - display: inline-block; - top: 40%; - -webkit-transform: translateY(-40%) translateX(-50%); - transform: translateY(-40%) translateX(-50%); - width: 80px; - height: 80px; - background-color: var(--whiteColor); - border-radius: 50%; - color: var(--blackColor); - font-size: 30px; -} - -.video-box .video-btn i { - position: absolute; - left: 0; - right: 0; - top: 50%; - -webkit-transform: translateY(-50%); - transform: translateY(-50%); -} - -.video-box .video-btn::after, .video-box .video-btn::before { - content: ''; - display: block; - position: absolute; - top: 0; - right: 0; - z-index: -1; - bottom: 0; - left: 0; - border-radius: 50%; - border: 2px solid var(--saasMainColor); -} - -.video-box .video-btn::before { - -webkit-animation: ripple 2s linear infinite; - animation: ripple 2s linear infinite; -} - -.video-box .video-btn::after { - -webkit-animation: ripple 2s linear 1s infinite; - animation: ripple 2s linear 1s infinite; -} - -/*================================================ -Process Area CSS -=================================================*/ -.single-process-box { - margin-bottom: 30px; - text-align: center; - border: 1px dashed #e1e1e1; - -webkit-transition: var(--transition); - transition: var(--transition); - padding: 40px 25px; -} - -.single-process-box img { - margin-bottom: 30px; - -webkit-transition: var(--transition); - transition: var(--transition); -} - -.single-process-box h3 { - margin-bottom: 12px; - font-size: 20px; -} - -.single-process-box:hover { - -webkit-box-shadow: 3px 5px 25px 0 rgba(0, 0, 0, 0.1); - box-shadow: 3px 5px 25px 0 rgba(0, 0, 0, 0.1); - border-color: var(--whiteColor); -} - -.single-process-box:hover img { - -webkit-transform: scale(0.9); - transform: scale(0.9); -} - -/*================================================ -Funfacts Area CSS -=================================================*/ -.funfacts-area.bg-business-color { - background: var(--businessGradientColor); -} - -.funfacts-area.bg-startup-color { - background: var(--startupMainColor); -} - -.funfacts-area.bg-startup-color .single-funfacts-box.without-bg-color { - border-color: var(--whiteColor); -} - -.funfacts-area.bg-image { - background-color: var(--blackColor); - background-image: url(../../assets/img/bg8.jpg); - background-position: center center; - background-size: cover; - background-repeat: no-repeat; -} - -.funfacts-area.bg-f9f9f9 { - position: relative; - z-index: 1; -} - -.funfacts-area.bg-f9f9f9::before { - left: 0; - right: 0; - bottom: 0; - height: 50%; - z-index: -1; - content: ''; - position: absolute; - background-color: var(--whiteColor); -} - -.single-funfacts-box { - margin-bottom: 30px; - color: var(--whiteColor); - position: relative; - z-index: 1; - overflow: hidden; - background-color: var(--blackColor); - padding-top: 40px; - padding-bottom: 40px; - padding-left: 85px; - padding-right: 30px; -} - -.single-funfacts-box .icon { - position: absolute; - left: 25px; - top: 50%; - -webkit-transform: translateY(-50%); - transform: translateY(-50%); - color: var(--startupMainColor); - font-size: 45px; -} - -.single-funfacts-box h3 { - color: var(--whiteColor); - margin-bottom: 4px; - font-size: 40px; -} - -.single-funfacts-box h3 .odometer-formatting-mark { - display: none; -} - -.single-funfacts-box h3 .sign { - position: relative; - top: 1px; -} - -.single-funfacts-box .sub-title { - display: block; - font-weight: 600; -} - -.single-funfacts-box .shape { - position: absolute; - right: 0; - top: 50%; - -webkit-transform: translateY(-50%); - transform: translateY(-50%); - z-index: -1; -} - -.single-funfacts-box.bg-white { - color: var(--optionalColor); - background-color: var(--whiteColor); - -webkit-box-shadow: 3px 5px 25px 0 rgba(0, 0, 0, 0.1); - box-shadow: 3px 5px 25px 0 rgba(0, 0, 0, 0.1); -} - -.single-funfacts-box.bg-white .icon.color-fd5444 { - color: #fd5444; -} - -.single-funfacts-box.bg-white .icon.color-3251ad { - color: #3251ad; -} - -.single-funfacts-box.bg-white .icon.color-62bd5e { - color: #62bd5e; -} - -.single-funfacts-box.bg-white .icon.color-ff6720 { - color: #ff6720; -} - -.single-funfacts-box.bg-white h3 { - color: var(--blackColor); -} - -.single-funfacts-box.bg-white .shape { - opacity: .15; -} - -.single-funfacts-box.without-bg-color { - background-color: transparent; - border-right: 1px dashed #a684f5; - margin-right: 40px; - padding-right: 0; - padding-top: 15px; - padding-bottom: 15px; - padding-left: 65px; -} - -.single-funfacts-box.without-bg-color .icon { - left: 0; - color: var(--whiteColor); -} - -.single-funfacts-box.text-center { - border-right: 2px dashed rgba(255, 255, 255, 0.2); - background-color: transparent; - padding-left: 0; - padding-top: 20px; - padding-bottom: 20px; -} - -.single-funfacts-box.consulting-color h3 { - color: var(--consultingMainColor); -} - -.funfacts-inner { - background-color: var(--blackColor); - padding-left: 30px; - padding-right: 30px; -} - -.funfacts-inner.bg-app-image { - background-image: url(../../assets/img/bg4.jpg); - background-position: center center; - background-size: cover; - background-repeat: no-repeat; -} - -.funfacts-inner.bg-app-image .single-funfacts-box.without-bg-color { - padding: 0; - border: none; - text-align: center; - margin-right: 0; -} - -.funfacts-inner.it-agency-color { - background: var(--itAgencyGradientColor); - background-size: cover; - background-repeat: no-repeat; - background-position: center center; - background-image: url(../../assets/img/bg9.jpg); -} - -.funfacts-inner.border-radius { - border-radius: 10px; -} - -.funfacts-inner.border-radius.ptb-70 { - padding-bottom: 40px; -} - -.row .col-lg-3:last-child .single-funfacts-box.without-bg-color, .row .col-lg-3:last-child .single-funfacts-box.text-center { - border-right: none; -} - -/*================================================ -Products Area CSS -=================================================*/ -.products-area.with-top-border { - border-top: 1px solid #eeeeee; -} - -.single-products-box { - margin-bottom: 30px; - text-align: center; -} - -.single-products-box .image { - position: relative; - overflow: hidden; -} - -.single-products-box .image img { - -webkit-transition: var(--transition); - transition: var(--transition); -} - -.single-products-box .image .new { - position: absolute; - left: 12px; - top: 12px; - background-color: var(--blackColor); - color: var(--whiteColor); - width: 45px; - height: 45px; - text-align: center; - line-height: 45px; - border-radius: 50%; - z-index: 2; - font-size: 13px; - font-weight: 600; -} - -.single-products-box .image .sale { - position: absolute; - z-index: 2; - right: 12px; - top: 12px; - background-color: red; - color: var(--whiteColor); - width: 45px; - height: 45px; - text-align: center; - line-height: 45px; - border-radius: 50%; - font-size: 13px; - font-weight: 600; -} - -.single-products-box .image .buttons-list { - position: absolute; - text-align: center; - z-index: 1; - left: 0; - right: 0; - bottom: 20px; - padding-left: 0; - margin-bottom: 0; - list-style-type: none; -} - -.single-products-box .image .buttons-list li { - opacity: 0; - visibility: hidden; - display: inline-block; - -webkit-transform: translateY(30px); - transform: translateY(30px); - -webkit-transition: all 0.3s ease-in-out 0s; - transition: all 0.3s ease-in-out 0s; - margin-left: 3px; - margin-right: 3px; -} - -.single-products-box .image .buttons-list li a { - display: inline-block; - font-size: 16px; - color: var(--blackColor); - position: relative; - width: 40px; - border-radius: 50%; - line-height: 39px; - background-color: var(--whiteColor); - height: 40px; - border: 1px solid #eeeeee; -} - -.single-products-box .image .buttons-list li a .tooltip-label { - right: 50%; - top: -15px; - -webkit-transform: translateX(50%); - transform: translateX(50%); - position: absolute; - padding: 0 10px; - line-height: 28px; - font-size: 12px; - letter-spacing: .3px; - visibility: hidden; - white-space: nowrap; - opacity: 0; - color: transparent; - background-color: transparent; - -webkit-transition: all .2s ease-in-out; - transition: all .2s ease-in-out; - background-color: var(--blackColor); - color: var(--whiteColor); -} - -.single-products-box .image .buttons-list li a .tooltip-label::before { - content: "\f0dd"; - color: var(--blackColor); - left: 50%; - position: absolute; - -webkit-transform: translateX(-50%) rotate(0deg); - transform: translateX(-50%) rotate(0deg); - -webkit-transition: all .2s ease-in-out; - transition: all .2s ease-in-out; - bottom: -12px; - font-family: "Font Awesome 5 Free"; - -webkit-font-variant-ligatures: normal; - font-variant-ligatures: normal; - font-variant-caps: normal; - font-style: normal; - font-weight: 900; - font-size: 20px; -} - -.single-products-box .image .buttons-list li a:hover { - background-color: var(--blackColor); - border-color: var(--blackColor); - color: var(--whiteColor); -} - -.single-products-box .image .buttons-list li a:hover .tooltip-label { - visibility: visible; - opacity: 1; - top: -45px; -} - -.single-products-box .image .buttons-list li:nth-child(1) { - -webkit-transition-delay: 0.1s; - transition-delay: 0.1s; -} - -.single-products-box .image .buttons-list li:nth-child(2) { - -webkit-transition-delay: 0.2s; - transition-delay: 0.2s; -} - -.single-products-box .image .buttons-list li:nth-child(3) { - -webkit-transition-delay: 0.3s; - transition-delay: 0.3s; -} - -.single-products-box .content { - margin-top: 25px; -} - -.single-products-box .content .rating { - margin-bottom: 12px; -} - -.single-products-box .content .rating i { - color: #fec900; - line-height: 1; -} - -.single-products-box .content h3 { - margin-bottom: 13px; - font-size: 20px; -} - -.single-products-box .content .price span { - color: var(--blackColor); - font-size: 17px; - font-weight: 700; -} - -.single-products-box .content .price span.old-price { - color: var(--optionalColor); - text-decoration: line-through; -} - -.single-products-box:hover .image img { - -webkit-transform: scale(1.05); - transform: scale(1.05); -} - -.single-products-box:hover .image .buttons-list li { - -webkit-transform: translateY(0); - transform: translateY(0); - visibility: visible; - opacity: 1; -} - -.noke-grid-sorting { - margin-bottom: 40px; -} - -.noke-grid-sorting .result-count p .count { - font-weight: 700; - color: var(--blackColor); -} - -.noke-grid-sorting .ordering { - text-align: end; -} - -.noke-grid-sorting .ordering label { - display: inline-block; - color: var(--optionalColor); - margin-bottom: 0; - margin-right: 5px; -} - -.noke-grid-sorting .ordering select { - width: 215px; - height: 45px; - cursor: pointer; - line-height: 45px; - display: inline-block; - background: #f8f8f8; - border-color: #eeeeee; - color: var(--blackColor); - -webkit-transition: var(--transition); - transition: var(--transition); - padding-top: 1px; - padding-left: 12px; - font-size: var(--fontSize); - font-weight: 600; -} - -/*================================================ -Products Details Area CSS -=================================================*/ -.products-details-desc { - padding-left: 15px; -} - -.products-details-desc h3 { - margin-bottom: 15px; - font-size: 20px; -} - -.products-details-desc .price { - color: var(--blackColor); - margin-top: 15px; - margin-bottom: 12px; - font-weight: 700; - font-size: 17px; -} - -.products-details-desc .price .old-price { - text-decoration: line-through; - color: #9b9494; - font-weight: normal; -} - -.products-details-desc .products-review .rating { - display: inline-block; - padding-right: 3px; - font-size: 14px; -} - -.products-details-desc .products-review .rating i { - display: inline-block; - color: #f49f0b; - line-height: 1; -} - -.products-details-desc .products-review .rating-count { - display: inline-block; - color: var(--optionalColor); - line-height: initial; - position: relative; - top: 1px; -} - -.products-details-desc .products-review .rating-count:hover { - color: var(--blackColor); -} - -.products-details-desc .products-meta { - margin-top: 20px; -} - -.products-details-desc .products-meta span { - display: block; - font-weight: 500; - margin-bottom: 10px; - color: var(--optionalColor); -} - -.products-details-desc .products-meta span span { - display: inline-block; - margin-bottom: 0; -} - -.products-details-desc .products-meta span span.sku { - color: var(--startupMainColor); -} - -.products-details-desc .products-meta span a { - display: inline-block; - color: var(--blackColor); -} - -.products-details-desc .products-meta span a:hover, .products-details-desc .products-meta span a:focus { - color: var(--startupMainColor); -} - -.products-details-desc .products-meta span.in-stock { - color: green; -} - -.products-details-desc .products-meta span:last-child { - margin-bottom: 0; -} - -.products-details-desc .products-add-to-cart { - margin-top: 25px; -} - -.products-details-desc .products-add-to-cart .quantities { - position: relative; - padding-left: 45px; -} - -.products-details-desc .products-add-to-cart .quantities .sub-title { - left: 0; - top: 50%; - display: block; - font-weight: 600; - position: absolute; - -webkit-transform: translateY(-50%); - transform: translateY(-50%); -} - -.products-details-desc .products-add-to-cart .input-counter { - display: block; - max-width: 120px; - min-width: 120px; - text-align: center; - position: relative; - margin-bottom: 25px; -} - -.products-details-desc .products-add-to-cart .input-counter span { - top: 0; - width: 35px; - height: 100%; - cursor: pointer; - font-size: 15px; - line-height: 38px; - position: absolute; - color: var(--blackColor); - border: 1px solid #eeeeee; - background-color: transparent; - -webkit-transition: var(--transition); - transition: var(--transition); -} - -.products-details-desc .products-add-to-cart .input-counter span i { - position: relative; - top: 1px; -} - -.products-details-desc .products-add-to-cart .input-counter span.minus-btn { - left: 0; -} - -.products-details-desc .products-add-to-cart .input-counter span.plus-btn { - right: 0; -} - -.products-details-desc .products-add-to-cart .input-counter span:hover { - color: var(--optionalColor); -} - -.products-details-desc .products-add-to-cart .input-counter input { - height: 40px; - outline: 0; - width: 100%; - display: block; - text-align: center; - color: var(--blackColor); - border: 1px solid #eeeeee; - background-color: transparent; - font-size: 17px; - font-weight: 600; -} - -.products-details-desc .products-add-to-cart .input-counter input::-webkit-input-placeholder { - color: var(--blackColor); -} - -.products-details-desc .products-add-to-cart .input-counter input:-ms-input-placeholder { - color: var(--blackColor); -} - -.products-details-desc .products-add-to-cart .input-counter input::-ms-input-placeholder { - color: var(--blackColor); -} - -.products-details-desc .products-add-to-cart .input-counter input::placeholder { - color: var(--blackColor); -} - -.products-details-desc .default-btn { - -webkit-box-shadow: unset !important; - box-shadow: unset !important; -} - -.products-details-desc .social-share { - padding-left: 0; - list-style-type: none; - margin-bottom: 0; - margin-top: 30px; -} - -.products-details-desc .social-share li { - display: inline-block; - margin-right: 12px; -} - -.products-details-desc .social-share li span { - font-weight: 600; - position: relative; - top: -1px; -} - -.products-details-desc .social-share li a { - line-height: 1; - font-size: 18px; - color: var(--optionalColor); -} - -.products-details-desc .social-share li a:hover { - color: var(--blackColor); -} - -.products-details-tabs { - margin-top: 50px; -} - -.products-details-tabs .single-tabs-box { - margin-bottom: 40px; -} - -.products-details-tabs .single-tabs-box h2 { - text-align: center; - margin-bottom: 30px; - position: relative; - font-size: 22px; - z-index: 1; -} - -.products-details-tabs .single-tabs-box h2 span { - display: inline-block; - background-color: var(--whiteColor); - padding-left: 20px; - padding-right: 20px; -} - -.products-details-tabs .single-tabs-box h2::before { - left: 0; - right: 0; - top: 50%; - z-index: -1; - height: 1px; - content: ''; - margin-top: 1px; - position: absolute; - background-color: #eeeeee; - -webkit-transform: translateY(-50%); - transform: translateY(-50%); -} - -.products-details-tabs .single-tabs-box:last-child { - margin-bottom: 0; -} - -.products-details-tabs .single-tabs-box .inner-box { - max-width: 800px; - margin-left: auto; - margin-right: auto; -} - -.products-details-tabs .single-tabs-box .inner-box h3 { - font-size: 20px; - margin-bottom: 15px; -} - -.products-details-tabs .single-tabs-box .inner-box ul { - margin-top: 20px; - margin-bottom: 0; -} - -.products-details-tabs .single-tabs-box .inner-box ul li { - font-weight: 500; - margin-bottom: 12px; - color: var(--optionalColor); -} - -.products-details-tabs .single-tabs-box .inner-box ul li:last-child { - margin-bottom: 0; -} - -.products-details-tabs .single-tabs-box .inner-box .table-striped { - margin-bottom: 0; -} - -.products-details-tabs .single-tabs-box .inner-box .table-striped tbody tr td { - border: none; - padding: 15px; - color: var(--optionalColor); - font-weight: 500; - font-size: var(--fontSize); -} - -.products-details-tabs .single-tabs-box .inner-box .products-review-comments { - margin-top: 40px; -} - -.products-details-tabs .single-tabs-box .inner-box .products-review-comments .user-review { - position: relative; - margin-bottom: 20px; - padding: 0 0 20px 110px; - border-bottom: 1px solid #eeeeee; -} - -.products-details-tabs .single-tabs-box .inner-box .products-review-comments .user-review img { - top: 0; - left: 0; - width: 90px; - height: 90px; - border-radius: 5px; - position: absolute; -} - -.products-details-tabs .single-tabs-box .inner-box .products-review-comments .user-review .sub-comment { - margin-bottom: 8px; - font-weight: 600; - font-family: var(--headingFontFamily); -} - -.products-details-tabs .single-tabs-box .inner-box .products-review-comments .user-review .review-rating { - display: block; - margin-bottom: 8px; -} - -.products-details-tabs .single-tabs-box .inner-box .products-review-comments .user-review .review-rating .review-stars { - display: inline-block; -} - -.products-details-tabs .single-tabs-box .inner-box .products-review-comments .user-review .review-rating .review-stars i { - color: #cecfd2; - display: inline-block; -} - -.products-details-tabs .single-tabs-box .inner-box .products-review-comments .user-review .review-rating .review-stars i.checked { - color: orange; -} - -.products-details-tabs .single-tabs-box .inner-box .review-form-wrapper { - margin-top: 30px; -} - -.products-details-tabs .single-tabs-box .inner-box .review-form-wrapper h3 { - margin-bottom: 10px; -} - -.products-details-tabs .single-tabs-box .inner-box .review-form-wrapper .comment-notes span { - color: red; -} - -.products-details-tabs .single-tabs-box .inner-box .review-form-wrapper form { - margin-top: 20px; -} - -.products-details-tabs .single-tabs-box .inner-box .review-form-wrapper form .form-group { - margin-bottom: 25px; - text-align: start; -} - -.products-details-tabs .single-tabs-box .inner-box .review-form-wrapper form .rating { - text-align: start; - overflow: hidden; - max-width: 115px; - margin-top: -5px; - margin-bottom: 25px; -} - -.products-details-tabs .single-tabs-box .inner-box .review-form-wrapper form .rating label { - float: right; - position: relative; - width: 23px; - height: 23px; - cursor: pointer; -} - -.products-details-tabs .single-tabs-box .inner-box .review-form-wrapper form .rating label:not(:first-of-type) { - padding-right: 5px; -} - -.products-details-tabs .single-tabs-box .inner-box .review-form-wrapper form .rating label:before { - content: "\2605"; - -webkit-transition: var(--transition); - transition: var(--transition); - font-size: 27px; - color: #CCCCCC; - line-height: 1; -} - -.products-details-tabs .single-tabs-box .inner-box .review-form-wrapper form .rating input { - display: none; -} - -.products-details-tabs .single-tabs-box .inner-box .review-form-wrapper form .rating input:checked ~ label:before, .products-details-tabs .single-tabs-box .inner-box .review-form-wrapper form .rating:not(:checked) > label:hover:before, .products-details-tabs .single-tabs-box .inner-box .review-form-wrapper form .rating:not(:checked) > label:hover ~ label:before { - color: #f6b500; -} - -.products-details-tabs .single-tabs-box .inner-box .review-form-wrapper form .comment-form-cookies-consent { - text-align: start; - margin-bottom: 0; -} - -.products-details-tabs .single-tabs-box .inner-box .review-form-wrapper form .comment-form-cookies-consent [type="checkbox"]:checked, .products-details-tabs .single-tabs-box .inner-box .review-form-wrapper form .comment-form-cookies-consent [type="checkbox"]:not(:checked) { - display: none; -} - -.products-details-tabs .single-tabs-box .inner-box .review-form-wrapper form .comment-form-cookies-consent [type="checkbox"]:checked + label, .products-details-tabs .single-tabs-box .inner-box .review-form-wrapper form .comment-form-cookies-consent [type="checkbox"]:not(:checked) + label { - position: relative; - padding-left: 28px; - cursor: pointer; - line-height: 20px; - display: inline-block; - margin-bottom: 0; - color: var(--optionalColor); -} - -.products-details-tabs .single-tabs-box .inner-box .review-form-wrapper form .comment-form-cookies-consent [type="checkbox"]:checked + label:before, .products-details-tabs .single-tabs-box .inner-box .review-form-wrapper form .comment-form-cookies-consent [type="checkbox"]:not(:checked) + label:before { - content: ''; - position: absolute; - left: 0; - top: 0; - width: 19px; - height: 19px; - -webkit-transition: all 0.2s ease; - transition: all 0.2s ease; - border: 1px solid #eeeeee; - border-radius: 3px; - background: var(--whiteColor); -} - -.products-details-tabs .single-tabs-box .inner-box .review-form-wrapper form .comment-form-cookies-consent [type="checkbox"]:checked + label:after, .products-details-tabs .single-tabs-box .inner-box .review-form-wrapper form .comment-form-cookies-consent [type="checkbox"]:not(:checked) + label:after { - content: ''; - width: 8px; - height: 8px; - background: var(--startupMainColor); - position: absolute; - top: 6.5px; - left: 6px; - -webkit-transition: all 0.2s ease; - transition: all 0.2s ease; -} - -.products-details-tabs .single-tabs-box .inner-box .review-form-wrapper form .comment-form-cookies-consent [type="checkbox"]:not(:checked) + label:after { - opacity: 0; - -webkit-transform: scale(0); - transform: scale(0); -} - -.products-details-tabs .single-tabs-box .inner-box .review-form-wrapper form .comment-form-cookies-consent [type="checkbox"]:checked + label:after { - opacity: 1; - -webkit-transform: scale(1); - transform: scale(1); -} - -.products-details-tabs .single-tabs-box .inner-box .review-form-wrapper form .comment-form-cookies-consent [type="checkbox"]:hover + label:before { - border-color: var(--startupMainColor); -} - -.products-details-tabs .single-tabs-box .inner-box .review-form-wrapper form .comment-form-cookies-consent [type="checkbox"]:checked + label:before { - border-color: var(--startupMainColor); -} - -.products-details-tabs .single-tabs-box .inner-box .review-form-wrapper form button { - margin-top: 22px; - border: none; - display: inline-block; - text-align: center; - overflow: hidden; - color: var(--whiteColor); - background-color: var(--startupMainColor); - -webkit-transition: var(--transition); - transition: var(--transition); - border-radius: 5px; - padding: 13px 40px; - -webkit-box-shadow: 0 0.25rem 0.5rem rgba(0, 0, 0, 0.05), 0 1.5rem 2.2rem rgba(0, 0, 0, 0.1); - box-shadow: 0 0.25rem 0.5rem rgba(0, 0, 0, 0.05), 0 1.5rem 2.2rem rgba(0, 0, 0, 0.1); - font-weight: 700; - font-size: var(--fontSize); -} - -.products-details-tabs .single-tabs-box .inner-box .review-form-wrapper form button:hover { - background-color: var(--blackColor); - color: var(--whiteColor); -} - -/*================================================ -Cart Area CSS -=================================================*/ -.cart-table-desc table { - margin-bottom: 0; -} - -.cart-table-desc table thead tr th { - border: none; - padding: 13px 20px; - vertical-align: middle; - color: var(--whiteColor); - background-color: var(--blackColor); - font-family: var(--headingFontFamily); - font-size: var(--fontSize); - font-weight: 600; -} - -.cart-table-desc table tbody tr td { - color: var(--optionalColor); - vertical-align: middle; - font-size: 15px; - font-weight: 600; - padding-left: 0; - padding-right: 0; - padding-top: 15px; - padding-bottom: 15px; - border-left: none; - border-right: none; - border-color: #ebebeb; -} - -.cart-table-desc table tbody tr td.product-thumbnail a { - display: inline-block; -} - -.cart-table-desc table tbody tr td.product-thumbnail a img { - width: 80px; -} - -.cart-table-desc table tbody tr td.product-name a { - display: inline-block; -} - -.cart-table-desc table tbody tr td.product-subtotal .remove { - top: 2px; - color: red; - line-height: 1; - font-size: 20px; - margin-left: 40px; - position: relative; -} - -.cart-table-desc table tbody tr td.product-quantity .input-counter { - max-width: 120px; - min-width: 120px; - text-align: center; - display: inline-block; - position: relative; -} - -.cart-table-desc table tbody tr td.product-quantity .input-counter span { - top: 0; - width: 35px; - height: 100%; - font-size: 14px; - line-height: 37px; - position: absolute; - cursor: pointer; - color: var(--blackColor); - background-color: transparent; - -webkit-transition: var(--transition); - transition: var(--transition); - border: 1px solid #eeeeee; -} - -.cart-table-desc table tbody tr td.product-quantity .input-counter span i { - position: relative; - top: 1px; -} - -.cart-table-desc table tbody tr td.product-quantity .input-counter span.minus-btn { - left: 0; -} - -.cart-table-desc table tbody tr td.product-quantity .input-counter span.plus-btn { - right: 0; -} - -.cart-table-desc table tbody tr td.product-quantity .input-counter span:hover { - color: var(--mainColor); -} - -.cart-table-desc table tbody tr td.product-quantity .input-counter input { - height: 40px; - outline: 0; - width: 100%; - display: block; - text-align: center; - color: var(--blackColor); - border: 1px solid #eeeeee; - background-color: transparent; - font-size: 17px; - font-weight: 600; -} - -.cart-table-desc table tbody tr td.product-quantity .input-counter input::-webkit-input-placeholder { - color: var(--blackColor); -} - -.cart-table-desc table tbody tr td.product-quantity .input-counter input:-ms-input-placeholder { - color: var(--blackColor); -} - -.cart-table-desc table tbody tr td.product-quantity .input-counter input::-ms-input-placeholder { - color: var(--blackColor); -} - -.cart-table-desc table tbody tr td.product-quantity .input-counter input::placeholder { - color: var(--blackColor); -} - -.cart-table-desc table tbody tr td.product-subtotal { - overflow: hidden; -} - -.cart-table-desc table tbody tr:last-child td { - border-bottom: none; -} - -.cart-buttons-desc .shopping-coupon-code { - position: relative; -} - -.cart-buttons-desc .shopping-coupon-code .form-control { - height: 50px; -} - -.cart-buttons-desc .shopping-coupon-code button { - top: 0; - right: 0; - height: 50px; - border: none; - padding: 0 25px; - position: absolute; - color: var(--whiteColor); - border-radius: 0 5px 5px 0; - -webkit-transition: var(--transition); - transition: var(--transition); - background-color: var(--blackColor); - font-size: var(--fontSize); - font-weight: 700; -} - -.cart-buttons-desc .shopping-coupon-code button:hover { - background-color: var(--startupMainColor); -} - -.cart-buttons-desc .default-btn { - -webkit-box-shadow: unset; - box-shadow: unset; -} - -.cart-totals-desc { - padding: 30px; - background-color: #f5f5f5; -} - -.cart-totals-desc h3 { - padding: 16px 20px; - margin-bottom: 30px; - color: var(--whiteColor); - font-size: var(--fontSize); - background-color: var(--blackColor); - margin-top: -30px; - margin-left: -30px; - margin-right: -30px; -} - -.cart-totals-desc ul { - padding-left: 0; - margin-bottom: 0; - list-style-type: none; -} - -.cart-totals-desc ul li { - overflow: hidden; - display: block; - margin-bottom: 12px; - padding-bottom: 12px; - font-weight: 500; - color: var(--optionalColor); - border-bottom: 1px solid #ebebeb; -} - -.cart-totals-desc ul li span { - float: right; -} - -.cart-totals-desc ul li:last-child { - font-weight: 700; - color: var(--blackColor); - padding-bottom: 0; - margin-bottom: 0; - border-bottom: none; -} - -.cart-totals-desc .default-btn { - margin-top: 25px; - -webkit-box-shadow: unset; - box-shadow: unset; -} - -/*================================================ -Checkout Area CSS -=================================================*/ -.billing-details-desc { - padding: 30px 30px 10px; - background-color: #f5f5f5; -} - -.billing-details-desc h3 { - font-size: 20px; - margin-bottom: 30px; - color: var(--whiteColor); - background-color: var(--blackColor); - padding-top: 17px; - padding-left: 30px; - padding-right: 30px; - padding-bottom: 17px; - margin-right: -30px; - margin-left: -30px; - margin-top: -30px; -} - -.billing-details-desc .form-group { - margin-bottom: 20px; -} - -.billing-details-desc .form-group label { - display: block; - font-weight: 500; - margin-bottom: 12px; - color: var(--blackColor); -} - -.billing-details-desc .form-group label .required { - color: red; -} - -.billing-details-desc .form-group .form-control { - background-color: var(--whiteColor) !important; -} - -.billing-details-desc .form-group select { - background-color: var(--whiteColor); - height: 50px; - cursor: pointer; - border: none; - display: block; - width: 100%; - padding-left: 15px; -} - -.order-details-desc { - padding: 30px; - background-color: #f5f5f5; -} - -.order-details-desc h3 { - font-size: 20px; - margin-bottom: 30px; - color: var(--whiteColor); - background-color: var(--blackColor); - padding-left: 30px; - padding-right: 30px; - padding-top: 17px; - padding-bottom: 17px; - margin-left: -30px; - margin-right: -30px; - margin-top: -30px; -} - -.order-details-desc .order-details { - padding-left: 0; - margin-bottom: 0; - list-style-type: none; -} - -.order-details-desc .order-details li { - display: block; - font-weight: 500; - overflow: hidden; - margin-bottom: 12px; - padding-bottom: 12px; - color: var(--optionalColor); - border-bottom: 1px solid #ebebeb; -} - -.order-details-desc .order-details li span { - float: right; -} - -.order-details-desc .order-details li:last-child { - font-weight: 700; - margin-bottom: 0; - padding-bottom: 0; - border-bottom: none; - color: var(--blackColor); -} - -.order-details-desc .payment-method { - margin-top: 30px; - margin-bottom: 20px; -} - -.order-details-desc .payment-method p { - margin-bottom: 12px; -} - -.order-details-desc .payment-method p:last-child { - margin-bottom: 0; -} - -.order-details-desc .payment-method p [type="radio"]:checked, .order-details-desc .payment-method p [type="radio"]:not(:checked) { - display: none; -} - -.order-details-desc .payment-method p [type="radio"]:checked + label, .order-details-desc .payment-method p [type="radio"]:not(:checked) + label { - padding-left: 27px; - cursor: pointer; - display: block; - color: var(--blackColor); - position: relative; - margin-bottom: 8px; - font-size: var(--fontSize); - font-weight: 700; -} - -.order-details-desc .payment-method p [type="radio"]:checked + label::before, .order-details-desc .payment-method p [type="radio"]:not(:checked) + label::before { - content: ''; - position: absolute; - left: 0; - top: 5px; - width: 18px; - height: 18px; - border: 1px solid #dddddd; - border-radius: 50%; - background: var(--whiteColor); -} - -.order-details-desc .payment-method p [type="radio"]:checked + label::after, .order-details-desc .payment-method p [type="radio"]:not(:checked) + label::after { - content: ''; - width: 12px; - height: 12px; - background: var(--startupMainColor); - position: absolute; - top: 8px; - left: 3px; - border-radius: 50%; - -webkit-transition: var(--transition); - transition: var(--transition); -} - -.order-details-desc .payment-method p [type="radio"]:not(:checked) + label::after { - opacity: 0; - visibility: hidden; - -webkit-transform: scale(0); - transform: scale(0); -} - -.order-details-desc .payment-method p [type="radio"]:checked + label::after { - opacity: 1; - visibility: visible; - -webkit-transform: scale(1); - transform: scale(1); -} - -.order-details-desc .form-check { - color: var(--optionalColor); - font-weight: 500; -} - -.order-details-desc .form-check a { - color: var(--startupMainColor); -} - -.order-details-desc .form-check a:hover { - text-decoration: underline; -} - -.order-details-desc .default-btn { - margin-top: 25px; - display: block; - width: 100%; - -webkit-box-shadow: unset; - box-shadow: unset; - border-radius: 5px; - padding-top: 13px; - padding-bottom: 13px; - padding-left: 30px; - padding-right: 30px; -} - -/*================================================ -Testimonials Area CSS -=================================================*/ -.testimonials-area.bg-image { - background-image: url(../../assets/img/bg10.jpg); - background-position: center center; - background-repeat: no-repeat; - background-size: cover; -} - -.testimonials-area.bg-image .section-title.style-three h2 span { - background-color: #f7eee8; -} - -.testimonials-inner { - background-color: var(--blackColor); - padding-left: 60px; - padding-right: 60px; -} - -.testimonials-inner.bg-app-image { - background-image: url(../../assets/img/bg5.jpg); - background-position: center center; - background-size: cover; - background-repeat: no-repeat; -} - -.testimonials-inner .testimonials-item { - max-width: 650px; - -webkit-box-shadow: unset; - box-shadow: unset; - background-color: transparent; - padding: 0; - margin-left: auto; - margin-right: auto; -} - -.testimonials-inner .testimonials-item .icon { - color: var(--whiteColor); -} - -.testimonials-inner .testimonials-item p { - color: var(--whiteColor); -} - -.testimonials-inner .testimonials-item .info .title h3 { - color: var(--whiteColor); -} - -.testimonials-inner .testimonials-item .info .title span { - color: var(--whiteColor); - opacity: 0.9; -} - -.testimonials-inner .testimonials-slides.owl-theme .owl-nav [class*=owl-] { - margin: 0; - background-color: var(--whiteColor); - color: var(--appMainColor); - padding: 0 !important; - border-radius: 50%; - border: none; - font-size: 20px; - width: 50px; - height: 50px; - line-height: 50px; -} - -.testimonials-inner .testimonials-slides.owl-theme .owl-nav [class*=owl-]:hover { - background-color: var(--blackColor); - color: var(--whiteColor); -} - -.testimonials-inner.it-agency-color { - background-color: transparent; -} - -.testimonials-inner.it-agency-color .testimonials-item .icon { - color: var(--itAgencyMainColor); -} - -.testimonials-inner.it-agency-color .testimonials-item p { - color: var(--blackColor); -} - -.testimonials-inner.it-agency-color .testimonials-item .info .title h3 { - color: var(--blackColor); -} - -.testimonials-inner.it-agency-color .testimonials-item .info .title span { - color: var(--optionalColor); - opacity: 1; -} - -.testimonials-inner.it-agency-color .testimonials-slides.owl-theme .owl-nav [class*=owl-] { - background: var(--itAgencyGradientColor); - color: var(--whiteColor); -} - -.testimonials-inner.minimal-portfolio-color { - background-color: transparent; -} - -.testimonials-inner.minimal-portfolio-color .testimonials-item .icon { - color: var(--minimalPortfolioColor); -} - -.testimonials-inner.minimal-portfolio-color .testimonials-item p { - color: var(--blackColor); -} - -.testimonials-inner.minimal-portfolio-color .testimonials-item .info .title h3 { - color: var(--blackColor); -} - -.testimonials-inner.minimal-portfolio-color .testimonials-item .info .title span { - color: var(--optionalColor); - opacity: 1; -} - -.testimonials-inner.minimal-portfolio-color .testimonials-slides.owl-theme .owl-nav [class*=owl-] { - background: #f9f9f9; - color: var(--blackColor); -} - -.testimonials-inner.minimal-portfolio-color .testimonials-slides.owl-theme .owl-nav [class*=owl-]:hover { - background-color: var(--minimalPortfolioColor); - color: var(--whiteColor); -} - -.testimonials-inner.shop-color { - background-color: transparent; -} - -.testimonials-inner.shop-color .testimonials-item .icon { - color: var(--shopMainColor); -} - -.testimonials-inner.shop-color .testimonials-item p { - color: var(--blackColor); -} - -.testimonials-inner.shop-color .testimonials-item .info .title h3 { - color: var(--blackColor); -} - -.testimonials-inner.shop-color .testimonials-item .info .title span { - color: var(--optionalColor); - opacity: 1; -} - -.testimonials-inner.shop-color .testimonials-slides.owl-theme .owl-nav [class*=owl-] { - background: var(--whiteColor); - color: var(--blackColor); -} - -.testimonials-inner.shop-color .testimonials-slides.owl-theme .owl-nav [class*=owl-]:hover { - background-color: var(--blackColor); - color: var(--whiteColor); -} - -.testimonials-item { - text-align: center; - background-color: var(--whiteColor); - padding: 30px; - -webkit-box-shadow: 3px 5px 25px 0 rgba(0, 0, 0, 0.1); - box-shadow: 3px 5px 25px 0 rgba(0, 0, 0, 0.1); -} - -.testimonials-item .icon { - line-height: 1; - margin-bottom: 25px; - color: var(--appMainColor); - display: block; - font-size: 45px; -} - -.testimonials-item p { - color: var(--blackColor); - font-size: 20px; - font-weight: 500; -} - -.testimonials-item .info { - margin-top: 30px; - text-align: start; -} - -.testimonials-item .info img { - display: inline-block !important; - width: 80px !important; - height: 80px; - border-radius: 50%; - margin-right: 10px; -} - -.testimonials-item .info .title { - margin-left: 10px; -} - -.testimonials-item .info .title h3 { - font-size: 18px; - margin-bottom: 8px; -} - -.testimonials-item .info .title span { - display: block; - font-weight: 500; - color: var(--appMainColor); - opacity: .85; -} - -.startup-testimonials-area .container-fluid { - max-width: 1400px; -} - -.startup-testimonials-image { - z-index: 1; - text-align: center; - position: relative; - background-color: #2d2d37; - padding-top: 80px; - padding-left: 80px; - padding-bottom: 80px; -} - -.startup-testimonials-image img { - width: auto !important; - display: inline-block !important; -} - -.startup-testimonials-content { - text-align: center; - padding-left: 40px; - padding-right: 40px; - padding-bottom: 100px; -} - -.startup-testimonials-content .icon { - line-height: 1; - margin-bottom: 20px; - color: var(--startupMainColor); - display: block; - font-size: 45px; -} - -.startup-testimonials-content p { - color: var(--blackColor); - font-size: 18px; - font-weight: 600; -} - -.startup-testimonials-content .info { - margin-top: 25px; - padding-top: 25px; - border-top: 1px solid #eeeeee; -} - -.startup-testimonials-content .info h3 { - font-size: 18px; - margin-bottom: 8px; -} - -.startup-testimonials-content .info span { - display: block; - font-weight: 500; -} - -.startup-testimonials-slides.owl-theme .owl-nav { - margin-top: 0; - position: absolute; - right: 22%; - bottom: 105px; - -webkit-transform: translateX(22%); - transform: translateX(22%); -} - -.startup-testimonials-slides.owl-theme .owl-nav [class*=owl-] { - margin: 0 5px; - background-color: var(--startupMainColor); - color: var(--whiteColor); - padding: 8px 25px 7px !important; - border-radius: 0; - -webkit-transition: var(--transition); - transition: var(--transition); - border: none; - cursor: pointer; - font-size: var(--fontSize); -} - -.startup-testimonials-slides.owl-theme .owl-nav [class*=owl-] i { - line-height: 1; -} - -.startup-testimonials-slides.owl-theme .owl-nav [class*=owl-].owl-prev { - margin-left: 0; -} - -.startup-testimonials-slides.owl-theme .owl-nav [class*=owl-].owl-next { - margin-right: 0; -} - -.startup-testimonials-slides.owl-theme .owl-nav [class*=owl-]:hover { - background-color: var(--blackColor); - color: var(--whiteColor); -} - -.marketing-testimonials-area { - border-bottom: 1px solid #f0f0f0; -} - -.marketing-testimonials-image { - text-align: center; - position: relative; - z-index: 2; - margin-right: 50px; - margin-left: 50px; -} - -.marketing-testimonials-image::before { - left: 0; - right: 0; - top: 0; - bottom: 0; - z-index: -1; - content: ''; - position: absolute; - border-radius: 50%; - background-color: var(--marketingMainColor); -} - -.marketing-testimonials-image::after { - left: 0; - right: 0; - top: 0; - bottom: 0; - z-index: -2; - content: ''; - position: absolute; - border-radius: 65% 35% 70% 30% / 64% 31% 69% 36%; - background-color: #ffac00; -} - -.marketing-testimonials-image img { - border-radius: 30% 70% 70% 30% / 30% 30% 70% 70%; - display: inline-block !important; - width: auto !important; -} - -.marketing-testimonials-content { - text-align: center; - padding-bottom: 60px; -} - -.marketing-testimonials-content .icon { - line-height: 1; - margin-bottom: 20px; - color: var(--marketingMainColor); - display: block; - font-size: 45px; -} - -.marketing-testimonials-content p { - color: var(--blackColor); - font-size: 18px; - font-weight: 600; -} - -.marketing-testimonials-content .info { - margin-top: 25px; -} - -.marketing-testimonials-content .info h3 { - font-size: 18px; - margin-bottom: 8px; -} - -.marketing-testimonials-content .info span { - display: block; - font-weight: 500; -} - -.marketing-testimonials-slides.owl-theme .owl-nav { - right: 22%; - margin-top: 0; - bottom: 100px; - position: absolute; - -webkit-transform: translateX(22%); - transform: translateX(22%); -} - -.marketing-testimonials-slides.owl-theme .owl-nav [class*=owl-] { - margin: 0 5px; - background-color: var(--marketingMainColor); - color: var(--whiteColor); - padding: 8px 25px 7px !important; - border-radius: 0; - -webkit-transition: var(--transition); - transition: var(--transition); - border: none; - cursor: pointer; - font-size: var(--fontSize); -} - -.marketing-testimonials-slides.owl-theme .owl-nav [class*=owl-] i { - line-height: 1; -} - -.marketing-testimonials-slides.owl-theme .owl-nav [class*=owl-].owl-prev { - margin-left: 0; -} - -.marketing-testimonials-slides.owl-theme .owl-nav [class*=owl-].owl-next { - margin-right: 0; -} - -.marketing-testimonials-slides.owl-theme .owl-nav [class*=owl-]:hover { - background-color: var(--blackColor); - color: var(--whiteColor); -} - -.business-testimonials-area { - background: var(--businessGradientColor); - background-image: url(../../assets/img/bg1.jpg); - background-position: center center; - background-size: cover; - background-repeat: no-repeat; -} - -.business-testimonials-image { - text-align: center; - position: relative; - margin-right: 30px; - z-index: 2; -} - -.business-testimonials-image::before { - left: 0; - right: 0; - top: 0; - bottom: 0; - z-index: -1; - content: ''; - position: absolute; - border-radius: 20% 80% 50% 50% / 20% 50% 50% 80%; - border: 2px solid var(--whiteColor); -} - -.business-testimonials-image::after { - left: 0; - right: 0; - top: 0; - bottom: 0; - z-index: -2; - content: ''; - position: absolute; - border-radius: 65% 35% 70% 30% / 64% 31% 69% 36%; - background-color: #ffac00; -} - -.business-testimonials-image img { - border-radius: 30% 70% 70% 30% / 30% 30% 70% 70%; - display: inline-block !important; - width: auto !important; -} - -.business-testimonials-content { - text-align: center; -} - -.business-testimonials-content .icon { - line-height: 1; - margin-bottom: 25px; - color: var(--whiteColor); - display: block; - font-size: 45px; -} - -.business-testimonials-content p { - color: var(--whiteColor); - font-size: 20px; - font-weight: 500; -} - -.business-testimonials-content .info { - margin-top: 30px; -} - -.business-testimonials-content .info h3 { - font-size: 18px; - margin-bottom: 8px; - color: var(--whiteColor); -} - -.business-testimonials-content .info span { - display: block; - font-weight: 500; - color: var(--whiteColor); - opacity: .85; -} - -.saas-testimonials-item { - border: 1px solid #242532; - background-color: rgba(4, 6, 17, 0.9); - padding: 30px; -} - -.saas-testimonials-item .info { - margin-bottom: 25px; -} - -.saas-testimonials-item .info img { - display: inline-block !important; - width: 80px !important; - height: 80px; - border-radius: 50%; - margin-right: 10px; -} - -.saas-testimonials-item .info .title { - margin-left: 10px; -} - -.saas-testimonials-item .info .title h3 { - font-size: 18px; - margin-bottom: 8px; - color: var(--whiteColor); -} - -.saas-testimonials-item .info .title span { - display: block; - font-weight: 600; - color: var(--saasMainColor); -} - -.saas-testimonials-item p { - font-size: 16px; - color: var(--whiteColor); -} - -.testimonials-slides.owl-theme { - padding-left: 120px; - padding-right: 120px; -} - -.testimonials-slides.owl-theme .owl-nav { - margin-top: 0; -} - -.testimonials-slides.owl-theme .owl-nav [class*=owl-] { - margin: 0; - background-color: transparent; - color: var(--whiteColor); - padding: 8px 25px 6px !important; - border-radius: 0; - -webkit-transition: var(--transition); - transition: var(--transition); - border: none; - cursor: pointer; - position: absolute; - left: 0; - top: 50%; - -webkit-transform: translateY(-50%); - transform: translateY(-50%); - border: 1px solid var(--whiteColor); - font-size: var(--fontSize); -} - -.testimonials-slides.owl-theme .owl-nav [class*=owl-].owl-next { - left: auto; - right: 0; -} - -.testimonials-slides.owl-theme .owl-nav [class*=owl-] i { - line-height: 1; -} - -.testimonials-slides.owl-theme .owl-nav [class*=owl-]:hover { - background-color: var(--whiteColor); - color: var(--blackColor); -} - -.saas-testimonials-slides.owl-theme { - position: relative; - margin-top: -100px; - z-index: 1; - padding-left: 80px; - padding-right: 80px; -} - -.saas-testimonials-slides.owl-theme .owl-nav { - margin-top: 0; -} - -.saas-testimonials-slides.owl-theme .owl-nav [class*=owl-] { - top: 50%; - margin: 0; - left: 30px; - border: none; - font-size: 20px; - cursor: pointer; - border-radius: 0; - position: absolute; - color: var(--whiteColor); - -webkit-transform: translateY(-50%); - transform: translateY(-50%); - -webkit-transition: var(--transition); - transition: var(--transition); - background-color: transparent !important; -} - -.saas-testimonials-slides.owl-theme .owl-nav [class*=owl-].owl-next { - left: auto; - right: 30px; -} - -.saas-testimonials-slides.owl-theme .owl-nav [class*=owl-] i { - line-height: 1; -} - -.saas-testimonials-slides.owl-theme .owl-nav [class*=owl-]:hover { - color: var(--saasMainColor); -} - -.testimonials-box { - text-align: center; - border: 1px solid #d5edff; - padding: 30px; - margin-bottom: 30px; - -webkit-transition: var(--transition); - transition: var(--transition); -} - -.testimonials-box .icon { - width: 80px; - height: 80px; - line-height: 82px; - background-color: #d5edff; - border-radius: 50%; - font-size: 35px; - display: block; - color: #2ea7ff; - -webkit-transition: var(--transition); - transition: var(--transition); - margin-left: auto; - margin-right: auto; - margin-bottom: 20px; -} - -.testimonials-box p { - color: var(--blackColor); - font-size: 16px; - font-weight: 500; -} - -.testimonials-box .info { - margin-top: 25px; -} - -.testimonials-box .info h3 { - font-size: 18px; - margin-bottom: 8px; -} - -.testimonials-box .info span { - display: block; - font-weight: 500; - color: var(--personalPortfolioMainColor); - opacity: .85; -} - -.testimonials-box:hover { - border-color: var(--personalPortfolioMainColor) !important; -} - -.testimonials-box:hover .icon { - background-color: #2ea7ff; - color: var(--whiteColor); -} - -.testimonials-box:hover.bg-ca83ff .icon { - color: var(--whiteColor); - background-color: #ca83ff; -} - -.testimonials-box:hover.bg-ff9f07 .icon { - color: var(--whiteColor); - background-color: #ff9f07; -} - -.testimonials-box.bg-ca83ff { - border-color: #faf2ff; -} - -.testimonials-box.bg-ca83ff .icon { - background-color: #faf2ff; - color: #ca83ff; -} - -.testimonials-box.bg-ff9f07 { - border-color: #fff5e6; -} - -.testimonials-box.bg-ff9f07 .icon { - background-color: #fff5e6; - color: #ff9f07; -} - -/*================================================ -Team Area CSS -=================================================*/ -.team-area.with-border { - border-top: 1px solid #f0f0f0; -} - -.single-team-member { - background-color: #f9f4f0; - margin-bottom: 30px; - text-align: center; -} - -.single-team-member .content { - padding: 25px 20px; - z-index: 1; - position: relative; - -webkit-transition: var(--transition); - transition: var(--transition); -} - -.single-team-member .content h3 { - -webkit-transition: var(--transition); - transition: var(--transition); - font-size: 20px; - margin-bottom: 10px; -} - -.single-team-member .content span { - display: block; - color: var(--startupMainColor); - -webkit-transition: var(--transition); - transition: var(--transition); -} - -.single-team-member .content .social { - padding-left: 0; - margin-bottom: 0; - list-style-type: none; - position: absolute; - left: 0; - right: 0; - bottom: 25px; - opacity: 0; - visibility: hidden; - -webkit-transition: var(--transition); - transition: var(--transition); -} - -.single-team-member .content .social li { - display: inline-block; - margin-left: 7px; - margin-right: 7px; -} - -.single-team-member .content .social li a { - display: block; - font-size: 20px; - color: var(--whiteColor); -} - -.single-team-member .content .social li a:hover { - color: var(--startupMainColor); -} - -.single-team-member .content::before { - content: ''; - position: absolute; - left: 0; - right: 0; - height: 40px; - background-color: var(--blackColor); - top: -40px; - z-index: -1; - -webkit-transition: var(--transition); - transition: var(--transition); - opacity: 0; - visibility: hidden; -} - -.single-team-member:hover .content, .single-team-member.active .content { - background-color: var(--blackColor); -} - -.single-team-member:hover .content h3, .single-team-member.active .content h3 { - color: var(--whiteColor); - -webkit-transform: translateY(-40px); - transform: translateY(-40px); -} - -.single-team-member:hover .content span, .single-team-member.active .content span { - color: var(--whiteColor); - -webkit-transform: translateY(-40px); - transform: translateY(-40px); -} - -.single-team-member:hover .content .social, .single-team-member.active .content .social { - opacity: 1; - visibility: visible; -} - -.single-team-member:hover .content::before, .single-team-member.active .content::before { - opacity: 1; - visibility: visible; -} - -.single-team-member.marketing-color .content span { - color: var(--marketingMainColor); -} - -.single-team-member.marketing-color .content .social li a:hover { - color: var(--marketingMainColor); -} - -.single-team-member.marketing-color .content::before { - background-color: var(--marketingMainColor); -} - -.single-team-member.marketing-color:hover .content, .single-team-member.marketing-color.active .content { - background-color: var(--marketingMainColor); -} - -.single-team-member.marketing-color:hover .content span, .single-team-member.marketing-color.active .content span { - color: var(--whiteColor); -} - -.single-team-member.business-color .content { - position: relative; - z-index: 1; -} - -.single-team-member.business-color .content span { - color: var(--businessMainColor); -} - -.single-team-member.business-color .content .social li a:hover { - color: var(--whiteColor); -} - -.single-team-member.business-color .content::after { - position: absolute; - left: 0; - right: 0; - top: 0; - bottom: 0; - z-index: -1; - background: var(--businessGradientColor); - content: ''; - -webkit-transition: var(--transition); - transition: var(--transition); - opacity: 0; - visibility: hidden; -} - -.single-team-member.business-color .content::before { - background: var(--businessGradientColor); -} - -.single-team-member.business-color:hover .content, .single-team-member.business-color.active .content { - background-color: transparent; -} - -.single-team-member.business-color:hover .content::after, .single-team-member.business-color.active .content::after { - opacity: 1; - visibility: visible; -} - -.single-team-member.business-color:hover .content span, .single-team-member.business-color.active .content span { - color: var(--whiteColor); -} - -.single-team-member.bg-ffefef { - background-color: #ffefef; -} - -.single-team-member.bg-f0efff { - background-color: #f0efff; -} - -.single-team-member.it-agency-color .content { - position: relative; - z-index: 1; -} - -.single-team-member.it-agency-color .content span { - color: var(--itAgencyMainColor); -} - -.single-team-member.it-agency-color .content .social li a:hover { - color: var(--whiteColor); -} - -.single-team-member.it-agency-color .content::after { - position: absolute; - left: 0; - right: 0; - top: 0; - bottom: 0; - z-index: -1; - background: var(--itAgencyGradientColor); - content: ''; - -webkit-transition: var(--transition); - transition: var(--transition); - opacity: 0; - visibility: hidden; -} - -.single-team-member.it-agency-color .content::before { - background: var(--itAgencyGradientColor); -} - -.single-team-member.it-agency-color:hover .content, .single-team-member.it-agency-color.active .content { - background-color: transparent; -} - -.single-team-member.it-agency-color:hover .content::after, .single-team-member.it-agency-color.active .content::after { - opacity: 1; - visibility: visible; -} - -.single-team-member.it-agency-color:hover .content span, .single-team-member.it-agency-color.active .content span { - color: var(--whiteColor); -} - -.single-team-member.border-radius { - border-radius: 10px; -} - -.single-team-member.border-radius img { - border-radius: 10px 10px 0 0; -} - -.single-team-box { - text-align: center; - margin-bottom: 30px; -} - -.single-team-box .image { - position: relative; -} - -.single-team-box .image .social { - position: absolute; - left: 0; - right: 0; - bottom: 0; - padding-left: 0; - margin-bottom: 15px; - list-style-type: none; - -webkit-transition: var(--transition); - transition: var(--transition); - opacity: 0; - visibility: hidden; - padding: 25px; -} - -.single-team-box .image .social li { - display: inline-block; - margin-left: 2px; - margin-right: 2px; -} - -.single-team-box .image .social li a { - display: block; - width: 35px; - height: 35px; - border-radius: 50%; - line-height: 35px; - background-color: var(--whiteColor); - color: var(--blackColor); -} - -.single-team-box .image .social li a:hover { - background-color: var(--startupMainColor); - color: var(--whiteColor); -} - -.single-team-box .content { - margin-top: 22px; -} - -.single-team-box .content h3 { - font-size: 20px; - margin-bottom: 8px; -} - -.single-team-box .content span { - display: block; - color: var(--startupMainColor); -} - -.single-team-box:hover .image .social { - opacity: 1; - margin-bottom: 0; - visibility: visible; -} - -.single-team-box.consulting-color .image .social li a:hover { - background-color: var(--consultingMainColor); -} - -.single-team-box.consulting-color .content span { - color: var(--consultingMainColor); -} - -.team-member { - margin-bottom: 30px; - text-align: center; -} - -.team-member .content { - z-index: 1; - padding: 25px 20px; - position: relative; - -webkit-transition: var(--transition); - transition: var(--transition); - background-color: var(--whiteColor); - -webkit-box-shadow: 0 5px 20px rgba(34, 34, 34, 0.1); - box-shadow: 0 5px 20px rgba(34, 34, 34, 0.1); - margin-left: 15px; - margin-top: -30px; - margin-right: 15px; -} - -.team-member .content h3 { - -webkit-transition: var(--transition); - transition: var(--transition); - font-size: 20px; - margin-bottom: 10px; -} - -.team-member .content span { - display: block; - color: var(--startupMainColor); - -webkit-transition: var(--transition); - transition: var(--transition); -} - -.team-member .content .social { - padding-left: 0; - margin-bottom: 0; - list-style-type: none; - position: absolute; - left: 0; - right: 0; - bottom: 25px; - opacity: 0; - visibility: hidden; - -webkit-transition: var(--transition); - transition: var(--transition); -} - -.team-member .content .social li { - display: inline-block; - margin-left: 7px; - margin-right: 7px; -} - -.team-member .content .social li a { - display: block; - font-size: 20px; - color: var(--whiteColor); -} - -.team-member .content .social li a:hover { - color: var(--startupMainColor); -} - -.team-member .content::before { - content: ''; - position: absolute; - left: 0; - right: 0; - height: 40px; - background-color: var(--blackColor); - top: -40px; - z-index: -1; - -webkit-transition: var(--transition); - transition: var(--transition); - opacity: 0; - visibility: hidden; -} - -.team-member:hover .content, .team-member.active .content { - background-color: var(--blackColor); -} - -.team-member:hover .content h3, .team-member.active .content h3 { - color: var(--whiteColor); - -webkit-transform: translateY(-40px); - transform: translateY(-40px); -} - -.team-member:hover .content span, .team-member.active .content span { - color: var(--whiteColor); - -webkit-transform: translateY(-40px); - transform: translateY(-40px); -} - -.team-member:hover .content .social, .team-member.active .content .social { - opacity: 1; - visibility: visible; -} - -.team-member:hover .content::before, .team-member.active .content::before { - opacity: 1; - visibility: visible; -} - -.team-member.marketing-color .content span { - color: var(--marketingMainColor); -} - -.team-member.marketing-color .content .social li a:hover { - color: var(--whiteColor); -} - -.team-member.marketing-color .content::before { - background-color: var(--marketingMainColor); -} - -.team-member.marketing-color:hover .content, .team-member.marketing-color.active .content { - background-color: var(--marketingMainColor); -} - -.team-member.marketing-color:hover .content span, .team-member.marketing-color.active .content span { - color: var(--whiteColor); -} - -.team-member.business-color .content { - position: relative; - z-index: 1; -} - -.team-member.business-color .content span { - color: var(--businessMainColor); -} - -.team-member.business-color .content .social li a:hover { - color: var(--whiteColor); -} - -.team-member.business-color .content::after { - position: absolute; - left: 0; - right: 0; - top: 0; - bottom: 0; - z-index: -1; - background: var(--businessGradientColor); - content: ''; - -webkit-transition: var(--transition); - transition: var(--transition); - opacity: 0; - visibility: hidden; -} - -.team-member.business-color .content::before { - background: var(--businessGradientColor); -} - -.team-member.business-color:hover .content, .team-member.business-color.active .content { - background-color: transparent; -} - -.team-member.business-color:hover .content::after, .team-member.business-color.active .content::after { - opacity: 1; - visibility: visible; -} - -.team-member.business-color:hover .content span, .team-member.business-color.active .content span { - color: var(--whiteColor); -} - -.team-member.bg-ffefef { - background-color: #ffefef; -} - -.team-member.bg-f0efff { - background-color: #f0efff; -} - -.team-member.it-agency-color .content { - position: relative; - z-index: 1; -} - -.team-member.it-agency-color .content span { - color: var(--itAgencyMainColor); -} - -.team-member.it-agency-color .content .social li a:hover { - color: var(--whiteColor); -} - -.team-member.it-agency-color .content::after { - position: absolute; - left: 0; - right: 0; - top: 0; - bottom: 0; - z-index: -1; - background: var(--itAgencyGradientColor); - content: ''; - -webkit-transition: var(--transition); - transition: var(--transition); - opacity: 0; - visibility: hidden; -} - -.team-member.it-agency-color .content::before { - background: var(--itAgencyGradientColor); -} - -.team-member.it-agency-color:hover .content, .team-member.it-agency-color.active .content { - background-color: transparent; -} - -.team-member.it-agency-color:hover .content::after, .team-member.it-agency-color.active .content::after { - opacity: 1; - visibility: visible; -} - -.team-member.it-agency-color:hover .content span, .team-member.it-agency-color.active .content span { - color: var(--whiteColor); -} - -.team-member.border-radius { - border-radius: 10px; -} - -.team-member.border-radius img { - border-radius: 10px 10px 0 0; -} - -.team-box { - margin-bottom: 30px; - text-align: center; - position: relative; - overflow: hidden; -} - -.team-box img { - -webkit-transition: var(--transition); - transition: var(--transition); -} - -.team-box .content { - left: 0; - right: 0; - z-index: 1; - bottom: -100px; - padding: 25px; - -webkit-transition: .3s; - transition: .3s; - position: absolute; - opacity: 0; - visibility: hidden; - background: var(--startupMainColor); -} - -.team-box .content h3 { - font-size: 20px; - margin-bottom: 12px; - color: var(--whiteColor); -} - -.team-box .content span { - display: block; - color: var(--whiteColor); - margin-bottom: 15px; - font-weight: 600; -} - -.team-box .content .social { - padding-left: 0; - margin-bottom: 0; - list-style-type: none; -} - -.team-box .content .social li { - display: inline-block; - margin-left: 7px; - margin-right: 7px; -} - -.team-box .content .social li a { - display: block; - font-size: 20px; - color: var(--whiteColor); -} - -.team-box .content .social li a:hover { - color: var(--whiteColor); - opacity: 0.85; -} - -.team-box:hover img, .team-box.active img { - -webkit-transform: scale(1.1); - transform: scale(1.1); -} - -.team-box:hover .content, .team-box.active .content { - bottom: 0; - opacity: 1; - visibility: visible; -} - -.team-box.business-color .content { - background: var(--businessGradientColor); -} - -/*================================================ -How It Works Area CSS -=================================================*/ -.how-it-works-area .section-title { - max-width: 668px; -} - -.how-it-works-content { - padding-right: 30px; -} - -.how-it-works-content ul { - padding-left: 0; - margin-bottom: 0; - list-style-type: none; -} - -.how-it-works-content ul li { - margin-bottom: 30px; - position: relative; - padding-left: 65px; -} - -.how-it-works-content ul li i { - position: absolute; - left: 0; - top: 0; - font-size: 45px; - background: var(--saasGradientColor); - -webkit-background-clip: text; - background-clip: text; - -webkit-text-fill-color: transparent; -} - -.how-it-works-content ul li h3 { - font-size: 20px; - margin-bottom: 12px; -} - -.how-it-works-content ul li:last-child { - margin-bottom: 0; -} - -.how-it-works-content.white-color ul li { - color: var(--whiteColor); -} - -.how-it-works-content.white-color ul li h3 { - color: var(--whiteColor); -} - -.how-it-works-content.white-color ul li p { - color: var(--whiteColor); - opacity: 0.9; -} - -.how-it-works-image { - text-align: center; -} - -/*================================================ -Skills Area CSS -=================================================*/ -.skills-area.with-border { - border-top: 1px solid #f0f0f0; -} - -.single-skills-box { - margin-bottom: 30px; - text-align: center; - padding: 30px; - background-color: #ffefef; -} - -.single-skills-box.bg-eaf6ff { - background-color: #eaf6ff; -} - -.single-skills-box.bg-fff5e6 { - background-color: #fff5e6; -} - -.single-skills-box.bg-f0efff { - background-color: #f0efff; -} - -/*================================================ -Expertise Area CSS -=================================================*/ -.expertise-area { - border-bottom: 1px solid #f0f0f0; -} - -.expertise-box { - margin-bottom: 30px; -} - -.expertise-box .icon { - display: block; - width: 80px; - height: 80px; - font-size: 40px; - line-height: 80px; - color: var(--personalPortfolioMainColor); - border-radius: 10px; - -webkit-transition: var(--transition); - transition: var(--transition); - margin-bottom: 25px; - text-align: center; - background-color: #f0efff; -} - -.expertise-box .icon.bg-fff5e6 { - background-color: #fff5e6; -} - -.expertise-box .icon.bg-f3f9e7 { - background-color: #f3f9e7; -} - -.expertise-box .icon.bg-ffefef { - background-color: #ffefef; -} - -.expertise-box .icon.bg-eaf6ff { - background-color: #eaf6ff; -} - -.expertise-box .icon.bg-faf2ff { - background-color: #faf2ff; -} - -.expertise-box h3 { - font-size: 20px; - margin-bottom: 12px; -} - -.expertise-box:hover .icon { - background-color: var(--personalPortfolioMainColor); - color: var(--whiteColor); -} - -/*================================================ -CTA Area CSS -=================================================*/ -.cta-area { - position: relative; - z-index: 1; - background-color: var(--blackColor); - background-position: center center; - background-repeat: no-repeat; - background-size: cover; - background-image: url(../../assets/img/cta-bg1.jpg); -} - -.cta-area::before { - content: ''; - position: absolute; - left: 0; - right: 0; - top: 0; - bottom: 0; - z-index: -1; - background-color: #000000; - opacity: .75; -} - -.cta-content { - text-align: center; - max-width: 720px; - margin-left: auto; - margin-right: auto; -} - -.cta-content h2 { - color: var(--whiteColor); - margin-bottom: 0; - line-height: 1.4; - font-size: 40px; -} - -.cta-content p { - color: var(--whiteColor); - max-width: 600px; - opacity: 0.9; - margin-right: auto; - margin-left: auto; - margin-top: 20px; -} - -.cta-content .default-btn { - margin-top: 15px; -} - -.cta-content .default-btn:hover { - background-color: var(--whiteColor); - color: var(--blackColor); -} - -.cta-content .default-btn:hover i { - color: var(--blackColor); -} - -.call-to-action-area.bg-image { - background-image: url(../../assets/img/bg7.jpg); - background-position: right center; - background-repeat: no-repeat; - background-size: cover; -} - -.call-to-action-content { - color: var(--whiteColor); -} - -.call-to-action-content h2 { - color: var(--whiteColor); - margin-bottom: 0; - line-height: 1.4; - font-size: 37px; -} - -.call-to-action-btn { - text-align: end; -} - -.call-to-action-btn .default-btn:hover { - background-color: var(--whiteColor); - color: var(--blackColor); -} - -.call-to-action-btn .default-btn:hover i { - color: var(--blackColor); -} - -.call-to-action-inner { - background-color: var(--blackColor); - border-radius: 10px; - padding-left: 50px; - padding-right: 50px; -} - -.call-to-action-inner.it-agency-color { - background: var(--itAgencyGradientColor); -} - -.call-to-action-inner.it-agency-color .default-btn { - background: var(--whiteColor); - color: var(--blackColor); -} - -.call-to-action-inner.it-agency-color .default-btn i { - color: var(--blackColor); -} - -.call-to-action-inner.it-agency-color .default-btn:hover { - background: var(--blackColor); - color: var(--whiteColor); -} - -.call-to-action-inner.it-agency-color .default-btn:hover i { - color: var(--whiteColor); -} - -.call-to-action-inner.startup-color { - background: var(--startupMainColor); -} - -.call-to-action-inner.startup-color .default-btn { - background: var(--whiteColor); - color: var(--blackColor); -} - -.call-to-action-inner.startup-color .default-btn i { - color: var(--blackColor); -} - -.call-to-action-inner.startup-color .default-btn:hover { - background: var(--blackColor); - color: var(--whiteColor); -} - -.call-to-action-inner.startup-color .default-btn:hover i { - color: var(--whiteColor); -} - -/*================================================ -Timeline/Short Brief Area CSS -=================================================*/ -.short-brief-area { - border-bottom: 1px solid #f0f0f0; -} - -.short-brief-content { - margin-bottom: 30px; -} - -.short-brief-content .timeline { - width: 100%; - padding-left: 0; - margin-bottom: 0; - list-style-type: none; -} - -.short-brief-content .timeline-item { - padding-left: 40px; - position: relative; -} - -.short-brief-content .timeline-item:last-child .timeline-content { - padding-bottom: 0; -} - -.short-brief-content .timeline-item:not(.period):hover .timeline-marker::before { - background: transparent; - border: 3px solid var(--blackColor); -} - -.short-brief-content .timeline-marker { - position: absolute; - width: 15px; - bottom: 0; - top: 0; - left: 0; -} - -.short-brief-content .timeline-marker::before { - -webkit-transition: background 0.3s ease-in-out, border 0.3s ease-in-out; - transition: background 0.3s ease-in-out, border 0.3s ease-in-out; - background: var(--blackColor); - border: 3px solid transparent; - border-radius: 100%; - position: absolute; - display: block; - height: 15px; - width: 15px; - content: ""; - top: 4px; - left: 0; -} - -.short-brief-content .timeline-marker::after { - background: #eeeeee; - position: absolute; - display: block; - content: ""; - top: 24px; - bottom: 0; - left: 6px; - width: 3px; -} - -.short-brief-content .timeline-content { - padding-bottom: 30px; -} - -.short-brief-content .timeline-content h3 { - font-size: 20px; - margin-bottom: 13px; -} - -.short-brief-content .timeline-info .sub-title { - color: var(--optionalColor); - margin-bottom: 12px; - font-weight: 500; - display: block; -} - -.short-brief-content .timeline-info .sub-title span { - display: inline-block; - font-size: 18px; - font-weight: 700; -} - -/*================================================ -App Download Area CSS -=================================================*/ -.app-download-area { - background-image: url(../../assets/img/bg6.jpg); - background-position: center center; - background-repeat: no-repeat; - background-size: cover; -} - -.app-download-image { - text-align: center; - padding-right: 30px; -} - -.app-download-content .sub-title { - display: block; - margin-bottom: 12px; - color: var(--businessMainColor); - font-family: var(--headingFontFamily); - font-weight: 600; - font-size: 14px; -} - -.app-download-content h2 { - margin-bottom: 15px; - font-size: 40px; -} - -.app-download-content .btn-box { - margin-top: 25px; -} - -.app-download-content .btn-box .store-btn { - display: inline-block; - background-color: var(--whiteColor); - position: relative; - color: var(--optionalColor); - padding: 11px 30px 11px 70px; - margin-right: 15px; - border-radius: 5px; - -webkit-box-shadow: 0 0.25rem 0.5rem rgba(0, 0, 0, 0.02), 0 1.5rem 2.2rem rgba(0, 0, 0, 0.04); - box-shadow: 0 0.25rem 0.5rem rgba(0, 0, 0, 0.02), 0 1.5rem 2.2rem rgba(0, 0, 0, 0.04); - font-size: 13.5px; - font-weight: 600; -} - -.app-download-content .btn-box .store-btn img { - position: absolute; - left: 18px; - top: 50%; - -webkit-transform: translateY(-50%); - transform: translateY(-50%); - color: var(--blackColor); - font-size: 40px; - font-weight: normal; -} - -.app-download-content .btn-box .store-btn span { - display: block; - color: var(--blackColor); - margin-top: 2px; - font-size: 18px; - font-weight: 700; -} - -.app-download-content .btn-box .store-btn:last-child { - margin-right: 0; -} - -/*================================================ -Trending Style Area CSS -=================================================*/ -.trending-style-image { - position: relative; - margin-right: 15px; - padding-bottom: 100px; - padding-right: 150px; -} - -.trending-style-image img:nth-child(2) { - position: absolute; - right: 0; - bottom: 0; - width: 315px; -} - -.trending-style-content { - padding-left: 15px; -} - -.trending-style-content .sub-title { - display: block; - margin-bottom: 12px; - color: var(--shopMainColor); - font-family: var(--headingFontFamily); - font-weight: 600; - font-size: 14px; -} - -.trending-style-content h2 { - margin-bottom: 16px; - font-size: 40px; -} - -.trending-style-content h3 { - font-size: 20px; - line-height: 1.4; - margin-bottom: 15px; -} - -.trending-style-content .default-btn { - margin-top: 10px; -} - -/*================================================ -Pricing Area CSS -=================================================*/ -.pricing-area.with-black-border { - border-top: 1px solid #12141a; -} - -.single-pricing-box { - padding: 40px; - margin-bottom: 30px; - border: 1px dashed #eeeeee; - background-color: var(--whiteColor); - -webkit-box-shadow: 3px 5px 25px 0 rgba(0, 0, 0, 0.1); - box-shadow: 3px 5px 25px 0 rgba(0, 0, 0, 0.1); - -webkit-transition: var(--transition); - transition: var(--transition); -} - -.single-pricing-box .pricing-header { - margin-bottom: 25px; - padding-bottom: 25px; - border-bottom: 1px solid #eeeeee; -} - -.single-pricing-box .pricing-header h3 { - color: var(--marketingMainColor); - margin-bottom: 12px; - line-height: 1; - font-weight: 700; - font-size: 45px; -} - -.single-pricing-box .pricing-header h3 span { - color: var(--optionalColor); - font-size: var(--fontSize); - font-weight: normal; -} - -.single-pricing-box .pricing-header .sub-title { - display: block; - font-weight: 700; - color: var(--blackColor); -} - -.single-pricing-box .features-list { - margin-bottom: 25px; - padding-left: 0; - list-style-type: none; -} - -.single-pricing-box .features-list li { - margin-bottom: 12px; - color: var(--optionalColor); - font-family: var(--headingFontFamily); - position: relative; - padding-left: 25px; -} - -.single-pricing-box .features-list li i { - position: absolute; - left: 0; - top: 5px; - color: var(--marketingMainColor); -} - -.single-pricing-box .features-list li i.close { - color: red; -} - -.single-pricing-box .features-list li:last-child { - margin-bottom: 0; -} - -.single-pricing-box .default-btn { - display: block; - width: 100%; - text-align: center; - padding-left: 35px; - padding-right: 35px; - padding-top: 14px; - padding-bottom: 14px; -} - -.single-pricing-box .default-btn:hover { - color: var(--whiteColor); - background-color: #ffac00; -} - -.single-pricing-box:hover { - border-color: var(--marketingMainColor); -} - -.pricing-box { - margin-bottom: 30px; - text-align: center; - background-color: var(--whiteColor); - -webkit-box-shadow: 3px 5px 25px 0 rgba(0, 0, 0, 0.1); - box-shadow: 3px 5px 25px 0 rgba(0, 0, 0, 0.1); - padding: 30px; -} - -.pricing-box .pricing-header { - background: var(--appMainColor); - margin: -30px -30px 30px; - padding: 30px; - position: relative; - z-index: 1; - overflow: hidden; -} - -.pricing-box .pricing-header h3 { - margin-bottom: 15px; - font-size: 20px; - color: var(--whiteColor); -} - -.pricing-box .pricing-header .price { - color: var(--whiteColor); - margin-bottom: 12px; - line-height: 1; - font-weight: 700; - font-size: 45px; -} - -.pricing-box .pricing-header .price span { - opacity: 0.9; - font-size: var(--fontSize); - font-weight: normal; -} - -.pricing-box .pricing-header::before { - width: 400px; - height: 400px; - content: ''; - position: absolute; - left: 50%; - -webkit-transform: translateX(-50%); - transform: translateX(-50%); - border-radius: 50%; - bottom: 10px; - background-color: #0084ff; - opacity: 0.1; - z-index: -1; - -webkit-transition: var(--transition); - transition: var(--transition); -} - -.pricing-box .features-list { - padding-left: 0; - margin-bottom: 30px; - list-style-type: none; -} - -.pricing-box .features-list li { - margin-bottom: 12px; - color: var(--optionalColor); - font-family: var(--headingFontFamily); - position: relative; -} - -.pricing-box .features-list li.unactive { - text-decoration: line-through; - color: #9b9dbb; -} - -.pricing-box .features-list li:last-child { - margin-bottom: 0; -} - -.pricing-box .default-btn { - background: transparent; - color: var(--blackColor); - border: 1px solid var(--appMainColor); - -webkit-box-shadow: unset; - box-shadow: unset; -} - -.pricing-box .default-btn i { - color: var(--blackColor); -} - -.pricing-box .default-btn:hover { - background: var(--appMainColor); - border-color: var(--appMainColor); - color: var(--whiteColor); -} - -.pricing-box .default-btn:hover i { - color: var(--whiteColor); -} - -.pricing-box.saas-color .pricing-header { - background: var(--saasGradientColor); -} - -.pricing-box.saas-color .pricing-header::before { - background-color: var(--appMainColor); -} - -.pricing-box.saas-color .default-btn { - border-color: #4d4d57; -} - -.pricing-box.saas-color .default-btn:hover { - background: var(--saasMainColor); - border-color: var(--saasMainColor); -} - -.pricing-box.bg-black { - -webkit-box-shadow: unset; - box-shadow: unset; - background-color: #040611; - border: 1px solid #272836; - -webkit-transition: var(--transition); - transition: var(--transition); -} - -.pricing-box.bg-black .pricing-header { - -webkit-transition: var(--transition); - transition: var(--transition); - background: transparent; - border-bottom: 1px solid #272836; - padding: 0 0 30px; - margin-top: 0; - margin-left: 0; - margin-right: 0; -} - -.pricing-box.bg-black .pricing-header::before { - display: none; -} - -.pricing-box.bg-black .features-list { - color: var(--whiteColor); -} - -.pricing-box.bg-black .features-list li { - color: var(--whiteColor); -} - -.pricing-box.bg-black .features-list li.unactive { - color: #5c5656; -} - -.pricing-box.bg-black .default-btn { - color: var(--whiteColor); -} - -.pricing-box.bg-black .default-btn i { - color: var(--whiteColor); -} - -.pricing-box:hover .pricing-header::before { - bottom: -185%; -} - -.pricing-box.active .default-btn { - -webkit-box-shadow: 0 0.25rem 0.5rem rgba(0, 0, 0, 0.05), 0 1.5rem 2.2rem rgba(0, 0, 0, 0.1); - box-shadow: 0 0.25rem 0.5rem rgba(0, 0, 0, 0.05), 0 1.5rem 2.2rem rgba(0, 0, 0, 0.1); - background: var(--appGradientColor); - color: var(--whiteColor); - border: none; -} - -.pricing-box.active .default-btn i { - color: var(--whiteColor); -} - -.pricing-box.active .default-btn.saas-color { - background: var(--saasGradientColor); -} - -.pricing-tabs { - margin-top: -10px; -} - -.pricing-tabs .nav { - padding-left: 0; - margin-bottom: 50px; - list-style-type: none; - -webkit-box-pack: center; - -ms-flex-pack: center; - justify-content: center; - border-bottom: none; -} - -.pricing-tabs .nav .nav-item .nav-link { - background-color: var(--whiteColor); - position: relative; - z-index: 1; - color: var(--blackColor); - border-radius: 0; - border: none; - padding: 11px 35px; - font-size: var(--fontSize); - font-weight: 700; -} - -.pricing-tabs .nav .nav-item .nav-link::before { - content: ''; - position: absolute; - left: 0; - right: 0; - top: 0; - bottom: 0; - z-index: -1; - background: var(--saasGradientColor); - -webkit-transition: var(--transition); - transition: var(--transition); - opacity: 0; - visibility: hidden; -} - -.pricing-tabs .nav .nav-item .nav-link:hover, .pricing-tabs .nav .nav-item .nav-link.active { - color: var(--whiteColor); -} - -.pricing-tabs .nav .nav-item .nav-link:hover::before, .pricing-tabs .nav .nav-item .nav-link.active::before { - opacity: 1; - visibility: visible; -} - -.pricing-tabs .nav .nav-item:first-child .nav-link { - border-radius: 5px 0 0 5px; -} - -.pricing-tabs .nav .nav-item:first-child .nav-link::before { - border-radius: 5px 0 0 5px; -} - -.pricing-tabs .nav .nav-item:last-child .nav-link { - border-radius: 0 5px 5px 0; -} - -.pricing-tabs .nav .nav-item:last-child .nav-link::before { - border-radius: 0 5px 5px 0; -} - -.pricing-item { - padding: 30px; - overflow: hidden; - position: relative; - text-align: center; - margin-bottom: 30px; - background-color: #f3f4f7; - -webkit-transition: var(--transition); - transition: var(--transition); -} - -.pricing-item .pricing-header { - border-bottom: 1px solid #e5e4e4; - -webkit-transition: var(--transition); - transition: var(--transition); - margin: -30px 0 30px; - padding: 30px; -} - -.pricing-item .pricing-header h3 { - -webkit-transition: var(--transition); - transition: var(--transition); - margin-bottom: 15px; - font-size: 20px; -} - -.pricing-item .pricing-header .price { - color: var(--consultingMainColor); - margin-bottom: 12px; - line-height: 1; - font-weight: 700; - font-size: 45px; -} - -.pricing-item .pricing-header .price span { - opacity: 0.9; - color: var(--optionalColor); - -webkit-transition: var(--transition); - transition: var(--transition); - font-size: var(--fontSize); - font-weight: normal; -} - -.pricing-item .features-list { - padding-left: 0; - margin-bottom: 30px; - list-style-type: none; -} - -.pricing-item .features-list li { - margin-bottom: 12.5px; - font-family: var(--headingFontFamily); -} - -.pricing-item .features-list li.unactive { - text-decoration: line-through; - color: #b0b1c0; -} - -.pricing-item .features-list li:last-child { - margin-bottom: 0; -} - -.pricing-item .ribbon { - top: -10px; - right: -25px; - width: 150px; - height: 150px; - overflow: hidden; - position: absolute; -} - -.pricing-item .ribbon span { - background-color: var(--whiteColor); - text-transform: uppercase; - color: var(--blackColor); - -webkit-transform: rotate(45deg); - transform: rotate(45deg); - text-align: center; - position: absolute; - display: block; - width: 225px; - left: -25px; - top: 30px; - padding-top: 8px; - padding-bottom: 8px; - font-size: var(--fontSize); - font-weight: 700; -} - -.pricing-item.active, .pricing-item:hover { - color: var(--whiteColor); - background-color: var(--blackColor); -} - -.pricing-item.active .pricing-header, .pricing-item:hover .pricing-header { - border-bottom-color: #464c59; -} - -.pricing-item.active .pricing-header h3, .pricing-item:hover .pricing-header h3 { - color: var(--whiteColor); -} - -.pricing-item.active .pricing-header .price span, .pricing-item:hover .pricing-header .price span { - color: var(--whiteColor); -} - -.pricing-item.active .default-btn, .pricing-item:hover .default-btn { - background-color: var(--whiteColor); - color: var(--blackColor); -} - -.pricing-item.active .default-btn i, .pricing-item:hover .default-btn i { - color: var(--blackColor); -} - -.pricing-item.border-radius { - border-radius: 10px; - background-color: #f9f9f9; -} - -.pricing-item.it-agency-color .pricing-header { - border-bottom: none; - background-color: #fff5e6; - margin-left: -30px; - margin-right: -30px; -} - -.pricing-item.it-agency-color .pricing-header h3 { - color: var(--blackColor); -} - -.pricing-item.it-agency-color .pricing-header .price { - color: var(--blackColor); -} - -.pricing-item.it-agency-color .features-list { - color: var(--blackColor); -} - -.pricing-item.it-agency-color .features-list li { - color: var(--blackColor); -} - -.pricing-item.it-agency-color .features-list li.unactive { - color: #b0b1c0; -} - -.pricing-item.it-agency-color .default-btn { - background-color: var(--blackColor); - color: var(--whiteColor); -} - -.pricing-item.it-agency-color .default-btn i { - color: var(--whiteColor); -} - -.pricing-item.it-agency-color:hover .pricing-header .price span { - color: var(--optionalColor); -} - -.pricing-item.it-agency-color.active { - background-color: #f9f9f9; -} - -.pricing-item.it-agency-color.active .pricing-header { - background: var(--itAgencyGradientColor); -} - -.pricing-item.it-agency-color.active .pricing-header h3 { - color: var(--whiteColor); -} - -.pricing-item.it-agency-color.active .pricing-header .price { - color: var(--whiteColor); -} - -.pricing-item.it-agency-color.active .pricing-header .price span { - color: var(--whiteColor); -} - -.pricing-item.it-agency-color.active .default-btn { - background: var(--itAgencyGradientColor); - color: var(--whiteColor); -} - -.pricing-item.it-agency-color.active .default-btn i { - color: var(--whiteColor); -} - -.pricing-item.startup-color .pricing-header .price { - color: var(--startupMainColor); -} - -/*================================================ -App Screenshot Area CSS -=================================================*/ -.app-screenshot-area { - background: var(--appGradientColor); - position: relative; - overflow: hidden; - z-index: 1; -} - -.app-screenshot-area .section-title h2 { - color: var(--whiteColor); -} - -.app-screenshot-area .section-title p { - color: var(--whiteColor); -} - -.app-screenshot-area::before { - content: ''; - position: absolute; - left: 0; - right: 0; - bottom: 0; - height: 200px; - z-index: -1; - background-color: var(--whiteColor); -} - -.app-screenshot-area .overlay { - position: absolute; - left: 0; - right: 0; - top: 0; - bottom: 0; - z-index: -2; -} - -.app-screenshot-area .overlay::before { - width: 650px; - height: 650px; - position: absolute; - left: -3%; - border-radius: 30% 70% 70% 30% / 30% 30% 70% 70%; - top: -25%; - content: ''; - background-color: #0084ff; - opacity: 0.10; - -webkit-animation: border-transform 10s linear infinite alternate forwards; - animation: border-transform 10s linear infinite alternate forwards; -} - -.app-screenshot-area .overlay::after { - right: -3%; - bottom: 0; - content: ''; - opacity: 0.10; - width: 600px; - height: 600px; - position: absolute; - border-radius: 30% 70% 70% 30% / 30% 30% 70% 70%; - background-color: #0084ff; - -webkit-animation: border-transform 10s linear infinite alternate forwards; - animation: border-transform 10s linear infinite alternate forwards; -} - -.single-sccrenshot-item { - text-align: center; -} - -.screenshot-wrap { - position: relative; -} - -.screenshot-wrap .screenshot-frame { - z-index: 2; - border-radius: 20px; - display: block; - width: 241px; - height: 504px; - position: absolute; - top: 0; - bottom: 0; - margin: 10px 0; - left: 50%; - -webkit-transform: translateX(-50%); - transform: translateX(-50%); - background-image: url(../../assets/img/screenshot/frame.png); - background-repeat: no-repeat; - background-size: 100% 100%; -} - -.screenshot-slides { - margin-top: -10px; - margin-bottom: -10px; -} - -.screenshot-slides.owl-theme .owl-nav { - margin-top: 0; -} - -.screenshot-slides.owl-theme .owl-nav [class*=owl-] { - margin: 0; - background-color: var(--whiteColor); - color: var(--appMainColor); - -webkit-transition: var(--transition); - transition: var(--transition); - border: none; - cursor: pointer; - position: absolute; - left: -40px; - top: 50%; - width: 40px; - line-height: 40px; - height: 40px; - border-radius: 50%; - -webkit-transform: translateY(-50%); - transform: translateY(-50%); - font-size: 18px; -} - -.screenshot-slides.owl-theme .owl-nav [class*=owl-].owl-next { - left: auto; - right: -40px; -} - -.screenshot-slides.owl-theme .owl-nav [class*=owl-] i { - line-height: 1; -} - -.screenshot-slides.owl-theme .owl-nav [class*=owl-]:hover { - background-color: var(--blackColor); - color: var(--whiteColor); -} - -/*================================================ -Facility Area CSS -=================================================*/ -.facility-content { - padding-right: 50px; -} - -.facility-content .item { - margin-bottom: 30px; - position: relative; - padding-left: 65px; -} - -.facility-content .item:last-child { - margin-bottom: 0; -} - -.facility-content .item i { - position: absolute; - font-size: 45px; - left: 0; - top: 0; -} - -.facility-content .item h3 { - font-size: 20px; - margin-bottom: 12px; -} - -/*================================================ -Latest Posts Area CSS -=================================================*/ -.latest-posts-area .section-title.style-four { - padding-bottom: 8px; - margin-top: -7px; - margin-bottom: 30px; -} - -.single-latest-post-box { - margin-bottom: 30px; -} - -.single-latest-post-box .post-image { - overflow: hidden; -} - -.single-latest-post-box .post-image img { - -webkit-transition: var(--transition); - transition: var(--transition); -} - -.single-latest-post-box .post-content { - padding-top: 25px; - padding-left: 25px; - padding-right: 25px; -} - -.single-latest-post-box .post-content .tag { - margin-bottom: 12px; - display: inline-block; - position: relative; - font-weight: 600; - color: var(--blackColor); -} - -.single-latest-post-box .post-content .meta { - padding-left: 0; - margin-bottom: 13px; - list-style-type: none; -} - -.single-latest-post-box .post-content .meta li { - display: inline-block; - margin-right: 15px; - position: relative; - padding-left: 22px; - color: var(--optionalColor); -} - -.single-latest-post-box .post-content .meta li i { - position: absolute; - left: 0; - top: 4px; - color: var(--blackColor); -} - -.single-latest-post-box .post-content .meta li a { - color: var(--optionalColor); -} - -.single-latest-post-box .post-content .meta li a:hover { - color: var(--blackColor); -} - -.single-latest-post-box .post-content h3 { - margin-bottom: 12px; - line-height: 1.4; - font-size: 25px; -} - -.single-latest-post-box .post-content .link-btn { - font-weight: 600; - position: relative; - display: inline-block; - padding-right: 12px; -} - -.single-latest-post-box .post-content .link-btn i { - position: absolute; - right: 0; - top: 7px; - font-size: 12px; -} - -.single-latest-post-box .post-content .link-btn::before { - content: ''; - position: absolute; - right: 0; - bottom: 0; - width: 0%; - height: 1px; - background-color: var(--blackColor); - -webkit-transition: var(--transition); - transition: var(--transition); -} - -.single-latest-post-box .post-content .link-btn:hover { - padding-right: 15px; - color: var(--blackColor); -} - -.single-latest-post-box .post-content .link-btn:hover::before { - width: 100%; - right: auto; - left: 0; -} - -.single-latest-post-box:hover .post-image img { - -webkit-transform: scale(1.1); - transform: scale(1.1); -} - -/*================================================ -Partner Area CSS -=================================================*/ -.partner-area.bg-business-color { - background: var(--businessGradientColor); -} - -.partner-area.with-top-border { - border-top: 1px solid #f0f0f0; -} - -.partner-area.bg-it-agency-color { - background: var(--itAgencyGradientColor); -} - -.partner-area.bg-1b2232 .section-title h2 { - color: var(--whiteColor); -} - -.partner-item { - text-align: center; -} - -.partner-item a img { - width: auto !important; - display: inline-block !important; -} - -/*================================================ -Clients Area CSS -=================================================*/ -.single-clients-box { - margin-bottom: 30px; - text-align: center; - background-color: var(--whiteColor); -} - -.single-clients-box a { - padding: 30px; -} - -.single-clients-box a img { - -webkit-transition: var(--transition); - transition: var(--transition); -} - -.single-clients-box:hover a img { - -webkit-transform: scale(1.05); - transform: scale(1.05); -} - -/*================================================ -Featured Video Area CSS -=================================================*/ -.single-featured-video-box { - margin-bottom: 30px; -} - -.single-featured-video-box .image { - position: relative; - overflow: hidden; -} - -.single-featured-video-box .image img { - -webkit-transition: var(--transition); - transition: var(--transition); -} - -.single-featured-video-box .image .video-btn { - position: absolute; - left: 15px; - bottom: 15px; - color: var(--whiteColor); - font-weight: 600; -} - -.single-featured-video-box .image .video-btn i { - display: inline-block; - width: 40px; - height: 40px; - color: var(--blackColor); - background-color: var(--whiteColor); - text-align: center; - border-radius: 50%; - line-height: 41px; - margin-right: 10px; - -webkit-transition: var(--transition); - transition: var(--transition); -} - -.single-featured-video-box .image .video-btn:hover i { - background-color: var(--blackColor); - color: var(--whiteColor); -} - -.single-featured-video-box .content { - margin-top: 25px; -} - -.single-featured-video-box .content .tag { - margin-bottom: 12px; - display: inline-block; - position: relative; - font-weight: 600; - color: var(--blackColor); -} - -.single-featured-video-box .content .meta { - padding-left: 0; - margin-bottom: 13px; - list-style-type: none; -} - -.single-featured-video-box .content .meta li { - display: inline-block; - margin-right: 15px; - position: relative; - padding-left: 22px; - color: var(--optionalColor); -} - -.single-featured-video-box .content .meta li i { - position: absolute; - left: 0; - top: 4px; - color: var(--blackColor); -} - -.single-featured-video-box .content .meta li a { - color: var(--optionalColor); -} - -.single-featured-video-box .content .meta li a:hover { - color: var(--blackColor); -} - -.single-featured-video-box .content h3 { - margin-bottom: 0; - line-height: 1.4; - font-size: 25px; -} - -.single-featured-video-box:hover img { - -webkit-transform: scale(1.1); - transform: scale(1.1); -} - -.featured-video-item-list .single-featured-video-item { - margin-bottom: 30px; -} - -.featured-video-item-list .single-featured-video-item .row { - margin-left: 0; - margin-right: 0; -} - -.featured-video-item-list .single-featured-video-item .row .col-lg-4, .featured-video-item-list .single-featured-video-item .row .col-lg-8 { - padding-left: 0; - padding-right: 0; -} - -.featured-video-item-list .single-featured-video-item .image { - height: 100%; - position: relative; - background-position: center center; - background-repeat: no-repeat; - background-size: cover; -} - -.featured-video-item-list .single-featured-video-item .image.bg1 { - background-image: url(../../assets/img/featured-video/featured-video2.jpg); -} - -.featured-video-item-list .single-featured-video-item .image.bg2 { - background-image: url(../../assets/img/featured-video/featured-video3.jpg); -} - -.featured-video-item-list .single-featured-video-item .image.bg3 { - background-image: url(../../assets/img/featured-video/featured-video4.jpg); -} - -.featured-video-item-list .single-featured-video-item .image.bg4 { - background-image: url(../../assets/img/featured-video/featured-video5.jpg); -} - -.featured-video-item-list .single-featured-video-item .image img { - display: none; -} - -.featured-video-item-list .single-featured-video-item .image .link-btn { - left: 0; - right: 0; - top: 0; - bottom: 0; - z-index: 1; - display: block; - position: absolute; -} - -.featured-video-item-list .single-featured-video-item .image .video-btn { - color: var(--whiteColor); - position: absolute; - bottom: 10px; - left: 10px; - z-index: 2; - font-size: 14px; - font-weight: 600; -} - -.featured-video-item-list .single-featured-video-item .image .video-btn i { - display: inline-block; - width: 35px; - height: 35px; - color: var(--blackColor); - background-color: var(--whiteColor); - text-align: center; - border-radius: 50%; - line-height: 36px; - margin-right: 5px; - -webkit-transition: var(--transition); - transition: var(--transition); -} - -.featured-video-item-list .single-featured-video-item .image .video-btn:hover i { - background-color: var(--blackColor); - color: var(--whiteColor); -} - -.featured-video-item-list .single-featured-video-item .content { - padding-left: 25px; - padding-top: 9.5px; - padding-bottom: 9.5px; -} - -.featured-video-item-list .single-featured-video-item .content .meta { - padding-left: 0; - margin-bottom: 13px; - list-style-type: none; -} - -.featured-video-item-list .single-featured-video-item .content .meta li { - display: inline-block; - margin-right: 15px; - position: relative; - padding-left: 22px; - color: var(--optionalColor); -} - -.featured-video-item-list .single-featured-video-item .content .meta li i { - position: absolute; - left: 0; - top: 4px; - color: var(--blackColor); -} - -.featured-video-item-list .single-featured-video-item .content .meta li a { - color: var(--optionalColor); -} - -.featured-video-item-list .single-featured-video-item .content .meta li a:hover { - color: var(--blackColor); -} - -.featured-video-item-list .single-featured-video-item .content h3 { - margin-bottom: 0; - line-height: 1.4; - font-size: 20px; -} - -/*================================================ -Blog Area CSS -=================================================*/ -.blog-area.with-border { - border-top: 1px solid #f0f0f0; -} - -.blog-area.with-black-border { - border-top: 1px solid #12141a; -} - -.single-blog-post { - margin-bottom: 30px; - position: relative; - overflow: hidden; -} - -.single-blog-post img { - -webkit-transition: var(--transition); - transition: var(--transition); -} - -.single-blog-post .content { - left: 0; - right: 0; - bottom: 0; - z-index: 2; - padding: 25px; - position: absolute; -} - -.single-blog-post .content .meta { - padding-left: 0; - margin-bottom: 13px; - list-style-type: none; -} - -.single-blog-post .content .meta li { - display: inline-block; - margin-right: 15px; - color: var(--whiteColor); - position: relative; - padding-left: 22px; -} - -.single-blog-post .content .meta li i { - position: absolute; - left: 0; - top: 4px; - color: var(--startupMainColor); -} - -.single-blog-post .content .meta li a { - color: var(--whiteColor); -} - -.single-blog-post .content h3 { - color: var(--whiteColor); - margin-bottom: 13px; - font-size: 20px; - line-height: 1.4; -} - -.single-blog-post .content h3 a { - color: var(--whiteColor); -} - -.single-blog-post .content h3 a:hover { - color: var(--startupMainColor); -} - -.single-blog-post .content .link-btn { - font-weight: 500; - position: relative; - opacity: 0.85; - color: var(--whiteColor); - padding-right: 12px; - padding-bottom: 2px; -} - -.single-blog-post .content .link-btn i { - position: absolute; - right: 0; - top: 7px; - font-size: 12px; -} - -.single-blog-post .content .link-btn::before { - content: ''; - position: absolute; - right: 0; - bottom: 0; - width: 0%; - height: 1px; - background-color: #eeeeee; - -webkit-transition: var(--transition); - transition: var(--transition); -} - -.single-blog-post .content .link-btn:hover { - opacity: 1; - padding-right: 15px; -} - -.single-blog-post .content .link-btn:hover::before { - width: 100%; - right: auto; - left: 0; -} - -.single-blog-post::before { - position: absolute; - height: 100%; - content: ""; - width: 100%; - z-index: 1; - left: 0; - top: 0; - background: -webkit-gradient(linear, left bottom, left top, color-stop(0, rgba(35, 35, 37, 0.9)), color-stop(50%, rgba(35, 35, 37, 0.5)), color-stop(75%, rgba(22, 22, 23, 0)), to(rgba(0, 0, 0, 0))); - background: linear-gradient(to top, rgba(35, 35, 37, 0.9) 0, rgba(35, 35, 37, 0.5) 50%, rgba(22, 22, 23, 0) 75%, rgba(0, 0, 0, 0) 100%); -} - -.single-blog-post:hover img { - -webkit-transform: scale(1.05); - transform: scale(1.05); -} - -.blog-section-title { - margin-bottom: 30px; -} - -.blog-section-title h2 { - margin-bottom: 0; - font-size: 40px; -} - -.blog-section-title p { - margin-top: 15px; -} - -.blog-section-title .sub-title { - display: block; - margin-bottom: 12px; - color: var(--startupMainColor); - font-family: var(--headingFontFamily); - font-weight: 600; - font-size: 14px; -} - -.blog-section-title .sub-title.marketing-color { - color: var(--marketingMainColor); -} - -.blog-section-title .default-btn { - margin-top: 10px; -} - -.single-post-item { - margin-bottom: 30px; - background-color: var(--whiteColor); - -webkit-box-shadow: 3px 5px 25px 0 rgba(0, 0, 0, 0.1); - box-shadow: 3px 5px 25px 0 rgba(0, 0, 0, 0.1); -} - -.single-post-item .post-content { - padding: 25px; -} - -.single-post-item .post-content .tag { - margin-bottom: 14px; - display: inline-block; - position: relative; - padding-left: 24px; - font-weight: 600; - color: var(--appMainColor); -} - -.single-post-item .post-content .tag i { - position: absolute; - left: 0; - top: 4px; -} - -.single-post-item .post-content .meta { - padding-left: 0; - margin-bottom: 13px; - list-style-type: none; -} - -.single-post-item .post-content .meta li { - display: inline-block; - margin-right: 15px; - position: relative; - padding-left: 22px; - color: var(--optionalColor); -} - -.single-post-item .post-content .meta li i { - position: absolute; - left: 0; - top: 4px; - color: var(--marketingMainColor); -} - -.single-post-item .post-content .meta li a { - color: var(--optionalColor); -} - -.single-post-item .post-content .meta li a:hover { - color: var(--marketingMainColor); -} - -.single-post-item .post-content h3 { - margin-bottom: 14px; - line-height: 1.4; - font-size: 20px; -} - -.single-post-item .post-content .link-btn { - font-weight: 600; - position: relative; - display: inline-block; - padding-right: 12px; -} - -.single-post-item .post-content .link-btn i { - position: absolute; - right: 0; - top: 7px; - font-size: 12px; -} - -.single-post-item .post-content .link-btn::before { - content: ''; - position: absolute; - right: 0; - bottom: 0; - width: 0%; - height: 1px; - background-color: var(--marketingMainColor); - -webkit-transition: var(--transition); - transition: var(--transition); -} - -.single-post-item .post-content .link-btn:hover { - padding-right: 15px; - color: var(--marketingMainColor); -} - -.single-post-item .post-content .link-btn:hover::before { - width: 100%; - right: auto; - left: 0; -} - -.single-post-item.border-radius { - border-radius: 10px; -} - -.single-post-item.border-radius .post-image { - border-radius: 10px 10px 0 0; -} - -.single-post-item.border-radius .post-image a { - border-radius: 10px 10px 0 0; -} - -.single-post-item.border-radius .post-image a img { - border-radius: 10px 10px 0 0; -} - -.single-post-item.business-color .post-content .meta li i { - color: var(--businessMainColor); -} - -.single-post-item.business-color .post-content .meta li a:hover { - color: var(--businessMainColor); -} - -.single-post-item.business-color .post-content .link-btn::before { - background-color: var(--businessMainColor); -} - -.single-post-item.business-color .post-content .link-btn:hover { - color: var(--businessMainColor); -} - -.single-post-item.app-color .post-content .meta li i { - color: var(--appMainColor); -} - -.single-post-item.app-color .post-content .meta li a:hover { - color: var(--appMainColor); -} - -.single-post-item.app-color .post-content .link-btn::before { - background-color: var(--appMainColor); -} - -.single-post-item.app-color .post-content .link-btn:hover { - color: var(--appMainColor); -} - -.single-post-item.saas-color .post-content .meta li i { - color: var(--saasMainColor); -} - -.single-post-item.saas-color .post-content .meta li a:hover { - color: var(--saasMainColor); -} - -.single-post-item.saas-color .post-content .link-btn::before { - background-color: var(--saasMainColor); -} - -.single-post-item.saas-color .post-content .link-btn:hover { - color: var(--saasMainColor); -} - -.single-post-item.bg-black { - background-color: #040611; - -webkit-box-shadow: unset; - box-shadow: unset; - border: 1px solid #272836; - -webkit-transition: var(--transition); - transition: var(--transition); -} - -.single-post-item.bg-black .post-content .tag { - color: var(--saasMainColor); -} - -.single-post-item.bg-black .post-content .meta { - color: var(--whiteColor); -} - -.single-post-item.bg-black .post-content .meta li { - color: var(--whiteColor); -} - -.single-post-item.bg-black .post-content .meta li i { - color: var(--saasMainColor); -} - -.single-post-item.bg-black .post-content .meta li a { - color: var(--whiteColor); -} - -.single-post-item.bg-black .post-content .meta li a:hover { - color: var(--saasMainColor); -} - -.single-post-item.bg-black .post-content h3 { - color: var(--whiteColor); -} - -.single-post-item.bg-black .post-content h3 a { - color: var(--whiteColor); -} - -.single-post-item.bg-black .post-content h3 a:hover { - color: var(--saasMainColor); -} - -.single-post-item.bg-black .post-content p { - color: var(--whiteColor); - opacity: 0.9; -} - -.single-post-item.bg-black .post-content .link-btn { - color: var(--whiteColor); -} - -.single-post-item.bg-black .post-content .link-btn::before { - background: var(--saasGradientColor); -} - -.single-post-item.bg-black .post-content .link-btn:hover { - color: var(--whiteColor); -} - -.single-post-item.bg-black:hover { - border-color: var(--whiteColor); -} - -.single-post-item.bg-faf2ff { - background-color: #faf2ff; - -webkit-box-shadow: unset; - box-shadow: unset; -} - -.single-post-item.bg-fff5e6 { - background-color: #fff5e6; - -webkit-box-shadow: unset; - box-shadow: unset; -} - -.single-post-item.bg-eaf6ff { - background-color: #eaf6ff; - -webkit-box-shadow: unset; - box-shadow: unset; -} - -.single-post-item.personal-portfolio-color .post-content .meta li i { - color: var(--personalPortfolioMainColor); -} - -.single-post-item.personal-portfolio-color .post-content .meta li a:hover { - color: var(--personalPortfolioMainColor); -} - -.single-post-item.personal-portfolio-color .post-content .link-btn::before { - background-color: var(--personalPortfolioMainColor); -} - -.single-post-item.personal-portfolio-color .post-content .link-btn:hover { - color: var(--personalPortfolioMainColor); -} - -.single-post-item.consulting-color .post-content .meta li i { - color: var(--consultingMainColor); -} - -.single-post-item.consulting-color .post-content .meta li a:hover { - color: var(--consultingMainColor); -} - -.single-post-item.consulting-color .post-content .link-btn::before { - background-color: var(--consultingMainColor); -} - -.single-post-item.consulting-color .post-content .link-btn:hover { - color: var(--consultingMainColor); -} - -.single-post-item.it-agency-color .post-content .tag { - color: var(--optionalColor); -} - -.single-post-item.it-agency-color .post-content .tag i { - color: var(--itAgencyMainColor); -} - -.single-post-item.it-agency-color .post-content .meta li i { - color: var(--itAgencyMainColor); -} - -.single-post-item.it-agency-color .post-content .meta li a:hover { - color: var(--itAgencyMainColor); -} - -.single-post-item.it-agency-color .post-content .link-btn::before { - background-color: var(--itAgencyMainColor); -} - -.single-post-item.it-agency-color .post-content .link-btn:hover { - color: var(--itAgencyMainColor); -} - -.single-post-item.without-box-shadow { - -webkit-box-shadow: unset; - box-shadow: unset; -} - -.single-post-item.without-box-shadow .post-content { - padding-bottom: 0; -} - -.single-post-item.without-box-shadow .post-content .meta li i { - color: var(--blackColor); -} - -.single-post-item.without-box-shadow .post-content .meta li a:hover { - color: var(--blackColor); -} - -.single-post-item.without-box-shadow .post-content .link-btn::before { - background-color: var(--blackColor); -} - -.single-post-item.without-box-shadow .post-content .link-btn:hover { - color: var(--blackColor); -} - -.single-post-item.startup-color .post-content .tag { - color: var(--startupMainColor); -} - -.single-post-item.startup-color .post-content .meta li i { - color: var(--startupMainColor); -} - -.single-post-item.startup-color .post-content .meta li a:hover { - color: var(--startupMainColor); -} - -.single-post-item.startup-color .post-content .link-btn::before { - background-color: var(--startupMainColor); -} - -.single-post-item.startup-color .post-content .link-btn:hover { - color: var(--startupMainColor); -} - -/*================================================ -Blog Details Area CSS -=================================================*/ -.blog-details-desc .article-content { - margin-top: 30px; -} - -.blog-details-desc .article-content .entry-meta { - margin-bottom: 15px; -} - -.blog-details-desc .article-content .entry-meta ul { - padding-left: 0; - margin-bottom: 0; - list-style-type: none; -} - -.blog-details-desc .article-content .entry-meta ul li { - display: inline-block; - margin-right: 20px; - color: var(--optionalColor); - font-weight: 500; - position: relative; - padding-left: 22px; -} - -.blog-details-desc .article-content .entry-meta ul li i { - position: absolute; - left: 0; - top: 4px; - color: var(--startupMainColor); -} - -.blog-details-desc .article-content .entry-meta ul li:last-child { - margin-right: 0; -} - -.blog-details-desc .article-content h3 { - font-size: 22px; - margin-bottom: 15px; - margin-top: 25px; -} - -.blog-details-desc .article-content .wp-block-gallery.columns-3 { - padding-left: 0; - list-style-type: none; - display: -webkit-box; - display: -ms-flexbox; - display: flex; - -ms-flex-wrap: wrap; - flex-wrap: wrap; - margin-right: -10px; - margin-left: -10px; - margin-bottom: 30px; - margin-top: 30px; -} - -.blog-details-desc .article-content .wp-block-gallery.columns-3 li { - -webkit-box-flex: 0; - -ms-flex: 0 0 33.3333%; - flex: 0 0 33.3333%; - max-width: 33.3333%; - padding-right: 10px; - padding-left: 10px; -} - -.blog-details-desc .article-content .wp-block-gallery.columns-3 li figure { - margin-bottom: 0; -} - -.blog-details-desc .article-content .features-list { - margin-top: 25px; - margin-bottom: 30px; -} - -.blog-details-desc .article-content .features-list li { - margin-bottom: 15px; - color: var(--optionalColor); - font-weight: 500; -} - -.blog-details-desc .article-content .features-list li:last-child { - margin-bottom: 0; -} - -.blog-details-desc .article-footer { - display: -webkit-box; - display: -ms-flexbox; - display: flex; - -ms-flex-wrap: wrap; - flex-wrap: wrap; - margin-top: 30px; - padding-top: 30px; - border-top: 1px solid #eeeeee; -} - -.blog-details-desc .article-footer .article-tags { - -webkit-box-flex: 0; - -ms-flex: 0 0 50%; - flex: 0 0 50%; - max-width: 50%; -} - -.blog-details-desc .article-footer .article-tags p { - line-height: 1; - margin-bottom: 0; - color: var(--blackColor); - font-weight: 600; - text-transform: uppercase; -} - -.blog-details-desc .article-footer .article-tags a { - display: inline-block; - margin-left: 10px; - background-color: #f9f9f9; - color: var(--blackColor); - border-radius: 30px; - padding: 7px 20px; -} - -.blog-details-desc .article-footer .article-tags a:hover { - background-color: var(--startupMainColor); - color: var(--whiteColor); -} - -.blog-details-desc .article-footer .article-share { - -webkit-box-flex: 0; - -ms-flex: 0 0 50%; - flex: 0 0 50%; - max-width: 50%; -} - -.blog-details-desc .article-footer .article-share .social { - padding-left: 0; - list-style-type: none; - text-align: end; - margin-bottom: 0; -} - -.blog-details-desc .article-footer .article-share .social li { - display: inline-block; -} - -.blog-details-desc .article-footer .article-share .social li span { - display: inline-block; - margin-right: 3px; - font-weight: 600; -} - -.blog-details-desc .article-footer .article-share .social li a { - display: block; - width: 32px; - height: 32px; - line-height: 32px; - border-radius: 50%; - background-color: var(--startupMainColor); - color: var(--whiteColor); - border: 1px solid var(--startupMainColor); - text-align: center; - font-size: 14px; - margin-left: 2px; -} - -.blog-details-desc .article-footer .article-share .social li a:hover, .blog-details-desc .article-footer .article-share .social li a:focus { - color: var(--startupMainColor); - background-color: transparent; -} - -.blog-details-desc .article-footer .article-share .social li a.facebook { - background-color: #3b5998; - border-color: #3b5998; - color: var(--whiteColor); -} - -.blog-details-desc .article-footer .article-share .social li a.facebook:hover, .blog-details-desc .article-footer .article-share .social li a.facebook:focus { - color: #3b5998; - background-color: transparent; -} - -.blog-details-desc .article-footer .article-share .social li a.twitter { - background-color: #1da1f2; - border-color: #1da1f2; - color: var(--whiteColor); -} - -.blog-details-desc .article-footer .article-share .social li a.twitter:hover, .blog-details-desc .article-footer .article-share .social li a.twitter:focus { - color: #1da1f2; - background-color: transparent; -} - -.blog-details-desc .article-footer .article-share .social li a.linkedin { - background-color: #007bb5; - border-color: #007bb5; - color: var(--whiteColor); -} - -.blog-details-desc .article-footer .article-share .social li a.linkedin:hover, .blog-details-desc .article-footer .article-share .social li a.linkedin:focus { - color: #007bb5; - background-color: transparent; -} - -.blog-details-desc .article-footer .article-share .social li a.instagram { - background-color: #c13584; - border-color: #c13584; - color: var(--whiteColor); -} - -.blog-details-desc .article-footer .article-share .social li a.instagram:hover, .blog-details-desc .article-footer .article-share .social li a.instagram:focus { - color: #c13584; - background-color: transparent; -} - -blockquote, .blockquote { - z-index: 1; - overflow: hidden; - position: relative; - background-color: #fafafa; - padding: 40px 50px !important; - margin-bottom: 20px; - margin-top: 20px; -} - -blockquote p, .blockquote p { - line-height: 1.7; - margin-bottom: 0; - color: var(--blackColor); - font-weight: 700; - font-style: italic; - font-size: 17px !important; -} - -blockquote cite, .blockquote cite { - display: none; -} - -blockquote::after, .blockquote::after { - top: 0; - left: 0; - bottom: 0; - width: 3px; - content: ''; - position: absolute; - background-color: var(--startupMainColor); - margin-top: 20px; - margin-bottom: 20px; -} - -.comments-area { - margin-top: 30px; -} - -.comments-area .comments-title { - font-size: 22px; - margin-bottom: 30px; - line-height: initial; -} - -.comments-area ol, .comments-area ul { - padding: 0; - margin: 0; - list-style-type: none; -} - -.comments-area .comment-list { - padding: 0; - margin: 0; - list-style-type: none; -} - -.comments-area .children { - margin-left: 20px; -} - -.comments-area .comment-body { - border-bottom: 1px dashed #eeeeee; - padding-left: 70px; - color: var(--blackColor); - margin-bottom: 20px; - padding-bottom: 20px; -} - -.comments-area .comment-body .reply { - margin-top: 15px; -} - -.comments-area .comment-body .reply a { - border: 1px dashed #ded9d9; - color: var(--blackColor); - display: inline-block; - padding: 5px 20px 6px; - border-radius: 30px; - font-size: 13px; - font-weight: 700; -} - -.comments-area .comment-body .reply a:hover { - color: var(--whiteColor); - background-color: var(--startupMainColor); - border-color: var(--startupMainColor); -} - -.comments-area .comment-author { - font-size: 16px; - margin-bottom: 6px; - position: relative; - z-index: 2; -} - -.comments-area .comment-author .avatar { - height: 50px; - left: -65px; - position: absolute; - width: 50px; - top: 4px; -} - -.comments-area .comment-author .says { - display: none; -} - -.comments-area .comment-metadata { - margin-bottom: .7em; - color: var(--optionalColor); - letter-spacing: 0.01em; - font-size: 13px; - font-weight: 500; -} - -.comments-area .comment-respond { - margin-top: 30px; -} - -.comments-area .comment-respond .comment-reply-title { - margin-bottom: 0; - font-size: 22px; -} - -.comments-area .comment-respond .comment-reply-title #cancel-comment-reply-link { - display: inline-block; -} - -.comments-area .comment-respond .comment-form { - overflow: hidden; -} - -.comments-area .comment-respond .comment-notes { - margin-bottom: 20px; - margin-top: 10px; -} - -.comments-area .comment-respond .comment-notes .required { - color: red; -} - -.comments-area .comment-respond .comment-form-comment { - float: left; - width: 100%; -} - -.comments-area .comment-respond label { - display: none; -} - -.comments-area .comment-respond input[type="date"], .comments-area .comment-respond input[type="time"], .comments-area .comment-respond input[type="datetime-local"], .comments-area .comment-respond input[type="week"], .comments-area .comment-respond input[type="month"], .comments-area .comment-respond input[type="text"], .comments-area .comment-respond input[type="email"], .comments-area .comment-respond input[type="url"], .comments-area .comment-respond input[type="password"], .comments-area .comment-respond input[type="search"], .comments-area .comment-respond input[type="tel"], .comments-area .comment-respond input[type="number"], .comments-area .comment-respond textarea { - outline: 0; - width: 100%; - border: none; - height: 50px; - display: block; - font-size: 15px; - border-radius: 3px; - padding: 1px 0 0 15px; - color: var(--blackColor); - background-color: #f9f9f9; -} - -.comments-area .comment-respond input[type="date"]::-webkit-input-placeholder, .comments-area .comment-respond input[type="time"]::-webkit-input-placeholder, .comments-area .comment-respond input[type="datetime-local"]::-webkit-input-placeholder, .comments-area .comment-respond input[type="week"]::-webkit-input-placeholder, .comments-area .comment-respond input[type="month"]::-webkit-input-placeholder, .comments-area .comment-respond input[type="text"]::-webkit-input-placeholder, .comments-area .comment-respond input[type="email"]::-webkit-input-placeholder, .comments-area .comment-respond input[type="url"]::-webkit-input-placeholder, .comments-area .comment-respond input[type="password"]::-webkit-input-placeholder, .comments-area .comment-respond input[type="search"]::-webkit-input-placeholder, .comments-area .comment-respond input[type="tel"]::-webkit-input-placeholder, .comments-area .comment-respond input[type="number"]::-webkit-input-placeholder, .comments-area .comment-respond textarea::-webkit-input-placeholder { - color: var(--optionalColor); - -webkit-transition: var(--transition); - transition: var(--transition); -} - -.comments-area .comment-respond input[type="date"]:-ms-input-placeholder, .comments-area .comment-respond input[type="time"]:-ms-input-placeholder, .comments-area .comment-respond input[type="datetime-local"]:-ms-input-placeholder, .comments-area .comment-respond input[type="week"]:-ms-input-placeholder, .comments-area .comment-respond input[type="month"]:-ms-input-placeholder, .comments-area .comment-respond input[type="text"]:-ms-input-placeholder, .comments-area .comment-respond input[type="email"]:-ms-input-placeholder, .comments-area .comment-respond input[type="url"]:-ms-input-placeholder, .comments-area .comment-respond input[type="password"]:-ms-input-placeholder, .comments-area .comment-respond input[type="search"]:-ms-input-placeholder, .comments-area .comment-respond input[type="tel"]:-ms-input-placeholder, .comments-area .comment-respond input[type="number"]:-ms-input-placeholder, .comments-area .comment-respond textarea:-ms-input-placeholder { - color: var(--optionalColor); - -webkit-transition: var(--transition); - transition: var(--transition); -} - -.comments-area .comment-respond input[type="date"]::-ms-input-placeholder, .comments-area .comment-respond input[type="time"]::-ms-input-placeholder, .comments-area .comment-respond input[type="datetime-local"]::-ms-input-placeholder, .comments-area .comment-respond input[type="week"]::-ms-input-placeholder, .comments-area .comment-respond input[type="month"]::-ms-input-placeholder, .comments-area .comment-respond input[type="text"]::-ms-input-placeholder, .comments-area .comment-respond input[type="email"]::-ms-input-placeholder, .comments-area .comment-respond input[type="url"]::-ms-input-placeholder, .comments-area .comment-respond input[type="password"]::-ms-input-placeholder, .comments-area .comment-respond input[type="search"]::-ms-input-placeholder, .comments-area .comment-respond input[type="tel"]::-ms-input-placeholder, .comments-area .comment-respond input[type="number"]::-ms-input-placeholder, .comments-area .comment-respond textarea::-ms-input-placeholder { - color: var(--optionalColor); - -webkit-transition: var(--transition); - transition: var(--transition); -} - -.comments-area .comment-respond input[type="date"]::placeholder, .comments-area .comment-respond input[type="time"]::placeholder, .comments-area .comment-respond input[type="datetime-local"]::placeholder, .comments-area .comment-respond input[type="week"]::placeholder, .comments-area .comment-respond input[type="month"]::placeholder, .comments-area .comment-respond input[type="text"]::placeholder, .comments-area .comment-respond input[type="email"]::placeholder, .comments-area .comment-respond input[type="url"]::placeholder, .comments-area .comment-respond input[type="password"]::placeholder, .comments-area .comment-respond input[type="search"]::placeholder, .comments-area .comment-respond input[type="tel"]::placeholder, .comments-area .comment-respond input[type="number"]::placeholder, .comments-area .comment-respond textarea::placeholder { - color: var(--optionalColor); - -webkit-transition: var(--transition); - transition: var(--transition); -} - -.comments-area .comment-respond input[type="date"]:focus::-webkit-input-placeholder, .comments-area .comment-respond input[type="time"]:focus::-webkit-input-placeholder, .comments-area .comment-respond input[type="datetime-local"]:focus::-webkit-input-placeholder, .comments-area .comment-respond input[type="week"]:focus::-webkit-input-placeholder, .comments-area .comment-respond input[type="month"]:focus::-webkit-input-placeholder, .comments-area .comment-respond input[type="text"]:focus::-webkit-input-placeholder, .comments-area .comment-respond input[type="email"]:focus::-webkit-input-placeholder, .comments-area .comment-respond input[type="url"]:focus::-webkit-input-placeholder, .comments-area .comment-respond input[type="password"]:focus::-webkit-input-placeholder, .comments-area .comment-respond input[type="search"]:focus::-webkit-input-placeholder, .comments-area .comment-respond input[type="tel"]:focus::-webkit-input-placeholder, .comments-area .comment-respond input[type="number"]:focus::-webkit-input-placeholder, .comments-area .comment-respond textarea:focus::-webkit-input-placeholder { - color: transparent; -} - -.comments-area .comment-respond input[type="date"]:focus:-ms-input-placeholder, .comments-area .comment-respond input[type="time"]:focus:-ms-input-placeholder, .comments-area .comment-respond input[type="datetime-local"]:focus:-ms-input-placeholder, .comments-area .comment-respond input[type="week"]:focus:-ms-input-placeholder, .comments-area .comment-respond input[type="month"]:focus:-ms-input-placeholder, .comments-area .comment-respond input[type="text"]:focus:-ms-input-placeholder, .comments-area .comment-respond input[type="email"]:focus:-ms-input-placeholder, .comments-area .comment-respond input[type="url"]:focus:-ms-input-placeholder, .comments-area .comment-respond input[type="password"]:focus:-ms-input-placeholder, .comments-area .comment-respond input[type="search"]:focus:-ms-input-placeholder, .comments-area .comment-respond input[type="tel"]:focus:-ms-input-placeholder, .comments-area .comment-respond input[type="number"]:focus:-ms-input-placeholder, .comments-area .comment-respond textarea:focus:-ms-input-placeholder { - color: transparent; -} - -.comments-area .comment-respond input[type="date"]:focus::-ms-input-placeholder, .comments-area .comment-respond input[type="time"]:focus::-ms-input-placeholder, .comments-area .comment-respond input[type="datetime-local"]:focus::-ms-input-placeholder, .comments-area .comment-respond input[type="week"]:focus::-ms-input-placeholder, .comments-area .comment-respond input[type="month"]:focus::-ms-input-placeholder, .comments-area .comment-respond input[type="text"]:focus::-ms-input-placeholder, .comments-area .comment-respond input[type="email"]:focus::-ms-input-placeholder, .comments-area .comment-respond input[type="url"]:focus::-ms-input-placeholder, .comments-area .comment-respond input[type="password"]:focus::-ms-input-placeholder, .comments-area .comment-respond input[type="search"]:focus::-ms-input-placeholder, .comments-area .comment-respond input[type="tel"]:focus::-ms-input-placeholder, .comments-area .comment-respond input[type="number"]:focus::-ms-input-placeholder, .comments-area .comment-respond textarea:focus::-ms-input-placeholder { - color: transparent; -} - -.comments-area .comment-respond input[type="date"]:focus::placeholder, .comments-area .comment-respond input[type="time"]:focus::placeholder, .comments-area .comment-respond input[type="datetime-local"]:focus::placeholder, .comments-area .comment-respond input[type="week"]:focus::placeholder, .comments-area .comment-respond input[type="month"]:focus::placeholder, .comments-area .comment-respond input[type="text"]:focus::placeholder, .comments-area .comment-respond input[type="email"]:focus::placeholder, .comments-area .comment-respond input[type="url"]:focus::placeholder, .comments-area .comment-respond input[type="password"]:focus::placeholder, .comments-area .comment-respond input[type="search"]:focus::placeholder, .comments-area .comment-respond input[type="tel"]:focus::placeholder, .comments-area .comment-respond input[type="number"]:focus::placeholder, .comments-area .comment-respond textarea:focus::placeholder { - color: transparent; -} - -.comments-area .comment-respond textarea { - height: auto !important; - padding-top: 15px; -} - -.comments-area .comment-respond .comment-form-author { - float: left; - width: 50%; - padding-right: 10px; - margin-bottom: 20px; -} - -.comments-area .comment-respond .comment-form-email { - float: left; - width: 50%; - padding-left: 12px; - margin-bottom: 20px; -} - -.comments-area .comment-respond .comment-form-url { - float: left; - width: 100%; - margin-bottom: 20px; -} - -.comments-area .comment-respond .comment-form-cookies-consent { - width: 100%; - float: left; - position: relative; - padding-left: 20px; - margin-bottom: 20px; - margin-top: 15px; -} - -.comments-area .comment-respond .comment-form-cookies-consent input { - position: absolute; - left: 0; - top: 6px; -} - -.comments-area .comment-respond .comment-form-cookies-consent label { - margin: 0; - display: inline-block; - color: var(--optionalColor); - font-weight: normal; - font-size: var(--fontSize); -} - -.comments-area .comment-respond .form-submit { - float: left; - width: 100%; -} - -.comments-area .comment-respond .form-submit input { - border: none; - cursor: pointer; - border-radius: 4px; - padding: 10px 30px; - display: inline-block; - color: var(--whiteColor); - background: var(--startupMainColor); - -webkit-transition: var(--transition); - transition: var(--transition); - font-weight: 700; - font-size: var(--fontSize); -} - -.comments-area .comment-respond .form-submit input:hover, .comments-area .comment-respond .form-submit input:focus { - color: var(--whiteColor); - background-color: var(--blackColor); -} - -/*================================================ -Widget Area CSS -=================================================*/ -.widget-area .widget { - margin-bottom: 35px; -} - -.widget-area .widget .widget-title { - border-bottom: 1px solid #eeeeee; - padding-bottom: 12px; - margin-bottom: 30px; - position: relative; - font-size: 20px; -} - -.widget-area .widget .widget-title::before { - left: 0; - width: 70px; - height: 1px; - content: ''; - bottom: -1px; - position: absolute; - background-color: var(--blackColor); -} - -.widget-area .widget:last-child { - margin-bottom: 0; -} - -.widget-area .widget_search { - -webkit-box-shadow: 0px 0px 29px 0px rgba(102, 102, 102, 0.1); - box-shadow: 0px 0px 29px 0px rgba(102, 102, 102, 0.1); - background-color: var(--whiteColor); - padding: 15px; -} - -.widget-area .widget_search form { - position: relative; -} - -.widget-area .widget_search form label { - display: block; - margin-bottom: 0; -} - -.widget-area .widget_search form .screen-reader-text { - display: none; -} - -.widget-area .widget_search form .search-field { - outline: 0; - width: 100%; - height: 50px; - display: block; - padding: 0 0 0 15px; - -webkit-transition: var(--transition); - transition: var(--transition); - border: 1px solid #eeeeee; - background-color: transparent; -} - -.widget-area .widget_search form .search-field:focus { - border-color: var(--startupMainColor); -} - -.widget-area .widget_search form button { - position: absolute; - right: 0; - outline: 0; - bottom: 0; - height: 50px; - width: 50px; - border: none; - color: var(--whiteColor); - background-color: var(--startupMainColor); - -webkit-transition: var(--transition); - transition: var(--transition); -} - -.widget-area .widget_search form button:hover { - color: var(--whiteColor); - background-color: var(--blackColor); -} - -.widget-area .widget_about_author .about-author { - -webkit-transition: var(--transition); - transition: var(--transition); - border: 1px solid #eeeeee; - text-align: center; - padding: 30px; -} - -.widget-area .widget_about_author .about-author .main-image { - width: 100px; -} - -.widget-area .widget_about_author .about-author p { - margin-bottom: 15px; - margin-top: 25px; -} - -.widget-area .widget_about_author .about-author:hover { - border-color: var(--blackColor); -} - -.widget-area .widget_noke_posts_thumb { - position: relative; - overflow: hidden; -} - -.widget-area .widget_noke_posts_thumb .item { - margin-bottom: 20px; - position: relative; - padding-left: 115px; -} - -.widget-area .widget_noke_posts_thumb .item .thumb { - top: 0; - left: 0; - width: 100px; - float: unset; - height: 100%; - display: block; - position: absolute; -} - -.widget-area .widget_noke_posts_thumb .item .thumb .fullimage { - width: 100px; - height: 100%; - display: inline-block; - background-repeat: no-repeat; - background-size: cover !important; - background-position: center center !important; -} - -.widget-area .widget_noke_posts_thumb .item .thumb .fullimage.bg1 { - background-image: url(../../assets/img/blog/blog-img1.jpg); -} - -.widget-area .widget_noke_posts_thumb .item .thumb .fullimage.bg2 { - background-image: url(../../assets/img/blog/blog-img2.jpg); -} - -.widget-area .widget_noke_posts_thumb .item .thumb .fullimage.bg3 { - background-image: url(../../assets/img/blog/blog-img3.jpg); -} - -.widget-area .widget_noke_posts_thumb .item .thumb .fullimage.bg4 { - background-image: url(../../assets/img/blog/blog-img4.jpg); -} - -.widget-area .widget_noke_posts_thumb .item .thumb::before, .widget-area .widget_noke_posts_thumb .item .thumb::after { - content: ''; - z-index: 1; - top: 50%; - left: 50%; - opacity: 0; - position: absolute; - background-color: var(--whiteColor); - -webkit-transform: translate(-50%, -50%); - transform: translate(-50%, -50%); - -webkit-transition: all 0.8s cubic-bezier(0.2, 1, 0.22, 1); - transition: all 0.8s cubic-bezier(0.2, 1, 0.22, 1); -} - -.widget-area .widget_noke_posts_thumb .item .thumb::before { - width: 40px; - height: 1px; - left: 100%; -} - -.widget-area .widget_noke_posts_thumb .item .thumb::after { - height: 40px; - width: 1px; - top: 0; -} - -.widget-area .widget_noke_posts_thumb .item .info .title { - font-size: 16px; - line-height: 1.5; - margin-bottom: 8px; -} - -.widget-area .widget_noke_posts_thumb .item .info .title a { - display: inline-block; -} - -.widget-area .widget_noke_posts_thumb .item .info .date { - padding-left: 20px; - position: relative; - color: var(--optionalColor); -} - -.widget-area .widget_noke_posts_thumb .item .info .date i { - position: absolute; - left: 0; - top: 3px; -} - -.widget-area .widget_noke_posts_thumb .item:last-child { - margin-bottom: 0; -} - -.widget-area .widget_noke_posts_thumb .item:hover .thumb::before, .widget-area .widget_noke_posts_thumb .item:hover .thumb::after { - opacity: 1; - top: 50%; - left: 50%; -} - -.widget-area .widget_follow_us ul { - padding-left: 0; - margin-bottom: 0; - list-style-type: none; -} - -.widget-area .widget_follow_us ul li { - margin-bottom: 15px; -} - -.widget-area .widget_follow_us ul li a { - display: block; - position: relative; - color: var(--whiteColor); - background-color: var(--blackColor); - padding-right: 15px; - padding-top: 10px; - padding-bottom: 10px; - padding-left: 55px; -} - -.widget-area .widget_follow_us ul li a i { - position: absolute; - left: 14px; - top: 50%; - font-size: 18px; - line-height: 1; - -webkit-transform: translateY(-50%); - transform: translateY(-50%); -} - -.widget-area .widget_follow_us ul li a::before { - content: ''; - position: absolute; - left: 42px; - top: 0; - height: 100%; - width: 1px; - opacity: 0.3; - background-color: var(--whiteColor); -} - -.widget-area .widget_follow_us ul li a.facebook { - background-color: #39569e; -} - -.widget-area .widget_follow_us ul li a.twitter { - background-color: #52aaf4; -} - -.widget-area .widget_follow_us ul li a.linkedin { - background-color: #0185ae; -} - -.widget-area .widget_follow_us ul li a.instagram { - background-color: #c8359d; -} - -.widget-area .widget_follow_us ul li:last-child { - margin-bottom: 0; -} - -.widget-area .widget_recent_posts .item { - margin-bottom: 15px; - padding-bottom: 15px; - border-bottom: 1px solid #eeeeee; -} - -.widget-area .widget_recent_posts .item .tag { - position: relative; - margin-bottom: 8px; - display: inline-block; - color: var(--blackColor); -} - -.widget-area .widget_recent_posts .item .title { - font-size: 16px; - line-height: 1.5; - margin-bottom: 10px; -} - -.widget-area .widget_recent_posts .item .title a { - display: inline-block; -} - -.widget-area .widget_recent_posts .item .date { - padding-left: 20px; - position: relative; - color: var(--optionalColor); -} - -.widget-area .widget_recent_posts .item .date i { - position: absolute; - left: 0; - top: 3px; -} - -.widget-area .widget_tag_cloud .tagcloud { - margin-bottom: -8px; -} - -.widget-area .widget_tag_cloud .tagcloud a { - display: inline-block; - border: 1px solid #eeeeee; - padding: 6px 15px; - color: var(--optionalColor); - margin-right: 8px; - margin-bottom: 8px; - font-size: 14px !important; - font-weight: 600; -} - -.widget-area .widget_tag_cloud .tagcloud a:hover { - background-color: var(--blackColor); - color: var(--whiteColor); - border-color: var(--blackColor); -} - -.widget-area .widget_newsletter { - background-color: #f6f7f9; - border: 1px solid #eeeeee; - text-align: center; - padding: 30px; -} - -.widget-area .widget_newsletter h4 { - font-size: 20px; - margin-bottom: 10px; -} - -.widget-area .widget_newsletter .newsletter-form { - margin-top: 20px; -} - -.widget-area .widget_newsletter .newsletter-form .input-newsletter { - display: block; - width: 100%; - background-color: var(--whiteColor); - border: 1px solid #eeeeee; - height: 50px; - padding-left: 15px; - color: var(--blackColor); - -webkit-transition: var(--transition); - transition: var(--transition); -} - -.widget-area .widget_newsletter .newsletter-form .input-newsletter:focus { - border-color: var(--blackColor); -} - -.widget-area .widget_newsletter .newsletter-form button { - display: block; - width: 100%; - text-align: center; - margin-top: 15px; - background-color: var(--blackColor); - color: var(--whiteColor); - border: none; - -webkit-transition: var(--transition); - transition: var(--transition); - padding: 13px 30px; - font-size: var(--fontSize); - font-weight: 700; -} - -.widget-area .widget_newsletter .newsletter-form button:hover { - background-color: var(--optionalColor); -} - -.widget-area .widget_categories ul { - padding-left: 0; - margin-bottom: 0; - list-style-type: none; -} - -.widget-area .widget_categories ul li { - margin-bottom: 12px; - position: relative; - padding-left: 15px; -} - -.widget-area .widget_categories ul li::before { - left: 0; - top: 50%; - width: 8px; - height: 8px; - content: ''; - position: absolute; - border-radius: 50%; - -webkit-transform: translateY(-50%); - transform: translateY(-50%); - background-color: var(--optionalColor); -} - -.widget-area .widget_categories ul li a { - font-weight: 500; - display: inline-block; - color: var(--optionalColor); -} - -.widget-area .widget_categories ul li a:hover { - color: var(--startupMainColor); -} - -.widget-area .widget_categories ul li:last-child { - margin-bottom: 0; -} - -.widget-area .widget_archive ul { - padding-left: 0; - margin-bottom: 0; - list-style-type: none; -} - -.widget-area .widget_archive ul li { - margin-bottom: 12px; - position: relative; - padding-left: 15px; -} - -.widget-area .widget_archive ul li::before { - left: 0; - top: 50%; - width: 8px; - height: 8px; - content: ''; - position: absolute; - border-radius: 50%; - -webkit-transform: translateY(-50%); - transform: translateY(-50%); - background-color: var(--optionalColor); -} - -.widget-area .widget_archive ul li a { - font-weight: 500; - display: inline-block; - color: var(--optionalColor); -} - -.widget-area .widget_archive ul li a:hover { - color: var(--startupMainColor); -} - -.widget-area .widget_archive ul li:last-child { - margin-bottom: 0; -} - -.widget-area .widget_colors ul { - padding-left: 0; - margin-bottom: 0; - list-style-type: none; -} - -.widget-area .widget_colors ul li { - display: block; - margin-bottom: 12px; - border-bottom: 1px dashed #eeeeee; - padding-bottom: 12px; -} - -.widget-area .widget_colors ul li a { - display: -webkit-box; - display: -ms-flexbox; - display: flex; - -webkit-box-align: center; - -ms-flex-align: center; - align-items: center; -} - -.widget-area .widget_colors ul li a span { - display: block; - color: var(--optionalColor); -} - -.widget-area .widget_colors ul li a span:nth-child(1) { - width: 17px; - height: 17px; - font-size: 0; - margin-right: 8px; - letter-spacing: 0; - border-radius: 50%; - -webkit-transition: var(--transition); - transition: var(--transition); -} - -.widget-area .widget_colors ul li a span:nth-child(1).gray { - background-color: gray; -} - -.widget-area .widget_colors ul li a span:nth-child(1).red { - background-color: red; -} - -.widget-area .widget_colors ul li a span:nth-child(1).green { - background-color: green; -} - -.widget-area .widget_colors ul li a span:nth-child(1).black { - background-color: black; -} - -.widget-area .widget_colors ul li a span:nth-child(1).brown { - background-color: brown; -} - -.widget-area .widget_colors ul li a:hover span:nth-child(1) { - -webkit-transform: scale(1.2); - transform: scale(1.2); -} - -.widget-area .widget_price_filter .collection_filter_by_price .irs-handle { - cursor: pointer; -} - -.widget-area .widget_price_filter .collection_filter_by_price .irs--flat .irs-from, .widget-area .widget_price_filter .collection_filter_by_price .irs--flat .irs-to, .widget-area .widget_price_filter .collection_filter_by_price .irs--flat .irs-single { - background-color: var(--startupMainColor); - padding: 1px 5px 1px 11.5px; -} - -.widget-area .widget_price_filter .collection_filter_by_price .irs--flat .irs-from::before, .widget-area .widget_price_filter .collection_filter_by_price .irs--flat .irs-to::before, .widget-area .widget_price_filter .collection_filter_by_price .irs--flat .irs-single::before { - border-top-color: var(--startupMainColor); -} - -.widget-area .widget_price_filter .collection_filter_by_price .irs--flat .irs-from::after, .widget-area .widget_price_filter .collection_filter_by_price .irs--flat .irs-to::after, .widget-area .widget_price_filter .collection_filter_by_price .irs--flat .irs-single::after { - content: '$'; - position: absolute; - left: 5px; - top: 0.5px; -} - -.widget-area .widget_price_filter .collection_filter_by_price .irs--flat .irs-bar { - background-color: var(--startupMainColor); -} - -.widget-area .widget_price_filter .collection_filter_by_price .irs--flat .irs-handle > i:first-child { - background-color: var(--startupMainColor); -} - -.widget-area .widget_price_filter .collection_filter_by_price .irs--flat .irs-min, .widget-area .widget_price_filter .collection_filter_by_price .irs--flat .irs-max { - padding: 1px 3px 1px 9.5px; -} - -.widget-area .widget_price_filter .collection_filter_by_price .irs--flat .irs-min::before, .widget-area .widget_price_filter .collection_filter_by_price .irs--flat .irs-max::before { - content: '$'; - position: absolute; - left: 3px; - top: 0.5px; -} - -.widget-area .widget_top_rated_products .item { - margin-bottom: 15px; - position: relative; - padding-left: 95px; -} - -.widget-area .widget_top_rated_products .item .thumb { - top: 0; - left: 0; - width: 80px; - float: unset; - height: 100%; - display: block; - position: absolute; -} - -.widget-area .widget_top_rated_products .item .thumb .fullimage { - width: 80px; - height: 100%; - display: inline-block; - border: 1px solid #eeeeee; - background-repeat: no-repeat; - background-size: cover !important; - background-position: center center !important; -} - -.widget-area .widget_top_rated_products .item .thumb .fullimage.bg1 { - background-image: url(../../assets/img/products/products-img1.jpg); -} - -.widget-area .widget_top_rated_products .item .thumb .fullimage.bg2 { - background-image: url(../../assets/img/products/products-img2.jpg); -} - -.widget-area .widget_top_rated_products .item .thumb .fullimage.bg3 { - background-image: url(../../assets/img/products/products-img3.jpg); -} - -.widget-area .widget_top_rated_products .item .thumb .fullimage.bg4 { - background-image: url(../../assets/img/products/products-img4.jpg); -} - -.widget-area .widget_top_rated_products .item .info { - padding-top: 5px; - padding-bottom: 5px; -} - -.widget-area .widget_top_rated_products .item .info .title { - margin-bottom: 8px; - line-height: 1.4; - font-size: var(--fontSize); - font-weight: 600; -} - -.widget-area .widget_top_rated_products .item .info .title a { - display: inline-block; -} - -.widget-area .widget_top_rated_products .item .info .star-rating { - font-size: 14px; -} - -.widget-area .widget_top_rated_products .item .info .star-rating i { - color: #f49f0b; -} - -.widget-area .widget_top_rated_products .item .info .price { - margin-top: 8px; - display: block; - color: var(--optionalColor); -} - -.widget-area .widget_top_rated_products .item:last-child { - margin-bottom: 0; -} - -.widget-area .widget_service_categories ul { - padding-left: 0; - margin-bottom: 0; - list-style-type: none; -} - -.widget-area .widget_service_categories ul li { - font-weight: 500; - overflow: hidden; - margin-bottom: 13px; - padding-bottom: 13px; - color: var(--optionalColor); - border-bottom: 1px dashed #eeeeee; -} - -.widget-area .widget_service_categories ul li a { - display: block; - position: relative; - color: var(--optionalColor); -} - -.widget-area .widget_service_categories ul li a i { - position: absolute; - right: 5px; - top: 50%; - font-size: 14px; - -webkit-transform: translateY(-50%); - transform: translateY(-50%); - -webkit-transition: var(--transition); - transition: var(--transition); - color: var(--optionalColor); -} - -.widget-area .widget_service_categories ul li a:hover { - color: var(--startupMainColor); -} - -.widget-area .widget_service_categories ul li a:hover i { - right: 0; - color: var(--startupMainColor); -} - -.widget-area .widget_service_categories ul li:last-child { - margin-bottom: 0; -} - -.widget-area.extra-padding { - padding-left: 15px; -} - -.widget-area.extra-padding.left-sidebar { - padding-left: 0; - padding-right: 15px; -} - -/*================================================ -Profile Authentication Area CSS -=================================================*/ -.profile-authentication-area { - height: 100vh; - position: relative; - background-color: #f3f3f3; -} - -.profile-authentication-area .logo { - left: 0; - right: 0; - top: 20px; - position: absolute; - text-align: center; - display: inline-block; -} - -.signin-form { - max-width: 550px; - border-radius: 5px; - padding: 40px; - background-color: var(--whiteColor); - margin-left: auto; - margin-right: auto; -} - -.signin-form h2 { - font-size: 30px; - margin-bottom: 30px; -} - -.signin-form form .form-group { - margin-bottom: 25px; -} - -.signin-form form .form-group .form-control { - background-color: #f5f5f5 !important; -} - -.signin-form form .remember-me-wrap { - margin-bottom: 0; -} - -.signin-form form .remember-me-wrap [type="checkbox"]:checked, .signin-form form .remember-me-wrap [type="checkbox"]:not(:checked) { - display: none; -} - -.signin-form form .remember-me-wrap [type="checkbox"]:checked + label, .signin-form form .remember-me-wrap [type="checkbox"]:not(:checked) + label { - position: relative; - padding-left: 28px; - cursor: pointer; - line-height: 20px; - display: inline-block; - margin-bottom: 0; - color: var(--optionalColor); -} - -.signin-form form .remember-me-wrap [type="checkbox"]:checked + label:before, .signin-form form .remember-me-wrap [type="checkbox"]:not(:checked) + label:before { - content: ''; - position: absolute; - left: 0; - top: 0; - width: 19px; - height: 19px; - -webkit-transition: all 0.2s ease; - transition: all 0.2s ease; - border: 1px solid #f5f5f5; - border-radius: 3px; - background: #f5f5f5; -} - -.signin-form form .remember-me-wrap [type="checkbox"]:checked + label:after, .signin-form form .remember-me-wrap [type="checkbox"]:not(:checked) + label:after { - content: ''; - width: 8px; - height: 8px; - background: var(--startupMainColor); - position: absolute; - top: 5.5px; - left: 6px; - -webkit-transition: all 0.2s ease; - transition: all 0.2s ease; -} - -.signin-form form .remember-me-wrap [type="checkbox"]:not(:checked) + label:after { - opacity: 0; - -webkit-transform: scale(0); - transform: scale(0); -} - -.signin-form form .remember-me-wrap [type="checkbox"]:checked + label:after { - opacity: 1; - -webkit-transform: scale(1); - transform: scale(1); -} - -.signin-form form .remember-me-wrap [type="checkbox"]:hover + label:before { - border-color: var(--startupMainColor); -} - -.signin-form form .remember-me-wrap [type="checkbox"]:checked + label:before { - border-color: var(--startupMainColor); -} - -.signin-form form .lost-your-password-wrap { - text-align: end; -} - -.signin-form form .lost-your-password-wrap a { - display: inline-block; - position: relative; - line-height: 1.5; - font-weight: 500; -} - -.signin-form form .lost-your-password-wrap a::before { - width: 100%; - height: 1px; - position: absolute; - left: 0; - bottom: 0; - content: ''; - -webkit-transition: var(--transition); - transition: var(--transition); - background-color: #eeeeee; -} - -.signin-form form .lost-your-password-wrap a::after { - width: 0; - height: 1px; - position: absolute; - left: 0; - -webkit-transition: var(--transition); - transition: var(--transition); - bottom: 0; - content: ''; - background-color: var(--startupMainColor); -} - -.signin-form form .lost-your-password-wrap a:hover::before { - width: 0; -} - -.signin-form form .lost-your-password-wrap a:hover::after { - width: 100%; -} - -.signin-form form button { - width: 100%; - border: none; - display: block; - overflow: hidden; - margin-top: 20px; - border-radius: 5px; - text-align: center; - padding: 14px 30px; - color: var(--whiteColor); - -webkit-transition: var(--transition); - transition: var(--transition); - background-color: var(--startupMainColor); - font-size: var(--fontSize); - font-weight: 700; -} - -.signin-form form button:hover { - background-color: var(--blackColor); - color: var(--whiteColor); -} - -.signin-form form .dont-account { - display: block; - margin-top: 25px; - color: var(--optionalColor); -} - -.signin-form form .dont-account a { - font-weight: 600; -} - -.signin-form .sign-in-with-button { - margin-top: 25px; -} - -.signin-form .sign-in-with-button button { - width: 100%; - display: block; - color: #248BD2; - border-radius: 5px; - border: 1px solid #D2D2D2; - background-color: transparent; - -webkit-transition: var(--transition); - transition: var(--transition); - padding-top: 13px; - padding-bottom: 13px; - padding-left: 30px; - padding-right: 30px; -} - -.signin-form .sign-in-with-button button svg { - position: absolute; - margin-left: -25px; - margin-left: -25px; - margin-top: 1.5px; -} - -.signin-form .sign-in-with-button button:hover { - color: var(--blackColor); - background-color: #E9E9E9; -} - -.signup-form { - max-width: 550px; - border-radius: 5px; - padding: 40px; - background-color: var(--whiteColor); - margin-left: auto; - margin-right: auto; -} - -.signup-form h2 { - font-size: 30px; - margin-bottom: 30px; -} - -.signup-form form .form-group { - margin-bottom: 25px; -} - -.signup-form form .form-group label { - display: block; - margin-bottom: 13px; - color: var(--blackColor); - font-weight: 600; -} - -.signup-form form .form-group .form-control { - background-color: #f5f5f5 !important; -} - -.signup-form form .remember-me-wrap { - margin-bottom: 0; -} - -.signup-form form .remember-me-wrap [type="checkbox"]:checked, .signup-form form .remember-me-wrap [type="checkbox"]:not(:checked) { - display: none; -} - -.signup-form form .remember-me-wrap [type="checkbox"]:checked + label, .signup-form form .remember-me-wrap [type="checkbox"]:not(:checked) + label { - position: relative; - padding-left: 28px; - cursor: pointer; - line-height: 20px; - display: inline-block; - margin-bottom: 0; - color: var(--optionalColor); -} - -.signup-form form .remember-me-wrap [type="checkbox"]:checked + label:before, .signup-form form .remember-me-wrap [type="checkbox"]:not(:checked) + label:before { - content: ''; - position: absolute; - left: 0; - top: 0; - width: 19px; - height: 19px; - -webkit-transition: all 0.2s ease; - transition: all 0.2s ease; - border: 1px solid #f5f5f5; - border-radius: 3px; - background: #f5f5f5; -} - -.signup-form form .remember-me-wrap [type="checkbox"]:checked + label:after, .signup-form form .remember-me-wrap [type="checkbox"]:not(:checked) + label:after { - content: ''; - width: 8px; - height: 8px; - background: var(--startupMainColor); - position: absolute; - top: 5.5px; - left: 6px; - -webkit-transition: all 0.2s ease; - transition: all 0.2s ease; -} - -.signup-form form .remember-me-wrap [type="checkbox"]:not(:checked) + label:after { - opacity: 0; - -webkit-transform: scale(0); - transform: scale(0); -} - -.signup-form form .remember-me-wrap [type="checkbox"]:checked + label:after { - opacity: 1; - -webkit-transform: scale(1); - transform: scale(1); -} - -.signup-form form .remember-me-wrap [type="checkbox"]:hover + label:before { - border-color: var(--startupMainColor); -} - -.signup-form form .remember-me-wrap [type="checkbox"]:checked + label:before { - border-color: var(--startupMainColor); -} - -.signup-form form .lost-your-password-wrap { - text-align: end; -} - -.signup-form form .lost-your-password-wrap a { - display: inline-block; - position: relative; - line-height: 1.5; - font-weight: 500; -} - -.signup-form form .lost-your-password-wrap a::before { - width: 100%; - height: 1px; - position: absolute; - left: 0; - bottom: 0; - content: ''; - -webkit-transition: var(--transition); - transition: var(--transition); - background-color: #eeeeee; -} - -.signup-form form .lost-your-password-wrap a::after { - width: 0; - height: 1px; - position: absolute; - left: 0; - -webkit-transition: var(--transition); - transition: var(--transition); - bottom: 0; - content: ''; - background-color: var(--startupMainColor); -} - -.signup-form form .lost-your-password-wrap a:hover::before { - width: 0; -} - -.signup-form form .lost-your-password-wrap a:hover::after { - width: 100%; -} - -.signup-form form button { - width: 100%; - border: none; - display: block; - overflow: hidden; - margin-top: 20px; - border-radius: 5px; - text-align: center; - padding: 14px 30px; - color: var(--whiteColor); - -webkit-transition: var(--transition); - transition: var(--transition); - background-color: var(--startupMainColor); - font-size: var(--fontSize); - font-weight: 700; -} - -.signup-form form button:hover { - background-color: var(--blackColor); - color: var(--whiteColor); -} - -.signup-form form .dont-account { - display: block; - margin-top: 25px; - color: var(--optionalColor); -} - -.signup-form form .dont-account a { - font-weight: 600; -} - -.signup-form .sign-in-with-button { - margin-top: 25px; -} - -.signup-form .sign-in-with-button button { - width: 100%; - display: block; - color: #248BD2; - border-radius: 5px; - border: 1px solid #D2D2D2; - background-color: transparent; - -webkit-transition: var(--transition); - transition: var(--transition); - padding-top: 13px; - padding-bottom: 13px; - padding-left: 30px; - padding-right: 30px; -} - -.signup-form .sign-in-with-button button svg { - position: absolute; - margin-left: -25px; - margin-left: -25px; - margin-top: 1.5px; -} - -.signup-form .sign-in-with-button button:hover { - color: var(--blackColor); - background-color: #E9E9E9; -} - -/*================================================ -Instagram Area CSS -=================================================*/ -.instagram-area .container-fluid { - padding-left: 0; - padding-right: 0; -} - -.instagram-area.bg-dark .section-title { - border-color: rgba(255, 255, 255, 0.08); -} - -.instagram-area.bg-dark .section-title::before { - background-color: var(--whiteColor); -} - -.single-instagram-item { - position: relative; -} - -.single-instagram-item .link-btn { - display: block; - position: absolute; - left: 0; - right: 0; - top: 0; - bottom: 0; - z-index: 2; -} - -.single-instagram-item i { - position: absolute; - left: 50%; - top: 50%; - -webkit-transform: translateY(-50%) translateX(-50%); - transform: translateY(-50%) translateX(-50%); - font-size: 25px; - color: var(--whiteColor); - opacity: 0; - visibility: hidden; - -webkit-transition: var(--transition); - transition: var(--transition); -} - -.single-instagram-item::before { - content: ''; - position: absolute; - left: 0; - right: 0; - top: 0; - bottom: 0; - background-color: #000000; - opacity: 0; - visibility: hidden; - -webkit-transition: var(--transition); - transition: var(--transition); -} - -.single-instagram-item:hover i { - opacity: 1; - visibility: visible; -} - -.single-instagram-item:hover::before { - opacity: 0.5; - visibility: visible; -} - -/*================================================ -Page Title Area CSS -=================================================*/ -.page-title-area { - background-position: center center; - background-repeat: no-repeat; - background-color: #f9faff; - background-size: cover; - padding-top: 160px; - padding-bottom: 170px; -} - -.page-title-area.transparent-bg1 { - background-image: url(../../assets/img/page-title/page-title-bg1.jpg); -} - -.page-title-area.transparent-bg2 { - background-image: url(../../assets/img/page-title/page-title-bg2.jpg); -} - -.page-title-area.transparent-bg3 { - background-image: url(../../assets/img/page-title/page-title-bg3.jpg); -} - -.page-title-area.transparent-bg4 { - background-image: url(../../assets/img/page-title/page-title-bg4.jpg); -} - -.page-title-area.transparent-bg5 { - background-image: url(../../assets/img/page-title/page-title-bg5.jpg); -} - -.page-title-area.bg-f9faff { - background-color: #f9faff; -} - -.page-title-area.bg-image { - background-color: var(--blackColor); - position: relative; - z-index: 1; -} - -.page-title-area.bg-image .page-title-content { - color: var(--whiteColor); -} - -.page-title-area.bg-image .page-title-content h2 { - color: var(--whiteColor); -} - -.page-title-area.bg-image .page-title-content ul li { - font-weight: 600; -} - -.page-title-area.bg-image .page-title-content ul li::before { - background-color: var(--optionalColor); -} - -.page-title-area.bg-image .page-title-content ul li a { - color: var(--whiteColor); -} - -.page-title-area.bg-image .page-title-content ul li a:hover { - color: var(--startupMainColor); -} - -.page-title-area.bg-image::before { - content: ''; - position: absolute; - left: 0; - right: 0; - top: 0; - bottom: 0; - z-index: -1; - background-color: #000000; - opacity: 0.7; -} - -.page-title-area.bg1 { - background-image: url(../../assets/img/page-title/page-title-bg-image1.jpg); -} - -.page-title-area.bg2 { - background-image: url(../../assets/img/page-title/page-title-bg-image2.jpg); -} - -.page-title-area.bg3 { - background-image: url(../../assets/img/page-title/page-title-bg-image3.jpg); -} - -.page-title-area.bg4 { - background-image: url(../../assets/img/page-title/page-title-bg-image4.jpg); -} - -.page-title-area.bg5 { - background-image: url(../../assets/img/page-title/page-title-bg-image5.jpg); -} - -.page-title-area.style-two { - padding-top: 260px; - padding-bottom: 150px; -} - -.page-title-area.style-three { - padding-top: 275px; - padding-bottom: 150px; -} - -.page-title-area.style-four { - position: relative; - z-index: 1; - padding-top: 170px; - padding-bottom: 170px; -} - -.page-title-area.style-four::before { - content: ''; - position: absolute; - left: 0; - right: 0; - top: 0; - bottom: 0; - z-index: -1; - background-size: cover; - background-repeat: no-repeat; - background-position: center center; - background-image: url(../../assets/img/bg12.png); -} - -.page-title-content { - text-align: center; -} - -.page-title-content h2 { - margin-bottom: 0; - font-size: 45px; -} - -.page-title-content ul { - padding-left: 0; - list-style-type: none; - margin-bottom: 0; - margin-top: 20px; -} - -.page-title-content ul li { - color: var(--startupMainColor); - display: inline-block; - position: relative; - font-weight: 500; - font-size: 16px; - margin-left: 12px; - margin-right: 12px; -} - -.page-title-content ul li::before { - content: ''; - position: absolute; - right: -18px; - top: 50%; - -webkit-transform: translateY(-50%); - transform: translateY(-50%); - height: 1px; - width: 10px; - background-color: var(--optionalColor); - margin-top: 1px; -} - -.page-title-content ul li a { - color: var(--blackColor); -} - -.page-title-content ul li a:hover { - color: var(--startupMainColor); -} - -.page-title-content ul li:last-child { - margin-right: 0; -} - -.page-title-content ul li:last-child::before { - display: none; -} - -.page-title-content ul li:first-child { - margin-left: 0; -} - -/*================================================ -Pagination Area CSS -=================================================*/ -.pagination-area { - margin-top: 20px; -} - -.pagination-area .page-numbers { - width: 45px; - height: 45px; - line-height: 43px; - position: relative; - text-align: center; - border-radius: 50%; - display: inline-block; - border: 1px solid #eeeeee; - color: var(--blackColor); - background-color: transparent; - font-size: 18px; - font-weight: 600; - margin-left: 3px; - margin-right: 3px; -} - -.pagination-area .page-numbers:hover, .pagination-area .page-numbers.current { - color: var(--whiteColor); - background-color: var(--startupMainColor); - border-color: var(--startupMainColor) !important; -} - -/*================================================ -Gallery Area CSS -=================================================*/ -.single-gallery-item { - margin-bottom: 30px; - position: relative; - text-align: center; - overflow: hidden; -} - -.single-gallery-item img { - -webkit-transition: var(--transition); - transition: var(--transition); -} - -.single-gallery-item .popup-image { - position: absolute; - left: 0; - -webkit-transform: translateY(-50%) scale(0); - transform: translateY(-50%) scale(0); - top: 50%; - z-index: 2; - right: 0; - width: 45px; - height: 45px; - line-height: 45px; - color: var(--whiteColor); - border: 1px solid var(--whiteColor); - border-radius: 3px; - margin-left: auto; - margin-right: auto; -} - -.single-gallery-item .popup-image:hover { - border-radius: 50%; - color: var(--blackColor); - background-color: var(--whiteColor); -} - -.single-gallery-item::before { - z-index: 1; - content: ''; - position: absolute; - left: 0; - right: 0; - top: 0; - bottom: 0; - background-color: var(--startupMainColor); - opacity: 0; - visibility: hidden; - -webkit-transition: .3s; - transition: .3s; - margin: 10px; -} - -.single-gallery-item:hover img { - -webkit-transform: scale(1.1); - transform: scale(1.1); -} - -.single-gallery-item:hover::before { - opacity: 1; - margin: 20px; - visibility: visible; -} - -.single-gallery-item:hover .popup-image { - -webkit-transform: translateY(-50%) scale(1); - transform: translateY(-50%) scale(1); -} - -.single-gallery-item.left-overlay::before { - left: 0; - top: 0; - margin: 0; - width: 0%; - height: 100%; - right: auto; - bottom: auto; - opacity: .80; -} - -.single-gallery-item.left-overlay:hover::before { - width: 100%; -} - -.single-gallery-item.top-overlay::before { - left: 0; - top: 0; - margin: 0; - width: 100%; - height: 0%; - right: auto; - bottom: auto; - opacity: .80; -} - -.single-gallery-item.top-overlay:hover::before { - height: 100%; -} - -.shorting .mix { - display: none; -} - -.shorting-menu { - text-align: center; - margin-bottom: 40px; -} - -.shorting-menu .filter { - background-color: transparent; - -webkit-transition: var(--transition); - transition: var(--transition); - letter-spacing: 2px; - color: #b0b0b0; - border: none; - padding: 0; - font-size: var(--fontSize); - font-weight: 500; - margin-left: 20px; - margin-right: 20px; -} - -.shorting-menu .filter:last-child { - margin-right: 0; -} - -.shorting-menu .filter:first-child { - margin-left: 0; -} - -.shorting-menu .filter:hover, .shorting-menu .filter.active { - color: var(--blackColor); -} - -/*================================================ -Portfolio Details Area CSS -=================================================*/ -.portfolio-details-image { - position: relative; - margin-bottom: 30px; - text-align: center; -} - -.portfolio-details-desc h3 { - font-size: 25px; - margin-bottom: 15px; - margin-top: 30px; -} - -.portfolio-details-desc h3:first-child { - margin-top: 0; -} - -.portfolio-details-desc .image { - padding-right: 15px; - border-radius: 5px; - margin-top: 15px; - margin-bottom: 30px; -} - -.portfolio-details-desc .content { - margin-top: 15px; - margin-bottom: 30px; -} - -.portfolio-details-desc .content h3 { - margin-top: 0; - margin-bottom: 25px; -} - -.portfolio-details-desc .content ul { - padding-left: 0; - margin-bottom: 0; - list-style-type: none; -} - -.portfolio-details-desc .content ul li { - color: var(--optionalColor); - margin-bottom: 12px; - position: relative; - padding-left: 18px; - font-weight: 500; -} - -.portfolio-details-desc .content ul li::before { - left: 0; - top: 50%; - width: 7px; - height: 7px; - content: ''; - position: absolute; - border-radius: 50%; - -webkit-transform: translateY(-50%); - transform: translateY(-50%); - background-color: var(--startupMainColor); -} - -.portfolio-details-desc .content ul li:last-child { - margin-bottom: 0; -} - -.portfolio-details-info { - -webkit-box-shadow: 0px -10px 30px rgba(0, 0, 0, 0.1); - box-shadow: 0px -10px 30px rgba(0, 0, 0, 0.1); - border-top: 3px solid var(--startupMainColor); - background-color: var(--whiteColor); - border-radius: 5px; - padding: 40px 30px; - margin-left: 15px; -} - -.portfolio-details-info ul { - padding-left: 0; - margin-bottom: 0; - list-style-type: none; -} - -.portfolio-details-info ul li { - font-weight: 500; - position: relative; - margin-bottom: 20px; - color: var(--optionalColor); - border-bottom: 1px solid #eeeeee; - padding-left: 35px; - padding-bottom: 20px; -} - -.portfolio-details-info ul li span { - color: var(--blackColor); - margin-bottom: 10px; - display: block; - font-size: 19px; - font-weight: 700; -} - -.portfolio-details-info ul li a { - margin-bottom: 8px; - display: inline-block; - color: var(--optionalColor); -} - -.portfolio-details-info ul li a:last-child { - margin-bottom: 0; -} - -.portfolio-details-info ul li a:hover { - color: var(--startupMainColor); -} - -.portfolio-details-info ul li .icon { - left: 0; - top: 6px; - font-size: 25px; - position: absolute; - color: var(--startupMainColor); -} - -.portfolio-details-info ul li:last-child { - margin-bottom: 0; - padding-bottom: 0; - border-bottom: none; -} - -.portfolio-details-slides.owl-theme .owl-nav { - opacity: 0; - margin-top: 0; - visibility: hidden; - -webkit-transition: var(--transition); - transition: var(--transition); -} - -.portfolio-details-slides.owl-theme .owl-nav [class*=owl-] { - margin: 0; - background-color: var(--whiteColor); - color: var(--blackColor); - padding: 0 !important; - border-radius: 0; - -webkit-transition: var(--transition); - transition: var(--transition); - border: none; - cursor: pointer; - position: absolute; - left: 25px; - top: 50%; - width: 45px; - height: 45px; - line-height: 45px; - border-radius: 50%; - -webkit-transform: translateY(-50%); - transform: translateY(-50%); - font-size: 20px; -} - -.portfolio-details-slides.owl-theme .owl-nav [class*=owl-].owl-next { - left: auto; - right: 25px; -} - -.portfolio-details-slides.owl-theme .owl-nav [class*=owl-] i { - line-height: 1; -} - -.portfolio-details-slides.owl-theme .owl-nav [class*=owl-]:hover { - background-color: var(--blackColor); - border-color: var(--blackColor); - color: var(--whiteColor); -} - -.portfolio-details-slides.owl-theme:hover .owl-nav { - opacity: 1; - visibility: visible; -} - -.portfolio-details-slides.owl-theme .owl-dots { - margin-top: 40px; -} - -.portfolio-details-slides.owl-theme .owl-dots .owl-dot span { - width: 18px; - height: 18px; - border-radius: 50%; - -webkit-transition: var(--transition); - transition: var(--transition); - margin: 0 5px; -} - -.portfolio-details-slides.owl-theme .owl-dots .owl-dot:hover span, .portfolio-details-slides.owl-theme .owl-dots .owl-dot.active span { - background-color: var(--startupMainColor); -} - -/*================================================ -Portfolio Details Navigation Area CSS -=================================================*/ -.portfolio-details-navigation { - background-color: #f7f7f7; - padding-top: 40px; - padding-bottom: 40px; -} - -.portfolio-details-left { - text-transform: uppercase; - font-weight: 600; - line-height: 1; -} - -.portfolio-details-left a { - display: inline-block; - color: var(--optionalColor); - position: relative; - padding-left: 25px; -} - -.portfolio-details-left a i { - position: absolute; - left: 0; - top: 0; -} - -.portfolio-details-left a:hover { - color: var(--startupMainColor); -} - -.menu-icon { - line-height: 1; - font-size: 22px; - color: var(--optionalColor); -} - -.menu-icon:hover { - color: var(--startupMainColor); -} - -.portfolio-details-right { - text-transform: uppercase; - font-weight: 600; - line-height: 1; -} - -.portfolio-details-right a { - display: inline-block; - color: var(--optionalColor); - position: relative; - padding-right: 25px; -} - -.portfolio-details-right a i { - position: absolute; - right: 0; - top: 0; -} - -.portfolio-details-right a:hover { - color: var(--startupMainColor); -} - -/*================================================ -Privacy Policy Area CSS -=================================================*/ -.privacy-policy-content h3 { - font-size: 20px; - margin-bottom: 15px; -} - -.privacy-policy-content h3:not(:first-child) { - margin-top: 25px; -} - -.privacy-policy-content strong { - color: var(--blackColor) !important; -} - -.privacy-policy-content ul li { - color: var(--optionalColor); - margin-bottom: 12px; -} - -.privacy-policy-content ul li:last-child { - margin-bottom: 0; -} - -/*================================================ -Terms & Conditions Area CSS -=================================================*/ -.terms-conditions-content h3 { - font-size: 20px; - margin-bottom: 15px; -} - -.terms-conditions-content h3:not(:first-child) { - margin-top: 25px; -} - -.terms-conditions-content strong { - color: var(--blackColor) !important; -} - -.terms-conditions-content ul li { - color: var(--optionalColor); - margin-bottom: 12px; -} - -.terms-conditions-content ul li:last-child { - margin-bottom: 0; -} - -/*================================================ -FAQ Area CSS -=================================================*/ -.faq-accordion { - max-width: 800px; - margin-left: auto; - margin-right: auto; -} - -.faq-accordion .accordion-item { - margin-bottom: 15px; - border: 1px solid #eeeeee; -} - -.faq-accordion .accordion-item .accordion-button { - border: none; - padding: 20px 20px 20px 45px; - position: relative; - border: none; - -webkit-box-shadow: unset !important; - box-shadow: unset !important; - text-align: start; - margin: 0; - font-size: 18px; - font-weight: 700; -} - -.faq-accordion .accordion-item .accordion-button:not(.collapsed) { - color: var(--blackColor); - background-color: transparent; -} - -.faq-accordion .accordion-item .accordion-button:not(.collapsed)::after { - background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23212529'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e"); -} - -.faq-accordion .accordion-item .accordion-button::after { - position: absolute; - left: 20px; - top: 25px; - width: 15px; - height: 15px; - background-size: 15px; -} - -.faq-accordion .accordion-item .accordion-collapse { - border: none; -} - -.faq-accordion .accordion-item .accordion-body { - padding: 0 20px 20px 45px; -} - -.faq-accordion .accordion-item .accordion-body p strong { - color: var(--blackColor); -} - -.faq-accordion .accordion-item .accordion-body ul { - margin-bottom: 15px; -} - -.faq-accordion .accordion-item .accordion-body ul li { - margin-bottom: 12px; - color: var(--optionalColor); -} - -.faq-accordion .accordion-item .accordion-body ul li:last-child { - margin-bottom: 0; -} - -.faq-accordion .accordion-item .accordion-body ul:last-child { - margin-bottom: 0; -} - -.faq-accordion .accordion-item:last-child { - margin-bottom: 0; -} - -.faq-accordion .accordion-item:first-of-type .accordion-button { - border-top-left-radius: 0; - border-top-right-radius: 0; -} - -/*================================================ -404 Error Area CSS -=================================================*/ -.error-area { - border-top: 1px dashed #eeeeee; - border-bottom: 1px dashed #eeeeee; -} - -.error-content { - text-align: center; -} - -.error-content h3 { - font-size: 30px; - margin-bottom: 20px; - margin-top: 45px; -} - -.error-content p { - max-width: 550px; - margin-left: auto; - margin-right: auto; - margin-bottom: 0; -} - -.error-content .default-btn { - margin-top: 30px; -} - -/*================================================ -Coming Soon Area CSS -=================================================*/ -.coming-soon-area { - height: 100vh; -} - -.coming-soon-image { - height: 100%; - background-image: url(../../assets/img/coming-soon.jpg); - background-position: center center; - background-repeat: no-repeat; - background-size: cover; -} - -.coming-soon-image img { - display: none; -} - -.coming-soon-content { - height: 100vh; - text-align: center; - padding-left: 30px; - padding-right: 30px; -} - -.coming-soon-content .logo { - display: inline-block; -} - -.coming-soon-content h2 { - font-size: 40px; - margin-top: 30px; - margin-bottom: 0; -} - -.coming-soon-content #timer { - margin-top: 35px; -} - -.coming-soon-content #timer div { - width: 120px; - height: 120px; - border-radius: 5px; - color: var(--blackColor); - background-color: #f8f8f8; - font-size: 35px; - font-weight: 700; - margin-left: 10px; - margin-right: 10px; -} - -.coming-soon-content #timer div span { - display: block; - margin-top: 2px; - font-size: var(--fontSize); - font-weight: 500; -} - -.coming-soon-content #timer div:first-child { - margin-left: 0; -} - -.coming-soon-content #timer div:last-child { - margin-right: 0; -} - -.coming-soon-content form { - position: relative; - max-width: 530px; - margin-left: auto; - margin-right: auto; - margin-top: 40px; -} - -.coming-soon-content form .input-newsletter { - padding: 0 0 0 15px; - width: 100%; - height: 60px; - border: none; - display: block; - border-radius: 4px; - color: var(--blackColor); - font-size: var(--fontSize); - -webkit-transition: var(--transition); - transition: var(--transition); - border: 1px solid #eeeeee; -} - -.coming-soon-content form .input-newsletter::-webkit-input-placeholder { - color: var(--optionalColor); - -webkit-transition: var(--transition); - transition: var(--transition); -} - -.coming-soon-content form .input-newsletter:-ms-input-placeholder { - color: var(--optionalColor); - -webkit-transition: var(--transition); - transition: var(--transition); -} - -.coming-soon-content form .input-newsletter::-ms-input-placeholder { - color: var(--optionalColor); - -webkit-transition: var(--transition); - transition: var(--transition); -} - -.coming-soon-content form .input-newsletter::placeholder { - color: var(--optionalColor); - -webkit-transition: var(--transition); - transition: var(--transition); -} - -.coming-soon-content form .input-newsletter:focus { - border-color: var(--startupMainColor); -} - -.coming-soon-content form .input-newsletter:focus::-webkit-input-placeholder { - color: transparent; -} - -.coming-soon-content form .input-newsletter:focus:-ms-input-placeholder { - color: transparent; -} - -.coming-soon-content form .input-newsletter:focus::-ms-input-placeholder { - color: transparent; -} - -.coming-soon-content form .input-newsletter:focus::placeholder { - color: transparent; -} - -.coming-soon-content form .default-btn { - position: absolute; - right: 5px; - -webkit-box-shadow: unset; - box-shadow: unset; - bottom: 6px; - padding-left: 35px; - padding-right: 35px; -} - -.coming-soon-content form .default-btn:hover { - background-color: var(--blackColor); - color: var(--whiteColor); -} - -.coming-soon-content form #validator-newsletter { - position: absolute; - bottom: -32px; - left: 0; -} - -.coming-soon-content form #validator-newsletter.validation-danger { - color: red; -} - -/*================================================ -Contact Area CSS -=================================================*/ -.contact-area { - position: relative; - z-index: 1; -} - -.contact-area.bg-image { - background-image: url(../../assets/img/cta-bg1.jpg); - background-position: center center; - background-repeat: no-repeat; - background-size: cover; -} - -.contact-area.bg-image::before { - content: ''; - position: absolute; - left: 0; - right: 0; - top: 0; - bottom: 0; - z-index: -1; - background-color: #000000; - opacity: 0.8; -} - -.contact-area.bg-image .section-title h2 { - color: var(--whiteColor); -} - -.single-contact-info-box { - padding: 35px; - margin-bottom: 30px; - background-color: #F9FAFB; -} - -.single-contact-info-box .icon { - line-height: 1; - font-size: 40px; - margin-bottom: 25px; - color: var(--startupMainColor); -} - -.single-contact-info-box h3 { - font-size: 20px; - margin-bottom: 15px; -} - -.single-contact-info-box p { - margin-bottom: 2px; -} - -.single-contact-info-box p a { - color: var(--optionalColor); - display: inline-block; -} - -.single-contact-info-box p a:hover { - color: var(--startupMainColor); -} - -.single-contact-info-box p:last-child { - margin-bottom: 0; -} - -.single-contact-info-box.style-two { - padding: 0; - text-align: center; - background-color: transparent; -} - -.single-contact-info-box.style-two .icon { - width: 80px; - color: var(--whiteColor); - background-color: var(--blackColor); - border-radius: 50%; - position: relative; - height: 80px; - font-size: 35px; - -webkit-transition: var(--transition); - transition: var(--transition); - margin-left: auto; - margin-right: auto; - margin-bottom: 25px; -} - -.single-contact-info-box.style-two .icon i { - position: absolute; - left: 0; - right: 0; - top: 50%; - -webkit-transform: translateY(-50%); - transform: translateY(-50%); -} - -.single-contact-info-box.style-two:hover .icon { - background-color: var(--startupMainColor); - color: var(--whiteColor); -} - -.contact-form { - padding: 34px; - margin-bottom: 30px; - background-color: var(--whiteColor); - -webkit-box-shadow: 0 0 1.25rem rgba(108, 118, 134, 0.1); - box-shadow: 0 0 1.25rem rgba(108, 118, 134, 0.1); -} - -.contact-form form .form-group { - margin-bottom: 20px; -} - -.contact-form form .form-group label { - display: block; - margin-bottom: 10px; - color: var(--optionalColor); -} - -.contact-form form .form-group .form-control { - border-radius: 0; - background-color: #f9faff; - border: 1px solid #eeeeee !important; -} - -.contact-form form .form-check { - margin-bottom: 15px; - margin-top: 5px; -} - -.contact-form form .form-check a { - color: var(--startupMainColor); -} - -.contact-form form .form-check a:hover { - color: var(--blackColor); - text-decoration: underline; -} - -.contact-form form .default-btn { - margin-top: 5px; - padding-left: 35px; - padding-right: 35px; -} - -.contact-form form .help-block.with-errors { - color: red; - margin-bottom: 0; - margin-top: 15px; -} - -.contact-form form #msgSubmit { - margin: 0; -} - -.contact-form form #msgSubmit.text-danger { - margin-top: 15px; -} - -#maps iframe { - margin-bottom: -7px; - height: 500px; - border: none; - width: 100%; -} - -/*================================================ -Footer Area CSS -=================================================*/ -.footer-area { - padding-top: 100px; - position: relative; - z-index: 1; -} - -.footer-area.marketing-footer { - border-top: 1px solid #eeeeee; -} - -.footer-area.marketing-footer .footer-top { - border-bottom: none; - margin-bottom: 0; -} - -.footer-area.marketing-footer .copyright-area { - border-top: 1px solid #eeeeee; -} - -.footer-area.marketing-footer .copyright-area p a { - color: var(--marketingMainColor); -} - -.footer-area.marketing-footer .single-footer-widget .footer-contact li i { - color: var(--marketingMainColor); -} - -.footer-area.marketing-footer .single-footer-widget .footer-contact li a:hover { - color: var(--marketingMainColor); -} - -.footer-area.marketing-footer .single-footer-widget .info-links li a:hover { - color: var(--marketingMainColor); -} - -.footer-area.marketing-footer .single-footer-widget .newsletter-form button:hover { - color: var(--whiteColor); - background-color: var(--marketingMainColor); -} - -.footer-area.business-footer { - padding-top: 0; -} - -.footer-area.business-footer .footer-top { - background: var(--businessGradientColor); - margin-bottom: 100px; - border: none; - padding-top: 70px; - padding-bottom: 70px; -} - -.footer-area.business-footer .footer-top .content h3 { - color: var(--whiteColor); -} - -.footer-area.business-footer .footer-top .content .default-btn { - background: transparent; - color: var(--whiteColor); - border: 1px solid var(--whiteColor); - -webkit-box-shadow: unset; - box-shadow: unset; -} - -.footer-area.business-footer .footer-top .content .default-btn i { - color: var(--whiteColor); -} - -.footer-area.business-footer .footer-top .content .default-btn:hover { - background-color: var(--whiteColor); - color: var(--blackColor); -} - -.footer-area.business-footer .footer-top .content .default-btn:hover i { - color: var(--blackColor); -} - -.footer-area.business-footer .copyright-area { - border-top: 1px solid #eeeeee; -} - -.footer-area.business-footer .copyright-area p a { - color: var(--businessMainColor); -} - -.footer-area.business-footer .single-footer-widget .footer-contact li i { - color: var(--businessMainColor); -} - -.footer-area.business-footer .single-footer-widget .footer-contact li a:hover { - color: var(--businessMainColor); -} - -.footer-area.business-footer .single-footer-widget .info-links li a:hover { - color: var(--businessMainColor); -} - -.footer-area.business-footer .single-footer-widget .newsletter-form button:hover { - color: var(--whiteColor); - background-color: var(--businessMainColor); -} - -.footer-area.app-footer { - background: var(--appGradientColor); -} - -.footer-area.app-footer .footer-top { - border-color: #0e49b5; -} - -.footer-area.app-footer .footer-top .content h3 { - color: var(--whiteColor); -} - -.footer-area.app-footer .footer-top .content .default-btn { - background: transparent; - color: var(--whiteColor); - border: 1px solid var(--whiteColor); - -webkit-box-shadow: unset; - box-shadow: unset; -} - -.footer-area.app-footer .footer-top .content .default-btn i { - color: var(--whiteColor); -} - -.footer-area.app-footer .footer-top .content .default-btn:hover { - background-color: var(--whiteColor); - color: var(--blackColor); -} - -.footer-area.app-footer .footer-top .content .default-btn:hover i { - color: var(--blackColor); -} - -.footer-area.app-footer .copyright-area { - opacity: 0.9; - border-top: 1px solid #2c4687; - background: transparent; -} - -.footer-area.app-footer .copyright-area p { - color: var(--whiteColor); -} - -.footer-area.app-footer .copyright-area p a { - color: var(--whiteColor); -} - -.footer-area.app-footer .single-footer-widget h3 { - color: var(--whiteColor); -} - -.footer-area.app-footer .single-footer-widget p { - color: var(--whiteColor); -} - -.footer-area.app-footer .single-footer-widget .footer-contact li { - color: var(--whiteColor); -} - -.footer-area.app-footer .single-footer-widget .footer-contact li i { - color: var(--whiteColor); -} - -.footer-area.app-footer .single-footer-widget .footer-contact li a { - color: var(--whiteColor); -} - -.footer-area.app-footer .single-footer-widget .footer-contact li a:hover { - color: var(--whiteColor); -} - -.footer-area.app-footer .single-footer-widget .info-links li { - color: var(--whiteColor); -} - -.footer-area.app-footer .single-footer-widget .info-links li a { - color: var(--whiteColor); -} - -.footer-area.app-footer .single-footer-widget .info-links li a:hover { - color: var(--whiteColor); -} - -.footer-area.app-footer .single-footer-widget .newsletter-form button { - border-left: 1px solid var(--blackColor); -} - -.footer-area.app-footer .single-footer-widget .newsletter-form button:hover { - color: var(--blackColor); - border-color: #eeeeee; - background-color: var(--whiteColor); -} - -.footer-area.saas-footer { - background: #000000; -} - -.footer-area.saas-footer .footer-top { - border-color: #121419; -} - -.footer-area.saas-footer .footer-top .content h3 { - color: var(--whiteColor); -} - -.footer-area.saas-footer .footer-top .content .default-btn { - background: transparent; - color: var(--whiteColor); - border: 1px solid var(--whiteColor); - -webkit-box-shadow: unset; - box-shadow: unset; -} - -.footer-area.saas-footer .footer-top .content .default-btn i { - color: var(--whiteColor); -} - -.footer-area.saas-footer .footer-top .content .default-btn:hover { - background-color: var(--whiteColor); - color: var(--blackColor); -} - -.footer-area.saas-footer .footer-top .content .default-btn:hover i { - color: var(--blackColor); -} - -.footer-area.saas-footer .copyright-area { - border-top: 1px solid #121419; - background: transparent; -} - -.footer-area.saas-footer .copyright-area p { - color: #959595; -} - -.footer-area.saas-footer .copyright-area p a { - color: var(--whiteColor); -} - -.footer-area.saas-footer .single-footer-widget h3 { - color: var(--whiteColor); -} - -.footer-area.saas-footer .single-footer-widget p { - color: var(--whiteColor); -} - -.footer-area.saas-footer .single-footer-widget .footer-contact li { - color: var(--whiteColor); -} - -.footer-area.saas-footer .single-footer-widget .footer-contact li i { - color: var(--saasMainColor); -} - -.footer-area.saas-footer .single-footer-widget .footer-contact li a { - color: var(--whiteColor); -} - -.footer-area.saas-footer .single-footer-widget .footer-contact li a:hover { - color: var(--saasMainColor); -} - -.footer-area.saas-footer .single-footer-widget .info-links li { - color: var(--whiteColor); -} - -.footer-area.saas-footer .single-footer-widget .info-links li a { - color: var(--whiteColor); -} - -.footer-area.saas-footer .single-footer-widget .info-links li a:hover { - color: var(--saasMainColor); -} - -.footer-area.saas-footer .single-footer-widget .newsletter-form button { - background: var(--saasGradientColor); -} - -.footer-area.personal-portfolio-footer { - border-top: 1px solid #eeeeee; -} - -.footer-area.personal-portfolio-footer .single-footer-widget .footer-contact li i { - color: var(--personalPortfolioMainColor); -} - -.footer-area.personal-portfolio-footer .single-footer-widget .footer-contact li a:hover { - color: var(--personalPortfolioMainColor); -} - -.footer-area.personal-portfolio-footer .single-footer-widget .info-links li a:hover { - color: var(--personalPortfolioMainColor); -} - -.footer-area.personal-portfolio-footer .single-footer-widget .newsletter-form button:hover { - color: var(--whiteColor); - background-color: var(--personalPortfolioMainColor); -} - -.footer-area.personal-portfolio-footer .copyright-area { - border-top: none; - background: #06080e; -} - -.footer-area.personal-portfolio-footer .copyright-area p { - color: #959595; -} - -.footer-area.personal-portfolio-footer .copyright-area p a { - color: var(--whiteColor); -} - -.footer-area.consulting-footer { - overflow: hidden; - background-color: #f3f4f7; -} - -.footer-area.consulting-footer .single-footer-widget .footer-contact li i { - color: var(--consultingMainColor); -} - -.footer-area.consulting-footer .single-footer-widget .footer-contact li a:hover { - color: var(--consultingMainColor); -} - -.footer-area.consulting-footer .single-footer-widget .info-links li a:hover { - color: var(--consultingMainColor); -} - -.footer-area.consulting-footer .single-footer-widget .newsletter-form button:hover { - background-color: var(--consultingMainColor); -} - -.footer-area.consulting-footer .copyright-area { - background-color: transparent; - border-top: 1px solid #e4eaf5; -} - -.footer-area.consulting-footer .copyright-area p a { - color: var(--blackColor); -} - -.footer-area.consulting-footer .copyright-area p a:hover { - color: var(--consultingMainColor); -} - -.footer-area.it-agency-footer { - background-color: #111111; -} - -.footer-area.it-agency-footer .footer-top { - border-color: #272727; -} - -.footer-area.it-agency-footer .footer-top .content h3 { - color: var(--whiteColor); -} - -.footer-area.it-agency-footer .footer-top .content .default-btn { - border: 1px solid var(--whiteColor); - color: var(--whiteColor); - background: transparent; - -webkit-box-shadow: unset; - box-shadow: unset; -} - -.footer-area.it-agency-footer .footer-top .content .default-btn i { - color: var(--whiteColor); -} - -.footer-area.it-agency-footer .footer-top .content .default-btn:hover { - background-color: var(--whiteColor); - color: var(--blackColor); -} - -.footer-area.it-agency-footer .footer-top .content .default-btn:hover i { - color: var(--blackColor); -} - -.footer-area.it-agency-footer .single-footer-widget h3 { - color: var(--whiteColor); -} - -.footer-area.it-agency-footer .single-footer-widget p { - color: var(--whiteColor); -} - -.footer-area.it-agency-footer .single-footer-widget .footer-contact li { - color: var(--whiteColor); -} - -.footer-area.it-agency-footer .single-footer-widget .footer-contact li i { - color: var(--itAgencyMainColor); -} - -.footer-area.it-agency-footer .single-footer-widget .footer-contact li a { - color: var(--whiteColor); -} - -.footer-area.it-agency-footer .single-footer-widget .footer-contact li a:hover { - color: var(--itAgencyMainColor); -} - -.footer-area.it-agency-footer .single-footer-widget .info-links li { - color: var(--whiteColor); -} - -.footer-area.it-agency-footer .single-footer-widget .info-links li a { - color: var(--whiteColor); -} - -.footer-area.it-agency-footer .single-footer-widget .info-links li a:hover { - color: var(--itAgencyMainColor); -} - -.footer-area.it-agency-footer .single-footer-widget .newsletter-form button { - background: var(--itAgencyGradientColor); -} - -.footer-area.it-agency-footer .copyright-area { - border-top: 1px solid #272727; - background-color: transparent; -} - -.footer-area.it-agency-footer .copyright-area p { - color: #c8c5c5; -} - -.footer-area.it-agency-footer .copyright-area p a { - color: var(--whiteColor); -} - -.footer-area.bg-dark .footer-top { - border-color: rgba(255, 255, 255, 0.07); -} - -.footer-area.bg-dark .footer-top .content h3 { - color: var(--whiteColor); -} - -.footer-area.bg-dark .footer-top .content .default-btn { - border: 1px solid var(--whiteColor); - color: var(--whiteColor); - background: transparent; - -webkit-box-shadow: unset; - box-shadow: unset; -} - -.footer-area.bg-dark .footer-top .content .default-btn i { - color: var(--whiteColor); -} - -.footer-area.bg-dark .footer-top .content .default-btn:hover { - background-color: var(--whiteColor); - color: var(--blackColor); -} - -.footer-area.bg-dark .footer-top .content .default-btn:hover i { - color: var(--blackColor); -} - -.footer-area.bg-dark .single-footer-widget { - color: var(--whiteColor); -} - -.footer-area.bg-dark .single-footer-widget h3 { - color: var(--whiteColor); -} - -.footer-area.bg-dark .single-footer-widget p { - color: var(--whiteColor); -} - -.footer-area.bg-dark .single-footer-widget .footer-contact li { - color: var(--whiteColor); -} - -.footer-area.bg-dark .single-footer-widget .footer-contact li i { - color: var(--whiteColor); -} - -.footer-area.bg-dark .single-footer-widget .footer-contact li a { - color: var(--whiteColor); -} - -.footer-area.bg-dark .single-footer-widget .footer-contact li a:hover { - color: var(--whiteColor); -} - -.footer-area.bg-dark .single-footer-widget .info-links li { - color: var(--whiteColor); -} - -.footer-area.bg-dark .single-footer-widget .info-links li a { - color: var(--whiteColor); -} - -.footer-area.bg-dark .single-footer-widget .info-links li a:hover { - color: var(--whiteColor); -} - -.footer-area.bg-dark .single-footer-widget .newsletter-form button { - background-color: var(--optionalColor); - color: var(--whiteColor); -} - -.footer-area.bg-dark .single-footer-widget .newsletter-form button:hover { - color: var(--whiteColor); - background-color: var(--blackColor); -} - -.footer-area.bg-dark .copyright-area { - background-color: #06080e; - border-top: 1px solid #292929; -} - -.footer-area.bg-dark .copyright-area p { - color: #c6c6c6; -} - -.footer-area.bg-dark .copyright-area p a { - font-weight: 800; - color: var(--whiteColor); -} - -.footer-area.bg-dark .copyright-area .social-links li a { - color: var(--whiteColor); -} - -.footer-area.minimal-portfolio-color { - padding: 0; -} - -.footer-area.minimal-portfolio-color .copyright-area { - margin: 0; - padding-top: 50px; - padding-bottom: 50px; -} - -.footer-area.minimal-portfolio-color .copyright-area p a { - color: var(--minimalPortfolioColor); -} - -.footer-top { - border-bottom: 1px solid #eeeeee; - padding-bottom: 70px; - margin-bottom: 70px; -} - -.footer-top .logo { - display: inline-block; -} - -.footer-top .content h3 { - font-size: 20px; - margin-bottom: 0; -} - -.single-footer-widget { - margin-bottom: 30px; -} - -.single-footer-widget h3 { - font-size: 20px; - margin-bottom: 20px; -} - -.single-footer-widget .footer-contact { - padding-left: 0; - margin-bottom: 0; - list-style-type: none; -} - -.single-footer-widget .footer-contact li { - position: relative; - margin-bottom: 12px; - padding-left: 24px; - color: var(--optionalColor); -} - -.single-footer-widget .footer-contact li i { - position: absolute; - left: 0; - top: 4px; - color: var(--startupMainColor); -} - -.single-footer-widget .footer-contact li a { - display: inline-block; - color: var(--optionalColor); -} - -.single-footer-widget .footer-contact li a:hover { - color: var(--startupMainColor); -} - -.single-footer-widget .footer-contact li:last-child { - margin-bottom: 0; -} - -.single-footer-widget .info-links { - padding-left: 0; - margin-bottom: 0; - list-style-type: none; -} - -.single-footer-widget .info-links li { - margin-bottom: 12px; -} - -.single-footer-widget .info-links li a { - display: inline-block; - color: var(--optionalColor); -} - -.single-footer-widget .info-links li a:hover { - color: var(--startupMainColor); -} - -.single-footer-widget .info-links li:last-child { - margin-bottom: 0; -} - -.single-footer-widget .newsletter-form { - position: relative; -} - -.single-footer-widget .newsletter-form .input-newsletter { - display: block; - width: 100%; - height: 50px; - border: 1px solid #eeeeee; - background-color: var(--whiteColor); - color: var(--blackColor); - padding-left: 15px; -} - -.single-footer-widget .newsletter-form .input-newsletter::-webkit-input-placeholder { - -webkit-transition: var(--transition); - transition: var(--transition); - color: var(--optionalColor); -} - -.single-footer-widget .newsletter-form .input-newsletter:-ms-input-placeholder { - -webkit-transition: var(--transition); - transition: var(--transition); - color: var(--optionalColor); -} - -.single-footer-widget .newsletter-form .input-newsletter::-ms-input-placeholder { - -webkit-transition: var(--transition); - transition: var(--transition); - color: var(--optionalColor); -} - -.single-footer-widget .newsletter-form .input-newsletter::placeholder { - -webkit-transition: var(--transition); - transition: var(--transition); - color: var(--optionalColor); -} - -.single-footer-widget .newsletter-form .input-newsletter:focus::-webkit-input-placeholder { - color: transparent; -} - -.single-footer-widget .newsletter-form .input-newsletter:focus:-ms-input-placeholder { - color: transparent; -} - -.single-footer-widget .newsletter-form .input-newsletter:focus::-ms-input-placeholder { - color: transparent; -} - -.single-footer-widget .newsletter-form .input-newsletter:focus::placeholder { - color: transparent; -} - -.single-footer-widget .newsletter-form button { - position: absolute; - right: 0; - top: 0; - height: 50px; - width: 60px; - background-color: var(--blackColor); - color: var(--whiteColor); - border: none; - -webkit-transition: var(--transition); - transition: var(--transition); -} - -.single-footer-widget .newsletter-form button:hover { - color: var(--whiteColor); - background-color: var(--startupMainColor); -} - -.single-footer-widget .newsletter-form #validator-newsletter { - position: absolute; - bottom: -32px; - left: 0; -} - -.single-footer-widget .newsletter-form #validator-newsletter.validation-danger { - color: red; -} - -.single-footer-widget.pl-4 { - padding-left: 4rem; -} - -.single-footer-widget.pl-2 { - padding-left: 2rem; -} - -.single-footer-widget .social-links { - padding-left: 0; - list-style-type: none; - margin-bottom: 0; -} - -.single-footer-widget .social-links li { - display: inline-block; - margin-right: 12px; -} - -.single-footer-widget .social-links li a { - display: inline-block; - font-size: 18px; -} - -.single-footer-widget .social-links li:last-child { - margin-right: 0; -} - -.single-footer-widget .logo { - display: inline-block; - margin-bottom: 15px; -} - -.single-footer-widget.style-two h3 { - position: relative; - padding-left: 55px; -} - -.single-footer-widget.style-two h3::before { - width: 40px; - height: 1px; - background-color: var(--personalPortfolioMainColor); - content: ''; - position: absolute; - left: 0; - top: 50%; - -webkit-transform: translateY(-50%); - transform: translateY(-50%); -} - -.copyright-area { - background-color: var(--whiteColor); - text-align: center; - margin-top: 70px; - padding-top: 25px; - padding-bottom: 25px; -} - -.copyright-area p a { - font-weight: 600; - display: inline-block; - color: var(--startupMainColor); -} - -.copyright-area .social-links { - padding-left: 0; - list-style-type: none; - margin-bottom: 0; - text-align: end; -} - -.copyright-area .social-links li { - display: inline-block; - margin-right: 12px; -} - -.copyright-area .social-links li a { - display: inline-block; - font-size: 18px; -} - -.copyright-area .social-links li:last-child { - margin-right: 0; -} - -.copyright-area.bg-faf7f2 { - background-color: #faf7f2; -} - -/*================================================ -Go Top CSS -=================================================*/ -.go-top { - position: fixed; - cursor: pointer; - bottom: 20px; - right: 20px; - z-index: 4; - width: 43px; - height: 45px; - opacity: 0; - font-size: 20px; - visibility: hidden; - text-align: center; - color: var(--whiteColor); - -webkit-transition: var(--transition); - transition: var(--transition); - background-color: var(--startupMainColor); - -webkit-box-shadow: 0px 3px 10px rgba(0, 0, 0, 0.1); - box-shadow: 0px 3px 10px rgba(0, 0, 0, 0.1); -} - -.go-top i { - right: 0; - left: 0; - top: 50%; - text-align: center; - position: absolute; - -webkit-transform: translateY(-50%); - transform: translateY(-50%); - margin-left: auto; - margin-right: auto; -} - -.go-top.active { - opacity: 1; - visibility: visible; - bottom: 20px; -} - -.go-top:hover { - color: var(--whiteColor); - background-color: var(--blackColor) !important; -} - -.go-top.marketing-color { - background-color: var(--marketingMainColor); -} - -.go-top.business-color { - background: var(--businessGradientColor); -} - -.go-top.app-color { - background: var(--appGradientColor); -} - -.go-top.saas-color { - background: var(--saasGradientColor); -} - -.go-top.personal-portfolio-color { - background-color: var(--personalPortfolioMainColor); -} - -.go-top.consulting-color { - background-color: var(--consultingMainColor); -} - -.go-top.it-agency-color { - background: var(--itAgencyGradientColor); -} - -.go-top.shop-color { - background: var(--shopMainColor); -} - -.go-top.minimal-portfolio-color { - background: var(--minimalPortfolioColor); -} - -/*extra-css*/ -.shape1 { - position: absolute; - right: 10%; - top: 5%; - z-index: -1; - -webkit-animation: moveleftbounce 5s linear infinite; - animation: moveleftbounce 5s linear infinite; -} - -.shape2 { - position: absolute; - right: 3%; - bottom: 12%; - z-index: -1; - -webkit-animation-duration: 20s; - animation-duration: 20s; - -webkit-animation-name: rotateme; - animation-name: rotateme; - -webkit-animation-timing-function: linear; - animation-timing-function: linear; - -webkit-animation-iteration-count: infinite; - animation-iteration-count: infinite; -} - -.shape3 { - position: absolute; - right: 33.6%; - bottom: 7%; - z-index: -1; -} - -.shape4 { - position: absolute; - top: 85px; - left: 20px; - z-index: -1; - -webkit-animation: movebounce 5s linear infinite; - animation: movebounce 5s linear infinite; -} - -.shape5 { - position: absolute; - bottom: 40px; - right: 20px; - z-index: -1; - -webkit-animation: moveleftbounce 5s linear infinite; - animation: moveleftbounce 5s linear infinite; -} - -.shape6 { - position: absolute; - left: 40px; - top: 45px; - -webkit-animation-duration: 20s; - animation-duration: 20s; - -webkit-animation-name: rotateme; - animation-name: rotateme; - -webkit-animation-timing-function: linear; - animation-timing-function: linear; - -webkit-animation-iteration-count: infinite; - animation-iteration-count: infinite; -} - -.shape7 { - position: absolute; - left: 30px; - top: 20px; - z-index: -1; - -webkit-animation-duration: 20s; - animation-duration: 20s; - -webkit-animation-name: rotateme; - animation-name: rotateme; - -webkit-animation-timing-function: linear; - animation-timing-function: linear; - -webkit-animation-iteration-count: infinite; - animation-iteration-count: infinite; -} - -.shape8 { - position: absolute; - bottom: 50px; - left: 50px; - z-index: -1; - -webkit-animation-duration: 30s; - animation-duration: 30s; - -webkit-animation-name: rotateme; - animation-name: rotateme; - -webkit-animation-timing-function: linear; - animation-timing-function: linear; - -webkit-animation-iteration-count: infinite; - animation-iteration-count: infinite; -} - -.shape9 { - position: absolute; - right: 0; - top: 65px; - z-index: -1; - -webkit-animation: moveleftbounce 5s linear infinite; - animation: moveleftbounce 5s linear infinite; -} - -.shape10 { - position: absolute; - left: 0; - top: 0; - z-index: -1; -} - -.shape11 { - position: absolute; - top: 8%; - left: 0; - z-index: -1; - -webkit-animation-duration: 40s; - animation-duration: 40s; - -webkit-animation-name: rotateme2; - animation-name: rotateme2; - -webkit-animation-timing-function: linear; - animation-timing-function: linear; - -webkit-animation-iteration-count: infinite; - animation-iteration-count: infinite; -} - -.shape12 { - position: absolute; - right: 20px; - bottom: 20px; - z-index: -1; - -webkit-animation-duration: 30s; - animation-duration: 30s; - -webkit-animation-name: rotateme; - animation-name: rotateme; - -webkit-animation-timing-function: linear; - animation-timing-function: linear; - -webkit-animation-iteration-count: infinite; - animation-iteration-count: infinite; -} - -.shape13 { - position: absolute; - right: 12%; - bottom: 2%; - z-index: -1; - -webkit-animation-duration: 30s; - animation-duration: 30s; - -webkit-animation-name: rotateme; - animation-name: rotateme; - -webkit-animation-timing-function: linear; - animation-timing-function: linear; - -webkit-animation-iteration-count: infinite; - animation-iteration-count: infinite; -} - -.shape14 { - position: absolute; - left: 0; - bottom: 76px; - z-index: -1; - opacity: 0.23; -} - -.shape15 { - position: absolute; - left: 50%; - top: 50%; - -webkit-transform: translateY(-50%) translateX(-50%); - transform: translateY(-50%) translateX(-50%); - z-index: -1; -} - -.shape15 img { - -webkit-animation: movescale 5s linear infinite; - animation: movescale 5s linear infinite; -} - -.shape16 { - position: absolute; - right: 5px; - top: 0; - z-index: -1; - -webkit-animation: moveleftbounce 5s linear infinite; - animation: moveleftbounce 5s linear infinite; -} - -.shape17 { - left: 0; - bottom: 98px; - z-index: -1; - opacity: .05; - position: absolute; -} - -.shape18 { - position: absolute; - right: 0; - bottom: 0; - z-index: -1; -} - -.shape19 { - position: absolute; - right: 35%; - top: 12%; - z-index: -1; - -webkit-animation-duration: 30s; - animation-duration: 30s; - -webkit-animation-name: rotateme; - animation-name: rotateme; - -webkit-animation-timing-function: linear; - animation-timing-function: linear; - -webkit-animation-iteration-count: infinite; - animation-iteration-count: infinite; -} - -.divider { - width: 100%; - position: absolute; - height: 100px; - pointer-events: none; - -webkit-mask-image: url("data:image/svg+xml;utf8,%3csvg viewBox='0 0 100 100' width='100%' height='100%' xmlns='http://www.w3.org/2000/svg' preserveAspectRatio='none'%3e%3cpath d='M0,0 C16.6666667,66 33.3333333,98 50,98 C66.6666667,98 83.3333333,66 100,0 L100,100 L0,100 L0,0 Z' fill='%23fff'/%3e%3c/svg%3e"); - mask-image: url("data:image/svg+xml;utf8,%3csvg viewBox='0 0 100 100' width='100%' height='100%' xmlns='http://www.w3.org/2000/svg' preserveAspectRatio='none'%3e%3cpath d='M0,0 C16.6666667,66 33.3333333,98 50,98 C66.6666667,98 83.3333333,66 100,0 L100,100 L0,100 L0,0 Z' fill='%23fff'/%3e%3c/svg%3e"); - -webkit-mask-size: 100% 101%; - mask-size: 100% 101%; - background-color: var(--whiteColor); - bottom: 0; - left: 0; - z-index: -1; -} - -@-webkit-keyframes border-transform { - 0%, 100% { - border-radius: 63% 37% 54% 46% / 55% 48% 52% 45%; - } - 14% { - border-radius: 40% 60% 54% 46% / 49% 60% 40% 51%; - } - 28% { - border-radius: 54% 46% 38% 62% / 49% 70% 30% 51%; - } - 42% { - border-radius: 61% 39% 55% 45% / 61% 38% 62% 39%; - } - 56% { - border-radius: 61% 39% 67% 33% / 70% 50% 50% 30%; - } - 70% { - border-radius: 50% 50% 34% 66% / 56% 68% 32% 44%; - } - 84% { - border-radius: 46% 54% 50% 50% / 35% 61% 39% 65%; - } -} - -@keyframes border-transform { - 0%, 100% { - border-radius: 63% 37% 54% 46% / 55% 48% 52% 45%; - } - 14% { - border-radius: 40% 60% 54% 46% / 49% 60% 40% 51%; - } - 28% { - border-radius: 54% 46% 38% 62% / 49% 70% 30% 51%; - } - 42% { - border-radius: 61% 39% 55% 45% / 61% 38% 62% 39%; - } - 56% { - border-radius: 61% 39% 67% 33% / 70% 50% 50% 30%; - } - 70% { - border-radius: 50% 50% 34% 66% / 56% 68% 32% 44%; - } - 84% { - border-radius: 46% 54% 50% 50% / 35% 61% 39% 65%; - } -} - -@-webkit-keyframes rotateme { - from { - -webkit-transform: rotate(0deg); - transform: rotate(0deg); - } - to { - -webkit-transform: rotate(360deg); - transform: rotate(360deg); - } -} - -@keyframes rotateme { - from { - -webkit-transform: rotate(0deg); - transform: rotate(0deg); - } - to { - -webkit-transform: rotate(360deg); - transform: rotate(360deg); - } -} - -@-webkit-keyframes rotateme2 { - from { - -webkit-transform: rotate(0deg); - transform: rotate(0deg); - } - to { - -webkit-transform: rotate(-360deg); - transform: rotate(-360deg); - } -} - -@keyframes rotateme2 { - from { - -webkit-transform: rotate(0deg); - transform: rotate(0deg); - } - to { - -webkit-transform: rotate(-360deg); - transform: rotate(-360deg); - } -} - -@-webkit-keyframes movebounce { - 0% { - -webkit-transform: translateY(0px); - transform: translateY(0px); - } - 50% { - -webkit-transform: translateY(20px); - transform: translateY(20px); - } - 100% { - -webkit-transform: translateY(0px); - transform: translateY(0px); - } -} - -@keyframes movebounce { - 0% { - -webkit-transform: translateY(0px); - transform: translateY(0px); - } - 50% { - -webkit-transform: translateY(20px); - transform: translateY(20px); - } - 100% { - -webkit-transform: translateY(0px); - transform: translateY(0px); - } -} - -@-webkit-keyframes moveleftbounce { - 0% { - -webkit-transform: translateX(0px); - transform: translateX(0px); - } - 50% { - -webkit-transform: translateX(-20px); - transform: translateX(-20px); - } - 100% { - -webkit-transform: translateX(0px); - transform: translateX(0px); - } -} - -@keyframes moveleftbounce { - 0% { - -webkit-transform: translateX(0px); - transform: translateX(0px); - } - 50% { - -webkit-transform: translateX(-20px); - transform: translateX(-20px); - } - 100% { - -webkit-transform: translateX(0px); - transform: translateX(0px); - } -} - -@-webkit-keyframes scroller { - 0% { - bottom: 34px; - } - 5% { - top: 4px; - } - 32% { - bottom: 4px; - } - 66% { - top: 34px; - bottom: 4px; - } - 100% { - top: 4px; - bottom: 34px; - } -} - -@keyframes scroller { - 0% { - bottom: 34px; - } - 5% { - top: 4px; - } - 32% { - bottom: 4px; - } - 66% { - top: 34px; - bottom: 4px; - } - 100% { - top: 4px; - bottom: 34px; - } -} - -@-webkit-keyframes movescale { - 0% { - -webkit-transform: scale(0.9); - transform: scale(0.9); - } - 50% { - -webkit-transform: scale(1); - transform: scale(1); - } - 100% { - -webkit-transform: scale(0.9); - transform: scale(0.9); - } -} - -@keyframes movescale { - 0% { - -webkit-transform: scale(0.9); - transform: scale(0.9); - } - 50% { - -webkit-transform: scale(1); - transform: scale(1); - } - 100% { - -webkit-transform: scale(0.9); - transform: scale(0.9); - } -} - -@-webkit-keyframes rotate3d { - 0% { - -webkit-transform: rotateY(0deg); - transform: rotateY(0deg); - } - 100% { - -webkit-transform: rotateY(360deg); - transform: rotateY(360deg); - } -} - -@keyframes rotate3d { - 0% { - -webkit-transform: rotateY(0deg); - transform: rotateY(0deg); - } - 100% { - -webkit-transform: rotateY(360deg); - transform: rotateY(360deg); - } -} - -@-webkit-keyframes animationFramesOne { - 0% { - -webkit-transform: translate(0px, 0px) rotate(0deg); - transform: translate(0px, 0px) rotate(0deg); - } - 20% { - -webkit-transform: translate(73px, -1px) rotate(36deg); - transform: translate(73px, -1px) rotate(36deg); - } - 40% { - -webkit-transform: translate(141px, 72px) rotate(72deg); - transform: translate(141px, 72px) rotate(72deg); - } - 60% { - -webkit-transform: translate(83px, 122px) rotate(108deg); - transform: translate(83px, 122px) rotate(108deg); - } - 80% { - -webkit-transform: translate(-40px, 72px) rotate(144deg); - transform: translate(-40px, 72px) rotate(144deg); - } - 100% { - -webkit-transform: translate(0px, 0px) rotate(0deg); - transform: translate(0px, 0px) rotate(0deg); - } -} - -@keyframes animationFramesOne { - 0% { - -webkit-transform: translate(0px, 0px) rotate(0deg); - transform: translate(0px, 0px) rotate(0deg); - } - 20% { - -webkit-transform: translate(73px, -1px) rotate(36deg); - transform: translate(73px, -1px) rotate(36deg); - } - 40% { - -webkit-transform: translate(141px, 72px) rotate(72deg); - transform: translate(141px, 72px) rotate(72deg); - } - 60% { - -webkit-transform: translate(83px, 122px) rotate(108deg); - transform: translate(83px, 122px) rotate(108deg); - } - 80% { - -webkit-transform: translate(-40px, 72px) rotate(144deg); - transform: translate(-40px, 72px) rotate(144deg); - } - 100% { - -webkit-transform: translate(0px, 0px) rotate(0deg); - transform: translate(0px, 0px) rotate(0deg); - } -} - -@-webkit-keyframes ripple { - 0% { - -webkit-transform: scale(1); - transform: scale(1); - } - 75% { - -webkit-transform: scale(1.75); - transform: scale(1.75); - opacity: 1; - } - 100% { - -webkit-transform: scale(2); - transform: scale(2); - opacity: 0; - } -} - -@keyframes ripple { - 0% { - -webkit-transform: scale(1); - transform: scale(1); - } - 75% { - -webkit-transform: scale(1.75); - transform: scale(1.75); - opacity: 1; - } - 100% { - -webkit-transform: scale(2); - transform: scale(2); - opacity: 0; - } -} - -.owl-item { - overflow: hidden; -} - -.owl-item.active .startup-works-image { - -webkit-animation-duration: .8s; - animation-duration: .8s; - -webkit-animation-fill-mode: both; - animation-fill-mode: both; - -webkit-animation-name: fadeInRight; - animation-name: fadeInRight; - -webkit-animation-delay: .5s; - animation-delay: .5s; -} - -.owl-item.active .startup-works-image img { - display: inline-block !important; - width: auto !important; -} - -.owl-item.active .startup-testimonials-image { - overflow: hidden; -} - -.owl-item.active .startup-testimonials-image .main-image { - -webkit-animation-duration: .8s; - animation-duration: .8s; - -webkit-animation-fill-mode: both; - animation-fill-mode: both; - -webkit-animation-name: fadeInRight; - animation-name: fadeInRight; - -webkit-animation-delay: .5s; - animation-delay: .5s; -} - -/*================================================ -Modal CSS -=================================================*/ -.productsQuickView { - padding-right: 0 !important; -} - -.productsQuickView .modal-dialog { - max-width: 900px; - margin: 0 auto; -} - -.productsQuickView .modal-content { - border: none; - padding: 40px; - border-radius: 0; -} - -.productsQuickView .modal-content button.btn-close { - top: 0; - right: 0; - margin: 0; - z-index: 3; - outline: 0; - opacity: 1; - padding: 0; - width: 35px; - height: 35px; - border: none; - font-size: 17px; - line-height: 38px; - -webkit-box-shadow: unset; - box-shadow: unset; - text-shadow: unset; - position: absolute; -} - -.productsQuickView .modal-content .products-content h3 { - margin-bottom: 15px; - font-size: 20px; -} - -.productsQuickView .modal-content .products-content .price { - color: var(--blackColor); - margin-top: 15px; - margin-bottom: 12px; - font-weight: 700; - font-size: 17px; -} - -.productsQuickView .modal-content .products-content .price .old-price { - text-decoration: line-through; - color: #9b9494; - font-weight: normal; -} - -.productsQuickView .modal-content .products-content .products-review .rating { - display: inline-block; - padding-right: 3px; - font-size: 14px; -} - -.productsQuickView .modal-content .products-content .products-review .rating i { - display: inline-block; - color: #f49f0b; - line-height: 1; -} - -.productsQuickView .modal-content .products-content .products-review .rating-count { - display: inline-block; - color: var(--optionalColor); - line-height: initial; - position: relative; - top: 1px; -} - -.productsQuickView .modal-content .products-content .products-review .rating-count:hover { - color: var(--blackColor); -} - -.productsQuickView .modal-content .products-content .products-add-to-cart { - margin-top: 25px; -} - -.productsQuickView .modal-content .products-content .products-add-to-cart .quantities { - position: relative; - padding-left: 45px; -} - -.productsQuickView .modal-content .products-content .products-add-to-cart .quantities .sub-title { - left: 0; - top: 50%; - display: block; - font-weight: 600; - position: absolute; - -webkit-transform: translateY(-50%); - transform: translateY(-50%); -} - -.productsQuickView .modal-content .products-content .products-add-to-cart .input-counter { - display: block; - max-width: 120px; - min-width: 120px; - text-align: center; - position: relative; - margin-bottom: 25px; -} - -.productsQuickView .modal-content .products-content .products-add-to-cart .input-counter span { - top: 0; - width: 35px; - height: 100%; - cursor: pointer; - font-size: 15px; - line-height: 38px; - position: absolute; - color: var(--blackColor); - border: 1px solid #eeeeee; - background-color: transparent; - -webkit-transition: var(--transition); - transition: var(--transition); -} - -.productsQuickView .modal-content .products-content .products-add-to-cart .input-counter span i { - position: relative; - top: 1px; -} - -.productsQuickView .modal-content .products-content .products-add-to-cart .input-counter span.minus-btn { - left: 0; -} - -.productsQuickView .modal-content .products-content .products-add-to-cart .input-counter span.plus-btn { - right: 0; -} - -.productsQuickView .modal-content .products-content .products-add-to-cart .input-counter span:hover { - color: var(--optionalColor); -} - -.productsQuickView .modal-content .products-content .products-add-to-cart .input-counter input { - height: 40px; - outline: 0; - width: 100%; - display: block; - text-align: center; - color: var(--blackColor); - border: 1px solid #eeeeee; - background-color: transparent; - font-size: 17px; - font-weight: 600; -} - -.productsQuickView .modal-content .products-content .products-add-to-cart .input-counter input::-webkit-input-placeholder { - color: var(--blackColor); -} - -.productsQuickView .modal-content .products-content .products-add-to-cart .input-counter input:-ms-input-placeholder { - color: var(--blackColor); -} - -.productsQuickView .modal-content .products-content .products-add-to-cart .input-counter input::-ms-input-placeholder { - color: var(--blackColor); -} - -.productsQuickView .modal-content .products-content .products-add-to-cart .input-counter input::placeholder { - color: var(--blackColor); -} - -.productsQuickView .modal-content .products-content .default-btn { - -webkit-box-shadow: unset !important; - box-shadow: unset !important; -} - -.productsQuickView .modal-content .products-content .social-share { - padding-left: 0; - list-style-type: none; - margin-bottom: 0; - margin-top: 30px; -} - -.productsQuickView .modal-content .products-content .social-share li { - display: inline-block; - margin-right: 12px; -} - -.productsQuickView .modal-content .products-content .social-share li span { - font-weight: 600; - position: relative; - top: -1px; -} - -.productsQuickView .modal-content .products-content .social-share li a { - line-height: 1; - font-size: 18px; - color: var(--optionalColor); -} - -.productsQuickView .modal-content .products-content .social-share li a:hover { - color: var(--blackColor); -} -/*# sourceMappingURL=style.css.map */ \ No newline at end of file diff --git a/static/assets/css/style.css.map b/static/assets/css/style.css.map deleted file mode 100644 index e69de29b..00000000 diff --git a/static/assets/css/style.scss b/static/assets/css/style.scss deleted file mode 100644 index d007e8b3..00000000 --- a/static/assets/css/style.scss +++ /dev/null @@ -1,16505 +0,0 @@ -/* -@File: Noke Template Styles - -* This file contains the styling for the actual template, this -is the file you need to edit to change the look of the -template. - -This files table contents are outlined below>>>>> - -******************************************* -******************************************* - -** - Default CSS -** - Top Header Area CSS -** - Navbar Area CSS -** - Search Overlay CSS -** - Startup Banner Area CSS -** - Marketing Banner Area CSS -** - Business Banner Area CSS -** - App Banner Area CSS -** - Saas Banner Area CSS -** - Personal Portfolio Banner Area CSS -** - Consulting Banner Area CSS -** - IT Agency Banner Area CSS -** - Shop Banner Area CSS -** - Blog Banner Area CSS -** - Furniture Banner Area CSS -** - Minimal Portfolio Banner Area CSS -** - Features Area CSS -** - About Area CSS -** - Services Area CSS -** - Services Details Area CSS -** - Works Area CSS -** - What We Do Area CSS -** - Categories Area CSS -** - Who We Are Area CSS -** - Video Area CSS -** - Process Area CSS -** - Funfacts Area CSS -** - Products Area CSS -** - Products Details Area CSS -** - Cart Area CSS -** - Checkout Area CSS -** - Testimonials Area CSS -** - Team Area CSS -** - How It Works Area CSS -** - Skills Area CSS -** - Expertise Area CSS -** - CTA Area CSS -** - Timeline/Short Brief Area CSS -** - App Download Area CSS -** - Trending Style Area CSS -** - Pricing Area CSS -** - App Screenshot Area CSS -** - Facility Area CSS -** - Latest Posts Area CSS -** - Partner Area CSS -** - Clients Area CSS -** - Featured Video Area CSS -** - Blog Area CSS -** - Blog Details Area CSS -** - Widget Area CSS -** - Profile Authentication Area CSS -** - Instagram Area CSS -** - Page Title Area CSS -** - Pagination Area CSS -** - Gallery Area CSS -** - Portfolio Details Area CSS -** - Portfolio Details Navigation Area CSS -** - Privacy Policy Area CSS -** - Terms & Conditions Area CSS -** - FAQ Area CSS -** - 404 Error Area CSS -** - Coming Soon Area CSS -** - Contact Area CSS -** - Footer Area CSS -** - Go Top CSS -** - Modal CSS -*/ - -/*================================================ -Default CSS -=================================================*/ -@import url('https://fonts.googleapis.com/css2?family=Manrope:wght@200;300;400;500;600;700;800&display=swap'); -@import url('https://fonts.googleapis.com/css2?family=Poppins:ital,wght@0,100;0,200;0,300;0,400;0,500;0,600;0,700;0,800;0,900;1,100;1,200;1,300;1,400;1,500;1,600;1,700;1,800;1,900&display=swap'); -:root { - --fontFamily: 'Manrope', sans-serif; - --headingFontFamily: 'Poppins', sans-serif; - --startupMainColor: #fd5444; - --marketingMainColor: #2f4eac; - --businessMainColor: #5d3dec; - --businessGradientColor: linear-gradient(to right, #4651e6, #5749ed, #693ff3, #7c30f7, #8f11fa); - --appMainColor: #0042bb; - --appGradientColor: linear-gradient(to right bottom, #0042bb, #093ea8, #113a96, #163584, #1a3172); - --saasMainColor: #296dfe; - --saasGradientColor: linear-gradient(to right top, #257ef7, #0094fb, #00a7f5, #00b6ea, #17c3dd); - --personalPortfolioMainColor: #111111; - --itAgencyMainColor: #ff4a17; - --itAgencyGradientColor: linear-gradient(to right, #ff4a17, #fd5d15, #fb6d16, #f87b1a, #f68821); - --consultingMainColor: #4eaf4e; - --shopMainColor: #111111; - --minimalPortfolioColor: #4ab19d; - --optionalColor: #6f6f6f; - --whiteColor: #ffffff; - --blackColor: #2d2d37; - --fontSize: 15.5px; - --transition: .5s; -} -body { - margin: 0; - padding: 0; - color: var(--blackColor); - font: { - size: var(--fontSize); - family: var(--fontFamily); - }; -} -.h1, .h2, .h3, .h4, .h5, .h6, h1, h2, h3, h4, h5, h6 { - color: var(--blackColor); - font: { - weight: 600; - family: var(--headingFontFamily); - }; -} -a { - transition: var(--transition); - color: var(--blackColor); - text-decoration: none; - outline: 0 !important; - - &:hover { - color: var(--optionalColor); - text-decoration: none; - } -} -:focus { - outline: 0 !important; -} -.d-table { - width: 100%; - height: 100%; - - &-cell { - vertical-align: middle; - } -} -img { - max-width: 100%; - height: auto; -} -p { - color: var(--optionalColor); - margin-bottom: 15px; - line-height: 1.8; - font: { - weight: 500; - size: var(--fontSize); - }; - &:last-child { - margin-bottom: 0; - } -} -.ptb-100 { - padding: { - top: 100px; - bottom: 100px; - }; -} -.pt-100 { - padding-top: 100px; -} -.pb-100 { - padding-bottom: 100px; -} -.ptb-70 { - padding: { - top: 70px; - bottom: 70px; - }; -} -.pt-70 { - padding-top: 70px; -} -.pb-70 { - padding-bottom: 70px; -} -.bg-f9f4f0 { - background-color: #f9f4f0; -} -.bg-faf7f2 { - background-color: #faf7f2; -} -.bg-1b2232 { - background-color: #1b2232; -} -.bg-f3f4f7 { - background-color: #f3f4f7; -} -.bg-f9f9f9 { - background-color: #f9f9f9; -} -.bg-dark { - background-color: #06080e !important; - - .section-title { - color: var(--whiteColor); - - h2 { - color: var(--whiteColor); - } - p { - color: var(--whiteColor); - } - } -} -.bg-f6f7f9 { - background-color: #f6f7f9; -} -/*section-title*/ -.section-title { - text-align: center; - max-width: 655px; - margin: { - bottom: 60px; - left: auto; - right: auto; - }; - h2 { - margin-bottom: 0; - font-size: 40px; - } - p { - max-width: 540px; - margin: { - top: 15px; - left: auto; - right: auto; - }; - } - .sub-title { - display: block; - margin-bottom: 12px; - color: var(--startupMainColor); - font: { - family: var(--headingFontFamily); - weight: 600; - size: 14px; - }; - &.marketing-color { - color: var(--marketingMainColor); - } - &.business-color { - color: var(--businessMainColor); - } - &.app-color { - color: var(--appMainColor); - } - &.saas-color { - color: var(--saasMainColor); - } - &.consulting-color { - color: var(--consultingMainColor); - } - &.it-agency-color { - color: var(--itAgencyMainColor); - } - &.minimal-portfolio-color { - color: var(--minimalPortfolioColor); - } - } - &.style-two { - text-align: start; - padding-left: 90px; - margin: { - left: 0; - right: 0; - bottom: 50px; - }; - h2 { - position: relative; - font-size: 30px; - - &::before { - left: -90px; - top: 50%; - width: 70px; - height: 1px; - content: ''; - position: absolute; - transform: translateY(-50%); - background-color: var(--personalPortfolioMainColor); - } - } - p { - margin: { - left: 0; - right: 0; - }; - } - } - &.style-three { - max-width: 100%; - - h2 { - position: relative; - z-index: 1; - - span { - display: inline-block; - background-color: var(--whiteColor); - padding: { - left: 30px; - right: 30px; - }; - } - &::before { - content: ''; - position: absolute; - left: 0; - right: 0; - top: 50%; - transform: translateY(-50%); - background-color: #cfcfcf; - height: 1px; - z-index: -1; - } - } - } - &.style-four { - border-bottom: 1px solid #eeeeee; - padding-bottom: 12px; - position: relative; - text-align: start; - max-width: 100%; - margin: { - left: 0; - right: 0; - bottom: 45px; - }; - h2 { - font-size: 30px; - } - &::before { - content: ''; - position: absolute; - left: 0; - bottom: -1px; - width: 70px; - height: 1px; - background-color: var(--blackColor); - } - } -} -/*default-btn*/ -.default-btn { - box-shadow: 0 0.25rem 0.5rem rgba(0, 0, 0, 0.05), 0 1.5rem 2.2rem rgba(0, 0, 0, 0.1); - transition: var(--transition); - display: inline-block; - background-color: var(--startupMainColor); - color: var(--whiteColor); - position: relative; - border-radius: 5px; - border: none; - padding: 13px 50px 13px 35px; - font: { - size: var(--fontSize); - weight: 700; - }; - i { - position: absolute; - right: 35px; - top: 50%; - transform: translateY(-50%); - margin-top: 1px; - font-size: 14px; - transition: var(--transition); - } - &:hover { - color: var(--whiteColor); - background-color: var(--startupMainColor); - box-shadow: 0 0.5rem 1.2rem rgba(0, 0, 0, 0.1), 0 2rem 3rem rgba(0, 0, 0, 0.15); - - i { - right: 30px; - } - } - &.marketing-color { - background-color: var(--marketingMainColor); - color: var(--whiteColor); - - &:hover { - color: var(--whiteColor); - background-color: var(--marketingMainColor); - } - } - &.business-color { - background: var(--businessGradientColor); - } - &.app-color { - background: var(--appGradientColor); - } - &.saas-color { - background: var(--saasGradientColor); - } - &.personal-portfolio-color { - background: var(--personalPortfolioMainColor); - } - &.consulting-color { - background: var(--consultingMainColor); - } - &.it-agency-color { - background: var(--itAgencyGradientColor); - } - &.shop-color { - background: var(--shopMainColor); - } - &.minimal-portfolio-color { - background: var(--minimalPortfolioColor); - } -} -/*form-control*/ -.form-control { - border-radius: 0; - background-color: #f5f5f5 !important; - box-shadow: unset !important; - transition: var(--transition); - border: none !important; - height: 50px; - padding-left: 15px; - color: var(--blackColor); - font: { - size: var(--fontSize); - weight: 500; - }; - &::placeholder { - color: #999999; - transition: var(--transition); - } - &:focus { - &::placeholder { - color: transparent; - } - } -} -textarea.form-control { - padding-top: 15px; - height: auto; -} - -/*================================================ -Top Header Area CSS -=================================================*/ -.header-area { - &.p-absolute { - position: absolute; - left: 0; - right: 0; - top: 0; - height: auto; - z-index: 3; - - .navbar-area { - background-color: transparent; - } - } -} -.top-header-area { - background-color: var(--startupMainColor); - padding: { - top: 12px; - bottom: 12px; - }; - .container-fluid { - max-width: 1400px; - } - &.business-color { - background: var(--businessGradientColor); - } - &.saas-color { - background: var(--saasGradientColor); - } - &.top-header-style-two { - .container-fluid { - max-width: 1470px; - } - } - &.top-header-style-three { - .container-fluid { - max-width: 1450px; - } - } - &.it-agency-color { - background: var(--itAgencyGradientColor); - } - &.bg-f3f4f7 { - background: #f3f4f7; - - .top-header-social-links { - li { - a { - color: var(--blackColor); - - &:hover { - color: var(--startupMainColor); - } - } - } - } - .top-header-contact-info { - color: var(--blackColor); - - .number { - color: var(--blackColor); - } - .email { - color: var(--blackColor); - } - .lang-switcher { - label { - color: var(--startupMainColor); - } - select { - color: var(--blackColor); - - option { - color: var(--blackColor); - } - } - } - } - &.consulting-color { - .top-header-social-links { - li { - a { - &:hover { - color: var(--consultingMainColor); - } - } - } - } - .top-header-contact-info { - .lang-switcher { - label { - color: var(--consultingMainColor); - } - } - } - .top-header-info { - .number { - i { - color: var(--consultingMainColor); - } - } - .email { - i { - color: var(--consultingMainColor); - } - } - } - } - } - &.shop-color { - background: var(--shopMainColor); - } -} -.top-header-info { - .number { - display: inline-block; - position: relative; - padding-left: 25px; - - i { - position: absolute; - left: 0; - top: 4px; - color: var(--startupMainColor); - } - } - .email { - display: inline-block; - position: relative; - padding-left: 25px; - margin-right: 20px; - - i { - position: absolute; - left: 0; - top: 4px; - color: var(--startupMainColor); - } - } -} -.top-header-social-links { - padding-left: 0; - margin-bottom: 0; - list-style-type: none; - - li { - display: inline-block; - margin-right: 15px; - - a { - display: block; - color: var(--whiteColor); - - &:hover { - opacity: 0.8; - } - } - &:last-child { - margin-right: 0; - } - } -} -.top-header-contact-info { - color: var(--whiteColor); - - .number { - display: inline-block; - color: var(--whiteColor); - position: relative; - padding-left: 25px; - - i { - position: absolute; - left: 0; - top: 4px; - } - } - .email { - display: inline-block; - color: var(--whiteColor); - position: relative; - padding-left: 25px; - margin-right: 20px; - - i { - position: absolute; - left: 0; - top: 4px; - } - } - .lang-switcher { - display: inline-block; - position: relative; - margin-left: 20px; - padding-left: 20px; - - label { - display: block; - margin-bottom: 0; - position: absolute; - left: 0; - top: 1px; - } - select { - cursor: pointer; - background-color: transparent; - color: var(--whiteColor); - border: none; - - option { - color: var(--blackColor); - } - } - } -} - -/*================================================ -Navbar Area CSS -=================================================*/ -.navbar-area { - padding: 5px 0; - position: relative; - background-color: var(--whiteColor); - - &.p-absolute { - position: absolute; - left: 0; - right: 0; - top: 0; - height: auto; - z-index: 9; - } - &.is-sticky { - top: 0; - left: 0; - width: 100%; - z-index: 999; - position: fixed; - background-color: var(--whiteColor) !important; - box-shadow: 0 2px 28px 0 rgba(0, 0, 0, 0.09); - animation: 500ms ease-in-out 0s normal none 1 running fadeInDown; - - &.bg-dark { - background-color: #06080e !important; - box-shadow: 0 2px 28px 0 rgba(255, 255, 255, .05); - } - } - &.bg-f9faff { - background-color: #f9faff; - } - &.navbar-style-two { - .noke-nav { - .container-fluid { - max-width: 1400px; - } - } - } - &.navbar-style-three { - .noke-nav { - .container-fluid { - max-width: 1450px; - } - } - } - &.navbar-style-four { - .noke-nav { - .container-fluid { - max-width: 1470px; - } - } - } - &.navbar-style-five { - padding: { - top: 0; - bottom: 0; - }; - .noke-nav { - .container-fluid { - max-width: 1450px; - } - .navbar { - background-color: var(--whiteColor); - padding: { - left: 25px; - right: 25px; - }; - } - } - } - &.bg-dark { - color: var(--whiteColor); - - .noke-nav { - .navbar { - .navbar-nav { - .nav-item { - a { - color: var(--whiteColor); - - &:hover, &:focus, &.active { - color: var(--startupMainColor); - } - } - &:hover, &.active { - a { - color: var(--startupMainColor); - } - } - .dropdown-menu { - li { - a { - color: var(--blackColor); - - &:hover, &:focus, &.active { - color: var(--startupMainColor); - } - } - .dropdown-menu { - li { - a { - color: var(--blackColor); - - &:hover, &:focus, &.active { - color: var(--startupMainColor); - } - } - .dropdown-menu { - li { - a { - color: var(--blackColor); - - &:hover, &:focus, &.active { - color: var(--startupMainColor); - } - } - .dropdown-menu { - li { - a { - color: var(--blackColor); - - &:hover, &:focus, &.active { - color: var(--startupMainColor); - } - } - &.active { - a { - color: var(--startupMainColor); - } - } - } - } - &.active { - a { - color: var(--startupMainColor); - } - } - } - } - &.active { - a { - color: var(--startupMainColor); - } - } - } - } - &.active { - a { - color: var(--startupMainColor); - } - } - } - } - &.megamenu { - .dropdown-menu { - .submenu-title { - &::before { - background-color: var(--startupMainColor); - } - } - .megamenu-submenu { - li { - a { - &:hover, &.active { - color: var(--startupMainColor); - } - } - } - } - } - } - } - } - .others-option { - .option-item { - .search-icon { - color: var(--startupMainColor); - - &:hover { - color: var(--startupMainColor); - } - } - .social-links { - li { - a { - color: var(--whiteColor); - - &:hover { - color: var(--startupMainColor); - } - } - } - } - } - .search-box { - .input-search { - color: var(--whiteColor); - - &::placeholder { - color: var(--whiteColor); - } - &:focus { - &::placeholder { - color: transparent; - } - } - } - button { - color: var(--whiteColor); - - &:hover { - color: var(--startupMainColor); - } - } - } - .lang-switcher { - color: var(--whiteColor); - - select { - color: var(--whiteColor); - - option { - color: var(--blackColor); - } - } - } - } - } - } - .others-option-for-responsive { - .dot-menu { - .inner { - .circle { - background-color: var(--whiteColor); - } - } - &:hover { - .inner { - .circle { - background-color: var(--startupMainColor); - } - } - } - } - } - } - &.color-white { - &.is-sticky { - background-color: #06080e !important; - box-shadow: 0 2px 28px 0 rgba(255, 255, 255, .05); - } - } -} -.noke-responsive-nav { - display: none; -} -.noke-nav { - .container-fluid { - max-width: 1400px; - } - .navbar { - padding: 0; - position: inherit; - - .navbar-brand { - font-size: inherit; - line-height: 1; - padding: 0; - } - ul { - padding-left: 0; - list-style-type: none; - margin-bottom: 0; - } - .navbar-nav { - margin-left: auto; - position: relative; - - .nav-item { - position: relative; - margin: { - left: 15px; - right: 15px; - }; - a { - position: relative; - color: var(--blackColor); - transition: var(--transition); - font: { - weight: 700; - size: var(--fontSize); - }; - padding: { - left: 0; - right: 0; - top: 30px; - bottom: 30px; - }; - &:hover, &:focus, &.active { - color: var(--startupMainColor); - } - } - .dropdown-toggle { - padding-right: 14px; - - &::after { - display: none; - } - &::before { - -webkit-font-smoothing: antialiased; - text-rendering: auto; - position: absolute; - content: "\f078"; - line-height: 1; - top: 37px; - right: 0; - font: { - family: "Font Awesome 5 Free"; - variant-ligatures: normal; - variant-caps: normal; - style: normal; - weight: 900; - size: 10px; - }; - } - } - &:last-child { - margin-right: 0; - } - &:first-child { - margin-left: 0; - } - &:hover, &.active { - a { - color: var(--startupMainColor); - } - } - .dropdown-menu { - left: 0; - top: 80px; - opacity: 0; - z-index: 99; - border: none; - width: 250px; - margin-top: 0; - display: block; - padding: 10px 0; - border-radius: 0; - position: absolute; - visibility: hidden; - background: var(--whiteColor); - transition: all 0.2s ease-in-out; - box-shadow: 0px 0px 15px 0px rgba(0, 0, 0, 0.1); - - li { - margin: 0; - - a { - display: block; - padding: 9px 20px; - position: relative; - color: var(--blackColor); - font: { - size: 14.5px; - weight: 600; - }; - i { - top: 50%; - margin: 0; - right: 15px; - font-size: 11px; - position: absolute; - transform: translateY(-50%); - } - &:hover, &:focus { - color: var(--startupMainColor); - padding-left: 25px; - } - &.active { - color: var(--startupMainColor); - } - } - .dropdown-menu { - top: 0; - opacity: 0; - left: auto; - right: 250px; - margin-top: 0; - visibility: hidden; - transform: translateX(0); - - li { - a { - color: var(--blackColor); - padding-left: 20px; - - &:hover, &:focus { - color: var(--startupMainColor); - padding-left: 25px; - } - &.active { - color: var(--startupMainColor); - } - } - .dropdown-menu { - top: 0; - opacity: 0; - right: 250px; - visibility: hidden; - - li { - a { - color: var(--blackColor); - padding-left: 20px; - - &:hover, &:focus { - padding-left: 25px; - color: var(--startupMainColor); - } - &.active { - color: var(--startupMainColor); - } - } - .dropdown-menu { - top: 0; - opacity: 0; - right: 250px; - visibility: hidden; - - li { - a { - padding-left: 20px; - color: var(--blackColor); - - &:hover, &:focus { - color: var(--startupMainColor); - padding-left: 25px; - } - &.active { - color: var(--startupMainColor); - } - } - &.active { - a { - color: var(--startupMainColor); - } - } - &:hover { - .dropdown-menu { - opacity: 1; - visibility: visible; - } - } - } - } - &.active { - a { - color: var(--startupMainColor); - } - } - &:hover { - .dropdown-menu { - opacity: 1; - visibility: visible; - } - } - } - } - &.active { - a { - color: var(--startupMainColor); - } - } - &:hover { - .dropdown-menu { - opacity: 1; - visibility: visible; - } - } - } - } - &.active { - a { - color: var(--startupMainColor); - } - } - &:hover { - .dropdown-menu { - opacity: 1; - margin-top: 0; - visibility: visible; - } - } - } - } - &:hover { - .dropdown-menu { - opacity: 1; - visibility: visible; - } - } - &.megamenu { - position: unset; - - .dropdown-menu { - left: 0; - top: auto; - width: 100%; - padding: 25px; - margin-top: 0; - position: absolute; - transform: unset !important; - - .submenu-title { - position: relative; - border-bottom: 1px solid #eeeeee; - padding-bottom: 8px; - text-transform: uppercase; - margin: { - bottom: 25px; - top: 30px; - }; - font: { - size: var(--fontSize); - weight: 600; - }; - &::before { - width: 50px; - height: 1px; - content: ''; - position: absolute; - left: 0; - bottom: -1px; - background-color: var(--startupMainColor); - } - &:first-child { - margin-top: 0; - } - } - a { - border-bottom: none !important; - } - .megamenu-submenu { - li { - a { - padding: 0; - margin-top: 18px; - color: var(--blackColor); - - .count { - float: right; - width: 20px; - height: 20px; - display: block; - font-size: 12px; - line-height: 20px; - text-align: center; - border-radius: 5px; - background-color: #f4f4f4; - transition: var(--transition); - } - &:hover, &.active { - color: var(--startupMainColor); - } - } - } - } - } - } - } - } - .others-option { - margin-left: 30px; - - .option-item { - position: relative; - margin-left: 15px; - top: 1px; - - &:first-child { - margin-left: 0; - } - .search-icon { - line-height: 1; - font-size: 18px; - cursor: pointer; - display: inline-block; - color: var(--blackColor); - transition: var(--transition); - border: { - left: 1px solid rgba(0, 0, 0, 0.20); - right: 1px solid rgba(0, 0, 0, 0.20); - }; - padding: { - left: 15px; - right: 15px; - }; - &:hover { - color: var(--startupMainColor); - } - } - .social-links { - position: relative; - top: -1px; - - span { - display: inline-block; - margin-left: 15px; - line-height: 1; - - a { - font-size: 17px; - display: block; - - &:hover { - color: var(--startupMainColor); - } - } - &:first-child { - margin-left: 0; - } - } - } - .link-btn { - display: inline-block; - font-size: 18px; - line-height: 1; - } - .icon-btn { - position: relative; - font-size: 18px; - line-height: 1; - padding-right: 10px; - margin-left: 5px; - - span { - display: inline-block; - position: absolute; - right: 0; - top: -5px; - width: 16px; - height: 16px; - border-radius: 50%; - background-color: red; - text-align: center; - line-height: 17px; - color: var(--whiteColor); - font: { - weight: 700; - size: 9px; - }; - } - } - } - .search-box { - position: relative; - width: 200px; - - .input-search { - display: block; - width: 100%; - background-color: transparent; - border: none; - border-bottom: 1px solid #eeeeee; - height: auto; - padding-bottom: 8px; - font-size: 14px; - color: var(--blackColor); - transition: var(--transition); - - &::placeholder { - transition: var(--transition); - color: var(--optionalColor); - } - &:focus { - border-color: var(--startupMainColor); - - &::placeholder { - color: transparent; - } - } - } - button { - position: absolute; - right: 0; - top: 0; - background-color: transparent; - border: none; - color: var(--optionalColor); - transition: var(--transition); - - &:hover { - color: var(--startupMainColor); - } - } - } - .lang-switcher { - position: relative; - padding-left: 34px; - position: relative; - top: -2px; - border-left: 1px solid rgba(0, 0, 0, 0.20); - - label { - display: block; - margin-bottom: 0; - position: absolute; - left: 15px; - top: 0; - } - select { - background-color: transparent; - cursor: pointer; - border: none; - margin-top: -3px; - } - } - } - } -} -.others-option-for-responsive { - display: none; - - .dot-menu { - top: -37px; - right: 60px; - height: 30px; - z-index: 999; - padding: 0 10px; - cursor: pointer; - position: absolute; - - .inner { - display: flex; - align-items: center; - height: 30px; - - .circle { - height: 5px; - width: 5px; - border-radius: 100%; - margin: 0 2px; - transition: var(--transition); - background-color: var(--blackColor); - } - } - &:hover { - .inner { - .circle { - background-color: var(--startupMainColor); - } - } - } - } - .container { - position: relative; - - .container { - right: 0; - top: 15px; - opacity: 0; - z-index: 2; - max-width: 300px; - margin-left: auto; - visibility: hidden; - position: absolute; - transform: scaleX(0); - transition: var(--transition); - padding: { - left: 15px; - right: 15px; - }; - &.active { - opacity: 1; - visibility: visible; - transform: scaleX(1); - } - } - } - .option-inner { - padding: 15px 20px; - box-shadow: 0 15px 40px rgba(0,0,0,.09); - background-color: var(--whiteColor); - text-align: center; - - .others-option { - .option-item { - position: relative; - margin-left: 20px; - display: inline-block; - - &:first-child { - margin-left: 0; - } - .search-icon { - line-height: 1; - font-size: 18px; - cursor: pointer; - display: inline-block; - color: var(--blackColor); - transition: var(--transition); - border-right: 1px solid rgba(0, 0, 0, 0.20); - padding-right: 20px; - - &:hover { - color: var(--startupMainColor); - } - } - .social-links { - position: relative; - top: -1px; - - span { - display: inline-block; - margin-left: 15px; - line-height: 1; - - a { - font-size: 17px; - display: block; - - &:hover { - color: var(--startupMainColor); - } - } - &:first-child { - margin-left: 0; - } - } - } - } - .search-box { - position: relative; - width: 100%; - - .input-search { - display: block; - width: 100%; - background-color: transparent; - border: none; - border-bottom: 1px solid #eeeeee; - height: auto; - padding-bottom: 8px; - font-size: 14px; - color: var(--blackColor); - transition: var(--transition); - - &::placeholder { - transition: var(--transition); - color: var(--optionalColor); - } - &:focus { - border-color: var(--startupMainColor); - - &::placeholder { - color: transparent; - } - } - } - button { - position: absolute; - right: 0; - top: 0; - background-color: transparent; - border: none; - color: var(--optionalColor); - transition: var(--transition); - - &:hover { - color: var(--startupMainColor); - } - } - } - .lang-switcher { - top: -2px; - position: relative; - padding-left: 25px; - position: relative; - margin-left: -10px; - border-left: 1px solid rgba(0, 0, 0, 0.20); - - label { - display: block; - margin-bottom: 0; - position: absolute; - left: 10px; - top: 0; - } - select { - background-color: transparent; - cursor: pointer; - border: none; - margin-top: -3px; - } - } - .link-btn { - display: inline-block; - font-size: 18px; - line-height: 1; - } - .icon-btn { - position: relative; - font-size: 18px; - line-height: 1; - padding-right: 10px; - margin-left: 5px; - - span { - display: inline-block; - position: absolute; - right: 0; - top: -5px; - width: 16px; - height: 16px; - border-radius: 50%; - background-color: red; - text-align: center; - line-height: 17px; - color: var(--whiteColor); - font: { - weight: 700; - size: 9px; - }; - } - } - } - } -} -.marketing-color { - .noke-nav { - .navbar { - .navbar-nav { - .nav-item { - a { - &:hover, &:focus, &.active { - color: var(--marketingMainColor); - } - } - &:hover, &.active { - a { - color: var(--marketingMainColor); - } - } - .dropdown-menu { - li { - a { - color: var(--blackColor); - - &:hover, &:focus, &.active { - color: var(--marketingMainColor); - } - } - .dropdown-menu { - li { - a { - color: var(--blackColor); - - &:hover, &:focus, &.active { - color: var(--marketingMainColor); - } - } - .dropdown-menu { - li { - a { - color: var(--blackColor); - - &:hover, &:focus, &.active { - color: var(--marketingMainColor); - } - } - .dropdown-menu { - li { - a { - color: var(--blackColor); - - &:hover, &:focus, &.active { - color: var(--marketingMainColor); - } - } - &.active { - a { - color: var(--marketingMainColor); - } - } - } - } - &.active { - a { - color: var(--marketingMainColor); - } - } - } - } - &.active { - a { - color: var(--marketingMainColor); - } - } - } - } - &.active { - a { - color: var(--marketingMainColor); - } - } - } - } - &.megamenu { - .dropdown-menu { - .submenu-title { - &::before { - background-color: var(--marketingMainColor); - } - } - .megamenu-submenu { - li { - a { - &:hover, &.active { - color: var(--marketingMainColor); - } - } - } - } - } - } - } - } - .others-option { - .option-item { - .search-icon { - &:hover { - color: var(--marketingMainColor); - } - } - .social-links { - span { - a { - &:hover { - color: var(--marketingMainColor); - } - } - } - } - } - .search-box { - .input-search { - &:focus { - border-color: var(--marketingMainColor); - } - } - button { - &:hover { - color: var(--marketingMainColor); - } - } - } - } - } - } - .others-option-for-responsive { - .dot-menu { - &:hover { - .inner { - .circle { - background-color: var(--marketingMainColor); - } - } - } - } - .option-inner { - .others-option { - .option-item { - .search-icon { - &:hover { - color: var(--marketingMainColor); - } - } - .social-links { - span { - a { - &:hover { - color: var(--marketingMainColor); - } - } - } - } - } - .search-box { - .input-search { - &:focus { - border-color: var(--marketingMainColor); - } - } - button { - &:hover { - color: var(--marketingMainColor); - } - } - } - } - } - } -} -.business-color { - .noke-nav { - .navbar { - .navbar-nav { - .nav-item { - a { - &:hover, &:focus, &.active { - color: var(--businessMainColor); - } - } - &:hover, &.active { - a { - color: var(--businessMainColor); - } - } - .dropdown-menu { - li { - a { - color: var(--blackColor); - - &:hover, &:focus, &.active { - color: var(--businessMainColor); - } - } - .dropdown-menu { - li { - a { - color: var(--blackColor); - - &:hover, &:focus, &.active { - color: var(--businessMainColor); - } - } - .dropdown-menu { - li { - a { - color: var(--blackColor); - - &:hover, &:focus, &.active { - color: var(--businessMainColor); - } - } - .dropdown-menu { - li { - a { - color: var(--blackColor); - - &:hover, &:focus, &.active { - color: var(--businessMainColor); - } - } - &.active { - a { - color: var(--businessMainColor); - } - } - } - } - &.active { - a { - color: var(--businessMainColor); - } - } - } - } - &.active { - a { - color: var(--businessMainColor); - } - } - } - } - &.active { - a { - color: var(--businessMainColor); - } - } - } - } - &.megamenu { - .dropdown-menu { - .submenu-title { - &::before { - background-color: var(--businessMainColor); - } - } - .megamenu-submenu { - li { - a { - &:hover, &.active { - color: var(--businessMainColor); - } - } - } - } - } - } - } - } - .others-option { - .option-item { - .search-icon { - &:hover { - color: var(--businessMainColor); - } - } - .social-links { - span { - a { - &:hover { - color: var(--businessMainColor); - } - } - } - } - } - .search-box { - .input-search { - &:focus { - border-color: var(--businessMainColor); - } - } - button { - &:hover { - color: var(--businessMainColor); - } - } - } - } - } - } - .others-option-for-responsive { - .dot-menu { - &:hover { - .inner { - .circle { - background-color: var(--businessMainColor); - } - } - } - } - .option-inner { - .others-option { - .option-item { - .search-icon { - &:hover { - color: var(--businessMainColor); - } - } - .social-links { - span { - a { - &:hover { - color: var(--businessMainColor); - } - } - } - } - } - .search-box { - .input-search { - &:focus { - border-color: var(--businessMainColor); - } - } - button { - &:hover { - color: var(--businessMainColor); - } - } - } - } - } - } -} -.app-color { - .noke-nav { - .navbar { - .navbar-nav { - .nav-item { - a { - &:hover, &:focus, &.active { - color: var(--appMainColor); - } - } - &:hover, &.active { - a { - color: var(--appMainColor); - } - } - .dropdown-menu { - li { - a { - color: var(--blackColor); - - &:hover, &:focus, &.active { - color: var(--appMainColor); - } - } - .dropdown-menu { - li { - a { - color: var(--blackColor); - - &:hover, &:focus, &.active { - color: var(--appMainColor); - } - } - .dropdown-menu { - li { - a { - color: var(--blackColor); - - &:hover, &:focus, &.active { - color: var(--appMainColor); - } - } - .dropdown-menu { - li { - a { - color: var(--blackColor); - - &:hover, &:focus, &.active { - color: var(--appMainColor); - } - } - &.active { - a { - color: var(--appMainColor); - } - } - } - } - &.active { - a { - color: var(--appMainColor); - } - } - } - } - &.active { - a { - color: var(--appMainColor); - } - } - } - } - &.active { - a { - color: var(--appMainColor); - } - } - } - } - &.megamenu { - .dropdown-menu { - .submenu-title { - &::before { - background-color: var(--appMainColor); - } - } - .megamenu-submenu { - li { - a { - &:hover, &.active { - color: var(--appMainColor); - } - } - } - } - } - } - } - } - .others-option { - .option-item { - .search-icon { - &:hover { - color: var(--appMainColor); - } - } - .social-links { - span { - a { - &:hover { - color: var(--appMainColor); - } - } - } - } - } - .search-box { - .input-search { - &:focus { - border-color: var(--appMainColor); - } - } - button { - &:hover { - color: var(--appMainColor); - } - } - } - } - } - } - .others-option-for-responsive { - .dot-menu { - &:hover { - .inner { - .circle { - background-color: var(--appMainColor); - } - } - } - } - .option-inner { - .others-option { - .option-item { - .search-icon { - &:hover { - color: var(--appMainColor); - } - } - .social-links { - span { - a { - &:hover { - color: var(--appMainColor); - } - } - } - } - } - .search-box { - .input-search { - &:focus { - border-color: var(--appMainColor); - } - } - button { - &:hover { - color: var(--appMainColor); - } - } - } - } - } - } -} -.personal-portfolio-color { - .noke-nav { - .navbar { - .navbar-nav { - .nav-item { - a { - &:hover, &:focus, &.active { - color: var(--personalPortfolioMainColor); - } - } - &:hover, &.active { - a { - color: var(--personalPortfolioMainColor); - } - } - .dropdown-menu { - li { - a { - color: var(--blackColor); - - &:hover, &:focus, &.active { - color: var(--personalPortfolioMainColor); - } - } - .dropdown-menu { - li { - a { - color: var(--blackColor); - - &:hover, &:focus, &.active { - color: var(--personalPortfolioMainColor); - } - } - .dropdown-menu { - li { - a { - color: var(--blackColor); - - &:hover, &:focus, &.active { - color: var(--personalPortfolioMainColor); - } - } - .dropdown-menu { - li { - a { - color: var(--blackColor); - - &:hover, &:focus, &.active { - color: var(--personalPortfolioMainColor); - } - } - &.active { - a { - color: var(--personalPortfolioMainColor); - } - } - } - } - &.active { - a { - color: var(--personalPortfolioMainColor); - } - } - } - } - &.active { - a { - color: var(--personalPortfolioMainColor); - } - } - } - } - &.active { - a { - color: var(--personalPortfolioMainColor); - } - } - } - } - &.megamenu { - .dropdown-menu { - .submenu-title { - &::before { - background-color: var(--personalPortfolioMainColor); - } - } - .megamenu-submenu { - li { - a { - &:hover, &.active { - color: var(--personalPortfolioMainColor); - } - } - } - } - } - } - } - } - .others-option { - .option-item { - .search-icon { - &:hover { - color: var(--personalPortfolioMainColor); - } - } - .social-links { - span { - a { - &:hover { - color: var(--personalPortfolioMainColor); - } - } - } - } - } - .search-box { - .input-search { - &:focus { - border-color: var(--personalPortfolioMainColor); - } - } - button { - &:hover { - color: var(--personalPortfolioMainColor); - } - } - } - } - } - } - .others-option-for-responsive { - .dot-menu { - &:hover { - .inner { - .circle { - background-color: var(--personalPortfolioMainColor); - } - } - } - } - .option-inner { - .others-option { - .option-item { - .search-icon { - &:hover { - color: var(--personalPortfolioMainColor); - } - } - .social-links { - span { - a { - &:hover { - color: var(--personalPortfolioMainColor); - } - } - } - } - } - .search-box { - .input-search { - &:focus { - border-color: var(--personalPortfolioMainColor); - } - } - button { - &:hover { - color: var(--personalPortfolioMainColor); - } - } - } - } - } - } -} -.saas-color { - &.bg-dark { - .noke-nav { - .navbar { - .navbar-nav { - .nav-item { - a { - &:hover, &:focus, &.active { - color: var(--saasMainColor); - } - } - &:hover, &.active { - a { - color: var(--saasMainColor); - } - } - .dropdown-menu { - li { - a { - color: var(--blackColor); - - &:hover, &:focus, &.active { - color: var(--saasMainColor); - } - } - .dropdown-menu { - li { - a { - color: var(--blackColor); - - &:hover, &:focus, &.active { - color: var(--saasMainColor); - } - } - .dropdown-menu { - li { - a { - color: var(--blackColor); - - &:hover, &:focus, &.active { - color: var(--saasMainColor); - } - } - .dropdown-menu { - li { - a { - color: var(--blackColor); - - &:hover, &:focus, &.active { - color: var(--saasMainColor); - } - } - &.active { - a { - color: var(--saasMainColor); - } - } - } - } - &.active { - a { - color: var(--saasMainColor); - } - } - } - } - &.active { - a { - color: var(--saasMainColor); - } - } - } - } - &.active { - a { - color: var(--saasMainColor); - } - } - } - } - &.megamenu { - .dropdown-menu { - .submenu-title { - &::before { - background-color: var(--saasMainColor); - } - } - .megamenu-submenu { - li { - a { - &:hover, &.active { - color: var(--saasMainColor); - } - } - } - } - } - } - } - } - .others-option { - .option-item { - .search-icon { - &:hover { - color: var(--saasMainColor); - } - } - .social-links { - span { - a { - &:hover { - color: var(--saasMainColor); - } - } - } - } - } - .search-box { - .input-search { - &:focus { - border-color: var(--saasMainColor); - } - } - button { - &:hover { - color: var(--saasMainColor); - } - } - } - } - } - } - .others-option-for-responsive { - .dot-menu { - &:hover { - .inner { - .circle { - background-color: var(--saasMainColor); - } - } - } - } - .option-inner { - .others-option { - .option-item { - .search-icon { - &:hover { - color: var(--saasMainColor); - } - } - .social-links { - li { - a { - &:hover { - color: var(--saasMainColor); - } - } - } - } - } - .search-box { - .input-search { - &:focus { - border-color: var(--saasMainColor); - } - } - button { - &:hover { - color: var(--saasMainColor); - } - } - } - } - } - } - } -} -.color-white { - .noke-nav { - .navbar { - .navbar-nav { - .nav-item { - a { - color: var(--whiteColor); - - &:hover, &:focus, &.active { - color: var(--startupMainColor); - } - } - &:hover, &.active { - a { - color: var(--startupMainColor); - } - } - .dropdown-menu { - li { - a { - color: var(--blackColor); - - &:hover, &:focus, &.active { - color: var(--startupMainColor); - } - } - .dropdown-menu { - li { - a { - color: var(--blackColor); - - &:hover, &:focus, &.active { - color: var(--startupMainColor); - } - } - .dropdown-menu { - li { - a { - color: var(--blackColor); - - &:hover, &:focus, &.active { - color: var(--startupMainColor); - } - } - .dropdown-menu { - li { - a { - color: var(--blackColor); - - &:hover, &:focus, &.active { - color: var(--startupMainColor); - } - } - &.active { - a { - color: var(--startupMainColor); - } - } - } - } - &.active { - a { - color: var(--startupMainColor); - } - } - } - } - &.active { - a { - color: var(--startupMainColor); - } - } - } - } - &.active { - a { - color: var(--startupMainColor); - } - } - } - } - &.megamenu { - .dropdown-menu { - .submenu-title { - &::before { - background-color: var(--startupMainColor); - } - } - .megamenu-submenu { - li { - a { - &:hover, &.active { - color: var(--startupMainColor); - } - } - } - } - } - } - } - } - .others-option { - .option-item { - .search-icon { - color: var(--whiteColor); - - &:hover { - color: var(--startupMainColor); - } - } - .social-links { - li { - a { - color: var(--whiteColor); - - &:hover { - color: var(--startupMainColor); - } - } - } - } - } - .search-box { - .input-search { - color: var(--whiteColor); - - &::placeholder { - color: var(--whiteColor); - } - &:focus { - &::placeholder { - color: transparent; - } - } - } - button { - color: var(--whiteColor); - - &:hover { - color: var(--startupMainColor); - } - } - } - .lang-switcher { - color: var(--whiteColor); - - select { - color: var(--whiteColor); - - option { - color: var(--blackColor); - } - } - } - } - } - } - .others-option-for-responsive { - .dot-menu { - .inner { - .circle { - background-color: var(--whiteColor); - } - } - &:hover { - .inner { - .circle { - background-color: var(--startupMainColor); - } - } - } - } - } -} -.it-agency-color { - &.color-white { - .noke-nav { - .navbar { - .navbar-nav { - .nav-item { - a { - color: var(--whiteColor); - - &:hover, &:focus, &.active { - color: var(--itAgencyMainColor); - } - } - &:hover, &.active { - a { - color: var(--itAgencyMainColor); - } - } - .dropdown-menu { - li { - a { - color: var(--blackColor); - - &:hover, &:focus, &.active { - color: var(--itAgencyMainColor); - } - } - .dropdown-menu { - li { - a { - color: var(--blackColor); - - &:hover, &:focus, &.active { - color: var(--itAgencyMainColor); - } - } - .dropdown-menu { - li { - a { - color: var(--blackColor); - - &:hover, &:focus, &.active { - color: var(--itAgencyMainColor); - } - } - .dropdown-menu { - li { - a { - color: var(--blackColor); - - &:hover, &:focus, &.active { - color: var(--itAgencyMainColor); - } - } - &.active { - a { - color: var(--itAgencyMainColor); - } - } - } - } - &.active { - a { - color: var(--itAgencyMainColor); - } - } - } - } - &.active { - a { - color: var(--itAgencyMainColor); - } - } - } - } - &.active { - a { - color: var(--itAgencyMainColor); - } - } - } - } - &.megamenu { - .dropdown-menu { - .submenu-title { - &::before { - background-color: var(--itAgencyMainColor); - } - } - .megamenu-submenu { - li { - a { - &:hover, &.active { - color: var(--itAgencyMainColor); - } - } - } - } - } - } - } - } - .others-option { - .option-item { - .search-icon { - color: var(--itAgencyMainColor); - - &:hover { - color: var(--itAgencyMainColor); - } - } - .social-links { - li { - a { - &:hover { - color: var(--itAgencyMainColor); - } - } - } - } - } - .search-box { - button { - &:hover { - color: var(--itAgencyMainColor); - } - } - } - } - } - } - .others-option-for-responsive { - .dot-menu { - &:hover { - .inner { - .circle { - background-color: var(--itAgencyMainColor); - } - } - } - } - .option-inner { - .others-option { - .option-item { - .search-icon { - &:hover { - color: var(--itAgencyMainColor); - } - } - .social-links { - span { - a { - &:hover { - color: var(--itAgencyMainColor); - } - } - } - } - } - .search-box { - .input-search { - &:focus { - border-color: var(--itAgencyMainColor); - } - } - button { - &:hover { - color: var(--itAgencyMainColor); - } - } - } - } - } - } - } -} -.consulting-color { - .noke-nav { - .navbar { - .navbar-nav { - .nav-item { - a { - &:hover, &:focus, &.active { - color: var(--consultingMainColor); - } - } - &:hover, &.active { - a { - color: var(--consultingMainColor); - } - } - .dropdown-menu { - li { - a { - color: var(--blackColor); - - &:hover, &:focus, &.active { - color: var(--consultingMainColor); - } - } - .dropdown-menu { - li { - a { - color: var(--blackColor); - - &:hover, &:focus, &.active { - color: var(--consultingMainColor); - } - } - .dropdown-menu { - li { - a { - color: var(--blackColor); - - &:hover, &:focus, &.active { - color: var(--consultingMainColor); - } - } - .dropdown-menu { - li { - a { - color: var(--blackColor); - - &:hover, &:focus, &.active { - color: var(--consultingMainColor); - } - } - &.active { - a { - color: var(--consultingMainColor); - } - } - } - } - &.active { - a { - color: var(--consultingMainColor); - } - } - } - } - &.active { - a { - color: var(--consultingMainColor); - } - } - } - } - &.active { - a { - color: var(--consultingMainColor); - } - } - } - } - &.megamenu { - .dropdown-menu { - .submenu-title { - &::before { - background-color: var(--consultingMainColor); - } - } - .megamenu-submenu { - li { - a { - &:hover, &.active { - color: var(--consultingMainColor); - } - } - } - } - } - } - } - } - .others-option { - .option-item { - .search-icon { - &:hover { - color: var(--consultingMainColor); - } - } - .social-links { - span { - a { - &:hover { - color: var(--consultingMainColor); - } - } - } - } - } - .search-box { - .input-search { - &:focus { - border-color: var(--consultingMainColor); - } - } - button { - &:hover { - color: var(--consultingMainColor); - } - } - } - } - } - } - .others-option-for-responsive { - .dot-menu { - &:hover { - .inner { - .circle { - background-color: var(--consultingMainColor); - } - } - } - } - .option-inner { - .others-option { - .option-item { - .search-icon { - &:hover { - color: var(--consultingMainColor); - } - } - .social-links { - span { - a { - &:hover { - color: var(--consultingMainColor); - } - } - } - } - } - .search-box { - .input-search { - &:focus { - border-color: var(--consultingMainColor); - } - } - button { - &:hover { - color: var(--consultingMainColor); - } - } - } - } - } - } -} -.shop-color { - .noke-nav { - .navbar { - .navbar-nav { - .nav-item { - a { - &:hover, &:focus, &.active { - color: var(--shopMainColor); - } - } - &:hover, &.active { - a { - color: var(--shopMainColor); - } - } - .dropdown-menu { - li { - a { - color: var(--blackColor); - - &:hover, &:focus, &.active { - color: var(--shopMainColor); - } - } - .dropdown-menu { - li { - a { - color: var(--blackColor); - - &:hover, &:focus, &.active { - color: var(--shopMainColor); - } - } - .dropdown-menu { - li { - a { - color: var(--blackColor); - - &:hover, &:focus, &.active { - color: var(--shopMainColor); - } - } - .dropdown-menu { - li { - a { - color: var(--blackColor); - - &:hover, &:focus, &.active { - color: var(--shopMainColor); - } - } - &.active { - a { - color: var(--shopMainColor); - } - } - } - } - &.active { - a { - color: var(--shopMainColor); - } - } - } - } - &.active { - a { - color: var(--shopMainColor); - } - } - } - } - &.active { - a { - color: var(--shopMainColor); - } - } - } - } - &.megamenu { - .dropdown-menu { - .submenu-title { - &::before { - background-color: var(--shopMainColor); - } - } - .megamenu-submenu { - li { - a { - &:hover, &.active { - color: var(--shopMainColor); - } - } - } - } - } - } - } - } - .others-option { - .option-item { - .search-icon { - &:hover { - color: var(--shopMainColor); - } - } - .social-links { - span { - a { - &:hover { - color: var(--shopMainColor); - } - } - } - } - } - .search-box { - .input-search { - &:focus { - border-color: var(--shopMainColor); - } - } - button { - &:hover { - color: var(--shopMainColor); - } - } - } - } - } - } - .others-option-for-responsive { - .dot-menu { - &:hover { - .inner { - .circle { - background-color: var(--shopMainColor); - } - } - } - } - .option-inner { - .others-option { - .option-item { - .search-icon { - &:hover { - color: var(--shopMainColor); - } - } - .social-links { - span { - a { - &:hover { - color: var(--shopMainColor); - } - } - } - } - } - .search-box { - .input-search { - &:focus { - border-color: var(--shopMainColor); - } - } - button { - &:hover { - color: var(--shopMainColor); - } - } - } - } - } - } -} -.blog-color { - .noke-nav { - .navbar { - .navbar-nav { - .nav-item { - a { - &:hover, &:focus, &.active { - color: var(--blackColor); - } - } - &:hover, &.active { - a { - color: var(--blackColor); - } - } - .dropdown-menu { - li { - a { - color: var(--blackColor); - - &:hover, &:focus, &.active { - color: var(--blackColor); - } - } - .dropdown-menu { - li { - a { - color: var(--blackColor); - - &:hover, &:focus, &.active { - color: var(--blackColor); - } - } - .dropdown-menu { - li { - a { - color: var(--blackColor); - - &:hover, &:focus, &.active { - color: var(--blackColor); - } - } - .dropdown-menu { - li { - a { - color: var(--blackColor); - - &:hover, &:focus, &.active { - color: var(--blackColor); - } - } - &.active { - a { - color: var(--blackColor); - } - } - } - } - &.active { - a { - color: var(--blackColor); - } - } - } - } - &.active { - a { - color: var(--blackColor); - } - } - } - } - &.active { - a { - color: var(--blackColor); - } - } - } - } - &.megamenu { - .dropdown-menu { - .submenu-title { - &::before { - background-color: var(--blackColor); - } - } - .megamenu-submenu { - li { - a { - &:hover, &.active { - color: var(--blackColor); - } - } - } - } - } - } - } - } - .others-option { - .option-item { - .search-icon { - &:hover { - color: var(--blackColor); - } - } - .social-links { - span { - a { - &:hover { - color: var(--blackColor); - } - } - } - } - } - .search-box { - .input-search { - &:focus { - border-color: var(--blackColor); - } - } - button { - &:hover { - color: var(--blackColor); - } - } - } - } - } - } - .others-option-for-responsive { - .dot-menu { - &:hover { - .inner { - .circle { - background-color: var(--blackColor); - } - } - } - } - .option-inner { - .others-option { - .option-item { - .search-icon { - &:hover { - color: var(--blackColor); - } - } - .social-links { - span { - a { - &:hover { - color: var(--blackColor); - } - } - } - } - } - .search-box { - .input-search { - &:focus { - border-color: var(--blackColor); - } - } - button { - &:hover { - color: var(--blackColor); - } - } - } - } - } - } -} -.minimal-portfolio-color { - .noke-nav { - .navbar { - .navbar-nav { - .nav-item { - a { - &:hover, &:focus, &.active { - color: var(--minimalPortfolioColor); - } - } - &:hover, &.active { - a { - color: var(--minimalPortfolioColor); - } - } - .dropdown-menu { - li { - a { - color: var(--blackColor); - - &:hover, &:focus, &.active { - color: var(--minimalPortfolioColor); - } - } - .dropdown-menu { - li { - a { - color: var(--blackColor); - - &:hover, &:focus, &.active { - color: var(--minimalPortfolioColor); - } - } - .dropdown-menu { - li { - a { - color: var(--blackColor); - - &:hover, &:focus, &.active { - color: var(--minimalPortfolioColor); - } - } - .dropdown-menu { - li { - a { - color: var(--blackColor); - - &:hover, &:focus, &.active { - color: var(--minimalPortfolioColor); - } - } - &.active { - a { - color: var(--minimalPortfolioColor); - } - } - } - } - &.active { - a { - color: var(--minimalPortfolioColor); - } - } - } - } - &.active { - a { - color: var(--minimalPortfolioColor); - } - } - } - } - &.active { - a { - color: var(--minimalPortfolioColor); - } - } - } - } - &.megamenu { - .dropdown-menu { - .submenu-title { - &::before { - background-color: var(--minimalPortfolioColor); - } - } - .megamenu-submenu { - li { - a { - &:hover, &.active { - color: var(--minimalPortfolioColor); - } - } - } - } - } - } - } - } - .others-option { - .option-item { - .search-icon { - &:hover { - color: var(--minimalPortfolioColor); - } - } - .social-links { - span { - a { - &:hover { - color: var(--minimalPortfolioColor); - } - } - } - } - } - .search-box { - .input-search { - &:focus { - border-color: var(--minimalPortfolioColor); - } - } - button { - &:hover { - color: var(--minimalPortfolioColor); - } - } - } - } - } - } - .others-option-for-responsive { - .dot-menu { - &:hover { - .inner { - .circle { - background-color: var(--minimalPortfolioColor); - } - } - } - } - .option-inner { - .others-option { - .option-item { - .search-icon { - &:hover { - color: var(--minimalPortfolioColor); - } - } - .social-links { - span { - a { - &:hover { - color: var(--minimalPortfolioColor); - } - } - } - } - } - .search-box { - .input-search { - &:focus { - border-color: var(--minimalPortfolioColor); - } - } - button { - &:hover { - color: var(--minimalPortfolioColor); - } - } - } - } - } - } -} -// Mobile and iPad Navbar -@media only screen and (max-width: 1199px) { - - .header-area { - &.p-absolute { - .navbar-area { - &.navbar-style-five { - border-bottom: none; - background-color: var(--whiteColor); - } - } - } - } - .navbar-area { - padding: { - top: 15px; - bottom: 15px; - }; - &.is-sticky { - padding: { - top: 15px; - bottom: 15px; - }; - } - &.bg-dark { - border-bottom: 1px solid rgba(255, 255, 255, .07); - - .noke-responsive-nav { - .mean-container { - a { - &.meanmenu-reveal { - color: var(--whiteColor); - - span { - background: var(--whiteColor); - } - } - } - } - .others-option { - .search-box { - .input-search { - border-bottom: 1px solid #6e6a6a; - color: var(--whiteColor); - - &::placeholder { - color: var(--whiteColor); - } - &:focus { - border-color: var(--whiteColor); - } - } - button { - color: var(--whiteColor); - - &:hover { - color: var(--whiteColor); - } - } - } - } - } - } - &.color-white { - border-bottom: 1px solid rgba(255, 255, 255, .07); - - .noke-responsive-nav { - .mean-container { - a { - &.meanmenu-reveal { - color: var(--whiteColor); - - span { - background: var(--whiteColor); - } - } - } - } - .others-option { - .search-box { - .input-search { - border-bottom: 1px solid #6e6a6a; - color: var(--whiteColor); - - &::placeholder { - color: var(--whiteColor); - } - &:focus { - border-color: var(--whiteColor); - } - } - button { - color: var(--whiteColor); - - &:hover { - color: var(--whiteColor); - } - } - } - } - } - } - &.navbar-style-five { - border-bottom: 1px solid #eeeeee; - padding: { - top: 15px; - bottom: 15px; - }; - } - } - .noke-responsive-nav { - display: block; - - .noke-responsive-menu { - position: relative; - - &.mean-container { - .mean-nav { - margin-top: 63px; - background-color: var(--whiteColor); - - ul { - font-size: 14px; - border: none !important; - - li { - a { - color: var(--blackColor); - border-top-color: #DBEEFD; - text-transform: unset; - font-weight: 500; - - i { - display: none; - } - &.mean-expand { - width: 50%; - height: 28px; - text-align: end; - padding: 11px!important; - background: transparent !important; - border: { - left: none !important; - bottom: none !important; - }; - } - &.active { - color: var(--startupMainColor); - } - } - li { - a { - font-size: 14px; - } - } - } - } - } - .navbar-nav { - height: 301px; - overflow-y: scroll; - box-shadow: 0 7px 13px 0 rgba(0, 0, 0, .1); - } - } - } - .mean-container { - a { - &.meanmenu-reveal { - top: 0; - padding: 0; - width: 35px; - height: 30px; - padding-top: 13px; - color: var(--blackColor); - font-family: var(--fontFamily); - - span { - background: var(--blackColor); - height: 4px; - margin-top: -6px; - border-radius: 3px; - position: relative; - top: 8px; - } - } - } - .mean-bar { - background: transparent; - position: absolute; - z-index: 999; - padding: 0; - } - .navbar-nav { - .nav-item { - &.megamenu { - .dropdown-menu { - .nav-item { - width: 90%; - overflow: hidden; - padding: 1em 5% 5px; - - .row { - display: block; - flex-wrap: unset; - margin: { - left: 0; - right: 0; - top: -20px; - }; - .col { - flex-basis: unset; - flex-grow: unset; - max-width: 100%; - padding: { - left: 0; - right: 0; - top: 20px; - }; - &:last-child { - margin-bottom: 15px; - } - } - } - a { - width: 100%; - float: unset; - display: block; - - &.p-0 { - border: none !important; - margin-top: 15px; - } - } - } - .submenu-title { - position: relative; - padding-bottom: 8px; - color: var(--blackColor); - text-transform: uppercase; - border-bottom: 1px solid #eeeeee; - margin: { - bottom: 5px; - top: 25px; - left: 0; - right: 0; - }; - font: { - size: 12.5px; - weight: 600; - }; - &::before { - width: 30px; - height: 1px; - content: ''; - position: absolute; - left: 0; - bottom: -1px; - background-color: var(--startupMainColor); - } - &:first-child { - margin-top: 0; - } - } - a { - border-bottom: none !important; - } - .mean-expand { - display: none !important; - } - .megamenu-submenu { - width: auto; - overflow: hidden; - display: block !important; - padding: { - left: 0; - right: 0; - }; - li { - a { - padding: 0; - border: none; - margin-top: 15px; - font-weight: 500; - color: var(--blackColor); - - &:hover, &.active { - color: var(--startupMainColor); - } - } - } - } - } - } - } - } - } - .dropdown-toggle { - &::after { - display: none !important; - } - } - .others-option { - display: none !important; - position: absolute; - right: 60px; - top: 16px; - - .option-item { - position: relative; - margin-left: 20px; - display: inline-block; - - &:first-child { - margin-left: 0; - } - .search-icon { - line-height: 1; - font-size: 18px; - cursor: pointer; - display: inline-block; - color: var(--blackColor); - transition: var(--transition); - border-right: 1px solid rgba(0, 0, 0, 0.20); - padding-right: 20px; - - &:hover { - color: var(--startupMainColor); - } - } - .social-links { - position: relative; - top: -1px; - - span { - display: inline-block; - margin-left: 15px; - line-height: 1; - - a { - font-size: 17px; - display: block; - - &:hover { - color: var(--startupMainColor); - } - } - &:first-child { - margin-left: 0; - } - } - } - } - .search-box { - position: relative; - width: 250px; - top: -7px; - - .input-search { - display: block; - width: 100%; - background-color: transparent; - border: none; - border-bottom: 1px solid #eeeeee; - height: auto; - padding-bottom: 8px; - font-size: 14px; - color: var(--blackColor); - transition: var(--transition); - - &::placeholder { - transition: var(--transition); - color: var(--optionalColor); - } - &:focus { - border-color: var(--startupMainColor); - - &::placeholder { - color: transparent; - } - } - } - button { - position: absolute; - right: 0; - top: 0; - background-color: transparent; - border: none; - color: var(--optionalColor); - transition: var(--transition); - - &:hover { - color: var(--startupMainColor); - } - } - } - .lang-switcher { - top: -2px; - position: relative; - padding-left: 25px; - position: relative; - margin-left: -10px; - border-left: 1px solid rgba(0, 0, 0, 0.20); - - label { - display: block; - margin-bottom: 0; - position: absolute; - left: 10px; - top: 0; - } - select { - background-color: transparent; - cursor: pointer; - border: none; - margin-top: -3px; - } - } - .link-btn { - display: inline-block; - font-size: 18px; - line-height: 1; - } - .icon-btn { - position: relative; - font-size: 18px; - line-height: 1; - padding-right: 10px; - margin-left: 5px; - - span { - display: inline-block; - position: absolute; - right: 0; - top: -5px; - width: 16px; - height: 16px; - border-radius: 50%; - background-color: red; - text-align: center; - line-height: 17px; - color: var(--whiteColor); - font: { - weight: 700; - size: 9px; - }; - } - } - } - .logo { - position: relative; - width: 60%; - z-index: 999; - } - } - .noke-nav { - display: none; - } - .others-option-for-responsive { - display: block; - } - .marketing-color { - .noke-responsive-nav { - .noke-responsive-menu { - &.mean-container { - .mean-nav { - ul { - li { - a { - &.active { - color: var(--marketingMainColor); - } - } - } - } - } - } - } - .mean-container { - .navbar-nav { - .nav-item { - &.megamenu { - .dropdown-menu { - .submenu-title { - &::before { - background-color: var(--marketingMainColor); - } - } - .megamenu-submenu { - li { - a { - &:hover, &.active { - color: var(--marketingMainColor); - } - } - } - } - } - } - } - } - } - .others-option { - .option-item { - .search-icon { - &:hover { - color: var(--marketingMainColor); - } - } - .social-links { - span { - a { - &:hover { - color: var(--marketingMainColor); - } - } - } - } - } - .search-box { - .input-search { - &:focus { - border-color: var(--marketingMainColor); - } - } - button { - &:hover { - color: var(--marketingMainColor); - } - } - } - } - } - } - .business-color { - .noke-responsive-nav { - .noke-responsive-menu { - &.mean-container { - .mean-nav { - ul { - li { - a { - &.active { - color: var(--businessMainColor); - } - } - } - } - } - } - } - .mean-container { - .navbar-nav { - .nav-item { - &.megamenu { - .dropdown-menu { - .submenu-title { - &::before { - background-color: var(--businessMainColor); - } - } - .megamenu-submenu { - li { - a { - &:hover, &.active { - color: var(--businessMainColor); - } - } - } - } - } - } - } - } - } - .others-option { - .option-item { - .search-icon { - &:hover { - color: var(--businessMainColor); - } - } - .social-links { - span { - a { - &:hover { - color: var(--businessMainColor); - } - } - } - } - } - .search-box { - .input-search { - &:focus { - border-color: var(--businessMainColor); - } - } - button { - &:hover { - color: var(--businessMainColor); - } - } - } - } - } - } - .app-color { - .noke-responsive-nav { - .noke-responsive-menu { - &.mean-container { - .mean-nav { - ul { - li { - a { - &.active { - color: var(--appMainColor); - } - } - } - } - } - } - } - .mean-container { - .navbar-nav { - .nav-item { - &.megamenu { - .dropdown-menu { - .submenu-title { - &::before { - background-color: var(--appMainColor); - } - } - .megamenu-submenu { - li { - a { - &:hover, &.active { - color: var(--appMainColor); - } - } - } - } - } - } - } - } - } - .others-option { - .option-item { - .search-icon { - &:hover { - color: var(--appMainColor); - } - } - .social-links { - span { - a { - &:hover { - color: var(--appMainColor); - } - } - } - } - } - .search-box { - .input-search { - &:focus { - border-color: var(--appMainColor); - } - } - button { - &:hover { - color: var(--appMainColor); - } - } - } - } - } - } - .it-agency-color { - .noke-responsive-nav { - .noke-responsive-menu { - &.mean-container { - .mean-nav { - ul { - li { - a { - &.active { - color: var(--itAgencyMainColor); - } - } - } - } - } - } - } - .mean-container { - .navbar-nav { - .nav-item { - &.megamenu { - .dropdown-menu { - .submenu-title { - &::before { - background-color: var(--itAgencyMainColor); - } - } - .megamenu-submenu { - li { - a { - &:hover, &.active { - color: var(--itAgencyMainColor); - } - } - } - } - } - } - } - } - } - .others-option { - .option-item { - .search-icon { - &:hover { - color: var(--itAgencyMainColor); - } - } - .social-links { - span { - a { - &:hover { - color: var(--itAgencyMainColor); - } - } - } - } - } - .search-box { - .input-search { - &:focus { - border-color: var(--itAgencyMainColor); - } - } - button { - &:hover { - color: var(--itAgencyMainColor); - } - } - } - } - } - } - .consulting-color { - .noke-responsive-nav { - .noke-responsive-menu { - &.mean-container { - .mean-nav { - ul { - li { - a { - &.active { - color: var(--consultingMainColor); - } - } - } - } - } - } - } - .mean-container { - .navbar-nav { - .nav-item { - &.megamenu { - .dropdown-menu { - .submenu-title { - &::before { - background-color: var(--consultingMainColor); - } - } - .megamenu-submenu { - li { - a { - &:hover, &.active { - color: var(--consultingMainColor); - } - } - } - } - } - } - } - } - } - .others-option { - .option-item { - .search-icon { - &:hover { - color: var(--consultingMainColor); - } - } - .social-links { - span { - a { - &:hover { - color: var(--consultingMainColor); - } - } - } - } - } - .search-box { - .input-search { - &:focus { - border-color: var(--consultingMainColor); - } - } - button { - &:hover { - color: var(--consultingMainColor); - } - } - } - } - } - } - .saas-color { - .noke-responsive-nav { - .noke-responsive-menu { - &.mean-container { - .mean-nav { - ul { - li { - a { - &.active { - color: var(--saasMainColor); - } - } - } - } - } - } - } - .mean-container { - .navbar-nav { - .nav-item { - &.megamenu { - .dropdown-menu { - .submenu-title { - &::before { - background-color: var(--saasMainColor); - } - } - .megamenu-submenu { - li { - a { - &:hover, &.active { - color: var(--saasMainColor); - } - } - } - } - } - } - } - } - } - .others-option { - .option-item { - .search-icon { - &:hover { - color: var(--saasMainColor); - } - } - .social-links { - span { - a { - &:hover { - color: var(--saasMainColor); - } - } - } - } - } - .search-box { - .input-search { - &:focus { - border-color: var(--saasMainColor); - } - } - button { - &:hover { - color: var(--saasMainColor); - } - } - } - } - } - } - .shop-color { - .noke-responsive-nav { - .noke-responsive-menu { - &.mean-container { - .mean-nav { - ul { - li { - a { - &.active { - color: var(--shopMainColor); - } - } - } - } - } - } - } - .mean-container { - .navbar-nav { - .nav-item { - &.megamenu { - .dropdown-menu { - .submenu-title { - &::before { - background-color: var(--shopMainColor); - } - } - .megamenu-submenu { - li { - a { - &:hover, &.active { - color: var(--shopMainColor); - } - } - } - } - } - } - } - } - } - .others-option { - .option-item { - .search-icon { - &:hover { - color: var(--shopMainColor); - } - } - .social-links { - span { - a { - &:hover { - color: var(--shopMainColor); - } - } - } - } - } - .search-box { - .input-search { - &:focus { - border-color: var(--shopMainColor); - } - } - button { - &:hover { - color: var(--shopMainColor); - } - } - } - } - } - } - .blog-color { - .noke-responsive-nav { - .noke-responsive-menu { - &.mean-container { - .mean-nav { - ul { - li { - a { - &.active { - color: var(--personalPortfolioMainColor); - } - } - } - } - } - } - } - .mean-container { - .navbar-nav { - .nav-item { - &.megamenu { - .dropdown-menu { - .submenu-title { - &::before { - background-color: var(--personalPortfolioMainColor); - } - } - .megamenu-submenu { - li { - a { - &:hover, &.active { - color: var(--personalPortfolioMainColor); - } - } - } - } - } - } - } - } - } - .others-option { - .option-item { - .search-icon { - &:hover { - color: var(--personalPortfolioMainColor); - } - } - .social-links { - span { - a { - &:hover { - color: var(--personalPortfolioMainColor); - } - } - } - } - } - .search-box { - .input-search { - &:focus { - border-color: var(--personalPortfolioMainColor); - } - } - button { - &:hover { - color: var(--personalPortfolioMainColor); - } - } - } - } - } - } - .personal-portfolio-color { - .noke-responsive-nav { - .noke-responsive-menu { - &.mean-container { - .mean-nav { - ul { - li { - a { - &.active { - color: var(--personalPortfolioMainColor); - } - } - } - } - } - } - } - .mean-container { - .navbar-nav { - .nav-item { - &.megamenu { - .dropdown-menu { - .submenu-title { - &::before { - background-color: var(--personalPortfolioMainColor); - } - } - .megamenu-submenu { - li { - a { - &:hover, &.active { - color: var(--personalPortfolioMainColor); - } - } - } - } - } - } - } - } - } - .others-option { - .option-item { - .search-icon { - &:hover { - color: var(--personalPortfolioMainColor); - } - } - .social-links { - span { - a { - &:hover { - color: var(--personalPortfolioMainColor); - } - } - } - } - } - .search-box { - .input-search { - &:focus { - border-color: var(--personalPortfolioMainColor); - } - } - button { - &:hover { - color: var(--personalPortfolioMainColor); - } - } - } - } - } - } - .minimal-portfolio-color { - .noke-responsive-nav { - .noke-responsive-menu { - &.mean-container { - .mean-nav { - ul { - li { - a { - &.active { - color: var(--minimalPortfolioColor); - } - } - } - } - } - } - } - .mean-container { - .navbar-nav { - .nav-item { - &.megamenu { - .dropdown-menu { - .submenu-title { - &::before { - background-color: var(--minimalPortfolioColor); - } - } - .megamenu-submenu { - li { - a { - &:hover, &.active { - color: var(--minimalPortfolioColor); - } - } - } - } - } - } - } - } - } - .others-option { - .option-item { - .search-icon { - &:hover { - color: var(--minimalPortfolioColor); - } - } - .social-links { - span { - a { - &:hover { - color: var(--minimalPortfolioColor); - } - } - } - } - } - .search-box { - .input-search { - &:focus { - border-color: var(--minimalPortfolioColor); - } - } - button { - &:hover { - color: var(--minimalPortfolioColor); - } - } - } - } - } - } - -} - -/*================================================ -Search Overlay CSS -=================================================*/ -.search-overlay { - position: fixed; - top: 0; - right: 0; - bottom: 0; - left: 0; - z-index: 99999; - opacity: 0; - visibility: hidden; - transition: all 0.3s ease-in-out; - overflow: hidden; - - .search-overlay-layer { - position: absolute; - top: 0; - right: 0; - bottom: 0; - z-index: 1; - transform: translateX(100%); - - &:nth-child(1) { - left: 0; - background-color: rgba(0, 0, 0, 0.5); - transition: all 0.3s ease-in-out 0s; - } - &:nth-child(2) { - left: 0; - background-color: rgba(0, 0, 0, 0.4); - transition: all 0.3s ease-in-out 0.3s; - } - &:nth-child(3) { - left: 0; - background-color: rgba(0, 0, 0, 0.7); - transition: all 0.9s ease-in-out 0.6s; - } - } - .search-overlay-close { - position: absolute; - top: 40px; - right: 40px; - width: 50px; - z-index: 2; - text-align: center; - cursor: pointer; - padding: 10px; - transition: all 0.9s ease-in-out 1.5s; - opacity: 0; - visibility: hidden; - - .search-overlay-close-line { - width: 100%; - height: 3px; - float: left; - margin-bottom: 5px; - background-color: var(--whiteColor); - transition: all 500ms ease; - - &:nth-child(1) { - transform: rotate(45deg); - } - &:nth-child(2) { - margin-top: -7px; - transform: rotate(-45deg); - } - } - &:hover { - .search-overlay-close-line { - background: red; - transform: rotate(180deg); - } - } - } - .search-overlay-form { - transform: translateY(-50%) translateX(-50%); - transition: all 0.9s ease-in-out 1.4s; - visibility: hidden; - position: absolute; - max-width: 600px; - width: 600px; - opacity: 0; - z-index: 2; - left: 50%; - top: 50%; - - form { - position: relative; - - .input-search { - display: block; - width: 100%; - height: 70px; - border: none; - background-color: transparent; - color: var(--whiteColor); - padding: 0; - transition: var(--transition); - border-bottom: 1px solid rgba(255, 255, 255, .40); - font: { - size: 22px; - weight: 500; - }; - &::placeholder { - transition: var(--transition); - color: rgba(255, 255, 255, .60); - font-weight: 100; - } - &:focus { - border-color: var(--whiteColor); - - &::placeholder { - color: transparent; - } - } - } - button { - position: absolute; - right: 0; - top: 13px; - color: var(--whiteColor); - transition: var(--transition); - background-color: transparent; - border: none; - font-size: 25px; - opacity: 0.7; - - &:hover { - opacity: 1; - } - } - } - } - &.search-overlay-active { - &.search-overlay { - opacity: 1; - visibility: visible; - - .search-overlay-layer { - transform: translateX(0); - } - .search-overlay-close { - opacity: 1; - visibility: visible; - } - .search-overlay-form { - opacity: 1; - visibility: visible; - } - } - } -} - -/*================================================ -Startup Banner Area CSS -=================================================*/ -.startup-banner-area { - .container-fluid { - max-width: 1400px; - } -} -.startup-banner-inner { - position: relative; - z-index: 1; - padding: { - top: 140px; - bottom: 140px; - left: 100px; - right: 100px; - }; -} -.startup-banner-content { - padding-right: 15px; - - .sub-title { - display: block; - margin-bottom: 10px; - color: var(--startupMainColor); - font: { - family: var(--headingFontFamily); - weight: 600; - size: 14px; - }; - } - h1 { - margin-bottom: 25px; - font-size: 60px; - } - p { - max-width: 580px; - } - .default-btn { - margin-top: 10px; - } -} -.startup-banner-image { - text-align: center; - padding-left: 15px; -} - -/*================================================ -Marketing Banner Area CSS -=================================================*/ -.marketing-banner-area { - z-index: 1; - position: relative; - border: { - top: 1px solid #f0f0f0; - bottom: 1px solid #f0f0f0; - }; - padding: { - top: 80px; - bottom: 80px; - }; -} -.marketing-banner-content { - padding-right: 25px; - - .sub-title { - display: block; - margin-bottom: 10px; - color: var(--marketingMainColor); - font: { - family: var(--headingFontFamily); - weight: 600; - size: 14px; - }; - } - h1 { - margin-bottom: 25px; - font-size: 60px; - } - p { - max-width: 550px; - } - .default-btn { - margin-top: 10px; - } -} -.marketing-banner-image { - text-align: center; -} - -/*================================================ -Business Banner Area CSS -=================================================*/ -.business-banner-area { - z-index: 1; - position: relative; - padding: { - top: 100px; - bottom: 100px; - }; - &::before { - animation: moveleftbounce 5s linear infinite; - position: absolute; - left: 0; - right: 0; - top: 0; - bottom: 0; - z-index: -1; - content: ''; - margin: { - left: 20px; - right: 20px; - }; - background: { - image: url(../../assets/img/bg2.jpg); - position: center center; - repeat: no-repeat; - size: cover; - }; - } - .container { - max-width: 1400px; - } -} -.business-banner-content { - padding-right: 25px; - max-width: 745px; - - .sub-title { - display: block; - margin-bottom: 10px; - color: var(--businessMainColor); - font: { - family: var(--headingFontFamily); - weight: 600; - size: 14px; - }; - } - h1 { - margin-bottom: 25px; - font-size: 60px; - } - p { - max-width: 550px; - } - .default-btn { - margin-top: 10px; - } -} -.business-banner-image { - text-align: center; - - img { - border-radius: 0 0 0 100px; - } -} - -/*================================================ -App Banner Area CSS -=================================================*/ -.app-banner-area { - z-index: 1; - position: relative; - background: var(--appGradientColor); - background: { - image: url(../../assets/img/bg3.jpg); - position: center center; - repeat: no-repeat; - size: cover; - }; - padding: { - top: 100px; - bottom: 100px; - }; - .container { - max-width: 1450px; - } -} -.app-banner-content { - h1 { - margin-bottom: 25px; - font-size: 60px; - color: var(--whiteColor); - } - p { - max-width: 550px; - color: var(--whiteColor); - } - .btn-box { - margin-top: 35px; - - .store-btn { - display: inline-block; - background-color: var(--whiteColor); - position: relative; - color: var(--optionalColor); - padding: 11px 25px 11px 65px; - margin-right: 15px; - border-radius: 5px; - font: { - size: 13.5px; - weight: 600; - }; - img { - position: absolute; - left: 15px; - top: 50%; - transform: translateY(-50%); - color: var(--blackColor); - font: { - size: 40px; - weight: normal; - }; - } - span { - display: block; - color: var(--blackColor); - margin-top: 2px; - font: { - size: 18px; - weight: 700; - }; - } - &:last-child { - margin-right: 0; - } - } - } -} -.app-banner-image { - text-align: center; - padding-left: 15px; -} - -/*================================================ -Saas Banner Area CSS -=================================================*/ -.saas-banner-area { - background-color: #06080e; - padding-top: 80px; - - .container-fluid { - padding: { - right: 30px; - left: 30px; - }; - } -} -.saas-banner-content { - margin-left: auto; - max-width: 710px; - - h1 { - color: var(--whiteColor); - margin-bottom: 25px; - font-size: 64px; - } - p { - opacity: 0.9; - max-width: 535px; - color: var(--whiteColor); - } - .default-btn { - margin-top: 10px; - } -} -.saas-banner-image { - text-align: center; -} - -/*================================================ -Personal Portfolio Banner Area CSS -=================================================*/ -.personal-portfolio-banner-area { - border-bottom: 1px solid #f0f0f0; - position: relative; - z-index: 1; - padding: { - top: 100px; - bottom: 100px; - }; - .container { - max-width: 1450px; - } -} -.personal-portfolio-banner-content { - .sub-title { - display: block; - position: relative; - padding-left: 65px; - margin-bottom: 12px; - font: { - size: 20px; - weight: 500; - }; - &::before { - left: 0; - top: 50%; - width: 50px; - height: 1px; - content: ''; - position: absolute; - transform: translateY(-50%); - background-color: var(--personalPortfolioMainColor); - } - } - h1 { - margin-bottom: 15px; - font: { - size: 80px; - weight: 700; - }; - } - h4 { - margin-bottom: 20px; - font: { - size: 40px; - weight: 500; - }; - } - p { - max-width: 535px; - } - .default-btn { - margin-top: 10px; - } -} -.personal-portfolio-banner-image { - text-align: center; -} - -/*================================================ -Consulting Banner Area CSS -=================================================*/ -.consulting-banner-area { - position: relative; - z-index: 1; - background: { - size: cover; - repeat: no-repeat; - position: left center; - image: url(../../assets/img/consulting-banner-bg.jpg); - }; - padding: { - top: 300px; - bottom: 180px; - }; - .container { - max-width: 1450px; - } - &::before { - content: ''; - position: absolute; - left: 0; - right: 0; - top: 0; - bottom: 0; - z-index: -1; - background-color: var(--whiteColor); - opacity: 0.85; - display: none; - } -} -.consulting-banner-content { - max-width: 790px; - - h1 { - margin-bottom: 25px; - font: { - size: 50px; - weight: 700; - }; - } - p { - max-width: 580px; - } - .default-btn { - margin-top: 15px; - } -} - -/*================================================ -IT Agency Banner Area CSS -=================================================*/ -.it-agency-banner-area { - .it-agency-inner-banner { - position: relative; - z-index: 1; - background: { - image: url(../../assets/img/it-agency-banner-bg.jpg); - position: center center; - size: cover; - repeat: no-repeat; - }; - padding: { - top: 280px; - bottom: 330px; - }; - &::before { - content: ''; - position: absolute; - left: 0; - right: 0; - top: 0; - bottom: 0; - z-index: -1; - background-color: #000000; - opacity: 0.8; - } - } -} -.it-agency-banner-content { - max-width: 1000px; - text-align: center; - color: var(--whiteColor); - margin: { - left: auto; - right: auto; - }; - h1 { - color: var(--whiteColor); - margin-bottom: 20px; - line-height: 1.3; - font-size: 60px; - } - p { - color: var(--whiteColor); - max-width: 600px; - opacity: 0.9; - margin: { - left: auto; - right: auto; - }; - } - .default-btn { - margin-top: 15px; - } -} -.banner-video-box { - z-index: 1; - max-width: 1000px; - position: relative; - text-align: center; - border-radius: 10px; - margin: { - left: auto; - right: auto; - top: -130px; - }; - img { - border-radius: 10px; - } - .video-btn { - top: 50%; - left: 50%; - width: 80px; - height: 80px; - font-size: 30px; - border-radius: 50%; - position: absolute; - display: inline-block; - color: var(--whiteColor); - background-color: rgba(255, 74, 23, .75); - transform: translateY(-50%) translateX(-50%); - - i { - position: absolute; - left: 0; - right: 0; - top: 50%; - transform: translateY(-50%); - } - &::after, &::before { - content: ''; - display: block; - position: absolute; - top: 0; - right: 0; - z-index: -1; - bottom: 0; - left: 0; - border-radius: 50%; - border: 1.5px solid var(--whiteColor); - } - &::before { - animation: ripple 2s linear infinite - } - &::after { - animation: ripple 2s linear 1s infinite - } - } -} - -/*================================================ -Shop Banner Area CSS -=================================================*/ -.shop-banner-area { - padding: { - top: 200px; - bottom: 200px; - }; - background: { - image: url(../../assets/img/shop-banner-bg.jpg); - position: top center; - repeat: no-repeat; - size: cover; - }; -} -.shop-banner-content { - .sub-title { - display: block; - font-size: 30px; - margin-bottom: 8px; - } - h1 { - margin-bottom: 15px; - font: { - size: 60px; - weight: 700; - }; - } - h4 { - margin-bottom: 0; - font-size: 30px; - } - .default-btn { - margin-top: 30px; - } -} - -/*================================================ -Blog Banner Area CSS -=================================================*/ -.blog-banner-area { - background: { - image: url(../../assets/img/bg11.jpg); - position: center center; - repeat: no-repeat; - size: cover; - }; - padding: { - top: 100px; - bottom: 100px; - }; -} -.blog-banner-item { - position: relative; - text-align: center; - overflow: hidden; - - img { - transition: var(--transition); - } - .content { - position: absolute; - top: 50%; - transform: translateY(-50%); - left: 0; - right: 0; - padding: 30px; - background-color: rgba(255, 255, 255, .90); - max-width: 525px; - margin: { - left: auto; - right: auto; - }; - .tag { - display: inline-block; - margin-bottom: 12px; - font-weight: 500; - } - h3 { - font-size: 25px; - line-height: 1.4; - margin-bottom: 12px; - } - p { - margin-bottom: 20px; - } - .meta { - padding-left: 0; - margin-bottom: 0; - list-style-type: none; - - li { - a { - display: inline-block; - font-weight: 600; - position: relative; - padding-right: 12px; - - i { - position: absolute; - right: 0; - top: 7px; - font-size: 12px; - } - &::before { - content: ''; - position: absolute; - right: 0; - bottom: 0; - width: 0%; - height: 1px; - background-color: var(--blackColor); - transition: var(--transition); - } - &:hover { - padding-right: 15px; - color: var(--blackColor); - - &::before { - width: 100%; - right: auto; - left: 0; - } - } - } - &.date { - padding-left: 20px; - position: relative; - - i { - position: absolute; - left: 0; - top: 3px; - } - } - } - } - } - &:hover { - img { - transform: scale(1.1); - } - } -} -.blog-banner-item-list { - margin-bottom: -30px; - - .single-blog-banner-item { - margin-bottom: 30px; - - .row { - margin: { - left: 0; - right: 0; - }; - .col-lg-4, .col-lg-8 { - padding: { - left: 0; - right: 0; - }; - } - } - .image { - height: 100%; - position: relative; - background: { - position: center center; - repeat: no-repeat; - size: cover; - }; - &.bg1 { - background-image: url(../../assets/img/blog-banner/blog-banner-list1.jpg); - } - &.bg2 { - background-image: url(../../assets/img/blog-banner/blog-banner-list2.jpg); - } - &.bg3 { - background-image: url(../../assets/img/blog-banner/blog-banner-list3.jpg); - } - &.bg4 { - background-image: url(../../assets/img/blog-banner/blog-banner-list4.jpg); - } - img { - display: none; - } - .link-btn { - position: absolute; - left: 0; - right: 0; - top: 0; - bottom: 0; - display: block; - z-index: 1; - } - } - .content { - padding: { - left: 25px; - top: 9.1px; - bottom: 9.1px; - }; - h3 { - margin-bottom: 15px; - color: var(--whiteColor); - line-height: 1.4; - font-size: 18px; - - a { - color: var(--whiteColor); - } - } - .date { - color: var(--whiteColor); - padding-left: 20px; - position: relative; - opacity: 0.9; - - i { - position: absolute; - left: 0; - top: 3px; - } - } - } - } -} - -/*================================================ -Furniture Banner Area CSS -=================================================*/ -.furniture-banner-item { - padding: { - top: 200px; - bottom: 200px; - }; - background: { - position: center center; - repeat: no-repeat; - size: cover; - }; - &.bg-item1 { - background-image: url(../../assets/img/furniture-banner-bg1.jpg); - } - &.bg-item2 { - background-image: url(../../assets/img/furniture-banner-bg2.jpg); - } - &.bg-item3 { - background-image: url(../../assets/img/furniture-banner-bg3.jpg); - } -} -.furniture-banner-content { - padding: 40px; - max-width: 560px; - background-color: var(--whiteColor); - border-left: 5px solid var(--blackColor); - - h1 { - margin-bottom: 15px; - font-size: 45px; - } - .default-btn { - margin-top: 10px; - } -} -.furniture-banner-slides { - &.owl-theme { - .owl-nav.disabled+.owl-dots { - margin-top: 0; - } - .owl-dots { - position: absolute; - right: 15px; - top: 50%; - transform: translateY(-50%); - - .owl-dot { - display: block; - margin: { - top: 10px; - bottom: 10px; - }; - span { - margin: 0; - border-radius: 0; - width: 50px; - height: 6px; - background-color: var(--whiteColor); - transition: var(--transition); - } - &:hover, &.active { - span { - background-color: var(--blackColor); - } - } - } - } - } -} - -/*================================================ -Minimal Portfolio Banner Area CSS -=================================================*/ -.minimal-portfolio-banner-area { - position: relative; - z-index: 1; - padding: { - top: 250px; - bottom: 220px; - }; -} -.minimal-portfolio-banner-content { - text-align: center; - max-width: 770px; - margin: { - left: auto; - right: auto; - }; - .typewrite { - margin-bottom: 30px; - display: inline-block; - color: var(--blackColor); - padding: 8px 20px; - line-height: 1; - letter-spacing: 2px; - background-color: #ebebeb; - font: { - size: 20px; - weight: 300; - }; - } - h1 { - font-size: 60px; - margin-bottom: 40px; - text-shadow: -1px 1px 0 var(--minimalPortfolioColor), 1px 1px 0 var(--startupMainColor), 1px -1px 0 var(--consultingMainColor), -1px -1px 0 var(--itAgencyMainColor); - } -} -.scroll-container { - left: 50%; - bottom: 0; - width: 30px; - height: 60px; - position: absolute; - border-radius: 15px; - border: 3px solid #eeeeee; - transform: translateX(-50%); -} -.scroller { - width: 16px; - border-radius: 8px; - background-color: var(--minimalPortfolioColor); - position: absolute; - top: 4px; - left: 4px; - bottom: 34px; - animation: scroller 1500ms ease-out infinite; -} - -/*================================================ -Features Area CSS -=================================================*/ -.features-area { - position: relative; - z-index: 1; - - &.ptb-70 { - padding-bottom: 40px; - } -} -.single-features-box { - text-align: center; - margin-bottom: 30px; - transition: var(--transition); - position: relative; - padding: { - left: 15px; - right: 15px; - }; - .icon { - line-height: 1; - display: block; - font-size: 50px; - margin-bottom: 22px; - transition: var(--transition); - } - h3 { - font-size: 20px; - margin-bottom: 12px; - transition: var(--transition); - } - p { - margin-bottom: 0; - transition: var(--transition); - } - .link-btn { - display: inline-block; - font-weight: 700; - padding-right: 12px; - position: absolute; - left: 50%; - bottom: 0; - opacity: 0; - visibility: hidden; - transform: translateX(-50%); - - i { - position: absolute; - right: 0; - top: 7px; - font-size: 12px; - } - &::before { - content: ''; - position: absolute; - right: 0; - bottom: 0; - width: 0%; - height: 2px; - background-color: #eeeeee; - transition: var(--transition); - } - &:hover { - color: var(--startupMainColor); - padding-right: 15px; - - &::before { - width: 100%; - right: auto; - left: 0; - } - } - } - &:hover { - .icon { - transform: translateY(-20px); - color: var(--startupMainColor); - } - h3 { - transform: translateY(-20px); - } - p { - transform: translateY(-20px); - } - .link-btn { - opacity: 1; - bottom: -15px; - visibility: visible; - } - } -} -.features-box { - text-align: center; - margin-bottom: 30px; - background-color: var(--whiteColor); - box-shadow: 3px 5px 25px 0 rgba(0, 0, 0, .1); - padding: 35px 25px; - transition: var(--transition); - - .icon { - display: block; - width: 100px; - height: 100px; - position: relative; - font-size: 55px; - line-height: 100px; - z-index: 1; - color: var(--appMainColor); - border-radius: 10px; - transition: var(--transition); - margin: { - left: auto; - right: auto; - bottom: 25px; - }; - &::after { - content: ''; - position: absolute; - transition: var(--transition); - left: 0; - right: 0; - top: 0; - bottom: 0; - border-radius: 10px; - z-index: -1; - background-color: var(--appMainColor); - opacity: .10; - } - &.bg-7669ff { - color: #7669ff; - - &::after { - background-color: #7669ff; - } - } - &.bg-ff9f07 { - color: #ff9f07; - - &::after { - background-color: #ff9f07; - } - } - &.bg-89c111 { - color: #89c111; - - &::after { - background-color: #89c111; - } - } - &.bg-2ea7ff { - color: #2ea7ff; - - &::after { - background-color: #2ea7ff; - } - } - &.bg-ca83ff { - color: #ca83ff; - - &::after { - background-color: #ca83ff; - } - } - &.bg-ff5f5f { - color: #ff5f5f; - - &::after { - background-color: #ff5f5f; - } - } - } - h3 { - margin-bottom: 12px; - font-size: 20px; - } - &:hover { - transform: translateY(-10px); - - .icon { - color: var(--whiteColor); - - &::after { - opacity: 1; - } - } - } - &.without-box-shadow { - box-shadow: unset; - } -} -.single-features-item { - margin-bottom: 30px; - position: relative; - padding-left: 70px; - - .icon { - position: absolute; - left: 0; - line-height: 1; - top: 0; - font-size: 45px; - color: var(--consultingMainColor); - } - h3 { - margin-bottom: 0; - font-size: 20px; - } - &.color-white { - h3 { - color: var(--whiteColor); - } - } - &.startup-color { - .icon { - color: var(--startupMainColor); - } - } -} -.features-item { - margin-bottom: 30px; - transition: var(--transition); - border-radius: 10px; - position: relative; - padding: 30px; - z-index: 1; - - .icon { - display: block; - line-height: 1; - transition: var(--transition); - font-size: 35px; - color: var(--itAgencyMainColor); - margin-right: 15px; - } - h3 { - transition: var(--transition); - position: relative; - font-size: 20px; - margin-bottom: 0; - } - p { - transition: var(--transition); - margin-top: 15px; - } - &::before { - content: ''; - position: absolute; - left: 0; - right: 0; - top: 0; - bottom: 0; - border-radius: 10px; - background-color: var(--itAgencyMainColor); - z-index: -1; - transition: var(--transition); - opacity: 0.07; - } - &::after { - content: ''; - position: absolute; - left: 0; - top: 0; - transition: .3s; - border-radius: 10px; - height: 0; - width: 100%; - z-index: -1; - background: var(--itAgencyGradientColor); - } - &.bg-6d5fff { - .icon { - color: #6d5fff; - } - &::before { - background-color: #6d5fff; - } - } - &.bg-ff9f07 { - .icon { - color: #ff9f07; - } - &::before { - background-color: #ff9f07; - } - } - &.bg-2ea7ff { - .icon { - color: #2ea7ff; - } - &::before { - background-color: #2ea7ff; - } - } - &:hover { - &::before { - opacity: 0; - visibility: hidden; - } - &::after { - height: 100%; - } - p { - color: var(--whiteColor); - } - h3 { - color: var(--whiteColor); - - a { - color: var(--whiteColor); - } - } - .icon { - color: var(--whiteColor); - } - } -} - -/*================================================ -About Area CSS -=================================================*/ -.about-area { - &.with-border { - border-bottom: 1px solid #f0f0f0; - } -} -.startup-about-area { - .container-fluid { - max-width: 1400px; - } -} -.startup-about-image { - z-index: 1; - margin-right: 15px; - text-align: center; - position: relative; - background-color: #f9f4f0; - padding: { - top: 80px; - left: 80px; - bottom: 80px; - }; - .video-btn { - position: absolute; - left: 57%; - display: inline-block; - top: 50%; - transform: translateY(-50%) translateX(-57%); - width: 80px; - height: 80px; - background-color: rgba(0, 0, 0, .75); - border-radius: 50%; - color: var(--whiteColor); - font-size: 30px; - - i { - position: absolute; - left: 0; - right: 0; - top: 50%; - transform: translateY(-50%); - } - &::after, &::before { - content: ''; - display: block; - position: absolute; - top: 0; - right: 0; - z-index: -1; - bottom: 0; - left: 0; - border-radius: 50%; - border: 2px solid var(--whiteColor); - } - &::before { - animation: ripple 2s linear infinite - } - &::after { - animation: ripple 2s linear 1s infinite - } - } -} -.startup-about-content { - padding-left: 15px; - max-width: 600px; - - .sub-title { - display: block; - margin-bottom: 12px; - color: var(--startupMainColor); - font: { - family: var(--headingFontFamily); - weight: 600; - size: 14px; - }; - } - h2 { - margin-bottom: 15px; - font-size: 40px; - } - p { - strong { - color: var(--blackColor); - } - } - .features-list { - padding-left: 0; - margin: { - left: 16px; - bottom: 0; - }; - li { - margin-bottom: 12px; - color: var(--optionalColor); - font-weight: 500; - - &:last-child { - margin-bottom: 0; - } - } - } - .default-btn { - margin-top: 5px; - } -} -.marketing-about-area { - border-bottom: 1px solid #f0f0f0; -} -.marketing-about-image { - margin-right: 15px; - text-align: center; -} -.marketing-about-content { - padding-left: 15px; - - .sub-title { - display: block; - margin-bottom: 12px; - color: var(--marketingMainColor); - font: { - family: var(--headingFontFamily); - weight: 600; - size: 14px; - }; - } - h2 { - margin-bottom: 15px; - font-size: 40px; - } - .default-btn { - margin-top: 10px; - } - .features-list { - padding-left: 0; - margin: { - left: 16px; - bottom: 0; - }; - li { - margin-bottom: 12px; - color: var(--optionalColor); - font-weight: 500; - - &:last-child { - margin-bottom: 0; - } - } - } -} -.business-about-content { - padding-left: 15px; - - .sub-title { - display: block; - margin-bottom: 12px; - color: var(--businessMainColor); - font: { - family: var(--headingFontFamily); - weight: 600; - size: 14px; - }; - } - h2 { - margin-bottom: 15px; - font-size: 40px; - } - .default-btn { - margin-top: 10px; - } -} -.business-about-image { - z-index: 1; - text-align: center; - padding-right: 15px; - position: relative; -} -.app-about-content { - padding-right: 15px; - - h3 { - margin-bottom: 16px; - font-size: 24px; - } - .features-list { - padding-left: 0; - margin-bottom: 15px; - list-style-type: none; - - li { - margin-bottom: 12px; - position: relative; - color: var(--optionalColor); - font-weight: 500; - padding-left: 24px; - - i { - position: absolute; - left: 0; - top: 4px; - color: var(--appMainColor); - } - &:last-child { - margin-bottom: 0; - } - } - } - .default-btn { - margin-top: 10px; - } -} -.app-about-image { - padding-left: 15px; - text-align: center; -} -.saas-about-content { - padding-left: 15px; - - .sub-title { - display: block; - margin-bottom: 12px; - color: var(--saasMainColor); - font: { - family: var(--headingFontFamily); - weight: 600; - size: 14px; - }; - } - h2 { - margin-bottom: 15px; - font-size: 40px; - } - .features-list { - padding-left: 0; - margin-bottom: 15px; - list-style-type: none; - - li { - margin-bottom: 12px; - position: relative; - color: var(--optionalColor); - font-weight: 500; - padding-left: 24px; - - i { - position: absolute; - left: 0; - top: 4px; - color: var(--saasMainColor); - } - &:last-child { - margin-bottom: 0; - } - } - } - .default-btn { - margin-top: 10px; - } - &.white-color { - color: var(--whiteColor); - - h2 { - color: var(--whiteColor); - } - p { - color: var(--whiteColor); - opacity: 0.9; - } - .features-list { - li { - color: var(--whiteColor); - opacity: 0.9; - - i { - color: var(--whiteColor); - } - } - } - } -} -.saas-about-image { - padding-right: 15px; - text-align: center; -} -.it-agency-about-content { - padding-left: 15px; - - .sub-title { - display: block; - margin-bottom: 12px; - color: var(--itAgencyMainColor); - font: { - family: var(--headingFontFamily); - weight: 600; - size: 14px; - }; - } - h2 { - margin-bottom: 15px; - font-size: 40px; - } - .default-btn { - margin-top: 10px; - } - .features-list { - padding-left: 0; - margin: { - left: 16px; - bottom: 15px; - }; - li { - margin-bottom: 12px; - color: var(--optionalColor); - font-weight: 500; - - &:last-child { - margin-bottom: 0; - } - } - } -} -.it-agency-about-image { - text-align: start; - position: relative; - margin-right: 20px; - padding: { - right: 20px; - bottom: 20px; - }; - .main-image { - position: relative; - padding-bottom: 150px; - - img { - border-radius: 10px; - - &:nth-child(2) { - position: absolute; - right: 0; - bottom: 0; - z-index: 1; - } - } - } -} - -/*================================================ -Services Area CSS -=================================================*/ -.services-area { - &.with-black-border { - border-top: 1px solid #12141a; - border-bottom: 1px solid #12141a; - } -} -.single-services-box { - margin-bottom: 30px; - position: relative; - overflow: hidden; - - img { - transition: var(--transition); - } - .content { - position: absolute; - left: 0; - right: 0; - bottom: 0; - padding: 30px; - z-index: 2; - transition: var(--transition); - - .icon { - line-height: 1; - display: block; - font-size: 50px; - margin-bottom: 20px; - transition: var(--transition); - color: var(--startupMainColor); - } - h3 { - font-size: 20px; - margin-bottom: 10px; - color: var(--whiteColor); - transition: var(--transition); - - a { - color: var(--whiteColor); - - &:hover { - color: var(--startupMainColor); - } - } - } - p { - transition: var(--transition); - color: var(--whiteColor); - margin-bottom: 0; - opacity: 0.9; - } - .link-btn { - font-weight: 700; - padding-right: 12px; - position: absolute; - left: 30px; - display: inline-block; - bottom: 0; - color: var(--whiteColor); - opacity: 0; - visibility: hidden; - - i { - position: absolute; - right: 0; - top: 7px; - font-size: 12px; - } - &::before { - content: ''; - position: absolute; - right: 0; - bottom: 0; - width: 0%; - height: 2px; - background-color: #eeeeee; - transition: var(--transition); - } - &:hover { - padding-right: 15px; - - &::before { - width: 100%; - right: auto; - left: 0; - } - } - } - } - &::before { - position: absolute; - height: 100%; - content: ""; - width: 100%; - z-index: 1; - left: 0; - top: 0; - background: linear-gradient(to top, rgba(35, 35, 37, 0.9) 0, rgba(35, 35, 37, 0.7) 35%, rgba(22, 22, 23, 0) 60%, rgba(0, 0, 0, 0) 100%); - } - &:hover { - img { - transform: scale(1.05); - } - .content { - .icon { - transform: translateY(-30px); - } - p { - transform: translateY(-30px); - } - h3 { - transform: translateY(-30px); - } - .link-btn { - opacity: 1; - bottom: 25px; - visibility: visible; - } - } - } -} -.single-services-item { - margin-bottom: 30px; - - .content { - padding: { - top: 25px; - left: 20px; - right: 20px; - }; - h3 { - font-size: 20px; - margin-bottom: 10px; - } - } -} -.services-tabs { - .nav { - padding-left: 0; - margin-bottom: 60px; - border: none; - list-style-type: none; - text-align: center; - justify-content: center; - - .nav-item { - margin: { - left: 42px; - right: 42px; - }; - .nav-link { - display: inline-block; - padding: 0; - border: none; - margin: 0; - font: { - size: 19px; - weight: 700; - }; - .icon { - display: block; - width: 80px; - height: 80px; - position: relative; - z-index: 1; - line-height: 75px; - color: var(--businessMainColor); - font-weight: normal; - transition: var(--transition); - font-size: 35px; - border-radius: 30% 70% 70% 30% / 30% 30% 70% 70%; - padding-right: 10px; - margin: { - left: auto; - right: auto; - bottom: 15px; - }; - &::after { - content: ''; - position: absolute; - left: 0; - right: 0; - top: 0; - border-radius: 30% 70% 70% 30% / 30% 30% 70% 70%; - z-index: -1; - bottom: 0; - background: var(--businessGradientColor); - transition: var(--transition); - opacity: 0.10; - } - } - &:hover, &.active { - color: var(--businessMainColor); - - .icon { - color: var(--whiteColor); - - &::after { - opacity: 1; - } - } - } - } - &:last-child { - margin-right: 0; - } - &:first-child { - margin-left: 0; - } - } - } -} -.single-main-services { - margin-bottom: 30px; - - .content { - padding-right: 50px; - - h3 { - font-size: 40px; - margin-bottom: 15px; - line-height: 1.4; - } - p { - max-width: 540px; - } - .default-btn { - margin-top: 10px; - } - } - .image { - text-align: center; - } -} -.services-box { - text-align: center; - margin-bottom: 30px; - border: 1px solid #eeeeee; - background-color: var(--whiteColor); - padding: 35px 30px; - transition: var(--transition); - - .icon { - font-size: 60px; - line-height: 1; - background: var(--saasGradientColor); - -webkit-background-clip: text; - -moz-background-clip: text; - background-clip: text; - -webkit-text-fill-color: transparent; - margin-bottom: 22px; - display: block; - } - h3 { - margin-bottom: 12px; - font-size: 20px; - - a { - &:hover { - color: var(--saasMainColor); - } - } - } - &.color-white { - border-color: #272836; - background-color: #040611; - - h3 { - color: var(--whiteColor); - - a { - color: var(--whiteColor); - } - } - p { - opacity: 0.9; - color: var(--whiteColor); - } - } - &:hover { - border-color: var(--saasMainColor) !important; - } - &.startup-color { - .icon { - background: var(--startupMainColor); - -webkit-background-clip: text; - -moz-background-clip: text; - background-clip: text; - -webkit-text-fill-color: transparent; - } - &:hover { - border-color: var(--startupMainColor) !important; - } - } -} -.services-item { - margin-bottom: 30px; - text-align: center; - position: relative; - overflow: hidden; - - img { - transition: var(--transition); - } - &::before { - content: ''; - position: absolute; - left: 0; - right: 0; - top: 0; - bottom: 0; - opacity: 0; - visibility: hidden; - z-index: 1; - transition: var(--transition); - background-color: var(--consultingMainColor); - } - h3 { - font-size: 20px; - transition: var(--transition); - margin: { - top: 25px; - bottom: 0; - }; - } - .hover-content { - left: 0; - right: 0; - top: 50%; - padding: 30px; - position: absolute; - transform: translateY(-50%); - z-index: 2; - opacity: 0; - visibility: hidden; - transition: var(--transition); - color: var(--whiteColor); - - h3 { - opacity: 1 !important; - visibility: visible !important; - color: var(--whiteColor); - margin: { - top: 0; - bottom: 12px; - }; - a { - color: var(--whiteColor); - } - } - p { - color: var(--whiteColor); - } - .link-btn { - font-weight: 700; - position: relative; - display: inline-block; - padding-right: 12px; - color: var(--whiteColor); - - i { - position: absolute; - right: 0; - top: 7px; - font-size: 12px; - } - &::before { - content: ''; - position: absolute; - right: 0; - bottom: 0; - width: 0%; - height: 1px; - background-color: var(--whiteColor); - transition: var(--transition); - } - &:hover { - padding-right: 15px; - - &::before { - width: 100%; - right: auto; - left: 0; - } - } - } - } - &:hover { - img { - transform: scale(1.7); - } - h3 { - opacity: 0; - visibility: hidden; - } - .hover-content { - opacity: 1; - visibility: visible; - } - &::before { - opacity: .90; - visibility: visible; - } - } - &.startup-color { - &::before { - background-color: var(--startupMainColor); - } - } -} -.col-lg-3 { - &:nth-child(2), &:nth-child(4) { - .services-box { - margin-top: 30px; - } - } - &:nth-child(5), &:nth-child(7) { - .services-box { - margin-top: -30px; - } - } -} -.single-it-services-box { - margin-bottom: 30px; - border-radius: 10px; - position: relative; - padding: 30px 30px 30px 100px; - z-index: 1; - - .icon { - position: absolute; - left: 30px; - top: 30px; - line-height: 1; - font-size: 45px; - color: var(--itAgencyMainColor); - transition: var(--transition); - } - h3 { - transition: var(--transition); - margin-bottom: 12px; - font-size: 20px; - - a { - display: inline-block; - - &:hover { - color: var(--itAgencyGradientColor); - } - } - } - p { - transition: var(--transition); - } - &::before { - left: 0; - right: 0; - top: 0; - bottom: 0; - z-index: -1; - content: ''; - opacity: .06; - position: absolute; - border-radius: 10px; - transition: var(--transition); - background-color: var(--itAgencyMainColor); - } - &.bg-6d5fff { - .icon { - color: #6d5fff; - } - &::before { - background-color: #6d5fff; - } - } - &.bg-ff9f07 { - .icon { - color: #ff9f07; - } - &::before { - background-color: #ff9f07; - } - } - &.bg-89c111 { - .icon { - color: #89c111; - } - &::before { - background-color: #89c111; - } - } - &.bg-ca83ff { - .icon { - color: #ca83ff; - } - &::before { - background-color: #ca83ff; - } - } - &.bg-ff5f5f { - .icon { - color: #ff5f5f; - } - &::before { - background-color: #ff5f5f; - } - } - &.bg-2ea7ff { - .icon { - color: #2ea7ff; - } - &::before { - background-color: #2ea7ff; - } - } - &:hover { - .icon { - color: var(--whiteColor) !important; - } - h3 { - color: var(--whiteColor) !important; - - a { - color: var(--whiteColor) !important; - } - } - p { - color: var(--whiteColor); - } - &::before { - opacity: 1; - visibility: visible; - } - } -} - -/*================================================ -Services Details Area CSS -=================================================*/ -.services-details-desc { - h3 { - font-size: 24px; - margin: { - bottom: 15px; - top: 30px; - }; - &:first-child { - margin-top: 0; - } - } - ul { - li { - margin-bottom: 12px; - color: var(--optionalColor); - font-weight: 500; - - &:last-child { - margin-bottom: 0; - } - } - } - p { - strong { - color: var(--blackColor); - } - a { - color: var(--startupMainColor); - - &:hover { - text-decoration: underline; - } - } - } - img { - margin: { - top: 20px; - bottom: 20px; - }; - } -} -.services-details-content { - h2 { - font-size: 40px; - line-height: 1.4; - margin-bottom: 15px; - } -} -.services-details-video { - margin-left: 30px; - text-align: center; - background-color: #f5f5f5; - - iframe { - width: 100%; - border: none; - height: 336px; - display: block; - } - .default-btn { - margin: { - top: 20px; - left: 30px; - right: 30px; - bottom: 20px; - }; - } -} -.services-details-overview { - .overview-content { - h2 { - font-size: 40px; - line-height: 1.4; - margin-bottom: 15px; - } - } -} - -/*================================================ -Works Area CSS -=================================================*/ -.startup-works-area { - .section-title { - max-width: 100%; - text-align: start; - padding-top: 100px; - margin: { - left: 0; - right: 0; - bottom: -220px; - }; - h2 { - font-size: 35px; - } - } -} -.startup-works-content { - padding: { - top: 245px; - right: 15px; - }; - h3 { - font-size: 20px; - margin-bottom: 15px; - - a { - display: inline-block; - - &:hover { - color: var(--startupMainColor); - } - } - } - .custom-owl-nav { - margin-top: 25px; - - [class*=owl-] { - margin: 0 5px; - background-color: var(--startupMainColor); - color: var(--whiteColor); - padding: 8px 25px 7px !important; - border-radius: 0; - transition: var(--transition); - border: none; - cursor: pointer; - font-size: var(--fontSize); - - i { - line-height: 1; - } - &.owl-prev { - margin-left: 0; - } - &.owl-next { - margin-right: 0; - } - &:hover { - background-color: var(--blackColor); - color: var(--whiteColor); - } - } - } -} -.startup-works-image { - z-index: 1; - margin-left: 15px; - text-align: center; - position: relative; - background-color: #f9f4f0; - padding: { - top: 80px; - right: 80px; - bottom: 80px; - }; - .link-btn { - position: absolute; - left: 0; - right: 0; - top: 0; - bottom: 0; - z-index: 1; - display: block; - } -} -.single-works-box { - overflow: hidden; - position: relative; - margin-bottom: 30px; - - .works-image { - position: relative; - - img { - transition: var(--transition); - } - .works-overlay { - position: absolute; - overflow: hidden; - top: 10px; - left: 10px; - right: 10px; - bottom: 10px; - - &::before { - content: ''; - transition: var(--transition); - position: absolute; - width: 100%; - bottom: 0; - height: 50%; - background: var(--businessGradientColor); - right: -100%; - } - &::after { - content: ''; - transition: var(--transition); - position: absolute; - background: var(--businessGradientColor); - top: 0; - height: 50%; - width: 100%; - left: -100%; - } - h3 { - color: transparent; - overflow: hidden; - position: absolute; - top: 30px; - text-align: center; - right: 25px; - z-index: 2; - transition: var(--transition); - font-size: 20px; - margin-bottom: 5px; - - &::before { - content: ''; - background: var(--blackColor); - position: absolute; - width: 100%; - bottom: 0; - transition: var(--transition); - left: 100%; - top: 0; - right: auto; - } - } - span { - color: transparent; - overflow: hidden; - z-index: 2; - position: absolute; - top: 62px; - display: block; - right: 25px; - transition: var(--transition); - text-align: center; - - &::before { - content: ''; - background: var(--whiteColor); - width: 100%; - top: 0; - bottom: 0; - position: absolute; - transition: var(--transition); - right: 100%; - } - } - } - } - .link-btn { - position: absolute; - left: 0; - right: 0; - top: 0; - bottom: 0; - z-index: 5; - } - &:hover { - .works-image { - img { - transform: scale(1.3); - } - .works-overlay { - &::before { - right: 0; - opacity: 1; - width: 100%; - height: 50%; - transition: all .8s; - } - &::after { - left: 0; - opacity: 1; - transition: all .8s; - } - span { - color: var(--whiteColor); - - &::before { - right: -100%; - } - } - h3 { - color: var(--whiteColor); - - &::before { - left: -100%; - } - } - } - } - } - &.startup-color { - .works-image { - .works-overlay { - &::before { - background: var(--startupMainColor); - } - &::after { - background: var(--startupMainColor); - } - } - } - } -} -.works-box { - margin-bottom: 30px; - text-align: center; - position: relative; - overflow: hidden; - - img { - transition: var(--transition); - } - .link-btn { - display: block; - left: 0; - right: 0; - top: 0; - bottom: 0; - position: absolute; - z-index: 2; - } - h3 { - margin-bottom: 0; - font-size: 20px; - position: absolute; - left: 0; - right: 0; - top: 50%; - opacity: 0; - visibility: hidden; - transition: var(--transition); - transform: translateY(-50%); - color: var(--whiteColor); - background-color: rgba(0, 0, 0, .75); - padding: 15px; - margin: { - left: 25px; - right: 25px; - top: 25px; - }; - } - &:hover { - img { - transform: scale(1.05); - } - h3 { - margin-top: 0; - visibility: visible; - opacity: 1; - } - } -} -.works-box-btn { - text-align: center; - margin-top: 20px; -} -.single-works-item { - margin-bottom: 30px; - text-align: center; - position: relative; - overflow: hidden; - - img { - transition: var(--transition); - } - &::before { - content: ''; - position: absolute; - left: 0; - right: 0; - top: 0; - bottom: 0; - background-color: var(--startupMainColor); - z-index: 1; - opacity: 0; - visibility: hidden; - transition: .3s; - } - .content { - position: absolute; - left: 0; - right: 0; - top: 50%; - transform: translateY(-50%); - margin-top: 15px; - transition: var(--transition); - opacity: 0; - visibility: hidden; - z-index: 2; - padding: { - left: 20px; - right: 20px; - }; - .link-btn { - width: 45px; - height: 45px; - line-height: 45px; - color: var(--whiteColor); - border: 1px solid var(--whiteColor); - border-radius: 50%; - margin-bottom: 20px; - display: inline-block; - - &:hover { - color: var(--blackColor); - background-color: var(--whiteColor); - } - } - h3 { - font-size: 22px; - color: var(--whiteColor); - margin-bottom: 12px; - - a { - color: var(--whiteColor); - } - } - span { - display: block; - color: var(--whiteColor); - opacity: 0.9; - } - } - &:hover { - img { - transform: scale(1.1); - } - &::before { - opacity: 1; - margin: 10px; - visibility: visible; - } - .content { - opacity: 1; - visibility: visible; - margin-top: 0; - } - } - &.minimal-portfolio-color { - &::before { - background-color: var(--minimalPortfolioColor); - } - } -} -.showMoreItemsList + .button-box { - margin-bottom: 0; - text-align: start; - - button { - background-color: transparent; - border: 1px solid #d6d9dc; - color: var(--blackColor); - padding: 12px 45px; - transition: var(--transition); - display: inline-block; - width: auto; - margin-top: 10px; - border-radius: 0; - font: { - size: var(--fontSize); - weight: 500; - }; - &:hover { - background-color: var(--startupMainColor); - border-color: var(--startupMainColor); - color: var(--whiteColor); - } - } -} -.works-slides-style-one, .works-slides-style-two { - &.owl-theme { - .single-works-item, .works-box { - margin-bottom: 0; - } - .owl-nav { - opacity: 0; - margin-top: 0; - visibility: hidden; - transition: var(--transition); - - [class*=owl-] { - margin: 0; - background-color: var(--whiteColor); - color: var(--blackColor); - padding: 0 !important; - border-radius: 0; - transition: var(--transition); - border: none; - cursor: pointer; - position: absolute; - left: 25px; - top: 50%; - width: 45px; - height: 45px; - line-height: 45px; - border-radius: 50%; - transform: translateY(-50%); - font-size: 20px; - - &.owl-next { - left: auto; - right: 25px; - } - i { - line-height: 1; - } - &:hover { - background-color: var(--blackColor); - border-color: var(--blackColor); - color: var(--whiteColor); - } - } - } - &:hover { - .owl-nav { - opacity: 1; - visibility: visible; - } - } - .owl-dots { - margin-top: 40px; - - .owl-dot { - span { - width: 18px; - height: 18px; - border-radius: 50%; - transition: var(--transition); - margin: 0 5px; - } - &:hover, &.active { - span { - background-color: var(--startupMainColor); - } - } - } - } - } -} - -/*================================================ -What We Do Area CSS -=================================================*/ -.what-we-do-content { - .section-title { - text-align: start; - max-width: 100%; - margin: { - left: 0; - right: 0; - bottom: 30px; - }; - p { - max-width: 100%; - margin: { - left: 0; - right: 0; - }; - } - } - .single-what-we-do-box { - margin-bottom: 0; - } -} -.single-what-we-do-box { - margin-bottom: 30px; - - .icon { - display: block; - line-height: 1; - font-size: 45px; - margin-bottom: 25px; - color: var(--consultingMainColor); - } - h3 { - font-size: 20px; - margin-bottom: 12px; - } -} - -/*================================================ -Categories Area CSS -=================================================*/ -.single-categories-box { - margin-bottom: 30px; - overflow: hidden; - position: relative; - - img { - transition: var(--transition); - } - h3 { - margin-bottom: 0; - font-size: 20px; - position: absolute; - left: 25px; - top: 25px; - background-color: var(--whiteColor); - padding: 7px 20px; - clip-path: polygon(5% 0, 100% 0, 95% 100%, 0% 100%); - transition: var(--transition); - } - .link-btn { - display: block; - width: 100%; - height: 100%; - position: absolute; - left: 0; - top: 0; - z-index: 2; - } - &:hover { - img { - transform: scale(1.1); - } - h3 { - background-color: var(--blackColor); - color: var(--whiteColor); - } - } -} -.categories-box { - margin-bottom: 30px; - position: relative; - text-align: center; - overflow: hidden; - - img { - transition: var(--transition); - } - h3 { - top: 50%; - left: 50%; - margin-bottom: 0; - position: absolute; - transform: translateX(-50%) translateY(-50%); - font-size: 20px; - z-index: 1; - background-color: rgba(255, 255, 255, .80); - transition: var(--transition); - padding: { - top: 5px; - bottom: 5px; - left: 30px; - right: 30px; - }; - } - .link-btn { - position: absolute; - left: 0; - right: 0; - top: 0; - bottom: 0; - display: block; - z-index: 2; - } - &:hover { - img { - transform: scale(1.05); - } - h3 { - background-color: var(--whiteColor); - } - } -} -.categories-slides { - &.owl-theme { - .owl-nav { - margin-top: 0; - opacity: 0; - visibility: hidden; - transition: var(--transition); - - [class*=owl-] { - margin: 0; - background-color: transparent; - color: var(--optionalColor); - padding: 0 !important; - border-radius: 0; - transition: var(--transition); - border: none; - cursor: pointer; - position: absolute; - left: -45px; - top: 50%; - width: 35px; - height: 35px; - line-height: 35px; - border-radius: 50%; - transform: translateY(-50%); - border: 1px solid var(--optionalColor); - font-size: var(--fontSize); - - &.owl-next { - left: auto; - right: -45px; - } - i { - line-height: 1; - } - &:hover { - background-color: var(--blackColor); - border-color: var(--blackColor); - color: var(--whiteColor); - } - } - } - &:hover { - .owl-nav { - opacity: 1; - visibility: visible; - } - } - } -} - -/*================================================ -Who We Are Area CSS -=================================================*/ -.who-we-are-area { - .row { - margin: { - left: 0; - right: 0; - }; - .col-lg-6 { - padding: { - left: 0; - right: 0; - }; - } - } -} -.who-we-are-content { - padding: 40px; - background-color: #f3f4f7; - - .sub-title { - display: block; - margin-bottom: 10px; - color: var(--consultingMainColor); - font: { - family: var(--headingFontFamily); - weight: 600; - size: 14px; - }; - } - h2 { - margin-bottom: 15px; - line-height: 1.5; - font-size: 21px; - } - .default-btn { - margin-top: 10px; - } -} -.who-we-are-image { - text-align: center; - position: relative; - - .video-btn { - top: 50%; - left: 50%; - width: 80px; - height: 80px; - font-size: 30px; - border-radius: 50%; - position: absolute; - display: inline-block; - color: var(--blackColor); - background-color: var(--whiteColor); - transform: translateY(-50%) translateX(-50%); - - i { - position: absolute; - left: 0; - right: 0; - top: 50%; - transform: translateY(-50%); - } - &::after, &::before { - content: ''; - display: block; - position: absolute; - top: 0; - right: 0; - z-index: -1; - bottom: 0; - left: 0; - border-radius: 50%; - border: 1.5px solid var(--saasMainColor); - } - &::before { - animation: ripple 2s linear infinite - } - &::after { - animation: ripple 2s linear 1s infinite - } - } -} - -/*================================================ -Video Area CSS -=================================================*/ -.video-box { - text-align: center; - position: relative; - - img { - width: 100%; - } - .video-btn { - position: absolute; - left: 50%; - display: inline-block; - top: 40%; - transform: translateY(-40%) translateX(-50%); - width: 80px; - height: 80px; - background-color: var(--whiteColor); - border-radius: 50%; - color: var(--blackColor); - font-size: 30px; - - i { - position: absolute; - left: 0; - right: 0; - top: 50%; - transform: translateY(-50%); - } - &::after, &::before { - content: ''; - display: block; - position: absolute; - top: 0; - right: 0; - z-index: -1; - bottom: 0; - left: 0; - border-radius: 50%; - border: 2px solid var(--saasMainColor); - } - &::before { - animation: ripple 2s linear infinite - } - &::after { - animation: ripple 2s linear 1s infinite - } - } -} - -/*================================================ -Process Area CSS -=================================================*/ -.single-process-box { - margin-bottom: 30px; - text-align: center; - border: 1px dashed #e1e1e1; - transition: var(--transition); - padding: 40px 25px; - - img { - margin-bottom: 30px; - transition: var(--transition); - } - h3 { - margin-bottom: 12px; - font-size: 20px; - } - &:hover { - box-shadow: 3px 5px 25px 0 rgba(0,0,0,.1); - border-color: var(--whiteColor); - - img { - transform: scale(0.9); - } - } -} - -/*================================================ -Funfacts Area CSS -=================================================*/ -.funfacts-area { - &.bg-business-color { - background: var(--businessGradientColor); - } - &.bg-startup-color { - background: var(--startupMainColor); - - .single-funfacts-box { - &.without-bg-color { - border-color: var(--whiteColor); - } - } - } - &.bg-image { - background: { - color: var(--blackColor); - image: url(../../assets/img/bg8.jpg); - position: center center; - size: cover; - repeat: no-repeat; - }; - } - &.bg-f9f9f9 { - position: relative; - z-index: 1; - - &::before { - left: 0; - right: 0; - bottom: 0; - height: 50%; - z-index: -1; - content: ''; - position: absolute; - background-color: var(--whiteColor); - } - } -} -.single-funfacts-box { - margin-bottom: 30px; - color: var(--whiteColor); - position: relative; - z-index: 1; - overflow: hidden; - background-color: var(--blackColor); - padding: { - top: 40px; - bottom: 40px; - left: 85px; - right: 30px; - }; - .icon { - position: absolute; - left: 25px; - top: 50%; - transform: translateY(-50%); - color: var(--startupMainColor); - font-size: 45px; - } - h3 { - color: var(--whiteColor); - margin-bottom: 4px; - font-size: 40px; - - .odometer-formatting-mark { - display: none; - } - .sign { - position: relative; - top: 1px; - } - } - .sub-title { - display: block; - font-weight: 600; - } - .shape { - position: absolute; - right: 0; - top: 50%; - transform: translateY(-50%); - z-index: -1; - } - &.bg-white { - color: var(--optionalColor); - background-color: var(--whiteColor); - box-shadow: 3px 5px 25px 0 rgba(0,0,0,.1); - - .icon { - &.color-fd5444 { - color: #fd5444; - } - &.color-3251ad { - color: #3251ad; - } - &.color-62bd5e { - color: #62bd5e; - } - &.color-ff6720 { - color: #ff6720; - } - } - h3 { - color: var(--blackColor); - } - .shape { - opacity: .15; - } - } - &.without-bg-color { - background-color: transparent; - border-right: 1px dashed #a684f5; - margin-right: 40px; - padding: { - right: 0; - top: 15px; - bottom: 15px; - left: 65px; - }; - .icon { - left: 0; - color: var(--whiteColor); - } - } - &.text-center { - border-right: 2px dashed rgba(255, 255, 255, .20); - background-color: transparent; - padding: { - left: 0; - top: 20px; - bottom: 20px; - }; - } - &.consulting-color { - h3 { - color: var(--consultingMainColor); - } - } -} -.funfacts-inner { - background-color: var(--blackColor); - padding: { - left: 30px; - right: 30px; - }; - &.bg-app-image { - background: { - image: url(../../assets/img/bg4.jpg); - position: center center; - size: cover; - repeat: no-repeat; - }; - .single-funfacts-box { - &.without-bg-color { - padding: 0; - border: none; - text-align: center; - margin-right: 0; - } - } - } - &.it-agency-color { - background: var(--itAgencyGradientColor); - background: { - size: cover; - repeat: no-repeat; - position: center center; - image: url(../../assets/img/bg9.jpg); - }; - } - &.border-radius { - border-radius: 10px; - - &.ptb-70 { - padding-bottom: 40px; - } - } -} -.row { - .col-lg-3 { - &:last-child { - .single-funfacts-box { - &.without-bg-color, &.text-center { - border-right: none; - } - } - } - } -} - -/*================================================ -Products Area CSS -=================================================*/ -.products-area { - &.with-top-border { - border-top: 1px solid #eeeeee; - } -} -.single-products-box { - margin-bottom: 30px; - text-align: center; - - .image { - position: relative; - overflow: hidden; - - img { - transition: var(--transition); - } - .new { - position: absolute; - left: 12px; - top: 12px; - background-color: var(--blackColor); - color: var(--whiteColor); - width: 45px; - height: 45px; - text-align: center; - line-height: 45px; - border-radius: 50%; - z-index: 2; - font: { - size: 13px; - weight: 600; - }; - } - .sale { - position: absolute; - z-index: 2; - right: 12px; - top: 12px; - background-color: red; - color: var(--whiteColor); - width: 45px; - height: 45px; - text-align: center; - line-height: 45px; - border-radius: 50%; - font: { - size: 13px; - weight: 600; - }; - } - .buttons-list { - position: absolute; - text-align: center; - z-index: 1; - left: 0; - right: 0; - bottom: 20px; - padding-left: 0; - margin-bottom: 0; - list-style-type: none; - - li { - opacity: 0; - visibility: hidden; - display: inline-block; - transform: translateY(30px); - transition: all 0.3s ease-in-out 0s; - margin: { - left: 3px; - right: 3px; - }; - a { - display: inline-block; - font-size: 16px; - color: var(--blackColor); - position: relative; - width: 40px; - border-radius: 50%; - line-height: 39px; - background-color: var(--whiteColor); - height: 40px; - border: 1px solid #eeeeee; - - .tooltip-label { - right: 50%; - top: -15px; - transform: translateX(50%); - position: absolute; - padding: 0 10px; - line-height: 28px; - font-size: 12px; - letter-spacing: .3px; - visibility: hidden; - white-space: nowrap; - opacity: 0; - color: transparent; - background-color: transparent; - transition: all .2s ease-in-out; - background-color: var(--blackColor); - color: var(--whiteColor); - - &::before { - content: "\f0dd"; - color: var(--blackColor); - left: 50%; - position: absolute; - transform: translateX(-50%) rotate(0deg); - transition: all .2s ease-in-out; - bottom: -12px; - font: { - family: "Font Awesome 5 Free"; - variant-ligatures: normal; - variant-caps: normal; - style: normal; - weight: 900; - size: 20px; - }; - } - } - &:hover { - background-color: var(--blackColor); - border-color: var(--blackColor); - color: var(--whiteColor); - - .tooltip-label { - visibility: visible; - opacity: 1; - top: -45px; - } - } - } - &:nth-child(1) { - transition-delay: 0.1s; - } - &:nth-child(2) { - transition-delay: 0.2s; - } - &:nth-child(3) { - transition-delay: 0.3s; - } - } - } - } - .content { - margin-top: 25px; - - .rating { - margin-bottom: 12px; - - i { - color: #fec900; - line-height: 1; - } - } - h3 { - margin-bottom: 13px; - font-size: 20px; - } - .price { - span { - color: var(--blackColor); - font: { - size: 17px; - weight: 700; - }; - &.old-price { - color: var(--optionalColor); - text-decoration: line-through; - } - } - } - } - &:hover { - .image { - img { - transform: scale(1.05); - } - .buttons-list { - li { - transform: translateY(0); - visibility: visible; - opacity: 1; - } - } - } - } -} -.noke-grid-sorting { - margin-bottom: 40px; - - .result-count { - p { - .count { - font-weight: 700; - color: var(--blackColor); - } - } - } - .ordering { - text-align: end; - - label { - display: inline-block; - color: var(--optionalColor); - margin: { - bottom: 0; - right: 5px; - }; - } - select { - width: 215px; - height: 45px; - cursor: pointer; - line-height: 45px; - display: inline-block; - background: #f8f8f8; - border-color: #eeeeee; - color: var(--blackColor); - transition: var(--transition); - padding: { - top: 1px; - left: 12px; - }; - font: { - size: var(--fontSize); - weight: 600; - }; - } - } -} - -/*================================================ -Products Details Area CSS -=================================================*/ -.products-details-desc { - padding-left: 15px; - - h3 { - margin-bottom: 15px; - font-size: 20px; - } - .price { - color: var(--blackColor); - margin: { - top: 15px; - bottom: 12px; - }; - font: { - weight: 700; - size: 17px; - }; - .old-price { - text-decoration: line-through; - color: #9b9494; - font-weight: normal; - } - } - .products-review { - .rating { - display: inline-block; - padding-right: 3px; - font-size: 14px; - - i { - display: inline-block; - color: #f49f0b; - line-height: 1; - } - } - .rating-count { - display: inline-block; - color: var(--optionalColor); - line-height: initial; - position: relative; - top: 1px; - - &:hover { - color: var(--blackColor); - } - } - } - .products-meta { - margin-top: 20px; - - span { - display: block; - font-weight: 500; - margin-bottom: 10px; - color: var(--optionalColor); - - span { - display: inline-block; - margin-bottom: 0; - - &.sku { - color: var(--startupMainColor); - } - } - a { - display: inline-block; - color: var(--blackColor); - - &:hover, &:focus { - color: var(--startupMainColor); - } - } - &.in-stock { - color: green; - } - &:last-child { - margin-bottom: 0; - } - } - } - .products-add-to-cart { - margin-top: 25px; - - .quantities { - position: relative; - padding-left: 45px; - - .sub-title { - left: 0; - top: 50%; - display: block; - font-weight: 600; - position: absolute; - transform: translateY(-50%); - } - } - .input-counter { - display: block; - max-width: 120px; - min-width: 120px; - text-align: center; - position: relative; - margin-bottom: 25px; - - span { - top: 0; - width: 35px; - height: 100%; - cursor: pointer; - font-size: 15px; - line-height: 38px; - position: absolute; - color: var(--blackColor); - border: 1px solid #eeeeee; - background-color: transparent; - transition: var(--transition); - - i { - position: relative; - top: 1px; - } - &.minus-btn { - left: 0; - } - &.plus-btn { - right: 0; - } - &:hover { - color: var(--optionalColor); - } - } - input { - height: 40px; - outline: 0; - width: 100%; - display: block; - text-align: center; - color: var(--blackColor); - border: 1px solid #eeeeee; - background-color: transparent; - font: { - size: 17px; - weight: 600; - } - &::placeholder { - color: var(--blackColor); - } - } - } - } - .default-btn { - box-shadow: unset !important; - } - .social-share { - padding-left: 0; - list-style-type: none; - margin: { - bottom: 0; - top: 30px; - }; - li { - display: inline-block; - margin-right: 12px; - - span { - font-weight: 600; - position: relative; - top: -1px; - } - a { - line-height: 1; - font-size: 18px; - color: var(--optionalColor); - - &:hover { - color: var(--blackColor); - } - } - } - } -} -.products-details-tabs { - margin-top: 50px; - - .single-tabs-box { - margin-bottom: 40px; - - h2 { - text-align: center; - margin-bottom: 30px; - position: relative; - font-size: 22px; - z-index: 1; - - span { - display: inline-block; - background-color: var(--whiteColor); - padding: { - left: 20px; - right: 20px; - }; - } - &::before { - left: 0; - right: 0; - top: 50%; - z-index: -1; - height: 1px; - content: ''; - margin-top: 1px; - position: absolute; - background-color: #eeeeee; - transform: translateY(-50%); - } - } - &:last-child { - margin-bottom: 0; - } - .inner-box { - max-width: 800px; - margin: { - left: auto; - right: auto; - }; - h3 { - font-size: 20px; - margin-bottom: 15px; - } - ul { - margin: { - top: 20px; - bottom: 0; - }; - li { - font-weight: 500; - margin-bottom: 12px; - color: var(--optionalColor); - - &:last-child { - margin-bottom: 0; - } - } - } - .table-striped { - margin-bottom: 0; - - tbody { - tr { - td { - border: none; - padding: 15px; - color: var(--optionalColor); - font: { - weight: 500; - size: var(--fontSize); - }; - } - } - } - } - .products-review-comments { - margin-top: 40px; - - .user-review { - position: relative; - margin-bottom: 20px; - padding: 0 0 20px 110px; - border-bottom: 1px solid #eeeeee; - - img { - top: 0; - left: 0; - width: 90px; - height: 90px; - border-radius: 5px; - position: absolute; - } - .sub-comment { - margin-bottom: 8px; - font: { - weight: 600; - family: var(--headingFontFamily); - }; - } - .review-rating { - display: block; - margin-bottom: 8px; - - .review-stars { - display: inline-block; - - i { - color: #cecfd2; - display: inline-block; - - &.checked { - color: orange; - } - } - } - } - } - } - .review-form-wrapper { - margin-top: 30px; - - h3 { - margin-bottom: 10px; - } - .comment-notes { - span { - color: red; - } - } - form { - margin-top: 20px; - - .form-group { - margin-bottom: 25px; - text-align: start; - } - .rating { - text-align: start; - overflow: hidden; - max-width: 115px; - margin: { - top: -5px; - bottom: 25px; - }; - label { - float: right; - position: relative; - width: 23px; - height: 23px; - cursor: pointer; - - &:not(:first-of-type) { - padding-right: 5px; - } - &:before { - content: "\2605"; - transition: var(--transition); - font-size: 27px; - color: #CCCCCC; - line-height: 1; - } - } - input { - display: none; - } - input:checked ~ label:before, &:not(:checked) > label:hover:before, &:not(:checked) > label:hover ~ label:before { - color: #f6b500; - } - } - .comment-form-cookies-consent { - text-align: start; - margin-bottom: 0; - - [type="checkbox"]:checked, [type="checkbox"]:not(:checked) { - display: none; - } - [type="checkbox"]:checked + label, [type="checkbox"]:not(:checked) + label { - position: relative; - padding-left: 28px; - cursor: pointer; - line-height: 20px; - display: inline-block; - margin-bottom: 0; - color: var(--optionalColor); - } - [type="checkbox"]:checked + label:before, [type="checkbox"]:not(:checked) + label:before { - content: ''; - position: absolute; - left: 0; - top: 0; - width: 19px; - height: 19px; - transition: all 0.2s ease; - border: 1px solid #eeeeee; - border-radius: 3px; - background: var(--whiteColor); - } - [type="checkbox"]:checked + label:after, [type="checkbox"]:not(:checked) + label:after { - content: ''; - width: 8px; - height: 8px; - background: var(--startupMainColor); - position: absolute; - top: 6.5px; - left: 6px; - -webkit-transition: all 0.2s ease; - transition: all 0.2s ease; - } - [type="checkbox"]:not(:checked) + label:after { - opacity: 0; - -webkit-transform: scale(0); - transform: scale(0); - } - [type="checkbox"]:checked + label:after { - opacity: 1; - -webkit-transform: scale(1); - transform: scale(1); - } - [type="checkbox"]:hover + label:before { - border-color: var(--startupMainColor); - } - [type="checkbox"]:checked + label:before { - border-color: var(--startupMainColor); - } - } - button { - margin-top: 22px; - border: none; - display: inline-block; - text-align: center; - overflow: hidden; - color: var(--whiteColor); - background-color: var(--startupMainColor); - transition: var(--transition); - border-radius: 5px; - padding: 13px 40px; - box-shadow: 0 0.25rem 0.5rem rgba(0, 0, 0, 0.05), 0 1.5rem 2.2rem rgba(0, 0, 0, 0.1); - font: { - weight: 700; - size: var(--fontSize); - }; - &:hover { - background-color: var(--blackColor); - color: var(--whiteColor); - } - } - } - } - } - } -} - -/*================================================ -Cart Area CSS -=================================================*/ -.cart-table-desc { - table { - margin-bottom: 0; - - thead { - tr { - th { - border: none; - padding: 13px 20px; - vertical-align: middle; - color: var(--whiteColor); - background-color: var(--blackColor); - font: { - family: var(--headingFontFamily); - size: var(--fontSize); - weight: 600; - }; - } - } - } - tbody { - tr { - td { - color: var(--optionalColor); - vertical-align: middle; - font: { - size: 15px; - weight: 600; - }; - padding: { - left: 0; - right: 0; - top: 15px; - bottom: 15px; - }; - border: { - left: none; - right: none; - color: #ebebeb; - }; - &.product-thumbnail { - a { - display: inline-block; - - img { - width: 80px; - } - } - } - &.product-name { - a { - display: inline-block; - } - } - &.product-subtotal { - .remove { - top: 2px; - color: red; - line-height: 1; - font-size: 20px; - margin-left: 40px; - position: relative; - } - } - &.product-quantity { - .input-counter { - max-width: 120px; - min-width: 120px; - text-align: center; - display: inline-block; - position: relative; - - span { - top: 0; - width: 35px; - height: 100%; - font-size: 14px; - line-height: 37px; - position: absolute; - cursor: pointer; - color: var(--blackColor); - background-color: transparent; - transition: var(--transition); - border: 1px solid #eeeeee; - - i { - position: relative; - top: 1px; - } - &.minus-btn { - left: 0; - } - &.plus-btn { - right: 0; - } - &:hover { - color: var(--mainColor); - } - } - input { - height: 40px; - outline: 0; - width: 100%; - display: block; - text-align: center; - color: var(--blackColor); - border: 1px solid #eeeeee; - background-color: transparent; - font: { - size: 17px; - weight: 600; - } - &::placeholder { - color: var(--blackColor); - } - } - } - } - &.product-subtotal { - overflow: hidden; - } - } - &:last-child { - td { - border-bottom: none; - } - } - } - } - } -} -.cart-buttons-desc { - .shopping-coupon-code { - position: relative; - - .form-control { - height: 50px; - } - button { - top: 0; - right: 0; - height: 50px; - border: none; - padding: 0 25px; - position: absolute; - color: var(--whiteColor); - border-radius: 0 5px 5px 0; - transition: var(--transition); - background-color: var(--blackColor); - font: { - size: var(--fontSize); - weight: 700; - }; - &:hover { - background-color: var(--startupMainColor); - } - } - } - .default-btn { - box-shadow: unset; - } -} -.cart-totals-desc { - padding: 30px; - background-color: #f5f5f5; - - h3 { - padding: 16px 20px; - margin-bottom: 30px; - color: var(--whiteColor); - font-size: var(--fontSize); - background-color: var(--blackColor); - margin: { - top: -30px; - left: -30px; - right: -30px; - }; - } - ul { - padding-left: 0; - margin-bottom: 0; - list-style-type: none; - - li { - overflow: hidden; - display: block; - margin-bottom: 12px; - padding-bottom: 12px; - font-weight: 500; - color: var(--optionalColor); - border-bottom: 1px solid #ebebeb; - - span { - float: right; - } - &:last-child { - font-weight: 700; - color: var(--blackColor); - padding-bottom: 0; - margin-bottom: 0; - border-bottom: none; - } - } - } - .default-btn { - margin-top: 25px; - box-shadow: unset; - } -} - -/*================================================ -Checkout Area CSS -=================================================*/ -.billing-details-desc { - padding: 30px 30px 10px; - background-color: #f5f5f5; - - h3 { - font-size: 20px; - margin-bottom: 30px; - color: var(--whiteColor); - background-color: var(--blackColor); - padding: { - top: 17px; - left: 30px; - right: 30px; - bottom: 17px; - }; - margin: { - right: -30px; - left: -30px; - top: -30px; - }; - } - .form-group { - margin-bottom: 20px; - - label { - display: block; - font-weight: 500; - margin-bottom: 12px; - color: var(--blackColor); - - .required { - color: red; - } - } - .form-control { - background-color: var(--whiteColor) !important; - } - select { - background-color: var(--whiteColor); - height: 50px; - cursor: pointer; - border: none; - display: block; - width: 100%; - padding-left: 15px; - } - } -} -.order-details-desc { - padding: 30px; - background-color: #f5f5f5; - - h3 { - font-size: 20px; - margin-bottom: 30px; - color: var(--whiteColor); - background-color: var(--blackColor); - padding: { - left: 30px; - right: 30px; - top: 17px; - bottom: 17px; - }; - margin: { - left: -30px; - right: -30px; - top: -30px; - }; - } - .order-details { - padding-left: 0; - margin-bottom: 0; - list-style-type: none; - - li { - display: block; - font-weight: 500; - overflow: hidden; - margin-bottom: 12px; - padding-bottom: 12px; - color: var(--optionalColor); - border-bottom: 1px solid #ebebeb; - - span { - float: right; - } - &:last-child { - font-weight: 700; - margin-bottom: 0; - padding-bottom: 0; - border-bottom: none; - color: var(--blackColor); - } - } - } - .payment-method { - margin: { - top: 30px; - bottom: 20px; - }; - p { - margin-bottom: 12px; - - &:last-child { - margin-bottom: 0; - } - [type="radio"] { - &:checked, &:not(:checked) { - display: none; - } - } - [type="radio"] { - &:checked, &:not(:checked) { - + label { - padding-left: 27px; - cursor: pointer; - display: block; - color: var(--blackColor); - position: relative; - margin-bottom: 8px; - font: { - size: var(--fontSize); - weight: 700; - }; - &::before { - content: ''; - position: absolute; - left: 0; - top: 5px; - width: 18px; - height: 18px; - border: 1px solid #dddddd; - border-radius: 50%; - background: var(--whiteColor); - } - &::after { - content: ''; - width: 12px; - height: 12px; - background: var(--startupMainColor); - position: absolute; - top: 8px; - left: 3px; - border-radius: 50%; - transition: var(--transition); - } - } - } - } - [type="radio"] { - &:not(:checked) { - + label { - &::after { - opacity: 0; - visibility: hidden; - transform: scale(0); - } - } - } - } - [type="radio"] { - &:checked { - + label { - &::after { - opacity: 1; - visibility: visible; - transform: scale(1); - } - } - } - } - } - } - .form-check { - color: var(--optionalColor); - font-weight: 500; - - a { - color: var(--startupMainColor); - - &:hover { - text-decoration: underline; - } - } - } - .default-btn { - margin-top: 25px; - display: block; - width: 100%; - box-shadow: unset; - border-radius: 5px; - padding: { - top: 13px; - bottom: 13px; - left: 30px; - right: 30px; - }; - } -} - -/*================================================ -Testimonials Area CSS -=================================================*/ -.testimonials-area { - &.bg-image { - background: { - image: url(../../assets/img/bg10.jpg); - position: center center; - repeat: no-repeat; - size: cover; - }; - .section-title { - &.style-three { - h2 { - span { - background-color: #f7eee8; - } - } - } - } - } -} -.testimonials-inner { - background-color: var(--blackColor); - padding: { - left: 60px; - right: 60px; - }; - &.bg-app-image { - background: { - image: url(../../assets/img/bg5.jpg); - position: center center; - size: cover; - repeat: no-repeat; - }; - } - .testimonials-item { - max-width: 650px; - box-shadow: unset; - background-color: transparent; - padding: 0; - margin: { - left: auto; - right: auto; - }; - .icon { - color: var(--whiteColor); - } - p { - color: var(--whiteColor); - } - .info { - .title { - h3 { - color: var(--whiteColor); - } - span { - color: var(--whiteColor); - opacity: 0.9; - } - } - } - } - .testimonials-slides { - &.owl-theme { - .owl-nav { - [class*=owl-] { - margin: 0; - background-color: var(--whiteColor); - color: var(--appMainColor); - padding: 0 !important; - border-radius: 50%; - border: none; - font-size: 20px; - width: 50px; - height: 50px; - line-height: 50px; - - &:hover { - background-color: var(--blackColor); - color: var(--whiteColor); - } - } - } - } - } - &.it-agency-color { - background-color: transparent; - - .testimonials-item { - .icon { - color: var(--itAgencyMainColor); - } - p { - color: var(--blackColor); - } - .info { - .title { - h3 { - color: var(--blackColor); - } - span { - color: var(--optionalColor); - opacity: 1; - } - } - } - } - .testimonials-slides { - &.owl-theme { - .owl-nav { - [class*=owl-] { - background: var(--itAgencyGradientColor); - color: var(--whiteColor); - } - } - } - } - } - &.minimal-portfolio-color { - background-color: transparent; - - .testimonials-item { - .icon { - color: var(--minimalPortfolioColor); - } - p { - color: var(--blackColor); - } - .info { - .title { - h3 { - color: var(--blackColor); - } - span { - color: var(--optionalColor); - opacity: 1; - } - } - } - } - .testimonials-slides { - &.owl-theme { - .owl-nav { - [class*=owl-] { - background: #f9f9f9; - color: var(--blackColor); - - &:hover { - background-color: var(--minimalPortfolioColor); - color: var(--whiteColor); - } - } - } - } - } - } - &.shop-color { - background-color: transparent; - - .testimonials-item { - .icon { - color: var(--shopMainColor); - } - p { - color: var(--blackColor); - } - .info { - .title { - h3 { - color: var(--blackColor); - } - span { - color: var(--optionalColor); - opacity: 1; - } - } - } - } - .testimonials-slides { - &.owl-theme { - .owl-nav { - [class*=owl-] { - background: var(--whiteColor); - color: var(--blackColor); - - &:hover { - background-color: var(--blackColor); - color: var(--whiteColor); - } - } - } - } - } - } -} -.testimonials-item { - text-align: center; - background-color: var(--whiteColor); - padding: 30px; - box-shadow: 3px 5px 25px 0 rgba(0, 0, 0, .1); - - .icon { - line-height: 1; - margin-bottom: 25px; - color: var(--appMainColor); - display: block; - font-size: 45px; - } - p { - color: var(--blackColor); - font: { - size: 20px; - weight: 500; - }; - } - .info { - margin-top: 30px; - text-align: start; - - img { - display: inline-block !important; - width: 80px !important; - height: 80px; - border-radius: 50%; - margin-right: 10px; - } - .title { - margin-left: 10px; - - h3 { - font-size: 18px; - margin-bottom: 8px; - } - span { - display: block; - font-weight: 500; - color: var(--appMainColor); - opacity: .85; - } - } - } -} -.startup-testimonials-area { - .container-fluid { - max-width: 1400px; - } -} -.startup-testimonials-image { - z-index: 1; - text-align: center; - position: relative; - background-color: #2d2d37; - padding: { - top: 80px; - left: 80px; - bottom: 80px; - }; - img { - width: auto !important; - display: inline-block !important; - } -} -.startup-testimonials-content { - text-align: center; - padding: { - left: 40px; - right: 40px; - bottom: 100px; - }; - .icon { - line-height: 1; - margin-bottom: 20px; - color: var(--startupMainColor); - display: block; - font-size: 45px; - } - p { - color: var(--blackColor); - font: { - size: 18px; - weight: 600; - }; - } - .info { - margin-top: 25px; - padding-top: 25px; - border-top: 1px solid #eeeeee; - - h3 { - font-size: 18px; - margin-bottom: 8px; - } - span { - display: block; - font-weight: 500; - } - } -} -.startup-testimonials-slides { - &.owl-theme { - .owl-nav { - margin-top: 0; - position: absolute; - right: 22%; - bottom: 105px; - transform: translateX(22%); - - [class*=owl-] { - margin: 0 5px; - background-color: var(--startupMainColor); - color: var(--whiteColor); - padding: 8px 25px 7px !important; - border-radius: 0; - transition: var(--transition); - border: none; - cursor: pointer; - font-size: var(--fontSize); - - i { - line-height: 1; - } - &.owl-prev { - margin-left: 0; - } - &.owl-next { - margin-right: 0; - } - &:hover { - background-color: var(--blackColor); - color: var(--whiteColor); - } - } - } - } -} -.marketing-testimonials-area { - border-bottom: 1px solid #f0f0f0; -} -.marketing-testimonials-image { - text-align: center; - position: relative; - z-index: 2; - margin: { - right: 50px; - left: 50px; - }; - &::before { - left: 0; - right: 0; - top: 0; - bottom: 0; - z-index: -1; - content: ''; - position: absolute; - border-radius: 50%; - background-color: var(--marketingMainColor); - } - &::after { - left: 0; - right: 0; - top: 0; - bottom: 0; - z-index: -2; - content: ''; - position: absolute; - border-radius: 65% 35% 70% 30% / 64% 31% 69% 36%; - background-color: #ffac00; - } - img { - border-radius: 30% 70% 70% 30% / 30% 30% 70% 70%; - display: inline-block !important; - width: auto !important; - } -} -.marketing-testimonials-content { - text-align: center; - padding-bottom: 60px; - - .icon { - line-height: 1; - margin-bottom: 20px; - color: var(--marketingMainColor); - display: block; - font-size: 45px; - } - p { - color: var(--blackColor); - font: { - size: 18px; - weight: 600; - }; - } - .info { - margin-top: 25px; - - h3 { - font-size: 18px; - margin-bottom: 8px; - } - span { - display: block; - font-weight: 500; - } - } -} -.marketing-testimonials-slides { - &.owl-theme { - .owl-nav { - right: 22%; - margin-top: 0; - bottom: 100px; - position: absolute; - transform: translateX(22%); - - [class*=owl-] { - margin: 0 5px; - background-color: var(--marketingMainColor); - color: var(--whiteColor); - padding: 8px 25px 7px !important; - border-radius: 0; - transition: var(--transition); - border: none; - cursor: pointer; - font-size: var(--fontSize); - - i { - line-height: 1; - } - &.owl-prev { - margin-left: 0; - } - &.owl-next { - margin-right: 0; - } - &:hover { - background-color: var(--blackColor); - color: var(--whiteColor); - } - } - } - } -} -.business-testimonials-area { - background: var(--businessGradientColor); - background: { - image: url(../../assets/img/bg1.jpg); - position: center center; - size: cover; - repeat: no-repeat; - }; -} -.business-testimonials-image { - text-align: center; - position: relative; - margin-right: 30px; - z-index: 2; - - &::before { - left: 0; - right: 0; - top: 0; - bottom: 0; - z-index: -1; - content: ''; - position: absolute; - border-radius: 20% 80% 50% 50% / 20% 50% 50% 80%; - border: 2px solid var(--whiteColor); - } - &::after { - left: 0; - right: 0; - top: 0; - bottom: 0; - z-index: -2; - content: ''; - position: absolute; - border-radius: 65% 35% 70% 30% / 64% 31% 69% 36%; - background-color: #ffac00; - } - img { - border-radius: 30% 70% 70% 30% / 30% 30% 70% 70%; - display: inline-block !important; - width: auto !important; - } -} -.business-testimonials-content { - text-align: center; - - .icon { - line-height: 1; - margin-bottom: 25px; - color: var(--whiteColor); - display: block; - font-size: 45px; - } - p { - color: var(--whiteColor); - font: { - size: 20px; - weight: 500; - }; - } - .info { - margin-top: 30px; - - h3 { - font-size: 18px; - margin-bottom: 8px; - color: var(--whiteColor); - } - span { - display: block; - font-weight: 500; - color: var(--whiteColor); - opacity: .85; - } - } -} -.saas-testimonials-item { - border: 1px solid #242532; - background-color: rgba(4, 6, 17, .90); - padding: 30px; - - .info { - margin-bottom: 25px; - - img { - display: inline-block !important; - width: 80px !important; - height: 80px; - border-radius: 50%; - margin-right: 10px; - } - .title { - margin-left: 10px; - - h3 { - font-size: 18px; - margin-bottom: 8px; - color: var(--whiteColor); - } - span { - display: block; - font-weight: 600; - color: var(--saasMainColor); - } - } - } - p { - font-size: 16px; - color: var(--whiteColor); - } -} -.testimonials-slides { - &.owl-theme { - padding: { - left: 120px; - right: 120px; - }; - .owl-nav { - margin-top: 0; - - [class*=owl-] { - margin: 0; - background-color: transparent; - color: var(--whiteColor); - padding: 8px 25px 6px !important; - border-radius: 0; - transition: var(--transition); - border: none; - cursor: pointer; - position: absolute; - left: 0; - top: 50%; - transform: translateY(-50%); - border: 1px solid var(--whiteColor); - font-size: var(--fontSize); - - &.owl-next { - left: auto; - right: 0; - } - i { - line-height: 1; - } - &:hover { - background-color: var(--whiteColor); - color: var(--blackColor); - } - } - } - } -} -.saas-testimonials-slides { - &.owl-theme { - position: relative; - margin-top: -100px; - z-index: 1; - padding: { - left: 80px; - right: 80px; - }; - .owl-nav { - margin-top: 0; - - [class*=owl-] { - top: 50%; - margin: 0; - left: 30px; - border: none; - font-size: 20px; - cursor: pointer; - border-radius: 0; - position: absolute; - color: var(--whiteColor); - transform: translateY(-50%); - transition: var(--transition); - background-color: transparent !important; - - &.owl-next { - left: auto; - right: 30px; - } - i { - line-height: 1; - } - &:hover { - color: var(--saasMainColor); - } - } - } - } -} -.testimonials-box { - text-align: center; - border: 1px solid #d5edff; - padding: 30px; - margin-bottom: 30px; - transition: var(--transition); - - .icon { - width: 80px; - height: 80px; - line-height: 82px; - background-color: #d5edff; - border-radius: 50%; - font-size: 35px; - display: block; - color: #2ea7ff; - transition: var(--transition); - margin: { - left: auto; - right: auto; - bottom: 20px; - }; - } - p { - color: var(--blackColor); - font: { - size: 16px; - weight: 500; - }; - } - .info { - margin-top: 25px; - - h3 { - font-size: 18px; - margin-bottom: 8px; - } - span { - display: block; - font-weight: 500; - color: var(--personalPortfolioMainColor); - opacity: .85; - } - } - &:hover { - border-color: var(--personalPortfolioMainColor) !important; - - .icon { - background-color: #2ea7ff; - color: var(--whiteColor); - } - &.bg-ca83ff { - .icon { - color: var(--whiteColor); - background-color: #ca83ff; - } - } - &.bg-ff9f07 { - .icon { - color: var(--whiteColor); - background-color: #ff9f07; - } - } - } - &.bg-ca83ff { - border-color: #faf2ff; - - .icon { - background-color: #faf2ff; - color: #ca83ff; - } - } - &.bg-ff9f07 { - border-color: #fff5e6; - - .icon { - background-color: #fff5e6; - color: #ff9f07; - } - } -} - -/*================================================ -Team Area CSS -=================================================*/ -.team-area { - &.with-border { - border-top: 1px solid #f0f0f0; - } -} -.single-team-member { - background-color: #f9f4f0; - margin-bottom: 30px; - text-align: center; - - .content { - padding: 25px 20px; - z-index: 1; - position: relative; - transition: var(--transition); - - h3 { - transition: var(--transition); - font-size: 20px; - margin-bottom: 10px; - } - span { - display: block; - color: var(--startupMainColor); - transition: var(--transition); - } - .social { - padding-left: 0; - margin-bottom: 0; - list-style-type: none; - position: absolute; - left: 0; - right: 0; - bottom: 25px; - opacity: 0; - visibility: hidden; - transition: var(--transition); - - li { - display: inline-block; - margin: { - left: 7px; - right: 7px; - }; - a { - display: block; - font-size: 20px; - color: var(--whiteColor); - - &:hover { - color: var(--startupMainColor); - } - } - } - } - &::before { - content: ''; - position: absolute; - left: 0; - right: 0; - height: 40px; - background-color: var(--blackColor); - top: -40px; - z-index: -1; - transition: var(--transition); - opacity: 0; - visibility: hidden; - } - } - &:hover, &.active { - .content { - background-color: var(--blackColor); - - h3 { - color: var(--whiteColor); - transform: translateY(-40px); - } - span { - color: var(--whiteColor); - transform: translateY(-40px); - } - .social { - opacity: 1; - visibility: visible; - } - &::before { - opacity: 1; - visibility: visible; - } - } - } - &.marketing-color { - .content { - span { - color: var(--marketingMainColor); - } - .social { - li { - a { - &:hover { - color: var(--marketingMainColor); - } - } - } - } - &::before { - background-color: var(--marketingMainColor); - } - } - &:hover, &.active { - .content { - background-color: var(--marketingMainColor); - - span { - color: var(--whiteColor); - } - } - } - } - &.business-color { - .content { - position: relative; - z-index: 1; - - span { - color: var(--businessMainColor); - } - .social { - li { - a { - &:hover { - color: var(--whiteColor); - } - } - } - } - &::after { - position: absolute; - left: 0; - right: 0; - top: 0; - bottom: 0; - z-index: -1; - background: var(--businessGradientColor); - content: ''; - transition: var(--transition); - opacity: 0; - visibility: hidden; - } - &::before { - background: var(--businessGradientColor); - } - } - &:hover, &.active { - .content { - background-color: transparent; - - &::after { - opacity: 1; - visibility: visible; - } - span { - color: var(--whiteColor); - } - } - } - } - &.bg-ffefef { - background-color: #ffefef; - } - &.bg-f0efff { - background-color: #f0efff; - } - &.it-agency-color { - .content { - position: relative; - z-index: 1; - - span { - color: var(--itAgencyMainColor); - } - .social { - li { - a { - &:hover { - color: var(--whiteColor); - } - } - } - } - &::after { - position: absolute; - left: 0; - right: 0; - top: 0; - bottom: 0; - z-index: -1; - background: var(--itAgencyGradientColor); - content: ''; - transition: var(--transition); - opacity: 0; - visibility: hidden; - } - &::before { - background: var(--itAgencyGradientColor); - } - } - &:hover, &.active { - .content { - background-color: transparent; - - &::after { - opacity: 1; - visibility: visible; - } - span { - color: var(--whiteColor); - } - } - } - } - &.border-radius { - border-radius: 10px; - - img { - border-radius: 10px 10px 0 0; - } - } -} -.single-team-box { - text-align: center; - margin-bottom: 30px; - - .image { - position: relative; - - .social { - position: absolute; - left: 0; - right: 0; - bottom: 0; - padding-left: 0; - margin-bottom: 15px; - list-style-type: none; - transition: var(--transition); - opacity: 0; - visibility: hidden; - padding: 25px; - - li { - display: inline-block; - margin: { - left: 2px; - right: 2px; - }; - a { - display: block; - width: 35px; - height: 35px; - border-radius: 50%; - line-height: 35px; - background-color: var(--whiteColor); - color: var(--blackColor); - - &:hover { - background-color: var(--startupMainColor); - color: var(--whiteColor); - } - } - } - } - } - .content { - margin-top: 22px; - - h3 { - font-size: 20px; - margin-bottom: 8px; - } - span { - display: block; - color: var(--startupMainColor); - } - } - &:hover { - .image { - .social { - opacity: 1; - margin-bottom: 0; - visibility: visible; - } - } - } - &.consulting-color { - .image { - .social { - li { - a { - &:hover { - background-color: var(--consultingMainColor); - } - } - } - } - } - .content { - span { - color: var(--consultingMainColor); - } - } - } -} -.team-member { - margin-bottom: 30px; - text-align: center; - - .content { - z-index: 1; - padding: 25px 20px; - position: relative; - transition: var(--transition); - background-color: var(--whiteColor); - box-shadow: 0 5px 20px rgba(34, 34, 34, 0.1); - margin: { - left: 15px; - top: -30px; - right: 15px; - }; - h3 { - transition: var(--transition); - font-size: 20px; - margin-bottom: 10px; - } - span { - display: block; - color: var(--startupMainColor); - transition: var(--transition); - } - .social { - padding-left: 0; - margin-bottom: 0; - list-style-type: none; - position: absolute; - left: 0; - right: 0; - bottom: 25px; - opacity: 0; - visibility: hidden; - transition: var(--transition); - - li { - display: inline-block; - margin: { - left: 7px; - right: 7px; - }; - a { - display: block; - font-size: 20px; - color: var(--whiteColor); - - &:hover { - color: var(--startupMainColor); - } - } - } - } - &::before { - content: ''; - position: absolute; - left: 0; - right: 0; - height: 40px; - background-color: var(--blackColor); - top: -40px; - z-index: -1; - transition: var(--transition); - opacity: 0; - visibility: hidden; - } - } - &:hover, &.active { - .content { - background-color: var(--blackColor); - - h3 { - color: var(--whiteColor); - transform: translateY(-40px); - } - span { - color: var(--whiteColor); - transform: translateY(-40px); - } - .social { - opacity: 1; - visibility: visible; - } - &::before { - opacity: 1; - visibility: visible; - } - } - } - &.marketing-color { - .content { - span { - color: var(--marketingMainColor); - } - .social { - li { - a { - &:hover { - color: var(--whiteColor); - } - } - } - } - &::before { - background-color: var(--marketingMainColor); - } - } - &:hover, &.active { - .content { - background-color: var(--marketingMainColor); - - span { - color: var(--whiteColor); - } - } - } - } - &.business-color { - .content { - position: relative; - z-index: 1; - - span { - color: var(--businessMainColor); - } - .social { - li { - a { - &:hover { - color: var(--whiteColor); - } - } - } - } - &::after { - position: absolute; - left: 0; - right: 0; - top: 0; - bottom: 0; - z-index: -1; - background: var(--businessGradientColor); - content: ''; - transition: var(--transition); - opacity: 0; - visibility: hidden; - } - &::before { - background: var(--businessGradientColor); - } - } - &:hover, &.active { - .content { - background-color: transparent; - - &::after { - opacity: 1; - visibility: visible; - } - span { - color: var(--whiteColor); - } - } - } - } - &.bg-ffefef { - background-color: #ffefef; - } - &.bg-f0efff { - background-color: #f0efff; - } - &.it-agency-color { - .content { - position: relative; - z-index: 1; - - span { - color: var(--itAgencyMainColor); - } - .social { - li { - a { - &:hover { - color: var(--whiteColor); - } - } - } - } - &::after { - position: absolute; - left: 0; - right: 0; - top: 0; - bottom: 0; - z-index: -1; - background: var(--itAgencyGradientColor); - content: ''; - transition: var(--transition); - opacity: 0; - visibility: hidden; - } - &::before { - background: var(--itAgencyGradientColor); - } - } - &:hover, &.active { - .content { - background-color: transparent; - - &::after { - opacity: 1; - visibility: visible; - } - span { - color: var(--whiteColor); - } - } - } - } - &.border-radius { - border-radius: 10px; - - img { - border-radius: 10px 10px 0 0; - } - } -} -.team-box { - margin-bottom: 30px; - text-align: center; - position: relative; - overflow: hidden; - - img { - transition: var(--transition); - } - .content { - left: 0; - right: 0; - z-index: 1; - bottom: -100px; - padding: 25px; - transition: .3s; - position: absolute; - opacity: 0; - visibility: hidden; - background: var(--startupMainColor); - - h3 { - font-size: 20px; - margin-bottom: 12px; - color: var(--whiteColor); - } - span { - display: block; - color: var(--whiteColor); - margin-bottom: 15px; - font-weight: 600; - } - .social { - padding-left: 0; - margin-bottom: 0; - list-style-type: none; - - li { - display: inline-block; - margin: { - left: 7px; - right: 7px; - }; - a { - display: block; - font-size: 20px; - color: var(--whiteColor); - - &:hover { - color: var(--whiteColor); - opacity: 0.85; - } - } - } - } - } - &:hover, &.active { - img { - transform: scale(1.1); - } - .content { - bottom: 0; - opacity: 1; - visibility: visible; - } - } - &.business-color { - .content { - background: var(--businessGradientColor); - } - } -} - -/*================================================ -How It Works Area CSS -=================================================*/ -.how-it-works-area { - .section-title { - max-width: 668px; - } -} -.how-it-works-content { - padding-right: 30px; - - ul { - padding-left: 0; - margin-bottom: 0; - list-style-type: none; - - li { - margin-bottom: 30px; - position: relative; - padding-left: 65px; - - i { - position: absolute; - left: 0; - top: 0; - font-size: 45px; - background: var(--saasGradientColor); - -webkit-background-clip: text; - -moz-background-clip: text; - background-clip: text; - -webkit-text-fill-color: transparent; - } - h3 { - font-size: 20px; - margin-bottom: 12px; - } - &:last-child { - margin-bottom: 0; - } - } - } - &.white-color { - ul { - li { - color: var(--whiteColor); - - h3 { - color: var(--whiteColor); - } - p { - color: var(--whiteColor); - opacity: 0.9; - } - } - } - } -} -.how-it-works-image { - text-align: center; -} - -/*================================================ -Skills Area CSS -=================================================*/ -.skills-area { - &.with-border { - border-top: 1px solid #f0f0f0; - } -} -.single-skills-box { - margin-bottom: 30px; - text-align: center; - padding: 30px; - background-color: #ffefef; - - &.bg-eaf6ff { - background-color: #eaf6ff; - } - &.bg-fff5e6 { - background-color: #fff5e6; - } - &.bg-f0efff { - background-color: #f0efff; - } -} - -/*================================================ -Expertise Area CSS -=================================================*/ -.expertise-area { - border-bottom: 1px solid #f0f0f0; -} -.expertise-box { - margin-bottom: 30px; - - .icon { - display: block; - width: 80px; - height: 80px; - font-size: 40px; - line-height: 80px; - color: var(--personalPortfolioMainColor); - border-radius: 10px; - transition: var(--transition); - margin-bottom: 25px; - text-align: center; - background-color: #f0efff; - - &.bg-fff5e6 { - background-color: #fff5e6; - } - &.bg-f3f9e7 { - background-color: #f3f9e7; - } - &.bg-ffefef { - background-color: #ffefef; - } - &.bg-eaf6ff { - background-color: #eaf6ff; - } - &.bg-faf2ff { - background-color: #faf2ff; - } - } - h3 { - font-size: 20px; - margin-bottom: 12px; - } - &:hover { - .icon { - background-color: var(--personalPortfolioMainColor); - color: var(--whiteColor); - } - } -} - -/*================================================ -CTA Area CSS -=================================================*/ -.cta-area { - position: relative; - z-index: 1; - background: { - color: var(--blackColor); - position: center center; - repeat: no-repeat; - size: cover; - image: url(../../assets/img/cta-bg1.jpg); - }; - &::before { - content: ''; - position: absolute; - left: 0; - right: 0; - top: 0; - bottom: 0; - z-index: -1; - background-color: #000000; - opacity: .75; - } -} -.cta-content { - text-align: center; - max-width: 720px; - margin: { - left: auto; - right: auto; - }; - h2 { - color: var(--whiteColor); - margin-bottom: 0; - line-height: 1.4; - font-size: 40px; - } - p { - color: var(--whiteColor); - max-width: 600px; - opacity: 0.9; - margin: { - right: auto; - left: auto; - top: 20px; - }; - } - .default-btn { - margin-top: 15px; - - &:hover { - background-color: var(--whiteColor); - color: var(--blackColor); - - i { - color: var(--blackColor); - } - } - } -} -.call-to-action-area { - &.bg-image { - background: { - image: url(../../assets/img/bg7.jpg); - position: right center; - repeat: no-repeat; - size: cover; - }; - } -} -.call-to-action-content { - color: var(--whiteColor); - - h2 { - color: var(--whiteColor); - margin-bottom: 0; - line-height: 1.4; - font-size: 37px; - } -} -.call-to-action-btn { - text-align: end; - - .default-btn { - &:hover { - background-color: var(--whiteColor); - color: var(--blackColor); - - i { - color: var(--blackColor); - } - } - } -} -.call-to-action-inner { - background-color: var(--blackColor); - border-radius: 10px; - padding: { - left: 50px; - right: 50px; - }; - &.it-agency-color { - background: var(--itAgencyGradientColor); - - .default-btn { - background: var(--whiteColor); - color: var(--blackColor); - - i { - color: var(--blackColor); - } - &:hover { - background: var(--blackColor); - color: var(--whiteColor); - - i { - color: var(--whiteColor); - } - } - } - } - &.startup-color { - background: var(--startupMainColor); - - .default-btn { - background: var(--whiteColor); - color: var(--blackColor); - - i { - color: var(--blackColor); - } - &:hover { - background: var(--blackColor); - color: var(--whiteColor); - - i { - color: var(--whiteColor); - } - } - } - } -} - -/*================================================ -Timeline/Short Brief Area CSS -=================================================*/ -.short-brief-area { - border-bottom: 1px solid #f0f0f0; -} -.short-brief-content { - margin-bottom: 30px; - - .timeline { - width: 100%; - padding-left: 0; - margin-bottom: 0; - list-style-type: none; - } - .timeline-item { - padding-left: 40px; - position: relative; - - &:last-child { - .timeline-content { - padding-bottom: 0; - } - } - &:not(.period):hover { - .timeline-marker { - &::before { - background: transparent; - border: 3px solid var(--blackColor); - } - } - } - } - .timeline-marker { - position: absolute; - width: 15px; - bottom: 0; - top: 0; - left: 0; - - &::before { - transition: background 0.3s ease-in-out, border 0.3s ease-in-out; - background: var(--blackColor); - border: 3px solid transparent; - border-radius: 100%; - position: absolute; - display: block; - height: 15px; - width: 15px; - content: ""; - top: 4px; - left: 0; - } - &::after { - background: #eeeeee; - position: absolute; - display: block; - content: ""; - top: 24px; - bottom: 0; - left: 6px; - width: 3px; - } - } - .timeline-content { - padding-bottom: 30px; - - h3 { - font-size: 20px; - margin-bottom: 13px; - } - } - .timeline-info { - .sub-title { - color: var(--optionalColor); - margin-bottom: 12px; - font-weight: 500; - display: block; - - span { - display: inline-block; - font: { - size: 18px; - weight: 700; - }; - } - } - } -} - -/*================================================ -App Download Area CSS -=================================================*/ -.app-download-area { - background: { - image: url(../../assets/img/bg6.jpg); - position: center center; - repeat: no-repeat; - size: cover; - }; -} -.app-download-image { - text-align: center; - padding-right: 30px; -} -.app-download-content { - .sub-title { - display: block; - margin-bottom: 12px; - color: var(--businessMainColor); - font: { - family: var(--headingFontFamily); - weight: 600; - size: 14px; - }; - } - h2 { - margin-bottom: 15px; - font-size: 40px; - } - .btn-box { - margin-top: 25px; - - .store-btn { - display: inline-block; - background-color: var(--whiteColor); - position: relative; - color: var(--optionalColor); - padding: 11px 30px 11px 70px; - margin-right: 15px; - border-radius: 5px; - box-shadow: 0 0.25rem 0.5rem rgba(0, 0, 0, 0.02), 0 1.5rem 2.2rem rgba(0, 0, 0, 0.04); - font: { - size: 13.5px; - weight: 600; - }; - img { - position: absolute; - left: 18px; - top: 50%; - transform: translateY(-50%); - color: var(--blackColor); - font: { - size: 40px; - weight: normal; - }; - } - span { - display: block; - color: var(--blackColor); - margin-top: 2px; - font: { - size: 18px; - weight: 700; - }; - } - &:last-child { - margin-right: 0; - } - } - } -} - -/*================================================ -Trending Style Area CSS -=================================================*/ -.trending-style-image { - position: relative; - margin-right: 15px; - padding: { - bottom: 100px; - right: 150px; - }; - img { - &:nth-child(2) { - position: absolute; - right: 0; - bottom: 0; - width: 315px; - } - } -} -.trending-style-content { - padding-left: 15px; - - .sub-title { - display: block; - margin-bottom: 12px; - color: var(--shopMainColor); - font: { - family: var(--headingFontFamily); - weight: 600; - size: 14px; - }; - } - h2 { - margin-bottom: 16px; - font-size: 40px; - } - h3 { - font-size: 20px; - line-height: 1.4; - margin-bottom: 15px; - } - .default-btn { - margin-top: 10px; - } -} - -/*================================================ -Pricing Area CSS -=================================================*/ -.pricing-area { - &.with-black-border { - border-top: 1px solid #12141a; - } -} -.single-pricing-box { - padding: 40px; - margin-bottom: 30px; - border: 1px dashed #eeeeee; - background-color: var(--whiteColor); - box-shadow: 3px 5px 25px 0 rgba(0, 0, 0, .1); - transition: var(--transition); - - .pricing-header { - margin-bottom: 25px; - padding-bottom: 25px; - border-bottom: 1px solid #eeeeee; - - h3 { - color: var(--marketingMainColor); - margin-bottom: 12px; - line-height: 1; - font: { - weight: 700; - size: 45px; - }; - span { - color: var(--optionalColor); - font: { - size: var(--fontSize); - weight: normal; - }; - } - } - .sub-title { - display: block; - font-weight: 700; - color: var(--blackColor); - } - } - .features-list { - margin-bottom: 25px; - padding-left: 0; - list-style-type: none; - - li { - margin-bottom: 12px; - color: var(--optionalColor); - font-family: var(--headingFontFamily); - position: relative; - padding-left: 25px; - - i { - position: absolute; - left: 0; - top: 5px; - color: var(--marketingMainColor); - - &.close { - color: red; - } - } - &:last-child { - margin-bottom: 0; - } - } - } - .default-btn { - display: block; - width: 100%; - text-align: center; - padding: { - left: 35px; - right: 35px; - top: 14px; - bottom: 14px; - }; - &:hover { - color: var(--whiteColor); - background-color: #ffac00; - } - } - &:hover { - border-color: var(--marketingMainColor); - } -} -.pricing-box { - margin-bottom: 30px; - text-align: center; - background-color: var(--whiteColor); - box-shadow: 3px 5px 25px 0 rgba(0, 0, 0, .1); - padding: 30px; - - .pricing-header { - background: var(--appMainColor); - margin: -30px -30px 30px; - padding: 30px; - position: relative; - z-index: 1; - overflow: hidden; - - h3 { - margin-bottom: 15px; - font-size: 20px; - color: var(--whiteColor); - } - .price { - color: var(--whiteColor); - margin-bottom: 12px; - line-height: 1; - font: { - weight: 700; - size: 45px; - }; - span { - opacity: 0.9; - font: { - size: var(--fontSize); - weight: normal; - }; - } - } - &::before { - width: 400px; - height: 400px; - content: ''; - position: absolute; - left: 50%; - transform: translateX(-50%); - border-radius: 50%; - bottom: 10px; - background-color: #0084ff; - opacity: 0.1; - z-index: -1; - transition: var(--transition); - } - } - .features-list { - padding-left: 0; - margin-bottom: 30px; - list-style-type: none; - - li { - margin-bottom: 12px; - color: var(--optionalColor); - font-family: var(--headingFontFamily); - position: relative; - - &.unactive { - text-decoration: line-through; - color: #9b9dbb; - } - &:last-child { - margin-bottom: 0; - } - } - } - .default-btn { - background: transparent; - color: var(--blackColor); - border: 1px solid var(--appMainColor); - box-shadow: unset; - - i { - color: var(--blackColor); - } - &:hover { - background: var(--appMainColor); - border-color: var(--appMainColor); - color: var(--whiteColor); - - i { - color: var(--whiteColor); - } - } - } - &.saas-color { - .pricing-header { - background: var(--saasGradientColor); - - &::before { - background-color: var(--appMainColor); - } - } - .default-btn { - border-color: #4d4d57;; - - &:hover { - background: var(--saasMainColor); - border-color: var(--saasMainColor); - } - } - } - &.bg-black { - box-shadow: unset; - background-color: #040611; - border: 1px solid #272836; - transition: var(--transition); - - .pricing-header { - transition: var(--transition); - background: transparent; - border-bottom: 1px solid #272836; - padding: 0 0 30px; - margin: { - top: 0; - left: 0; - right: 0; - }; - &::before { - display: none; - } - } - .features-list { - color: var(--whiteColor); - - li { - color: var(--whiteColor); - - &.unactive { - color: #5c5656; - } - } - } - .default-btn { - color: var(--whiteColor); - - i { - color: var(--whiteColor); - } - } - } - &:hover { - .pricing-header { - &::before { - bottom: -185%; - } - } - } - &.active { - .default-btn { - box-shadow: 0 0.25rem 0.5rem rgba(0, 0, 0, 0.05), 0 1.5rem 2.2rem rgba(0, 0, 0, 0.1); - background: var(--appGradientColor); - color: var(--whiteColor); - border: none; - - i { - color: var(--whiteColor); - } - &.saas-color { - background: var(--saasGradientColor); - } - } - } -} -.pricing-tabs { - margin-top: -10px; - - .nav { - padding-left: 0; - margin-bottom: 50px; - list-style-type: none; - justify-content: center; - border-bottom: none; - - .nav-item { - .nav-link { - background-color: var(--whiteColor); - position: relative; - z-index: 1; - color: var(--blackColor); - border-radius: 0; - border: none; - padding: 11px 35px; - font: { - size: var(--fontSize); - weight: 700; - }; - &::before { - content: ''; - position: absolute; - left: 0; - right: 0; - top: 0; - bottom: 0; - z-index: -1; - background: var(--saasGradientColor); - transition: var(--transition); - opacity: 0; - visibility: hidden; - } - &:hover, &.active { - color: var(--whiteColor); - - &::before { - opacity: 1; - visibility: visible; - } - } - } - &:first-child { - .nav-link { - border-radius: 5px 0 0 5px; - - &::before { - border-radius: 5px 0 0 5px; - } - } - } - &:last-child { - .nav-link { - border-radius: 0 5px 5px 0; - - &::before { - border-radius: 0 5px 5px 0; - } - } - } - } - } -} -.pricing-item { - padding: 30px; - overflow: hidden; - position: relative; - text-align: center; - margin-bottom: 30px; - background-color: #f3f4f7; - transition: var(--transition); - - .pricing-header { - border-bottom: 1px solid #e5e4e4; - transition: var(--transition); - margin: -30px 0 30px; - padding: 30px; - - h3 { - transition: var(--transition); - margin-bottom: 15px; - font-size: 20px; - } - .price { - color: var(--consultingMainColor); - margin-bottom: 12px; - line-height: 1; - font: { - weight: 700; - size: 45px; - }; - span { - opacity: 0.9; - color: var(--optionalColor); - transition: var(--transition); - font: { - size: var(--fontSize); - weight: normal; - }; - } - } - } - .features-list { - padding-left: 0; - margin-bottom: 30px; - list-style-type: none; - - li { - margin-bottom: 12.5px; - font-family: var(--headingFontFamily); - - &.unactive { - text-decoration: line-through; - color: #b0b1c0; - } - &:last-child { - margin-bottom: 0; - } - } - } - .ribbon { - top: -10px; - right: -25px; - width: 150px; - height: 150px; - overflow: hidden; - position: absolute; - - span { - background-color: var(--whiteColor); - text-transform: uppercase; - color: var(--blackColor); - transform: rotate(45deg); - text-align: center; - position: absolute; - display: block; - width: 225px; - left: -25px; - top: 30px; - padding: { - top: 8px; - bottom: 8px; - }; - font: { - size: var(--fontSize); - weight: 700; - }; - } - } - &.active, &:hover { - color: var(--whiteColor); - background-color: var(--blackColor); - - .pricing-header { - border-bottom-color: #464c59; - - h3 { - color: var(--whiteColor); - } - .price { - span { - color: var(--whiteColor); - } - } - } - .default-btn { - background-color: var(--whiteColor); - color: var(--blackColor); - - i { - color: var(--blackColor); - } - } - } - &.border-radius { - border-radius: 10px; - background-color: #f9f9f9; - } - &.it-agency-color { - .pricing-header { - border-bottom: none; - background-color: #fff5e6; - margin: { - left: -30px; - right: -30px; - }; - h3 { - color: var(--blackColor); - } - .price { - color: var(--blackColor); - } - } - .features-list { - color: var(--blackColor); - - li { - color: var(--blackColor); - - &.unactive { - color: #b0b1c0; - } - } - } - .default-btn { - background-color: var(--blackColor); - color: var(--whiteColor); - - i { - color: var(--whiteColor); - } - } - &:hover { - .pricing-header { - .price { - span { - color: var(--optionalColor); - } - } - } - } - &.active { - background-color: #f9f9f9; - - .pricing-header { - background: var(--itAgencyGradientColor); - - h3 { - color: var(--whiteColor); - } - .price { - color: var(--whiteColor); - - span { - color: var(--whiteColor); - } - } - } - .default-btn { - background: var(--itAgencyGradientColor); - color: var(--whiteColor); - - i { - color: var(--whiteColor); - } - } - } - } - &.startup-color { - .pricing-header { - .price { - color: var(--startupMainColor); - } - } - } -} - -/*================================================ -App Screenshot Area CSS -=================================================*/ -.app-screenshot-area { - background: var(--appGradientColor); - position: relative; - overflow: hidden; - z-index: 1; - - .section-title { - h2 { - color: var(--whiteColor); - } - p { - color: var(--whiteColor); - } - } - &::before { - content: ''; - position: absolute; - left: 0; - right: 0; - bottom: 0; - height: 200px; - z-index: -1; - background-color: var(--whiteColor); - } - .overlay { - position: absolute; - left: 0; - right: 0; - top: 0; - bottom: 0; - z-index: -2; - - &::before { - width: 650px; - height: 650px; - position: absolute; - left: -3%; - border-radius: 30% 70% 70% 30% / 30% 30% 70% 70%; - top: -25%; - content: ''; - background-color: #0084ff; - opacity: 0.10; - animation: border-transform 10s linear infinite alternate forwards; - } - &::after { - right: -3%; - bottom: 0; - content: ''; - opacity: 0.10; - width: 600px; - height: 600px; - position: absolute; - border-radius: 30% 70% 70% 30% / 30% 30% 70% 70%; - background-color: #0084ff; - animation: border-transform 10s linear infinite alternate forwards; - } - } -} -.single-sccrenshot-item { - text-align: center; -} -.screenshot-wrap { - position: relative; - - .screenshot-frame { - z-index: 2; - border-radius: 20px; - display: block; - width: 241px; - height: 504px; - position: absolute; - top: 0; - bottom: 0; - margin: 10px 0; - left: 50%; - transform: translateX(-50%); - background: { - image: url(../../assets/img/screenshot/frame.png); - repeat: no-repeat; - size: 100% 100%; - }; - } -} -.screenshot-slides { - margin: { - top: -10px; - bottom: -10px; - }; - &.owl-theme { - .owl-nav { - margin-top: 0; - - [class*=owl-] { - margin: 0; - background-color: var(--whiteColor); - color: var(--appMainColor); - transition: var(--transition); - border: none; - cursor: pointer; - position: absolute; - left: -40px; - top: 50%; - width: 40px; - line-height: 40px; - height: 40px; - border-radius: 50%; - transform: translateY(-50%); - font-size: 18px; - - &.owl-next { - left: auto; - right: -40px; - } - i { - line-height: 1; - } - &:hover { - background-color: var(--blackColor); - color: var(--whiteColor); - } - } - } - } -} - -/*================================================ -Facility Area CSS -=================================================*/ -.facility-content { - padding-right: 50px; - - .item { - margin-bottom: 30px; - position: relative; - padding-left: 65px; - - &:last-child { - margin-bottom: 0; - } - i { - position: absolute; - font-size: 45px; - left: 0; - top: 0; - } - h3 { - font-size: 20px; - margin-bottom: 12px; - } - } -} - -/*================================================ -Latest Posts Area CSS -=================================================*/ -.latest-posts-area { - .section-title { - &.style-four { - padding-bottom: 8px; - margin: { - top: -7px; - bottom: 30px; - }; - } - } -} -.single-latest-post-box { - margin-bottom: 30px; - - .post-image { - overflow: hidden; - - img { - transition: var(--transition); - } - } - .post-content { - padding: { - top: 25px; - left: 25px; - right: 25px; - }; - .tag { - margin-bottom: 12px; - display: inline-block; - position: relative; - font-weight: 600; - color: var(--blackColor); - } - .meta { - padding-left: 0; - margin-bottom: 13px; - list-style-type: none; - - li { - display: inline-block; - margin-right: 15px; - position: relative; - padding-left: 22px; - color: var(--optionalColor); - - i { - position: absolute; - left: 0; - top: 4px; - color: var(--blackColor); - } - a { - color: var(--optionalColor); - - &:hover { - color: var(--blackColor); - } - } - } - } - h3 { - margin-bottom: 12px; - line-height: 1.4; - font-size: 25px; - } - .link-btn { - font-weight: 600; - position: relative; - display: inline-block; - padding-right: 12px; - - i { - position: absolute; - right: 0; - top: 7px; - font-size: 12px; - } - &::before { - content: ''; - position: absolute; - right: 0; - bottom: 0; - width: 0%; - height: 1px; - background-color: var(--blackColor); - transition: var(--transition); - } - &:hover { - padding-right: 15px; - color: var(--blackColor); - - &::before { - width: 100%; - right: auto; - left: 0; - } - } - } - } - &:hover { - .post-image { - img { - transform: scale(1.1); - } - } - } -} - -/*================================================ -Partner Area CSS -=================================================*/ -.partner-area { - &.bg-business-color { - background: var(--businessGradientColor); - } - &.with-top-border { - border-top: 1px solid #f0f0f0; - } - &.bg-it-agency-color { - background: var(--itAgencyGradientColor); - } - &.bg-1b2232 { - .section-title { - h2 { - color: var(--whiteColor); - } - } - } -} -.partner-item { - text-align: center; - - a { - img { - width: auto !important; - display: inline-block !important; - } - } -} - -/*================================================ -Clients Area CSS -=================================================*/ -.single-clients-box { - margin-bottom: 30px; - text-align: center; - background-color: var(--whiteColor); - - a { - padding: 30px; - - img { - transition: var(--transition); - } - } - &:hover { - a { - img { - transform: scale(1.05); - } - } - } -} - -/*================================================ -Featured Video Area CSS -=================================================*/ -.single-featured-video-box { - margin-bottom: 30px; - - .image { - position: relative; - overflow: hidden; - - img { - transition: var(--transition); - } - .video-btn { - position: absolute; - left: 15px; - bottom: 15px; - color: var(--whiteColor); - font-weight: 600; - - i { - display: inline-block; - width: 40px; - height: 40px; - color: var(--blackColor); - background-color: var(--whiteColor); - text-align: center; - border-radius: 50%; - line-height: 41px; - margin-right: 10px; - transition: var(--transition); - } - &:hover { - i { - background-color: var(--blackColor); - color: var(--whiteColor); - } - } - } - } - .content { - margin-top: 25px; - - .tag { - margin-bottom: 12px; - display: inline-block; - position: relative; - font-weight: 600; - color: var(--blackColor); - } - .meta { - padding-left: 0; - margin-bottom: 13px; - list-style-type: none; - - li { - display: inline-block; - margin-right: 15px; - position: relative; - padding-left: 22px; - color: var(--optionalColor); - - i { - position: absolute; - left: 0; - top: 4px; - color: var(--blackColor); - } - a { - color: var(--optionalColor); - - &:hover { - color: var(--blackColor); - } - } - } - } - h3 { - margin-bottom: 0; - line-height: 1.4; - font-size: 25px; - } - } - &:hover { - img { - transform: scale(1.1); - } - } -} -.featured-video-item-list { - .single-featured-video-item { - margin-bottom: 30px; - - .row { - margin: { - left: 0; - right: 0; - }; - .col-lg-4, .col-lg-8 { - padding: { - left: 0; - right: 0; - }; - } - } - .image { - height: 100%; - position: relative; - background: { - position: center center; - repeat: no-repeat; - size: cover; - }; - &.bg1 { - background-image: url(../../assets/img/featured-video/featured-video2.jpg); - } - &.bg2 { - background-image: url(../../assets/img/featured-video/featured-video3.jpg); - } - &.bg3 { - background-image: url(../../assets/img/featured-video/featured-video4.jpg); - } - &.bg4 { - background-image: url(../../assets/img/featured-video/featured-video5.jpg); - } - img { - display: none; - } - .link-btn { - left: 0; - right: 0; - top: 0; - bottom: 0; - z-index: 1; - display: block; - position: absolute; - } - .video-btn { - color: var(--whiteColor); - position: absolute; - bottom: 10px; - left: 10px; - z-index: 2; - font: { - size: 14px; - weight: 600; - }; - i { - display: inline-block; - width: 35px; - height: 35px; - color: var(--blackColor); - background-color: var(--whiteColor); - text-align: center; - border-radius: 50%; - line-height: 36px; - margin-right: 5px; - transition: var(--transition); - } - &:hover { - i { - background-color: var(--blackColor); - color: var(--whiteColor); - } - } - } - } - .content { - padding: { - left: 25px; - top: 9.5px; - bottom: 9.5px; - }; - .meta { - padding-left: 0; - margin-bottom: 13px; - list-style-type: none; - - li { - display: inline-block; - margin-right: 15px; - position: relative; - padding-left: 22px; - color: var(--optionalColor); - - i { - position: absolute; - left: 0; - top: 4px; - color: var(--blackColor); - } - a { - color: var(--optionalColor); - - &:hover { - color: var(--blackColor); - } - } - } - } - h3 { - margin-bottom: 0; - line-height: 1.4; - font-size: 20px; - } - } - } -} - -/*================================================ -Blog Area CSS -=================================================*/ -.blog-area { - &.with-border { - border-top: 1px solid #f0f0f0; - } - &.with-black-border { - border-top: 1px solid #12141a; - } -} -.single-blog-post { - margin-bottom: 30px; - position: relative; - overflow: hidden; - - img { - transition: var(--transition); - } - .content { - left: 0; - right: 0; - bottom: 0; - z-index: 2; - padding: 25px; - position: absolute; - - .meta { - padding-left: 0; - margin-bottom: 13px; - list-style-type: none; - - li { - display: inline-block; - margin-right: 15px; - color: var(--whiteColor); - position: relative; - padding-left: 22px; - - i { - position: absolute; - left: 0; - top: 4px; - color: var(--startupMainColor); - } - a { - color: var(--whiteColor); - } - } - } - h3 { - color: var(--whiteColor); - margin-bottom: 13px; - font-size: 20px; - line-height: 1.4; - - a { - color: var(--whiteColor); - - &:hover { - color: var(--startupMainColor); - } - } - } - .link-btn { - font-weight: 500; - position: relative; - opacity: 0.85; - color: var(--whiteColor); - padding: { - right: 12px; - bottom: 2px; - }; - i { - position: absolute; - right: 0; - top: 7px; - font-size: 12px; - } - &::before { - content: ''; - position: absolute; - right: 0; - bottom: 0; - width: 0%; - height: 1px; - background-color: #eeeeee; - transition: var(--transition); - } - &:hover { - opacity: 1; - padding-right: 15px; - - &::before { - width: 100%; - right: auto; - left: 0; - } - } - } - } - &::before { - position: absolute; - height: 100%; - content: ""; - width: 100%; - z-index: 1; - left: 0; - top: 0; - background: linear-gradient(to top, rgba(35, 35, 37, 0.9) 0, rgba(35, 35, 37, 0.5) 50%, rgba(22, 22, 23, 0) 75%, rgba(0, 0, 0, 0) 100%); - } - &:hover { - img { - transform: scale(1.05); - } - } -} -.blog-section-title { - margin-bottom: 30px; - - h2 { - margin-bottom: 0; - font-size: 40px; - } - p { - margin-top: 15px; - } - .sub-title { - display: block; - margin-bottom: 12px; - color: var(--startupMainColor); - font: { - family: var(--headingFontFamily); - weight: 600; - size: 14px; - }; - &.marketing-color { - color: var(--marketingMainColor); - } - } - .default-btn { - margin-top: 10px; - } -} -.single-post-item { - margin-bottom: 30px; - background-color: var(--whiteColor); - box-shadow: 3px 5px 25px 0 rgba(0, 0, 0, .1); - - .post-content { - padding: 25px; - - .tag { - margin-bottom: 14px; - display: inline-block; - position: relative; - padding-left: 24px; - font-weight: 600; - color: var(--appMainColor); - - i { - position: absolute; - left: 0; - top: 4px; - } - } - .meta { - padding-left: 0; - margin-bottom: 13px; - list-style-type: none; - - li { - display: inline-block; - margin-right: 15px; - position: relative; - padding-left: 22px; - color: var(--optionalColor); - - i { - position: absolute; - left: 0; - top: 4px; - color: var(--marketingMainColor); - } - a { - color: var(--optionalColor); - - &:hover { - color: var(--marketingMainColor); - } - } - } - } - h3 { - margin-bottom: 14px; - line-height: 1.4; - font-size: 20px; - } - .link-btn { - font-weight: 600; - position: relative; - display: inline-block; - padding-right: 12px; - - i { - position: absolute; - right: 0; - top: 7px; - font-size: 12px; - } - &::before { - content: ''; - position: absolute; - right: 0; - bottom: 0; - width: 0%; - height: 1px; - background-color: var(--marketingMainColor); - transition: var(--transition); - } - &:hover { - padding-right: 15px; - color: var(--marketingMainColor); - - &::before { - width: 100%; - right: auto; - left: 0; - } - } - } - } - &.border-radius { - border-radius: 10px; - - .post-image { - border-radius: 10px 10px 0 0; - - a { - border-radius: 10px 10px 0 0; - - img { - border-radius: 10px 10px 0 0; - } - } - } - } - &.business-color { - .post-content { - .meta { - li { - i { - color: var(--businessMainColor); - } - a { - &:hover { - color: var(--businessMainColor); - } - } - } - } - .link-btn { - &::before { - background-color: var(--businessMainColor); - } - &:hover { - color: var(--businessMainColor); - } - } - } - } - &.app-color { - .post-content { - .meta { - li { - i { - color: var(--appMainColor); - } - a { - &:hover { - color: var(--appMainColor); - } - } - } - } - .link-btn { - &::before { - background-color: var(--appMainColor); - } - &:hover { - color: var(--appMainColor); - } - } - } - } - &.saas-color { - .post-content { - .meta { - li { - i { - color: var(--saasMainColor); - } - a { - &:hover { - color: var(--saasMainColor); - } - } - } - } - .link-btn { - &::before { - background-color: var(--saasMainColor); - } - &:hover { - color: var(--saasMainColor); - } - } - } - } - &.bg-black { - background-color: #040611; - box-shadow: unset; - border: 1px solid #272836; - transition: var(--transition); - - .post-content { - .tag { - color: var(--saasMainColor); - } - .meta { - color: var(--whiteColor); - - li { - color: var(--whiteColor); - - i { - color: var(--saasMainColor); - } - a { - color: var(--whiteColor); - - &:hover { - color: var(--saasMainColor); - } - } - } - } - h3 { - color: var(--whiteColor); - - a { - color: var(--whiteColor); - - &:hover { - color: var(--saasMainColor); - } - } - } - p { - color: var(--whiteColor); - opacity: 0.9; - } - .link-btn { - color: var(--whiteColor); - - &::before { - background: var(--saasGradientColor); - } - &:hover { - color: var(--whiteColor); - } - } - } - &:hover { - border-color: var(--whiteColor); - } - } - &.bg-faf2ff { - background-color: #faf2ff; - box-shadow: unset; - } - &.bg-fff5e6 { - background-color: #fff5e6; - box-shadow: unset; - } - &.bg-eaf6ff { - background-color: #eaf6ff; - box-shadow: unset; - } - &.personal-portfolio-color { - .post-content { - .meta { - li { - i { - color: var(--personalPortfolioMainColor); - } - a { - &:hover { - color: var(--personalPortfolioMainColor); - } - } - } - } - .link-btn { - &::before { - background-color: var(--personalPortfolioMainColor); - } - &:hover { - color: var(--personalPortfolioMainColor); - } - } - } - } - &.consulting-color { - .post-content { - .meta { - li { - i { - color: var(--consultingMainColor); - } - a { - &:hover { - color: var(--consultingMainColor); - } - } - } - } - .link-btn { - &::before { - background-color: var(--consultingMainColor); - } - &:hover { - color: var(--consultingMainColor); - } - } - } - } - &.it-agency-color { - .post-content { - .tag { - color: var(--optionalColor); - - i { - color: var(--itAgencyMainColor); - } - } - .meta { - li { - i { - color: var(--itAgencyMainColor); - } - a { - &:hover { - color: var(--itAgencyMainColor); - } - } - } - } - .link-btn { - &::before { - background-color: var(--itAgencyMainColor); - } - &:hover { - color: var(--itAgencyMainColor); - } - } - } - } - &.without-box-shadow { - box-shadow: unset; - - .post-content { - padding-bottom: 0; - - .meta { - li { - i { - color: var(--blackColor); - } - a { - &:hover { - color: var(--blackColor); - } - } - } - } - .link-btn { - &::before { - background-color: var(--blackColor); - } - &:hover { - color: var(--blackColor); - } - } - } - } - &.startup-color { - .post-content { - .tag { - color: var(--startupMainColor); - } - .meta { - li { - i { - color: var(--startupMainColor); - } - a { - &:hover { - color: var(--startupMainColor); - } - } - } - } - .link-btn { - &::before { - background-color: var(--startupMainColor); - } - &:hover { - color: var(--startupMainColor); - } - } - } - } -} - -/*================================================ -Blog Details Area CSS -=================================================*/ -.blog-details-desc { - .article-content { - margin-top: 30px; - - .entry-meta { - margin-bottom: 15px; - - ul { - padding-left: 0; - margin-bottom: 0; - list-style-type: none; - - li { - display: inline-block; - margin-right: 20px; - color: var(--optionalColor); - font-weight: 500; - position: relative; - padding-left: 22px; - - i { - position: absolute; - left: 0; - top: 4px; - color: var(--startupMainColor); - } - &:last-child { - margin-right: 0; - } - } - } - } - h3 { - font-size: 22px; - margin: { - bottom: 15px; - top: 25px; - }; - } - .wp-block-gallery { - &.columns-3 { - padding-left: 0; - list-style-type: none; - display: flex; - flex-wrap: wrap; - margin: { - right: -10px; - left: -10px; - bottom: 30px; - top: 30px; - } - li { - flex: 0 0 33.3333%; - max-width: 33.3333%; - padding: { - right: 10px; - left: 10px; - } - figure { - margin-bottom: 0; - } - } - } - } - .features-list { - margin: { - top: 25px; - bottom: 30px; - }; - li { - margin-bottom: 15px; - color: var(--optionalColor); - font-weight: 500; - - &:last-child { - margin-bottom: 0; - } - } - } - } - .article-footer { - display: flex; - flex-wrap: wrap; - margin-top: 30px; - padding-top: 30px; - border-top: 1px solid #eeeeee; - - .article-tags { - flex: 0 0 50%; - max-width: 50%; - - p { - line-height: 1; - margin-bottom: 0; - color: var(--blackColor); - font-weight: 600; - text-transform: uppercase; - } - a { - display: inline-block; - margin-left: 10px; - background-color: #f9f9f9; - color: var(--blackColor); - border-radius: 30px; - padding: 7px 20px; - - &:hover { - background-color: var(--startupMainColor); - color: var(--whiteColor); - } - } - } - .article-share { - flex: 0 0 50%; - max-width: 50%; - - .social { - padding-left: 0; - list-style-type: none; - text-align: end; - margin-bottom: 0; - - li { - display: inline-block; - - span { - display: inline-block; - margin-right: 3px; - font-weight: 600; - } - a { - display: block; - width: 32px; - height: 32px; - line-height: 32px; - border-radius: 50%; - background-color: var(--startupMainColor); - color: var(--whiteColor); - border: 1px solid var(--startupMainColor); - text-align: center; - font-size: 14px; - margin-left: 2px; - - &:hover, &:focus { - color: var(--startupMainColor); - background-color: transparent; - } - &.facebook { - background-color: #3b5998; - border-color: #3b5998; - color: var(--whiteColor); - - &:hover, &:focus { - color: #3b5998; - background-color: transparent; - } - } - &.twitter { - background-color: #1da1f2; - border-color: #1da1f2; - color: var(--whiteColor); - - &:hover, &:focus { - color: #1da1f2; - background-color: transparent; - } - } - &.linkedin { - background-color: #007bb5; - border-color: #007bb5; - color: var(--whiteColor); - - &:hover, &:focus { - color: #007bb5; - background-color: transparent; - } - } - &.instagram { - background-color: #c13584; - border-color: #c13584; - color: var(--whiteColor); - - &:hover, &:focus { - color: #c13584; - background-color: transparent; - } - } - } - } - } - } - } -} -blockquote, .blockquote { - z-index: 1; - overflow: hidden; - position: relative; - background-color: #fafafa; - padding: 40px 50px !important; - margin: { - bottom: 20px; - top: 20px; - }; - p { - line-height: 1.7; - margin-bottom: 0; - color: var(--blackColor); - font: { - weight: 700; - style: italic; - size: 17px !important; - }; - } - cite { - display: none; - } - &::after { - top: 0; - left: 0; - bottom: 0; - width: 3px; - content: ''; - position: absolute; - background-color: var(--startupMainColor); - margin: { - top: 20px; - bottom: 20px; - }; - } -} -.comments-area { - margin-top: 30px; - - .comments-title { - font-size: 22px; - margin-bottom: 30px; - line-height: initial; - } - ol, ul { - padding: 0; - margin: 0; - list-style-type: none; - } - .comment-list { - padding: 0; - margin: 0; - list-style-type: none; - } - .children { - margin-left: 20px; - } - .comment-body { - border-bottom: 1px dashed #eeeeee; - padding-left: 70px; - color: var(--blackColor); - margin-bottom: 20px; - padding-bottom: 20px; - - .reply { - margin-top: 15px; - - a { - border: 1px dashed #ded9d9; - color: var(--blackColor); - display: inline-block; - padding: 5px 20px 6px; - border-radius: 30px; - font: { - size: 13px; - weight: 700; - }; - &:hover { - color: var(--whiteColor); - background-color: var(--startupMainColor); - border-color: var(--startupMainColor); - } - } - } - } - .comment-author { - font-size: 16px; - margin-bottom: 6px; - position: relative; - z-index: 2; - - .avatar { - height: 50px; - left: -65px; - position: absolute; - width: 50px; - top: 4px; - } - .says { - display: none; - } - } - .comment-metadata { - margin-bottom: .7em; - color: var(--optionalColor); - letter-spacing: 0.01em; - font: { - size: 13px; - weight: 500; - }; - } - .comment-respond { - margin-top: 30px; - - .comment-reply-title { - margin-bottom: 0; - font-size: 22px; - - #cancel-comment-reply-link { - display: inline-block; - } - } - .comment-form { - overflow: hidden; - } - .comment-notes { - margin: { - bottom: 20px; - top: 10px; - }; - .required { - color: red; - } - } - .comment-form-comment { - float: left; - width: 100%; - } - label { - display: none; - } - input[type="date"], input[type="time"], input[type="datetime-local"], input[type="week"], input[type="month"], input[type="text"], input[type="email"], input[type="url"], input[type="password"], input[type="search"], input[type="tel"], input[type="number"], textarea { - outline: 0; - width: 100%; - border: none; - height: 50px; - display: block; - font-size: 15px; - border-radius: 3px; - padding: 1px 0 0 15px; - color: var(--blackColor); - background-color: #f9f9f9; - - &::placeholder { - color: var(--optionalColor); - transition: var(--transition); - } - &:focus { - &::placeholder { - color: transparent; - } - } - } - textarea { - height: auto !important; - padding-top: 15px; - } - .comment-form-author { - float: left; - width: 50%; - padding-right: 10px; - margin-bottom: 20px; - } - .comment-form-email { - float: left; - width: 50%; - padding-left: 12px; - margin-bottom: 20px; - } - .comment-form-url { - float: left; - width: 100%; - margin-bottom: 20px; - } - .comment-form-cookies-consent { - width: 100%; - float: left; - position: relative; - padding-left: 20px; - margin: { - bottom: 20px; - top: 15px; - }; - input { - position: absolute; - left: 0; - top: 6px; - } - label { - margin: 0; - display: inline-block; - color: var(--optionalColor); - font: { - weight: normal; - size: var(--fontSize); - }; - } - } - .form-submit { - float: left; - width: 100%; - - input { - border: none; - cursor: pointer; - border-radius: 4px; - padding: 10px 30px; - display: inline-block; - color: var(--whiteColor); - background: var(--startupMainColor); - transition: var(--transition); - font: { - weight: 700; - size: var(--fontSize); - }; - &:hover, &:focus { - color: var(--whiteColor); - background-color: var(--blackColor); - } - } - } - } -} - -/*================================================ -Widget Area CSS -=================================================*/ -.widget-area { - .widget { - margin-bottom: 35px; - - .widget-title { - border-bottom: 1px solid #eeeeee; - padding-bottom: 12px; - margin-bottom: 30px; - position: relative; - font-size: 20px; - - &::before { - left: 0; - width: 70px; - height: 1px; - content: ''; - bottom: -1px; - position: absolute; - background-color: var(--blackColor); - } - } - &:last-child { - margin-bottom: 0; - } - } - .widget_search { - box-shadow: 0px 0px 29px 0px rgba(102, 102, 102, 0.1); - background-color: var(--whiteColor); - padding: 15px; - - form { - position: relative; - - label { - display: block; - margin-bottom: 0; - } - .screen-reader-text { - display: none; - } - .search-field { - outline: 0; - width: 100%; - height: 50px; - display: block; - padding: 0 0 0 15px; - transition: var(--transition); - border: 1px solid #eeeeee; - background-color: transparent; - - &:focus { - border-color: var(--startupMainColor); - } - } - button { - position: absolute; - right: 0; - outline: 0; - bottom: 0; - height: 50px; - width: 50px; - border: none; - color: var(--whiteColor); - background-color: var(--startupMainColor); - transition: var(--transition); - - &:hover { - color: var(--whiteColor); - background-color: var(--blackColor); - } - } - } - } - .widget_about_author { - .about-author { - transition: var(--transition); - border: 1px solid #eeeeee; - text-align: center; - padding: 30px; - - .main-image { - width: 100px; - } - p { - margin: { - bottom: 15px; - top: 25px; - }; - } - &:hover { - border-color: var(--blackColor); - } - } - } - .widget_noke_posts_thumb { - position: relative; - overflow: hidden; - - .item { - margin-bottom: 20px; - position: relative; - padding-left: 115px; - - .thumb { - top: 0; - left: 0; - width: 100px; - float: unset; - height: 100%; - display: block; - position: absolute; - - .fullimage { - width: 100px; - height: 100%; - display: inline-block; - background: { - repeat: no-repeat; - size: cover !important; - position: center center !important; - }; - &.bg1 { - background-image: url(../../assets/img/blog/blog-img1.jpg); - } - &.bg2 { - background-image: url(../../assets/img/blog/blog-img2.jpg); - } - &.bg3 { - background-image: url(../../assets/img/blog/blog-img3.jpg); - } - &.bg4 { - background-image: url(../../assets/img/blog/blog-img4.jpg); - } - } - &::before, &::after { - content: ''; - z-index: 1; - top: 50%; - left: 50%; - opacity: 0; - position: absolute; - background-color: var(--whiteColor); - transform: translate(-50%, -50%); - transition: all .8s cubic-bezier(.2, 1, .22, 1); - } - &::before { - width: 40px; - height: 1px; - left: 100%; - } - &::after { - height: 40px; - width: 1px; - top: 0; - } - } - .info { - .title { - font-size: 16px; - line-height: 1.5; - margin-bottom: 8px; - - a { - display: inline-block; - } - } - .date { - padding-left: 20px; - position: relative; - color: var(--optionalColor); - - i { - position: absolute; - left: 0; - top: 3px; - } - } - } - &:last-child { - margin-bottom: 0; - } - &:hover { - .thumb { - &::before, &::after { - opacity: 1; - top: 50%; - left: 50%; - } - } - } - } - } - .widget_follow_us { - ul { - padding-left: 0; - margin-bottom: 0; - list-style-type: none; - - li { - margin-bottom: 15px; - - a { - display: block; - position: relative; - color: var(--whiteColor); - background-color: var(--blackColor); - padding: { - right: 15px; - top: 10px; - bottom: 10px; - left: 55px; - }; - i { - position: absolute; - left: 14px; - top: 50%; - font-size: 18px; - line-height: 1; - transform: translateY(-50%); - } - &::before { - content: ''; - position: absolute; - left: 42px; - top: 0; - height: 100%; - width: 1px; - opacity: 0.3; - background-color: var(--whiteColor); - } - &.facebook { - background-color: #39569e; - } - &.twitter { - background-color: #52aaf4; - } - &.linkedin { - background-color: #0185ae; - } - &.instagram { - background-color: #c8359d; - } - } - &:last-child { - margin-bottom: 0; - } - } - } - } - .widget_recent_posts { - .item { - margin-bottom: 15px; - padding-bottom: 15px; - border-bottom: 1px solid #eeeeee; - - .tag { - position: relative; - margin-bottom: 8px; - display: inline-block; - color: var(--blackColor); - } - .title { - font-size: 16px; - line-height: 1.5; - margin-bottom: 10px; - - a { - display: inline-block; - } - } - .date { - padding-left: 20px; - position: relative; - color: var(--optionalColor); - - i { - position: absolute; - left: 0; - top: 3px; - } - } - } - } - .widget_tag_cloud { - .tagcloud { - margin-bottom: -8px; - - a { - display: inline-block; - border: 1px solid #eeeeee; - padding: 6px 15px; - color: var(--optionalColor); - margin: { - right: 8px; - bottom: 8px; - }; - font: { - size: 14px !important; - weight: 600; - }; - &:hover { - background-color: var(--blackColor); - color: var(--whiteColor); - border-color: var(--blackColor); - } - } - } - } - .widget_newsletter { - background-color: #f6f7f9; - border: 1px solid #eeeeee; - text-align: center; - padding: 30px; - - h4 { - font-size: 20px; - margin-bottom: 10px; - } - .newsletter-form { - margin-top: 20px; - - .input-newsletter { - display: block; - width: 100%; - background-color: var(--whiteColor); - border: 1px solid #eeeeee; - height: 50px; - padding-left: 15px; - color: var(--blackColor); - transition: var(--transition); - - &:focus { - border-color: var(--blackColor); - } - } - button { - display: block; - width: 100%; - text-align: center; - margin-top: 15px; - background-color: var(--blackColor); - color: var(--whiteColor); - border: none; - transition: var(--transition); - padding: 13px 30px; - font: { - size: var(--fontSize); - weight: 700; - }; - &:hover { - background-color: var(--optionalColor); - } - } - } - } - .widget_categories { - ul { - padding-left: 0; - margin-bottom: 0; - list-style-type: none; - - li { - margin-bottom: 12px; - position: relative; - padding-left: 15px; - - &::before { - left: 0; - top: 50%; - width: 8px; - height: 8px; - content: ''; - position: absolute; - border-radius: 50%; - transform: translateY(-50%); - background-color: var(--optionalColor); - } - a { - font-weight: 500; - display: inline-block; - color: var(--optionalColor); - - &:hover { - color: var(--startupMainColor); - } - } - &:last-child { - margin-bottom: 0; - } - } - } - } - .widget_archive { - ul { - padding-left: 0; - margin-bottom: 0; - list-style-type: none; - - li { - margin-bottom: 12px; - position: relative; - padding-left: 15px; - - &::before { - left: 0; - top: 50%; - width: 8px; - height: 8px; - content: ''; - position: absolute; - border-radius: 50%; - transform: translateY(-50%); - background-color: var(--optionalColor); - } - a { - font-weight: 500; - display: inline-block; - color: var(--optionalColor); - - &:hover { - color: var(--startupMainColor); - } - } - &:last-child { - margin-bottom: 0; - } - } - } - } - .widget_colors { - ul { - padding-left: 0; - margin-bottom: 0; - list-style-type: none; - - li { - display: block; - margin-bottom: 12px; - border-bottom: 1px dashed #eeeeee; - padding-bottom: 12px; - - a { - display: flex; - align-items: center; - - span { - display: block; - color: var(--optionalColor); - - &:nth-child(1) { - width: 17px; - height: 17px; - font-size: 0; - margin-right: 8px; - letter-spacing: 0; - border-radius: 50%; - transition: var(--transition); - - &.gray { - background-color: gray; - } - &.red { - background-color: red; - } - &.green { - background-color: green; - } - &.black { - background-color: black; - } - &.brown { - background-color: brown - } - } - } - &:hover { - span { - &:nth-child(1) { - transform: scale(1.2); - } - } - } - } - } - } - } - .widget_price_filter { - .collection_filter_by_price { - .irs-handle { - cursor: pointer; - } - .irs--flat .irs-from, .irs--flat .irs-to, .irs--flat .irs-single { - background-color: var(--startupMainColor); - padding: 1px 5px 1px 11.5px; - - &::before { - border-top-color: var(--startupMainColor); - } - &::after { - content: '$'; - position: absolute; - left: 5px; - top: 0.5px; - } - } - .irs--flat .irs-bar { - background-color: var(--startupMainColor); - } - .irs--flat .irs-handle>i:first-child { - background-color: var(--startupMainColor); - } - .irs--flat .irs-min, .irs--flat .irs-max { - padding: 1px 3px 1px 9.5px; - - &::before { - content: '$'; - position: absolute; - left: 3px; - top: 0.5px; - } - } - } - } - .widget_top_rated_products { - .item { - margin-bottom: 15px; - position: relative; - padding-left: 95px; - - .thumb { - top: 0; - left: 0; - width: 80px; - float: unset; - height: 100%; - display: block; - position: absolute; - - .fullimage { - width: 80px; - height: 100%; - display: inline-block; - border: 1px solid #eeeeee; - background: { - repeat: no-repeat; - size: cover !important; - position: center center !important; - }; - &.bg1 { - background-image: url(../../assets/img/products/products-img1.jpg); - } - &.bg2 { - background-image: url(../../assets/img/products/products-img2.jpg); - } - &.bg3 { - background-image: url(../../assets/img/products/products-img3.jpg); - } - &.bg4 { - background-image: url(../../assets/img/products/products-img4.jpg); - } - } - } - .info { - padding: { - top: 5px; - bottom: 5px; - }; - .title { - margin-bottom: 8px; - line-height: 1.4; - font: { - size: var(--fontSize); - weight: 600; - }; - a { - display: inline-block; - } - } - .star-rating { - font-size: 14px; - - i { - color: #f49f0b; - } - } - .price { - margin-top: 8px; - display: block; - color: var(--optionalColor); - } - } - &:last-child { - margin-bottom: 0; - } - } - } - .widget_service_categories { - ul { - padding-left: 0; - margin-bottom: 0; - list-style-type: none; - - li { - font-weight: 500; - overflow: hidden; - margin-bottom: 13px; - padding-bottom: 13px; - color: var(--optionalColor); - border-bottom: 1px dashed #eeeeee; - - a { - display: block; - position: relative; - color: var(--optionalColor); - - i { - position: absolute; - right: 5px; - top: 50%; - font-size: 14px; - transform: translateY(-50%); - transition: var(--transition); - color: var(--optionalColor); - } - &:hover { - color: var(--startupMainColor); - - i { - right: 0; - color: var(--startupMainColor); - } - } - } - &:last-child { - margin-bottom: 0; - } - } - } - } - &.extra-padding { - padding-left: 15px; - - &.left-sidebar { - padding: { - left: 0; - right: 15px; - }; - } - } -} - -/*================================================ -Profile Authentication Area CSS -=================================================*/ -.profile-authentication-area { - height: 100vh; - position: relative; - background-color: rgb(243, 243, 243); - - .logo { - left: 0; - right: 0; - top: 20px; - position: absolute; - text-align: center; - display: inline-block; - } -} -.signin-form { - max-width: 550px; - border-radius: 5px; - padding: 40px; - background-color: var(--whiteColor); - margin: { - left: auto; - right: auto; - }; - h2 { - font-size: 30px; - margin-bottom: 30px; - } - form { - .form-group { - margin-bottom: 25px; - - .form-control { - background-color: #f5f5f5 !important; - } - } - .remember-me-wrap { - margin-bottom: 0; - - [type="checkbox"]:checked, [type="checkbox"]:not(:checked) { - display: none; - } - [type="checkbox"]:checked + label, [type="checkbox"]:not(:checked) + label { - position: relative; - padding-left: 28px; - cursor: pointer; - line-height: 20px; - display: inline-block; - margin-bottom: 0; - color: var(--optionalColor); - } - [type="checkbox"]:checked + label:before, [type="checkbox"]:not(:checked) + label:before { - content: ''; - position: absolute; - left: 0; - top: 0; - width: 19px; - height: 19px; - transition: all 0.2s ease; - border: 1px solid #f5f5f5; - border-radius: 3px; - background: #f5f5f5; - } - [type="checkbox"]:checked + label:after, [type="checkbox"]:not(:checked) + label:after { - content: ''; - width: 8px; - height: 8px; - background: var(--startupMainColor); - position: absolute; - top: 5.5px; - left: 6px; - transition: all 0.2s ease; - } - [type="checkbox"]:not(:checked) + label:after { - opacity: 0; - transform: scale(0); - } - [type="checkbox"]:checked + label:after { - opacity: 1; - transform: scale(1); - } - [type="checkbox"]:hover + label:before { - border-color: var(--startupMainColor); - } - [type="checkbox"]:checked + label:before { - border-color: var(--startupMainColor); - } - } - .lost-your-password-wrap { - text-align: end; - - a { - display: inline-block; - position: relative; - line-height: 1.5; - font-weight: 500; - - &::before { - width: 100%; - height: 1px; - position: absolute; - left: 0; - bottom: 0; - content: ''; - transition: var(--transition); - background-color: #eeeeee; - } - &::after { - width: 0; - height: 1px; - position: absolute; - left: 0; - transition: var(--transition); - bottom: 0; - content: ''; - background-color: var(--startupMainColor); - } - &:hover { - &::before { - width: 0; - } - &::after { - width: 100%; - } - } - } - } - button { - width: 100%; - border: none; - display: block; - overflow: hidden; - margin-top: 20px; - border-radius: 5px; - text-align: center; - padding: 14px 30px; - color: var(--whiteColor); - transition: var(--transition); - background-color: var(--startupMainColor); - font: { - size: var(--fontSize); - weight: 700; - }; - &:hover { - background-color: var(--blackColor); - color: var(--whiteColor); - } - } - .dont-account { - display: block; - margin-top: 25px; - color: var(--optionalColor); - - a { - font-weight: 600; - } - } - } - .sign-in-with-button { - margin-top: 25px; - - button { - width: 100%; - display: block; - color: #248BD2; - border-radius: 5px; - border: 1px solid #D2D2D2; - background-color: transparent; - transition: var(--transition); - padding: { - top: 13px; - bottom: 13px; - left: 30px; - right: 30px; - }; - svg { - position: absolute; - margin-left: -25px; - margin: { - left: -25px; - top: 1.5px; - }; - } - &:hover { - color: var(--blackColor); - background-color: #E9E9E9; - } - } - } -} -.signup-form { - max-width: 550px; - border-radius: 5px; - padding: 40px; - background-color: var(--whiteColor); - margin: { - left: auto; - right: auto; - }; - h2 { - font-size: 30px; - margin-bottom: 30px; - } - form { - .form-group { - margin-bottom: 25px; - - label { - display: block; - margin-bottom: 13px; - color: var(--blackColor); - font-weight: 600; - } - .form-control { - background-color: #f5f5f5 !important; - } - } - .remember-me-wrap { - margin-bottom: 0; - - [type="checkbox"]:checked, [type="checkbox"]:not(:checked) { - display: none; - } - [type="checkbox"]:checked + label, [type="checkbox"]:not(:checked) + label { - position: relative; - padding-left: 28px; - cursor: pointer; - line-height: 20px; - display: inline-block; - margin-bottom: 0; - color: var(--optionalColor); - } - [type="checkbox"]:checked + label:before, [type="checkbox"]:not(:checked) + label:before { - content: ''; - position: absolute; - left: 0; - top: 0; - width: 19px; - height: 19px; - transition: all 0.2s ease; - border: 1px solid #f5f5f5; - border-radius: 3px; - background: #f5f5f5; - } - [type="checkbox"]:checked + label:after, [type="checkbox"]:not(:checked) + label:after { - content: ''; - width: 8px; - height: 8px; - background: var(--startupMainColor); - position: absolute; - top: 5.5px; - left: 6px; - transition: all 0.2s ease; - } - [type="checkbox"]:not(:checked) + label:after { - opacity: 0; - transform: scale(0); - } - [type="checkbox"]:checked + label:after { - opacity: 1; - transform: scale(1); - } - [type="checkbox"]:hover + label:before { - border-color: var(--startupMainColor); - } - [type="checkbox"]:checked + label:before { - border-color: var(--startupMainColor); - } - } - .lost-your-password-wrap { - text-align: end; - - a { - display: inline-block; - position: relative; - line-height: 1.5; - font-weight: 500; - - &::before { - width: 100%; - height: 1px; - position: absolute; - left: 0; - bottom: 0; - content: ''; - transition: var(--transition); - background-color: #eeeeee; - } - &::after { - width: 0; - height: 1px; - position: absolute; - left: 0; - transition: var(--transition); - bottom: 0; - content: ''; - background-color: var(--startupMainColor); - } - &:hover { - &::before { - width: 0; - } - &::after { - width: 100%; - } - } - } - } - button { - width: 100%; - border: none; - display: block; - overflow: hidden; - margin-top: 20px; - border-radius: 5px; - text-align: center; - padding: 14px 30px; - color: var(--whiteColor); - transition: var(--transition); - background-color: var(--startupMainColor); - font: { - size: var(--fontSize); - weight: 700; - }; - &:hover { - background-color: var(--blackColor); - color: var(--whiteColor); - } - } - .dont-account { - display: block; - margin-top: 25px; - color: var(--optionalColor); - - a { - font-weight: 600; - } - } - } - .sign-in-with-button { - margin-top: 25px; - - button { - width: 100%; - display: block; - color: #248BD2; - border-radius: 5px; - border: 1px solid #D2D2D2; - background-color: transparent; - transition: var(--transition); - padding: { - top: 13px; - bottom: 13px; - left: 30px; - right: 30px; - }; - svg { - position: absolute; - margin-left: -25px; - margin: { - left: -25px; - top: 1.5px; - }; - } - &:hover { - color: var(--blackColor); - background-color: #E9E9E9; - } - } - } -} - -/*================================================ -Instagram Area CSS -=================================================*/ -.instagram-area { - .container-fluid { - padding: { - left: 0; - right: 0; - }; - } - &.bg-dark { - .section-title { - border-color: rgba(255, 255, 255, .08); - - &::before { - background-color: var(--whiteColor); - } - } - } -} -.single-instagram-item { - position: relative; - - .link-btn { - display: block; - position: absolute; - left: 0; - right: 0; - top: 0; - bottom: 0; - z-index: 2; - } - i { - position: absolute; - left: 50%; - top: 50%; - transform: translateY(-50%) translateX(-50%); - font-size: 25px; - color: var(--whiteColor); - opacity: 0; - visibility: hidden; - transition: var(--transition); - } - &::before { - content: ''; - position: absolute; - left: 0; - right: 0; - top: 0; - bottom: 0; - background-color: #000000; - opacity: 0; - visibility: hidden; - transition: var(--transition); - } - &:hover { - i { - opacity: 1; - visibility: visible; - } - &::before { - opacity: 0.5; - visibility: visible; - } - } -} - -/*================================================ -Page Title Area CSS -=================================================*/ -.page-title-area { - background: { - position: center center; - repeat: no-repeat; - color: #f9faff; - size: cover; - }; - padding: { - top: 160px; - bottom: 170px; - }; - &.transparent-bg1 { - background-image: url(../../assets/img/page-title/page-title-bg1.jpg); - } - &.transparent-bg2 { - background-image: url(../../assets/img/page-title/page-title-bg2.jpg); - } - &.transparent-bg3 { - background-image: url(../../assets/img/page-title/page-title-bg3.jpg); - } - &.transparent-bg4 { - background-image: url(../../assets/img/page-title/page-title-bg4.jpg); - } - &.transparent-bg5 { - background-image: url(../../assets/img/page-title/page-title-bg5.jpg); - } - &.bg-f9faff { - background-color: #f9faff; - } - &.bg-image { - background-color: var(--blackColor); - position: relative; - z-index: 1; - - .page-title-content { - color: var(--whiteColor); - - h2 { - color: var(--whiteColor); - } - ul { - li { - font-weight: 600; - - &::before { - background-color: var(--optionalColor); - } - a { - color: var(--whiteColor); - - &:hover { - color: var(--startupMainColor); - } - } - } - } - } - &::before { - content: ''; - position: absolute; - left: 0; - right: 0; - top: 0; - bottom: 0; - z-index: -1; - background-color: #000000; - opacity: 0.7; - } - } - &.bg1 { - background-image: url(../../assets/img/page-title/page-title-bg-image1.jpg); - } - &.bg2 { - background-image: url(../../assets/img/page-title/page-title-bg-image2.jpg); - } - &.bg3 { - background-image: url(../../assets/img/page-title/page-title-bg-image3.jpg); - } - &.bg4 { - background-image: url(../../assets/img/page-title/page-title-bg-image4.jpg); - } - &.bg5 { - background-image: url(../../assets/img/page-title/page-title-bg-image5.jpg); - } - &.style-two { - padding: { - top: 260px; - bottom: 150px; - }; - } - &.style-three { - padding: { - top: 275px; - bottom: 150px; - }; - } - &.style-four { - position: relative; - z-index: 1; - padding: { - top: 170px; - bottom: 170px; - }; - &::before { - content: ''; - position: absolute; - left: 0; - right: 0; - top: 0; - bottom: 0; - z-index: -1; - background: { - size: cover; - repeat: no-repeat; - position: center center; - image: url(../../assets/img/bg12.png); - }; - } - } -} -.page-title-content { - text-align: center; - - h2 { - margin-bottom: 0; - font-size: 45px; - } - ul { - padding-left: 0; - list-style-type: none; - margin: { - bottom: 0; - top: 20px; - }; - li { - color: var(--startupMainColor); - display: inline-block; - position: relative; - font-weight: 500; - font-size: 16px; - margin: { - left: 12px; - right: 12px; - }; - &::before { - content: ''; - position: absolute; - right: -18px; - top: 50%; - transform: translateY(-50%); - height: 1px; - width: 10px; - background-color: var(--optionalColor); - margin-top: 1px; - } - a { - color: var(--blackColor); - - &:hover { - color: var(--startupMainColor); - } - } - &:last-child { - margin-right: 0; - - &::before { - display: none; - } - } - &:first-child { - margin-left: 0; - } - } - } -} - -/*================================================ -Pagination Area CSS -=================================================*/ -.pagination-area { - margin-top: 20px; - - .page-numbers { - width: 45px; - height: 45px; - line-height: 43px; - position: relative; - text-align: center; - border-radius: 50%; - display: inline-block; - border: 1px solid #eeeeee; - color: var(--blackColor); - background-color: transparent; - font: { - size: 18px; - weight: 600; - }; - margin: { - left: 3px; - right: 3px; - }; - &:hover, &.current { - color: var(--whiteColor); - background-color: var(--startupMainColor); - border-color: var(--startupMainColor) !important; - } - } -} - -/*================================================ -Gallery Area CSS -=================================================*/ -.single-gallery-item { - margin-bottom: 30px; - position: relative; - text-align: center; - overflow: hidden; - - img { - transition: var(--transition); - } - .popup-image { - position: absolute; - left: 0; - transform: translateY(-50%) scale(0); - top: 50%; - z-index: 2; - right: 0; - width: 45px; - height: 45px; - line-height: 45px; - color: var(--whiteColor); - border: 1px solid var(--whiteColor); - border-radius: 3px; - margin: { - left: auto; - right: auto; - }; - &:hover { - border-radius: 50%; - color: var(--blackColor); - background-color: var(--whiteColor); - } - } - &::before { - z-index: 1; - content: ''; - position: absolute; - left: 0; - right: 0; - top: 0; - bottom: 0; - background-color: var(--startupMainColor); - opacity: 0; - visibility: hidden; - transition: .3s; - margin: 10px; - } - &:hover { - img { - transform: scale(1.1); - } - &::before { - opacity: 1; - margin: 20px; - visibility: visible; - } - .popup-image { - transform: translateY(-50%) scale(1); - } - } - &.left-overlay { - &::before { - left: 0; - top: 0; - margin: 0; - width: 0%; - height: 100%; - right: auto; - bottom: auto; - opacity: .80; - } - &:hover { - &::before { - width: 100%; - } - } - } - &.top-overlay { - &::before { - left: 0; - top: 0; - margin: 0; - width: 100%; - height: 0%; - right: auto; - bottom: auto; - opacity: .80; - } - &:hover { - &::before { - height: 100%; - } - } - } -} -.shorting { - .mix { - display: none; - } -} -.shorting-menu { - text-align: center; - margin-bottom: 40px; - - .filter { - background-color: transparent; - transition: var(--transition); - letter-spacing: 2px; - color: #b0b0b0; - border: none; - padding: 0; - font: { - size: var(--fontSize); - weight: 500; - }; - margin: { - left: 20px; - right: 20px; - }; - &:last-child { - margin-right: 0; - } - &:first-child { - margin-left: 0; - } - &:hover, &.active { - color: var(--blackColor); - } - } -} - -/*================================================ -Portfolio Details Area CSS -=================================================*/ -.portfolio-details-image { - position: relative; - margin-bottom: 30px; - text-align: center; -} -.portfolio-details-desc { - h3 { - font-size: 25px; - margin: { - bottom: 15px; - top: 30px; - }; - &:first-child { - margin-top: 0; - } - } - .image { - padding-right: 15px; - border-radius: 5px; - margin: { - top: 15px; - bottom: 30px; - }; - } - .content { - margin: { - top: 15px; - bottom: 30px; - }; - h3 { - margin: { - top: 0; - bottom: 25px; - }; - } - ul { - padding-left: 0; - margin-bottom: 0; - list-style-type: none; - - li { - color: var(--optionalColor); - margin-bottom: 12px; - position: relative; - padding-left: 18px; - font-weight: 500; - - &::before { - left: 0; - top: 50%; - width: 7px; - height: 7px; - content: ''; - position: absolute; - border-radius: 50%; - transform: translateY(-50%); - background-color: var(--startupMainColor); - } - &:last-child { - margin-bottom: 0; - } - } - } - } -} -.portfolio-details-info { - box-shadow: 0px -10px 30px rgba(0, 0, 0, 0.1); - border-top: 3px solid var(--startupMainColor); - background-color: var(--whiteColor); - border-radius: 5px; - padding: 40px 30px; - margin-left: 15px; - - ul { - padding-left: 0; - margin-bottom: 0; - list-style-type: none; - - li { - font-weight: 500; - position: relative; - margin-bottom: 20px; - color: var(--optionalColor); - border-bottom: 1px solid #eeeeee; - padding: { - left: 35px; - bottom: 20px; - }; - span { - color: var(--blackColor); - margin-bottom: 10px; - display: block; - font: { - size: 19px; - weight: 700; - }; - } - a { - margin-bottom: 8px; - display: inline-block; - color: var(--optionalColor); - - &:last-child { - margin-bottom: 0; - } - &:hover { - color: var(--startupMainColor); - } - } - .icon { - left: 0; - top: 6px; - font-size: 25px; - position: absolute; - color: var(--startupMainColor); - } - &:last-child { - margin-bottom: 0; - padding-bottom: 0; - border-bottom: none; - } - } - } -} -.portfolio-details-slides { - &.owl-theme { - .owl-nav { - opacity: 0; - margin-top: 0; - visibility: hidden; - transition: var(--transition); - - [class*=owl-] { - margin: 0; - background-color: var(--whiteColor); - color: var(--blackColor); - padding: 0 !important; - border-radius: 0; - transition: var(--transition); - border: none; - cursor: pointer; - position: absolute; - left: 25px; - top: 50%; - width: 45px; - height: 45px; - line-height: 45px; - border-radius: 50%; - transform: translateY(-50%); - font-size: 20px; - - &.owl-next { - left: auto; - right: 25px; - } - i { - line-height: 1; - } - &:hover { - background-color: var(--blackColor); - border-color: var(--blackColor); - color: var(--whiteColor); - } - } - } - &:hover { - .owl-nav { - opacity: 1; - visibility: visible; - } - } - .owl-dots { - margin-top: 40px; - - .owl-dot { - span { - width: 18px; - height: 18px; - border-radius: 50%; - transition: var(--transition); - margin: 0 5px; - } - &:hover, &.active { - span { - background-color: var(--startupMainColor); - } - } - } - } - } -} - -/*================================================ -Portfolio Details Navigation Area CSS -=================================================*/ -.portfolio-details-navigation { - background-color: #f7f7f7; - padding: { - top: 40px; - bottom: 40px; - }; -} -.portfolio-details-left { - text-transform: uppercase; - font-weight: 600; - line-height: 1; - - a { - display: inline-block; - color: var(--optionalColor); - position: relative; - padding-left: 25px; - - i { - position: absolute; - left: 0; - top: 0; - } - &:hover { - color: var(--startupMainColor); - } - } -} -.menu-icon { - line-height: 1; - font-size: 22px; - color: var(--optionalColor); - - &:hover { - color: var(--startupMainColor); - } -} -.portfolio-details-right { - text-transform: uppercase; - font-weight: 600; - line-height: 1; - - a { - display: inline-block; - color: var(--optionalColor); - position: relative; - padding-right: 25px; - - i { - position: absolute; - right: 0; - top: 0; - } - &:hover { - color: var(--startupMainColor); - } - } -} - -/*================================================ -Privacy Policy Area CSS -=================================================*/ -.privacy-policy-content { - h3 { - font-size: 20px; - margin-bottom: 15px; - - &:not(:first-child) { - margin-top: 25px; - } - } - strong { - color: var(--blackColor) !important; - } - ul { - li { - color: var(--optionalColor); - margin-bottom: 12px; - - &:last-child { - margin-bottom: 0; - } - } - } -} - -/*================================================ -Terms & Conditions Area CSS -=================================================*/ -.terms-conditions-content { - h3 { - font-size: 20px; - margin-bottom: 15px; - - &:not(:first-child) { - margin-top: 25px; - } - } - strong { - color: var(--blackColor) !important; - } - ul { - li { - color: var(--optionalColor); - margin-bottom: 12px; - - &:last-child { - margin-bottom: 0; - } - } - } -} - -/*================================================ -FAQ Area CSS -=================================================*/ -.faq-accordion { - max-width: 800px; - margin: { - left: auto; - right: auto; - }; - .accordion-item { - margin-bottom: 15px; - border: 1px solid #eeeeee; - - .accordion-button { - border: none; - padding: 20px 20px 20px 45px; - position: relative; - border: none; - box-shadow: unset !important; - text-align: start; - margin: 0; - font: { - size: 18px; - weight: 700; - }; - &:not(.collapsed) { - color: var(--blackColor); - background-color: transparent; - - &::after { - background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23212529'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e"); - } - } - &::after { - position: absolute; - left: 20px; - top: 25px; - width: 15px; - height: 15px; - background-size: 15px; - } - } - .accordion-collapse { - border: none; - } - .accordion-body { - padding: 0 20px 20px 45px; - - p { - strong { - color: var(--blackColor); - } - } - ul { - margin-bottom: 15px; - - li { - margin-bottom: 12px; - color: var(--optionalColor); - - &:last-child { - margin-bottom: 0; - } - } - &:last-child { - margin-bottom: 0; - } - } - } - &:last-child { - margin-bottom: 0; - } - &:first-of-type { - .accordion-button { - border: { - top: { - left-radius: 0; - right-radius: 0; - } - }; - } - } - } -} - -/*================================================ -404 Error Area CSS -=================================================*/ -.error-area { - border: { - top: 1px dashed #eeeeee; - bottom: 1px dashed #eeeeee; - }; -} -.error-content { - text-align: center; - - h3 { - font-size: 30px; - margin: { - bottom: 20px; - top: 45px; - }; - } - p { - max-width: 550px; - margin: { - left: auto; - right: auto; - bottom: 0; - }; - } - .default-btn { - margin-top: 30px; - } -} - -/*================================================ -Coming Soon Area CSS -=================================================*/ -.coming-soon-area { - height: 100vh; -} -.coming-soon-image { - height: 100%; - background: { - image: url(../../assets/img/coming-soon.jpg); - position: center center; - repeat: no-repeat; - size: cover; - }; - img { - display: none; - } -} -.coming-soon-content { - height: 100vh; - text-align: center; - padding: { - left: 30px; - right: 30px; - }; - .logo { - display: inline-block; - } - h2 { - font-size: 40px; - margin: { - top: 30px; - bottom: 0; - }; - } - #timer { - margin-top: 35px; - - div { - width: 120px; - height: 120px; - border-radius: 5px; - color: var(--blackColor); - background-color: #f8f8f8; - font: { - size: 35px; - weight: 700; - }; - margin: { - left: 10px; - right: 10px; - }; - span { - display: block; - margin-top: 2px; - font: { - size: var(--fontSize); - weight: 500; - }; - } - &:first-child { - margin-left: 0; - } - &:last-child { - margin-right: 0; - } - } - } - form { - position: relative; - max-width: 530px; - margin: { - left: auto; - right: auto; - top: 40px; - }; - .input-newsletter { - padding: 0 0 0 15px; - width: 100%; - height: 60px; - border: none; - display: block; - border-radius: 4px; - color: var(--blackColor); - font-size: var(--fontSize); - transition: var(--transition); - border: 1px solid #eeeeee; - - &::placeholder { - color: var(--optionalColor); - transition: var(--transition); - } - &:focus { - border-color: var(--startupMainColor); - - &::placeholder { - color: transparent; - } - } - } - .default-btn { - position: absolute; - right: 5px; - box-shadow: unset; - bottom: 6px; - padding: { - left: 35px; - right: 35px; - }; - &:hover { - background-color: var(--blackColor); - color: var(--whiteColor); - } - } - #validator-newsletter { - position: absolute; - bottom: -32px; - left: 0; - - &.validation-danger { - color: red; - } - } - } -} - -/*================================================ -Contact Area CSS -=================================================*/ -.contact-area { - position: relative; - z-index: 1; - - &.bg-image { - background: { - image: url(../../assets/img/cta-bg1.jpg); - position: center center; - repeat: no-repeat; - size: cover; - }; - &::before { - content: ''; - position: absolute; - left: 0; - right: 0; - top: 0; - bottom: 0; - z-index: -1; - background-color: #000000; - opacity: 0.8; - } - .section-title { - h2 { - color: var(--whiteColor); - } - } - } -} -.single-contact-info-box { - padding: 35px; - margin-bottom: 30px; - background-color: #F9FAFB; - - .icon { - line-height: 1; - font-size: 40px; - margin-bottom: 25px; - color: var(--startupMainColor); - } - h3 { - font-size: 20px; - margin-bottom: 15px; - } - p { - margin-bottom: 2px; - - a { - color: var(--optionalColor); - display: inline-block; - - &:hover { - color: var(--startupMainColor); - } - } - &:last-child { - margin-bottom: 0; - } - } - &.style-two { - padding: 0; - text-align: center; - background-color: transparent; - - .icon { - width: 80px; - color: var(--whiteColor); - background-color: var(--blackColor); - border-radius: 50%; - position: relative; - height: 80px; - font-size: 35px; - transition: var(--transition); - margin: { - left: auto; - right: auto; - bottom: 25px; - }; - i { - position: absolute; - left: 0; - right: 0; - top: 50%; - transform: translateY(-50%); - } - } - &:hover { - .icon { - background-color: var(--startupMainColor); - color: var(--whiteColor); - } - } - } -} -.contact-form { - padding: 34px; - margin-bottom: 30px; - background-color: var(--whiteColor); - box-shadow: 0 0 1.25rem rgba(108, 118, 134, 0.1); - - form { - .form-group { - margin-bottom: 20px; - - label { - display: block; - margin-bottom: 10px; - color: var(--optionalColor); - } - .form-control { - border-radius: 0; - background-color: #f9faff; - border: 1px solid #eeeeee !important; - } - } - .form-check { - margin: { - bottom: 15px; - top: 5px; - }; - a { - color: var(--startupMainColor); - - &:hover { - color: var(--blackColor); - text-decoration: underline; - } - } - } - .default-btn { - margin-top: 5px; - padding: { - left: 35px; - right: 35px; - }; - } - .help-block { - &.with-errors { - color: red; - margin: { - bottom: 0; - top: 15px; - }; - } - } - #msgSubmit { - margin: 0; - - &.text-danger { - margin-top: 15px; - } - } - } -} -#maps { - iframe { - margin-bottom: -7px; - height: 500px; - border: none; - width: 100%; - } -} - -/*================================================ -Footer Area CSS -=================================================*/ -.footer-area { - padding-top: 100px; - position: relative; - z-index: 1; - - &.marketing-footer { - border-top: 1px solid #eeeeee; - - .footer-top { - border-bottom: none; - margin-bottom: 0; - } - .copyright-area { - border-top: 1px solid #eeeeee; - - p { - a { - color: var(--marketingMainColor); - } - } - } - .single-footer-widget { - .footer-contact { - li { - i { - color: var(--marketingMainColor); - } - a { - &:hover { - color: var(--marketingMainColor); - } - } - } - } - .info-links { - li { - a { - &:hover { - color: var(--marketingMainColor); - } - } - } - } - .newsletter-form { - button { - &:hover { - color: var(--whiteColor); - background-color: var(--marketingMainColor); - } - } - } - } - } - &.business-footer { - padding-top: 0; - - .footer-top { - background: var(--businessGradientColor); - margin-bottom: 100px; - border: none; - padding: { - top: 70px; - bottom: 70px; - }; - .content { - h3 { - color: var(--whiteColor); - } - .default-btn { - background: transparent; - color: var(--whiteColor); - border: 1px solid var(--whiteColor); - box-shadow: unset; - - i { - color: var(--whiteColor); - } - &:hover { - background-color: var(--whiteColor); - color: var(--blackColor); - - i { - color: var(--blackColor); - } - } - } - } - } - .copyright-area { - border-top: 1px solid #eeeeee; - - p { - a { - color: var(--businessMainColor); - } - } - } - .single-footer-widget { - .footer-contact { - li { - i { - color: var(--businessMainColor); - } - a { - &:hover { - color: var(--businessMainColor); - } - } - } - } - .info-links { - li { - a { - &:hover { - color: var(--businessMainColor); - } - } - } - } - .newsletter-form { - button { - &:hover { - color: var(--whiteColor); - background-color: var(--businessMainColor); - } - } - } - } - } - &.app-footer { - background: var(--appGradientColor); - - .footer-top { - border-color: #0e49b5; - - .content { - h3 { - color: var(--whiteColor); - } - .default-btn { - background: transparent; - color: var(--whiteColor); - border: 1px solid var(--whiteColor); - box-shadow: unset; - - i { - color: var(--whiteColor); - } - &:hover { - background-color: var(--whiteColor); - color: var(--blackColor); - - i { - color: var(--blackColor); - } - } - } - } - } - .copyright-area { - opacity: 0.9; - border-top: 1px solid #2c4687; - background: transparent; - - p { - color: var(--whiteColor); - - a { - color: var(--whiteColor); - } - } - } - .single-footer-widget { - h3 { - color: var(--whiteColor); - } - p { - color: var(--whiteColor); - } - .footer-contact { - li { - color: var(--whiteColor); - - i { - color: var(--whiteColor); - } - a { - color: var(--whiteColor); - - &:hover { - color: var(--whiteColor); - } - } - } - } - .info-links { - li { - color: var(--whiteColor); - - a { - color: var(--whiteColor); - - &:hover { - color: var(--whiteColor); - } - } - } - } - .newsletter-form { - button { - border-left: 1px solid var(--blackColor); - - &:hover { - color: var(--blackColor); - border-color: #eeeeee; - background-color: var(--whiteColor); - } - } - } - } - } - &.saas-footer { - background: #000000; - - .footer-top { - border-color: #121419; - - .content { - h3 { - color: var(--whiteColor); - } - .default-btn { - background: transparent; - color: var(--whiteColor); - border: 1px solid var(--whiteColor); - box-shadow: unset; - - i { - color: var(--whiteColor); - } - &:hover { - background-color: var(--whiteColor); - color: var(--blackColor); - - i { - color: var(--blackColor); - } - } - } - } - } - .copyright-area { - border-top: 1px solid #121419; - background: transparent; - - p { - color: #959595; - - a { - color: var(--whiteColor); - } - } - } - .single-footer-widget { - h3 { - color: var(--whiteColor); - } - p { - color: var(--whiteColor); - } - .footer-contact { - li { - color: var(--whiteColor); - - i { - color: var(--saasMainColor); - } - a { - color: var(--whiteColor); - - &:hover { - color: var(--saasMainColor); - } - } - } - } - .info-links { - li { - color: var(--whiteColor); - - a { - color: var(--whiteColor); - - &:hover { - color: var(--saasMainColor); - } - } - } - } - .newsletter-form { - button { - background: var(--saasGradientColor); - } - } - } - } - &.personal-portfolio-footer { - border-top: 1px solid #eeeeee; - - .single-footer-widget { - .footer-contact { - li { - i { - color: var(--personalPortfolioMainColor); - } - a { - &:hover { - color: var(--personalPortfolioMainColor); - } - } - } - } - .info-links { - li { - a { - &:hover { - color: var(--personalPortfolioMainColor); - } - } - } - } - .newsletter-form { - button { - &:hover { - color: var(--whiteColor); - background-color: var(--personalPortfolioMainColor); - } - } - } - } - .copyright-area { - border-top: none; - background: #06080e; - - p { - color: #959595; - - a { - color: var(--whiteColor); - } - } - } - } - &.consulting-footer { - overflow: hidden; - background-color: #f3f4f7; - - .single-footer-widget { - .footer-contact { - li { - i { - color: var(--consultingMainColor); - } - a { - &:hover { - color: var(--consultingMainColor); - } - } - } - } - .info-links { - li { - a { - &:hover { - color: var(--consultingMainColor); - } - } - } - } - .newsletter-form { - button { - &:hover { - background-color: var(--consultingMainColor); - } - } - } - } - .copyright-area { - background-color: transparent; - border-top: 1px solid #e4eaf5; - - p { - a { - color: var(--blackColor); - - &:hover { - color: var(--consultingMainColor); - } - } - } - } - } - &.it-agency-footer { - background-color: #111111; - - .footer-top { - border-color: #272727; - - .content { - h3 { - color: var(--whiteColor); - } - .default-btn { - border: 1px solid var(--whiteColor); - color: var(--whiteColor); - background: transparent; - box-shadow: unset; - - i { - color: var(--whiteColor); - } - &:hover { - background-color: var(--whiteColor); - color: var(--blackColor); - - i { - color: var(--blackColor); - } - } - } - } - } - .single-footer-widget { - h3 { - color: var(--whiteColor); - } - p { - color: var(--whiteColor); - } - .footer-contact { - li { - color: var(--whiteColor); - - i { - color: var(--itAgencyMainColor); - } - a { - color: var(--whiteColor); - - &:hover { - color: var(--itAgencyMainColor); - } - } - } - } - .info-links { - li { - color: var(--whiteColor); - - a { - color: var(--whiteColor); - - &:hover { - color: var(--itAgencyMainColor); - } - } - } - } - .newsletter-form { - button { - background: var(--itAgencyGradientColor); - } - } - } - .copyright-area { - border-top: 1px solid #272727; - background-color: transparent; - - p { - color: #c8c5c5; - - a { - color: var(--whiteColor); - } - } - } - } - &.bg-dark { - .footer-top { - border-color: rgba(255, 255, 255, .07); - - .content { - h3 { - color: var(--whiteColor); - } - .default-btn { - border: 1px solid var(--whiteColor); - color: var(--whiteColor); - background: transparent; - box-shadow: unset; - - i { - color: var(--whiteColor); - } - &:hover { - background-color: var(--whiteColor); - color: var(--blackColor); - - i { - color: var(--blackColor); - } - } - } - } - } - .single-footer-widget { - color: var(--whiteColor); - - h3 { - color: var(--whiteColor); - } - p { - color: var(--whiteColor); - } - .footer-contact { - li { - color: var(--whiteColor); - - i { - color: var(--whiteColor); - } - a { - color: var(--whiteColor); - - &:hover { - color: var(--whiteColor); - } - } - } - } - .info-links { - li { - color: var(--whiteColor); - - a { - color: var(--whiteColor); - - &:hover { - color: var(--whiteColor); - } - } - } - } - .newsletter-form { - button { - background-color: var(--optionalColor); - color: var(--whiteColor); - - &:hover { - color: var(--whiteColor); - background-color: var(--blackColor); - } - } - } - } - .copyright-area { - background-color: #06080e; - border-top: 1px solid #292929; - - p { - color: #c6c6c6; - - a { - font-weight: 800; - color: var(--whiteColor); - } - } - .social-links { - li { - a { - color: var(--whiteColor); - } - } - } - } - } - &.minimal-portfolio-color { - padding: 0; - - .copyright-area { - margin: 0; - padding: { - top: 50px; - bottom: 50px; - }; - p { - a { - color: var(--minimalPortfolioColor); - } - } - } - } -} -.footer-top { - border-bottom: 1px solid #eeeeee; - padding-bottom: 70px; - margin-bottom: 70px; - - .logo { - display: inline-block; - } - .content { - h3 { - font-size: 20px; - margin-bottom: 0; - } - } -} -.single-footer-widget { - margin-bottom: 30px; - - h3 { - font-size: 20px; - margin-bottom: 20px; - } - .footer-contact { - padding-left: 0; - margin-bottom: 0; - list-style-type: none; - - li { - position: relative; - margin-bottom: 12px; - padding-left: 24px; - color: var(--optionalColor); - - i { - position: absolute; - left: 0; - top: 4px; - color: var(--startupMainColor); - } - a { - display: inline-block; - color: var(--optionalColor); - - &:hover { - color: var(--startupMainColor); - } - } - &:last-child { - margin-bottom: 0; - } - } - } - .info-links { - padding-left: 0; - margin-bottom: 0; - list-style-type: none; - - li { - margin-bottom: 12px; - - a { - display: inline-block; - color: var(--optionalColor); - - &:hover { - color: var(--startupMainColor); - } - } - &:last-child { - margin-bottom: 0; - } - } - } - .newsletter-form { - position: relative; - - .input-newsletter { - display: block; - width: 100%; - height: 50px; - border: 1px solid #eeeeee; - background-color: var(--whiteColor); - color: var(--blackColor); - padding-left: 15px; - - &::placeholder { - transition: var(--transition); - color: var(--optionalColor); - } - &:focus { - &::placeholder { - color: transparent; - } - } - } - button { - position: absolute; - right: 0; - top: 0; - height: 50px; - width: 60px; - background-color: var(--blackColor); - color: var(--whiteColor); - border: none; - transition: var(--transition); - - &:hover { - color: var(--whiteColor); - background-color: var(--startupMainColor); - } - } - #validator-newsletter { - position: absolute; - bottom: -32px; - left: 0; - - &.validation-danger { - color: red; - } - } - } - &.pl-4 { - padding-left: 4rem; - } - &.pl-2 { - padding-left: 2rem; - } - .social-links { - padding-left: 0; - list-style-type: none; - margin-bottom: 0; - - li { - display: inline-block; - margin-right: 12px; - - a { - display: inline-block; - font-size: 18px; - } - &:last-child { - margin-right: 0; - } - } - } - .logo { - display: inline-block; - margin-bottom: 15px; - } - &.style-two { - h3 { - position: relative; - padding-left: 55px; - - &::before { - width: 40px; - height: 1px; - background-color: var(--personalPortfolioMainColor); - content: ''; - position: absolute; - left: 0; - top: 50%; - transform: translateY(-50%); - } - } - } -} -.copyright-area { - background-color: var(--whiteColor); - text-align: center; - margin-top: 70px; - padding: { - top: 25px; - bottom: 25px; - }; - p { - a { - font-weight: 600; - display: inline-block; - color: var(--startupMainColor); - } - } - .social-links { - padding-left: 0; - list-style-type: none; - margin-bottom: 0; - text-align: end; - - li { - display: inline-block; - margin-right: 12px; - - a { - display: inline-block; - font-size: 18px; - } - &:last-child { - margin-right: 0; - } - } - } - &.bg-faf7f2 { - background-color: #faf7f2; - } -} - -/*================================================ -Go Top CSS -=================================================*/ -.go-top { - position: fixed; - cursor: pointer; - bottom: 20px; - right: 20px; - z-index: 4; - width: 43px; - height: 45px; - opacity: 0; - font-size: 20px; - visibility: hidden; - text-align: center; - color: var(--whiteColor); - transition: var(--transition); - background-color: var(--startupMainColor); - box-shadow: 0px 3px 10px rgba(0, 0, 0, 0.1); - - i { - right: 0; - left: 0; - top: 50%; - text-align: center; - position: absolute; - transform: translateY(-50%); - margin: { - left: auto; - right: auto; - }; - } - &.active { - opacity: 1; - visibility: visible; - bottom: 20px; - } - &:hover { - color: var(--whiteColor); - background-color: var(--blackColor) !important; - } - &.marketing-color { - background-color: var(--marketingMainColor); - } - &.business-color { - background: var(--businessGradientColor); - } - &.app-color { - background: var(--appGradientColor); - } - &.saas-color { - background: var(--saasGradientColor); - } - &.personal-portfolio-color { - background-color: var(--personalPortfolioMainColor); - } - &.consulting-color { - background-color: var(--consultingMainColor); - } - &.it-agency-color { - background: var(--itAgencyGradientColor); - } - &.shop-color { - background: var(--shopMainColor); - } - &.minimal-portfolio-color { - background: var(--minimalPortfolioColor); - } -} - -/*extra-css*/ -.shape1 { - position: absolute; - right: 10%; - top: 5%; - z-index: -1; - animation: moveleftbounce 5s linear infinite; -} -.shape2 { - position: absolute; - right: 3%; - bottom: 12%; - z-index: -1; - animation: { - duration: 20s; - name: rotateme; - timing-function: linear; - iteration-count: infinite; - }; -} -.shape3 { - position: absolute; - right: 33.6%; - bottom: 7%; - z-index: -1; -} -.shape4 { - position: absolute; - top: 85px; - left: 20px; - z-index: -1; - animation: movebounce 5s linear infinite; -} -.shape5 { - position: absolute; - bottom: 40px; - right: 20px; - z-index: -1; - animation: moveleftbounce 5s linear infinite; -} -.shape6 { - position: absolute; - left: 40px; - top: 45px; - animation: { - duration: 20s; - name: rotateme; - timing-function: linear; - iteration-count: infinite; - }; -} -.shape7 { - position: absolute; - left: 30px; - top: 20px; - z-index: -1; - animation: { - duration: 20s; - name: rotateme; - timing-function: linear; - iteration-count: infinite; - }; -} -.shape8 { - position: absolute; - bottom: 50px; - left: 50px; - z-index: -1; - animation: { - duration: 30s; - name: rotateme; - timing-function: linear; - iteration-count: infinite; - }; -} -.shape9 { - position: absolute; - right: 0; - top: 65px; - z-index: -1; - animation: moveleftbounce 5s linear infinite; -} -.shape10 { - position: absolute; - left: 0; - top: 0; - z-index: -1; -} -.shape11 { - position: absolute; - top: 8%; - left: 0; - z-index: -1; - animation: { - duration: 40s; - name: rotateme2; - timing-function: linear; - iteration-count: infinite; - }; -} -.shape12 { - position: absolute; - right: 20px; - bottom: 20px; - z-index: -1; - animation: { - duration: 30s; - name: rotateme; - timing-function: linear; - iteration-count: infinite; - }; -} -.shape13 { - position: absolute; - right: 12%; - bottom: 2%; - z-index: -1; - animation: { - duration: 30s; - name: rotateme; - timing-function: linear; - iteration-count: infinite; - }; -} -.shape14 { - position: absolute; - left: 0; - bottom: 76px; - z-index: -1; - opacity: 0.23; -} -.shape15 { - position: absolute; - left: 50%; - top: 50%; - transform: translateY(-50%) translateX(-50%); - z-index: -1; - - img { - animation: movescale 5s linear infinite; - } -} -.shape16 { - position: absolute; - right: 5px; - top: 0; - z-index: -1; - animation: moveleftbounce 5s linear infinite; -} -.shape17 { - left: 0; - bottom: 98px; - z-index: -1; - opacity: .05; - position: absolute; -} -.shape18 { - position: absolute; - right: 0; - bottom: 0; - z-index: -1; -} -.shape19 { - position: absolute; - right: 35%; - top: 12%; - z-index: -1; - animation: { - duration: 30s; - name: rotateme; - timing-function: linear; - iteration-count: infinite; - }; -} -.divider { - width: 100%; - position: absolute; - height: 100px; - pointer-events: none; - -webkit-mask-image: url("data:image/svg+xml;utf8,%3csvg viewBox='0 0 100 100' width='100%' height='100%' xmlns='http://www.w3.org/2000/svg' preserveAspectRatio='none'%3e%3cpath d='M0,0 C16.6666667,66 33.3333333,98 50,98 C66.6666667,98 83.3333333,66 100,0 L100,100 L0,100 L0,0 Z' fill='%23fff'/%3e%3c/svg%3e"); - mask-image: url("data:image/svg+xml;utf8,%3csvg viewBox='0 0 100 100' width='100%' height='100%' xmlns='http://www.w3.org/2000/svg' preserveAspectRatio='none'%3e%3cpath d='M0,0 C16.6666667,66 33.3333333,98 50,98 C66.6666667,98 83.3333333,66 100,0 L100,100 L0,100 L0,0 Z' fill='%23fff'/%3e%3c/svg%3e"); - -webkit-mask-size: 100% 101%; - mask-size: 100% 101%; - background-color: var(--whiteColor); - bottom: 0; - left: 0; - z-index: -1; -} -@keyframes border-transform { - 0%,100% { - border-radius: 63% 37% 54% 46% / 55% 48% 52% 45%; - } - 14% { - border-radius: 40% 60% 54% 46% / 49% 60% 40% 51%; - } - 28% { - border-radius: 54% 46% 38% 62% / 49% 70% 30% 51%; - } - 42% { - border-radius: 61% 39% 55% 45% / 61% 38% 62% 39%; - } - 56% { - border-radius: 61% 39% 67% 33% / 70% 50% 50% 30%; - } - 70% { - border-radius: 50% 50% 34% 66% / 56% 68% 32% 44%; - } - 84% { - border-radius: 46% 54% 50% 50% / 35% 61% 39% 65%; - } -} -@keyframes rotateme { - from { - transform: rotate(0deg); - } - to { - transform: rotate(360deg); - } -} -@keyframes rotateme2 { - from { - transform: rotate(0deg); - } - to { - transform: rotate(-360deg); - } -} -@keyframes movebounce { - 0% { - transform: translateY(0px); - } - 50% { - transform: translateY(20px); - } - 100% { - transform: translateY(0px); - } -} -@keyframes moveleftbounce { - 0% { - transform: translateX(0px); - } - 50% { - transform: translateX(-20px); - } - 100% { - transform: translateX(0px); - } -} -@keyframes scroller { - 0% { - bottom: 34px; - } - 5% { - top: 4px; - } - 32% { - bottom: 4px; - } - 66% { - top: 34px; - bottom: 4px; - } - 100% { - top: 4px; - bottom: 34px; - } -} -@keyframes movescale { - 0% { - transform: scale(.9); - } - 50% { - transform: scale(1); - } - 100% { - transform: scale(.9); - } -} -@keyframes rotate3d { - 0% { - -webkit-transform: rotateY(0deg); - transform: rotateY(0deg); - } - 100% { - -webkit-transform: rotateY(360deg); - transform: rotateY(360deg); - } -} -@keyframes animationFramesOne { - 0% { - transform: translate(0px,0px) rotate(0deg) ; - } - 20% { - transform: translate(73px,-1px) rotate(36deg) ; - } - 40% { - transform: translate(141px,72px) rotate(72deg) ; - } - 60% { - transform: translate(83px,122px) rotate(108deg) ; - } - 80% { - transform: translate(-40px,72px) rotate(144deg) ; - } - 100% { - transform: translate(0px,0px) rotate(0deg) ; - } -} -@keyframes ripple { - 0% { - -webkit-transform: scale(1); - transform: scale(1) - } - 75% { - -webkit-transform: scale(1.75); - transform: scale(1.75); - opacity: 1 - } - 100% { - -webkit-transform: scale(2); - transform: scale(2); - opacity: 0 - } -} -.owl-item { - overflow: hidden; - - &.active { - .startup-works-image { - animation: { - duration: .8s; - fill-mode: both; - name: fadeInRight; - delay: .5s; - }; - img { - display: inline-block !important; - width: auto !important; - } - } - .startup-testimonials-image { - overflow: hidden; - - .main-image { - animation: { - duration: .8s; - fill-mode: both; - name: fadeInRight; - delay: .5s; - }; - } - } - } -} - -/*================================================ -Modal CSS -=================================================*/ -.productsQuickView { - padding-right: 0 !important; - - .modal-dialog { - max-width: 900px; - margin: 0 auto; - } - .modal-content { - border: none; - padding: 40px; - border-radius: 0; - - button { - &.btn-close { - top: 0; - right: 0; - margin: 0; - z-index: 3; - outline: 0; - opacity: 1; - padding: 0; - width: 35px; - height: 35px; - border: none; - font-size: 17px; - line-height: 38px; - box-shadow: unset; - text-shadow: unset; - position: absolute; - } - } - .products-content { - h3 { - margin-bottom: 15px; - font-size: 20px; - } - .price { - color: var(--blackColor); - margin: { - top: 15px; - bottom: 12px; - }; - font: { - weight: 700; - size: 17px; - }; - .old-price { - text-decoration: line-through; - color: #9b9494; - font-weight: normal; - } - } - .products-review { - .rating { - display: inline-block; - padding-right: 3px; - font-size: 14px; - - i { - display: inline-block; - color: #f49f0b; - line-height: 1; - } - } - .rating-count { - display: inline-block; - color: var(--optionalColor); - line-height: initial; - position: relative; - top: 1px; - - &:hover { - color: var(--blackColor); - } - } - } - .products-add-to-cart { - margin-top: 25px; - - .quantities { - position: relative; - padding-left: 45px; - - .sub-title { - left: 0; - top: 50%; - display: block; - font-weight: 600; - position: absolute; - transform: translateY(-50%); - } - } - .input-counter { - display: block; - max-width: 120px; - min-width: 120px; - text-align: center; - position: relative; - margin-bottom: 25px; - - span { - top: 0; - width: 35px; - height: 100%; - cursor: pointer; - font-size: 15px; - line-height: 38px; - position: absolute; - color: var(--blackColor); - border: 1px solid #eeeeee; - background-color: transparent; - transition: var(--transition); - - i { - position: relative; - top: 1px; - } - &.minus-btn { - left: 0; - } - &.plus-btn { - right: 0; - } - &:hover { - color: var(--optionalColor); - } - } - input { - height: 40px; - outline: 0; - width: 100%; - display: block; - text-align: center; - color: var(--blackColor); - border: 1px solid #eeeeee; - background-color: transparent; - font: { - size: 17px; - weight: 600; - } - &::placeholder { - color: var(--blackColor); - } - } - } - } - .default-btn { - box-shadow: unset !important; - } - .social-share { - padding-left: 0; - list-style-type: none; - margin: { - bottom: 0; - top: 30px; - }; - li { - display: inline-block; - margin-right: 12px; - - span { - font-weight: 600; - position: relative; - top: -1px; - } - a { - line-height: 1; - font-size: 18px; - color: var(--optionalColor); - - &:hover { - color: var(--blackColor); - } - } - } - } - } - } -} \ No newline at end of file diff --git a/static/assets/img/about/about-img1.jpg b/static/assets/img/about/about-img1.jpg deleted file mode 100644 index 2a1c6876c1f45e0d2214f5476c13d94b8aa73158..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9092 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 diff --git a/static/assets/img/about/about-img2.png b/static/assets/img/about/about-img2.png deleted file mode 100644 index b52b816d38c803eaaac6bd400f37d1eac239d4a1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2673 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 diff --git a/static/assets/img/about/about-img3.png b/static/assets/img/about/about-img3.png deleted file mode 100644 index 4c94602120e4f5805228d8316164081ecee1df40..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2239 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 Sk<0zZ2#&T;o0rzXDgOtRXbhqN diff --git a/static/assets/img/about/about-img5.png b/static/assets/img/about/about-img5.png deleted file mode 100644 index 33bfac47dd51e969ca2e7727bcb2c362cca1aa27..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1926 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 SNLjr39JE1F{~MB68~6hdT`@-h diff --git a/static/assets/img/about/about-img7.jpg b/static/assets/img/about/about-img7.jpg deleted file mode 100644 index eba9c53e64a83daea9236e476768c08846b05561..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5699 zcmeH~Yc$mB9>@PmeB#B7~&);?>Uz0X?v?6qIc?^)kB&-1KjJ)ht6dGqjwcy9qQ zTPqtY00aU7K3fCeZ31Q#CrdKzfRizX?yto-ew2=h!fWebR9O*0VRVd*tu@Bh!O|KN zrB6`P#P}Z#@MVQWVwf!7kf6wDVcrNp0fYnvVS-R07z_r73kf4oq6iTYgp9bvc9gs< zT0ve`P7Z_9R>3G~V&&vi4b(Js@VdIXXcZ$GN#h0-4D-V<8&{m93jEpJs`4Jsu`AhA-_J!`g7soQPKAbEclpqFs=&5L zv`IOa#WWz=?Zk6@lc9iHzxm{j?cYRrfQ6oouWVU4vFktvd>ExrcY?|TQa#N-?cNX? zh!M#RI^3ACCJdbaIuQA^sHvf=?8B|bUeAHs2p7Xk-}+MvQ*8Cp@(Gk#@&+S+d`ZF< z_Ve8Xnfs6fQtGbFCV$=M?UAsRs{{jg`BQs?X2-1LRRO|OY3_Il+KCp%Ki*nC zB;d^Jit8D#hn%Cx2|(G?>IW_ zxLLEtKKpz6Q6p~CRwmgzz!qq9zVlK1%`to2>9$^OFuDdQa`-sr-TU;&Jy>-+1 zDn>_reN%JOzTAh^*r|ikGjksOi`>KAGBM?WD}{)r?aR$B?-nY`yIN*u%{^Y^BeJ-K z^PSdn&bqnoTA}Voy>9oW6ShmnvWd0UqUBJIdK-FXgJBxDxULIc+>>{D_kyDxbh?0r zt52M^RD9}5N1ro$HatE3$=h4BDfS&QrJt=gTbu-_^26@|-vPb@d|D{fF!b{`wYYu4i|=kEL_VG*iBs)VtFvI&808 zX*?J|noMAjnBdm_P*^PFEPEdg|Q`Xe%%b*%;VV+(aK{q%WD%cT!ikq1OcZAjQ;SbG(EbPXY4NLk6S+PD&$DFBzt>)Mpp;OQ~xnD zSycNq*+`as7iVal?kuNP?mq|FR%U$hc?`BJqT2LgCH-@y{~n Gz5WG&tT|`^ diff --git a/static/assets/img/app-banner.png b/static/assets/img/app-banner.png deleted file mode 100644 index 2cc461ae673ac525459c84ef60a1da16517390fa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3147 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 diff --git a/static/assets/img/app-download.png b/static/assets/img/app-download.png deleted file mode 100644 index 07b393fb676f184d8fcbe6fbb0f97c004ed24bfb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8101 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 Jee-_O{{ZD4g9`uv diff --git a/static/assets/img/apple-store.png b/static/assets/img/apple-store.png deleted file mode 100644 index 3f1997365e04aa1c8bfdb7cf36fee1fb6a4c95d0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5313 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 beHY>_&j!KNXGi%yggVxZL<35i@*v diff --git a/static/assets/img/bg1.jpg b/static/assets/img/bg1.jpg deleted file mode 100644 index 5266c85880481bede65c025ccf5a8300cbb7285d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 48553 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�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 diff --git a/static/assets/img/bg11.jpg b/static/assets/img/bg11.jpg deleted file mode 100644 index b5045be3ca6976fdf75694a26f18aa07a2fdd18e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18392 zcmaKU3qVZi8}~b7rX5r4q)B2iW><~T{Yq{#%=oq~HNzyST)L`My17M;aoL*OLy~ID zpBhmv(N$QBE+k4tDN7p?QCpUf?|IJ@cK`qHdvNBQ_q^vl=REIo{XOsT`Tpm}Xq0$u zPyj-Xj(o&GU+MEpq$`T?4OxdMhz8A82z`D$WaoH7wSu;7)*E*~XT@~sdy_~Z)bY)nS!`c~Ka&QOO$Ia$k4%sC-WCmA=@5)&; zPr{iK9_i1qHM2AIwY0J2*iSXHw6nIEI@N?@WnnqR++vEkrM0Q0or8^qgOwF$fVgnC zNWTDw`J%Z4_kyDt+<})`vu2Ii8f&xg$Ut+;sZ*z#TUeP}S(!o))2MY}(aYDGhDH52 zID*JO$~Q7-Rdi5z7zdBI+$TIHdIlGsRPzdFW>Oe;m9Rc=!Lm5$*_2pp7p65o_kQ3U-+7+NqCwxZ!PkV3|j5)H#agoltc2_ zA?SZSgT0l#rH`$p>2iBNU(=~JHa4bHY;3JeE&criZ0!83Y%Tq5xC7VweZxPEoI(q{ z$Ev}{aR`{|YwbJLYKp0i%@hk$Ydafz(<#=LR;B?q{&vf!*e##xKgEx04v%P#Mduq) z8f*gj#JgV<0}j5ZmVX%NQzR(P=T0=7R0rgD1r(I>xe0AW3@uEsW#}-zW9STLG8oL^ ztYO234;#kP)q(AB9o_Fo=&|)id_QW`=+UD_{mA8Ve>DC=l%Wj9Q07qWp+mKYYY)>N zt~(q^SC1S(ZT$eX*5yL=+$dOzxt-J$moM0VD6mkO6hP&e;=Gvesk-|lujwi@!e5$Oz}z%vce zMYB*>nCGOJ@vbK;seBquLNK}6)RkO&jQZ|bw877p9MG_&ME@mO*g%Va9-CXTx zIXqj*M@SLRLkQpIE5S{^A<7<_lr0o$TId3V&2O@SXMy&~E!Tz{Fo zGtI!DeA)FmG99<7rMvkXrkW%x3`>@;?P_?Nc*EyObF6LUll9Gq(~ARooYtE;OnnkM zIWlN#>rdTvDOcxO_S?rL?0Dc%+`O`O%8QJ#QFW=$i=1ye%r#pV?takv@S(H^Zwtb< zI=ehg({Xv$@uIp$^+$EkRvWk4N|S>xedfJ>LLJpv^h#w!Aj72xIyWCSyd)K|Xj1>O zU1#YdKO?Qbt~%}hVAfc*H8}23*Mo+{VO{5OU;(1Jl3L&miiPV}o!CMtC zp3kIeJGa`uZ~SZPwWZ1Y3^VUqyM)v#FZ<7ETyIHU;<1CBkB--la&owkt9PJm>@2OA zYt6=Eqrw(n6isomPCI<7L~oR%e*vwQoF%Podd4D?S1lTUs3y`ce9o} zHU4Eoc;Kw~O<1>>P#|P}?tHZSY(n+@^2>&C1#eP=7OO-e+{6 ze?*IWY{CQU2evQ#eqYd3pOO}8JSL{trRP?vYZd*7f1}qL%d0V#VHb0!XLWRJ+V(DE zLi&u-dZ$fgqW4P_IZN zu5{9wJ4~2-HG_|+N+wq&r>ayurFyx(9uxYjk&>a{@Fn^pDUBi)BLNmOL=ozW^d%CZ z0Lc)=fWuW0$mj)^AJ2%9S?~$9JRb7~$Z%ogT^=cC)CJtFWYd=oO~R6i^^t_8E0IXR zu3$3Q_5Rg~LLb+Hb4wPspP%>pbY|d~5q`xhcjR~ zrW>BMReQC~ICWzJ*UX_SGdc9bkHgF>dmAdcd$z}3yHoY&(&S?^m+YlgjV^G$<(s?X zE}iB~ zVn1zu@TE%?TOxE?-Cf_?-TI7-?K&@a-F$G`Gwb}TeLc&xWE8~GI(EC%=y{;_w8TD; z{LJ)W=Et2ZihKH5Rh>nJSIy#$Z2GUKf+k#vKRKnhWQ5<8iqc|n`(elWmsLeMq11t5DsBASOet zqVfrR`rpJ*5+L&&rJ6~FQx{`y^$b0}_2HbcH;-TC-
szjuuFt&chu9tt_fT;smuSBH8BLv5Kf2AbY)40N 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
cvE z+YrGuDsq-3Q&H&h!CvoFSv#g^FyAuB|24`LK8=xRGkN|hY)v^_Q>tBQu?+Lk$oEaC z4fHw15Ml8KbYJmgUa%Y$vE}m0F?_xv*7K802nbM@3_gK#}Yv zN!v?RLFQka`>N~(>7E+GItoct6T5wj5N2n*W9(HGiID7b&)k&-n1?oo5v{y_nPQWg z)O1_FirtPax-r*G>7QJ*Cqyofd127@u}GCmyf1CT4?-d4Eoin97hN0QJLbWF?{u)* zc)mr(FUQp|*9DA}ym60A+%&q06+K4oF%2P?NV*lTJ4la&~;pSQj!%5}s6QamQZL7lJ?p8YMSPghzK zjjq{6n6sc$4y9xKmU4W)bptAGXQGs;pZ2P=cZ-*3Atl^XoLUnS9J{Y;=BhPxmzA6d zQ@`?5C(PZ2T`Nu2ez4Ju@D$7?1^TKCe^4if@{taukXq%Zw^ER_wUKaA%R^+P&KK+> zmEa+c7`{$uZdiPg=4I)JVWN3cTJ`y-i!-jzb^n+z9yt~PY)RkX&1CbRr~F)*Eu@Z; zO!564l2jd=I*nQKT%Y@y(nP=-6^bG?U(ySrmDsXH;m^Zln83i=$=n7P?!zd*Rpt$N zOYs!&M=?r~`-;vkr$JSJ@3%#9=Vj*2c1s#&hwyKmnD3mT%fJtaSCo16V#rB(2g_Qq znn2~cylU@Wf%V%8`y@|4 z($bmbwBe_ZG*j{+Cih%%q=H!^zFAHCqP;8e=IQdmF2xZmB~7hk3WmznBHj*6LeZ5c@w!0Sa8#|yR!}QK2Hhig9r%>EIZ5_wOJ#BBJ?JIX z6f?S$5`vDyW;~o-M&%km{i(Ss*AUf_dOlVDjD2dLsiN(rum52=b=b83R8ac$ujAnW zPEu}XiFTp_YU;9SK=N0&NUG)Wko2N;335{vs+BZBj^J=1o`g;AO?lXFZ#AHnuRtjG zW#nAQiy!&AgJH$a^pz3WMegX@sbi0#MfQ}pbC0C4T2<;!%izaMhs#D${l(tkmU^BM zbpxhW50$%WFc%|Rs+T|EiDUl#%~gnHF`-C4MoJ@>|NDWBe{`aM%tFd$^Jjclf5p|A za(#Obf3BnP;8dWs?#&m{&_b8P@VV4v~>2z6TTK z&;~TyUBZ--c3#2HANIbST$k3gXyXe`NXB|~Sc&V+N3co^5-S*TU?k;D9vNM}z=HHm z)T~ZrQE9_Yeq>U5#84vU6usO?oE8)Tozm>H6CF|9dk>R@Bplp@Bt5WLPnUB$C#P_d&(ET3>zib} zau26cCp=IR+i?F-?dFJ2p+B=FzJ}7|h@Qe`k(JJ6Ch0F7($G2amX%e#2(*A7kt9ub zg_$YIJzIJE9vbd^pH=#`%mh~zQqm_VKY-D)H{&jn+`_NSFY=tzT(GX-CZkl?kfm;W zTP4}~3-_oJ^q6Px%6-V3j&aWH5q3ahdv-g0f$Qa%T}$ghUBuRJ)XuQhsCrX}KW=Cq zzda!(^R^APCAeK-W6>FO^&T4ztXIwB^DL|H;}-Fk#t5F=G8C?RH0+7Y(Jxmb|9oni zx=nY&-x6Ksnk2nR2Q`E*zAR+&e#hkhj>M!Lw~nV;d$C@a(7{lO?_93VBY?SUo>1|b zK(=_RxWwk^us6H<+dOfk$0Dw5x3MY|T=1)^eN0$Hm&2M(Q zvaZZapQ+)Rt8E~4yA6-6(9OL-Dq}uG0^_>xvyOQ=a1v6%j4gm;Bi;Dt)DO*HDy+1IX^FCW7F6N;X`{Qg5( zclPJe$LH~>V0(Z;0RuV~P3GsGvc{WhKswfp}5iMyx4 zFCXIh`YHYpOUIy4Eg>T6x0um5>&%3U9rnBLG7JIY@vIt<&bHkXoaAJ?-fW`xl@-t7amubcoFFUvVpAh6z zh`fj*aoVP9!zUZ8^LVNoaEkNZ$}EmB`1gAcLNV9`?METYxS01g)4iPHbFxDD3jZjv z@z*ufI9a7M|cVrRm&%PjZroS4n$dBm@{^W4fg}Uw16Tu$6 z1ih0$6907D*&Q#Dp}lL0SMSR7+!wi>Q{q}aEk9{1WB!oP<=n#@aN7jpzHAI-J8uc7 zPe8?G;1(def7m7ihStH~?Ohri9g3rS51dn=snS{WxihxHx5jp<_!cQs#Rg6Kgvl9S zHi{^OGM9nTJN6$-a$mr_A_rC6DVL*>wkz;hEHi*?g?-_A2Npvmd@<t+O6_C(Y#`v(0<`(pqZhN4|(58)(^f~Il!NR~^K;xJ*-_*vJ4 zHWpJv!^uD5=sR56>@*{`eicQbxK;THL2z0GIw%E(X~|AGvjFY$ZvI-K+A8a-Ca`W( zDS~{d%;C->{Z6$|0;r;Sbw^3lS}eTy+t33t#bNDJan{Oz*MUx>##*)#7nLgalJpU@ zn&L^ohNnoZ;5O5op?d|6Fu&o`*KNmmO4!G#d9H35xcb7zh;JqblPRsd-vS&cmj^cu zz_!Rc)svy*l#k^U9@BGNQN8Hu^v9)i*oG?#6 z_E(gU*r@T$W~-jf;?{iZfy0+@nr!ace!Pu?SMb%n@op=wq%yUs7~Amfgd07RUbTWf zE9dF*@~w9(((~JXDG)&qBE9b-l5Iv`VD>yog^M}SHdNiRh#^AcDXYoyxp(wunVLI| zmN-IH?BToV=#MNn z`@gBO`AL7xC{OZM!%S*~cBPNh3nLIeK!iiG-0md$CSXUBE+# z0Z7&nQN%uy7?;TQ4gXTQAgpoktVMs4V5K(d(84Cc2JgJGHs3~kAT&ZKqvcioKG(Dg zRttMtI!;lgbY}Gqv10b%3O>lFg3*yK85q407Rfd3F(puHt*mzwgudV! zb@pPM83P7A9H-mYBiA$GdnaR>KYa41)#Rih*mGmSm$tm?h{tIJQ^r8i{lz3$qltM? zHVaEztRCdGX_-yhDoZ>YPzuR{%U4e`Bwgbn<^kOrr>bOo(v`vCGee`v>Bq%NQt%Pa~%5AS zXgf89Q?*n%KX2qlw>v>mWZEdNF;DFHlF(yy2yJ=3YB5%@4XC=epw9w>a@k_;A&h#tX$?J+Hn;#zCG6b+Wkch<>SZG+Yt?y2-i9 zYI6F)Y1*7EXK0oDHFXE+L4%uEcuE3=b+0N0NniGScE4fXTYf-Y-sK?BvD){pNPxKc z#tXhwNHDLCFg8UAnqW7Hsw5_23or|ohtbHx4n&QnFI9&J>no7w2BWAPS4l26O)N9o zSX38e(q0*6@ptQJ|GN0(nq-hdqpFrE!>+a1(HTUSHbQ_1n$D+klig4Q;*z6P_Y|Q7 zyzB=V<4Qk`E0J24f)F<7yU*fzp*+0xb)HSt^`s0I`RyT z8ZR!?Pv3CWp@@P?f+0OyQ$>=cytOjpDl%aFPT}ygg1WSinl}3j!A9SvIRPLfm!gyq zH@aQomy%!0)Mo-4r3Ve40|Se{Buh%!vGpA#;fKpLYH!d2(vy4zsJRjyQe92LlxboC zfg^;a&?USqMd1ZH#6Xr#g?{HghI*!1^eZ7p{k%Cnk1Y|fEN?;9YZy9DP!Szj#33Nf zQnRChs;ba1qzhiSU>6n^(Igk8|9v{x^?}UD{9SaUoee*QNn6noYnWz<3rdPnN|miv z>?a+gc(0r*UcfjoqBz`!i=gdC7z_PA;+3$W#s|4<^73La{ZFzI!bKr7K)H@0u1j`% zOTp3M{?E2oT9HGJvBfDwQSPMzb)wiO!arvy7uVHBR<-eqPJb}AR7(cJI^3ooqf={0 z{8Wb&Y7E2sM{Q;yhQvNix9Ih-bU2l3F-sanvEXF{Iq`1L)6mi?inydcSb?PPu%c#v zrYhC;fJ4_d+jVv~AkWTVlBD5?zf>TN{{6Qc4%QNh^xK@*wHF*ep&Z49sWQ$qCQ~9x ziXCh}HKLDL7e+QdktO+M{L+o^l4)7!)t>s%gm}ZSmOK!K;eRSc+`_>a5`Y zxB#2VDvMnG{TDyAPN%Gbr<=tOcdG^Oo&tSOhMwN9+c&jF6!iMpT`Z2TLp+a)RxcX# z>~9|0ADC~l{NIJ!pUfeJvjIiV zc+z<(g&G3*=Ql;Cx;2~TU(ny@%E2sQ#nWoZo*&?`xNItJ2bi>B4rqVB4=dl8 z*GXFa>>5bP&C}^zsQH2B3h<$|wP~C>O;=x5kHcRjPUP!ZgA`S`ohli-$~2QiwZeJF z`c5=J2vz#0Q83!Re%LUpqX82Lj#TMQ4c~OKO(@v(iAK*UB@jNAJ1RP3uDNF=d`Bz? z8cP|qPr_f+PU--VSV1fc z82m!QOjgfwUQLR@*B@rc^NTx#a7G+AQDOs07B%FAD+WJs-&9KT{X_joW|T!GlJoLA zM`JAGu~J%jzGNLbh0HV4vWwpr*jwA#xBC$+MQ$)bz3oSynj0|?CcH3p|7r{m}SSise>J3}Q>a7ylJRDgA6Kp_(L4OrihVKC{-Ab!juT*bFly(N4no~_Z12RTGn?E6C3!?rU=r=Dy&w14w$wwm%6Ro8+|g* zOiMb_n;l8Lt_i@(L+_W8MJuHAhfJ@pLm_;m47KPjI{n!Dif7LrjUi*wo$m8lw$-Zl z%KQmr_R=L2l>U(*&jhSjqAf;lv>?~pd=%dlu8;>O{uA2*lb(IkyE$hgW9+e6oPxIo zhAm3gkx+5rz8nawF^Byd-cGbKValZ)A#qj=w4Ag*HR}iC7eRlkX~iD-#1!1`+9TTf zdobfRoxx5LRQ6WEYhJnvHl7Y%qOLIkk<}L&^V6+ulBLlVU?EL`taZxTf9zrkfOUF3 zDsat6!H#nG8b$aXhM#a=e90$8^*B2=eBQ8znB1MAHj~H)1=gJbK^u2z0PDBJ`kqng zDK`1H>B;Fyw*E1slU5q8g^ZTU)YNz`$S*l1EDpCR3PyBkZFdt!mtJl8MAvlTs)&~p zwS-Zw>Phn?2H$cHjC(58g>#Rpxk+bR?921JC!Jaj&cSWW7v^9IQTYNp=y_@WiN&V6 zf=!Rn>8TfrcHX2@3-TV83D^>RX;?s}*G+!$p%Eb2{c-=odsOji=fQIeFocWu<5ryp z1-E3~$Oc4eczALgjG^@U!)dT~fCuaLWJ)!^1QL-VstOtoBzD*GCw>3Ct6*9}hf(lmSH@T|qor&TzKHtUlSdD;|99xcgQ= z7iwGx-%HY3y{`Gj!_ArvL*e@f^tQxk_JhH`6fc-Hw{?Qtl)IISlS|{Ey-+&MynQ$& zPlLIbxKARLrj#qMGD8B*jS*ejMb`n2O8aN>ZrrJ>4x9&}PR}%|Dfg5_>8XceY&7cV zB(5Sqc5;{Kr^n;b!+Z?Nm3W>Mx9P}a=b98Q^=`%JUsN^UF~9KSr-{i)@X3MgO3WE- z4^OA)EGh0?AIU(n{SK`m_De3C)3~wa9bESi+QXN8Pop0*$y$9w7`1FAFSS_3t{PMO znb5@wK%6{e9gffd47XfViN+AyGg^`R-BP8Cp*gai=L#@5*-opLb5>_I6^5eU#5^Bz z=qyFr{9bZX)62H(;+I5AGkNz4%Ezmz{cG6E=+7z|;#Qy-cXMyX7L_?qO1O~=sar5u zEKAZ^L65dQ#7|l69m(fd%3Q%;H!m}1`gD_WI{I;-1K-ZQ=9$&h;wh8Q`JXNN7{LCRKZk=UL94+s}|Uge-SHE zFpTB_9Fs0-i}uA6^j8|rbRgLoqJIIPwB$B-rYnaSeQ7G%*kHp(x2w-h)diKi(A_6Q zScT3*P28XDCDwXD46;{`s!<%C{Kj<#Wu1*a%~uW} zd%@a7~1u8nof-{!HJj2M5E44jar?$h-)RD&QD?jk~a!`*DOY?7d z`KZ(KgGPIK7gC;XLhZTwP%$#cH+ynG@J40iyg^dxQiqcD%YN~xL`l+!LIyctx;x<9 zYvAs)j1S8%5hWKyvF10g_bmRCKOyQ8dX06C)T3;wm2ja1s)+0u-~eOTY_5soa ztJ~gltTwj6fJ8qJ?&(q@FN!Ba@#nXo6_iZ6vfst{)LrT*$V>F6h9mTF7A7N+u~nfN zV@I!{o%=%k^`_B*!uw(psd%=NS*2^6u;y5*m@4^7X;orhttiQDO}_5FoE{tHZH zn7OEc_4J9CSsdK5rm16BwjN%iI`B*JikBdTOcz}<>G~(o<+2T_Z}P0 zBr3;i_7=#!r~ zbUM1)C|*s{rl$fY3I9wTsr?iV`M~)>(lI&L_*wrt#fO>HZj)e6b3oB5`-!q-Y-x6? zbc%&C2WIYNUjTMWo1ShmrcR!1-4tQtGMEdxz`#kI@=F}|YMG*=5o4?P zf^(Et$*Ima8114qwXf8-m5-TKa)b^^JS6uO43*jwGe9=*$<-(l^?k`;=v8>wI9-F=;g?;LUXPSwGZ;eLa^VX z+}@pN>*yZ#(y{GnhzeKeY2bW^f$abJR*C|FZs{besb0H<*(#;=A4ILxX7tRlKk^_q z6(MJDax`qS3f?MK>8j_(VpZUXlLBkHeWBSek#Sm69mkn=KsDD-&mQQLW(X;VFYC2N zIh87{wQMbh4NmwfYz1D39>*}$$Gq&!b*&vmAbF<-2zWZ-Wi8qk2xSpQHa|3_Zb67#m$C8%bF=eoRk-?Bu1=dD$(HHO*lC zHk8IvnBqmz$abp;V{Bb6RDOykm-onVzdu$&B@>ZWtf@@#fV7jGk#Jd$oJm$KB_-u| zU7CS4*v!lhbsOk;H0=1Nc^%&z^|IoS6BI0ZuR-+^@sI+vIPx^h&1fU+RA)`Lv0mgK z7|&0GqL&r03O@>8EN?i4(D(QBV?GO=oT(5HB7Xs@Wy61R`dmJkWKCUe2L zcIlxPIpy*~4$r@}Zg1V!Y!Cq;uIA#1l98MjPG!^Hk@(u9ZiKemfG zrxjr}W-IvpJy~!z*?bVkBx$o=DDe=l4S6YMW=arO_RUo7+ zU71+$C>&gNZIE-r*7eKcT{1ElskP)N_Xfb>6IgJXQhb2XUAHL5St`wI#A>EGi ze&`G@uR$j&tYEqTudte&_}aXaC`&bpw3ZF0hLW}yzr2fo4P8$JraY6V>bos(5um#B zewmy-7|cQZDvzductZ0Rd*n~gYosYedn4i`cASayZ8D-Y!7C%5%;5uHImF|irbv#s zTAmPQEjc0q4AdWE$*sY2 zyI!)0qowEZmsne&=9Zj<$jK|6vB?cRatEvKE7zVjjtFgz38_W(<@`1j!E47-_SGy@ zg9t_^Htg#QhUD}&%l1pr1;T1DH6)gQagPN z(;*Kd^HUP8w|Q?AiJP8#adaH9rZFYUrpzFO5y@Ohs`|t>rF(q%8GqFMapbRxdf)zi`5^nvH zX2=-5w;#-wg?SS!p`0U<5-%ibXx}ncYPJXYUP0K3m-kaGO)wf~#U4r1JCn&u*f*`r z6YzvTu6y`u7I#5;d{$VOBtKy$`5AOpVEDK3A!Frk=Ak>ZeACwMbFTwp#(Pj&nea{c zc)6;tR)1?>F2k(jYu!&m9OlUrJbGfcJ9f|BMX|_Ua`4oGQH;1)6=ND zAN5bPS~U=qk1dU!M%7Egy-bV!A88QaDDY1QgVJN4YWb5uM`c0gfp0tFSAj?@q3ZnY zTHq6SzV6*kRqZ3o`=>XCy?1AC3?JObU-t^y-TpXO4a^>Y2ync5V6K%v)iY}D^G)@R z6s+dI6L0f^&Szdf5iiuCkIUUO{q|T9`Q6^P=61Uh_~#Gy%ZlDpU6!L-E~BL;bWBx-+U% zRr$|YYbL|O?jjcE+k%I)xW$b$C$XhebP*A$PZFjI z4X^N65RI8&PI>JSjlLL*kN8}$V}8rH&wY_kzweaId3lJKv+(?i z@8IF}Im#JsE8MF>i~utN$LzQru|;nq4(=>~Cje)X)+76m>a&!D-<6fQZ~L2%nTNZl ze#m6geM`*#f+(y+bi$yTY%20{>AM(giUC5umhgyWvLkhatEM*;&E3QpwsIN`kgKbM zK57MT9-3?#b{ogkJ?~$V>d(3<6n=>2$~uPIRWA-qeZ?3;f;Fx6#JUU#bzlUMBYuq*D|p zQtn+!(ObWwFH}#dYEA?U> z9c>is>RZ?$S>5a5Obp#h03gAxW?aq#-22C-L7eRZT|~^xmgEbY{^}wy%PvMeP+O$E z3(r&Qm=04b9qmF~@5C26e2r=OrOM)#aryf)MJ-g&BRv(C{wy$YvEt* zJ#@~bKUetAD!tgXDt`NUsa}~-?&=>kJMeUoulY~?_?I(g7t4p&!29%^$4$P!)#?u3 z9PDpDsNMMdj^vH2J`2Wk4VL%#B=~YG96kM5W2V0^bmFtY7@5YtSw*#UtlGNcw&bmv zGoAs4*Wbu8W2SROM+3@S24|#8pgqxZO7nMTk6TfuT*vm$MVtyTH>092fFvsjhNXkf zLDa5JfCjpgGQXDR9cVOfWw#M6sh56I4(rSwFmCX?gmk@iIg9U&Pll)VGd_w#60yu> z3Q-YrorHmHc5RO{mJGizx;3T1x)ZnGs1$KC;RQcmMdh0+qK7%LDw`vPUhega_Ua;+ z^XlovR+-w;;x~+p@eVULQ8KDseqWIxj%6Rqd2YgvrpjhwKHD7Tq54ICrxM%s4lPTd z(c*g?@GYarT2CoPC#?p97D$zngjcS>01xXE+;JW2puGK={xV!E(av#>+=;V@CHhr2 z9rxbHfK5Iv`Ml$@`MW~SwdRtMbA=B>YOhtlU5f7f$`LGz?AB!TbjA!npYSRs@*#{6 z{6|P;#n^+ON6n=ajmNu$Wc$<)gV&+5BF`oJspU^b-ZpD7r%B^r`4Nm)zt+cwN;(#KMwZOo-C+7V1y(79-fyWP!1^jTsPw_s$e~AygxW6|3R)vh5ZWnxnfbuFwSY3cn6CDAL4u}HYEB83IR~HrVpsc zGdK(o=jLa|8Luak9i&j7hJ7EyITljRE|BJDl0owp=*=8(n-+!0H&N~)N@FWUg)CX2SK7-pDO_Qgn3Oc|* zg2adN(5*c5Vtfu(eVwGt@67K(GOWouNVgtAmhr3sx3I1Z#Ddg?J!Tn#Rlf32-zr9( z(`3F#59l1^s<=Z~cxeGV_1#1M(h zQLy+K@s(hX@x`RDCmE4za(Uu@2xr~IxVE@%b3RNyBZlUKoJk+ks)p>#-b5ye6PWs@ zO_WAtLxGk@M)?_!^-?3EAatAFPOsSAk31&X`Q24b;w6(gj=@VB8WrJ5q2qF#1ch`w z;$4bSgxHpn_GFeAd?5X29l2GwE$&KmC5yLi@$N&R;==K@ zxMqo`-&#yW-?uVd05$u;sde@j0q( zUN(W_sYO$JcszZ#RB`3qtiiTeXLk2&e9F`NP;7d}dvd6&{#eD-80#=ok!^^x@6n@u zD*``|snnkp=4vBQN#_{BgQJS0h+JCzm7+dUu^r&Gu$tm(j!*r{Tzy*6pCwL;@g<(P zWKRF{kKMVWaE$ha!MD$%FgODz+%@vM05&(S)|qy}yU%Gr_QD88{2 zG8b;%4Tb4J0VO6Eo7ky3q8OQ>sWbqI^O11I^E{J#sOeO&B~22yvI&XxrCOH zpbVDL$r;B5KE75MnduSEnVoE8vENZ0slq?z)NwTP|517gT+QjN5R|`Q)fWjk0~Sl0 ziMKWVupviPs)~|vq_Ie71kPDW5k$yJ$O!d;KQwdusQatn5&xcRSqr*YO7KKM#5G4W z3`5Fuu*9;i2ieKWkQvi1Cl<68gm{tK+ype;3>*Z>cFNF)lN7G}Dvgcumwhr~dChWy z{YfsqTx8rNK-D(;)H}_ZnwZ9X3!meu7~NWd4Fa$FtQtE0ekX)GJ&>qEA@4J|n`rH! zKu!ZF)UKQcC59+nRC>Ozh@Or{t8;*hVdK8?epv}eTcAhY%CptXW zmo??CqB$lqCTxblcJV3QUv%Q&o8ogW(EKwOq{Hb@982UHl}Iu4n=s=VOruXsU!|s% zu5d|Ll%~u1j1pbd_8rwh$`3B7j0I`~empuQyr}7@M~QB@stB69wW7Y3!vPQmr{>+*1{{aVq(AiK~lRfi-BBiNvJf+$43&{GP>KD zj5-DO>p;yzsG~sO_*WlVe&hg+C4NsaCUv0|eNxV%;66JLaJA)Q@19bcR4D6<=>^7L z`6LIVmWQTb-p#KChMdQwBpf>GAD&*ottMz;k(Ev_OG(x*6dOeZcc3KS7fgP8{F922 z8NJ~~gO0hbC6}Qdkf&_x7}rtE?gIEQbdjV8kdM*WZ2&raQr!|eq19hqrJHtaQ}^ka zZGYRB=)NF6+F1zGmG=^G{S>Iw{K+Q^>-)m8diJxAan#bSecFTXGRDPeCv&_+(9iGI zB{gTpz6$#o9lz1x))W0spgwg}e%Da=aiR2tCz8G!fOmaGt9Y6m>{w41!oU1>ZU1=H z_H(TFs`xra7`K)@ea?%__#$Q?Tg|0I{hMbgS;ebFZkiyy!$qS~x%)vO+oqUwL~1~) z>Dt)D3&P*@I5F->Nb)weac;vpMTb{$l%qvG8$S!s8K0%4JBfjf>c&V-#5md-U@yH9 zUIS{MRH*0uCi!uvxLrX%Zk48Oa0ehVJ z+(251>M%@5jurwWPWrf90GdNFoW0N|i=OxbAp4QOd!}fc zUtWcxeiZ?(5wHV(S-rX{qfLWQjMCpz&WfYzAsm%MyacIcf6sqJdNGNdM13j^wSzO1 zm(T}Etmq=;uL6^_%;+Sw32<}9{Oy=*AHqS~>ZOfilCT6};s??{?uMy-; zU#$u`f4$pyBapyAt|V}f84u}L8dZ~iSK%^)?UZ&nGGvhQ9$cKS>f9Q`C=c#_qg;xp zZ9$9QW|!zb89}LRzM*}_ZfUcp${OS^$*(~{lP4vlQynCvTAme3ZsJ4N#y0A&eDr|< zw|Pc=-Yo|(f!lvRkhA~8lr}R?$gzv<7HCSmqTnlx=0`AaC{)jsunWiB8H|5TxtOda zK=oY3$89h-YjfzZ=aJjkbCH1u`x&WGUU4J+NC*`_=XC!JM)B_A=W5JpCd9K~hjl{v zCRGJ!Te;OI^?int+52De|IAPfcy3>rB35hs6J=|pi9y>AGa5(x@g0;Z8i zQ}z=DF0k;JfE$l!iYY-({6Y=|`|npfH1slz41BIEzCn0j6{hm(Cm#YdPpxou3N)- z?5D&wJ^w&&iA=e@F$A=d0OxZvOo*9u?X+Z&;Y5I3l_z=RoK|AyB8B4Q05S^V9Hq~p zV|(C6fQn@j!fXQXb!PFlO(yDSLWSS$88!&)x^G*7T2k5~Huc7zhgRH|3nd%UzR0Xz z$0Hks$T_fnT8q+6yg8BUv@nw{3ol(!JgsV`6BOg`3t27L-m`%3)JqEwa8o~1@G*a8 zy)YaN50A$+x^kKFqNIe2-a4Aw&`pNtAb|b?1aT_zGUR>^Qs2JJny~IA(D-uT`Ur*` zR$I{KBrDLyU@8Z@B?PPIj|{3s=9*w|rFq8;=x!KKuR8Dk{Cu45Zk#N#UMmqq zz>qS~Z(Es}_`~s`1{X)(6!%&CV`=M4WFR;&Af?Lb@C$Z9aL}3euCP<-x zH*OAxVP!a*LsSuQ5?B2Ew=12KHf39_tEf&9O|Bo*JS^SpbnORiA0khq4`m?<)@GG# z(~MA+(JGpm_;1`KA4ODCZ0VY!W7`Gl)tzhC7!0{Gk%RsC#_d7OEclHUot*SNFQScS;3fk>ie%%Ls(se)+DTH70~vqBB9(T}VDu z*(%qegHTs>ny~5PP!Y4AD!-8Xfzp7{8^K@(s0_93u@2cI*Q+FB6-({~$qvz29hJ~s zl1*~V8ONR)LybPSQNN{B5mj?OpMEm?U64NnBi(ZSB`X951k&oVi6qn2cltafeAGTT zrda7rGFzqF{!JF@n$3Ao*?Y2_Ymn#iGt$@l(GX$hl~?Z7loaNQcQ5vb7euNN>j$7Q z6eOzVxygXnGslb(rJg@bymXlWLUbCJFAYsm1z%}ATq4COr?=w`?-X!ezUKRT%MH`S zDr?KLx@0dx)3IAJmEcTLMl!Dv*0lrDm*fJu*w|*iPRdg&P^eU`V9)KkcQWLE*S!Ce zq9;yYki$=Xv)J(}yhPk~IXa_!h7o^aY`xUZAOTS}uh2A~TARDIf#e5hpg*pv zjsK%0JLE&qo0!V?meQ?BozQ!431=9{(Z)rQ_bLSg{~$nfS4J?#EoWTJ!k*ES-(yr~ z#KMQ)&?yDcLIa2&pjc2p7x9gv^!l>pkEmay=X+oL)Vfjt-7Yx%{a#wPxdy?RWve_* z-z7^{f&@^$D#H}+Q%g&nIw8|1qh@I@Q(z}d#{MaA|7B<&-XnWZJ=@pDSLR*Ov=9@` z8D4a-oP5^>e$VmrwbYyIwI_g&W0_;44#L@-caGXq>@=+SW<6cd)IEUvZ3=EHs>V?< z({EdSJfQ#i!S!BPFQwLg^@N6lHi8~FJ?>WAs4nfgsImX0vQ|9|(E|+Qh-|oUMvqI% zHW;2jYg9S>y1{)`jGJbquA3p-AS>M7(A*|jZYY;)_f^M6XdM47n_o!6t$UqaRGx@M z4=rW)5Z1fA{*o8p9Dg4c6ZMD6o+@a>uL5RQwd4zEIaBc{4&- zK+f@&=I!ogd$3_C*L`ob@%nUvCXn`6Z%$$rXNu{TF(`;*@O)>%euN3bfRpoctigW08v1$zsbN;HdL2- zmpZd4N>sgC-5R@{@?{)$T7)Vf=}Ze?n+Q(m9YYXpo&h|qxBgLH#2oeomh^W|<>#{hQCh;$g1;9-+9a@#bB z6uN`|Q5qiCIlF0@OQqvrQPWyK(IePhvlB3tXXDE@gETjSBlk@_!f6a7htH-UZHn}Y z+@FhySzbtNW;KkQ0JGXC5mPo)%J;R25)}I>iLMBx%_L2~CG-o!KyQUF)LvErgrk92 zU!`~x-r__dO2%eW&7z0a=`OC&Z3hv$CBd0GcUTOKtjzsh{ zEtJKRw^KaId`KE2x2YioCA;*_c^QPQaf;q3sJg+%RB6A4bxGiDBbZ!~GoW3eweBWE zoxwVx$NyG4%89y3hrLQGC=NtBynjD;f)uqbF|m#nM73tz&?37* z35|A-@A7R7N|B8@O_WNmS$VpSfq-^kyZtf&yuDHf$-z)L0IHKRI|IrcKa{ zQ1H;tBy!>o8Q+vbCfqAD!gHJk*&`d;9P+&>Djc2C7i;6fU?8``xi1m!Z>f zZfZzYIX9J-I)V!&{=I=dXjJI*p4H$yGj=$X{Q6g-3C;$kd^K*bkyF`I8`+U~n)sky z9(3~Aoi}x>YQ&IL_-ZMWQz?k3*p8hETxpfxr}o_A~iCmLxehs zp^q;xsBShZLzgUT2zyl&MpGZMDC7{)^0f2v+^*gb*cKg5oxp5&ZJo|}H#!R7$*D1P z*D}DK*z6~_bnkFcIanukNNxqzfoeWY@f;&SJ-Q3d5z)zw_@P@$brm!yhDXH|RHWJQ zQV}Awo957o&SR>|X80Y--CC&GK1Xn|IOTD=d21IK*f`!)|=vy)Ol8u zi6|&wB08KLjv9|q(UeM&Nh{3wY+p2LDo?LAQ)jW==)n#7-4P0+-{y=-xJJ~$Y8+P0 z4Bc0AdUuNVXCg~;Q$=E6PmY7EDQz#==sYT1&js*1)!~geLWb@cOYnD!WgXx9+XhN) zh={ogLMwY^Y*HFNPwKI>r0TMX-u|2u`A}?#9z3O2N5NQ{{&!#7knx@HxNS-|MPoD# zpQiswn?;1zJJyZkoEktCZno7M_`Hfoyt|_s>!fLlqBI4_N$<(6d~Ne{N5wS(&ZE*E zG8miY_vkpv$&vhsb(jhguB*;P>X7*LuXJ7YHS@E&ln9D>;?2{ZQ{*5VoHb@M9> zDoqPa7M=7{b&ZB<0GHq++oSGNZKHga(UMhK&*y4LobBct|a6>lOzQ+aoR(4K&) zBxF}aa%FhyCk%RLs2#3swa#jdC=K$~i<0XRx}M)ohcu_Uk!F|P)3ne{FG*^-)$t?F zy&G1p(8J7>|0^h5@+O-BrM+-Ei*vaFoXw{sxdR&BC$T&y&HLRe(@Ddt?&Hpw)Bdwf z3rB|6-$oQd2o|%My`vRoRnVXj*GATf3=k`#$J4oR+Ga>E-e;ZUP6@I^UR@8oaHm;~ z%Ar%N?CCXiltwy_sMf|!B}wrk%r#S$D{2JEhzgn4yv1awu&1KkInC-Rx*ewy=R{*0 z&a?@pX#xDV8#U>nC!Q~2Zakz1M7JhJSSCf3)7L4!a!PS- z$iE1khN=cp+-O^MqX&3jwk#c*hliO_^2y6QT368Vv+_7jjijh8f~ zPa9+97)dhBnBd^kKATC1fHVcVtq>cmOVN^a0I7=l+>Yig*zC?7I+QN7%lziP3FE{> zw?pxzPSegATvw6#O~K&LBdASUcN6+9bwIG|r z^OQl|M8R$frVh7TL3?7~JrNuzN}5{?)e#MuWXxK__EiMsG7csT5ml(};uaK}I8`+q zY>Y%Ij?q=jj^w$vcwxlMnSN_jlxCm$UAOYr?FXl=gdSWsA|eib!lNSQ22TgqQ}3Rn zfO4OIHH+ttu57x>mBl6pnnoEedDs;3P33ml45+xT-5w?yxhQTT8vfI!(oP*m(d$fK zPjI*hE=cgc?m%~9soPYkgwyI;P;Q;K8Y<4vwB4V~;wew>cq7_?c#2x6u%ra*g6sS# zOoK!vwOrRtYC+Uv=>4e?orxOO>CmQp-cI?Qj%REK&M61kHf=2Pc}Ryj*|Ulx-o>9j z8FisDOLPNv4{*W<3T{w^tvIPhhe=JK|3({dgKKO^(;_spEQkY)CfGO|eLS*xCzXy#-Svd4I4Pa-^eOO{6F9FT;G1$X_2ARKa*R$k zUSEwgxshiMQMNM|M-IQUXWg_hANu(zD4E)4UQ6-1!v5Dm-`EHK-tk!wXJ4V?g}P*{tdSI&eY` z2gqewpd%VxYCKi*h(a;R7ARG7M~y>yp`vjZ^u1W`_>C$a!B(8FQQ4agJ1K~}JOPlN z1~?~fr_JbrQ~6QS?FrK0&HztiFAh!fEzZ+LK2vpRD|Skpsd7l9y+pM-bgAXkB10j8 z5(aj9Z!Qh7>~;L24{A%9vK2+7y*f^x32l^ApFuF5tut`KX%fk}+H7QKTZs^C>1f?O zqEa)pM`(rXg!6R=(gmF-JkMo!piw0`vs)3`(m~hYGzpbb zeU;*Mhi4i&P>qeb*!UDbP#b#_(sl;U6&=`iT}SBIxEm^5*J!1{byS-}cReQp-+oW+ zIof#Ws-)0pj;3t|42m-~pu{6eKs6|6c_YQ6^3pMQmogShO=eS(N&*HFPa5K-J00ZC z9241$Dx}}&_7P`8Qjda;V~RpL0GRZ&P1l`ppU$wT>LM`?xm*wOejSH689~)}t3)ow z^z!K{9s$VIqEmdN3xQn_wamr8kq(d8Ps3BWqmEAFiReMSw>PKte;Wo@Kk-Si)6N+d zNCTag7boJF^c2+^ZE!sYXQXh?pRgGy)e%D0Pd!3~R(+igvN9+)CDmK{5rsby?1miJ zGN1ML;mhUy&~#DZUpW{x$FQsGIOz_FL^>nmk~g}zV+lN!W*ghtyK&wATLA9PMpx1t zN3P`izjMomfi-r^DaJWewlP@^40^ii-u(F_k--od(dU2vQ@{Dot1dDj`bgb;5ubDV*#kbSeXk>f;St|;^ZC;EO`qopwz<>WUe3wt3{h!O{>G0W)c%K8-tQJ2reg9A2=b!)fZ*nI7k(Hy}&$W0K2gI*} z??f88I}0XCF651zax1aDlk!tpQkzcL{OsTnBVBIdakFMe?7>e(p&=)#=1x;ee9(L{7CXPpM4j@jz_;J0u9bA)sbS)zTEm;U zp>4y}#+lMofT^-2-I5mQ8WTg>y}7AwtN8Wh4g9<|)O~{yFp1M#jc-j147-^=t8IN> zO+znOs+VTATI|(^=koSDw+Z^boGk)a?d+jpnM~gk(H>99xWjW!L_uP9taHt)VQ4S* zv=P2LAPYQ72ApU=T_E$la*+6tr8zfGeB$EsV5e7@@0VO^sVK24}ow@QeDh8W> ztZo&R-!b2l%wZDysJg7xD?4_3HdA2f%HvWSaBIwTsa`&9rfsmFO`l_GSSI6Gsp*#h z`NY07Wr7i!vTBHhi|yDZvENL~MLEUMvHr z^(27&ruUbs#sl7$1iz$RIEil30%h8-R84rY?`z18w0NKC+!AneQ}(vW$ja}NcxBD4 z(v=b2tLcmp$GjV8ei=j79?AkF`wBg=7qtuR*)+)s(@|tPi zUbS(5nTeuqX><{$2T78{ZPSvrX;e}0VUtv3<=Prv<(DXfS4LXiIUVL zCbStGus%B*YYvi#sMKPrrs?@6Yh>8gt&?HeQ#Y_^6u-`w&crQVktXIN&&*92oiq^J zYjxTtU;tK%aY-=A*vHWGP2MZ{jNLr35}@8(>D3VHh=vaZ&9q&linR#+KZVFI_e7B- zMnt+lHOrC-v9!5UuTW|P-t^W?EYgO~wK5D7+d)`6Q#l;)45veNb3`>woVV{Vncj8H z%6$o}n4Y|C^D_m!^laIE@tV|5u>fllmDv~eYLi?mQ_->M`nVU*|5Ngvm~C^FmL>?3 ziKi)ksMN7}7Sm_y#WNv{^A_|Ru@e?C#V0<4Qv+j?IHsU2J?H8A(CCd&hG+uHi8@crQvzD4(lWhc zuWGKAhBw!ShPk0SVABL^nnogt!1QJrP?-Qf+2^%9t9Bym$hf%ib2#$(Y{e7}lU1OA zB)N$+UH2uIO;dmqI6L68q-Qr3fa&bf|4$j%bhZ*J-vT^u+DCr6Cn|vvA`{R7(QhAa zLiGK3Kr2+0FFiloigK#Ns`!LY7pIWZ-xHaG^xuYQq<8MO*P;4f+jS*?m|PWZ^?Y8c z{{-9q4bg zs3d~JN8dZ&Pd}vX`;1YszuBr`+Wr(-Bca%21Q*eKSNvWllEnXlhO9pk@VV?p4U%|R#HnR z4B^DmO;?m;&nCudD@=`;!(SKMoW3kEf=sj_3FajaaSaEE9K2IZdY`IPpG6>|8#@J@ zBM%7qUbMm7R?KGr5Z`E8rIRc~sLv+E6F_hJob-&Cgii__QrMV1Ynte*xG6PhM#)9s0w$9WJInX&88+-oi@0c%Ddr#x&gby z%A}xaJg|;@u1CJti-wCShBmK70gE*XC)GCn9tEm-;*DpT;k&pAc8YheeO4QwM`JG; z;yDj-flf8kexa=_ht;Y2G<8hA1HBHVtQeKCpzPUy|8C^-k|IA9>YuLue!eGalLWu5 zkWD9kQlt5#GeQrZy+bB81c@R|tWvtZA=N+%f@X@(Jfjq}w~`U0H*C9akNiE#0(~+} zp7g&OB(s<1>pTI^tG&5C?6e)|>u* z^7XPRu&GyJGnJA4-h4(HfVQHCQ-$-|=Q0I&+UQTTQmS~oJnLnW5?g8ATH6~5# zpTLS?$7#`-&PR)NqU&Z1!MD;M=Wk)6lJOy_JdDQ^nU*kC7&RQKsysb1u?a?5og^uH zaO`)lffbw@6jNhrJ$!aE-dlqG+W0+IWqRF88k}Ns0u_S2we2Xt*i1>*h*7?-KlvGw z80b}bT086Eb{@_u0io0keZ$_Ey`N$XmDV@_WN&@%NC9fqxC?wQyU)(UdL;mNAaEna zwejWK>_>ck_=_Ma1z#ePWfIr4(A0sN{M`Z7eFuh#(%DqkroXUGp8^zpKD5ehz=qJZ z_>+=8m;YH{u#r-@Rinn>mpHpq|3GsMOc=Bi5;SE%wj=5d&mbv)HjV3qW&Nf=GfVSNNpxqF2gkza4Of%sCc!Qur4igzyH&bu+Fl-vw)1=)23|gv+rs^eCe^wAKu~eHXl2m3}Hf*c2 zLJEOTfr>N}6Q=V(;6Q!;NN)ulpsjg_E!d4>f~>qJ);JE>Vwh4x>nmE(+ zCk5B^Gmt6LPZN%28qXxNTTx(*Yp3&IfWr&pV=TUI;EJ?;nEp31uwk0??NAQ68KG=Z z+CMh-o8H!{*<)`5nrtEPKYs3SYAmN!O=^fF(?z!pLl*aG!4?Re_;Iy-h7GEcRB@Au zs2gY?9)ZS&g}AI&Ia!1kh3Uj{q{_~Y6;Ed*C6o003xaD4f+oOk3b4&*um#Rk`G0c{ zQI?s!PAVo$Y%@*gDJE>db~0)2p@5;e=D-+sdtNpl9PxQi?XPW10GtHyi7_}S25m!r zdLCBFq5cLCMHe%PU#79@DLAA<(l9}p?@WC9i1roPWYhZ?Jq?=djre1#;BJ+c4RFMi zbfUB=(?SzfQg1iaTwR{MrRZrN$@VHS6$ZB7?#O4JV#*Qck4kTBdmCG>JJ}B}K*;Pp zdiDA(U~5$FDKjz^Feem*)4u6?6OX3j{Jl62pN5-Eex@Li#E=GrK@}HlMuo?(PUkg9 z0^|@T1IPoCukp9Ku_^R$9}&#|WCiSXl3`!AesPI0B$g}R2&ze;HW}wmpp!PX8=z%J zjZL+fs^42L&MRACg8H}nkTz_Ry@vX?RLm*cb}H+NkvK<*M;^K^xl@$f-NvgwK zd)qjd5@D^;-LdWv|uOl0A>v)lh?FA4ck}?mW)_3r2Uq> z`&yoRV!@KG?oAw{+ZQ|oL$JNiZ}Gmgl1zYr9L^dl?^K1S!fW@T z}Cw*h=9xKY4hS*cVA+$w&1rP83Fp+BEk z2+RCXR*wQz%Gel&VPoLi^8DWbmI0=OT{O(}tF!=l7M}_&SATfDDF;n`lhldA z#GC1wF!iBL#_;FYK@_RnPB{$~+N5eJ)VeHMnr51&&2F3d6Z*H5B}o!As5h+g)4C+P z7%J~?5)vi&y5ke>FXrV+n%>mZ&TH#5VD5DXOi>WSJM@f{dvwUKN6G!Rvs^ugXjGPlxLD+JpAu5c`Z&O_7R|IKCeN)TV19<0D1ShG9Rg z5Gw%##`4G}_9>WtOHrOYqr@th@qFU5I3=eJ0AVTuURVahdQJshm)F$WFmMNeezN`> zMS1$YlKh1!WN-T**(On=;*HgsxuHsN@2_K`r~?gujQGj(T9t;>tH2KD}ZK^!GvIU1-M+!U+CR&jIFDS32YA*ddV9Uo3QT=t5U(!|>a z{{jHbR4F!z+HwC)Q19B?+SuoJ025}P+o$VBswwr2q;QJ?TDS1$hDa$a?>qMHgzB%==0bC89D-{K` zitif+$Lg6;O)C0#Mlm}{fmncPEh}zg`$@;_$Y-@N@=bB#)u7tE&yhvf^!!MrZ}gB# zo<%Aza|Y(&)d-$=#F2es@`{PQMr1k_F;&jqi0m`c4v`9~^j@@A>J#w7Lm$7Y6GaiG z5!*7=>*m1Ggq%ziX~jpcKTZIh$$Eqw;7yOn%k@bOj3hlQM0;ri5@|rPlRgRj+UH1m z;Y^iB_cTd9WHjA+iP7SRYPf9+9Sgcm96BJmP-fnOV^RQ65nNg%Zh;LgXwvlc!~oVJ zK9bK**w88dwOF%n$PsK+`foti%5bFE6?6A5U*{!VrA=@@U)tohqW;v_N(9X8^vG11 zO%-4jyT_)Zv4$zRC34e;aRUZMJ7>CzwJzxgJhPiADzW(??@faxRs6P0;)ZoRFadWl zg>~{A&Cth2Y?TxQ1PocW@6SFVd+kC2$L%`tJj4Kd<|%`6Tl=Zq;)n!J&k`*R%fJwEcv~St_yjeq{~EtG^O{`KI*W4H^5{gTVdHh!$eKrI{~GQbr30N z$X+vU1h>7Ap1}qXQtCYTQ*12>l!`5me0tPWqjJ)pBNwN?XyATgbhn-%&96h_tdGO+Drmg&4Q;%)j9PxOo_($ zR83%v9z+XNDIiIKy}xu;Zfle#L&>wD9*y64b~S)7+TTVi)RybHkvW(^+9@uzu(3-a z>$DLMrF)-#cH)XNP*GxJHV6+jcO4e7i4_3jt*#H`ux&$ zc+y7tld&=tb<&EeONCnHw9@D~vTL`or0MXz3dYjOKl9d*ye;xJ3e@RYQBz?nGeGu1 zFV`!1v67$PK6jgkZ(zro-fx@>w#2~rxqb;mkp^C~2ovg@6tYhUo>hL5jU=Tm)_*l^ z)NeG5(`w5EGI9XuWE*Xu-s)5(O|ZnO{0Sa(Te4 zy`t#Z|2l{w=-f)=-@q8@M@bv$Wm=3dC^pI4>Soh_^o^jADi|v+X_zQeMHwp|^E0G%V2^nHpuV33OxVpb)NCSqSfI> z`e0g&mu5DyVF(bLUeh*RPL(@JD6h<-4W9HnQf7(>*qQH2gdL|b_6jUQ>XYf>qub{D zOh&GslK9J2A7PKIR*Wqi>|Q$|iI<2&NB&;&oiq{*r*>-MCg~@+mxc_5RZM@qUM4YP ziX~>klk_H1DV9xQj@4qnzCyX=w-EUY6QE<6A zQwA7TeaCU6ONws)s_n}Zr0JBzM(AskkZjZT*SeABb(hjX~qikf1`bd9;a4yVtA z#Ea>CZY4wLIWdao)_-tfI{v&qda;E`fY27%9l+t%to+aSIA7e`b`Q5$`?GxAhG(Tk zp4{$_p9N8qCI?Lb^$_HyO-oH6(vo|r=c)F#Wkl6MFLX*Gft$;tFIJH2|#DonXPUj`D>ExO`T@RaFK_;;qd>%r= zT;tF$HkMPdL-SfEEcA_{B+S@1{D=(IoY<33-+_$lCqUcqVBLaPl{e7+=9CHvH1sOj zuvRy)K_`@G^Q2`*sTL4P?&(=3TcQn9LD&GR$Fl)A_FUOLd;$xY5)1A5G80_%J6X>- z>oQ=H>!~}7nhJ)gkRXhp1&Xi51ie-#gA)@AMo9x|Sig}Wd1zMTwhGpU zmfiv(gTN=CaUKFyf8jY!N!(DT8;b?Awi~g}z64hCIj10O){(Mmw%?6Bn^SB;kWO&j z^sY`wEG<|mB70%&JC2MIWIfWFx7ZsMlAQs*797)JiNu{vPY)>uNpjr)%um1D;%t3d z^UWkV0f;xCL52a+wJ|-nWG!qTr7b8)foPb)pKmND496BEb*LUXAnGZYSlNN8DYfe^ z;An#G)&Ta#YE9ESpArc*6ScJR>%`fqJXK;qA5Dm_O1l(LTmMDkY(Dj5rKCd>{I|e$ z>QS-hGQ|<96Gqt;q9Jxm(32thG^9YxmZ{h*nbtCl)u(HiX%d@AW7M*k`1I_jXK_Nl zFzpKDs|1IAq#!aW`nGtVF6X;eAb=zwPO5s#h&D)^Z7Ft=S1~#KRL=<^nh2w}f zS%FH89*7ndEwvy?l?r`*Iwnn@!>z(H*Emzt=BrY8!~K@LCZ}M(8IwMho4QS3#O?J` zK|+1;rli;~DNR$NX%dnYS)Z7dvy92#5D_-lr=$p);)z{D3Unx-y$u8yCjA>m=hPea z#h23z&Dgy-)93`?CkBz` z!DM7iauWg7KR=z9`bTb*^sVBX^gaxrNtLT%a;)O+W;*Z;z+)qUUvSe;8~4`C-4E~I zaxWRsb_f>F$?Y$0WwcUX`8j*^CPLG;-YFJ5GttFiIM^gXe7~1Z${>rmLV0 zsOnHb(q`9il{61H&yXzp9E~_s5b3E zpgm&KTGDI3&3Q<^XcHKsSEGqpNI@z+YpQ_!3jR~2-0*B{M)3>o*Qo%!#h}D$TF{r+ zI>M4o*Dbdg*nyogNs(U5*D{XKejjSoP2w_PV2u^eh9ycdlnf7T2oe%gr()W~FDF+TH#R+jAP<2#gf7K=&(~b#V~Pdu)W-PJO<%BZ+mx zNZo=~0)tj5e4~7A3!4p_nXXLj`fc|8rU=-?unx~)3zA7Ze9>=f$mBIR)9JaI2IAYl z4*-KN$-W=ff(q`E*O~O92+${cFp(558f|vs`V(7c2$>U#!k+_CliK!FeG=+8c`n%p zZWDDv`!oR>fMy!JZ%xIdCxHau8wgBVHQR%D)5#%?v0DfBr1m_47E)y!mTyX!(#VVdpEW) z4Kva2dy8wv$zr4YPp;3%b$$9w8}n#VgrH_Q5Fu0(lp6-< z8+b_|<#w(}U&sWasYZ?UR!rw-^Exg5n*g^YMMD|fjR@@a8Q!F3HjM0%=YdR_C(yK& zY@k=|JrrMN3OVJNZ(1-}0IdJ{MJ8$r8l<c&jy`%(1dn-!3#*J}F{mVobsFq!MYnCB ztYTI=lLd|i9+SxFts&a<;u-%Y!&YtNH3(Bcf1f(Pzkq#n{;dkN(cpTis;6SljNY3m zz5?Li?k#FXLI-}n>GzrTzFE75YdDS5Z@#NBO*YzdUAYa!3RZ8{jTSJQD{s@*ax)SB zv>w(y;padUd0TU3)K zxU}52Z4YYzeum|tEDK%l6zC@QGd07fYBi1g6BdU6eDln1XQ-F2yNx58qSW-&y#i!w z5N;aOUkcD0yV&A<8!-5CMsK$*No2K$*VyD-Y9q7BM-$+&jr(8E-M=nzVD97%@@=pH zR+@lZH63tBs(3F2*`W5`dLs0V)0j#}y-6Pq=~tp>fhHAl{YAdFy+*6bc3BNsl}&pA>ASPQ zl?(~I6z#+YY$|j~{P{CpZ2Cs0Shi)YZIM^-=kb;NuiCzRYtn%n8lz7|RAbY19`VyE zc_=EdIV1s7ZJSTuo$5tVhHJwHkt)$JfG4mvX8?sMd9@4}_NtHWEef(*o|mqCeUd6= zGREBkypuiD55V%&d@XGN>C3cjDtr>_mzax`T&;iNHa;7G{ckXW(`P^B+5t9012>Jf z$uG{DX>ZAo+nJ)R0Mm^IRe(47Z+sTNs#tEdR*X~t0R|@VTLy(T!I4c%M)EB)N6l#y z=so51PZE=IzI@=RAm{e(zlT4kmK>k@{7jSoCP+`L*r%R0dL~GbbiNcjOv1K_`7A%z z#xjKh;v;^>Oi5AKhfe^k$}5c9{w@*|>3?soed&a(1q`>sBki9KajGBV#LWVST+Q2- zhYi{Csh2qww(-4wN#bDBu=*+xX#?AIb!Gaj$bGzZjjy4aOjlf6)*>mVQ_n9_RZten zTC2RO>=Hn}v4J6hC^3e#Lc1{l$#A*F8d>kJjriWCfZ77LEDS#EEr9!;Y)v7!!;yYaV7Um6&tduntNMs`-8CRXNVa#mL(u&+iWK3 zo1X$vTRHj7hN29T>5H(QRkZoqBx$0|SGO;|+=TJ7X0=`GwaLp6ZPq$p1kne8oU5Jzt7X0){|7@^W5q+sjX$qH<9 z#GgHq8ylKU4EvV1V~J;Ii^&5RGt#^HA_0?f;mf*{_xM?{%?Z8IjYlU5Zr~-+l^b0O zvI)ra9l3J*JSW0RdYBhS&H70pZH6+ECb2TOKEnrG(cVNYR zYx*aw1#Rd}>o$##ACO3<9xb9%Q?NRoiZH9?L;o(>gd|W-&RjkGIk^g-z`~1R?*@F5 z_}1kV{&Bkf5 zDSPo=smdeZ_tVwMiva2rWTur4xxaR&(otX~FHc z%u>lDF|7u4-)t?PXu)sJ)LESW1JB?I z!1Xl;*#`QbZ!D*QnNV{iNp3bZ?av^=a_U<;0pNU7;P6Exk9_}A-j-%!%Qi{dR!aup zCSaF>*c7NI548r2OH$siAt6nL#U_ZQev?!zB~WN>hbZt$v1zhAF%!eDF_2XC2YgSu zUkm`H0=QFLP7)8P4=hbSZv6Ai88{Hoe`AU`#bdgkZ{O3#?3X=z%b68&%h&8+e(gH% zRe|}o(3F)j2zfhpzBLjx_r<527^xY}H&=3#j~xks2K1)2Y_aDk>p?VVNI;vw7qu*^ z+A02~pJ|X_Nkwn1iBbVXn|(KWWj3LaX5>`JZ6Yj6%}kIQC+pSEWhc5(Bw zF9qw7v1py>L;O#+TO{@w^YHDY`)10UfYB1`{<9z|2^wxIAd(PDfRkQ+4yzhVD-UW5 zKm(;^T!_ktK!%x@^+YCM#hFZ3(E^D^2o=80ut~^@VN%?r{rcDoEr_N$M zdU$RJB+9b{^fWdkfly+TbL6>yIpygi34-;c64TTx4D@nvI5g?&e_B@^p^ z1Nr9*adHb_NpJMe_e4zwf?HGIDn2=K+r*Q1({#Yh{Vw%+JH;jblk@x;*rHRjZi=at ztp^fOES@G)Xpam@Sn0ZKdY1hdG&j>S2Yx3~5ZL#lOd<)63Am9ab<3U*Rw5+=BCJS@ z6>{BMfeGEPTZVz6wlmYjbLx%S0N~fjL<8ogE8p$sptlGFP|zMy>d*R3Mfn5wx^1a3 z;648HYl`J5z!PsQ1DJ>>+bQ1Xl$yUu&(S1q_DQEE0f4ERPb`A%dzt=ig5bZ!b{P>t z3n;d%8U=hru7FMvlJh~X)jCvqr*>0ysWJQZ9nHS$;hCNbfVPVAbS*8|o)YcEO8*(B zs0zOk#;v+5^cyLL7frjVH-@$g5LuJH5CC0SzJlbU7qQr`JmH#@)yZ|>A#9F_uRX*O z(zdXP(c|a-RqwpiyFjfbKIzVo3OxmrD&90|*@je6nx38x6&=w|v5K^$GT$WEsyES9 z8aQZ@e`y9K{Yi9cY0@O3*F;1JblQujxK@}6YSct^Vpm>uu_&8kl<5sSa9jHp-<<%a zX}XQ}P7(lVm;(bmQV&eYJw$rS5{pM-@2y}?xyD*?CEc+e;yEEWCa{wRjfk;*h0j#* zoGKRTmq3(ltbU#L*i2>_=lL@*NwiV#Rs7Is(oh<=F4e3(;G`cbRaP6bVsbZrE?}gF zsm$!z zJrr)_tZt^cDZu>H*J>2~Q>%&r`pHeCiVZL%pHq^5Z;W*UqUsjp7eG`JWSl&!QsPL! z$9nacAZrra#$(S0TXHvU#(eFV`sR5hN|+pa<3yi+p0b11u+%V;bY$N2VKfYggw>%F zd#1;$mW;(Mk!+aP34Em%04f+s7z|^9^(kK7`kc<<`6iFH0^jYnw@oAafdvMQMFrlQ z4nm|t#`q&7^UX>B1Bljwc_hMuTtY?5rU6Og^39KWUFZNb>K zV*b{Zs69}$hhn;#yEW@>XxYSC_Tu%(RTE`GDZQVrPbo+@8f5nUUW6Z~Ynn|!?*TCM z;yaqDVEXwDD`v0wU;3N~qd)Z_nTGXSf=|~;wpWfce$&^z0fhqqQ?giUxyNsyy)HnW zf_ZAAbzo6$dy-6COV_K`aQvr06lHyEVz1GmkhHXV2cSiPEK#4P;D8$Q+9uZ9{_6lF{8E$TWY})5*T2GU)I2<4Siuv(sr8!O zOtqzA(3-Ma@M^TX42b&~5Jh!;h>XC-6p~&Il0~Vw&s9m+Cf&d7j7jz6F%j2)k{5)+)bYT_?RKx`vaq!36qmfw)5~Ay>4goSHf* zILK?I2KOTiDB5Q;4NoK{ZenuI@SgPS7u=WM7~rwblNz$0;!-(j@4r~^*xX8GZ;YJ8 zZNSIm1?s`~^GuXsQ|#Y0K*v;}`2{fkd5~^$0i*}R+Kn_g%*pSJJnxN!f%UW61ehw; z=Ro&T(pMp1GJ!K2Ahv6nz=svKwBV2q1sD%Bt1iE3sHRNn)^Xm73Yw;8d!^lC-=sa2 z1RRr4@K)KIdVLZtD|1t^Sr5uC8+(>*98T+RuYk#!p|4NY{;!reFq{W#ITznZ%@8$a>Awx5cZu|A*wX31$+OW;)tUV~6%bZqDHSW$0KLi&8q@-`ZW&Snj1GuDiOt_8`In+@`aLRm zN`bX8b|zP4LSYK*N1hW3>WE-(Qg63nx@2-QU8$3idU_sizq}Ry z?@vKf+IQ3(n)KvRW-yt>)0{=)3sE7z?GGY4OGT`y-PFW7nXB|D8S$SEqG&*##1IpD zer2DG2Oc>@6R6vcxu$CAmH=){582R@kYwsxxn0B1-lfFw(Pm?!E^b6pi3g!!TBhWc z^nPl12I-o}G+@5;`4BVHB*2-1`Q+hu%3Z@)P+*Fm24{*Um1(_F?4%R5#IKP8cOz3m z7#G8KqGYDQ?tg{k$Z*cu%(uuzsi7^^of{e z=0w?>zK2wed@^9P=7_{>`M^Mto^hJ&o36>G4Vl&^RR)_0AR6E)lVM!$r=arFN0qWow$i?XUnfXD8Q`$&;=D z8&pGlCWS85!n^I0)cZuviMfWGZc40a@`i0q@v9-Ip*^D;7X$pyujoX*dU@Uc&L{;J z4ESkMg$BOqswFWTq%yE$s#cLaHIUN-G_gPp89}2nLWBRdUxFOs30!W+=V=v|o*AhQ zDWIfa-`Hi?U`zpE0$(R2#3|Vu!P48+UO%k=mR-8VH(PX`06dAmWjepTID4-H8r0f{ z#s=HYLG_|+fmZO`RshSJ{n(5BX3v3P>wkJWkN$iwA1pciw+%<^4UT;MuI#~8ppu?~ z#92O%+a2|G3_j_<&?=*r`=nr%cnkcmRbpDJB!6J{wrQ@OrYvv3*%&iZ;Ixr;IE&ap z!36=#Q(?9>tUaJWH0xj!(XI7?_Q()0a}#4Vao_*|mwGd4?0J!xA;#)Q?!gj2YuZOX z#esC4My}FK;1;P{pf4r#D!ct{EOm>8fmDoz=$%|X9yB3rTc!(pUV9363` z>{}OCC@%<14or@O9U}f=DapUs)>xo>V^F)C#K@=pe#-YW{rNs8oI4Wq>CagJZG9DO z;`r2?Y0fZVNm`tj4n^F{)N0ANKp7fyb~jgA8#C})>=!yT@L&J_XV`ByAlxDLO*c5n z9?6JCC-dtxeDKrPc{gxD?~Q3dp^1b}^PS}ZrhooYb)?<^>)=ifV2R*C8by2fJ<|-E zs#q&&Fd6CA<1?je`i(1VbLBvNvQ7Z%WMCnUiBHMwTt53L)~rn?+KdFqE$N(c`dAf; zt;D+6J!jk?ta8ZZ`}ZHvp>7?H1!d$VML0ppf%Mx>qRWJ7$EMkU-ZsPbo^9h zcBqU=AhRq1MzqBRIxWMJlHm(`u{DY<7`$vUqm|uMCEmaUUC)-mWn%GeBiD(Jr->m= z#Z4MoiA6GuWLm>5=$(Mr<|;15BLb9DV=%c&q(de|E!tk~koZJ3tTqMNzrprfmY+-& z8XKt=KYJ=mnA|`@x-zT4URs|~efE3sx1V2r1rZY$Ke$&023k;*FA zD`^8{$yDK=g>G_In9df_%bW7w&rj!><~cj&odn;^wasg@GX(^6BTrXw8?;U6d=eb3 zjYoYUz)avECH01f-nz<@3hxxB{yTsT+6!ZKvNqNrR=ktQWRRd|r-r_fBwMl^4cNb_ zKrtYP#3~AwED*6*xu2d<>WLys;0BBnzr$3BS%Kjce^VpA8L-&`iga~3z20W(y#;$m zt_7d-%`fysQS)2V7gK>DA;I@$L)7B;?PN+~yUdl6Ip8!17YsbN_1#{jlIb|Rmd3xy z`Wl+)x)=3x^80^&rc-P}ZEAcc0|g1>ZH%11Rlsd0#%Q(wGNE?BI#Xa|Ds(bwoX&?8 zp``#Oy$=OIeK`kKSBkPJDb~L3?*n2Wi3tq~0<#{|^ z(^@elwQE{9zFfgg&zZ{dv;aKQdZhe7TR#f!hYHM>`JHJ`{-k%FO*}>*i`c=Cs&ES4 z4HI-~V79CTrBLm)C%NiLfa~T8PDaeF*Wk92`8KOX0s~#&$yoRV@JoXTVcZg6Gd(#6 zfJMp>O(WztC3)&2M~WzNcCDH+i9w|2XcG@x{Oo~ei~@lzn6N)%y;BKGlho@?(L!2H z((Mcdmgixw&^030h-b*@w7=?`=IK8_op(#PeuV;5j4Z_w!Q|8P>A>RI0NwKWpU3lIKP%mb zDgKaaLpq^Lyygo2OuF*h0D;Y<>kD`yz|Tr2Q1f9b*-?w{O)RQR1Gw?f+{kQ@-?guI zAPYra=cz~PmlVrSW&If1$3cU0*WL!(p^0NU5HY4-2%jP3p>YUpG?5-m59*eScU zO^7sZzPy*|iJi{Qr{1NhC`<)OD!exAFKv-X*V?I=Z^AOsa#WuN<>7I>&tD(J(jKgbX zXL@XIau}!X0*o(fZvj9*JUb%*NtnL`#5P`%^$`17?1i*9iDSfpK)_f`ormu*O$Qs$ zL)Z?YzqDamOu=M)TvLCa6}Tli!gvR6?b}FkO$mXYXQHMnf~m5nQ&ZbR{AUs|71O7U zLcQ9IKU!)AZ@76+`37MF7QQj9lyp)yfs9Hs&`QntLA@G&8uQeYP$r<%<&>xi14W-D z3BdNc!T=S@Tur)02Ylvf+UZ+Y&f6lB*nL>`o5Xi|{dnX)ti_(Ad+b~0&lMOXqQ_@i z97voy@U=+8_JQm74I$snzW50cmAueQpy>LnW=_yGQ8rDL3K`wrBoi``wHXV4sebL0 zWBTt2bR^a0>57MXebw^WZTtl%@JE_N6E&ZbR~qk4s{W+vqX~4wvP{k6?AO(`f zx0QmtWGGxA@sa0~ zoWYZDWeSvr&hGM)N|W}??Q;FSvGPCN6E!uGlTAixKqC}LdWN=wdfBnTL@Qwqc;Etn&|k9j8Mclr{b6T4#= zj_I)5s@m@TZ`fIo0)qrZdQEMB4DGoieGd)3tI-xpUW;@csl7~^V4Ysu8eJP>Skm;r zF8vr4uuj#s+sya`ed$i!&u;2$4P%qawFO#$+ z>1{=h6L?RamXqkJxyCozXGBo;1Tdb&rKf$m1%V{yG&oCyQ8YwI!RLU_)vrzGoq@_b zG8v|dV*|`=GkL+pIw`FaR)zqZPY0)qDbLy~npAz8=X=2V{s|DjX)bJ=ou?#r0-Hub zqe)H^yGW<`3hcPXovSl)Ci@)Qq#!8?y0(v}s8HDR^= zB9!)?Kmlz!wuk5xpTIK>e%mPuQjr*t)!_fzb*ZqotnV1PN-@4;7EHYK;#F9mbXFQN z0qMKl0M@q*w{38xit_e7Nn9X_jxeeH7*|s4d%dnptnUkhHuch^f-m(*nV3!Tn<<{m zUZhrER4JW^9uvEwZvf-8r&fj3uX*Q96eW46x2o{AsMF*?(yclmY0~Sht?ySFAD)7o zVSPviW2fFW4fY1)PJwZ1P<{0s>tP>ne8?;+500IYTTs z%ROup7GVdbq}_0D8eJ`Wen>HJ1JXAjXc>cz^ad?jPVsh*$^Wp2{4~W`BJX3*{scD6 zv!AX+&F#nr0B_EE6*oox84yLLPmH
z4{L7$SYRp(ChKJ_89YP2Ob&Sv~}bFE++ zK`C2k!596$)OYOGf0mNAc}ApSv};JJP1?|Un+V+~@00IN`)MYfs}|3J81Sa%Z>sy1 zG^4(8J!pZ|5zL&`_?iF$Wj$!JJR$!~{h%%PXoWMo5jsv+-_vNn^&nR90nkiti_9m&;07w&{+CF!xbC=?06`%Yh zv51~MTF9kV1}Y`9VfbioWnx^n)7iJ8pq4;=a~3B3rmi=c4f_7ap6y?n&a=tS3go4r zYx+~F_O!og(EA1;Z4n$uRc)>bZ)4nK%FMjyE5LgJmGu^2&tBD#n!833wcJHsissg*d$8rRFXstnF38`?-T23mCVW2;)~cW zd7UK4o9uQdXeax$#hRO3MoginDR=7a_v#<{9}S}Db&Y9AqXJsw%8+#VCqz#d`vq;= z&6=Lq?e5+fHzs!N<(X{8rVYT^uvun56L32Dj-`gql*|eE*r-jXq&Nk|dU)OhcpH|C zD9TR)pf~Vpz`&$gWhaSGIhOT2#3g!7cmNpOB*tVUY|hEFr|iBZ+Gtd_?0~&PiY%)F zPR{!TuIw<>t$4IOPhXkR{Z9o^BoQPXjA^01>BTdBJ~Ej=1JES4X9K{IRWi{&dYOW{ zJ)@2K^~8Fas`wW0t(K1gcLy+qFINUP;9^X+Z}u?Tsi+2PMul5#|IrO#cipW&ZvVc$ z4lU5W0T_E&GxGdTz4zmg!p*Q9X3CHz$EodM0^F3H+lY$3*sdf4-UMRJ)oWEYmQJeT zR6KYqn`7Jvp4~@&$vbaz$X;0=qL-AK3JuF~klVJ~9~ zevM!A&f8c7q#m1Xufz-6Qp*iMbuMnxMP&MqOm-2lX#${OHKu)V;9eqk`QOxG>c#%G zzGG%>5-_+uuh;Q+BG^cRzXigSx!AG@w_Y2mtw zox1MKX@kPdvh0&I$^k#0VhCkTsEFkOYn!}Aw>`XM|4<-98QyIn__Nb_ReJ%tR1s}~ zPA`IE2~g7DJ8jgxtGHNPh04QHo(H_Yeg0G>mkbxs#7V0}!bn)zhc54Vw(VQ^6x5AU z{&W>@uCEJ%IATbe&g)jZ_kg58nx#LjU6%(ox7R7iWNigqO*6Bd&Ley9CNpp<%O#uv zIBXauI#EVO`4d2GP^_833<}KuJkuM!#%+IKfjF}{E8CWo|MX)EAq*Os%yRBq({+H5a{_C)F%71s^0WZ_ z^c|9f3LW=1?Ar8vOwpTS+X1oTg?&%oxj)x4s~L~NEJ;2N%}r#`MGFt z|Mpr^7Kwb8)X;D2Jks7cV%=!(+eKyPb8t_X6Bwtu9%LZ*m`swvs!Sy(mdy3NdzX7o?MP--o z>!ZaEVYR4|t7x{g_hLqFOb|B7s6>M!1{p ztpf)kDRTP%`%nGmKfSmtRu8TKl$gGEf?-?yc?wEC{oMZmr?lx+_#gN@e}9&UEH`{E zBf-<+ImtRSc;1vD-v0c5!gJGi-#)|N|NkHHdv=|sXCi<1>G{m}(DyU%^Z%Z^zxzne zTFd>}?!or#_Lt5AeJ*0_{^$Q#?__7p9U}id*|+}lT%T+^74&UjmwWNEFF$8~=kJ=B zccASS(`WuI>C?t@REqs?FXyF>p!;#8k{|QNm4MKYxwVx2D z>D{)Y-jr#aOx2aRzuSLkzZZ3~Bq%56Gf`noWAO>um*n)S&(O%G`Xw+pC*LTr8{5R3v;>2`)q@j&F_$@ z9WpsK?ZKv(>@_Gb=WxTvGl^~6VCYj%iYddTyEzd`TF1WK)8s4&Z3odgJM~6IVJJ?h za67R%y|gVU2|SPcmN=oN9>Q$^xxN1f+%aPV>5xN9+cX7QG;uKYft2~X<{_1{$dJAh zf?g7bafr^2aI1Gens2D+FQo5^s#_q&sJww2_p# z@xz!2y(8`{nIt0B*vnvjiN7gelJpG5-L4o;p1_?uvnmXoQVbCpA3D5AL~T7F3^tqAkqd%5A_ z+7R8ge800y7$-sX4G=Kh^NHGHrHJy&<-BCHHwN>_|0WUb6v3B30w^k1;(|3aPFqIy zWMHkP)HcX|b)1`EYI-k&8l2_Yn6o}L#9IBe4f!HG*+ZL2U;%-w2K z{y+cxaygG=vowQ0A>t>M@`iWK_?s7nhjwh~1pr)_BsN zvB=R@C^`kX|Npp~Cb8IL`E)I9pIjFwzWqO))u$dUgRp*Twm0ORE$?PpYtVuBp{Ea%~UP(t@FG?o*B!P}-y zhb>La9C@IPp4KNm5t4=2z5^1y7kt*_+^xZD?y?-3gy_L{OE^>~*dFg~oC+{X-WdWn9yA0EwKZ zrr?z6Y|xAiVnhGlYNeUJ5rSa7z7x$l8an%Jc4>)S8w8)pXe3RtQ!~r48E{D2Zrdp` zD`{g2|Y@1t2j|L60(_RrHyX{YWq1f1zWXStar*sR7jyQKTxgvJ$ z(}WtGpiRlo6!3m~aDYh1dU13JtdZ=Z+FwPX-k0? z)Tn9Ce|jSJnSQV zpY-4Tuz!|Z_sDmedU#CmM}tgSRj@tB^!^>NewL?@@^lf>RUO3r`g9)c4Y7x93PQ{w zB&8@TXOW^~lO1iHjV0!zjk;<5$cQpA3Kbm8^n0Yq{#!bVBv47l%1r2(OgbU42cBt? z8TaG6P$Vgl-O@cIf$dg5Y_qo{c_PW-S)Ajpj3%ccnwPyuHkR6rTOeufNh(2aIq__8 zm~*(hhpgqMG=1R3ynVK5 z{I*8Qj@z5w2g|WCp>7TLmS&=MqUTk|u%*GW2pkDwsUe-@R}Mg{UPi6012S|6ryLm| z-6uj4I;qf4j)(BEP4|vWk&<%f0cUelE;l?|G%zPgfh8iP(_Tlc!5M-GTJ}6La5Y4; zFU|Z120>{*>G!r=xBpA6;TMCb9*i}aP9c0w1S&L$k;zmiG=oCL7V5njye>a--eApJ zuI&+*gTk^_6#4e=RHKewT+$;)dhM(z@a=m}Kqohe4LOTvFsk2Zh^A|08JpM;1j9Hf;|EgUNtvnb#ARCd6dapLN@}-WG&;}H?~w$H24^(Uq-__b z48IYr|5@!kqMv2ic1bpJioyL2GA`;&UN@N_FRAC_Eca*1kW+T_f-p4v{Ik5kWItb# zC;Ky|mx%=QG^>3ftZVsBw$x*gqHia5#KCpAFIBrfo0Qonq=o)|niOs6h!YC2u>-UZ z)dWbij7^hgS{fv!COdIV5~NeEzipGG(uvvBn?+hRj{Lg_y!=b$ye+ao4(2UW{B#)4 z#TnI*ZBnG^MdX+=`W|Uu(sP{4x)=nh!6i!MdL%Rd7NYVE4x|6%=O+0gI=x7~gOF^R zeVCZ4Ngq}R^v$3sw1jy=fI!NcRI6_rP?WF*ltXGeIsF>wSbI@r6Z)A6wIT@pw}BPPV!s6~KK|~nmh&tsa|VNwSaOqqWy&6{R7(S+dcx)15StkT zV|ubkz)QquKkefUt|urACegHQYVpu2y+8c2#PT8DXnow(hP2IsfoS*OX|3HI&Nx^D+B(xj+qNocXZlXE`d z&ROKVA8os}U>r0M?pe#4X zHyMqyJQP!alP=7GhmdQJfAb(w_Ey6@-r!I+%vx`OMS@dL zf-x`O+2Z>q$898cj0C}CkU#N)k&E^s*Fdt!job$L8A5PsxtS^iO9m;~G(_LdHa-3u$QP6FyK*0kJ<^G^`z#Q1K4-2;Pd@>$fT z8In@Nb!B`rz2iwTX~hTj>)Ls@1+a!;T4a;urBc%g+4%-BX>s{q5WjRO(?xk<7&oX2 zLHSZ}kQ!tYZ_WY6%`{{h?KNU_r>6U@aPu};vjHG&h$iCP6tTJm--J!Pha|-iHxk=% zbJPbS9A~*74W09C1pY_oi>GzPMJC z4WR8kXYdU_-B_M3=Svo!P=;4A-j)aB6z9$PmXPt}^rt3Ksvq}_z?blKrEEDF(8(bs zBaoQ3E#h%Aic`sYBR1Rc9GX(?w~RGyh`yCV?Kn9JT!{n?J!iLmORMX3JAWG`frbf$ z`J5A+5+OsS8gz!vX0nl=?xRIlr#pN@pEew5r#%0WrLDLj^`@_gNbhU`fGy%hg6seF z`@gK6N1#mNOkR5dEa_o^LuHt-U&NFTbf}w%ovhPKllLviAwfYRT)jD)E4%2C1BaKPziP z15{EjItx41A^5X*!<4#HGEQ455-LX(A71&^lD#sl_(X2%=P3?Mnak=V3AW`;{F;Y|3BU6B;9B2fM&6qBoRwN_&pVogPp1jrTBO=Dc*_sC6ez-FS zy!$t83JoF;IM+1DCZp+ekcA-U6up1dfSm01i*RmLF59Q?NwO=X0h&zF8v2Hb-JB*Y zHW`^d!ytgh_9tYJqS%y} zt85~O{1zE#ntrkTEL8Ng!@h3hBB(>HaE7M;er+tLtk`D1$T=b?tVxPK=~~)=X+j%K zCQgDuLt|0Jo0utCX~Q#c!tW9Ec#=+<&dtjipU&qA36!;Gv>n1WWYhkoo9)=zhK4q{ z#knK)kVwuLDJ4sWYD<{c&-fS0d1i8r9;B4<5Tn-efRpCuGeqj9Hf^&>+RH+Mw?xW$ zzHlZ|uhLm&GYO#}&EcfqA)N(6hDQ(v8pN1VkPRY|b0-`$2cT*xt2h0NH=9F(!711v zYnY~rjN`ZcfN76XGHA=7Bv5K;yS_o^ut9hz!7MqmTlqRL`86}V@u{Rndr)cL9PxSS^ZuFX zJewJBE>tg_TXLwB-MWkQ=%hfRLFRlO)|$f1XSrXS0OnHwJfTB0h$GWW^s~&!ISJ0D ziM<2&i6Ct$!%LHV>3e(m-87K?o175`L??4M(^V9SYG4-#0pY|KH=S?8**1xvA9!a; z(rD;Ij4x_|$!4J-R!TWv(^(;yR}p{dGMsDExcFENc185jdk z((>N{QF*Q=3aKh|mLb7jmIO*3Cxu3|s{x6ViZl)55AxZ%QfjI5N+%4Fc zP!BRWbc!>=nvxYkgH8y34*VUuk2fS_a`>sdRSyn}8lYqVHb`MY1PYuTYoICl>x~!b z=4?qe-oqJ70ZAGtNI}I0X&`s5;X8hEv_vn=ikX{WXVYMvlFd(3QJu!%!ZHV6J zN1FFbh-#vg*i40*z8lh0cEDMj><`%!B7H-C-`G2HCO+*G`5l|Q7^#bt|jj^rP=d%?-Icz z4NmP;CMB(XO>EA?IUqqrlIfz;jubT|iFrz(trEpl^4_9!y|k4?dv>zdq;)6h2-0)> zzkKko22mzjx2oM#P}4{{+_D;acx>=z4`KtPVe1@d7D$+kw~g=fem{uxKx;qDPc`PL9kWKrmPZWyqM*4hbZr6qJs&q0%gZ}r^VkXy2^ z6rp&bE_h8EDLXzPG~MX!k>sVzQLRj8Cm~7|0#-_jIX&An;hkiNeGl4 zF3S^Qv-S!Z<%U#_Fz+S@p0eg|PC;5nnNS{zx)C%lN$PCZgc$OPk=vq?##z{RAjX$! ze$i~41{+fbOM@O_i>C9Qvht1NPmYqJ0h@bl`R5uwd&_m+`VSJ!c5!C;gtnO^xQ8Sy zp*|KBHvykXiZ>iq^qdm)k=q>`{l~vh&Lc4DrbEArb3++~#x}*$I{aB2KohVvG>$Zg zA*6aV*m&*TDv*V|G_hNRZQ5U|Zk_j&j` zqPKO#v(Up$jrM`rJq>0its>LNO2*`^e8)EsrY#z0v&!w6?BJ-Z%n;=tN_<`hIhaaz z{iXX&@AL_Glr~y#`V9>lb{_3uLWvXcAPG1d+K4I8>AFw85#7U=drWoY%p_u(UNr&D zMhM)>*&Mk>ly#p3T&C%M3cOMY`v}`<5W(x7{-Sms%>*|W&g$SDcmP@+3|b3MP1&ZL zLoe*q*hi)v4QV2Qkh|U`WWIHlzMT}bFx(`dC)t)I9GuSDM$|by&o>&PZ$U?2f)2tQ zP2Yp`r;v;~5!G7q&uMUG3buN&r}pzGy=E7NJb%=VdS|?fuUNQK4Dfj8VtN>2HLiu4x@&n-~0eJQEl zZsd8=W$Wdilgw=+7~0}~Ow*f`>&6&#%DH3$U;5m{@K1@389KQIw6+zX05X`)w;|t6 zfsdUwOUc}pi-$O1^1j>2LW@k%GyI8Cg(T2KL4o>_G*w3uc|uo_T24%fkN#ON_Jp4C ze`-391R?!!A!^7{Ny&o>V3LfJIA>CZuw|+vF6*}O)i77vgMP|EvPRhV7O+o>;|HR1 zulK+ZuaZXbZ%}t^GRDamPxsJ#rs=tx?7+sk*TcR~dr9aMD2e2T6`l<7yh^RmVAUWP z>3o~Smj(d0$+(Fq`PFaUdYud}ld%nd&xS$Yh`&9;E^S*ZViNGn$Wg|x35LHWeme`D~#El)De?_Ordz#>78-#vJe*XsAy*wiu;o(~#`z--*QZYyq zrDnju+E7zLIOX+FX>gmkuqo$$(jBL3x!*MAX)K6nuuWTwim@Xb?)r ztG}s@w`r>F#k0JyeV4t!(6HSQGKxgC+$UOMHJPLh&R+r$I)q{Nnr8l+;DHiVCV}Nw zMF8@Qqy%@MEjf$*wS=?unK!{;QkLlALkSy#*IV$l)qFGv9ih~DJ&zmSv~>Rd*JuAC z5|tQM4QzKpwqP5UjTRdj>on7GQvh`8J{@B&K|QQPLeQ)bX}TCw;F_F@Eon`kX@Z{f z5Kx|Cth;2o%Jht+=I*H^LU??p^P0-p1R-j$9yg3Ab$z*0vgE{Qh8< zHe6HRDs|E1a#PCsgv1bDCM)%`Mb}QbX-i^Xs~p+s7Fj0uemkWf6YqaTJMU%unp`ZS zkz}0v2}ps-M9AMw(?3%)q2=452*$TA(kU+M(DfZMy>HMjnD3*+g65gibj;KPL>PZ3 z=eV67{NxO1pN}nhC)I-Ua2Jy!BGa(c*q`z=6DFBC;;w%RB*^`($`Vp%VV5@OV50xH zt=&fU=74)ZrHWFbRhPY?$?l82H08lf|8v?4b1#2-I*&LS;`D3CY71QCS0!>vMt19= zntnHpe;Q@-s#zR$8!*zpZxD=GA?V~x44O!c%QTJn5?GKxbQ&q%^a4_$Y;yN(so-{Y zPdGEQXDRj3y`n}1o^`V(I&%(plumcu0=xt4QcB*YU|~AT4U$5#J}F5f)di9)SwyRb zeIOG)4%Z{|=OX|TFDgR4Q#x|sf1ip;-R z+rQQ9X+tSxww^BfM%(We6n41=((MG6nEQsosodS|1%xwE@jGot4PRANc zi}a;HpaLpLf{c`a5M3}Eki9Thr$5`A&y-kE^yq+dLKQL+F*6D5rv#F;WOPWF&TwB_ z?p=qZ^OfFWQt6-x!RREU*?BDvsxc~C{vE0@_|iAEDeI64 zkp`K54Vet(86wYo24j?rJ8>|Sq^`rAAqd_n*Q0Uc2QuQgH6#p4@Y)1}Mp6FAdr1Q2 z^I-QTvFi$FJ!t}N1IpWXnIQ7D;hqM3FZY}T{Djz)G%lOx+)h2G{w2dxX3L8dEFs9Q znSi8rHUS7f8AMG6_mk7Iy-P>_yFDCJ*7)g?naF<|2)s1!fc1 z4sEQbKSPuX(p@zOLF#$BIop?^m6V80Yh}q#KiPa!IZ0FD4foqL^&fC=w@vTg@@K?% zd^$H|GVo`Ss9UB_>G#uR|E9jx%@`Aeik9AJQ{XGvCea?7dP?j>$0lenL9)%($Rwi~ zXQ#YEFYNQL6Q%TQq~O?O_mj5Yw^-;C0!xF>38g#29#F%+>6JRgnwM>$(Za5o=~dgb z++hEzIHgJoP+m&W$=-KJkdv&E?YAm$*VDff`;~Z~$n-9Gwin;=Bp3IqjpekNmtA=i)o3RpOL`SL({XiG*@tP(przx)qt>{INZARZ| zGbzb*H-X=$J+x(=)DTSv1PDS#haEZ~F9lGCQ;fUK1j;G6X|ONn3+Mwub_hzn(Fim@ zpZZY^8L6>@q!059dqdv2!J3-DmQH+6$@CQDe|pzVf7Po{^Z)hFzfjJzi$wbXHd)85 zCxlM@8C0mgaCsAgRKi$xF|HFE0MbiL1JSKGuUVUvHIdR1p)@eT)Bzb~LZY@jJ~r6< zRMvPA9jE+81|^|)^L3hZgXW!pq}X0eLN-kA&w1D7_LoHa4dYMwM*}8=IuLuwmwRIcN+#HQXG7A1~!^65E-Aux(Dbw7Rl1wm` zf(9B?5G3YB!zuNR86>U4{#k=YPzBnnm40`tVoyitdq9Y6B4pl=IwcZ>5v1}3p`*5k zBs`nojZlRcox5c7&SLKpQbVWq$Qh^oGzQ%!@0=RdyY|W+mQ(GeC5BRBOeOUxI6i~@ zphF1#>p@iN^|8%zn}$Q$yl67IWB@-kaW_OVOkmoN`$I|ZJ_UIj&AG|oG+Y-_=WpV2C6=}F&_I4|39x-C!IeM!mLrhz@Zx0O!WBs_+_KRGcP zh;9M^gGkfzv=OeI+8JJa+s*btuJS#7;wK^A7i%(|E7K5d5dcym zPGw<2d`cWxi)ST#WL2E<;nw(WxOD!Ww@pvpt?XiK&7=pnL1~i>`4o7X{+k|bM8mtB z`UkCeJV7MWUYHh-v@V2-hd$${HJj7)GczHhB`>^(=-wHiC*9omljC@f)y~gy**UQ z#@HC*Z)nfxc0!N@o~JmP8}Gs|1yOX&bb_EyF$Zsi8q-0uk#;&%Q?Cgn@0-dxv~HaE zp^RfOJSP-#w%TyEk^Ouyq+6b{$r+vEJqdIV3I7lc{%Ih-nNa$6Lo_V`8}6Kh0H(b? zOB6LtPA&)ktV%Ix_@x6*QxZ4hLGZckJnhC*Z0kC#fuNu?o`j%#@y zKi!ptI3I9tezKgm8M!2^$@BsxXp#n3XJL?TS&h>8fv8mCc_RHh6p0~-8aW4~^!kdJ z5RE>|EoH@4S z6L40tW=dAmGo~pmBeFZa=XTIwdtWx+N6^YdZff2qO?Db|s=&T)&eRd>w6TAkg0f%l ziL&a}B)cwnnCKy#ScvK8yiD3qu}m|PKOO!_n~bQ$cd;>is=95_A4}sGM$_do0p`?yuVGBrt?N8WzCto`L~I^y+T4j$*e#A^K0ciD_*-n zm#R27kj?n1?eYLF93LmHxK5^~_0rexuWJ45<{{?EVr9~s1SWjcyfIwpOUz1+tX&>s=F znX|O9-88AFVr=&`*r5HApX@H3*_jPHAv1 zjXvjQB6^c7{wJixl5Mq(*;5kJz@{|#odbfVE=Fv8J>S2ookuQ_F~B!NLc|kIBc`dv z+ANHam02cTTRN+{_o!IN+6JRXT>4uxBMB5NbA1XPDRN}tYU0eN0OG*?uHr~78BHgB zLz{_H`rZ_gqye*Kt={hC^qgmLzNdFeQarc)q)o{aEB-eJN=TA!G(Aa>wb{>v$e5}{ z73W|}Y9P~jAhvvxl1e3X0;t$^qyvYX;P$VjHYEBuW%qtS%~yGnap)ECO0%| zBZg`?by9}ci=a7WCEEtmZ4j}c05B}wCC=_^lWd2~a4Q!=5KGcDorWH0nR-g9NTYJg zyKlqhexh& z3Mg$ue}Cz`z8cm7S)oCCNYGD4&2Q(aFHW6g%;_^XT75Ri+cdr=TeWT4P3jBDK2oKH zxi>Mf|~x)9r)zq&KK^T1zRkg z!q1oUPJjZ*_U$o)4c8||}t2}ta)g5fx%L7;8R`MK%5PY1@znQS$fN@T4s z&88g!u?_rBS-*`#Oeoh&)^Ib5q>rQ@FVPfWPExuV_(ZHNvrlDCYnKvVT}zv{C32+1tS?CR zL^Nr*&8WU#e_=1CpPdp!I(1D1hv^i3L$vRf6#O$32iEzgdivBfood2_duLNx`33?| z7o*VtwYeR3V+fD9+&6lKseHK!$S4|ibM6znZb^ejSHpw1Rs>?pDyVCFN!lEN!^k=!9KL+#1@Rv#?`n zJx~SY*C`He5$g@YBcyxV>}$&GjG!rzh9KEIy#%%=Y-7yHcXoZAaJiN9Y}4w2XM^zO zkU-L&t7%$nQ+7*YxVLwEEunqlPCLa)w;NQ4N<5rLJ7d>qTe43mh(YJ9>cW9GiUbc^ zw1aT>d#ABn}(S4_CEdV zK@{Z$x~ZAl(NBZKP{_A{A)>q>X$+ibj8R6~+u@{B7A+3#w2lX$DG8bB@SR5*P7=7h zjskbxn}Rn6-#Us82%>!-5+F1{zUV|#LNODWE$R2Lq>R&d5Cm!pUMA*mgJ@LkWKR<6 zOU^0Pq$2@l3%g10JROoak84Q~&U6L}exC{ED+E=Wp^gctsE1@VC6v?sk5#2#FXx@& z%+|>$Z5h5dcIwljtkM*{*#s??YlcWAY%-`R!=$76w}5f0*=LMl z7t>3#XP6E$5T`zst~VmcTLWK|QX?>!=bPj<-s+3mj2Ghk?Vtnviyd;0_w(4>Vlmj5hI)OK8%z>5=XNHR(45X=M& zsULTUs5j3^8f#6R*_5<44&w}KF(Fs9QIk+TY{tB4G}-JwL4?k7ze(Ug#nWqX|6WkQEh*`A&p!nLlvl{CzwP}p{gR0@?Lfa~ z0t{orO4_QFXx##;9ukhUFDdCK^dY0a`b8uvm2b#mrbCrbu1&y~#?7m~JK8-NOQU6G zGp3uPwcH>ycuph8hJl!tHeU^?b%G61o(Zu@#(WBXOnD~-Lq_UiIy>pT4N_LMZ`dYD z&jA74r*nF~eC8-(V_O{3`XmaM8>b!Nb(%E$Y#IH4{n;c*l!4!91b#v-KMi$|JCJOz znQS%zSSp)W&1fmr-aA9$PlmuooAT>qn`r@z^E?Y9WL2bFd`FTFuoHizBr;|CHUOf| zB?USY+D2HVH}P-g$HAc8cy))&V4Yoce_ll0=b4+c#@yIBw5DTTwRUYuZRp zs3BgH?J2M}Eit#X`Pp(_Rp!1)jn9U#@};a|4!IerJdbNfp1FZTB8J#JQ~J)7nbPL+ zYV#mLooP9t30yy(4pZjc6gca1IBpfvTk<}LPy zQm9l szwHpx~)K!Bo0DX=yAbadF`Mm;i7k{H6*QyG;ei30lFe}N}za=bKiY?(2b z3zM?Jv$*u%MxE%TBjvUi)%ui~9k@?4SV_(`ahBY~DmUvvc~q(x(O=5$NhW$8_j6kY zp!dP_%bb8jPz0f%15La&)8In~`?R$IHfuL~Owd}woSw=(CaI*=0ZQm-o-@&MP-MqU zos#GL^lTITi|ys4+IdNyjl9PJ`~K4Jo20mYGKiYWd8hUSYNs;$c@^s`n1TyBV%^20 zS;&D)*$vSJq!Js+ai#|M6VN`=q&odMnb0CCt z##@ArBA2KB_cS04&Kml#6Oxb(F(wJ}$!Ac+>t~Uu7ZoxN^SlS|fhS$eXl{CCRG$?O@Y7x}1hP9?i1`RC9u!8NG zZ5a3#e6JL!9qCbgu|%mXft-7k`Z>>VPbl>W@()K=q?u#%ZVQpNJeM1c*4u zTCUG+eGd%UEOJ3nCY!-^2%5=z7-W%71Wity63%Uq8hegyW=xo;O*y^*nrE7z4YD_V z78!51pP%{{Z8EtjNgC=H5~$pMrvnmagX76rCKUaEdu*pxX*&uzU+F!``n9-o{qSzq zPMKgRNl0ypp#KSqgQVPjbF7r7W%G9=1ENS(FAPG7gGDl-O+Oapejz_=vhNm`%s{#{ zXg=ciw{i;gAuFAx6^T>W@G2Q&N@Y?~j}~3OM3vD2ftXl{X#zG8wWd3sbT?@LLidX} zFCw9o9P?{$=LRXOOW-<9@fxz+1A<6`Hnm95Xw!F^TqgFlz%S67_;4&i61obk{L8ki% ze@%kqIhpn`Yi7o}}btc*W{+hEmc<1CKPo@lqa5 zWU{n{fu7HAkOe1!Z(6EN_m{|M5t7a{H1z3APG~TZfr>uvmx3q)gKx6JlFpW1!0GT1 zZlEewvPqLA1p*!0dtiE(XmCd}DsoO}xvSuNZjdaBkS6Uca!$#aPWw9XU(x*|&GQE! z32C6iu+XQeMv|4&0LPv;G7w<`d_pI%8ICbodU}s^MyR9QCgCO^A?KayubKpTdd^gm zr_yF=AmP(JGZIV(B4T7ernZi6_`GBIYUs%b zZ<1MZ{lg1GV?8|BAtMI$uKu+^EBYHldML4Jvr+d4C^UJ#`%efn+}e&yyqKP zr9_F*A!wcMP2wN2#Ikf+*w~r$9ft6fB%VeYV1w?^5)!$~WN3u&(`^C*!q;@$i&ts^ zD>QzB&)xX*G=W3M1AFm`RCdf4=H*(vJepNI|mJ7lv7 zs;Q*ec&2_CiJH(2!%tDQn>c8AIZSqxvi*|AGnFiEwc{fVHAQ^>{%qHq6i$EHC~X6j z4XkYX$Xc!iad?}47+Qus@{HTb%?-~G4Ms?5!~|;u!P)Bincg>w78q3HmHH&@?-|gA zgwhc^KoP|XD2d_SBf{KA_&O6jnWTzvNxclWki8~B*|xWIWAFY6ii31fPJrqRpN0(v zHktG$aG;U$MC@n9mC1V~!!}V4mSAgIVYSndGyxmZ*an&T#t40z5uF6$Rh+5%EcX89%xTbTO8%CFkl4wo z*X~7n>c$tA&hf3JMUkHkxoXu+$w7t{(sU{5y(OBBq#S9h8&n&QAY9)lZQt(QMr8ez zo7A;7@}CHzZp!C$Qf*rYwLK<;b@tROw3~v7Bi|vRc*Ia_E?6SQBbSU4!QCzntb~Ft$hBHM<@J<)X-8FOn#V z)TGH=V_#d?0m{)t*32-78%KOD$@dXK+(d9olb`MW(q?knTe$K2$rnsqRKzEjx!b=s zoi}Abr@Tx=1w?>eY^#uNdO=bKL>Z1Z(;XF@`x(}NHffuY*plCof*|sY6k)XJV?Vy* zmN#d^{gfujYB&!zqbEH>27yW=&g6Ry8bJfGPZ>9PuWi|tCJnbh`H4#>pf4}>D6Lh= zJ+|V^lOrd{&JB?>Ls1R=8uh2&AYvtac}Cg8ob3Y<&+NzhoM zaG%aPoy2L0`c=3)1<#d1rZ!WlRg6-Ctevr~rx>5n-@lt^QcleifJB=z^&)K%D4W>y z5Fi@|Z4t$E4l5)nw_t`&W|9eOiw+u5_r%kf&djIYE*&)fa%1_qIAK~hEwRuWhn}9F zWMf^qiI6xxGxA%D%Wojtgzj{4R51l3qyc^6#%huE*{s=;q?)XHOEqvak`|6Pqw_Dp zJ8?p^l;48`{B*x)@7~lyWrJ3m{3L!c8eEz^I_1mJwY*a{AhmK&>Hn#U1{DD&cFUsa z#$J(f7v)1dA;F)5XVZT05|B+kXZpFH6d;~5ga$v8vX#VWngRi8&?wi_t%Yv-S;9B58;wXyi9~ zer{_sJ;OI-S_r$j9aJ&Fzd^I;5QrIC=!efD&$lY)h~UKzSxm?$Ib*b0-AfP&<>@>!{<@h`GQB6KW)=2yflVJ54HT>~Gg)p6V{_XN%c_1u zL~O~#u3<7TM||e(*@>Y|TrHMIWuqClMc!y%2Q`?fA(}8W(<#1B0dxv3=n#e-6#2WJ zw~`)BVhjScLBMD*OoN=13?#&8N(hawNj5AI6>kO24WK|sJ8cl$0WC`Wz!j&oMS?&wu!{%=V_aS zLFJ5n`V@qA@d`tMpn%xFMCQ5$12#S+{hgIzNw&#M#o2RrWRf%?V=p?WXwQBPiAv+4 zR;ZQ)D4PHz1s$Y6p}%DK%#=jROo^y5B?sLgWa(XO4+U-HKj5-%-qi?BnYwzL3+jm40SrY6IwYnjg#}%A$X?AQv(Di5i^p{-|GH-I>TgwyK3%d zGYr=a&ly22PXG*V!8ECyba`5!6A(n2Oj2Z!(yyd7>)N$|tP_P_38Jiog2{R(13;td zbYW>$Ze?N8bOH@7Hu5PGYI4G#ku@;q!Lq`4eNT>q1awASeS_e<7!2Fn@OMvBva$(` zQYJZ3kZdzdicZmB*$9qPZAyElH|Uhrk0XwLaz>>8jtmAR9n~tYMN-> z?kWjZY{E?MK;mI5aW4p(l}MS%eM{5e8cF-*o~RSxz86Q;0f9+E!L(j{V?8F>&&Dts zgokK8C5GY2$R~N7jZP9h{GZB?q(_73Y)$X}O(y$-#=x*FQ<<1^2>=e*-_$>p?#y(r zUI;y@1|I1Np`|M-)ngN(s=JDS$@;f<@-<V5GATxkbt)}R8*_@o$(ESV9L^&yWC}dHSkK29 zjD14zZjv?j-1Ox<+`i|N+{>mhmt;R=6q;nvQ|4-dYHHZ6In)5r@EfW-Pf}mteY3mA^ z-kp+fipsv~%ucrQHsE8|@Mp_;-%yf1#m7Q7&2e2jDFr(1U>pW%qDwHh$^Hnh$`)rz-Q`EX&*B~u^e+w7 zY!Y3Hh~AL2WZ!K0-?09h_aGzqq|{_JC|la9bRUvZMgbo*z4vAi>19e^_YwZ`bRN-~ zGV(1XQ=pJGJunA6H#M-v@sVJ}5;Ufa*=BV_c4b4Tm`ar?c%p*5W*>}F{mWEY$+JeN z5loZC>-XTledKR`KC3yzXI3W@1 zFRfups9wuXx6*DR5S~!NbS`gYdotBWwMCBz)?0uPil*Y%d!nX;KS6UwuZbSo+h=ds zbZHhtV9^3=Lb4%)k|oEH0=EO!@suMrO_`I;Oh}1zLx+(5J5AT5Qr311zXD=Kn_6%E zLWC-$;k~jn2-_*odi?Hh{A2pLCc;u9+It%)X^8mTraEbGZSE3X|A}+YGKAA4i6%Q; zJ9ckUVW3F|0VT{?rvWz&s?Ainv1buo`xj(ik`p1nO9V7&)^Db%OgXRN-ydOoQa?}2 zHScmg771}XFpJ)Z#-sd>hY zmgfQMmXM}T{jo`;n4TMCmwuJ8oEQd5bonY7a%#`gYBOHyH0?ODp-nJ71vX>s503Rl z;AoumCx`o~uYyiQRS5Jt7}J{*PnUMnn7-lEN_vq8Br9~3nQ|Z{qj%For0?3b=bWMe z3u%a^Ht#ldM0-QY;0V!RY-mT%kf6Sxrxl)Y%TS%BvlDt}`Iye)*>2A=q1e;N{%x;p ziOb4SrF%S~REC16YA1m++Jj%`iK5Xr?fbBq$V-4hKHE4CJI%BSK&f*);_@T{w@;3d zjBS5HByQYB{c!#gV$i@47CcMSluY_wqR4KBGg8@MqtRv8nXcz4*FTrugY=mtdz41Q z)4e<)csPqa+t{uRgEd73OoB^>7RYmKM5-IEN#fE=&qH{lC@qf-DhwGd@u{Zo_XIyb zP2L~z4lCdNFHPrdjYLv~e~D-f?E)P)r3a28ab1~glL&(*y}R4rnTZqP7>K~>sr^`a zGK_{%{D3t};-(F?72g}HyX$saoMZ3sFE2_`{jN#c+)aw5)c?&>K|BJIiVD4yf1jWI7lNn_8Cnev*RXS2`2l;0 zHf-Azk)cM6klYb|l{5;w&8~0RFyZn_8Kfz3nW-E)Wz-;>qipv!uqVM>LPk=OU}fC;RLX6Qy~fu5zVdyf@W9I)I-+n%T%Y{sVqfh3hwl$i#x zq)*4t=U7|u;u`V zk1X*Waaw8YzH2TOP#&I%L+2FZDVdtbNpF!2`nJX?^|mxzAL(e3}$ZJXD4o zj0P@8{@fW79}@_q^F?*wUi1N9GjrNAlN{pTB*Bma6NYaRG^S*>;WN@iHKA$7o|rpI zrhbWixDA#hB@h!xQe^Q(gOK#DwphoX?ujy^^45@0bcZ%T5|-}%!kQ%Gk(|~R1+ypz zxpe6g(Gg=xd0>eiNjZ+72WPpbHv>n9EM6u!Z38=T5;jBb;uEsAug8{}tVnb(?UE@+ z*=BM3^PhANiC}Yyz$Br^FZyq0Er~5R13gqH?ypbf4Lyv)P_*}egTI$4c0Di%$}Qa7Y`g#45S1*R|L zgfnST%??KO(>{?vFUgz`uAj}+YS*qTlH_G>bQ!mOp%YG9*8YZe>o!$No}Hd`Ji-kV zhue7||4x$3G$>+{FmqQow%P_@70z*oJxl(LAU`)AID;f@_``0%1m#D2LAp#L{Ljd~ zY%@P|K{tI$bb@R9o@v83Wx8HE;1t+(?Rjacn0x_IRwoFR5k@9R9}z@0XhSmI1XZL) zY0|x$9OMSkFeIc25lTZF)2O@YkxRywqJK1a+)Vt^948(t+ z!M&9PNkqTlgQ8B48q!Yz%>hUUanvberV}qW$4QYxBZyqUuo&if8pxS%dFiew2s_YQz|yHNL_PjE%nZR z>eZYQQsRrqfDr)=ER_I3e5U?Xa)v0fW&`cpy+&#zzsgvC%1uc1aFD3n3Ta9-P30+z zuDX}*rmSc)DQL2wBQEPylAB628}if1;Mo!r)%>IVMP0nCW{gxV-YfMsQ6bR^0qa(R z#{OIvM`tzx@h61gg^>3)^<|}=x;P?hs6D0t)FO4nF>jJRI$Y7>e3*XNF4laUCg(PC zDjP1NP0yzNY$9e(&h}Jd-}X=5KKImnA7Hj_HgFl|bj4bSrCY}?Gwl+>p8Nq=XxH9s{_ zPa>{#{Zd2pH^k6ig6*_M8^-h!ch=tTBLn&r(4^kUBhG6o<5C_&f*{$JfgS=3gKG9= zO-U1d%jY+KVDkGZiA90ruLMz6ri1pCBxC*!4jr;NX*_%~(n%P$E`h*HG(T~^&%2Y%np4SY+RF_$o9%1q%6x3;d?x!(scgFVq~gt%Z}bffvP_e}v$P9S zLQR56L-mk?Qbc9)%L2p(MM?0q&6G~aLMhx^Ff%aEWg*Fp&R)ub$g~YXrO0Q}OPMle z+T==%M1rKZ6Fi%{v1R)u**gis%+FfAxydnFN0S^**L`w|mY+%BNk6N_&lr@H+7*kk zSlSSp^d-mlD#X4)=c)ZOca;VQw5^2#7pZ4;0vAYdHu=hiD3%?jq6sBJRevRjGK6Wg z-^c_E6F){@BHARPJ6-gtG_VO^&Z7Y#0o?}$)HSBg+gAGz~fRQ)%jyRJk(Mu@5u_**?oStdhLU7=o8WCL^ zc+s(WOAb2)0OY+XI%E^L#NTuRT4_j9X(CAdK9O5P&+tp-yy=i^8brxuyhXwjyw?lk zV@B;a$OB>BwoU3=IUbVn)M6iPFhsJ+vwX)6&oYhIlVE@#n#svhnt>XU2$GpofO4gCT6y&Fnn5{!x3h4lZVad~1}UUcIc+BQ?NeL<@zZN+v- zVw!X&(j`_Rj0WLVxx`IKKn>C7v>wE_6C^L4wVy8MeKTsN8JlIbO@=a&rWvFpIi}m; zNYe;bT+`^#ndaMqS<4HTOmY}BP~DW`jMm|nWjuX8A-+r5F3so@@#UtubmHeSaw;T{ zvpRXH=VjvOA;{$!61`2MFbRsO(DG*ZXM+GGlrtqf(>*XE(0`w2I{|k?ohWEPSh)>Q zQMIFtcu~VhL7%0hIG6Kj0D{pr{flIq6H6*pr~Z_6ZQyHjXo;bm4C6HNJYA~kJ2qLa zA*4$^L4+IU8$nA7_$arN*>h8mzwP<9Y(;{ePiM`N?GXg$z`)0pbZ8(l-GNUTc5*1E zTsbQ_I;tahLegd$?J0Zw34th`nxx4Y>DjYqJ`KfC*_&zar{Lm%pPla4q)qsO?312N zLd`+?NNFEc4ex4^!wq-X&r=)_Bk(fHPAA(68bgxZOnPUO@!a-7ZAW6iiS*r!`_x~S z90EBr-zpbwGNJ>r-wB~G3h!j1gpkYHOqw`1gD_EJPfMfIy)k9FDY!B0(`MkKzhE!Z znIY0L1Z|oe@Xb~bo}dlI31#Nr*ufK$FZwfd&rdPJ%LeG>CPDt&cTD-k4!j!_siZ)~ zEwD5sq3EAq?1{Q%fE0fGbZO}r`Q}m)=X`6hri$Uyzu(^X=KP4RnvK?JAY|+6#1L6h z&D8hPADlOJ*7h=+z-~KIOei4Cv||Ay{%Jzdh%wV1h$P)X&kpIOIpF7v)}A4WHO~2V z_PgdON4h39u`tc-_U>0@b%^PG$@wRAH#EVY(AW+Erx_|pL0@_{`t0fK8)0O+|CDCO zGNE7p{#TKxWa!gKtgXkV-ywC}TLbLh3)0|%(`b5AcA+G0Jv<*V>{L+nRswtt7AhDx z%8*MlIEt*)#rRu9kq{T!yFe%zdO(P#iPqF7mn4HG$3TK3;#5qaOaojpUALJ$?BJLz z;j7_S+cxf>^3q0zP9P0AoN{IB*ZoMzK1CI`iROgHZ6~^?VCGZhr;D}3P?XB}#_5bV z{p??5EI(os%|Y0V&5}%NBe+Ol_m_h{HIZ+oRSrNMrVN)FP0|oe4EX^F(=D(}B?r@( zIF&W5P9RM}NZ&`AA~jBVJCdD{yN&MIZQn?bM?%0G1RNXQr0EP$?yRaz;8{bEaW3z8 zOKixVe*=Bmpo&C1yq0$6fW(kA^=~KqNDxM*EjP^PDHtY*shJvnIWwm?f%f=4|0-j- z%?8PaQGK-JU`W&KhT->i;cgNtFC>8_--iaJ^qpUfD`|F3&B0Uiv2lzQ0<%Q0m--%v z;rVvClmNM-c5gQjPuKs zm0>te&(i>XqYB_@+G^W?y}6*K$0TJXrniYW%uSYFz)_QOZx!oXAk-KHar*{>NzQK% z4$77yy4>)>w1!*KK`Qq``W4Cd*ud(BtkIrJI-UFJ^T~7|LFh>H^ki>0V(h7}$y7GZ z@=T`Rr5s9=J={!de)^6?R7r_GZ4YF!Kex$l+q|xjzhCN!N-_%@HFtaIXjYVhDvG+* zkUgg|BH>q}lRAlDj~W8obbrLf+GHxUtV8=W$YhQ=TeNg(*E+%RBw^X03x<2`b{;ID zo()LS{(eGSQULV{xk{66C!EW4)@}~PFzpj+hRKPVGW4rr!Kby~OkBUpi@YSG9qfI& zCnjj5N)g|637j^v~^IMi%lHr#+jXv z*%^aFd%#kobIIr3AZnAb-j<_H2|1x9Tlo$e;M|<(cF-UNlh#pg9C1Po$q03tiZaMW zi!~*8*?i}1U$%WTCC`OHrauJ=6C&0Z`+l?kNuW3dyW1viTjsw7X0-Ld4)It9`>mn` z@ijMFNy?PC$^Tc&c_~UXM0@rS6M@|emXzqJ`>)oPd@8F zyZ4jjJYqCkW-txDhd6jLVofIklJfkvC*+nPn32-08n{J0PR;#W(*fUPz6nVn!Q9km zu`PpcgRK-yHN0y!+ao9jDJ7--u+wjr8f79rHDrZU?~4+3CL3rt^hlsIAseLh^eF(j zHB)bqsmZ1r;>K-qnSviWxb*3NHLNG~lQ)7<%6YhzkV$=UL<`ZjSy*7=lq355$sj5% z*eT9ULi&CB!GL{2UpCK`f&@FgMn8iDk|d~2=#0raX|OR7sT%I4EgDD({Ydsm0|86& zX#(RLqC$J=2qnU;Tz@K0Or|WjE{2%&lH7jYkW98bW9QK(n)5=M{L>jb7bj=M$*q>z zr{^Q(Wz&;-#M)C*)G6UI?Ek4pH4#ag3cyBQhe|AwWG^Mi#-_dW*#2}+6fy92WRpm; z5E&PuIdx#LLYbl|Og}YQ5>6f}EW6pq4PoD>y`H$0CP%d;V z_X~-skpW50B%!+-LcNI?#i^$D3Jv1%H}JF40aF(G(p#6#gdrl<&(T z&M%cUr*paqoQ#cl2@FY7{Ko#*!(LLx`j%_D4UQ-s#YCBLpe;;xnU(=*6)H(#QHK4W zN1|>STH@%TK@u%3nM+MYgeP&#t>)bHj?;G#LdOYqHipXRO|>v0F;kzZ1tC$Q6x{D4?wb+OHjZsG zQJRAHS7vGxRMSA~R35UScW(;TUq<|2kx7y$86TVynA=^Uh?8CWe?~iRn*5-VH$knY zD4H1Tt!nj#gNOtpbVPPyHJ_Xgox(8V)Mt4m%AL>_qUxRDYwy|wf3RF&oz9OH2Fs~;OJTqdqS%v z6xAa3GVK8&3bwY`PH&UJ29oe@h(n*XNq?!FXQS$=gP%x1(1t?Oyh|K=Vlg&Z*0-Yn zNpp{8mQ%1xrpd@ydV+cz7{SSalPSNAE*&9v+e(#uE3n$!j~AUoYEWwkek?M1L-;J+ z$0=TpIdH#I8GP!&p@gKQUvtt1G$=L+n!EP&61TpVscdgVn`x^-YKEtGw#D6~zGhnY zl1Nv&t48Z{3YIs4>D1~#QL~>GAnwZiI);&&W>x7KPI$IN$hOhn>dHD(8x&zk z*{CU3O=tk^=^%!siz9lL^l^)}+=4=b)@^jeZh^=qI5`hz$M!7R>8Dq8jv|~>u-BE# z$b{Y5a(9_`N&#y^P|w2Nq+U16eMe~*tg^v$mKp^2$)P7&kEEGuWO?Z1da^HFS>$;u zxAy5fdkC5f?g1GNIlml4kqGucw8V}9Zy`$}kW5)`H;556QYpJnXv=@Hk&$Mamd(~U zXQHiVFCTetqrtZkYbBriX`Ly#-?qF&1(hii`-YQ=FmM}Z(=yO{z3)cTZzBe6diXw_ z6Vpsj`wQuRPt*trjht-HCiqXzL2y|?;iwnX{D%DmOH zvcLbSA(o7X8w4r^WmCXUvf52BN6+Hq=#L2Sl7pmyI2kn9plc}@=yD{RiH2rESH2-u zOwJ}nHf{-53P$MNc$p@r6K~|)ZrAA>XD^9(Py2D8Z&<|_ze;iN5^xnXa#jmz6BJOS zfO1;d5@O4DyJbT!jjg8t<|W86PW6O6I1riI8W3CZ+z4vF>{-%Y{KRB!#Jx?=UgGT9 z+~EU|6q1Ec%NcyUu@7#oXMwW zCt|7AUZucj6YSdLgiOw*JNGIKZtc=Gpd?yvR2-co#V;DF1rlWHGYHLx@#nXDaSMb@ z5Abb5`t~lPPx{54sI*w7{PayG;{p(4I?#4h`*uJn5h+DdjtEpwW#P;U-$gS@Qu?8p z7tKsxOPZgk5nkjMjOHCBkDYpI?BpQ*c|rv-?K9EJOM7h*@8sYTa!3MJ^7mv+{I<4< zz%vaw+z{GcCYB^frihZI{y4z4Rb^TeV&jQTorVH>2sZ3mY77)uz%L?EiRiC~pyEJBPN7ON5n#qdO$K^9NaQ={gyT0dHOh25O`e^w{?m|wL18F) z;Tcd1Lq%ZAKn7tTPGLd@sVJ`vI;MUG+jo-6iCZMakOd}W=jK4Iu_g!&ZKNjqn%*y+ zWhzZWgSHKlM0FAAy(dVL>D!_`k#t&&Aa`f5n+3s&Ez+NUpH!E&-)BiwagzM&+Id?j zb2}kY#U=u1Mp(*5)zL2ycZmu;Bu5X4c4pQ2XeEE$z=nk5-|4>Db3BozoEl+MEB zB>NHw8&>(7=&$8-G9sb&~ld99r|;yWhvc`74M4DTl(Cd97R@GR5`o6jIV zh9q${Byz8PZz-7CFvAo20pja!3DJw>nnebwk2R&>2~_xL*_SgIaB~qU2_7{_#Q9L9 zia1fLzm+asD!tKQ>2kAz4kI1-ZKRzL zscptv1B#Fimuk){2H*D57!d+c8YENk=~rUXPY#Bj6Jr=&OVA|ov4ISA7^fH!t#$Gi z4WV=*3GvttRTy5ewB`rcC!zDJzgW+G)&g!_wuv_k}i3pGw#MIcnDId}`zI_%UG29|O#)wYkk25?wVeT&w?9*o1*I?W_+l2g( z{+`qWNi+OZS|+9D&0xm2=qow|7xwcBoBU?)E#I2qnOUsKz!2eUk z+W&+AvB~^fZ06L9bS@F^5eHyu>P{oQ4KqZ-cS3{3O-5<7pSBIRCUY$Lb4Q+;$q=5U z5i!U@i_h5_5CesGKpVE=%M~1g2@EJt6p_8Kh~%f=Hw3APIJQHQViS{u2%blDjmlPgSy-oN2*5GcWnFuOR zdS0oIp>j4GR5X>-Qz^|%rf(+Rw#of8l}(2$XtEm5_J4a2MIz2`1TFOYQzLB(R5tHR z1IY##W%}&?fV3qpody9CRlT1wB{R`eU%c2BHM(8GSL9|wU~YSy8Y{`!GKfVLlR3Fj zl#r>x2JbgH;i;)PAsvLNd~!q$>={MSPC4n27N1S`)ckyd1Sv@hk;KB-4Wh(ArgsVA zkpk(4pPPnM%wUYYE7R}ZkjTVNo_r=fpDF3u`h9dqeuXFMmbKBk{cB04YA#363z`tC zTYtwlHHbDrNNUm}Yds+|FNi|b_sBF81ig7aLcU6nD1snZ!noUcr_(y-yIb!2rXjk8 zLrVL-VWlSs%Znj56c$yk%stscBb$;Mm;1q%nLv{SBmZeRDLSNd#Qtx@if?w8-t8^W zvDHkaYiyBr%5JXi?JxF3nSi0?=cI|bhKBnDV?>^Z$a|!y-AvP*fcRO}aN?*FhfJCV zH2rWd=gXX_jnt5l_DFm!8v{kA0@DPS=}n??ELQu>^bw{~qD3=OP_vmhBAL4#j7ZN! z3=1~`?4 zr}5wef(c^`i3|f_Q8w?F&PpmdyiCp7`#F`hUMK@nLPUf7mhVR7ZD;^ma!+ZgsNwxG z!E+5~sEf5iln4?j=a}KKGf3MOr8CIlWY;GkfVPwnZN#4qqS8g&$UF4nvYM#eW-uFg zGQBrp2Tz9UMcQSPCy|rkqCZ0%@uzX#b?cNu4^eF}GlU%NLlEQ`0j@6Drd{zX|N>5{ysx zYHCZNB+o~paE4ZaBx4QN>04Ebp9`WsU3wH9F1~|iq@3xpz;p-FIX>`N6FOy+6Wi}Zw9_mSYh+%Ie1=;9ktCNU6e6_| zY?3Y_^O0m~XtHqtQt%fon1*$XwrJHn0F(rpr=Xgak4?|rhRD_gWhD4H(7sHl)hUkX z^um^H0TJ@7#=l2f_zUH{9x`Pz>GciPTT+9!g0o4&hL(725Jw&65!nizgdzwJG2C7I zX74S7dp}%g8d#Z3lLm_fdDu8iiZZ4$0v;tUHx*k0ije{iS~4YkS4K^NBmt)~8~QZ8 znWh>E(oV{(X$tStUD(R7OnzeGAxr1pA|=~t;09;l6=9>ctQS9bqa84bE&)a?Qb)zN zpX9fGh2r3op-BBw>Az`h_zcE@Y~J>;Zb-PJ_EDKek?#%WEm&AS~hO`)MG0bHpv4-Dq*r zH8lM*gsq+G*liLZlJHvYCK^QF62}AAicV#|4oJ`-h6I5`({T#OU;SNbl~4%TF9{HD zqGhY#O}IHoZxNYLctt+8jpek#xZqk)BXG+$Db@cJIBiN$X-crmIh2Wco;0$OX80G$ z3_6ixCZBq6#G5{zgxVePe$;7AQ=!yJ^~2pYrS(nez6OM*g4>1%!0}K*9JhIja2IS zgbAt ze4APi$n}0B@sy3y#{L)mJ|gWv9EKGSw!ITn zcInd^ZDcs6_cwOP5{=g5{od?<)m?*aOH*N;?$q~1OI37TKcQNtylh3R=`*!>ChHq$ z@<8sv=Ckqo{7MitH6o{%KMO;Unl~$CD@1HJ1x^&5NsW4GI>~SeHAMa>6Y?go=yD`{ z4fm0j;$Gf4HCZ2UPQKx!lJ*_R=3lbm23dUSA)6+48`uqsuC%lzsYmc;3v3C}?8PRK zzU|l6aS>-owDG=~@X#{T4XJqPeKpQI^@t{$XWCJSJ)^@2lOHD2p^5PKwhzWWH9)57 zUkIXJoCRgqPR!&JGV{_jnvA^dF{qG*Or;i@$!!gX*~c4Izona)0!h-yZF>bi8EF!T zCC6{4flN7)j`Gv9M~!vYz6588N{J}#E%2e`DAUYK%C>f$U!AxaN}!TMX`rAVZNwQ+ z5#kRBd1DQT%L^K3c=^aM)FhTpbyaU?^$h-FN^H-Npir)~u8b_(L6F2|uA0sNn}euL zE%wE!PmY&%_R~vGGu?(6;pAXG)#B~w>dny@IRN75Zdov8#@=KkM7?|Zxs=@+5;@vS zKmuygGg85L-p;5+O&S>OR1TcR;L|-xWt|2Ace=mCQBG@;62S@8>f#fE6_Tw9CGR0Y zpmwkU3PQ@wn-VcWKuHi-(hgM!HYi#*t^ahtr$iu4L6deCTYgSW<5Zy}@jp?NjU=o6 zi$T;0mzffTQKPmA;L`INnA42PH@x_#ID7L3IkUv01nHQhNXWA#qQQw2kr-DqVQ0!6 z8(Epj7)>QZ8_1oDQKd-Iw}u%uQ?InYXVVaUq#ZDf>~%?mZY9xA&U7jd_mC)kvafcE zDcLqV7N7c(O5EGmGfM4VvN^;D(!_8IPH9QH#Alj;0ZOiG?|pyaJx{U8%%4P}5_(~q z277P@8xhX}2CBi~?8i->jNQb}OdG|GYItIUCeCg{m@Mkx1SJ0n*kEzMaNz@=V{{<{u8}pw~=l7yhP1> za;{d9p0ZYx;I!r4Hjdf`^#pOaIm6VX-ytz*h#ECW4hbr4g4C337=Ahv&~6<$JxhcK z>1KPUhWv!ElhJxxJum|eBtiH_>kK7I-Uhuk2sh~8&jwM+SyCwrv#^^fkZrT%W@>B` z{H2CIN-#&7?xqIsG)ir_mcD^1+}6=dc#tv}H7+-_l4!7PpPQaFB56V;Z#IF?)DvWd zgbS?WC(bJx+)R$WgAHr3&a}U1LN}5)?g{T{0_@bx-Noc>tgo;L7UlIyc4SHvXlZ>y zW~X45_Ftvy3RSl-{8}V|tdKw&AA2i*C!yx(OMXE+j~vDnVJB5_ib_$2Rm1mW0zXrZ zd;Q*x{?bN@Ah9QJ1(s=Z;ugUq4Ur|EeUpJz-AVY;)J#`amEXYo6IwC#?3nc-LfTY? zAgxUjeeLC*5hNi6Ag?I8E!S_F$xYwV2F>2wXDZAnJ(A*yZF(UP>@D%SrHHKYT9je=rw(gK{;ztW-F9%OPXdgIq8( zr9m5;8=m8aL3%9>S;2d=2>?<+I3bbbo@{9xQqRxy87WwrfXe_9r&@ z856Y8XPD%pOaM=bniC>rkgy|AsdPt@Z8HdT!~1U#HL~ZaR6QkB)E7>lVZa89^!_9g zl~|SyN!ZJT8Vxv7t^Ahl(G2J>{GGToI|2qzU8Q* z&A-&)S{UAv(vqGi$^m5@d*V||eJ6$^$7)DgWUGXod?EFu6c-ce@68D&6rVH!r;@C7 z^pvQWqGYBdon%%v{bCgLrb!c3v!JZ&sl8z0y_yn%Blh5DgD6tI*l1a89PNvUW|fCn zZIG3+Ho}3FCWHt=XygD4(ne5*RK_#pe7E(Z8Rlew$vI4uP{}B!H9i4pq9k~99n%^U zGE6&Ko&tRuh@av*jwXn<(m9qTeuJ=Cge9G662PQMF*_~#DndW8aZjkC2?#d()4--} z(0)@2wuGh@WGHFhrg(uQ!`2`CTo6^2OA3aoWGexa&>w2}C>Mtf0_oI3%B*d9iW;DV z(3~%y8JY<-xP)g2I*1dS-v70cl1jVDX?mxo(t4^!oN&MG5YTj{ZpgmrAESFf5{QZS zD%k|%zv$nYpFIL>`MDs9Xr&c2z}qN&oADp5Lg;f-4qmU#EZAQE@a}CzIW<{N_qP$Qkpd~$_6lpv|@ID2kB~Y#;msG_W$4LNu^Swv-gQ{Jx z>x3>_VR{ze`$rEgZ2~nYmZ+~IG zNdiHJLx}w(4bRC|PUzta&s-HBhN2Amq$!;0)S7oC-)ZB3Z4me~K@@@UDPl#@BZAya znFLX}-bDT>xGH%OXqHR@uJlfyraTf4$18E=rnFcfU?&F2NY)TS!A<`Z?PZwW0DVA$ zzt;p>+kn$bf28cw=qDavj4i@vdz;c)5{7Ua;8g8ctZ(Pc>K1O>1#0Q`l7s8jp~cMZ9OG*F`@wlo1l zn}Kbun{u(x;CBj~Zq7b6Wz)v-ZDx}=#HOr#YPdCUKk5IX{5CDuFv*;3X%7fb({wj1 zO~$JhCh0Y-nj6=xQUKLNtmS*BpFPl-l8pYPytGM{C?fMIc{?z%n`{@MmPtVt)vap~ zj2Oy>X&{4q=Nax0q18x36D`l!7P(vTZ~a<1ufJ$O=){Q87fTzIXzskO&;VnYuXg(!7-KCTfWTjmZlsDLFGYl*;l3k-beCb1x#>w)s7wCDdu&GFjW7 zHxc9}`H8N(wwmcJG)Om945$mb@U39!8$RGHZ7@wXZucW`UfFYA<#`OJq-Wwzn%2xz zWNv$q`b!Pkxg|=a!Q0OvQCl9RTUNexR#RChZ5laLsUdlywx|6~v|s6UoHS7yByrCc zdrJjTO{s)9vd#HDwU;hR2D#xqAP#lYG)j;SidK<3nv#W61|((v*Py^m1NGv}d;`Tv=lfes`{bN- zeI9R5<@+=Rmxx)-eicAW5~@YkEb*tMyKdqCz4VI?juIc?!xhd(Ykpthg3kpsMl5Xo@8xT{LNe~qB4xbE;5u;8ejfuKp z)1OD!){VS^nW(WMr-@PAG^rDAxO!O6lsKH__ZZ=DYA;e!NYRTf$AsS@`7t&q4ZF|; zWV-*URAe+or$n}eow4?W2K>`~IpEK>$>JtpKgB2xHa5L3drT%(H~nWn8AO?>r4yh< zLV#xsXTyU^n&u3r)nvF{9KeKfkl?R`p{bCGCG_!t?9B9jkx~;yRcaZ$Hbmfn?G|MEHYJy=CFH4fXpv_~gt@pk+&| zrWAglt)kz*X?xl9Y~8+dvX=>|O*BezAASLevW9^)kJC*(56|2+mk29dGF$UK0EPQc z!nj8s$|}#jjy~jqvD8cK9L^Y8*+LfJ>ii1GEyTB1KwkfRY9<(mS3noPQhC zk%m>G+eQM4*Y}}QjI^(*mgjB?_BSHW8*ZVOM4kpqgsGnJTba+dHi*#iY%30CGWLcf zlKauc=ugzd^nbhTi)FQ@hPTU0qP%3o2V`%b4#@B@Gr?wj)G6M_Xg`bi#R`G(OJYF@bT|8TLJ&%x?{<%Wn&M!? zfpp-{Pfn(Q!%6?1$k(QT$Mk-ggKYY%QlPXo$|Pf{hisENU_zH*$E6!S7j+~FS-U-h zk!vyR)>Z?IvS|0?-T$=5VGg)hc22+MkcKRC# z(Ga(VKK@mPdm6MSn zdO#FyuoE=jY_LqdNOpA9u=Kt*f^G~xMLEnnO=u@2^CJTs$tX2IY)G(f_?BAOhZ^2D zJy%0CiOR1`!sHt*FYEMPNKQ#2x0xQE-i0K#4V-jhm$yhq!!wfn#HS{EQi6NwE3^c- z4c9*f^IQLr?n44H=tQ#-=KhHwiZpCb2a@OHYQymQ_X4F}n~73@HUZy^7IkEF z--zNoac(yUMjXnviO~>R-ri?3#Whx>_`SV{X9i05{V^cvQGw| zpqHsUU1R@7BpIbY z5GAu(b@tpPWWvg}Oxj(Eppt51ky6-30wH}4MWRfwdgOk-l4jE8*&7N%^w28odksM( zDMKBJyb+XuOsZLJ&+XpOp%9Bk=Dy`EguQfRZTBIav6Xdf9@<`&g8AeDY z$W4!H6{K(YC9+Lwa1Q+W^LR0OVTjD3B9mnG#mh~#kPbL_37zYJ+||0s zpwC3~FwcNo8N}lSjsFx}q$)!?KQBWuHW4wBL>uwzBz!zkVQeP#NKmHt`Att6whx8SO4N6J|MAxZ|)QY{ci&>>Lj@+6qaD3Ac;7PxHbFU&OD0l%{q z$KFhYCFe|s4K}2VHn^vP$fguP&{z}nQkkP9T||4LzR_o6MVoKEM23GVor4C7m`Y=Vvx=%={YjVgP|>$?65^SpDIDW)>v-q@!OKpOQ|m%)CSN0 zX}Z81t=hnJr(T>P3D|F$yp@jmv@Y9(Z&NZ%i1tmQX=A79#3NacglgTY zC}fahTWL7U`?lS8VpCpFx)aVT87%35fDzyM^ArbLsDERe6Iwzt7&F#y(6F;SsJFEv z?8uwTMp&aQ6#_97#K2jjMZ}iLIuNvMBbZC1hbWCi1yqLydNk|apf5K9Kr^bI$`j{< zv!kVd>U<|Bv850>@VTfxNI^n6i>VAtxZn~`msJ)pP4eV^SbLMmCXEjx>J#?dypl^# z{)z<9XGnZ|xh|iOGaC3-{R55V)4``Kr^$d(r%pz$U!KX572cw6+A~HN(mxr=WQexC zK2@yId_se0MoFKYNYNx?KN-)uAPENs^OJK-!I~j|G<-qC_!0h=G@1MNOpwy`mMz{) zH6?=FREnaM6*M@Z?@G&1l)q~#1<{_LBW&6fl)MfbP}_cj-y(w}3Eg>phXd9<{ch?@ zOUYC!L*E8k=>1K-S}#rLKN&<3g` zqAK?U5jO1&G{H)CEZL13*2nq=f(Y3lra|&E-6=XK^vdBi*@&*(;z7_&>jxVoSl=S} zJiuP}aNZ^)>*s=~mr0T-cxZ9J8^U@71|~gCXZXF;b9Bo0M9?gKQ?s7}R^!;{1tY|V zw;m9x`2E_%xCxYP#$?J5=DBX9hTF68T9$3GZWAid!HE#gv>pN{!>u#vAEt6IdFK>N z(B7z2!kK~zqt!@AFU^@Is7_)Kufe8RS=^p|buk>9zQ ztoQ6wOmi<5md++nq_4VEO=B<*DIiYAk^KiVo)p!@J^<-AuEU^0{q z7TPuwQ{!YtH7!w^EeDbkjR_{JW`2(X*-|gwi8Oi=ewOL^Qs#c-`k!(o&s*v4Ebl~% zweBz6S0dj+gZNEgn^2Ae?kCaEBzA}dJqZDt?o@;Iry|{n9CkuVC1|cT2(F~rLR)s0aA#ELh(MN;4n;u0%7)*k$pADi+c9*ha8-yg?up>T~ zP#oAplirbPe-ZQ}ImDMNh%{)wpjF%RW5&Ca(M>%ocH)R;v6LJ&aWu6wUMbr&lMGHKV5s4x(c)lFhvA-LIUx3)+w65+BP9C&Fl z*i5*0#TND{4d_L6}mlnaxwCzLK!WIWx|35nhk zaJIB1Tej$i=kO)DqSQ1SjzYo{MJIG$dGic1XcA?j!%ELU*F2F-r&^8XE!yAz)*#AE zaL~g=rrtvM_fD*37u2jiRSU)PjGvK^#nvm<|3&#!NEn0|V(Avd2#s`_x_fWs-`Z zNDyW8r%j7`8+*(5@7gB=XK}{Oni~MX`mLXz&P$goO|@+LU5F%x z`JL%0F-dIFkA z&XSolGd9^MV5EdHm3F7L8Y%%)i_d#OrhX2Is)bRZnbyr2Q*um_H78D(S{i^`$-$Cm zl8nVPHPi364UfsVb@{#};=}vZ0{Fw>IsoGfoIo_4D^J+ zi1v|9gB0KB*P8+|i<+8g&m>VZ*@Kq``)vtz;#i~7Hk(AbYB!;61jLQ)PWJ1@J-3;# zOI01>UlTpUv{nb)lj-lV)Xc9?95g%x)CkKg`D=`5$9jacS`ohILRc{ zvhDLQ2=YtdV}dmr#B4;rKb6#9ZR&<+&7i7e-KIXJ6nIS35td?r$or(dq_iJYYqX>- z_<1CXuxXp#7|H_ua>2W}9#t|*sp*?Sld0x=iZhB&*i z{~~-@A}da%TEozMTR#&7kw$D2WZn>*1Mli)T8d=ywM+=;1aB>$+cff$vp{GMKK;(O z?5+vK8rUVn(M3^;={yh?ZF^?6HspmX?RFnGCGj*}XAwW+qv;;d;hdicqSBYY|pr0I0$`U6IoJ46b{e41$ zCL?q+3Jrs&$=H*ik8)?ch*sVLD65}D9nECijCd|>oTpqRn;_-(J;d2>r?)7haJr+Z zIhmk!Jvi(n7E7iaO&R!h$BYw6Yg1pkBZg&ul7LC~zrp#K_9m5FH@t3kt&LE$u|w%| zNhzM(PSU@5nS8Z^SRB46Ox1Lj&CusFRF(i++&dg^iR7304~h>XakKI9$^c zMS3UG9ZIB{H-zB8yL!8$>0Flxh*ID~o9Var{)AwVtno{Nvqd_|pKt8>^v>T%OkV_w zQy|%k^P7UNjZOOLa$Zt>C(~;r(zFNy;qKTXE5yN^kR|kg=n@elIQ481_GB9HY>XPY zbfka4UeK1Ab;EODkP~7!NRUprrz#{Isf1&ZfbHn|ges>ymC&!-dnfWwit;74^yJ)0 zyF}Utx=*HzYH;SGM|@Q)|r>!2fhP zk6fHhbiY*(C-N|6gfayONeGr6Hj*K{Y7)I50I3 zxdZIt3CTG@B`Y8+W~w-q%M*+IG|Ak>%J39SsNynP^xsp{_&PEFrJg7PRo|lIlyw`0 zZaOtZ8*vlCC&`LUZ-zxTY%diVhi$RmH)1@>Qk)DrxvbmZIz5Nc&zgE?EaUw&<@i#* zOeMOOMv)RWrh82T%7jGQ5)f_9w+IeJTu7iq?iFpCPoG6fkX3y8jXHi45E2BUh0UU8 zn>77b-3Okw@0rfSgb`;NO>NeOmVV8BU!mv!?MT#%ZqJJ|zGb+CIkg@gd2;9`yHAGX)-b%4_%ISOqzsv+ zEmQrQkO8I(nQH2U5j&M^>2yzv|GvHRMk8y=P&e6WLXA$b2};}WO83+xZzU2YB9rmS zCY{ASv;khCU-=XOR^{o`n`Y$H;*d}pE7L@2NeCUo=KE-3aSJxOnDWC3zemf!DZxA9 zY?;80mf|)P5gV}PpOAfNvBh^ox>XJ;LkUfQ#9s)2=Xiz);P84!q{wilGAA5OlbC*-p4peN||p6EbOrS*0ctYc7l138!oBiwMJ5TrGltVM8WRB2Jq+aH& zoEHh|6S?fqB2k<1O4^^4#=BbtaZ}WtdbCK1VmoF$Ii`uBoJQc5EuHpinR3-6@nK+W ziGBhz z(PU`04)j~}3D((=fXt9`()&j59d-ORDM&#PwM8UxGum&|rl!6&%AIwiP@xDpwFPN7 zVe>tdPs^~uCmXpz5I*8YGqG0$OrfaPPX$pFTI=QKQfKfgXgV3b?Zm}& zSQ4B}nO&_TGN_Cd<28FlGQA`LLQA@z#<$bYT0>Qfv#}+|Y+xA4^xu>m&~fZUxO1(e@-}8sFD2}kS86- z0((03co>q{&0X2(x{(s2mCHzFGlDu!3`IrpYM(44G=2IL+*Y+w|^9pK8CPfPd zf2njnX{^y?fFOXD>&CFgr$Et6dQB5W#_<^xFEy7ZqR=TZFsR%V=-58kv%E*szLN?8 zy+fq;$0SY-ZOt}7-zLF!SSOu3YtM{4*M=hJXM(6yvro-_#-Wl!{L0ZXWy#55rQn1@ zq?;^vDg{v;sBIuLH6Bk0#I_7erhaNbXBuAK6s&yWgSnmc7lGwXe;h>_4f8K8iyZha z2i)&%@I^VnrsV535JDWTaWuC(akCdM&G}UFh9nHhNpFKII<%0GA;W1!lGv0e(DRz! z>0HoDVjJ!GFq6fpXVY+VZT`E4APc?suOLyzK_tzzl!a748p!3g4dk^n40SP#W`ZHD z9m%-O!M6NRw{^A}M^wUObKXeM&>{dL%f&cG9l9E@;y^RKq*hQBGPC0oCbE5_AVB@?K%qrKQoOndT=al^Rv2 zeIS>}GzU+Ci{a(D^=WM-SV|x~RzJ~Br_vym+%19*n&%^`111nl{b2@Cvt=W4_IvRi z1mQI(M-Qk6A;|rU$fdh^>Ih>bmqAd#R&n?O08SGt~O2(oCC`mM5(*!(wviAg{==by@-CHqJC4o$*F zgZQ69qI&sv$%*#kg(?_Oy`WV_^z|j0Z+L*M{K58F54_M6HZ}py6qphYkwjrJp-4tU zs{;zRaq3gq(Q>trpwr%M6MUQJogDmxENqd#x*$MXQPk}q4V89Di2@0bHYh$V_Y?@m z3)-D;=@OctF`-$6Y|;e!FZ!>k;h!XkFN0ll-%LsTQvh}ZviM&eL|InsMDw3SCtsMm zr#>WGw&~)qFg4T#95c-tNCudiuP6C|m*AKLONI|>dIyU1kO{2=4c~;KPRI@kJZbZM z0p~j*8n!_+HSBMK4AL7m^|zd24CAy6NbZ7h@I;gG@AFzF@r?vYdiE~XKbp>egXARX zB@#Pw0#amKAtq$+TSTjrVqi*&s1yxBOQ}yG=Vc4FOjVVip3WnUr^x_qnxKv9crxyE zJasZoQ-+*`KGUf2%YJN{PB&x0L>42VK`+SNr{~@_V^5h;LuYTH`<8#UEi2Ip%xz## zKZ_9L+EVDP#AJnazlkK-J(*ess7)Y*sHT_a48dzc6mE9!3<1n-ntPM1lC`7#SoA(y z+hthgzkP1&0&-ZS(wrUpoK<`f=BJS;UI9`ro$Kiv0c& zm%|#GUjF<`5V-yM1Dx@8V)KN6uI2h06w>PZ_2LfSvig$iGc^cPLvBQAZ?Wg;g2z+_wdhPe{yaU)Eq-n)!*|{J zxkxJpqCi(vFob2v%bl$Pcl&u|081;FZ3^t>`kZSi@pn)6JmL4!M)G<{VvbkZrXHPM%L$k` zmGN6gkIw(@;**;xxK1l$b)Bbm=k}C1&t=@C=h4 zBdTRbimdeaPTz5oE}+kjuEp*CNpYdpM)JP@17qz3_g07eK&G+FcqTV%+RbNVt&u&R z>`CR)kgmg@>!E}A`E+g0eQXo&9o(av1Jdt#^WD1Gz|9}q^CsBsX20Fw2@>brXX*Tm zn}5@Hm|_8fxl$b0Fdw~n4L3N~eeUV?Ik6!jm)^dfHrHA&^&5HTel#7!2EY)e0%o1$m z!KuBQNROSK`H5IKxs26vEvLAe#MZ6t*J<;aZ{wLW&{PsUsuv|aNSe^cvULTpmYZS^;{|K=QIsr>J{K`Jby)M^}jmvo7`BPWS$ zYArc`$|F}@3|2wRBK4&c8`Ayh7!Ntu={7cOA`ps%B6-k}hIJih39;2iype0}BclH9 zqtrrp$wkd+=X7KU>EN#` z&05911R4f>;@p@zzLhA(Pk*by8gof8+KxQt_t4_2i+KtRT;EQ+_|sb6+SOf+>z}8F z=?S2Er(}M!YPU)!J`xlRlRY|>&Ds%i#sQ(KNV);Zv}oAIo;H%{Gy|ND;?Pctu6x6? zQ%)wn8#m)$iLXT$b0pqWL&vzj6Jfi_$aeUw)ZV9at`qK)G57SgzSOgK1gjd{Bl#U_ zIqzZzH#cma9&NLt@L*S_WxLwN)ape$6KcAB#yUDX4&w0~8Q2*^o2Y@Ia zQw*m_@RTUp{;qTQm)dSnS6zj-T97a&A0%SNN^m6A7HNS2+jutwW1K7*NK?cAs5w3& z>hDM>=VWXkSQio**bY{iz-a=U?gheUAOXEzJ64IsMq zNjHAVTLI>fh9qg962Zw8rfVN(9CPDWY0Jnl1Kuoa>8-IER}+RL%$ub9b{x2IF;c`8 z`Fl573TlL+LELc(Gnb51;7<{AEsDal6Q%^graBbsux~e_Q~`J@p1T#Gq>a49{n8wx zz(4KWp`(?G8w8@EwJ0_pak#RXX>Brd8o z+8}0~h&CmuK;ouTG`1>8;Ik`Gd?r}V73qCidj+pu>D#!)up&e&h>s1iZrTB~)d*W& zm;fiHCLt%ICPfU9$$%6)D$k0}a*Dps)au zLTA%yhmE6Um6AHQ0{AM(kojSC%1N};w!cpRn4?p6V;_4ej<)}sl2h)waBX+{uwPO_ z$N{mZM7)6ql5kx?ZHG`g6?~Lbbh>MZUXa_>L`Jbw{gDAgO_w%5An{V2{5K%|)LOYE z(rO{S+E|xP%l$?gPOu(sb#|Oif?miSM@(B4D(*yBg-_gy!)(y?*c zA+V8M3J=w?M{Wu;MO2Z(;HGFx_h_4Ij}T$xSBusznQt)r_O1uSz5n|6kBItrpG1hWjZHv`TmryJw-N=%YGZFR zzT3i1NhhahA(p|8sA$9I@$@rEAwo$g)k);eEB7z#gLLh=V$0NdV&L=JKok`WCikwo zE0r5YfxrJ7vCjors>pCp?%&ivBI}zLYD56MFA8b5>p{iCQ&$QpD4qYV;+XT^9Ff{K z@AX97sIi{Y&$-XY+3yK%P`QVSLp#ONRw%Y09LoILj>9R9abygn#Cp6D1W!A-w-`kZ zK*oqMr#MMu63BnwT%9S&wvAaj-w?#q zt%??st_yBD;@_eWKAm!JI%)&HGr?1i!y7HUi3=dj>543@;$uFfQ{N%+Hr=n3ICDA% zo#K_oGa8fI-0Sq9U_}1z@<=Q9nUi~IfjLPbziGrhb@MtR^ptRz;D5h$;CEv#l8DDU z_oeo68}Z!P=R~TY4bp6@xs~h=&G7_BpK9UXx-{qsCnTQo0=4qTcB}383lV)yB^h()6ZNyyJSXP=~1Y}zkSyxY@3il?tW+p zNu=bR3e->Nev^k}F;O=X4+`y;8L{wp^|-n{wo(dTdmbc*8f!VM>ke$>L5Fh(uG3 z7TMGp*6E^8w8aQXIpUg?35cVIx4qAVd^`~cDuz$JFDv3;GV-iX&z(+xsC?kmVh!)1 z;dMGc>*SdR-%IpsN&V-p3Cl_QBclH1L!C7!2qD@x6hVO&ov|09doBLV)y|)Of{)ni*{Wvq^ z$%!Q)E}TBAkn&s3 zDg}wEr_+cx-S0L4twzOe{-z^#T4FCdzv~ioL}>eModqgj>*fLXy-}<0DW7mBF^-UM z8xg0vm1wt*Iv`1$@YG&$M}SG;yFFua_&{>n27cArpxTP$y;5;#LNLs-CzJ~#EoM)k zz88{(oDBHhU?PN(Y4l6QVH@=G)n+_rntoiYmuBxBUu=Smskpbra6i3IaLd*`sI`}2Hx8k#3UJ`{rQ|-;r7jyuZt14 zr2e6~d&4&*R-gf9B)fj1VpM<=3C7wr?6C@xFD(G3X9(g|54{S za)LluX2rTYoi$2;@3ejh`JhIth<=v}Y+bBV&pDCW3S*iO2|!SQhl0jb`-XtYsj|fR z9U$%82ibqAUQ2^#P=HuzGgc&{odxcdc6@E*DP7ww0P|J=JK9yJ4uw>kPmL^6rm4dD@&v*+oTFl*IuuaaHR%D`Y0bMMU?&$>SB(8unAe|RF^~|aH*w1G`@uqWV zdBlSs5%q7#s1vwXt+9?^F|~4}V2oIjs?DgnEvVpHgU#fCQc~2Pib~pIS(SRd>cK>A1p4)bLa|H!QkO&MK}5r0S%y1pN%~qKX&_;t~g)E$Iz-pIfYO z0jKJ6=sJ(IG$gIm`*$tlT~T_cTh(dbZn59Wj4f$?RJp@B2~4iD&G$bS-|3h?sMt*~ zgEOMLb!CuPYXW<(NjK29O4SDJ9j^;F43QQey6Vb8~gVT?!kQ?wB9&5K@uY2>3MCn8R?iT<9(j; zBt4Ys;@xc2&|=#c6ic1fBspwO@S>v|s%k&SfnGVyO+AnHsYxd#3QuZxQfJc|_pv7W zh^W8)sN#mUc+SNJxdA4rCAjl^98gB}gVZx70-x?U!@Th9`{Mf&0c%>YD(5EWq?{HK zCqV0fx2kuXRosF))p#KZjuc~Ut}W{5qpZ|Vpj@p>3PPOIw-E&(>ArA5_6gjQxJ}1K z%8Zvu&T_4^Z$GmDBWK*s?P55+2Ujmp#Y|U3*(JKBxcD}Sy<=WyU+hOpYHa#QC*Z&R z9u<$SV&k8b$e;x?S$kuwIZCoPnv|Pnk0Nb1t*g`8AF*Z?5kF!LsC8AP4+%;4p`!~& zVyx*aG(y!iqs~An}Zcp*B3Qxab+it815sYe*ZIqWI1g%M@&;C&YL2H+?!)ZN~|R3 zaJnE$Quw5LdM@B1f|p&n$iA!fM)rt1%I*Tm zlw|3JU~$Lke-^dmS!~aQxZOIj*3p=prC=w-g-eDwqm9mbb_fBgGezPXEpqAjtW(Ty zB+FX@*(!%ncUngmi~j!=J~N728~*(X*UU{m*l-h#tBH1&bGSn=oMRY4h?fdt&y;s? z*&wDQ#s&^9Z-e-t>w3cHJ|efdMmA0zm`)5h0&{t<>hLjjkAEcJJ|gP( zKWPiQn<#IzWyoo!lkio-a7OA}a;nYu;4tZ3Y}AR&;S#VylJTv+4`JbNomHHoy=!-P zm;-4>0oZRitEm07wJoc5;KZ%W5zSV6PVH+l5=u^n+!MdV2H81HO$3k=YjtAvtXk^R z@#{9$h$C#?A~rtdJgQ~q6vR%OeR4Xyfi2qIcDiQAk#HkYo!mkRz*&mXG2$udh$7?d zoBmb9_eKe7I>Ms5>Jo5I*6$Q^OLU6qw+Ib_Wz_obU)r~1KWrL7)Rg5$*qo3hKmVTN zfac~n(lLFbnYg|G2DxG`-n}z^?B?dDF?h#drUV%^OHNXlAssa)-B2p7syI(-Qm3=B zK>kT$p^B}a_Y)9tNy#$aJpm&lo`DN!3dEe0>~n;r6D_Tj zETChtYE8|>-&Z<_?l^XVSVZDy71N+p-~ZIbMaCIUpx+svJ9WgBc!kNWyTujeq|cS?p;JtC-H)lB=S^dP^X$ib2Fdl@9+qIN z_7PEk^C9DT+eX|@3Y`McS$Hi1$D5X;g!y*dZ>H`~(v;)hiO3@b0u^(k<8Z3`gR<{V zt9LS+-o?g7Mi3kBh~14AQ|heZ5Fj^t5XtlS8H?T&y>+zHXk1B1i~#_7>moSmo20H% zM6+T9nU@IEmLL=c{M=RyZQq&NxvRXFI6kKNU~{cWNFaA#xms0J0)P-mG{)0+o`^%M zoZ$%4c8DuTjBQYu(f#w3lgWtU80*QwBJLVi&(+mU9D!R-1g63o3NKO8G0{GBitrKd zWDXe49ksa~+jB?eleP4QIYm;Nq+O>9x6Ja~I@sS14yMEt5hcI9-i;Jh^+1)c;iT$o z2TwUz#u=Gb?t6+n+nP$Iw8pa2k#_1}Mh7k*5%o8pwCm+*(IxhnMC)KnAa3AswW_ug z|77D5a7vxLNMcqkxyi`R2A*k>cF7vj0=khilsHQ?A5_q#Ys?|*R6*j}rz&wz(z>5m zwr=~4tZ~&5qDYJF_YyJYpYLw7|0VIv5izB)f^=1+qXX{P6e%oIo9HTSS6=2?bvhll zZiz8s202LR;+;ZctVN=Sq+(?%PEE+csWX{A;rCN6NM z2c)%(gOv&KM%FG_r%EH1;-k&^+8LWp;=vTt6easr0 zbK=0Oa^OkJQq=~>nEVk@e@jNG7fpy1qRpX#6B#LL7&z!D!Ita@BR$3jbh>?1@ZL6> z1D@$fB0W)Zbs%U0bc-1E49J?;?n4!-bo~tkEwn?26eF}iQ-Hf5NTJ}-nT01OJ}12c zl2n~>3`hTG;2JwQYf*sejN#HXO(Tq}YEh&^$ z#|9~?ws%K5z$gJny4lIISNeK$5mShPhZ@5oYtGFN&Y@HbBF}v`8~&kWAH_Fa-a$Xr zl5+Kqw!@RBe{*9KaWhnySRF{s1NKgyw>mIUHL&AaOY3bFKZyJT%`pYu!{b`{h^W6O zqZ*Pl>J-gY@=w6C3&>~!b+0QGTvZ96L4ixI-4OvMqc#n}vm)R&0Op*atAJ0(5T1ae zd%{GEe5cLaIoZ7_tT#u!4R~xWhK_3vJ=M8!N1BUR;*fJ)dv_fzY};7>8^J-=ozh}a zr&_0xIY*nS#CN$`W}CJJ&1c)Q=<Kqb+D+};H_9HseoAl9ed z+zv59u{hBNY_RqSzSxK*2e;9&^fZ1Y9aHMPY|oO&Ds0`?WUoIF2hRGWU3aRxS=Dzc zc2I2SXmD;$unMmdl4-jpVrX;v8HI&U`$fevYLfJcmH*?9DiWPj!^HAc{r@c%^V6ns zgl5xI=B?Al*$`xoIVsLb;j46N)OC`z-~{O{0ksJ}sNHCyL!f4n6-h|mv!jLL6hid$ z&zWy`9rFknr{b^bxsih7=jm`t;#RniPw(M&41;JqY(*{UiX`R&j<7Bni*%glwnD*i zYokR2B?yu=;(%--icdRwUDwy`I~xAG10qvWhmNY#E)TjlNfFv$&EAj!u7;$Fuf*b9 ztq;fUJt3P2f%68Qc1#A`7^F1&2*E|P=e9L9!9F~72PtcKI`&5HVJo&1ZB9qWhmKzr z+|!9Ej+Bte&l{d8R zZ0z+BQGZK9wIFvWA(D1!5P{iKVxC}wI|6E5yJa&O6L86aF#}Yx38(yyuCz5&J$oWn zNS={HR@@Yaju;?$hBpNgEmTvnUgvLaMUt{s-%fp0ml5eWaf?klQb&@n1EAIZJ`qgx z-ELsE!M&0-m58*L@eWV1*&V}Cgo!#eyAf$7L`$-U6`?dCxOTfX2&w7hDvCi0uH6k^ zD59(mgn+B*qvD0q$2_eS5*yUIr6c4j*KcwQ4!Q5T1rn@#S__Uo5yd!ajXH(3YdwFu zHs#DX3tn&doKJ-`b#->!(VTpq)JZP!lDZsSg5%@~? zMz?fHN^LZZQG)c4lr-paba#kKi0HfD`!C$j^W1yxx#ynSW31Nv_1Ds?)KW3{Mre(F zpDA>HXlkryBxl7meFywEBHLy8@_Fvux2BGxa=1ZZJ3?Z^st)@jvc3*SM9R}09ctE@ zhml$eCqxt7&}q%_c_NN|lCh>25U9X}i{4DvrA7@e_b}nV<+mz(!|-}K0(e8PI^xd@ z`8p5xH!#dfXNtb7coxkEFWRPI4$?%USvKEQW2=nv=V*o39Ni5Y4Z-qa3RkGFe|6?D%r+?Xz zgqS`1<+RSr+xfc8t8sQ9%$q|ANW{(6Cdl8}K zV&xX(wdEi4Q-95saE-b3FlpTRk~fhQZjE&aVe^%ZbKY*qb#2;txteQjhB>i>Zzi{< zP6*v|5>?HSZ#BDtq{lsjpIhZqvg4|T}uEp(BL5I^tv8(26mzzl{&!%J-? zkeM9~ddqyVNG~pTWtL_1%KlA&`Mrl>3W z+UNx)gn7Ts?w2RCtLf9KiKWpO3I0d0Lw3W7(v5w7!ly(F5Ju%cdi|yH_;uovJT$ge zP$2G#id@T~jj(?0(}0ZQ0=sYd6^e)2Agbp_3*_PCbVr%{T6iPx3mMK;lD%z#mE9wa zc3N#V8f$V|^$V@6JPu?%{lIh|jYLkm-RmVSDJc+XaviDm763lo5O-0Quoi1C3kaIH zjA&O+M=9uPC(WEGWbK17R*oaWY8cop6(K0XywassTWed5J5-E>S^;n=&FcaV72}iZ z0P~{MBYEDr*!qZ-16@3B6qm36Ew1Al)_(wAM%rWkVKs_U1|#!fanK&hq2F~L5}nIn z?xki@nnlFKSE)_m2j9w55+E*iJ$}Z>Y#t5C46l5mjsLuGNa&^_4*A>b8Zw?FvYa@K zM~8Z;5VAdIr|2m4>^xOnwj$7Q-B9}j$5zl?#B~=kSp$2j);%yy<)k$+j03NWjWv=u5g{*8c?_@>@ytzN$p z+Gx-3V@$2BDcC(ncg~asiKxcbz>8_N8v~BKF)KiK#iY~5P+#&vl}uNnZu)zuu3e_X z3tAF((I>PO^l43LPwRn(W*K{UG7tZRNwarJlonU{+U`=DxM$yMr4`x|#t2ELJ}(z=*JzSbxfkZsHn`M?B%#mJuO&~t@|+j?dGkb9GBXWQ7nzvAB`V_^ZOW3r)e>N z#*BpVv1Z#~cIGgCTpiDhF38;?C@0l#qHK&$?DyOn_)3m%UdQ6=r&?szSx9a8#jduUmYfVUx+(!(m zlCNegYjxVQx3^|pIYl~aScmh^bJPELXzm2m_CWiRO*^)xa-#IMvntH0D6mD-4NUp5 z0Y%1x0^xzJQ;?xWp%Q^1sw7rnFamsgm{^+P%ppO>Ho0hUA)lOIgk(jvc@ubQI%D|7!(Gh8mi^z#x@93%jn%GG$rKP`^ z6JaKViwJ3a9fXV}(d+VG_vr^`s6HJ<3T&;QyYtl{$iys}{vHBpH>8ZMb0r=p^|RO; z7o+-`bKO1^R_ZW!%^*wXY5uXrlpL3iuim4gZGL1-X(*G zGd|>TCtBCT5nOYricW3@iw_{Y{NR%0^E%iHfemFN**T4|M*{& zGO*H&BEq#{B9Fxb{H-NL%ODQw-BHE-&Iv3);^z3sj<=<CfP*f|xVoq;`5xdq><{z^4FVI@=30 zm~k2JqS5prz?;APVrS@U(m>9VaflT?4Sx$w=pjabxC{hF;V}AG(4y7HjG+xCUQ4#c zdD*%d3cb-~%Go!bF?!pC*C_DmEo6nT2Cv&9R+>O06TSipC9?vDNMA>Lh8)Wfi<_8(>GC; zj;FVy>Y=(@tH2y&???DR!PalTpS;=i!NN|4@=*+83(rR~r8GId3F24V`XI7p zoEuE(jJxh+C!z@(=eg86Von%-kT5V4k3ZclTxfFX`>Gck#A0-jE||JX@G@0OyE}_x zV8eg|dz!AmNV5|-?q9!!T0c`N8zHv|Y*G&}Zax$*DWiJ~{-LE?iFi(MNCEx{5z^Ap zhZJ8Lf8;RVi1;js=&*jBAqi)`x`l4FEXVbVmz4~x|IGBKGIZzh#YlHwh zooU2wCPzJ;JvEe8zwyId;4yg7NOx_84EsbS15aSoDy~!A6Zv$gpk8#1RwM@z>@gah zM)1vG$q=7%E97Uk;IRXelR7bA%tC5Evf}Y>y#RdOZSLzljn9bi+;2a9${ChYNwRq| z$j6(!p{oW?0gTPi{n+Uhe6ivQb$HQswt`m53d#Afi11t_4^-}Fj_v6)Ai-Yx2igY7 z+>a(G4Zh12t<3z?5V|~Vi|*76$I9pH`YdFJIsj8f^MgzBP)rGuqmtTxEc)9A8uqb! zlzZkJjzig=g=dPM#-GP2Y?E&prS$xxH#AY3gl9i>?30@`x>p!BO}`VilF+pfE%@Sd zp68GTx;oI-xIYyrU|rMbI7ByccY^z+=eaoJY6+(RO<5DRCB?bGU|lef-mm_veHMe? znLJNS6}u~X!G_yh&*l}tnQ_MJh~{-`zWjZ+-+bw0Kd{QJ6h8(i>VUzh0F$89^FY7XEqgj;+npt})9}Ctxfzi3e1F_P_Fsc~c?wf0 zuX2`H3(@P;@1eRJ*kNr^a_Nh6`L54g98l)IN*^;oAHY@~J^+O0(aY#3+w8~PH@_6Q z{Hrrc$NBJtZ9|_`GKy(tRZ`VF>rkijTiVaB@@y>qX@{d@BZZ8m%5Qw|0&pIidL=hqSYh(9 zRSyi*caQ+@o$m3AOk*MJ4CqzkGSRA2uOeR^csw?PRRi`0Q=xF0whl87cKcxf9+Wnj z_4QpLI$sX^>!_f<660;~fvC@eVJ+g*beiM;TL?2e8oSjq0=8H`5z7kK$*c;Hg z>;Tc`N$#rm47_GGLIt7g3%T3%YDw|69vnY3xCJw`v`f9TBG`slboZoIw#Q}bur}b6 z;*`L^WUI5AN5pG6c*f~|AZL(CqMT;0@PStxmh?eK469Lu;UHzc0 zX=5gUYhD|B_sw}e4J1{53}DYRNg#&htR)G+!ex=KQH>Y)cO`oQwXV9ra;WWIejAN` z=Pr&$Jz|)`4eY4?Bb!#|$RQ6f5HsJJI}UhT`|)21%f!HGW&1ZwYrCjxuD>A_QS0^@ zFV7~OsOQL{XUPmX9ye%vProYeD!w@u>zw1B0ZsaUMpm@3tt^I!PnRL1obqre9_%|H zzAw1~B7?L}!Hx%w0PGfvGrgTTBNnZ)iH8?bNN$>aYvF4`A%%^BomUnjTE z6%B!#5vS@R?P^R$geWXN;}{VYOYGDtV@S>~_xVN8szc=iUMV>Yn= ze)inMvBzto#BBdeJ2_hBHdXW;>sBlv>#T|?w&HFg$vlq-I_vW$BdBTf*XZ&8#3Hwn zmMpbtzxOH?$WN$ZbaU5dRtXYmRE~L{&#S6P86K=R5?dP6e6zo=5o?(%mgOQ@9Wu-! zpe@jEduRJ3sKeewlv$Kaj*kcU?p*1yz<5Ta@-XJ~5##OY0ck4h@c|jCMT@LinK?F{ zn_DN$Q$iZvdCh>|65b~fUyZRGV?o-S{Cg`4V{cB_)0~%6r;vwts%-IeiCSb|wo1>H zr5+)8h9CGAnL=q?7okU@H7m;;;>#j_?Io-?sc7EUgKlR!4wT%VPczDWBR|dJtt|Mu zkz}O5^kPv-W8(Am=Gn+P=Svt)ujsT+p*~dk8D27SVH>^>i{K_g)+$26zLABFezVMU zhIiRf*jccxkA%G;BF)GQ9)78ylz=Pr>~zU^Es|nVMDIj{_{&{%GfOB`s`1`>G&wci zwSJp-Ev7s=WEq?t?*&Skxo0#ckS}nuS}EY$AGzQrm64mcY$Qz~=$*ClwX^66Q9WI% zKNd#ta3>I2J`9KHFYquHhU+bE61}$-QJ7)8tYj~1Wq@e&&%;8w$y}!;s`Frm9T>lf6bCZT^&q!}*2v4J!+#E~One_?Of{y3(fiBTk z0Mu+Wf7f+2n=nTvRRIA$lW}17z3&+SImLcu)eh*cPgL@|R7wnft5=iBf$Pd5FN__7 zmj`u|#S==)&ZJ;YQM@uoCe>QPS{Yn9JEq&Z%l-jm%roCqFt#hKH?tC)(V4vAe(!j{ zmsneLT+5G07~i?~N0<$VQcg)}AxdMmT)+5?KeQ;#NWD~S5aND-NH@b2nx=1v5z|xo z;mHMKe+I5h)N}wJf)>$)7a`x&!TaxcrVbPLylF0UUQW8VQ!nxu80jpp0Eu8jKf`J3{oTDddXbK&U5OIA8|$yC7E5gMJ8s(eN4xAyHty4u#-@$O=Syd&{OJ z%Y(|k2S2*ZXKUegj0G*y@O{%+W4lQgzVRMEAU*W(9m!oyC!`poA03&aD#&2v26fprt6<#1I$95*V@hJBPv#BiFNBoFmBl(jSF=Q9WFqHg>X~OU(bF7@qJap#I|E!E?Kbe@P0jF;e83R4*oV;Mt-amD4+{nn+Om>C6<36yP3i?!w`g${J@Wva3F4I;% zAcnYw9kgDtW$64|(~hDSXR3-a(0z_Ua`xcqW4X^Mw7Q`ds7xaZnaTMw-xNHyqMG=W zqca}4O&N#7S0h^)1CZ;_TvT9ymD}W$m`WfbH6RKJ(`G*#w=Nc9)kAfiqY0zO$fnMg z8=i2^*ZE-v=oe*TlC(C`VEV;$(jsTScC4|aD>hZoEo@MNu6UF}Hm&SySb{=kfWQM3 zMw*^`dcd>s%;>c{Tx+oX9;Gz_^1NqwczDk*rOfB%qK^s=+K{NaTc7>_V;8~!$%o3| z@5(g!Cf7_Bu@JsT1azcyq^Rs5zJtS=$booix?anhsfkmi$S}; zBZg#`>b8>M6nVr^V0$G+S3hlfq@vo>k`8CB@vjXk;J8P*z3L9h7eAk74KA}z>Ztt4 zAATd@hfMsdgd{*=oMR6xtoe$HXS8~SEx3+2Dq5#L5moE9ILjX_^_C=m>t6M1mA6Lr z%Otkt*!ykQeR^gV%={Ai_fI?z6y@}u1i+okAkFUO6IV=0<2vqd!1r_|#%!2B2AXTW z!E^`EFFI?EuY_7Gh*cFcTJ4Lv=7o9ZE#mL#@~q6MnRQEkLfi2KS?)&Thsq6if<#Lf z%NFj))G~E3D?@656nh#JxPQd1g=6~9!*#wZZ|ur7Z0tayNi5Aakbj>kLOsb4kQ5I! z7K5gj0JTY~FZY8X73m~NOLc@Bq#3#lPQ3PW^T$C)shxbuGeN2&_XljeN&9n9HH^v1 z^iV^FhofS*eXVMkKRHLjpXEfu#m!edB^W>BT`G>XqJOV#9WWXV5{-az(s6X=*tUg034#*^1W63!>)a0^-fhhT&b2NlQ`73#U6 zxg-I&A#TohY(X71LN>bhN!o)@T#0Y5(?hKrWN4YoO=I$oGqa@&#aK z(7FpQfNN#XyyGHE^nC;!t4XA&r)4Uj-)+vg+%;(vpyxQ1ww%hT_pe5;)~)vQwIiR= zHXk0T{r^d6w*v(E2=bH(KS*@EV`7;G`q}KuKoO=X0<2{`oKhmZ^cUJ~`Z}9gWFNia zC<{=<%nP?H*FJ^h0;}S}XjpS&feoFSs~|16Wt*cs%GoJrn(=u6nb>HvCVsZ)Bp_j^ z#-=B)$X2CoaVE3e)XoQ(rgP%f$$wyJRy)6YbTmyXPI18SQj0Pe4i$bQG&4N?+C# zQQlJ@Peyu+A{)E{hT&Sla!1D6sWPOv%~sWqc1V$0nyhSywG7m092@xBh0rg7VP;NK z3*UD>0IBft=UmrYCwOs~I2m6GI7S|A7gNLx`K|&l0B=nRd#yk6%LvrF!2c@bm3f%@9dXIW`V2j@HD%N5 zLv|zbA|p&c!hBeyL%w$t=r8Yw=$swaMi*bv&j0j%j{0%#YJcTaH-EEP_?0aH> zfPC{X-yq|grhCOjD=BnY`rUV&P_4wrL;xmWU&1>`i#s4%#>OC4c~D~SZ%oi1ya$Rg zX7|IJiu^dQmV}qBfsV?j3_0jFD+D-_JV)J>D+fvps=OOe?DE%Pws?@6-eh9H%bfG( zR%vW$FX@5rXe+{t7Yp5>nds=#qhu^!RwG|vSF7_)!K5Vqa1y3&(4o#- zX>h1`OTD=lVe$C6p{_!wCNGzjt?z;K8oP)k)bBMzx$=46uwqx&d;FIhsV}nC-!L`z z_AB`V1B+Wv`4gFmuU4v=D~GyFZEf`)1ndZpSZ43AdgMxe8VZX_yGlQkXCQYvEMtrW3p}iEH0N zAGg(zFY&V@U?Uj;<3#}w>s0ew&*@LZdYM7Gk^GE(rkwEv_wmu?Z-2FR?N^1+Rg#qv zY?*fREV>$GXAY3lB@1Jbfp2M^{0yEP#+|ZHIIg*dsm*OZT50{Ev$;)^E?n(ppUK8C z6{@q`k=x`se@nD*&r7h=>f^?fjvjPN2_6s3x;w`l$CeUt2cP|f1tzDMD#JaI9Oe9$ zkB@TNRB5MZ6bzdZbb5Vw@i-)iLT;vqA4;>+1f_eG%_^dZLgpplt@(+s%%ZPb;q}5N z{{Cb7YvCj^Hwjq+L?{!-bg{KI2_`H&vUGP(^OrotvE}pmTf@|J1Q?21JDHhS zX_dH}L+vv|FYI2^D#$-b(Pe&K310^!HcNq#HrqdWjd zYBARs{U)E|he~>-lnd{Q8zZRF$_wmcMCQN7dRHKj!u6*WLc9+_Lsr=HTIf^yC7tBpaT+3r; zc2R`v0w8kG62sMa@>dWxl`nvd)-B7tT*t_p``1kE)bDzBr2?oHvAa@sE|AAA1!1Hp!7QSgG%{ehcrY zb;C3?GnJ{vly1~`YC2L_HHNPOU!$c|^LwZ;4Y~~faEr|{R(?EyI&=(*0t{`S&IX5` zt0%DwK+O$TNy3}24c$GdV^^yu%YecoiJm*R(LCYOI? z5KJhb)j3(Mq2S-$(f*SZ*PRFK!q%rlE^w7>Lw(->>P$)z#n`2S%ypsT-ZrusG$&S`mNEt~ zdR@q8s<)oLMbsK?fDrF&xi$DaD3rYL)%~o?vxEVY<#%t2gM?$gDZUIOMj^BLb}zLl z=7bl>(a9%FnynJOYQs=+SF^o4?5h*B*ZS3J3qv?z5|D0jj9lV$WM#ptoGX6^MXv%G zj(Rd-h+kj|Lw~G{{+@7j?BVX3lGJ)E$_S}qT5#h~kkj{x_18W*=KWjTnw{n4ll*LL zrr(5=&O3D!1z;1kE0`IoA3T!D7iQJucVC}wHf^p>3(9dD=R5zxb%a<#z?P=Yf&fj_D7@%AccF3&7KA+9Zqxdc{1ndVK5Xt^A`uev~54irE|?pVGhrZ)XQGTtaB5 zbWLLUx*9iuZqcv7-v^))!q6_gG0Vbm#8a}UcJp^Q>1;9}8R1@pI$6aC$jqK})39t7uLSTr)&$H-UQ)kTi zc_m->OWEtG?^F_eRnb8bFLCnlB)DXsvA%lS2@Y7lA*&GzV3TA{QJA+YM;e_8PS1|4 zb3D}HEK^%thIehvNtV`K>tg0-x~>{FbhG|QYsr@8SFy>79tOLOhkvxvR7|11s%pst zsQ%vZo@t&v1<3K1xyvAiG-cK@)-4?MQG-o+omvZY8S+i99a+;=385XI zTt!!z&oH`wN22njhk1BzZ)5u9FSUwukN7LM8)PhFXz*oX(?i-(OLaau$3J^| zwBa>jgM}R$UtRl5kkb)d)Kr#+JPu&ySvH>Lq%pxiCkL+4ZR`=u<7SPN+u3^p$mFuK zv1PWS=Zzl05ot32o9f5T8PM@FoiN~K&|hS;+_=&Tq>8f+lnwho8_t!u(oUo|8=4`~ zef^YH^28w>PN5($7)g!}P{(9#WuK&&UY0_IE0N2t27%Bch8iACF~viEf2&$tKsn*vGNcVTJ_z->Tss~@a}f}ss(?pCKZ#QLP-?i=eemlHo9HLBB`kMFi7 zRERM}U|5Qa8^GO!qp=la7)dEJNa0CBS+p|cB6GR8xQBzF{Af}4a>f%Dw&~YRrUufb z?Z%<&&}C4sp8!$qlIlag@{;10<(~s;QS==_YN_-eD-7%ZJXA*4G*I@lkx-9<&e0j% z0%18(M)=(?g4T+t_TO#*rYCI%UJ^VnChHPYc@)kJ?X@oxCgFf4#3DG)O;5X83DfBG z(l?sw4s+V4W&-u3{B85VX8GORo5?Et8zmIV7%b?&52hxP(^szW_nM2o15(GSbLhKH zUsIDidB8HKqwX)g<{>L>PX_#nfA1Fd+0FM*92@C!Grr*cg4yz{9pbFItQ%E%Ne=FF zp#@;53;V}4pIzzVkWcKW>y32BOt1x(Sn{)V;}*2V>nV>|Xwia^+C*d6z~P4EG$qfX z?B0*1Rwh!Wc|!L(y5m{aSx7c9DzJ9P^k6d*urM=wjTre4aQVzPX?bDgDh%CgA@Y4o z$g7i=t>HhjQ`k|K^04DRXZ!|gzJCXY8uw?lE;@xEf=Q(s;;tK}i#b4qacHmrOP9zN znA@EUr<%owgJBCv{@l7iTWnB?V?E%y8&q}{0ol}7iKnZo7C^PoC^xb+5w_DuUz<9Z z093t!yk5iKXZ@>vEu#;!S!4XM8jg>+c4op=4G+D^Bz5h(G;c@{cR@OlYuW>eTzVbGK=cuUWds;II(#O`#rt z1KO-m$b4MqUPRbW8*fM&g^0pZk!4hFr|Q&jd-2dB;H6pRbW&ym5qcc{w5^!@px}Z< z4Z3ZduhZ|BJ0V~Ujqtda>T+{cAiXrm~)`);^w{eas50iTob9V!Dw=cUR*f>&Rp z|26ArvN#a5-m*OTgztgX(Uk!WGg}YIiTzl(J!>7Y-J0Y2JNC%8SR&~#_JJ?OXX}OG zG_>*iH#sblw~y59Dv9n7F9r?^ErL;-p?=?q_yQ5M9>3Pj(qx*nDngSUVJl_#4poXe zb4|YJj`z{tw5vYS*AiNU|D`qV`@uyS%g|QTooC%j@h5vj&nBrORQG2f#NG!mDEuJ6 zCKIeuvi;jXBwYjHJ)6#jV)QD@%<#d#0#H&!HGS_Nk#F%um58-S8aI3Rz#=oBtBZ-DiA98jcJAe2~ z<$It(sm&-Rd{*rD8C_?ua>g?mO}EqtMyS7)BmVXEdP-_xM7}(T2kvxy39RE#s~LoY zFP4PB!UUtVGv_mBh2y>EVj#sIqJ1eMV&>fE9h==D$v>dhN>PspGVkGa-}QdhFtCbK z{tcABVW5TRr3YT$u@k|H;4EqQW_H(;M9L)@iGJnzYIW`X`;x8_N58!J&tM31i2oi*VUaGZ4xxCkn z70}Kgf~^$;>kv=pguZ7hR0Nk<9@(E8OT^52+_KyOMR<#g4<|LSc=ZnxrIaJjUk!~N zx)^CN^NFGDijKVwMm*70k1>$A??+ z_3fh7_q^x4H~dMgrd<(_xaNzg&op0>y~( zj!u$!uB_xey5kpab*Bg5E*@(qhWdfuH^I7P9&3gwPdz*O;O1PXUmIH}l88||vTY?X z$hEkm{%&7C-s5uO8*{aqoH@UK9-$N9(~+82w&jMfkiHJ$cfehR!+hG(d|)UQr^F{g zEM&39CRQ%;o$#!%aHb5F({HTUYkMEOBQein94B|$Sg;YUNNzw+Yc*=sFw_m~u}D_t za5i^1Z@e%T?hpIq-c$cLSH{Jo*LT~%z=RBK1`jxdkF^P%Uzm~C$)rB9VKzM)+S_?< zp`CLigGt{-eKbPVH8JUHV=@u63h%w3YSYu$73x9T=wP^!*hX+o=hCo~sO^V7_*AwK zkuGPQdfBYqI)9-cwZN~5?K_-`fBmk8c`1s9YpaGg2)I!|G}#-(FMOC;stT3Q$+#23 z>l!~Kl1_ZC;7W>0=ZCzD#x}KoUz1s6-x~4R{-hSY+kaL>zA%fVIvLP%xfZOIfsFi*`LQh_3Eb*fHnc4;E z0B6n+rO2ztyWL$;% zjVmzTEQLIbM|)C1qUck!Is;Q#5Mn1eeyFsrdpG$|dH%f(Rn}I;kYw~q#|Z~+s_A%iEXAf>m(P&-&XCSL?Uf%%GH2j`@+7`hez(;w#+Wdp#VNg73n$zH4B z?EN{+40yedknD1wWK=XPsi+9u$#{=atciLf@20qiJs>WX?9B5tRLu1E+RvY*%4Tuv zl#4kCnz{?oHKFB3Wq0d`&mfXDN6GgZoQ0~lGfbAao zY+5sfSNWz4n_Fd21vI=;-TxSZnv|M;!AGhsdRtX3i8vNm?Q5))8{z%~>eW{<(s#JzOUbRDSya0g zNvJo3{D?!@*G_ZvmOA5)M`Q9m9^}mh|CVQvrFGb4s03Yb**k`UQGqRA=}jr;ts~wM zZ|0{1Lc6s=6znUvgxM=dgo#fsBTasCh0Li_7w9ht5b0bG3UO6ZGD5o+JIUf9!C@kra}H5YqQ(lgg^683W$ z;sP%VCdNV7STeOE3+rpPjG?)80PPFgLH|@)*^NhnuD)0c)3qR^zpnQFZ@~9$Nov{e zG1erenYJBLB~0CXW1N`v8XtG|+ilm!LQRLj5o1M;U*4^COI^;o6tyd%+zV!@s~4~7 z-z1fRY6%O;`ev^+F%Q6^el}l9sb9$e!)#C_^Rs$DM{L+c?UI@0P3)=6%i9v)Avqd0 z8vp9z?yEH#tkNk@;D;$zA*2IRb|=!}lyuSXAJ~Ux+-hQodLY5`tWV_CAKN;S=fG*B zYK$5Ccthe#U9fR|w_m$p%Heb)6Ki9Z=mltJ1E_<7f;w&AKK^i>YB_COJnWk~h z6>c!gq4?>=IS!}vU(_^tZhRRt;q!)*5j33_MQFxi%v|8)5uMm4z{5b_8_CDkK=8Xi z6s-N@sEIU5i`18cWBXe-)JNbRpHEts0%c7hO3>8ala~<}3xhb+D5v0!W}ces{L(N1 zyIx}9D1Rx>#08}3l2KD1(yn{rZB7_ms$vYtHDvH?G8k{#mj_%|Oni6*WYim%&;@#r zVJiVkPLlzrNa&}-Z`0qGw|>Xt(=}-9Qd{r3YS-RW=(vtXzoqkuO)Wjo)KTtaX*f~{ zFe~>lcR$#HDCQ=;4s`AQT^V{N2rPff@U4t!f{|6NSZ=;UK9hqmy00Q`Ke4|A_PZu! z6>m#pb^YmZhrG$J1wphrVtVBerqfMaR7Zs(`UX(rp$&p>ZEH=*$03(*8$J4D(#kyz z^n+J_g^!_+id|){>Fs>TxZ>Q~-B;Fjqhx~zdyecA*_eA=sWrwq=bN=0A}n4hsFQyr zaK9M;)`gEhx9M*l6743Eo4Cp2Hi{0tB?;M3#{?wOn*N?ZpEafAW|tT~sH^@X+ClU} z_WQeymH;O<9DkCh%+6z=L$$bvGr078iV#aIVj2$5g1q8-&XJMnfz!)Dwk3Cd#<&Dd zbKgkj>4UFkXdmSMX(!rRn#^wICn%NwF1^)w6>&W1E zl)uO7j{--Jq`6<8C^P=3>Hi*2Mb-pvY586=jkt<*%6FQ;nI9#FscR1$&3fAMDvAYb02QF~nXSv8KbJ z*E&PDeAkiq95X6I7YqB6A*H?8pT;i7>K>q71Gr2LFc%*1ZF`f{0xfFx361bvSwzwP zdNVF4zWt7=T_O_eK%3RBvRnC_dtgf1jXSkor%jBmm|(f`dDV~2bTZK{JLf+$#FHBA z@$H#2YO(w;E)~2Hx?WM>qG%}NiAJa+p)NyISD~LxYUvQ~^j&_H3wW`MEs}%9g0lWv zZ0jZQt*Wb((VZW5w-$H_{4gP6R|iIm{FM=G0?d@zd-yzUn|;Vv4GHtTdjI23mU_+X zZv)_{t+rYMr!1|X5Yrwxx&t)`x9fM^l}W=sij3fUkMk`QHUb?dZX;ZRkyj zusVAVONOaTTGCiLUmdBGNbV(anr{(r$=n1uhYLysnp0El4KJv(6i;a2ZY4F;E281R z<1-7*r~FQzigx~(B6tD1IZl3Hd6_iH(Qg)vG=$eNArt8Vba0Q_D*M1Bv@i}C1kA2r zG2V+>KMlPW6b8y#R(`NM3fs{3(*EPw%6Z*mwqI&J3F4>()C@Hxo>^(TKa;yCzxj5G z2O}dV{n1UZY`B!apzbFATB$?qnwbkfSE0XOwubsUfJ&yEvbs3Ujm#GTWeg~sDZgr& zJAvxU7tSrbS^uBh%}~t@i4*|$r_zXtsx}veh=* zk#(M>;c+pLk{&{8_Kr7S=lCYN34?tZv0azFcQ=?5tM!>dd4r%-mz{6j&k=dvl z?!Pm>zk~aSWOld@V@;8aIi116CO9(RSDY_#jdDsqT?!mnfE2Sm{ z&27F$;B4CX_)X&{o62H{HPp>}eT!~}N>)$d9N7KA{ClRtXw&xLZ#0kd|3+MXlmzucH zNAkE$7t--7(UVs@#4<6Ia=NqZKMH_KKym8qHqO?cD*_MaE|PZl$sCld@>E zb4fA#yYcgxO>_VCXk(MR&_M+iC;m^dWy z1%OWUpta)aI9SIaJ`vF#72cd>@ zn}lf26Q|`=E#XWaahqCdeCecft|_UNG^9k_;s{wXy5<`p zY3nkb0vOEo$yVY-e!MH%MtG~~Ok1WQWu)2} zAJ$O7*AMe|rjftH(s!GeZx)GAp)m3bslQSyr>z>Pu95v2pv()FbF2V=FjD&|$u#32 z&?c=6O>no~U|aZM2ZTHfZpMN?$+H znEsd}y{M-Pqq2Q%V{EWEboCbuNRffReR6UBsk}1%OKd-P&{we>&XC5#7Kr8ea4o3g z1J64Z2XwYg$=}{V?YUoP?FA}5*WQxnk24INqGbot-A*&UZn#xs#AFkZQwX+GsgKcj zoE9g3LZ1v6E zG|LVd@}I4#TjkK{j%j~XqG*p{=`AcvbHH0}uMO*RB1Vx5 zvy*b9Zju&AjY4r)QkD+2sOtOn&#ThTXyh~@z%!}7Ee z{7_05gUG3eVbZ6s!4Sn~A*ULY69Z6oa&aw0WxNX1b`E=5$tAt-*6`*1UiNomwL(O) z-eqHPvN5-T_=a<_!!y3Vu}Fa~Ls#2ruQ7tQ?Af+0H_0s9BZb*`Sw1upz(b1a^<6!O zd|27iPwF|H8*v32FB!o5v#7yV*Z)hRUV=xTE|i|(1Fcro0j#2}lG zH6#S6eADuSV5rDd{Q4=vy>j{w^ZqsvX1$@~URI>1i#d9MF5e`=12vaYykT%zPgGZC ztP$B7WN|7CDc%VrVd$;A;UvM2{rR_{S*-09CZ9UJs80HQto;*BFIh*&${IKZpCLjh za~%OT$NuUarklCfr5qrc%!f@Hhb@ly`!(-f*%|Uap1$I(e#ooD%VRsI>KCJkgo$T5 z@7Yyf0;dSJ}Y-L);;KJxCT#z0bO4-W+a-4&U$w9vm()M#G+NbM=(rUr>MN@$PZA5 zhC@@0Hj?$PQj20_>vYq zas#4arc71@)X zs?$BbX|_1C^%PuD^8*Te)9xbbLRiI4C6%6uE9gqVjB>nm#GZe~qMK9b3gSSrm({+Y z2Mem08$og@JrNa$wv*H`_V&Z8zFUilidN+Ze^E zBX?>bbE;iVn3{A4l7o+v84)2$-TG3Em5%XD$N?`QlL!V?QwQ5MI{P500k-k#4I9!! z;a=jsb5P*$4yWmuQ_i^|*PqC*Z#3_ZKU+7&=|wqOI?h<%M(Rv>Z)Fr^iR;LdJBuqy zOiwbm>)#UZh{Dn(b<{|Unz?t#0+PhqyuK4)QO|=U8frhTMn_%U7XlDSw}E>)z5Nbx zR=MrgQ()U22}!^+)iX-RMtUKE)CraY9LdS{jS&5*b0+QnAZsciK2=fgfNs?qPn;-w zAs=by?Yz9siKdN85`v1H;fn( z!pB)ZwZu}|>F&BX()H)&e0or=2ua6mrY~YIF(smy+Ufctosx9TIC`D4#3$=Ld_>gy zpB97^Eu4rga~X^El#pHE>{w?$6%UlCQTjP$T&GGZF7vML(RsF~V!^QwCCSOT$JEA_ zbe50~jjmm5N1bkwkqxSIMv9~c@5tHHDG+jqBT|@U868=H!~pCD$Iy5}nm641bdzsrER@YJ9})GtA2qMrhroO*BBqL3SFltien*Ix zkOg#}*Rj-f#~>5^EvMKd1q~r>TsN7g;H0{CT<}agK8Q%S6S!3o{+4C*238Vcg9LI4 zs;2lj)&^*aL&wPoK#i!7*yXg$lTJG-mPv||WF%`7Y^5VPu8t8sp`zmtiJ{Bl` zoGyT^!y_SroNfUn4y_0x=dg$pWc~6!+Ma>aHKOj#1^CKng^bg>oq#{r7BRnY$sdvf z6+xE}H4<|F_dKj%&86Rh`2X`mBg7j2iEx9h;73X>w4U9@;q*PsH7v3YE8c z-K4R_)u#H0s6Qf~NP=|TCTLw5U53%+9EjGxkTcENUs*36V=lMEcGWacGt6Z^WUU(NnS) z==yWwG3m5&-=8xkI;F>{U2*6tZ)AMy*d?Py?z$#;gpe8Jz=s|p(k@ZeG2*%i4=9SL z;}-q9BmVxty}BJjll_}iES0X_8%~=vX5Ww(W$e9eEhQ5Z zZLXa}^qpvco%R>e%OZGF)tb(M{f#LKsXJ=P|5Imu(uRBKgw>q2_YqNlNJtTPE5#so zu@j382%UbHl0eiMi56uPJd+NKo8;9XIn$0Z)j2^(LzV1X5K?6lKq}}Ev0VCY1}1k3 zTqx1u2KHMmj5lIMT5u;qs?13Amp8EtFFLM3qVKm z))r426#Sdxsso7Bb4dlZ9dYOr$>_M?q#~titYeCgPN`?%=$t5AvjN`{xL__~AiYnw z@OKMWw+Nje){uOyo;{73C%mQJn?o3-T`^8azmqfRy1OA9U4sVFLEXmBseD7aHE+6+ zI#?I!Na~HD(U@zD#((9UNr~MF_sfKP)p@p#CKAc#H{^>$3=MqWgq$CMe`rmk4nIjg zCR%eCPkltx`=1m9JS_++yq%0rJ#AQ}@stG9jT9MC6ihvjvD^S%+7jI5Yx}r?>f{ol z0whVSO7MImooJDxip_%erJiE~I33Z}Z4Wq(GfGU+6{1dxV+#Jo!s3fNZl$}nc z2BgtO;JUhWq?2-9c=zN4dLW^2S|_Q4-HC*tBSQ|!Ly8u4!c9+cX$K#1VRPU8CYY>7 zRn-UrA@2zR(*j4(@qf~xyA{J*k?o8VPOa>^KzcVU07uWOz@)I{g`i{48@haWDOh^@K zu8>&K6Hq?Ex}|0zPC>PGsJYmYoXjh7ri&jm5|Z?^UffZSq*y0{`lk*~r!Xe>p>TQH zv8>`BA0q5k(T;H|dx3 zFqSyr5eMBw2W!*dCG|IT9wkogZR`_TGrL&(BclG{CvnsuU`w6EC$q7qznQe)y5PCM z<~#lW+v&~C{JDD8G`K$9W9oRbttqGTMLi$V>EdW1Y(GyJ{G?5`K~dwjmD7`mEt$E5 zkoVjNQzyqbx|Rm4$u4bo-G^&Ww9XO|k{DCaqI>{&S9pmK8BTsC zI3h7ZIjwE?T4;gT#ffaENTgj86mKQM!Rg3yiuuWUO0bW6-H!0P`u^f-|B&T|6 za*AV5-$BL1RRNKZ z4r(l!x{uM~Os!`%eos1x)n25w^e*{Z@ZFu(hnu@;{4KHml4~J*lIBEOD7;D7xgGvW zT%HL3Q>QHYENK^BE!U!+{mD7=W{lHaGip@YF>7#&d|G&`!aW`5a>>Oh-HA^QI|=Dp z#YMgysSFk8Z}hHcO_@$TJjK)jWS??fq_P{QxRi9@JGBdmrvvw%v(`7K*L1A!)IHrF z5%o78MT$8*})7m466IZ-)v;yJ?Dj_7Neuw46VCy}{hD_cwX80(~9!aQ|ir6Qd)4l4ol z?exjfovMp_xpCYpGY)R=H5oN>-Xjs_bP3ZDv2%jhMTsF23%ax+NkTw4xsG;3yDP5+vz?@q2v^mQ{2{lBZRgN!>LT8!qHqv+>K5# zmyTDcy`j3VoX#LcC~biB6e~~rR&`vF(b}iHv*m>Un8iKqF4#Jf#vsNL4Z(){z$FRj z!AyyKth5Z>1GUqdrycpJ&S&a`>2_pSc{(d8eo*8~GM1MLNhd}0fb~k;N$FZ~<0ZxQ zY5pf&?kzCXRNj3{BvH1wPY;XLf$JOlppE=U#}nx&3PwGK9d z@DytuttL|JxH=?68;gpeQzFnIG}YKdL1MC&xTOl_Dcw1nj@qdEbh{L2M}a%KbRruQ zT^d#RyRk-{{JR$B?g;DCS~-zg1NNG_t{aI8lDF%Hb?su}Q;t(ub;~KrA)Mk-*AuPnl)y1V=3e-&l*6%6alIKeFi6y4{h^XHu zp~%8<-C9Ud;GQ}X0awShXiHAyJ4qnjx_oZO;@WtZ#975nqFv01PMxBXZZ--u=cLEcT5(1X6_Ix; z)YC%wNvt)|7uXH~Tx)LHiA3E7={lqxdZ{>c8P_!z|G%4O((g}PJKfP0ih)Q`t-8Ev z-lJn+uBIC;IFzWmJ9a_VG3`_taet0mR~xy8teM2ZeAB`s=3bbHSkm@jdP;RW_fAC&)yR?Stgs=Di#c)(}ZX@Q}h-)rc>gq%}Mgo1n(5{GdhkNAdI<_@5;o6~?OOc%o_S3*;Pp-q& z0~#YIkY`G}zLT-Q?LAZZj1n~uIml7u1{v{E@3@Wl*OfIOxTL3}2RY`xO!6=_$)V4j zHhjoy`-rG_KVxhHB_w(?L!7#zIIdtSh$JpyB++lzoPhIL-pf`vZevoE3_2CyoBoH| z@M8uOl1P=c=jok2C2ckOG@#&4gqF#P7uDwJ;wO4-T*K*EQ!(ojM4KW{Tw>7G(ja3P zQ@&0JZSN*Jd2XydJr6o^@Y&#}VZI4ZXT; z{Ki=mTYS4IHp#QxfHl#Ab4B6bAmlb|l!yRtIb3yq*OKR*ZY}B#?8I@}-KR7H2i`Nm z*re!mM$c|^TW2BOTtdW^E$EAN zf-NDY+-oBQnd(?dJNd}|RQhcjS>=M{xp)@@csM#oC+)XQCvIymrf!?=^HBScj%PP` z?u7gz2NlZl_(T9E+B*u&Dsboi9oi{I^VQR{C!*jg4^#4o3jRA}=#9|tDNfN-=ArZdjvIIC=gh62y2 z4oHbY^Aw=oIB_M{RIq?1AU+`h#$5B8MivRUl$>==!s*{}ELPvJza~lDJ(VWwTM^{$ zoqw@eH#Hrij|E>zR{XWPfDFGGS!KpI+m#Z&V={WOX21ojF4hE ziLs8ovFqNLjO?9?8QNLwI5E1U-3{?h1?Xv9PY$-IX5Lo(xbaop*J<2uJCK?MGtv<$ z6*F85c_o|BU|%I7%FexZy>}qmV2w@fW;PW6q&bM}#|ihhGg6z@LMr!Ba^^(5DS3?B zy?w$Gw}d!}*Dn6A1wW}+-2&Hb_q}!WOt3a6iROx@CwhviUR2|ou9lcnizqS==eduF zdjCV(?9x*d7reWRofM;_`-z^u(}3nM_)hl%Wy7~q7AN@=4IuRnC?KXHcWS(b>c6-; z3@1Y2?X^pQJ1q)Nz=(Fg&E+0Vz#|bGB+nrccvOIZYSGnF+>mjgl#t)vnKO=+&iA{* z$B8}f?S32cx>I*a=ii)oePg9u<&D54xn8~ZSqP<#L`+B6sXow+IP}vss?*u65OK#2 z6{&Q>9IjD=BYN$w8)d^zb?gT0S%n!Itj_}E6(vaNeo67Y<3^nv>{8)jw^&THvK&3I zHzX3=k<1F?nEH3su|~$U(`!<~+)2HpYAG@@oDle@j;7mjMADh(l7UKl)O9p=NSP6P ziF6lj#ycGlb!xy^e;lWfZ3B>^db8{7%X^?fcFJSK-Qq7PylKJV5uV+a2wyTXZ<(rjkd(l}R%66V&g6&<=L);42W7=Vv5M9oQ ztb^$(nLz3*N`AW6wYkBm+F2P%xf)3Y;s`MYDnTmI8j?QSr28(>9aB>rR9Ea1EB}XN z)E4ZY*v%1}VcZc z=@h`J3y&%)X4!-8=nYwS>b-0l3$)XZb~v5B`-xmTiJm$gNF&HQ$AvQOc)20zx3RQM z3x?_<^pY#on!DBb*|gp0h_`EcK;nH5?_u`vLggs>%ovsIohmxCSBQLv;NFF6cMMRN&hu`x=03YR%uFchzx;#(p}zI7*Vhh$Xfx(s5I=4vwK;2f+FW1O!{@DvGZk5%oJC(#fCznX+0;T3p@W zPYO8K2D3}I5TC44X<|NgM%;*VI$+5KDw4iu$b4={q3&b{hLhp8e6(CDhC!yoY zMSuq(XHL11ic)X;r@?!0_Gz2<@0@&Ad8f=E~;Xl-%;_7ofGLC71%5LK>zdiKYSd&wy+f&NEd`=?@Ip=*) z0?t`;j@u)N4-Qd5NC9$f?lW+7XPn|M(c>fUgdAi%fi6lQC7KrV&e5fH9$x@%;io+Bm0%GisEd#GFRY{hvkq?xlv z(>P7XM+s@NtrzNQsjiF4QIK`>L~@ZsB8RYUW3Qe_Y1(Z}aC<_gDe~|XZ%Oy1Yt-cG zD5-cgfJ|}l-3=M2{;k9w+6XIm-0+QhMUjq9H>-LUe}wbV!k(62VGijTVCL-zAzx zr!Hzb8l!TC^ZpXB?sOR?4z5o`=#)NTPc7S@I!>K9los!9{7~`sCckZ6f{x>&B87fp z-4;bX)m7WDWj(~VDlULeyDLuDd>Rv`k_vqhi_&$VG*s!>K9yydU{6v4(p@(N$x3Hr zzl&>Awi!>A+dS>w9vBmz4hx^gA=`X+bls}DObMhrx@z+gQUB&cozomW0kv5i(t!qL zMHDzXA{+2igp~uxiKw;Hk>&uNQ*w2kmk4>0o>XqdO4=QCqrc-2G&jKTZPH`|{o7tS zJ%0x%Ir=lSuycWE!FQi%L7YyMi4ga^uvXk6w2j!5kiz6(BXOMC-hmo1cL_fQx@jjP zvC$?Dhlw5wY3UyrGq!t6UHJ&H;J6620MUvNNyg@APE~nN6{pI*j}(b?G;Mnxy%1nk z*;u{1XKyhxP}8da253B0C1E$y^#X!JI+~->4MFp-m zAWpiG2xxaiJY6!<0rnfgL!2NL_)N*!bj{ybo72->hs@nhZiyK{^4tjSB7ajI0;qkN zc7fa!x{l*B!OTQkY;(JEh{9U~AiCBE;3L(+yv28Q;7#JU!f~#?U2=fC~jMp5|xwk~@jY8qhOE%&M#SRG*8bbiiKm$Qwr zLArJmw?Z|p)FODQ_2!&jI?gHyVc?$Do!%YY^E6RWQCH{v)Ar&twxlEu*~??>8G2Iw z#<+%CD4sg#k|LbwsS({TB{04bD>vi81J^{=nV?lamv-N}_&}|1b=r6Wl!RDw*G_{t z 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 diff --git a/static/assets/img/bg2.jpg b/static/assets/img/bg2.jpg deleted file mode 100644 index 1f6455a3d198d89cc361048ad24e40cfdf9e929f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 29064 zcmeJG1yohr`vnYdLO?_s1VunPr367*=@3CBM7ksukQ4+&luqdo0SW0AP(&mI2?c2| zXh}&a<=y+7102E||9kKEjq$#}eaE;S_C9;+z{^3~rxnqah1-@SG6Mq*hUU zM=(a2vanCNlQIYNJk-qbvmXow!B_wA(BnF$9v$Fyq3yP{!%7u67_QFw!cQ+&@x-_u zDVlSfFa%Gbd_8t;I%Ouyoww0v>U4sNwk~+`klOp3N%b}0tABV@>z~f&If4B!WqfdU z&K(?#qSDLcrPDm6y8%;7r#9bP@Dy70>Eb@w0S&-BoTyt%DCI>JcoI7|@v~%*kI%EY z%24pfe{`T7_Aak!vS6VMOZIzJ2MuNOL)G=r*jr~5|0Ht_$3ANC6dqQ2mnEZ}Axh2_ zCB578p$pLaSSmeTNktgwgflrlL zZI_3MWQ`2PkpTrzxWD^l+qXHWI%-+vo|8O2BC&i-i5Xt18RK-y27~$%y#@0nm!P-) zlj9)H7|@v2c8NS_GQxqzlR;4(EF5{|PO?t!;Dbq&#A*DfhzJ=vBEt)y6MuT3Qt{2@ z^<|7(J0JK~6d%o5`G&p`ut*O}b{76sI!nOQjDG)oH9#e4{YcuQ$S81Zlq-vbO!;$M zr=~TcHJJ{4*xr+vRLwIJYZMy2doRF$rl2g^xPH1ew*{PfwX$6nSl}XIPqqqtjU-_S zD)9SYfk*XGgSQ|G+{CkU^!8~HgX`%D<=;l0jzWW76-M`Eb5W4FqiU?$2%Y%T18ZgS z-Pftu_EyncXmtl1v_0yJC!Q6pegVi7Bs&=l^e!#NQ)vBy_#G|seb$d$kqhr}jEJti ztLuU8c9iU_Fcr)cqO9k!t8X$3KZXSNq>z~Uni`*CqY;Zl=)He>cs0Kg4a&?IsAqI> z|LvRqjyQb3L($wt#kGqX6MUu2{}$HJ-h_-f*!`rW68r6($mC8JLxRJ2CHTnU{o>7rvgdJ$v1y4irwW_D1<8Xv}BMhl$l!qC)txUSvP| z?L&|+9OrHi8*{igIr_K@HUjcB!0G6f%F8D>5M_-)L}2F=)qO?ytTd*ZKlnx=TD?-i zXD{%S1Y1KF(a0q_3+771!1JgKFgg3OR2F|ED5{Hvai>0Y#4G=9eTsbNUvoYgSFpyl zYi`gFn2fE{JiUZw2f{qZjCU=FdG zdDwHxd*%KzgXyLDW z>f1IpfyBW|r>h5rZ&@HVXHS{BVyr=B8mp@P7t0j>>|Ouoy6-Vys@ z>i8F!6k^^Nv7DUyaAe$(V}E&O2%00x6ErISvM7!?{j4Z%(UICl8$gMaMZDO%^h?9* z*GpSZSMD)R1G0S@2O&*KoWbwd-%)~HL4yB)@^+!3xNRU;sdafPRzkZo__lLn_KxrB zNY`E}+lduOWjnD-OAM3r`-jSn!RgcbLc}Vt^=Z}CoE?#hlG=Lld)f`13$LB#wfDpd zGMQhtVO9NYgno$ymOVwCraoO|2H9+8eXiMN9);QOHFwM`&R z{&Tp_9_KxiGM$AW*JoFBv~JJ0!F^}KJw?*fkniMSH9~sI|M4ZZ+m8Rv@iH&l9~u~p z>;)>oio23t`45Eg4`)cy()HBO8+yygBCGJb-Ly$bV3*T-aiSG1zj?rV;rLU@r7k7* z|G;E{ZZ64ratx9Zz^0reXJoA5fIh&)qkD7)v@kYFcaSWM3J)kR!61|UMR|dq@!JDa z(1iBsjW6JJl*Vz@ipaoJi5oM{&Vm{6F@Tdd&+-A zVwXaF&>z&l&>O~GiRc%$Xa9eHv8O+TOcidupxqm&KSVNBNiZV**BB5!-veNNGSD90 zEbN2%zq2v59jM(fhj}DHis>#q2xXypi zpKU#Sr^Ems_=eMV$anfP1hf2$AxH61UnHD&CwH@%tN&s`?wjcG!{DTkv(%9W`i@gHi?nhMZph6q(@{ ziWdq>9D;b}_e1^tE2c$G?2Dig$HR*0a@{6%cYx%kIJimo9RR$VUs&)ByJAw5OTznx zzyFMb?;vaB3y%zU2SZMDZ5Hgo0*z-9K(2>21=okbE#IrcP=Qk)eDnY9EDD}kBed5C z1sXIg;IaWsK_jI$@Dq<1p!&)tpxE|W?_c=P2WfWjP218$v}%Up&)`M@bP0uWA~LDE zRd4tOJLR2ZSTlxn$3J|j$5h^Bq-jp8m3%eSHa;9$<9~3VQ$}JT zkAuHj>ec+AeP(FjDe~!m_8M0W)7akUrO^8A#D6x>Z|_D68(aR?da)~Q%!vB8Z~A8! zgzj6|c{X%(FFyZgQ=8uKN&6@iTbIewEVw_xJvtD*_wwTmq$2YuCxI z?Y-@L`r5@;JPr0vVtcRrOFyGrT8wIZR~7x6kEs5or~JQr7!;q>Z^ZxE64Ta9HBt?y zZQKud0v@ht?B`)6oey7H-XC!JZ=PcQ75l`K-@)mi+b~EHbnpzb3zqdwE*^CK@0~-t zo-`gGe9%2;@%0^E>>p>LkEZ^2{4WCki@^UP@V^NBF9QFI!2crf|A`2=f!{pl#s^SQ zQGr9~DCnpF1{%0-@Jq_z7mon~B4SQ_LXun5r^GJll5){<^YWb)cMq-tzmbdueo+|( z3s}?hCkf&PSQ%&ey}d^$EGmv1ZTEdMd2W7=c~Y<;z9|{+a(WXbWsCjPNFf(K7rsd9 zEi^i1Ow+hwDRf=ww_~!AvN8%xZpX^(-dnj=oVA~NY^ro3DAzxg_t`3+t9P(%K<(u5 z@gcPG(j`AKR$N0sRq2y80YM{wPYLOXN>;qA$#*r3S(^ZZ1Gm4h(j896I|6-$5luB> zHDYVg-Z&u=CsS=h$Ot@wXyX~Q=udGz+0Y*85-(ex*6J&8eJW&$z0zoKEjP@h+Xs`s zUpqf1kW(;E&VgM_WtHW(LBhnTKwu)m=W`;SwuS zBO_2ZxD;^P+G9ZTi!ZvdEXPEMbjOr#mOwCyhNx4Ggf!ETQMbBPoGO(@SERR+#wUdt zBQj@Ksjr;NwxuTQ(cT{39!os#82&g)%RdD)obX*=CpQ98UX z=h#a!_o%K|hoLo}5ZC(oO9L$mT?f?_8V~Z&XhDS$03QuiR5kxz{(%d{M=W%4ZD*kb z1O&(n4PK@E#*J7g3$#$g7u9Xb4&7IAS`qWZ1!U|t7WRh?{EI|07Lc)(4 zh@Yu}zIix)diUYSg+R=|K_NcX#vKdAgDO+~wfe#?FvY{cv=d{0BryFZ#;NsrnYih| z6W#0&@~sccu0qwKX1}pjEhKxZbpr}`eKbH4_9IS0!X}VU%j?0n z-2u;--5qeQ?SKnCeES1lq^^8g9**~Khi98Nng7z{dIJxCCOrK0U3Kky;7ywST@sat zp4&dU5unEG7411~$l4x7+G0~wbAA(u1A$0m-_5X~%7K@!+8|<1<>61_-|(lCG=QVR z+nWjr6`Zugci^ZHi9KDFb^e@OXYq3JCcqy3b>`~r6OXMr23|4tUaot85V5=_#!=V~ z)h1ws6*O;u=d0eKnV_+=eEHYf*VN_SWPJBkc#KnD?(KId*70{Jlryo;vR=m~q)TSD>=6(Hg z^VzejeZ^Ou!^|q5TR2irD=U$NHjI$C39fS8%O4dxWcYK8fPf-7AW~1SVlZ#5<;9Eh z&MosMwoGr@CwMR)7RFZySTsrCNZ@6}0S(0By(R(#9+Vf5WBOtzrcsEPHbXIOuN#^i zVh%8?RD7&YN41OC5cQ5%$R?!u8k4{M1`IOE7V-+ z#Q93TDAoN5rQJ%XYx2*~J|o`aA2Nb08{Zg?51r4Ht>18IlCX^`)^?hgk62poSeN2d z<(AlyKYP*>Y1`}-^eSyOWQaBY!;?!*w-6HO50gL$dSoBh4+hy13Lhni&rncK+E4(2-= z7Wd8^iZ z=^h8|*RM{`H5es<*hA>RR>Eht6OK9uCS0SdcPHVQNC`inf{_xwSk#20@JJ_(hl@=1 zUcR&1I#iqG*6DB~k<@Iba9_}exFBsW$VxoIPjTNWgk*$SZHLJ~|>nBj^=7R=?Kw&^na+Rh|T zv*Fx3m#v`UUtT|5{l*1BT<3D;J{8`W4Pen&@3JmRVV``?Xp|tpmL-8zBaK8~WZv@v zZANV>MA%e{k$S492%nl?TR6T6L^R#{0oj#em|Zb50DW0IHt5Uvc6?cXALPq+>4kT)C9K^V030K2}qQ4US6H^@G0+e`@-4&x3}23xtp3+FP7DdB}9+j5p8<@aX=pG5!^$O5v;w#6%~D6x$Y9(-^RHlJOx@d6NLXqwro<=E`hhB zZ$G+U{jlArTg_Wq_FU(SI>C`b3gHRJn`=Pc{8|*~&5ID;{G#>qY?wFa+wILYOg{7G zoz*-};;4-?0Il*t2Dr*CSNsQQ1y^|vS|!&e!1{-2g)OtJ6kKKlF>IOm;4)ipZ34wP zbE!6)z_H9BD7esLj~WQtKxTZ;V+r(!$~sY4PP6`UPC3!0sj`(v!_O+mej~O7>*D-!;8T8+8}HPltqaj1(~LAAiZ9D`i+HXep=6lKil1dgQcA zf-}Um$ojHNg>&(JRP3^y9>6K|S;1}!g?oQfu(d4)TU)(;h%B}!6tC!RMdO!oBR5UP zXGYdzj1T<;!*9M{AE^DD=oV;F;I?%AVrfvF0@+=RoxK5l%(r9mN1#3rscuhHs&T#f z^z7|fkq)TqE6xDBz7vS9FJ*}Y5+ zudOyWC<5;h5eS9#y=Y+HiyQ%OC<5E6sC`P9Zt~m$*(@ZAzs;!rzKmia2Y?ozmVk0s z0Ei%*at_RwfqjkYj=0%@(hnE60LHl}i1XAP_?~a?M?m$FzwNDSz-A<*CE^&gI|MeK zUSQ)H1~#5&T|jUB^6E~NpWO1+CA4tG*sAg!Z;iZuu&F_8AHZP+i|UDATd-<|!zvJh z6)U)z&_|FmMvfHJoy`Q~LA@cXu??$S{Ad-sc&JXox1y>K?TnZiq;Fdd1gv(~NfmNb z!F`=QumYo6n9KPY>K2z^QPlzsRk6apsN%q)3T_X{F`1Lr`!KMd)8 zl-26>`c(bCWs70`@onQJQUkKaevCoUcsYRc=9*g}&ZA_!ORP6h0b;hyIcVF!TTl_& z_}T+I7(IdkDhpC9rRCo^Asl1O&Ggl43~ZzktAJr68I_EX4z?e(^sKS;YVoHSK}u43 zvR*Rz<$1l3*1LSz*T!YstI%lE}cyn#NijhL9h*c>a zpCjVApZz1q@it}+!fbTCIo~i6nHY7`6V0gy!0WWKnd=975V2q63&!d#V$ON}-d>%X zZKFTYMo}?wdE(CDk41D0oZ_qCCS3YX-Aw(Ec>2AY@E%#zMn6JE-^J7+x)4sqH^Ln#`9yC(Y1Qt^si25EQgV@QA$qP zIgO%NFfQ`jjQy04q&WGser*#7Fz{l!N|iPsktn*Fn)KY)?~6*_CZMx%wAALqrt@6DUh~DFw4w)LyIj#%wK%LS}@c9EBG) zJ~m#(5e~2+FfU@a5H|a4c$Qu-Lj4(2VTfHY;V(S;nUy}u{;Ot9wW&sO*Q9%M^9MU@ zqP?pX6k|WNewp>E6FYR_Ntmu&U;#$)Eg9FKJn{f6j}e)*&o-NBovx-GU&O;LOmNk@w)aU&{AmJA@NJPfr}r0>TV6_;~q6B*Wx%l z;)}c5RefP{JuNu0`ddk*%9m<3_bR}B6Ci)qp{m-^Upwtdpz@1--Z{QRt1H-Qy(rvG zqd~aC%GgGrhJ-?u!P~&vC;ip0cAWbdG9T=pdIn1mw8-0A`gRz9`pDEsm*1NsTgE0W zDB46)5jk~yoU4q&fkD`qT|G~vz>g=}q7?Vj1@pS3tZ*%PiU~5GSem3Khl621XG<5E~?CU$sb3GK+gKqEMXF0O}9$jPOgPfeq8E9t`_BA!du9%AQp^+UJ|zFr`< zalaQF`lRYL;=_x>qQJ6oLrJc1%TT$!I?7z&=^h48zp=Q^NLD_-hO-h&KS=>V9pwv` zA%QM`>4g52)8ixeBkpC@2fG{T(x1qm(PQ$AZVtL!OFtJhVl4mYy*VJl`-`%thp%I- ztl#0{J7O0DztUv!+JzQ#`S4h>7h$)-FV5%!hukUAZWLgVQfMx5**C3Rrz;{c7P^nd zio(>NFs6Nv&|4s`dr3$|hwPWCVVNRE9@^03uha2imfCmX>u*niKT>EFC}JLK705oV zYN0=`_(9lB(j6cL9FHcwrKz&M`LVWpLFCwB_Cp%6Oj%jz$u@VQaf~#%)-hBg|{UPnN*Z*bYKxGZ}!&1XPI3I~Ojn-!jhOX2LW;NKv9M#3F7oDM> zI)ln~@6gNK0!w;$C;$Z`K1$l%4-9OGP;_r+;Ur7Js%<(F`0JjHk#Ax2q1}|4O6h+nufN`#7TB$!~5%!nj zEFcM`F06m@{dwhMh~x!2XoQX+jZLlDyUx)2;)h`1w{9^!e{1`OGZZ>PqZ1;K^-5-$5%R0XAp5f#}`V`aR;)v>bA5_hNbp+pz}@CEHGM_|B2 ze&zRn^+#nztkm?PQvRW!|KL;@p_m0S`ZPf%9?9#?cKC=X@5drAj9hnn!wto6; zj#p`8agYAlMA(4uCnUGQ*wQG%RUa;VE-JItw$l4&3q16ys;J6k!Ywb+>G5p^@+TZq zD!E!Fxv!@}6_va0bLS}FM;)m1F)1ta#=3Y%ziPBZ`?)*a`5P;$*E^p091g0^{aT`b zmVi$CA~`>)VllYLlkEkyRAhtGp*Q#|otjN;3Js1uvhtZ+V*`LZv?~2QDT+Rw%CgWu znJY(|2Ql|OJ4^hk%K5ax~>3L+{dn}M^em%vR=?`(L@p#c{^2a=c zDherIDINW+3(?+-&B3TP9Cv?peRLc@YVDV7QQLqiO2YT%b^9=!8C~oolo| z1Sud1L!wrzL?pREK;bI{L_A|Gz}SF@<#RvHynkcHCLmf9y3ju(m}caQ5D2a#n6vWo z1CmQ*dy)ZPc~AT!7lR;{;c`S-!jn;t(78P*gw!)%x?c2+ULt`Z!MmP&=cC=v$WUb~ zP)m~I4IbWIdX_GO_*EU%R-L2&K&-i8*1pF0B*Wa;l@cF%^dXVsH z#T}qN<)*43+?{4aIj5i%kn6C~J#UA<6$M=praMSATMvcF zQ5ge*>+HL~(kEteH6oSVmUbfc3yE^^RZvA+d<>_`5|Z=8)3%r5HJiq32q$W zs#Y)@vjf^kNH!9xSLEzLLJrj{=+89JZI)YBTzK0HTpi)+aAT`1VDUntX4326gtkR9 zcw02V(UGC~4dKyX(4_3OCG@7sD6)+|vk7?Az(mS;eP;;|w*BgUabZR_Iz)C`2?v$G z4cV*-my8+_iYhyfF_>-wm|oIxo4`&Mz`v>hCMmm!+-8rY?5v?2sf6Kis(S^C6F&R& z%e<9X#@lPRTow{Q1N*^AYCPdpQWbzJ=4i1?Ag>~q3bY2*iwMVXFq~lSMXa>+$n`6M zT3XH*+D|a)tk>(Dq_o|o#9s@rb`#(pEbS1W;zw8}K=TQ?HAGVas|}BvRz8uwm`)+K z!V=6O!WPCx>;6wV-p?EHVwwWDhOf!8q+jdiV@%SQmA)4P@Q!X-p{A+iAqpoox{tLW zZ!JpC^zEbjqy@+e6+_*{mh!{s9*cB&{wl)=FWZOZhg0fL*2qGBl+V!G`=1{BC3$j) z>Ul!w`sa-!=Uo@)HUU)=-yN?5kH=WI-#>LL6s)e= z?LNW^zIvDwJO??!NT!Jx( z^eEKTLqO{1{S?mSpngHNPERygF<(6;~YCZ5LI# zl09s11JVj4$T(&NmGyg86?M9PO}~el9(Zv$i*Th>FbiUE{h$E1hZSd`#&Qo>hbq3t zYyv+Nv~^E}ozWY5rl5WC#SjsnBgLcIImKaPrQ!GH#4ffQ!YxhGT-D&}ELwVa6JC9Z z^EoMva)CBO6_Zmp%;Ryx`q@r0?vP8;v_qML{WBF%-{mU;ew=E%SgIa2BB8C&(uLkekFvuD5TR8)54) zp(X3QFm5~`I?Bo5NFJ^8E6X+flSotlM>zwsYM=2@H(fRwwYZ*C-kz83_zn>$>ejgV zszEH$Lai^&Xp)Yc$J@YUnN7^B5D#Zloe`d?Njdq=%|Xhd;73Kml#CRcd#L0jR{EJA zMb9|3M(us(E2qoy0%e$IEoS?fX;|7iwa8yKym1{5H#Q(sW>FWh`5bDyUPwsr?6jOG zR{A-nv@)U*LeUqJBjn+if4R}wMI2tpA0zAFj(w~?d@o^`kR%S{=cyA*pEy0P-05T1 zoXMJ+qo->;s;Wov@a6Mpo%N*osD&TT7j#c7`T!l06MCo|;;V)eJT{UQWN~frSxGn2 zo@041t4w34$YpCp2rvP6uO;0c;!k4jr<0S6^VVQMxg|l^5`KQbbk?3c-_3aNgiDfb zgu&Em+xbI5k&YTambvGY}V z3Tz2^x{vGm8Ahg>mz^vv?c72yvP?`?tg7|R1*3mBg@LK5c?r{An`L6W=@$R|YqX2q z6jv6q%a@bJ+E924u*VvoVH`Zt1>E7ds~sOA=W|Pks1GNd$H6TrNyMFc0iKKcVm)#X zBR-EmV@%U-TCz0-r}HiAW0st=XPPtHo~eIPq0vY!9SD$RmFtatXKqI3KsT6^2NKIizCrj;4c%wx9rEP|idJ3=IujE&yNE9e4 zRveE|4KF?$(fRT0>h^L`z+4e3)m9Nn+$TF}X(@KH#}S-6SJluv^rM2h)|XpKCVTxJ z%b<6@6>3D9pJB}7o%ucK5A!WApNVIk9>;)Ia`!Y4_NT*%EVYKKorp2+XzTshWMfZ4 zGp?UFmIPb8VNC4a!MPEGQ#t>&)i1CN*(&swU+awyR3fpx4NObcORChP#XwN(+lC?% zfD*~GgOvq-z2j}VHPzoWG`NPUG+X`FBbtm|(d@%fv0*n6eB>lHg9y9hk|)+)f=MDY zY4tL_Y|&lO!gE#wz9{y#&h91~$IRG7OtaJHSpEnip3Xgoh#pT>;njiN0!a#5+}(9U zlqlmgd#A%@`Sit7j`i+)%Z>8$?reh~yS{qWx-8XFi`~+{p3%3g46sic`qN+%Uvw*I zJr&4ZoqW#}U$$R>_fV;+Uw(t=E83`T&b7-Y%!8UPhAEvMn>GDv-2a$ zK%{S3IS&P{&~KODv9`x0|Q=51!ejIlNTKd(Z( zSJ7|`b%Ge$6Yf8J9#`+8Tm7Q@-jwbk4X`drwov+;C&(RG^FNYoe@3V=lj|*}XU7;4 z9s@(0?o%8Vw(cFl^9Ea5jr?-R+9l+N!x(FLLqVYKiK_4E?)!qcid(e|X7|SyocqWj zINR)nvmu;W5paI=P3NWwH$A_Idu+2?W2zLj2aS@|-8&s?p){ z7sf$-0nNzK&Vf@g;%V3W|LW6lbV6y?jbCA+Q1(h(ISvLk3AtJ#HKzDjs%uXh=)41e zK`13uP-04q3t1~~7Z>wTB(RJQqxAX(`aTUjL_;5HX4(C*;7oSLi;|Kj4{bo*9B;gx zTM8$u6}{9LS?mjoslKBwY*DBWC)knbyFsX+=w(#N`bWOAkcHzUR9%db@A6+T!7tYeDqf6_J& z>ctpMi?{45J|+@;I6K%W96?SB5IL3aAt$;3xXi(21exh^&S9!#zs{|G<8Mlwp3a#} zm5z`+D^T+KMoRK!F9s)*u;urr8KVTrfDEpN&^&of1FnX_94oPt>CeaEa?g;uE%)Z> zJ8}={AJJp~Yd%7n*KW$q-dkjfC4MO-$%g%8^8uy&TB6>f$J;NUrhVZ zd=u8-s9>-p6Y6zhSkx?1~%ViaI&;tqX&t$i5RYM|;?5YxR5C34J#L z2$kv<@M`)nDT02AoNzpDUp2T3y<(s-+u|NA;9%|{fSI5z^nxaczc5asSJP9?zK%A- zHLdHW6;kfq6)njYSUlj0y}Kxy5mkS1?p?=2@185E0PIHwQ}ac}ONqrXF+Us%tDMct z$WbAgzHktqjPK!-P&l6?2EyDk5(0+R2ro>Z;W!nne>Iy_@pY~JRAiWrZ>ir;-i(~# zNGr^g1N3l9;kS^m<*2dtQZX%{xG&|uqaE?R{$N-aWRacXzPzirZDo95j*$*-m(yv> z7{RW@=$u;Ldr&z<7G*^bc(&a>xFIO-fM>V z&~zLAf1!3{Y2iJ{ff4g;I2|E)oV_R3OrdwBAbC01lu@*?z{p~2!AMOPybIYs>GEx@*e;9TOnPMz z_2Qu;yyCyqUT0*>oh}lf%-a$k{Q-7MsK(%fWigfHJLrU|$iR);y*)OiwZ2n~yv|I& znU-{n*B~rIiEIg+9A@;Dqs=^|Tb>8TDi(t?@~=>Hjb~&%s=%%fX&`axQJ>cO@ewl4 zVdc~_`92_0dt zZ=9DK?;lOE3y?ocqMLFdY>9W*%`wo;0mwJQS{Y$`Let>f1vLWu6xPX@9)|uYw-{3D zxC$cG2+!lgJ(BP)bt4Yl8%cI@SOK(+|TR;9C5AGL*=deGQ5Qhyos#^n|^gEgb)1f^_J zLsuzGqs{Y8Ig0aj+?9TGeYFhxv}l!hU!Ok1#3@jHBlR$a>eba`@-@}4Yl>LScdw-C zf98EaQxTx`M$%^!_;S0j(P&!oZI(7)AKt6x&%U1g9hdU%lo$?Coz)u4>rQ9?dgDrX zN&vX^6clS5p&D68S{HMo^f>tgmNNwD%8RQ-pQ>38&(FS(AH8MwY&&TudGw<8_mj} zW#eR@XFk8La#tH~mccZKB1;fuDfN!u&89Jxwme-j7n9_T{I*u`Dp&TKugEz2-{h*&vxlx9Wz+Z6G9eZ0jcLv>1#~=0%9KSiQd5#x~DCEcX zzh$bKv()vn_Tg3=U`-M6u5|&?6oSYLgmq@?JK7G+fto)w(a_bL3P697Q zhi1LzJwb?DA$N6rD7)gfE4|eX_{<}Ro?j6Oaq*ia5|fhr)gpZR;o47z)nlI+-2MH2 zMyGgX(X|IXeM*duMLd)E{G6D_yl`=lf!z6Ey$i=zPCnFkR%9VPi7uL*#3eXWoMC*$r3-fF_eOP7 ztV8Y2a^1Rwo^(SxD5Sbml1up;8QN@^?WI$eW$!&BTACIP~=e&j;Z% zUzpnO=PZoDBlzI9n1g7oW17cHW;u;;DzA2FJ02yW2`%d5Dvkc>tVytO#cEHB7{5EAuN;A8pVftz=82pgCWI(LigFDNeDYuL6$8K=82}#tl z(`SpGpHWJH&xKsh7sq!Fw`ob`(G|nT4>cHN)`x*i4#zbz826$rTC4cxN($Z|e0QL429Sl%^<6;yph&NlT z0WirJy_Q%rg0p(Es`2gZ1Q$y*m1Tz)%t-seODAPmEsv066$@>a|T`S z%v$dvX>u0V#$nVP!+G~!2KPXt{2uWCCZ%yPr~+vpuYB~4iCH>>$y+Oyp8o4itWn-) z>)xMCON34pZv=_jFQz0bJjz*U?!5t)>sY*e3Yr{<3n`~!DC5^tDpJKKWq9P3ulWYO z;tOD{QBY~qY`>ke(7@dOgbCYD`AkXod0FhR@BUzBSF>eHlVCL^ zxUOg>amGD!!QLNrnpNey^3v06dG6%qY>ab8Zzfk#%F=EuCCMfkHf#bKx7rm_j=9P% zCq_^$%6Q7j%2F?wDd3x53+p7AGFJ#^{y>sWU7jRRmMs^Y5K5;~Y~=fm>m-4K@=mPVk=<|2pR%1qksV;g9D(p6KsYcBD7%?a0&>B z3J55mv;)|vprAw%1e{tC5pf>c0p(kp?sM-w=f3xQ-t*pb{&>IVD}46esoJ}0Rjui_ zR+STXCmtb&o3pDkA`lQFz#p0zL=H%vN~KXL@-#UbU0$B9q&`JSQBg@-mB~<_IgQPl zIc>%aJtK~(p1~Z088gfl&6+dMYQcg9Y}3VdKUv#x<}a|qJ0Zx^=}HPpT2rQIS?SNv zxB92c#3iImBMIa%52_0Mz6O&?yZZCmf z_85&$^N(3IS4!g54iT%^PejuKmuU!-<~J$OpFP#!2Roa z@^kvB5~LMErSSl z(0>MWtb!2VnD;-3B?NC;9QueeUthc! zyzX0as20N?<^C^+38)Am99Ll>WQw6Az?-G1>GS~nH(un9lzrIL{^#S(_hXX}|FsLr zk!8Z;vI3-t3qTcw3Faf!5@_()ll`f${2n**9OHBO1X$Y{Q*F8bwP7Z|5+G43DlgIf zs|!Jf3J4a)#DxNFetvj)kd(n>AQ(&T@LszstV#L)>)n6urldtNkth)vG+&=m4pY{LD)lw*v1gKDs^Dufhk;=tCEhl2B zn2AV_RW42E3Q|9A+TVlW^@xIItXp)NBkCwc8~5l-`CO28~WwIu;PwqC3QnCpx8PG$!kA z9(jG6#fPs5JQ|XlV&iOnmlNH3%J9W65#0Ye0Rm=PW^!ITwOWP8R4K@i(6}HQd31Sd z081O~VF)s2hv+|-jXuv|LIV^g+VJ#Tin9kJEig)577gpjP{I3EG;CmvgyvbK^CQii@}VIdBj5r+d686vfK!zLhF#DvoIo2 z!Xz@qWF$p2SQUse5!|pc+^E~(CXoqbVIcMhu}lbD5Mb~fNDP%MV-^MMshGMtLZrm# z2#K;Qq@gG-5n*6m5jh=M8uKvV_@FgH5+>R zr;B>Y5yQ-4Hr=n?vpejOqpm=-uTMBlnKirdkA z={c~vdpJ7Pdh5G?dQgPaQ!R^v8ENS}om*O%Wq>9|q@I=%nYh0qa=7%!WVXc1Zm~`j zXf*g;7Lvl6Zg^Ib%T3EHwpdr97ZItm_b0|bKQOS_gf0a6wiG7cSLZkqiwUmz>60#+ zNV!ukAwFf9oUqpo`0%l-00YT0h9m-pl%_2lRkl29=~x!5S(CP#oPXwV&ZF3%4A48>a{W=OJHGP@QO-;y8fg`AQnpru{qS^X^l4% zP8m=!GK&jhOXCv+hgNRW=7=)fXwj`w;fYd}I<0?t(sT!B4=u1`xsL28XO#gF2u_*%Yn6^g^tH9FdEG3N03*eg(|Fr| zrbs3OB(Bt(XwIc@n%!%1l;cxObHi$nQIAWmm7&N=GMlN7_Y_%)w9@ID?!3HhLgiW_ zG7GOH=FQjT4XGccX zyE<1@gc+-Mp$J_J9gD=^C0;6D{FFlBC+8n$ z&>S(SWtPhwwh^1;!YA4sr6N?0rm>*>~=N(|js2jdiHVbgiTNaqekR2{$#u6h5N|iuiWTBc{a! zc0RF~g&0YQLd=uy+HdM*n7O|yufl@}wgxR2s)Zr`4~3Y)L^J~H&sI7YPc?#*1+*_I z0~yarW>(m_h1*#Y^2zFzdG=&*9!w0O0%d~BiAcYs17dByNse-M0J8*!RxTu53D&aY z0Z7UeeCq;*Y;Q;XY43WObqF97oh=1VHZos1F#>&NJ# z4g|}eOiar_Y#Iw}Z5n3t{B#Gw11Uir@(Ad!$=l}P|&!sNkIU{adAomChPFa zu7wud0N}Kp1T+SM10q(DDFFwlRAkH%RS+69?L5T8`t*M9P!@JPhD*}tu|Ni^r&o8A zIdl;cV%o+C;hHjID<`_+h+$`nvztHyoVPEk(dGWfWW=v)6v^A;WMDW6cpt7}f5S0dPRm+QGm&l(iBYW<=hnwKCNAOVdLUTDw*Rx+%MLmr#l+N`Qtm z?xd5IQx~yIiIQ?Z=z~J>(|V6hb`O`o)&ZWVeGyp{WmLi?19}5t|FclY?u8r%U5LrJ zWGWX}QCesTl01D%M7vOSq|n-nOugoSv@MyTtfVOC0%j@?q>FI;Rc~)LO5-c3antzf ze_~a_@EXv2Sq`S*h?r8OlJ_{|uQ71R`typFS!8LStj(h40iG9#mH#)HRHInN*u^`FDM6{)d@c(e=i*|oo{caZ z?3(zHD}0^3Ty&M$OcA1Sy&*ymCK-0-F=Q!1j!2f5v{~4}Unff!+r@NeW+SzD#8v?@ zz2jt3jvVyuO7k7vkszO22HOkdU8Z6RySzPESrR}ea6MIu{k9In?Ecq6?F%P}cp8o@ z4@xRG7{m(vCbCn&FY%Ayz>dm>cAao~2Gl5;4M3T5t;ey>6~ zr)gufik^thbjk=JuN|pvMid)uK3kQ=lzA%_+4(xL$UH9ew?cO5u{LLIh^4R`(WM}9 z!m?jLkpGuLlQo`36qcpE+FBYgg{%ewN9Q843H}Z&W``T@g{iqzRbnLsXMpt4ukMnO zIBQ|KMRb~5{6dM2Nf*yDCbSDpr#p~QMXPr>ho|7eyDK6b;S#l2mLi50i((1A5oobz zkh-LtWo#@(%hYSsT@Ies2j~bkE|R5B2x}pg1<&kQCmwmLQUs~ zo0O-`-kMDTXv`pSHRT*AWa~I<2g9sstw+{yNY0&ws9ze#qIMBASx9!gG++}5EIWr- zY)rPGi=;$GDojyybiW@=%$V)Q<@42ZS_1e&*|DGgj#VpU=PE@Era+Bs%nDX!1rwDi z0f>y4WFn)S;z>|Rrl=t;Y5{PJoK~QWG<#ZjU^DnUu1JQ7aFDBMt;p2?2;N)2#!1U45K*px90oN* zSkcLNj7^ROm)?L$b14F+kxmzuvw^XHC8aV!z%-D1~Qychk!-9p@FmE-fksPL4=qs&N4b;ygw6 z+Efpc0j{;okSnKVfxcAG;w_X8bfr+Q#mRBwC^lLa^mukMaX*ztk0)CwJ#h%f$DpJM zi2H#K(0%;p#^*`A6`;WgJUF|&jM~W@juYa*j?X3VJoi_Pit)GTaJH!k0&!3!jmgDH z52qHS=$k;k35+9Tw#a@2hDJCioD!V;_!+Ble*hPf zX{gM-h+@rDHRPIeL)}a$pib;F$6Y% zeM%qL7t&(6B8?x-=(naY=1vfzheE{QVReIiiEWJLfrev!#GfQ&>Qc`t_}Ufj2m<@AUJF*mDiV!ea@)flx)_ksmKJ>8qBr6zfBUo~feESiG zjBvzY;XDlJYQAzy3O5)5S3&`^;}n=MCs;0Y7ip*YPS465Sjlj!7RJc(mWu;bB%G6=(! zil_jT74y0+l$dF5B28**&U6AMl7is`xB>)`^sT)Nfv8F980}fF7xWYt`*j8v>8_Ba zrtOPRH3-&TD5==ztcBfrF@Hf%UbHM19pwsJP`?`@bA-hG##DD=u_Xi@T!LHN%XUb4 zQKZB?MmZr~Sdm#ww%mG)g%oZ^i@>zOuyn)+tj7^S)Hb%>xZr0oamMiX_I?P2Nuws_hI zJ^-wOl!;9qBbhYjAYLSN7Z)``{ef%IX-at=N*F?Ao;(IYF;A++vKDB+FS48i z`Iq9j-heAFyNYJTHx;SuFVL*@DiL4P9lULG!~aTJRv~AK*g`m+K1B!!2O&l)vKA4i zwOES~fdDb^>vk~L;8M8dn6W2M1Q`MQb7NRn>;T?B6yh;B<}w-YQae)|IifO-7q`Vy zpk*QrnNACl9YOtyIsmGQgD^*gy9o|A8oug)PB9dH)M8VO|CELs9T5$)3(xE+@4qpu zzB1Lq{-pb8*b^)DW-SY);)RmwcAZ$i6mTFScxWR{4n10`WdWv(G1Y|ut3xa=p#(UV z`w1lFY)CD&c4^)|)B^8&Tj)siye zKroSQ&6aaIs!thJ)Z$vN4FRyO#bJnK-VTKj`#~quzE9(V^`u~)eD(a$Qf8SYY$(h~ zSdldg8kLRtZ1DCJW)gr7M_I13T{$=gY91gga=YbIm_OWd1#(n# zF3?$+W*6(&P32MxB(Py&;SJ`1McC}vzH*oTQKw-?*{@qK?Q-4VsBIa?4bESP#RnDf z;sfHiD^uN3Jbz&}oGK!lc!)`ce5HJD8p9q#Bv~hrL+7hwe7Zo*iEQb3yz4;Ijb+jJ zI^e|^xFv;jC*<_qgxc&}Cmj4JN-FZerxw~Zw0IP;Wg8qv9ME0534y*sn-k9V)>6X} zD56+02`WTlae#xqhxW?wWxF^!o?z+X?3Se|ra1S3KnBF|)^3}Y!yIuMR*fhC|5}WT z7B2)l>O|D!(PO|u5pK#r41vNG#AJ-l6p2w>&y^~tM;%(| zClcGlTS#)^IPP-Nv};Hc6bEUWq}~nEG08Q|Nvou=^U4Wp^HO>C$@o~pBsMpIFVJ)& zG;}cHSB8wl@m7q$+NBhlbhqZ|1W)VMD9LLN&Kp(*dKodIg{eS`*s~sUYz6Ab?h+#6 zuUgK6O4M!a$<3fM`RLiPo14fB58MJ|3Yi8L=nvv^MIBtoc)8g#r5!58COMP}9FqXn zko4z3teiFN7co0IubhHX*$`ioIVuq4uaI%sG)JTn&Q5b4(2O{!Apw@=RooET$x6Di z14h6!mv|LvxHx31x;PDoo5)-&l{dqR0rq2%!ci+t)wuve)Wtu6i~#x{%R*ktfUUH@M=I>e41&x_&7KZ z@V8*(QmIno5Or%)O_S0>YJ13tgONi~X`u}`5*kqF>+I&pXsr#w$N=>H;{zaIL^Pe_ zyq22OO!ekzkF~20JXUYk%*>FT8Frh_i%V*jb*6PqYmYa9TOpVnq%{c%+;KOen5q^J zrf{$CBqfxJq>vSe?{{-{Rb)NinC*3gH(75CzM(XkQVGt@L(7=zCc@If3QiLWQ>(S9 zwCD;#_wbZm^Y8`i?#PuQG2oqS7R$nmO999i!E-~Razsmuq{*6xd9vffdL?E=>&UY? zCb#Ots4rYN>NW>n7}y->%o~m4h(_W#UQ!Do?%g;-j5&f9O3JO7DvWlP$<7@(F=dd+ z&!DR(?OCwNSPFZWtyhHLpb>%3gcE3X-e7=0T@>?+)w2P4R$vy6U}o42M=fRL!<$xy zduXmasy`y^xYdocInk+PYFMf!nTtpLTy`FY2)<67Npyf)nxjswdDFFzT8H|Uq_Az& zwvzkHhg3^^vzJvULfj?v(BX5!$rNhMX?^0f?iKx9PB@ENU0#r^+W!nE6i_kHnXA5G zGyo4xr|GfrIyF0_#wC|QQWoD0Vj(RPZw3Rhg?IhJ*$uKTwk$T>=0KkvCw}D`@1c11 zo^7y+2oa)+iE2@4J{Qp(Q&9zoJgB91uqJP9e4HK3O>Nt>_9;mVlm8S)ssQe)&NqZM zDH0pC*ia;EK&YxHhqyn085cov?m>+zJi^WcI61fli{xvbegDBkWGppC@;?nBJbuJ+ zHh$s{H|SW2qaB`a(&8v-djdWIhcU&uC){S*jiah{?IR9FJxED8-c*Hbm%^n$)svb z{qF!F$2;ngLxj>HSMbin1&&PNJ6li;|rlvMS_ek5;y~@L; ze-&tTNyi)hZ0q#)_Wn5o+JAB>to*A$>kK`-;myo0LCx4ni-(pTspT!qkt|LvLXjI(rK{hynhP$Iw z{q`0HjFv~S{e4zQj;Waid(*FeZR=5XCn!pP+>hnym!*zZ3Tw@nX8py?&V+H$76 zm2=`fd^>jc`m6Qh?Iu>NsCM!wdf++gy6F1`pdH4d)>`eZw5^(}CRy~&BlNqPUIIzk zpL7Pk`(dzORq^2$iQmiJM(u*A5~tnY*{;1a?-}1qs=8R!C5-fNJ!WNC*6V!As;KJX z*_jp%>7QGAlrOT=d%a$w7o@l3pUGL_i?Arwx8FX^>YSH2%-5)QKQuzzMA+&ck>vRSReNtb*ZoM>`!v=MwEzAr?Ah6`f=e+R zrp3e0Lt*-#>C1(O#c$P8H{X&wrvLhboy`-gU4JO7is4m>!~KgpdncK}2a10C`oz*Z z>kBzcn6Pb8%XFshkrsXL6qp~a@{Rm4xeZflt>ixXHx%Wbe7s@c>;%&3KP&23bzHRT zQrE+!1v7dl&|3-1b@3~V)Tn=$oe;=cyyYTWzS8p?CW~{-9hbM9mT~i2{-VFuoS^5w z?8j}tnaQ;KMCW>2+qG4;rL>2cSv**VnJ-jK@1NROiXmj1M6I(T4Rb5L24ZgIFA6fJ z1o|cpt*_AcC_5k9kug61_|shtFDK9*f~EUmL{V`yI>l8zrcmlS_L;t{jRkk(r{FM356NnpY#@a%UBE9j>`aH#n2Lv+p+QXm@IP=C% z=M8oWRa*F|m>m~as%3?NEEKo(8rFdZZ z&J5H>w*8R$Ma_F}x+NW_XT~D6qAxf*|E36DRa099^TQr~o1d8_jC9%*>}}4i1oiZ$ zi))TM@v2Vf2@+jwY{$>Z$NkW4npLDXN=iQ$EvFhj`(Axm>7DP&anBz_nXU4?oqzVj zO{>p8Dh?_&!lM25hsSrMe|u&U7XhJISuZ#Kr_@E!*hioeOMOAR$Ew15*F3R4W_!x; zlvVqk!+)4=p+yniCV@EZ);(p#dd-OE?`36IUHohD9^cw0s%p*{mF@^jm}@oj{O+pd zorJR_|CyQ5K_3$<&Xn5kbZQ&

z7vx`0=^fRkG<9A@Y5-*QbcxJn_#O#OA9=Ayfb zXZx4_zE7bqT4#gHk7+ilPwxC=Osb#ctbg&gcZ@?f>~_i zxQ(J#d4xsU^7TcF=$+HQr`5{!l+3Wx^FLhVb&epjpZ{o~THzu>V9B~(1$0d3y}l3V z2FKK=x#q<2(dL@tK4m^DvP)gRGnQSva{X8Cz4|*hnrzM`99Xd5B=%`8>Fvsjr3ISW zLrvRHoLoD`aM4{g`aJNk`+NRjuYvL_wU<{umH6iL{m_2c?P=)BiOBPqoBIfn>kKlB zQ7);hbm`_D6eB zdk^Hj9s^_a#FnDDzFj{`GJfsgqp8R2e@fHyzu9zmQlY*tzWB*fUM>5JWDDxmdqVOn z-aC+jE0Er^mueF2_S^nv*VkVZJaV|a|H8?Lr!^xxo$cr75Zd~e-dz83o&Gt)Yr)&~ zk69Otn1|heoT9LAR?E=oCiTzq+u!XpAJ`tX)#JMD=YWq7Q@Zymb%THy?AGrn_a7@r zQg}pkSG518VN^0~WZ&PPs?#}DFf@UfbG3nR(iw-KxKV!AXL43V;^3H7>eqa|1oNRz zq^N5K*7bASj{{l4sCoWA_VsF#DzVVaw6oW_?1!Z6`MP_jLt+QP_OZY2NF4~=H>*%J z@{dykXN4*D@9rya9c#FFmh!ZD?uAdq9f~Enqc$7X?VNWzF!1`p{afr-nsx5|aD(2g zFtRRi0$tkwwS0Pqp~oEi9mYEP1@j&m?~Vw2V2>GGKR8E{`Un5S1&4AF@N^^lL2Y0| z<-;dxIrL6n1K@*Idz7S)UG-w_dz1H{yTXnJCCVCmz;G)%pOt@jHwx`^Q@%(@?~Qx; zN&D0qH3?X?9J6`;q>HC}re-EqDTPHUxr`>`F0F0Hr3{Hx(dStn3PT^`6nqzJ-?{G0 zyC~UH(X!E6@ST(CzuUpzKXLVkq1{f+pEBhe zwyY0-`G@_RjT(nqN&11UY4cZhcov)AX(m1pCLRrOoYV8k{GRo0m$Ol{v+GYDXT;ol zvVV(z;PZQ&V7rYAVV_M&vkXnf0_HXEkUVK zjl8}+*6P6Px5ZDu!9K*=BKwv;9EgHkPR8Da%KnM57cKJBt+3DFxNxgM0szvd1;ebZ%E1| z8^y89hWo3$U!;#uI))m1;9P@n5zo{`(l+Tm=$n#0o4SnV3L-slWb{4MwQA~hzYY54 z&z2pJ2^#F*zEgZ&vZp%C*(c{MNh6BA&&>5_WpUr>nBSzEE}%0?H!ETl2Bw@V$iDnk z{nfF=ie`tPM)lbNtetMW)0aj!E^f5;ufF%IXyE4w)Y4*DVZ*dhiMq36J{J)dQ%Ax~ zya}_~>T=!6D{EKgwvY=oDKD=Vir*0yPvI=SaJi3tD+eUdU9}|UmoxjHWhy}A5v8k#uB6n~aJPK!+IS?p749Ks-K+x5VHvKVR)v0sh0Q=kNnosWX4co(4 zUiXOD*BpB?H0fmhceBN5rUBh&%3m6EzqlH|tM<_@yRAysMUO`nwy5pBeby)5+ApYS zqf^h*zbGjB!CD;_qA!=MJSvRV@dENA>GNyT56#}c%PCXm2NA==^ zDZd3(zb{-g9#QL6WBA$Bd7P@}Q+R5rn|8}gLF!g=R_x3JN%z=Qa#yt~^%Bn!EE&D5 znDw=cM73*C?gzWi>(16;rw%NwUSDA?Zne&NzP#ZR{~S@bpP&c>gM)&({bh#!BI2A`gNasrtvyb~&||1{L= zTyK?KmF2p`emrMQ>j;oXGsLFpld|jA^4vJ*%5t&&cFu{4u)%lC z#xqX__)&S|xVhmw+dPhZZ2QydXOu6O&6rh!x+cH!kcKNu7VN#M>glZW{kl1672q&2O)z0ckSgF8oP~hi(@~##xSva*dHgfqdj)@73 z`-6&LiJG>=#Jtoh*|=`grk4$+G{vUWAokc|X5eGN{YyE&e9Af#pY&0;`reh8d!`RP zHmEfx?JKyKn3FHsbF8iR7lZ1c<-cvJzPGA%$BFxmF$-s&pP~2ZNoPXkch7O-w=q7vCN1d;G3g-I=+$FqT;p?$QEi=8MGt%$zM^9Nnkfanc<;=}i2fyOK z1+#FcCoJgNc;&6=HpDsU z!p*gp1D>7>efjaDiO&JMrg-(QQId6YRL!q%@eW!kOuQL2cLFWWn0ctpcl;qJ!nKwp z{UWJ+r9yq%j|UKL?fU~9ctnE!VGE6VSIg4n(Xp0ChH_kUu&HO@dLsK}u{(XmsQ-Z` zhZgSnUl+#w3^)j#zo;Ld3MRcW5N7Yu&}TA%1Z}TBQjCI@2bsUW{QYfpNJFxZyr22T z>Wzs(=0VGyG}qs#3<|Y-XW<=4q@u5RdXsQy=;+VK`m}Ie>G<4rLejhX8C%d`BFHxp zG)SthUS(Hx95cEpzqs_*K?_b(Tz@rZGo}0S?1s`K1{x0O&F#JEW@d>MK2eHx+e7!| z44gSf4DyMZVt1y{>3THf!z}aKa|f2k)S9mwF?xQIaV4Snjp>u*clTVzH3}YU)_p{K zdOyF)h85u+>fngvOJ&_}n8j^M-y1&l4X%o@@71lf)jWK+rI)*{n_Q^44I>w?CNT(x zq--f%7*ySS$EEYsm#8h()FMCM;n>}%(KMfB|AihH6uR^M3fY;ii!yTe=__YiK8=T+ z@~m0?X5GT7-49>7i-JOHBEAgCC8qb%H(h$DUM&efN7W13HOzm_*y(Y~5uiysxP+X8 zm$X}UY&@K)WcU4mYnAqyn>SeN_@2&9{TjO&<8I#veWILARbC}+H}|W4C7U*&KW~7% zCMGC|u+HIb!a>UAIWd~S{9iJo>wLqlgKUEM&#&!zKTy2n_Dcx8;vs_cO4fzt|# zWvi}#cq;m_s$6aYiJiitGW%40@jr#htEvyRPWQ-XPnWOAwbWTm`NE;@HcG6+G53!l zUsxsH=l1dSErNI+QGM5dQOh^=9aHPpT&i4L5WQFII(BLk>C&LSYv&x-i)PV{B^nXG zFP_@n*xztP?sVykKTV4}Zd>9&M2w!L`)c>$e~g+rFT|At8=YwPw(?z(Sw5QL`U$M6 zT+d+Wkc#DOW&e~(cw0I5GZ04R9djg{)?zdXcZru>w+#JMk z8ru|Qn7c#kWufvo=PDk%e z5y~1brRya&l`MfEmK&V2Y}AZ|XLP zV*cmL5!ADRkM70!t6uESv7BwuX9nhXe?)ZvFS{*)o(g&5X$0pa2mGXw3XhYn}jO6Q3B`s0L)D~i9ZkJhM{ zIZHYe?i9h)CqVzp;;pB@-&8lK7FPrb3n>5(?=6i-k7j>}Fu zA+mbofl!D_M@d6Ph9FQ^k78w`#MgRnAC3tp6H<5V`v&<9EK%L(HyTe1bGa%Z^Br)V zjGwFQ@k!Ciba`~A-)HYx+h#HCe_k;w#J-|`&-yl1d)f30Zp~{V9u``f&#hA1l9Q!V z{RYxjtVs~F@=V~fJ>MRyU1_+|&}O#h>+kD-(Kr&5_9&}#=*|pMZ6ABd!_bGCODb;D zSy`Hgd) zF=?tX>(m%s(aP4nkMwjh)A}jfE-Z4f?(mJjG+l9(iuoD6Umh9$Cb>~@TW%?4p&@wm zw5h%NOVu-vFVSfycIDi>1}mRAXWcp%o~z;V?6rF%%xk{zo-3$7 z9HA{cv;12~N}MPvPbto}b@QT}E#Fj}6f&(kKV+hB2V!DMV{CH6p8LMKJPP@>*U4nRixfGv zPmR3=T4RfASKc15efQlw$RK-;!YF6T#ZQ;|EoVW3IT}1ZWs|@(%Jf>9H)J||45bsu zLTc5rS=+@MEd3kia$(Utw^RMAmk@U}az%BvH69UBwy#-RJ{60roWe{shP_2+7jMN5 z=HA!68NOeScXr18dP`{?Hbls{CDmPeVI_Em>47qX%)`Wc@^P_b!|~$oNADLDSvZgH3axSYackGl zCVi?q7|!Ezp*61eN*L%@vGNn{7MQ>F}SR_Q28Q9C^y`|JX|2NKU~mZZ)=`xa?u=% z{C)QB_@Lu<~hE0hVq*Fu6?QYJvUJ5o63NC`CB=zxxdF0^yqp88J+Bg@I!ae*2d=f zfo`t0WdU(P-0cZ-gEAIx-P_tc4DkD|%5pb1OwNoxbU0e_%KYHQo5vb|Yu6VAM|RF! z4>`J>ZWa$EV^-G^wh|t=zW+R``h?&|Z}HWvqJ)^KeHjlcr=B7?zu?c>Rh9p}h`xE= z)Z6vUG2YqR-+PNQqWvW7FF4fQR+njq!5BszD6uu zE~$_z4K3kV8GW#;w32Jf_Se4tEt|h&uC0m_@5@N9ZIAM}CivV6?2G<5l9#b)nsTFu z?$LtWFRL)^y9EQ{;9-|zVOze&LKaW*CBHJD#b+i2!M5kP_mWC4H@TH(61fcHoqG%= zhy!__piHmY#dPmO*MIt8YRp=8|3Krose0etyc>ZDKDVu$8ji$2-||&WAu4_9+Q#Om zHk3W&-60?mqqn&j{CLD zGXHP^>9<_=x__W)l{Da&hgPecA+7?%9C=|p<3iTP{fSaN>odGhSMEO8eC2H6w*57* zf$`n#?97GAC7UkC%{^;Kwi7 zTZE=0$1GHA83^gvFr`K>vpdLlyx?-n1lp!h`s|+i=)DE?D*^eu8I=ZJXpcF0zF=nV z^Yq!5vu7V;FDY3^4qEv%$1y%}lyy*H%@Av*bZSoEBR;v$A$<4y%ynGZ>LC)Cg&i%& z0`g%aOVIGC$9(noFejmtaLKl+#G1>(NS98iu{#E_=?T+o^$?)GCBK;Yid)+D8Cw)~ z`wk>i>_3=w|BQ?aRu^>D?)>@Mr*}t!c0J13G7NTDGCnlr$8UZouYk1ISOYj7e8!kB znE_d*@>K;9?cFLNbLn%{CXn{cRQF$Je~CBYH-#T?G!i%I`rS*Cf3i*eNYi}c2Z&(a z5Dev*o4=HPwYn1X1s%fb2Nw(mze^ffcWV8IR1p0>`7e)WE(rW`<^Jk*`R0`wm(2)4 zklgq|2V>F}m46}5>!tdQGrK<;{{~xKH9lWDr~jDeXVRzq+4`=x^2LF+g9_16j0ZXV zzQNe?>f*Mbmn*J)=*%7<&Q1?s9WCiR!)R{_cF*TE7uHW74F74}imSgjJ52p8K5f>=f!l+s2P>9$gi8*0glL~>OFdV%Cy`&Hym5O0PwV?Ulg$PyBNwDg9DWp<*r;D^ zM^PWRI{L+GXmi_*O5!H8Ua#bli4_8Nge5xbkRM+ZZq zvQ9v@-sMHEAdyRc!8rfx+?c-c)t3;}-F3AAOwFb1@hIoFw{n)RX%`Iq9&^BaZ*+B5obu?pv#^ml(stiA8I84lv+6U)IQtB$4Z3;DD}8CTebI-%EXhlm zKs@u@S}dWu?<6LFjN}blqy1rEjp|5)EZ8eZu&}kDz9ab;=Oj7;?v9*_@4M{#!!%Ov z>V4-WA=+2JjzLT{lhbg=e$uO|H&J3hSU^m1m4~pTefE>Vr$_oF1A?XX}63QC$(U@%Xpl zJtONEjzZuk4UFg`jlW4cXP#C4tFR|P?az!K|3&7GjWbhXE(10pI*WVN+NU->vASww zeRq9ZHlFUhd3tcsPY#U@#Idh#!M`dRFH zb=%8WPoEsj@Wk>qcpPOFoqlveQPXDr-Rm0z-!|W~|G6fOXudKzMI*``t3O{cGw1Tc zS$pE=kuNk6XU|_LexwE(h1$RPIAx@8gg;aNa1wV%&O;(* z#HU`LK9#WS=790p&qa_AY8l5f{f9pmRsESK@9a%{z{PixKezOSr4+aC_+9}3@#OvY zuq|UndIFo>_y#AQZcdQ-CpzZV8u=xS1y-sNwuiZLRsfP&OvlcjT4*b+35;@#QspNG z!KS4(p3k^;Y&Fqdl(XHmJd+wiHFJ1d_1Urg)9Zcq*_^Rc?cz7)VwIO0Y9ViaR-D?@ zc&1DC&RnygL-kJ0yl-0rqrX0xj0SIXy&NKLBmNds+jyaWaK^c3-#xCzbS#n@9rsNC zjvsevF=~A zKl<>7sOZBxPet$Th%mYE%`WBe(&N0Q9TrYkUJRJds~_Sd&Olfn+A79s= zc*5Ez_r6qQfT$P!URBtrA$k4Y7v=r>uj)vRv*L|iC(TXSVFLajr0&TbG6Al%=zKHv zncQS@gUIhFcx}JhUibO<0fW^xrcSPEMO8@;2mSVDPQ7Bzk5saQy~8NR{7)Isp@|iH zr?7a%mx#5an0|}o;H<9An_!P0yvUR66V|0|WBb(FqvpOhj%2);`XcLuis?_SHtJpW zHP>@ke8Ck0+tJ(<n1scOMET8Ucu9|q?0e)B zxEE3jI1j*soaXN9Q1#fjKVgN!wzrf&t__SlSlz9E@C!Pquq-Myt2%GxfO*D#`}!vT zz^dw=0W0;cki*lwMx)Qj1oI#Bx|=VZT{93f{cXyTwV+O;c(N#LOYy-UdVcIaWyr!> zAA()xN!gQT+28I{{?h6^G`~)8z9;Ruw4`$CzzG+3?$99Mr2?5iE| z|HUMpyS!32KjO~yHD9uA)JKqwGJfy{it)$p4D5WaUBqru2~$0i`&=ZCGw+S5+0+RH zXHVK*nHsadh}H786&P*ww3DBNq`uG8s(k7KT70!Ww~B?%@8l9gs|dZb%=F%yz0Wup z`kjdf(ty;A+W3M^yZ-nDM!V%;m`0^J2-&w6iz zStsv4)gr5(Zs+(kx(uCSw$+=rbgGXA(TOXg!tJ7#i|Wk7XA@i3mxFS}c5vW;kkUM- zp5{4*8h(kha0QF%`T65m7h!SE?e0p@uI1Q8^Stz!p)^re0JrGp^}Y;lBBL_(~Z zZh0i=;X3s78VtzTXBXa+1?(a9N@8}zJ|IS@n9bKApGWzg^ z7IyLUbr^9~RJ^odU!(tS$7Y*Vpkl5KvHidP(ZBR?hr%MHlyG;%wdB)o{f=VNP_CtZ z;dJxm9jLKv_HLt7&23Y|CXm7t+RJ(poS2Z}YA2L~2#~8P-8IZyZvdP3TDgK95KU6c z#jxx0EHGQMIe~P$=+lu7AeRkF(mljS`3ym9eMijMc9==D6nzu8?XoeX72IoRyGBe%r(6~C^Ga+^7+Qwv@Sh%w&wcK5pZnYoyPWa|ZPTmfXdiMyfI3}Iq}pbmg7Ng7w4da|Fd^GRAjWuH zK3Jjz|FHXbS;*>f!t|1>oX#(~YhOQQ65po0H#Hx-=;G!|@l!WWe|x|=eM0)6Pu>gT zcNqK7W$k64P8xu|!)wM$f1dqvIk5ro_!m;5W)3VQlxV4epr`bku9?w>FP?#s5XAyR zhhU5m`5#!Poui}lXTcq~w0f=N9k)?tn%UeUHrv)6^1_psJokpu^7PX-c$kC6`TJ{J zlVMkI9D#ZKXZxX7ts_he%TQ6VO35CrK_S$cMOT{uO6H4{$`l&-kve zE~*k^>z{ZJ&m|Rw{u6({V-q}ohhGe=$t(lUJdJtmFs3x1+*d3e73<-doLMbw6bF4UC zZcx!iUN+I_;rOT%P%zPqJuuBbcxN^H{IOVP>cXDehCsViHIcKbCQpJJvC^zD#fNW> z`};RCnT11g-J0_+m(yq|7fuk~CFw@EWicoWIMrhh@e zJVXbZTvBftR|V`a+l;VA>XW-{Kd8~d*nt(GNRv*)zAQ{_WND=S>XTj$x)5d6$k_`U zm&othVqMz?HooUB>upp&Lrvr3?hY6^|GD|a`V}g8f)#X`KP&N&ERSv%3lbhcE3D^~ z5-2l$NvvxluJic{KjW$Xl{Zhq7lyGkMYOyo4A5(>Eno8)^}>69WBOMS(?x*5Z`0-4 zJ{QU4%l|jnok)wx;-7$L6_vRS-9bvJdq3Rw+a~wlD5IjJzN$5T|KI1gZ~RAnxEV94 zj`wQqr}TC}SOb*4MOA*tsjf{ow|1?St7q`zLgV{q5q>G9r-raHR-agGwBcd6os08p zDw~~mr%LY?PbDX0b_&i{9_)+StxosQ#2EmQI77|1 z530p!_2p_kgvc#LfLtB(AA5HfykByf8p%^$MyxbPeYY7^YZ_UbMyeHbBe{$w_!;@T z>xY-nYt@dsoEO2=5j%uH{o(xK?{WjIJ3!w`6c`PgB{{Ml8rCD(6^)w~l>?5yyJ4dO z>y2_0QLwL5hJmKNvzHNQ(F=>rXVB|79&n=Jbd0z5$43>SLM8} z7bOGVtyO>dq&qNxZmk#J?R*4n=^LP8g0Y#G_xe4+dUmLuUq?yU{qtwb@b)l zGEl|@U4{%8z}zRspPhk{J(`3jxfu1y7h;_pLDoClpF{4ZQZti4`2$JDyEuaw{GHmr z2Cv5tnDjr|4TThoGMt-cra# zhv0muPuEz-Ue{hIMd&g70{(O{M$^xHzg1oeE>UW_;2&o-n82!9pAPDh>V;Sg>kH`< z35F3pxVOd;lr@k10ZEKi$w^qe2Yu_~j>^6ie2N`D+3rY9|24n*oE!fco=NOQJ!3)B z-R3&X#(F1gLpX%^yWkyI?S8Mdp>PD{vnUF){%M|O5y(690H0}-sFq7MkApVxBERos z@&aRvj!P#L5(0w80@1{$)8x0j(o{*RyC1+4LQ`96MyMllS!)nk&+XwYZyG{fF~Q(( zxLPyL-C7~f8pK#@=ivcsNE%#>f2umv;0@0T0V7cPz-Nkm#;101~I-F zGP}4N-#L#L*3fEf|0HkHj6>D{5v;Qs>l*8FhDZxwg^}LHx(=MpKyYy6ahen(P~p5cv&fbYiRdXR+K86ixC+`2AX3BN%q`UyW1NENNd zVDD?O8#LLk zXe@&aE!BM8-7hs$3XgT<&uvpI>7#uQmm5))s901y>Z@S(l2=Z)q3j#A517CwntM01 z{7BrMU;iL-3#}LU7eb5XBviluMA?6wv)0nHc0|7Vt_k|2VEbl0`MUWJf4Rp)sa5V~ za_L-LtUVTJ zm#djJjY3?lzoW;t!9LYXZ^kAZ@_GWnjIcA&K+YH6xZyc;_6ba0!u)CPg6d}9tO|fi zn+yUIC5I@5Xg=riH=`hR8PK`#r@;_da$?j+?_|)wLJkI~fk|ypDWI|r%(9+9vR~3p zFEb7%21p{3a3_pv^MDwR69w)V?n#>rUF2pJS{f}~?nd#Y>xhV8Z@JdWJ#KYk{mMjU z|6`ap7*So=IY3*UP$GW^RLrwNW1uc=hSxxG0>?F}bL%g!E3N%+L<3^`fgz+=(Uf!K zUv3h0AkLa*s~`v=O;bvNFw0hX@h0Nj`cV+;Y|sb@xm~6OP6O?0QuWhy!)>G>9dEtx zdp!G`e90w|=Z{uUOy@v-SnaoWn2L=`y20N>azwTr^$T}@T`#alY%G%xV!Bb%f-jaH z%RNS+S(9BGaKK;aYwlHl;sDr+YuzW^5==i~aNcqZ2xu!UT2lTa)o+&>di|F_&Oem< z{NxCo%H$4!EDc?eaT}Z{dF{`YysLcUM1z2)Y}fUes?_v3a}Vw!%0dhMDKwmI6URe| zKbyN@6=2V1E~J?EIHQ`jKGSbXDVHcn*9qO3Q3m~?~aRBSMlm;j!4l4{g9 zXu(wbA~}gT$@KVg!RTxs2udc`Qd7v+e-fg@NjLaOr18nhGfIzXTVM}$OVM&>u(Wx+ z;_OWTKTD;~cyB~{YO*5i*1wMP>C?VhcMxZ=p^1-#9$EvDdY*|1pOe zHjQ$Ty{E<|nG1&8h0MTpy+m*>ciIakO1g>V|3J#Ryf}uM^a4`UrCy6<027At#3EcV z#u?%R%m$(}LBqMO){)wsF?HM;i3A-B#IDhcH-*G@a|ugN#CwI%%%MO%jL~}YTm`uU zD5tcQYV#2i9_gm4t7dP**JfrwICQuzGUy9~favnT92POzEV1ifx z1@(&;%QE`WFNJ@$)c)iQQ-5CfCCl#q@Z##Oy1D3y=2iI-lE8wpYmsWiipuK=Dv6g~ zcv$^_l&HL@e!1KcfWy4C*w0q2kgwIML>ocok<--5|FY|NItxk`q&q2XVXpKF1 z_7_UqeLIle3bkx689&0@p^En4DF6xGkNRWK5~{2|YLvTBo%ivNOe631lC zG$v_;4-hX*hJ9ZF@?=U~ku~V@ri6GJiG40usN;vEOyml4G_yOoQx5ix@0n?I2I1SP z!;KMh`!(R5Op7$0OJE#AH@Wu!Gm96R^yr7eZSDru#~kt7(?2E~)uyRFUo_;K(tQFcSbpb7UhW|D$Wx<4`o|;Y~LRpd|CY15!80Y^5*l$FB@YKwvv;`2*X? zpq$TNcRYU`%3Q(GU`yRzd3Qw7>Ww`mk~>nt^)rzL{|$lhUU=yY8)Ay$ZgaIs+bq!? zY(KcBhu(x#tCp@Q)iKeP=QG42%1)qDH{y);)SRr4gRk0gZ%}_U2|n>I3Q`r)MZyn6 zLQyUPua^WQHcN}~(2RVibFlyeko-}*2ALR?)_H>=6UR^NR{onO$K3{cpQi|r-YSuo@U6~gC3sF;XH1|MF z2xcyMq0r9BZjHbww|Yfz;zRIhkzMTubBU^Ak$!m_ojQd{l+#q$&q*Q9cgl4|b?_ivPsn zNWj`Gkf2ZLc?G>^uO)Vh@eY6G`uUlIG+~o(nr)=GgP2@Rf zunkB41r11dIq}Jkx`y`to$Qc$V$@7rQUHjdb;;%gIsX2%5d3E($R9$c%DTA5F1a`- zfKNe(;D`y99F$vSCD%wNW)K-UwM?xW;;!54{ZLx_t{FAFO%27838qbJRBX^=28RVYmBY1lwcj&sC3s z1DG(5erqf$4@`t*5gf{P1nnA#*=uOeK)`cBHI;QhNuaNwDO1`#8{CYk`hGN`NPq2x zGOSHb*qEbRmiEMD9!Sa$8$1_}ofaArRqYI^peGX0OVmJyzT2fwaki}r2P3eaV&0+q zW}vJ5U@?^FDi{~O`odKl`a|5DNVd`8$oAB@xbPg@Zjw$zPnD>}!beMFEMU)K2t3?A z6s2a-mua$+OiK6Hmx_tC!Rm`tn?F5G_NuSb_WSk~#s~{!FRu)1%B9qPnOxN00KJ#{VuBzc&Vz=3 zA-etakL5&_YlYQ~#nkprQ`e;2pI!22@XqxCL*rJEmWQ7O5U1d9B(Gd-fUfvWp| zA#Pf(8?l%PBB0Q@ypTS=Q0)^+6l$*;SNLbJ7dcOqvfX{nw;}f-GwarhwjPwK1|HJ> zZbZ>mss^6dfS0?>V@mEejHkFHg zbY!TGpb!%wl+JOo&&C3o2?WWz;qrmBO#!cN0HKt=3Gq%YHEBCb-T!K74S<+lrweNh z4KIeCJ`ZH>4-iP*o4-EIY7-n)G!`WA`C53Yww0 z@`$3{2+wV86L1+fdgL-OFBP7TrU?x04&EcgklIJG-W;GZ#^}v6jqfkp~r#A_IB2TOYgv(G3mtJ?70vvSqwh$g%zt7!p5boWuMB8Y4o*GKL zNxkh2w=_u0X^1}a)>l9jRqGBfOdK1UW0geK*gi)*rm z&8tWf=_dL;164oNHyz+{39p~_uxCPILPGx|!G1=hIaob++sX}Lya>!VkH88DG*IU~ z=n2oDj{mYO`7ilPGmR#-66@YUQci;+ivaCvLA3b|iRMAWTAqyP49N)8Ct(EP?GZ4W z+!?pYxDRS>#{~EED$cqK*@jz1%~Fn4JJj5zWJ1B_{4Su}3~(>loDnXX`H`XU!zaUY zr?JmE;9pmO#QUSWzHb`D$p-!s)^jF>?^uO1wq3u;oPD-yF?2&&xA08GaE5;${eTePZxWQ^6qSnPs(9P% z2Fd5GzpwLQZ18C@4>S2=3iEQgjeo#ELxj^f;nbBZcQ8|bC%{HKi1c0ICELWVND9u2 zO%q2*R`%q?v|E#nN!SLi-xX|!CBDz)iAhnKBEatM4cF9h{+5{pFqN|p$2{s}oKBRZ zq{9^|O?@_=nFWP5*SW;&F@KmiVSX-zXtnqJwFyY{<@)L7wlf-XQ8A=>(~L-+(lR57 zZjiN%(o*va3FqhMPpBSq#0i$I^?HDM^nFILnRh846?MLVo6YxHSm@<=NT&U7wQugM z3|bG6VIW?|I+L)TDm6m(q)|igtvy298nr~~<+w%ZfPx>txyN6^L6{S!kCU}@t&;&h zH;hEgN`13ZN(3FW%YlNz*&Ku%lQ3?D|~5z(Dw0KFN5?eEe~CPbQwZT=VkP)gK)o z-~v?MEY489+@8BL@3O~1_WlTAPHf_*@)rKWAQbEJ7s8<43#nQ^>$=48e6{K>rzWJT zNMdl89<2Vk#26cOyr#^A^M@HCRA1~q*J96o;L?e~^wQmrEb^QNixO78N2SLSuvto% zu_%#xPWG72=HeT!9_lR`EfpSbyoqcsMY9w9vVgDxse5WmFFCc}Pwj^yYz2|JPUs~I zYaxA$=3-<-ypUSPrngZoFV`@@ZjV|6ef|u~o8A_^!0p=at*Mih9Va(40*F^4o-v$g z&&qg&GAo&@&mB%R05NCMz309+;$JjWx-0+5RAr}SR8<}7kxyF?)kXdS^SofxvU|1- z>IvA21jY!Y4>Q-bM3Ox;Bui^)}I=!WsK&kh+;% z=4;vFzmNxfQ|~S@;Arm?^;OADg9PsIbLkBkgGd_NaYsWwzvN{Z`c{V(-LEr+mU&y; zsSrFBo8`c>hv}WD41?Jpad)++DC-6d=@dM~q}LuWkB*f4%Nb!xr9MJmk?)`+O$vIY z;Y}q5d-jMbm+ZCmyVB%%x9}o4Li)b*haol;nZcq52xZY4`^RYQfMU!W>3eB4SXhkK zjsO9HK?f8(;RjIt_mR?9 zMHcIHK`_D4<{Ax99bfpk5^rU?FioX{{Ir%-9ohG zG}m8Ai+#nFDNULZT9VPW9ixexE{bP;?vriT~1#5WmkAQ;XK>yfa&P}bCVm=j2$;g;2a?FXdcJp(e zSB6=b?_@r0_ZnClSixS$=PL_)bCROWZHnUdI8<`>{*sg*sf;-&hN9eR9d(j_9=)D!a`bzqM zFLguM?n<^SN_F?l_xWNr2&GAVY4&+;SnA{@z5vk1ffc8kX$hG4_{LA3?DZIZgU0X^ zp^+H}@m?^+q;zVr0!@hUGq0J-9pPtxE&&lpQTSc5Q2fYq50Vht6E$m@k2LYvuaC}9 z&b&MfeH`@($hipV{Ocn1gqf-XVYM!1f=TA4<&S)-bI?Xtch|r`BMmHduHhh{F#LT& zQ;ZwpiT4KA>MUchN}!_x9U*K2aH^n>fEa#3c*g)aQ)Tz^yF9nL1rr>)(AjK z5{H8DGq4Ub0z&ixRhsZq%_L1bg50%xV0tVM8)<1!I{A_^A$A8N7>W^$ZztxV`Uayk=|nzHM7qz#%|E^m12 zwMZ`Z3qb}l;Xc^`GN#)XM4rmq@i`4mn@PgJ+PvmpFQHOYTPiG!ho_1eP_r>4#*K;U zF@M)2n1olLXE$qh^_d4mSom6b>h^$0yFrloiY77CzBru!$5Luvtt(=FTNr-MpbbWn z&dr;;*g4MNBdUxIGS1J)a_kc6cUP8ZFaX^)m@27z@F;HxEh#gvu(m~w^$hws}+btJSmD|~^UH*R|>`SbSm+2oiKQ*@7H z)6&@pFB&@bovIc;F)DGxuAROJ`~zn4MH3MD_bZ#v9?vj5XANDZ{;l|D)`wxv=ZqpN zGnV2te8T>+#`-9SS;B^1pdiz@dU4$g2r8rx5-u{@dncP>{Ek{`t%hVah&1!+4&3c1ll_h5Xa?skpgIBc5Q6 zZz3P*zuY_Fnsl^u&sLEiawPbNQ2He9d(UNHCi}rG4`xKL-!Fi??ToM)7>MyDlxhM+ zn*tQg3o(y?@_ZT0LjWJl!^c{LCZd(xF+tcZoYuL`Ok|cd+QsIPLyhJmwR;oqY}|kk z2*4S5%?;1*7RHD`r#IIu#mF?}GLbIlAGrc|ssR>mUybw{#03KrdY3g5A4v-Mj*%9Yu#ZLVmcMGY{xAB6Yg~UJJm$)-`3KFa z*P5=kOk>0~dqT+LlFwf7D@6*3Z!|T`f`xD(P{pY7Lu}jJBvT)*W+9=5T8ThW(N=Al z+r*9uy6a77PfWg%X2ueOvR*jH&t9~ac``+a{a#zplkTrKyOt->s_Y-X{5F3RbQuFU z`^PDB*6zESvW2xKn!Si)LLJ4lMK&Bz?(*|j6Vxha-~N3!R6-PYnkaf<@-sb*^9J{) zaA0;pkkAp@9pY5ckGBpyT`D}0hky*hkV+%hHW&{-mKrxH*kq@lTAozIwdu}UVP{sC zMV#xtaLnLj?~M*(7g1Y(z6L#g^-W-cr}b@x@q$!%%|-Lgy6)a%EeU3{PTzgMf+=lr zy~%WChoGztSTsmQv{E|Od%F=#8`_!Rcp?BI&4tyPXh{*yfQsGX`S9pQkxx{^0~f?B~Z^zfn3#!O>snQ!zyRVRj<(D-4jbh?^}5nJ9Erbw3x z%!fIdX(1or)#ag7Vt=zlQ|Wcszp^OzGI`^g8r^=dcSUHN;6+js|U^%!o3x+0sb-pqVJX5}mK}2Hh)JMJ{ktC@26*|(D7wzo z#MbTqR7Be!ew{CFa3+-^SS8!`K8>}h9S*u7D85ckh_QnPE(kV#vtcao$Pj31%#XlB z25oPyb(bj+CsHmb_Uy+K=QQz<(!w5!0Yt6}Bngu6kT6hL{gh}@m5NkUGiEu8xI@YG z5AX@vx&hfr5^-bq4W{GPq8EP$*!Fa+eHV}IA)ZebV(P>P$W<;jYR5Z%q3qb5iv%jP z1(*`e5Clr)YP@A|wu-wWW@5Kbeh)Q zJmSquMtIFI;5MVFTEJ6MKL&h|WtVatswg;TU(2zi?=xE@>%D8U&0d0&%ru6+f%>4+9mw1pT^McyTk{BL1G845b zp#8-MLN0Fh&O0B`td>|Q?A&wvi*ClBH5>{{h3raEJL{-nBbDW-Er2X9I5GtCJWFU=75>mcD-_ zYdMXOdpdpQh4nd#4Kll3t95#?KxOR+cKf8M9@l?kiFc~4`@#-(+NPZSVVY2!S^esP z)}|8z1~tR$8O@9}d5Q<5dExnm?if9Ey34y(`Q9v1$LC={q7Fm|VhW~9$U9fjtiQSE zT>N1yJilwDVa}8eqeyI4u8$4l9a~M+7xvxv=A4z&8wQLwTB#grJB5$!_q91XJv00H z6F@@@%KWDBzd)Kclg4`6#Dtu;tx)Ynruh zaN^$!+appX(gxIfmBfGoj3ri@n5SW50Bb=dek17S zN}3^vid< z9DJPe7qVVQjWZwIC^=AHNE;k$9u9bL!qQY%VOnNUp}8sWtFa7g#%3br7`V_nGq&~6 z==j5!qt1|V;F_hjhT=g~>w4X8n_J|^pg%?=-yw5+x3;Z_1Gq`=bw$^aKDstaes)zy zq7Eh*tWjn~Y5p(I$+oS|C+abde)cP!fyUaT(QIZ7&jLkH`;Do;kL@o0L7)!&j}@g$ z=TD}}slV0*H+@;?i7$E`koc_Rx{BTI8BWYwef+8k?ViH#-1l4f&o^7P3Y?A~9BGuj z5dLtfwP3RXDhv_f?`jFw+jfoczcC(g|wSw04!Lu*zOF@FGSPIfNV9FVO>DzGp zBe_H!YR2OaAy1FZ<-lTSAm>I&lWz{o@pX3jWSx2GZ_Dz!)4O-#$rQLJ#{MxNQa-f# zHXnZp{&EUpUViHma5eeb;(@Wq&RbpB$F&cfvhaL%+pq$*|&vQlZ z+<#o9cU?lsDsSHU1>NBG|1LfySAhJ59A6zXQV?J`c={J|Q=n=jv8VM*%cwx`8<%>! z?^~x+rTwjcd|tPHnQiSBvbN?93k!>gDDJAY{Jpv~cZiDy`%>?$wGHs%3x6Tcs~Hc6 z1}$p2@-$xmg^(Ua5pgd_+co<(Q^RYRyJ@ z$nlIJl(VS5o$qIW#ywd{MIE>DArToIE}vssh`Lu{Alo3I8wP@8t_b0PdI`03( zl{t6^kEG4VLF34dFo`wFf4WokK5qX?R=6E(d}vI02!3}o*H|Ri@nCwC9}B!GQQ5q! zDMBfzNI&7dlIj`bs=!sVYPpva_hZz@D^++6Y?!*lVpC{dpUJbhKfz^lyE~aicD}y9 zT;BUM_3Hp;<;P#hd%0|8ljcJSoZL9G1GfDJHQjbp{OR>}ZIOj)#%Yd1DlUwQX5iJ} zwl0}Sak-a6aFj*#-gPCVN*$9VA@E+Rp$u2_qmPCj?lWjX9|y?hJ{{j~IPG^r{e=_? zLL}@&2<^GaTi{ zu}foY?+#S?oSv8P!FPH!%1$4SFjXJb@rI|@***|>!{Q#zSi(i7U2?xrrGpE>QS|89 zhrZ9Rb>F)5mhAZ28C|?BkuF0o6YHJ+u)&Qs{m&aYU2I@KSl_k_cua1owpGeP<_>dpmgl$R|JIv)o@sKAoW7313Fpa1CvTG8i-UUwQKR zr-h@-&a35Dt3rpms%kBI)2D1{erwf2b;@Np7*a$hP3#Cut5wl`CMYr*F|`VwF4P*F zNh4JTWsCQPBoTRVjRYmL*1PZtUZwaalZlzrS6$t*sgFHpAEwXq|1h4HN;t}I(`VEy z&mDW5tm_cjhGKT;eC%l8EXrW>c{^e?o26Z;Agxc~N6Qt)d`gsSqg_R`h?=y`A9)kT z6wkff!hPLpft~|fT6&&Itq*Arh1<*{^2nk$4WXNnyaKy)yJEb&k-P|#BthDu$!0M+ zm6ti&2-}yFWuux`qcVRb5;9i6OT}RPRP$-;sd+}6*b|OK%c;BPL4^Y<6*8 zJQiUAsdxo^1{bed7PEj4OW@@)sNDm2dJKXoiGXm!yFqFBdjdY(KMrCCM<;}0cb_o+ zg>)mvDJvFV$h&6tab(Mu=RTbv?WF$3Hm;vdxA4jh3a(RM*l1HKf4tCba$71H*=h0& zF3`E;q3v^T<+mfKoJfV=YF82ByZs|9IErW_;nf7?JX$u=t-is~Kb~GPny7NZh2d2^ z;5t_H<7|3;#&xWEAQ0)NGNe9~z?hq$T^_7ScwBDlr2qrOc-5;6G@J?0OREInFv{%f z$=!i_w}%*{T9^gE$*tEVtwuh!18Y6Z>)Q&<4mH55uXrEVDXwp{DPN zqfh+0sXK$m`Fw!olj@cIL=o~Jh2KV35u#uUCWbkWu3;&SU!iz=n6_K$!?PPvKdKo> z^%tTvxi%VQ?VKwf|E>faEDw05vGrK8^?SvU;t|G*7#ofXs_V0CiymVxo8dnL%JSAi zBR+!E4e~h-{}uO*|G$h?4_$b*9Dk*O9XGG#Rnx9^t2>Hqq6g}VHyC<+_PB-eR(taT z6Zj@w{*b5KZnteE2RF7xHIub!ac7vECu$SY4Z10!%%+j+%c{~!&aL6-+%Vw*ir?fL z?r7?}oe2ayGft`zsMp@t3c8B<@-VwM*s~o`LkMq>n2+w&lX!ab$ItYRrCth1?L^=S zueSt;rn*+;r~U0*%jSID*xSwmk@{%vB>a^=IXO9*GJEvss;N_W5$vsG{|NAk^&6`Q zh^VHnAIO`?mD#Nt@V21&xNls`y7Cv2Reh#^dGDd5c0R0Jvw$~}>rww6_f3#402JK{ z;yrQM-Ls4+7Dj-8M`;(3VDM^Og!_+rl+7Pu!6@Mdttbw)58vD)svE?N6sp)BV4bNb zVxQ%ISmD{ec!p0}hL!i5-dEYq4*wV^(+u7ix9sa)tKOaW7p?8S+?qf07s8m=?<>$e zc}7u?tn%|HIbLyMJpE-FPEyC0?@)6eenJ-*c}}M?IC4UhQwR>_#hD}&U(0uOHvBz# zJbF03Nl*tZL+v!G`85NnO)Q__67T<9@5`S&FcJHltN$0`$!1J`eOed_F3e%x$YJ_z zU2aMG$tSuUMfs$xHr(VRnvlQpR7?x4bvXyzO}RsaGayvx7IWAnzU}*L;(TG4)tV-( zFHc$NoU+*yq?CwuvuLYNwQAbh1Zm?r_26l-g+mh?tbep*G}BzzNQH5>PdFlpV@F&& ze>Fm+j3H8LUq7-!^d-DwLP^7LrHq-rV@P;WTj^Ydt3YO#HFU~^pGwqmG`Jk z#UFk4Q~%a}rrzIvW_jX+vpX%JRnd1>^KKiV)J6!Un%dTa#WTCai7LD5F$3?P)gt`h zp(mbMd#>`(PK;+jqsw?0_I22~*L8pA%r6Lc4DlcEpZ7!_TY8dX458X))n^(bxdJ}? z$CQIz531-@;#U}Fv~?RfhT-}uVrx87{nwq77!x)>n7f6W1JKHFi{9W#mO)d|#~jLE zHCo7K_UZIcE=cQAD)n^^RW7&SphtF?B6Ei-qZ#XPJ9Z;A%h8>)UaAY5@iFN5uo%1G zjawE4k~a;si+j2MLi)qsQ;F8j7cp+-Z3Qd8=Sg^KoNJJXO2M&!!*e%mc*V1tvt<*G z<<@pT#PRCysW6U(E$B9?4@Fjh0&IZSYA74TlxrruSFF`!#B&8xShHB#hD~NNW?ehE zo%-{eZ7Z|G;Ww8C^i{)n`u=V={^KuI! zKTBCSP%~T@SeE)R(6ueEhn1Me{e`SJMMhYJafvCcR29B%nFPa4d;%?5q+51*Gr;2E zUYM2^+%&k^rQZ6zbdC~c{Xk+0W09=st@3OJr?JZ#RNGS>y`F50yOqt&8&69Yc@cwz zpfu|nDUtBwN%Oi7YoqbbROo^v#=>}&CURfyh&;g$X|7CXS1r`BpM9{58Sb6b1Fd== z`}e2^>QR*PP{g-Tgs_-!tKP9Z6-CYrM&5bhKwe}!O;<2fxdv;O)T(CI`2LFN#~phf zuSLNe^3uS6IL=>&iI*!`4y4A$D81jYJC;~Uge4e`t}QBybb3C1epsHF5Xxh=`0ScfU5EYsfUp|X4!LQ1BY=L(ROlb@E@5=RdY|}1qd+@O@>aIt^M3ikG(8VihZMIb^J}|Z@ zc(7t!bp~%)7uaPitg4E!VP)lbKY3(@ouwRjWmr!yB94nI+hepOya&0Oxlo1&eKw^} z0$|&WD{<5h4P~W1=i+9?dzXZ-_SGir#1?+x;K%(@Gc0hp+JSz?`!K`uk4BY8@Mi&U zre-EJ#=M^DF?y8*xF%GUDg4yff9c#QEmopkizn4o2*CywN<~M%Sorn`=g$W2mFTk^ zvTI^Z!dczDURiikioHC`pBu4f3uTkx)(&p#6`Lp_nWi%*e^5Mv@7VJe8I8BrA@CHu zwRXHcfk1JgkGaTHWfRSNb1`bo8U=ShW@Q+BbDp(2cC48pR4v@Om?7XEmc_LVa-9Y{ zuN+=gISEw^R7MNsEDC33JZT-Z5ZPk{*Ndok8Qsc=9m=6TV>YtqE&B@*E*68aM<^-L zM8zNfl%&%Ar&uxE@jXO~_|gAUO*Db6*9zys3aPg+{Nx4akP;(z0{kR(X=Z zL%J`pYimx^Ocg1P@aCCmReWGXz-9A3`54_proWIEYu+N_93#Cxof5MDdsj8{2(eBV z({eFWT<(}`k*Nn#;@3YFLx18|<@G=6CcD!uQKDb`KuZVKxeag}gGyXG) z)asehL5>nYS`4H}uMJT?OOZ!hgkbC@fS1fw!7haQfa zpE;UUakp=k3RxZtI@{XlVz}{Y-k=en2;Gz84!;-bn8>pEpkcyOiM`c5P<$HzcML)( z!Lh>YGYkbCW8atcXMn9A06JBXR(OHojKUabyvofp&1xP-qkDquAj^W-`R2hFZa$d) zS%i*1EB|qxB>ryJT@WN=MZPhb_ewfG@bpr?)86c*0Y6;o&wjaZ*No{X;d(%isbHzo z=|A=rjvc#?fr2QWIN!9hJKpO(l-y8nixVr5^HI`I_c$8eH8!Sf|9eV+u2S7_<^f)-V4Z zM9yq>tF%mbUp2KKFoD&<4te! zXQuD#$P9E5_+z{)0|h^)y*8jjm8V<9H<`44leg#mwJM{^O%cIaMr5wxwc@RgKo$g| z0USu>QoDlcda=*zAkpeC5d73Gvo;~ciPn6tb zsU$Lpw=B8V@zy_9BYJGmXH_xKq?EU1U4PfsBxk!wz=v($F5danE?O?!utpeMzz$%> zAz7B$RLzL_)!~4w_zLci>Y||ht1crkLFOkCtofof5-*?Gms*=hkUkKr5#s@)qHEE| zHTdfBEnDQ^31w@clOo6w_{;c%g1fmDdU#8NFfQ>tYv`^*fq;`8I`ChSQaWx`@V9C% zalDsx-U-fp_|R>y?F^LgsJ0=)>=oC~)W%Dw&U@}W-;0ABs-aO!D+NaD<#Vrx<%BJ+k005t#)%EIq3dNwz9jTq^rw8RPu}TOG zv^S}@IWC5Z`Viv2aQ!btFkhY(Fpw(0Q_~5a)N=DP*s9DfV<1N%rE#8;V}hDm=(`cY zJetWaabaC)=3o zLj4zHhEm(ZAy9ua;5VB^@j*WTEt|o}r`bc$D7HX~=_b14*dF7zuT-n+ONBIjY!_O- z(N)9e264-`LF@yEBqh&#svhBG_BeB-9yTOuTfCZyvNgl^N{vCa4e^9WPi(7}hO-Ya zwf?rfGI<=}6eno&^TUBC;PKvn2C%`!?O4&x7}*?V)L~CYc}9x2{S_PgXZA5#SFBcJ z%D^+o2NmZ<{qJ8|*I7(qAn>NnZiP5kJ^am{1E`r;j6Yn(6{@suVy&vrWe`h|r)*Ke zU|oa`PtEvITP;?kC8AXPhK{i!HpYE0y0sI1t9kcG0ibn1f+0LV&(tozBJFZ#_T+k< zq1=|;i+;O!^*XoC<$#aZrXTNe`%Ou6rb+wWJfkS&ZcM7=e_d(B!yb`zt~R(f`U14F zGCrz2fSV$rX$DFcvOt=e>M?RtGa0(BCKu6N#Q;={Ua@B3#uc9$;f9L%_n1`sTXON| znPTS|JEq7C6Nd?2v(}i!IPID~adb=%G5`bt3simRSo&WfK2OyJl!GJ1wIlZ5 zk8zbbxy9(G*Ovo&d_gtSr`TU)mZrWUHTo_XBp zfEB|E9Sjd(*^I9|OEp@)B^M*XtlfTU|0Kf*l;pP(k*@%;{YU%a8ENst%k8fffphXq z#a_7VoKMDKB=+oT_1K`{a(6|Vc)2FEK|fR_Qd}Eo(|tJw`UaZft*XZfKviY29&2X$ zUhK_aDd)A~t=jtH+vsGU?~O^jz3SOil*O?rcQ3Q}&Th48A^-`LC1XVz>>K6}KFC18 z>#6XbA&+sb>XK#Q_tNsjD8e)GMhf~f_|pTNX!MNYIuMNSAEIjg=?(8F1l3JV6J3zp z(y`}ytyx2)jHsF4RplE45iO9hvv&m7%S|69tF#k2=v~luc>NsH&yGbi!j1Ru(7L# ztMJ!*N;hWSduDa;0(wEG65qZXu`=qE!j!}v5qUsM3zsv$tRobS5I#h>)B`zNu1_R4 z=3UbD$x@zs#ZG4t7G((Braz8*$i(bf&cg7JYTk$1YVf75=|_z7M%=n#K-Ji4#i4>M z&I*+MT%?~Z;adyCo|e+e1RjRj1h0UP>|@m;_oZa#gw4vIgf&4!pnP8CP7;V2>NH-H?gteg`k_d5G^u9gPOEwC3K zR09A}-a$-${PvW3XaiYY6PU0;I3a)pRyDR55y-5pXZ;_|JpE~ zgPBZItb9x*j{fG$41J(zUKxVx0rJkRRC!Yl9FM~lyLycP?308tNZq_Yi8xX_*_`>B~EH%)9lhIq|8@mX6!)O{GE-Oi+_6W%!$HQn{!6VqJu05RLE$o6mFdi`GQ z2DkTWWan8zrJ_`sV*xgg9)B-OZxkyoVyvXCxu^azqHh1L7Cy)ONyJ;t?ncmO-@ezA z6s&?=?ay07ZL3L7Yr9sZ96N;GI+wWGF1iaI6)T{M^50^Hy02Ib%;!+kGKUYPV+qwo z%ts9{e)HhAhfHQR+8*|jP2*d}N>f{G@fu zocY*F>uY;-yZQgQSK10-U<{_4X$$O?eVB#LC5u-}NDs!eH$AI+%72-RgR zYq8=sXJ9v`xGO`=<~XK%k2x~M-p(}Lq3i#;`tGPEv*&NrwO2rhpn!&^5Qu);JX=k%6GV~!TFkLZz$?lJ4A9aW9@*xtf+fF!r^ zH~koIPVYiPC+njNCr|QXET(*`w$yyZuF%vL|sH-xE1aE<}rPKh1`*dIrfyJ8BLL-X5!Kc$Q zSyJqycJspH^@OsWtk|&@zA|1R&8*Nz<&(OyBQEcdj-_&Uqyy(`&3(H=!~8W4zQ>mp z<$%Ft`Kc>+TE)lM#9cA?4q%e`~ey70g$cyhY+mg*LDhy zU;KB-+pgyzfY%)-~BJgKD!IkS@!lu z5<#Wh?y+AM+*(|8^w4>4bZY(DT_hq@QA)kWln<(M5Q+cmg;+g^6Q_`nc0;tLI z&JvB5SG(mXuwtmhNw(bMv15DvBub+Ej>E0HVmd&1xcNvV>B^5polS8tG5RIm?Z$`G zeEOiqh9Oa&CG$&x)yDRfg`LDJ$+5locnxYhw#dw+Sop5vx}<661X+&qbYNbgcItHs zi;cTYsC2iM<9l5DsaAdyT7punY51_}r zk@Us+_<@Ktb)O)Gds!Y#CAmxvqjUiHle|odqzub&s5z3$SPelm`c1fT`V+!DZdr0} z@|>n~t>Z;a;~M9pUC)a7oJ{D);NRVvhI_hd4vBf~FZ!CDPx3r(l=2H-SEP#|At8jO zpvdwBzRSbqwC}YI_P1V14G>*Z3-F+-h*j+ z=Ps2~Y;t9ivFG>?b@!z^%RVh_@zu~^JcVxAy3~f|FphNNUj_357=TL$(MB#f-OR@0 zbsVtnv@>!ouk$HJm|VXB0F4p>6bkUO-V&*9bOz#dH5A=!T_yYKX8Z3erpxth{~m}D z?Vcz*7{N_=KJkFo>bC5-!t1z(8VO@zLF>okBs)b#R2ALTQ<0+Qf{=;nE_0{9kmQCE z4LfyxM|oeQOZ?XMlg&!ogdPRquOl1r=AOmBfJR(*;>$V16~pdrUHr>5vH3zJCrL~| z=ssOlzs_=Xn_y80qvF@=SU1eW;6AEY8|=R9rV1QnYnV^qF@H-rhlE`#%q|n>Z&)R6 zG?|c+!i{O3*Fjl&wkJ!SHggSbcr%B~icIqC^eQ?C_i^iWP)kPgIQh(+M3VIN;A9p6 zGHgHS<|xl+IWoA>#WGPkZgc1rq@5@Ah@-sV7()Z|JWBL?!Cu!5xKOC{$fT}dD1y|R zMbm&64jK05wKE~1!{=u+7b~=9GoexVc`dp@b2E8q~j{1yFa zO^z)G3!8OD?pNIkDu_VWnEi53#2!kG0JIB$$E;XP*xz=qw{tBZpTArQQRJg5dHaY5|4HJ_>RMg%iVXJ2ysCCAXMUk=Dma&jqr@~lG!8;1wO)J4{lXte?lxlXU>zK( z8@Q;Ld4R^{EB{d2MbwQU8fY3f({-+lB5MEqocvIE0{AE5SrMVSw3fy_}hY!qzWsd1zsA$r8YXqV}zca4Md zLqv(=Tc1!*ovWv*8~SKp9%-mB3T^}qh`tbicpa0dYnqTIYC03!DHP734T^(*h*)a? z+vcf3K{$XO6*H)pbu&uab%WHAAFo8v*0Ucy)wKqXP;ss@W?`gc_3E{f-oj8z7L-U} zhsYw%W;y=U=>CzCzD~gn+rWlJo;hYC@N|aW~Q(`)a#+(~w7Tj^x~g#Y@gciLJGNcnOiE#KQr30?qa}Teeaf?p8}lET@P( zLOhomTY0$MQYw;Ytd=@*bOviS!KMQqD6( z>_JrACX{G2BelVB<(R*o9T?EC%9THCZ{)MLkV+L$)e4C$Uq zEu-bi3FuHe0i1DaSL^4459&CYBZ$#?PI=79DTE4~4Oct!akf8S#HMZPo)VZ!1S+a_ zoKRBfS9hVLvmMXE%Jet`w5_GjXHw`iVDkuHn9uCnia1Qg75|Y|8$U;|nvU6foe*f` z^H{XeN#Zut*_nRLtE+uR5DS?~ncf!XGs4L`Zon!@B`aapeurs1cDzjN(#8h^ovh zz$H6?ZMLX2XUTFD4ncJwrn$6z*iVHEUV6Z8;)0+$`SFYiY39UY8~f zHCp&IS_FczgT;h)(4UHt`eTW+;h{Go)zX6g3?kf!WYi`i(u+RS0^;4U4QWC%^cNQ+ z-X>}71bJ$j7&W+NZ~egYFuHYYSHBw1Q{@huhXqd$_!_WgLkmHHA~Bb6wum z^}S`088C)oP#*SE)bV1lD0)RAsfRZpwNX*$>3C+nu`QHA(6#=afi8ZP`<9)^{dP04 zeklx%ww~+zQ@TD;1!XEGofw@8qVBosU~WQ%1l5o5T>GM zm7|aw3#Nbx1z**^gMBi$MG#z4Upv;+49c~nyZ$$8chGAhIJbY~8@$StJ$|xLkrM11 zB4RYfv%=uQ-poO7*dgVO%1aRVl->ii7VPq!&^~)lZ}ILgJk(Fwdf7ZsCn9G2Fy2N$ zm33+I%!2G3u$cq1Kf_NgsVPDqDqLo^THLZ+NK5gPj;&aK2lZH9<71O)V~NpD=&SYY zY`AC3tv61pg5jzS1I_rQsRRss%+E>5c;gvO=-F||XF}~v0APYvjorv9bIozK-Vz`R zmEajwc2dHG8do8@}n}Y^1uvi^V0dzr@qfrA&(IFw#xbbRaNQh01djhF3ax1 z(~7^U6#wRd>AAmoPPGU+ku`g~xpIYjSX^@R0_hOl@I^w8Sib5Ad?ZO|me_K;$5Y-) zidy5H7asp$wGEY)7Dl}2)3c<_Ci`1ZjO1SS5$ChyDBPI6Q8EF{w7m{#5liT2BPyhC$`TH149n{mJkXyde)7qOdtN zI?tDngrbqm5x$GJ_ApA8GF{v0d%QdxL=O`bsN@4?<`-1vmmOpDo+;Qopp~k9v6#C^ z%rq!_?idO8czSFv`kTjF#GdL@F`x0OlLgrXvGb@+Y-9WV;omp4<>OT+dsC{as*SLN=8tVnqwqYY=G}{+MQ$K++S&tMh z0hAiwPcNOz-zlmi;gXFA64c{Z`E;_cmJ(t!BR0vb?BuK}Yog@qL2Fonn-4DBvE6DB z_+~NGBG8f5{kFuP@L4R@Tl{+t*#Cv*P44nwB~pMVQBcIxp`EiOF(d zutu-QwSFj2{m^6>XNu3zA<_-zqEZwlB+A2KTygg;Xkcnm_`?UVB?p6rP-Er@jVNuw zV`YHz)&C;1#TKBNwGS+!e~kVxl8Ydd2Yy)$EQ*f0PXqNzxMOQo%3KSe=X{Z)Y{yk% zoL8CLi01|Is!rgvfT*=h0qvljACW<&#+8Tz_hm{J7+7Cxl|SBpb-znjZZi(d%!p*T4&ZwX-#T1B;fEzhcwQ zEdYSwb?sXAmS-<9(=KS$5w1^0swe*>D`rYu=V~O*M*GtSv2{T-;sQi7t|xk?)T+o} z-v=aSnVjjD1M^T4bH2rdMwBRh|7z#0SLGYmL-j1RA76&Cxm*w!+XSBuEGVUE^~~j# ztm1km1Mg_Yi6K(B!_1~+KPX@`{}~b7gJYI(R+e?@ z+pKDt*oK!kJ{e@~dsSAB0zH?sGYFs??f6Q4zo0cq60s(f$g1@4Muvp5E_fjy@{O_+ z4C-5mf47}9YM93dvArB@^*NI)EpFh^*qeD=#H&PwF1q-Jzrxv(-2Ue{Fyy;o0oIuO;Bu@(`V1ki$_im|EzbRv zd?UI3jW=Tt>ffrA{0l7q;lDh|$VcZ$fKtty6IO;s@%(l^@he3;8X{?&4x~OJ+zx+rd7Ua8 zOdE|@H4P2TQG_;eomC)G41)-ZEiXL(65DB=nK&EO&J`27YINg<3Yoj>L!0*ZZL$o5 zeQl-Ivky}X^r~x0?VCZie$^bQ$zBr_EL3a;BlUtf7HfN#HD!{odd$?L_7zCm1%i!a zaO}aN5@x=PJbt|KK=x@>c?*siOvQF3@A`Q&&r5`OG0t?DA}w9=ek9)l&;jiKdZ>$8 zyU8eu>QyyQSSE;n(twE7D%09=w)Rf1`OR{NFdu;elH|8Qo$0o3ld41*)ixt}24hsV ze;A2-HteOTS1kNu`w*q&H)psrYH49Cjl2Itfp+rY$&5zn#-8x(Ay>#h9}8JN7Z}ab zm0sON_Pf5+$KIajn#bxd%=s+vAQzmtz-etp`;Tdj7P1oqfGYceDgGTr88qeAZ+Cm^ zEkT^YyNpwlS6zYXkX>gY+4ri0)weZ7(O-TJp+z4}#2Fj4a=7IE4^|x$Nk6;rmdu!a zvYB;M9fSDbM$MrfbPQenOir~6O=_@{KN4nM3g6OP{v0dno$j*gj*pR|8!Cd>)Oofd z0W*u}^_X4K5BaOYzt$Jb9cn*fQAg5fR?kdK2rWK2n}4(EOdxIG-`7D|q*@jS(gtM> zTw9)apo&rXNHUJi1SVU5y5(niA9W(Rr*Ds?1>he9w5ee3Ogo0H02Z3!bpFW-Vm+#e z`tUV%MKg9T7BUdG;iBQK-Rp*yt{H0VVqSTBsz^2=_P63*;!vm^x=}(!o&p_h&ow!7 zz&*=c{q&z~5h4gdFzy&g6Jl%SzLX;1Y`1TLKMaDvI*1p@gChg+Jl};v8QYaQmFrIO z`7Q-+Iv4~MbY9P(mnM8GYKo$S3O-_>I!TSW!=BNb=d@0)}PKAqi);Dv?Z@w4Q z`B1{pF5KwdP%T<<@&x*#k6u{$#HnRPY}<%IxMun^XZsv z>x33bzBRCw>?WZ4_Er;!bcIqMKxZz!UQ5p6#>kxwyCJB+zS@0koj zBPa@0`sb=P$0uliP{n~Cm3KJivy#Ibtlu{NO^VzaucKX)--%v_bTWD+K%%SXpTdfn zQ7=u6Kq~8aM&cnh{b-l&#jNxh^!kXzvLc2&A!j+42**C_x912fX14x-`5e@VV_bWT zg>Rh5AgQc16G967GB7#NE;Zk2K^M6q+?IQ~)-)ZMeAVI^M0q+e;zRpCiF;R@ns%x# z@$NIVL%O6Kb-|~g#D?=f1v5Dwg&?vp;FF?0%QV8~jLklMSz{MV+-M>R|KE`EM@(E; zZy3b#aDYq{E+m%Gr=5i)w~7bW2uEPC$pdrC(aYADGBVE3vB<9u_gM+57TnW0;~5O! zZkKm^bqe*({#&z>zalV$c+h9VAWNaTFVJ+tbO~cHl*gOQP+2&oI9OM;w1<{ z83P8q-hn`P1;)>DHVaGs*hnbdwTk}<*cyTXfr)zEJyj)($QSdVaEBEOoj;54AHrGA z>Ipq4l@jKT`jL2vFJF@5TqfdA$fr+JJ7Z3n@M;=Y(TAjpM@9@8H@&M(o-w7je;69X zvan<8q36MN*Q&X~G_GECXlHopl3+>>PAn$E_;ODl_6Af>_s|a*+q6(0l7jUomm6wz z{{?EMRCL55AuZpj)MIN5!&UvCTAYX7j}g-U*VYy7F9u^1OfSz?BWl!K!R;iaBBoKU9SVm}X7V^~Qh3UwlAk zIx^P3*_B}^HkiV4tmSa@gc-m#peJJJg;-71lAGZ7<`#k93w~1t*)$!2q43p3WTbBV zjA!-jE>|S<#WZXH>9{`h%cuPQ;J9Xv++ShhI$ueEBBj;Z#R!N>ICQs zkz6udFV;@fr4}j5Z43|mYgyMi_)4NU5oN+h8#EE5T@E?otNF3^Gk{_NWM{>!c5yXV z436W}CP^l&HH37L%ARIrN*0T}?4O7F%5|uIobf|BN2IfV;e2i;TwH~Cx6IzWAb1te zhL|3+xd)N1Ur|_$jhVMMnI_sy%HGj0Er3Yd2%yF_;~LTnCBUr)(L}Lnpe9a)?UWC5 z{mF~B7Su^ufq8sVnA_T=hXE`Z4PNOCYh{jI?24aL7R9Di^n1zsv09+7F#pPIlf{@t zR0;G@X9=INDpaO#i(fb_A9KlaYc07^)SBNd?$UVNWh(Bx;v^8kh!VBkABuWI3|y!6 zQsK0NW%b`Y+VnwG?2`1m(rlvEDF*>!pyZ;>jR$E(Lm6U3V+>-VTEC1-7s}(Z+g`mvYW`V;Mzo~+2>kg%Ny$mYthP~Cs zv35nGp50+#4VZh%&S4ACTIi1JxtgG7_>A=cSW0ZII1^{j||7d?k6- z;9%TPLte)7aU@N1jwCOK*EvLzgXLucgrs|)PhMP*Sb&#Vh|^&E1jAza zjOjx6rmHh-!!49XEu7cLGWVG~9cmANDkQ(rUBKp&V%5zqmWPppt)5s)sFnv*$Z*LS zuPy+x7Tj0I|D+e7Dn*yvr$a3nNJU|bQ0Tq?1=Kw7SSMsK_-5W!vXUtfYam`h4!nhCm@46N7;T$4^?V#h~#E)K4uj`0k8*8A59#Z=*}c7mPWf_qv4_ zfYfQh(G$je!u?KsSuV@{D()0%%va#;6nv)UtJ)Fx#-BQ^R*$T2pMJn!kJWvjqbJ=1rS6!-?rX zo`ueY+1=Z$a_x82wcn#YzK@jeuG!7hMcv~4z1mk-h3L5T^C2!LiVIKCDfQP>=;GB&KW}WRk^=+-Bym^gncAE|6f{$)SArE35oXXxHZYqO|BRN=+`BPB*X|`3=w#I zI^LzpxzwZk&fc0&q)rkwU)&A5*U{HZch-ujc6{%A*`spT{=*S3+cm0mfI)y zi@guNE~Ghf(qQo_dry+p83Om?&dt9PHLjly9EqPUo1$J-lw4S7F#7bxMlty*RWoR5 z_Ipc`y2ttWp(s)_G!hbSE7-B|z4o3{QF10Eh;o=tZS zDEx2p?~ng{|6d5UXz{FXbDI>%i~Zc~Rxtahx7y8j{;+q!yOr-B^Ow6a-u)U|*j2$d z?#ZCqi+8y&X5?u*s$I@hogB`+`G>W z>z6Xb3wS?Al}7iv4TZ3f^Ys$&o_Mxxf$ae&>o*?oo{pZpbnU?Z?(jX{{QG}fW6M8V zV~g6*ieu#u8RW^MK=V`ir^@Z3$4X=M~`J9^4-^Y8m#53gO@pM|@M>bdu4=jK*l9xTuG zi0H>=n=ZNTz8$!$AfY-FYv64D)@Qi1?BRHkWMQ66w|VF0Y2PgwLPrY)c&vEX+ew)1 zn?CLSUFcdm&*neVH^0YIOY>0=f5_F^vO4ID%N>mCp3xuAFKkX5;UV5Xe%MN+HeFsO z+raB)Xz9y`Z@sq-h}6fk1h(1Rq#w>r_1N~!+bpA)xAe$_ALy`iFoe5O?>#4 zXrMFp#8A2>#q;$d#%0CKKq=* zddGS%YOj8Xr#lK|WF(E+j{4VUeGJ8|cgFQ}C~6bxCn$D9q1Jo1Bzgn|`K!yy`Uaw% z-TYkeXjeZU*$`)cSvm9(S(Ju$h`+PzX?)Or7yKztUro`kRn?;VJ>4`#?Uc-pnEC7C zJvpb%BiWT$sUoHm6w+R37No9 z-yr7@8Q(y$9~$)VfvyBk{~%94-~EV2XBWRSL7Jj~bi)N7e>1bc75`hde0&hUSki$( zSp2_W{9EZjn^1qeEEXT=cZT4K2XV0KfFD7&hu%E&1w;$>WpD7wn1I3H0_z`MIC%d05;(DU!w8|bU3 zs;a3dD=Hn+k(1NcIi_cztD~=|B4?ndr*}kNakPM2d$|?#+WRAG0s>&!SDJsgixVzwGTvb(7T=7aOZt^Y)qOt%{7D=6d zq|%Qf$WLVV?~VZne|IgsFZ3q@be#1G6ep`Ypxj&(5p@x@>3{#({IAcJzdzrb zZ{D;CYT^5L#s79^{RN79`=%{Fz1^~j8?~8x(-!Vc>vgDd0EXJU1%CeifXwEt+t_x3 zMHEyZpYL^>HgEX}YPRp#`3q{(=AX7~`)TW@pLT58#)f#gi`#kg?#X~H2jq@fCI56j z=fT#Rmfk6Of~bzmHtdCz+=nj}ba}+AT~qaJ_Pl>ot5~XZh8ql^z?q-mvvu>fEue*a z*XG?@4*Uc<`R<7T*;j5aMnQ2Yr=RxQ8FOBCP`dsKontN;grGJ2X zA?ic{bsEzsH1D@kGOqrMed(E_S*i17vtBl&;npVw)GVpC+Ky#kk-gd0^VfC{3~8V8 z&hF_bNVAvfoNLIp7qu(M;`cN&Oh^+;mWr{YatBYThds5T$!^>xmFl(z6~@nWm>&ZzX`CF)XfqPFRJ+eCyCnhtSkI%c#kb-`x6Gku;z4h5OvkQOy}YW z1Bo7yxTXQha)5$J?X1y&V5F>FXOyI<&hvFtIf=Jr{IP`X>Ep>KUXtlEM5o6z+MA|t zq%Z3z3F^wv>{A3aAHl!;?qcf{N7dND2xZFx7fK-7|5eJ&@`JiAav z|28mnZN{wqXAe^Llz%DaYaNb9KaBliuIT4n?MTW2C}QAv76QKc-v1BMG``H`HqYfB zV;^?B)NXavqosiQ_Tq(h>Z*-RmXMan>A~r+sRZWiHKYf=8e0|_h^&1a6Hyob#%3K= zYA~GJWW?*Ril_b><|ymh+xw+?r5jk}YF#R`NIBIz!ewNp*kWw0uh?oPwbL_ySC*Bk zsOT|n&f)m@qJ<-t-~HCwPkdDLALD?t_5NJad^ay2#;npR#(pWe&`7Pung4^)zUwQF zJq?3v9qTCB50N`Ga<%!&=hjgJ6SRjuVdQmGQ@f$e8+)su5vS#6d+$n>DN9#`3Kzz8 zE3NPXVV|g^$gq<+A}&onzdBLt0=XO zGKd+lA9JuZKPg3@d8!3DG#wgoYUJBG>be~|P%C*dtkPC0U#cL>vw*CZFNOSlj=!EN z_FP(1>~s5+9lQ3`5$`>mOY9eO-qX18ob}CD%W^vEbv_Ht@u7M>j+S)TC(+Vx-4E6h zm}fs19R6@-4_Os=sBh@4`fvXks)T5d!?gn@l*BC^(4Bm9WyKba?2m6sM@5{f&`4Yp zVUv|Dsf}x2`t@63^;i}9WMMSpRq%u2X%y2RzrRD!>rrjrOME|jj5|ZCJE8kv6m2YY5vs%3Rew9#+E`q%6~4Km@R6u9i_7EXwwnCo0pI){F{hwh(MH3>h{oS1 zKOfFLM0emx=9`ytk)5#O#&hqXa(kMH@a(bTjv~ZgUM45+Ijq0hNF+{v{7+=T=JQ`x zDIF~WpXM3khPL@18Q076!y1~?G(&|VML43aQwBuZBqB*CdDLg><8!=oB@h4oM-{!$ zi2RxH=(FREcm@w61u2pyk_mfY14kEI^ei7+@$9jAt{3|Ai~s*4yQwkDi;B&%@+!{P zE6B34wY75*74@;T-O?Fu@yPn)lZuIC>GmFjYp)6oPCt`on3IP}zf6TNNsARxgw~e2 z9)GJ{I37Ltd$N@~qg*n9-5zmQM)JxlvYyvw(MB<~U7vF$Puh#3cf~X59=Qs8tat_$ z;Va{1NXLn5S%&_9I#KM5zwL#xK264SCH9q8XHQ#IS(`GtbDI-hJzJ2dHX1eAYWbzV?C_

c0Zo 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

Fi&nXKR3 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