Compare commits
211 Commits
c7de08ca49
...
dev
| Author | SHA1 | Date | |
|---|---|---|---|
| f6f4bfa2ab | |||
| f625537b6f | |||
| 794d5e810d | |||
| a5c0985093 | |||
| 70b481480f | |||
| a37e009109 | |||
| 191ceaca36 | |||
| 53ec69d27c | |||
| 26f29e4353 | |||
| e1f239d6ee | |||
| 355abb1add | |||
| a3795dd267 | |||
| 90ffcd090c | |||
| acb52aef73 | |||
| fa04e5275f | |||
| 0288c05e2b | |||
| 9c96d8c253 | |||
| 423394a9d9 | |||
| 3b0e1f6524 | |||
| c57eec05c9 | |||
| 197f910b82 | |||
| a940f2ff0d | |||
| 66a1170221 | |||
| 5f403710d1 | |||
| 529fb3fc5d | |||
| cae627f0b0 | |||
| 5ff75a4a80 | |||
| 80deab3c42 | |||
| 6030998018 | |||
| abaff023cd | |||
| 4dbe424f84 | |||
| 7488a9f8c8 | |||
| b759ce2d5a | |||
| 84c88ba406 | |||
| b2f7612452 | |||
| 09769542f9 | |||
| a90d7c06a9 | |||
| 4ce12a5428 | |||
| 7ba65e73ae | |||
| 4a58a47a8e | |||
| e8506e1b4e | |||
| 61805df66b | |||
| e98d426324 | |||
| 6c062ce3c8 | |||
| 8f47d4fb65 | |||
| 63e507d0ff | |||
| 5a16466766 | |||
| 4b0c923ec0 | |||
| 87f67aa24a | |||
| 93e48f3cbc | |||
| baadc67fcf | |||
| bc16aea3a4 | |||
| 8041e3eb4d | |||
| 3e4c0b2ab5 | |||
| 960c9ba5b0 | |||
| 3efec91d74 | |||
| 9e48c72245 | |||
| 4dac9a5eec | |||
| bf25c67f1e | |||
| 1245899c07 | |||
| 66f25b6937 | |||
| 2d44edf5ab | |||
| 7062c756b6 | |||
| 7c173c9195 | |||
| e070ab15ac | |||
| 400498c6fa | |||
| 3c5331c2d3 | |||
| 800b7ba493 | |||
| bc2689d1cf | |||
| ce9be11c0a | |||
| 43ba192496 | |||
| ee410315ee | |||
| f3c78f0575 | |||
| b98a4a5364 | |||
| 68aad97e46 | |||
| 8de6676b40 | |||
| 7a345a6c80 | |||
| e3adbeeea4 | |||
| b0db3534f2 | |||
| 6f646264dc | |||
| d83940b47d | |||
| 4996d02f71 | |||
| da6f47f439 | |||
| 54fbc3f4b2 | |||
| 6e2c54eccf | |||
| 89166100e3 | |||
| 3d28a1ee86 | |||
| 034d5faa0d | |||
| f58038ab90 | |||
| ad25cc67ec | |||
| 384d1e8aec | |||
| b0a1007a76 | |||
| 0419ba7847 | |||
| c52dbca9a1 | |||
| 43153a9fdf | |||
| c23dd1ff4c | |||
| 67d9528614 | |||
| 1151744247 | |||
| 9dd3fbe47d | |||
| f42e155f2b | |||
| f5a084684a | |||
| b22adac365 | |||
| a329720f1c | |||
| e03f4a015a | |||
| 94f677ae6f | |||
| 8afdfc87c5 | |||
| cc3739f701 | |||
| dbee8dabb1 | |||
| cfb7acfddb | |||
| e14072e829 | |||
| f80f8d8c7e | |||
| e9b3dc1da9 | |||
| 63137188e5 | |||
|
|
07031d693c | ||
| 531955bdc7 | |||
| 2cfa314c3c | |||
| cfe37ec57d | |||
| 995733d6e3 | |||
| aec622831d | |||
| e8f092a88b | |||
| a1da574c04 | |||
| 08e28d14c9 | |||
| cffd810184 | |||
| 774ee85f8d | |||
| a1c6db28a8 | |||
| bcd0c8900d | |||
| f3e3b608f1 | |||
| a839114cdf | |||
| a315a52791 | |||
| fc0d9f07c0 | |||
| 26b4b77271 | |||
| 09cfe8938f | |||
| 8989d13928 | |||
| a39c96cc61 | |||
| db8beca609 | |||
| 94e7881aa0 | |||
| e4a07e2c88 | |||
| 1414003e3f | |||
| b9f4804d74 | |||
| e2b63f6706 | |||
| 393f165095 | |||
| 547e4e8f9f | |||
| ffeab227c9 | |||
| 4452398773 | |||
| 454f4711f3 | |||
| 46c456af2c | |||
| 2f459e982a | |||
| b8d934fa28 | |||
| 1107c01d5c | |||
| b8ca85c20e | |||
| a29cf29041 | |||
| 05bf1d59df | |||
| 2cf129d0b9 | |||
| 488cd72f2c | |||
| 6fab07fd79 | |||
| 382b2d122c | |||
| b4beac26a7 | |||
| 86d78fdd06 | |||
| 92ad985355 | |||
| eaf94f0ceb | |||
| acee0ccec5 | |||
| fddea097d3 | |||
| 7dc25532a3 | |||
| 19721cf5da | |||
| a6d9d1595a | |||
| 5e0d5f4b91 | |||
| 09a6de1544 | |||
| a20b502b70 | |||
| 8bb8013f67 | |||
| 94c7c54cc1 | |||
| c257d22618 | |||
| b57dbb75e8 | |||
| 9781f33440 | |||
| 45b4236748 | |||
| 8b0c82c3ca | |||
| 5518a99ee9 | |||
| 63124a350e | |||
| 379db1cb39 | |||
| e824a258ea | |||
| cd2985a170 | |||
| a19b4fe212 | |||
| 3bfb7d040d | |||
| 7dab17905b | |||
| a3a3565189 | |||
| 3f82f42e1e | |||
| 0de00c5a34 | |||
| 0daee07086 | |||
| 2619539415 | |||
| 9b01d79955 | |||
| 17f21a25bb | |||
| 8c523e8c65 | |||
| d7956e24a6 | |||
| eaafbec1ea | |||
| 4ba5f6492f | |||
| a8c4d22b51 | |||
| 92f08b5174 | |||
| d86a531495 | |||
| f894cec38b | |||
| 3b10299249 | |||
| 2098032d81 | |||
| 61161e6335 | |||
| 327681d3db | |||
| 68c5bfe275 | |||
| c3f116fbc3 | |||
| b8b3c19bfc | |||
| e95062c6eb | |||
| 2f4c472a41 | |||
| 3f0f1d4408 | |||
| 225a958cb4 | |||
| a42f3c7e71 | |||
| ddf8428884 |
4
.gitignore
vendored
@@ -415,3 +415,7 @@ fabric.properties
|
||||
# Android studio 3.1+ serialized cache file
|
||||
.idea/caches/build_file_checksums.ser
|
||||
|
||||
# packages for node
|
||||
package.json
|
||||
package-lock.json
|
||||
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
from django.http import QueryDict
|
||||
from django.template.loader import render_to_string
|
||||
from SubscribesApp.funcs import check_option_in_cur_user_subscribe
|
||||
|
||||
@@ -56,7 +57,7 @@ def get_profile_page_content_html(request, page_name, data):
|
||||
return None
|
||||
|
||||
|
||||
def get_profile_change_page_content_html(request):
|
||||
def get_profile_change_page_content_html(request, data=None):
|
||||
|
||||
init_Dict = {
|
||||
'firstname': request.user.first_name,
|
||||
@@ -66,6 +67,25 @@ def get_profile_change_page_content_html(request):
|
||||
'country': request.user.user_profile.country,
|
||||
'city': request.user.user_profile.city,
|
||||
}
|
||||
|
||||
if data:
|
||||
if type(data) == QueryDict:
|
||||
data = data.dict()
|
||||
init_Dict.update(data)
|
||||
# if 'firstname' in data:
|
||||
# init_Dict.update({'first_name': data['firstname']})
|
||||
# if 'lastname' in data:
|
||||
# init_Dict.update({'last_name': data['lastname']})
|
||||
# if 'email' in data:
|
||||
# init_Dict.update({'email': data['email']})
|
||||
# init_Dict.update({'username': data['email']})
|
||||
# if 'country' in data:
|
||||
# init_Dict.update({'country': data['country']})
|
||||
# if 'city' in data:
|
||||
# init_Dict.update({'city': data['city']})
|
||||
# if 'tel' in data:
|
||||
# init_Dict.update({'tel': data['tel']})
|
||||
|
||||
from .forms import RegistrationForm
|
||||
form = RegistrationForm(initial=init_Dict)
|
||||
|
||||
|
||||
@@ -23,6 +23,8 @@ urlpatterns = [
|
||||
|
||||
path('support_tickets/', support_tickets_ajax, name='support_tickets_ajax'),
|
||||
|
||||
path('password_recovery/', password_recovery_ajax, name='password_recovery_ajax'),
|
||||
path('password_recovery_confirm/', password_recovery_confirm_ajax, name='password_recovery_confirm_ajax'),
|
||||
|
||||
path('change_profile/', change_profile_ajax, name='change_profile_ajax'),
|
||||
path('change_profile_confirm/', change_profile_confirm_ajax, name='change_profile_confirm_ajax'),
|
||||
|
||||
@@ -31,6 +31,125 @@ from GeneralApp.funcs import get_and_set_lang
|
||||
# html = render_to_string('blocks/profile/b_subscribe.html', Dict, request=request)
|
||||
# return JsonResponse({'html': html}, status=200)
|
||||
|
||||
def password_recovery_confirm_ajax(request):
|
||||
if request.method != 'POST':
|
||||
raise Http404
|
||||
|
||||
if not 'pass' in request.POST or not 'pass_confirm' in request.POST or not 'user_id' in request.POST:
|
||||
raise Http404
|
||||
|
||||
lang = get_and_set_lang(request)
|
||||
|
||||
try:
|
||||
|
||||
if not request.POST['pass'] or request.POST['pass'] != request.POST['pass_confirm']:
|
||||
return JsonResponse({
|
||||
'status': 'error',
|
||||
'error': _('Пароли не совпадают')
|
||||
}, status=400)
|
||||
|
||||
user = User.objects.get(id=request.POST['user_id'])
|
||||
user.set_password(request.POST['pass'])
|
||||
user.user_profile.authMailCode = None
|
||||
user.user_profile.save(update_fields=['authMailCode'])
|
||||
user.is_active = True
|
||||
user.save()
|
||||
|
||||
return JsonResponse({
|
||||
'status': 'success',
|
||||
'message': _('Пароль был успешно изменен')
|
||||
})
|
||||
|
||||
except Exception as e:
|
||||
return JsonResponse({
|
||||
'status': 'error',
|
||||
'error': str(e)
|
||||
}, status=400)
|
||||
|
||||
def password_recovery_ajax(request):
|
||||
if request.method != 'POST':
|
||||
raise Http404
|
||||
|
||||
lang = get_and_set_lang(request)
|
||||
|
||||
try:
|
||||
email = request.POST['email']
|
||||
|
||||
try:
|
||||
user = User.objects.get(email=email)
|
||||
except User.DoesNotExist:
|
||||
msg = _('Пользователь с указанным email не зарегистрирован на сайте')
|
||||
return JsonResponse({
|
||||
'status': 'error',
|
||||
'error': msg
|
||||
}, status=400)
|
||||
|
||||
user.user_profile.authMailCode = uuid1().hex
|
||||
user.user_profile.save(update_fields=['authMailCode'])
|
||||
|
||||
from GeneralApp.funcs_options import get_options_by_opt_types, get_mail_send_options
|
||||
sets = get_options_by_opt_types(['domain', 'project_name'], only_vals=True)
|
||||
|
||||
subject = _('Изменение пароля учетной записи на сайте tripwb.com')
|
||||
|
||||
mail_txt = _('Вы получили это письмо потому что '
|
||||
'был произведен запрос на изменение пароля '
|
||||
'для данного email на сайте tripwb.com.<br>'
|
||||
'<br>'
|
||||
'Если Вы не выполняли запрос - просто проигнорируйте это письмо.<br><br>'
|
||||
'Если же это были Вы и Вам требуется изменить пароль от учетной записи - '
|
||||
'перейдите по ссылке, указанной ниже.<br><br>')
|
||||
link = sets["domain"] + f'/profile/reset_password/{str(user.id)}/{user.user_profile.authMailCode}/'
|
||||
link_str = f'<a href="{link}">ИЗМЕНИТЬ ПАРОЛЬ</a><br><br>'
|
||||
|
||||
sign_txt = _('Спасибо за то, что вы с нами!<br>'
|
||||
'С уважением,<br>'
|
||||
'Команда Trip With Bonus.<br>')
|
||||
|
||||
Dict = {
|
||||
'logo': f'{sets["domain"]}/static/img/svg/LogoMobile.svg',
|
||||
'project_name': sets['project_name'],
|
||||
'message_title': subject,
|
||||
'message_text': f'<p style="padding-left: 20px; line-height: 30px;">'
|
||||
f'{mail_txt}'
|
||||
f'{link_str}'
|
||||
f'{sign_txt}'
|
||||
f'</p>'
|
||||
}
|
||||
|
||||
html = render_to_string('mail/m_request_offer.html', Dict, request)
|
||||
from BaseModels.mailSender import admin_send_mail_by_SMTPlib
|
||||
mail_sets = get_mail_send_options()
|
||||
to = [email]
|
||||
res = admin_send_mail_by_SMTPlib(
|
||||
mail_sets,
|
||||
subject=subject,
|
||||
from_email=mail_sets['sender_email'], to=to,
|
||||
html_content=html
|
||||
)
|
||||
to = ['web@syncsystems.net']
|
||||
res = admin_send_mail_by_SMTPlib(
|
||||
mail_sets,
|
||||
subject=subject,
|
||||
from_email=mail_sets['sender_email'], to=to,
|
||||
html_content=html
|
||||
)
|
||||
|
||||
return JsonResponse({
|
||||
'status': 'sended',
|
||||
'message': _('На email') + ' ' + email + ' '
|
||||
+ _('отправлено письмо с инструкциями для восстановления пароля. Если не пришло письмо, проверьте папку СПАМ')
|
||||
})
|
||||
|
||||
except Exception as e:
|
||||
return JsonResponse({
|
||||
'status': 'error',
|
||||
'error': str(e)
|
||||
}, status=400)
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
def mailing_subscribe_ajax(request):
|
||||
if request.method != 'POST':
|
||||
@@ -195,7 +314,11 @@ def send_message_ajax(request):
|
||||
html = render_to_string('mail/m_request_offer.html', Dict, request)
|
||||
from BaseModels.mailSender import admin_send_mail_by_SMTPlib
|
||||
mail_sets = get_mail_send_options()
|
||||
to = [mail_sets['sender_email']]
|
||||
opts = get_options_by_opt_types('support_email', only_vals=True)
|
||||
if opts and 'support_email' in opts:
|
||||
to = [opts['support_email']]
|
||||
else:
|
||||
to = [mail_sets['sender_email']]
|
||||
res = admin_send_mail_by_SMTPlib(
|
||||
mail_sets,
|
||||
subject=subject,
|
||||
@@ -383,7 +506,7 @@ def change_profile_confirm_ajax(request):
|
||||
if data_for_save:
|
||||
user_profiles.update(**data_for_save)
|
||||
|
||||
html = get_profile_change_page_content_html(request)
|
||||
html = get_profile_change_page_content_html(request, data)
|
||||
from GeneralApp.funcs import get_add_to_ajax_response_Dict
|
||||
res_Dict = {'html': html}
|
||||
res_Dict.update(get_add_to_ajax_response_Dict(request.user))
|
||||
@@ -592,6 +715,7 @@ def registration_ajax(request):
|
||||
}
|
||||
|
||||
res = send_check_email_after_registration(mail_Dict, user)
|
||||
print(str(res))
|
||||
# res = send_registration_mail(mail_Dict, user)
|
||||
|
||||
res_Dict = {
|
||||
|
||||
@@ -8,6 +8,9 @@ from django.contrib.auth import views
|
||||
urlpatterns = [
|
||||
|
||||
path('registration/', registration_View, name='registration_page'),
|
||||
|
||||
path('reset_password/<int:user_id>/<str:token>/',
|
||||
recovery_password_page_View, name='recovery_password_page'),
|
||||
# path('', user_profile_View, name='user_profile'),
|
||||
# path('page/chat/<int:user_id>/', chat_w_user_View, name='chat_w_user'),
|
||||
# path('page/chat/', chat_w_user_View, name='chat_w_user_wo_user_id'),
|
||||
|
||||
@@ -278,12 +278,19 @@ def decode_get_param(data):
|
||||
|
||||
|
||||
|
||||
def recovery_password_user(request, uidb64=None, token=None):
|
||||
from django.contrib.auth.views import PasswordResetConfirmView
|
||||
def recovery_password_page_View(request, user_id, token):
|
||||
try:
|
||||
user = User.objects.get(id=user_id, user_profile__authMailCode=token)
|
||||
except User.DoesNotExist:
|
||||
raise Http404
|
||||
|
||||
return PasswordResetConfirmView(request=request, uidb64=uidb64, token=token
|
||||
)
|
||||
Dict = {
|
||||
'user': user
|
||||
}
|
||||
|
||||
t = loader.get_template('pages/profile/p_password_recovery.html')
|
||||
response = get_inter_http_response(t, Dict, request)
|
||||
return response
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -29,12 +29,31 @@ class BaseModel(models.Model):
|
||||
|
||||
json_data = models.JSONField(verbose_name=_('Дополнительные данные'), default=dict, blank=True)
|
||||
|
||||
media_items = GenericRelation('GeneralApp.MediaItem', related_query_name='grel_%(class)s_for_media_item')
|
||||
|
||||
def __str__(self):
|
||||
if self.name:
|
||||
return self.name
|
||||
else:
|
||||
return str(self.id)
|
||||
|
||||
def get_media_items(self, exclude_kwargs=None):
|
||||
if not exclude_kwargs:
|
||||
exclude_kwargs = {}
|
||||
return self.media_items.exclude(
|
||||
**exclude_kwargs
|
||||
).filter(
|
||||
enable=True
|
||||
).order_by('order')
|
||||
|
||||
def get_video_items(self):
|
||||
exclude_kwargs = {'video': None}
|
||||
return self.get_media_items(exclude_kwargs=exclude_kwargs)
|
||||
|
||||
def get_picture_items(self):
|
||||
exclude_kwargs = {'picture': None}
|
||||
return self.get_media_items(exclude_kwargs=exclude_kwargs)
|
||||
|
||||
def pop_node_by_name(self, node_name):
|
||||
if not self.json_data or not node_name in self.json_data:
|
||||
return None
|
||||
@@ -108,7 +127,6 @@ class BaseModelViewPage(BaseModel):
|
||||
FAQ_title = models.CharField(max_length=250, verbose_name=_(u'FAQ Заголовок'), null=True, blank=True)
|
||||
FAQ_items = GenericRelation('GeneralApp.FAQitem', related_query_name='grel_%(class)s_for_faq_item')
|
||||
|
||||
|
||||
class Meta:
|
||||
abstract = True
|
||||
|
||||
|
||||
@@ -145,8 +145,8 @@ def send_mail_by_SMTPlib(sets, subject, from_email, to_init, html_content, smtp_
|
||||
res = None
|
||||
|
||||
if type(to) in (list, tuple):
|
||||
if sets['sender_email'] in to:
|
||||
to.remove(sets['sender_email'])
|
||||
# if sets['sender_email'] in to:
|
||||
# to.remove(sets['sender_email'])
|
||||
|
||||
if len(to) > 1:
|
||||
to_str = u', '.join(to)
|
||||
|
||||
18
BillingApp/migrations/0006_alter_subscribeorder_currency.py
Normal file
@@ -0,0 +1,18 @@
|
||||
# Generated by Django 4.2.2 on 2024-07-12 17:23
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('BillingApp', '0005_subscribeorder_last_operation_status'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterField(
|
||||
model_name='subscribeorder',
|
||||
name='currency',
|
||||
field=models.CharField(default='KZT', max_length=3, verbose_name='Валюта'),
|
||||
),
|
||||
]
|
||||
@@ -3,6 +3,8 @@ from .models import *
|
||||
from django.contrib import admin
|
||||
from django.utils.translation import gettext as _
|
||||
|
||||
|
||||
|
||||
class Admin_StaticPage(Admin_Trans_BaseModelViewPage):
|
||||
|
||||
fieldsets = [
|
||||
|
||||
41
GeneralApp/migrations/0006_mediaitem.py
Normal file
@@ -0,0 +1,41 @@
|
||||
# Generated by Django 4.2.2 on 2024-11-15 14:50
|
||||
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('contenttypes', '0002_remove_content_type_name'),
|
||||
('GeneralApp', '0005_option_name_en_option_name_ru_option_prefix_en_and_more'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name='MediaItem',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('name', models.TextField(blank=True, help_text='Название', null=True, verbose_name='Название')),
|
||||
('name_ru', models.TextField(blank=True, help_text='Название', null=True, verbose_name='Название')),
|
||||
('name_en', models.TextField(blank=True, help_text='Название', null=True, verbose_name='Название')),
|
||||
('name_plural', models.TextField(blank=True, null=True, verbose_name='Название (множественное число)')),
|
||||
('order', models.IntegerField(blank=True, null=True, verbose_name='Очередность отображения')),
|
||||
('createDT', models.DateTimeField(auto_now_add=True, verbose_name='Дата и время создания')),
|
||||
('modifiedDT', models.DateTimeField(blank=True, null=True, verbose_name='Дата и время последнего изменения')),
|
||||
('enable', models.BooleanField(db_index=True, default=True, verbose_name='Включено')),
|
||||
('json_data', models.JSONField(blank=True, default=dict, verbose_name='Дополнительные данные')),
|
||||
('object_id', models.PositiveIntegerField()),
|
||||
('picture', models.ImageField(blank=True, null=True, upload_to='media/', verbose_name='Фото')),
|
||||
('video', models.FileField(blank=True, null=True, upload_to='media/video/', verbose_name='Видео')),
|
||||
('comment', models.TextField(blank=True, null=True, verbose_name='Комментарий')),
|
||||
('comment_ru', models.TextField(blank=True, null=True, verbose_name='Комментарий')),
|
||||
('comment_en', models.TextField(blank=True, null=True, verbose_name='Комментарий')),
|
||||
('content_type', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to='contenttypes.contenttype')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': 'Медиа элемент',
|
||||
'verbose_name_plural': 'Медиа элементы',
|
||||
},
|
||||
),
|
||||
]
|
||||
@@ -0,0 +1,23 @@
|
||||
# Generated by Django 4.2.2 on 2024-11-15 15:58
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('GeneralApp', '0006_mediaitem'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterField(
|
||||
model_name='mediaitem',
|
||||
name='picture',
|
||||
field=models.ImageField(blank=True, null=True, upload_to='uploads/', verbose_name='Фото'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='mediaitem',
|
||||
name='video',
|
||||
field=models.FileField(blank=True, null=True, upload_to='uploads/video/', verbose_name='Видео'),
|
||||
),
|
||||
]
|
||||
@@ -0,0 +1,23 @@
|
||||
# Generated by Django 4.2.2 on 2024-11-15 15:59
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('GeneralApp', '0007_alter_mediaitem_picture_alter_mediaitem_video'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterField(
|
||||
model_name='mediaitem',
|
||||
name='picture',
|
||||
field=models.ImageField(blank=True, null=True, upload_to='media_items/photo/', verbose_name='Фото'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='mediaitem',
|
||||
name='video',
|
||||
field=models.FileField(blank=True, null=True, upload_to='media_items/video/', verbose_name='Видео'),
|
||||
),
|
||||
]
|
||||
@@ -3,6 +3,26 @@ from BaseModels.base_models import BaseModelViewPage, BaseModel
|
||||
from django.utils.translation import gettext_lazy as _
|
||||
# from ckeditor.fields import RichTextField
|
||||
from ckeditor_uploader.fields import RichTextUploadingField
|
||||
from django.contrib.contenttypes.models import ContentType
|
||||
from django.contrib.contenttypes.fields import GenericForeignKey
|
||||
|
||||
|
||||
class MediaItem(BaseModel):
|
||||
|
||||
content_type = models.ForeignKey(ContentType, on_delete=models.SET_NULL, null=True)
|
||||
object_id = models.PositiveIntegerField()
|
||||
content_object = GenericForeignKey('content_type', 'object_id')
|
||||
|
||||
picture = models.ImageField(upload_to='media_items/photo/', verbose_name=_('Фото'), null=True, blank=True)
|
||||
video = models.FileField(upload_to='media_items/video/', verbose_name=_('Видео'), null=True, blank=True)
|
||||
|
||||
comment = models.TextField(verbose_name=_('Комментарий'), null=True, blank=True)
|
||||
|
||||
class Meta:
|
||||
verbose_name = _('Медиа элемент')
|
||||
verbose_name_plural = _('Медиа элементы')
|
||||
|
||||
|
||||
|
||||
class StaticPage(BaseModelViewPage):
|
||||
promo_header = models.BooleanField(verbose_name=_('Промо-хэдер'), default=False)
|
||||
@@ -29,9 +49,6 @@ class Option(BaseModel):
|
||||
|
||||
class FAQitem(BaseModel):
|
||||
|
||||
from django.contrib.contenttypes.models import ContentType
|
||||
from django.contrib.contenttypes.fields import GenericForeignKey
|
||||
|
||||
content_type = models.ForeignKey(ContentType, on_delete=models.SET_NULL, null=True)
|
||||
object_id = models.PositiveIntegerField()
|
||||
content_object = GenericForeignKey('content_type', 'object_id')
|
||||
|
||||
@@ -27,3 +27,9 @@ class FAQitem_TranslationOptions(TranslationOptions):
|
||||
)
|
||||
translator.register(FAQitem, FAQitem_TranslationOptions)
|
||||
|
||||
class MediaItem_TranslationOptions(TranslationOptions):
|
||||
fields = (
|
||||
'name', 'comment',
|
||||
)
|
||||
translator.register(MediaItem, MediaItem_TranslationOptions)
|
||||
|
||||
|
||||
@@ -6,6 +6,11 @@ from .views import *
|
||||
|
||||
urlpatterns = [
|
||||
path('', MainPage, name='main'),
|
||||
path('mover_landing_page/', LandingMoverPage, name='mover_landing_page'),
|
||||
path('customer_landing_page/', LandingCustomerPage, name='customer_landing_page'),
|
||||
|
||||
|
||||
path('page/<str:url>/', StaticPageView, name='static_page'),
|
||||
path('test_code', test_code, name='test_code'),
|
||||
path('generate_routes/<int:routes_count>/', generate_routes, name='generate_routes'),
|
||||
]
|
||||
@@ -1,8 +1,9 @@
|
||||
import json
|
||||
|
||||
from django.http import HttpResponse, Http404, FileResponse
|
||||
from django.http import HttpResponse, Http404, FileResponse, HttpResponseRedirect
|
||||
from django.template import loader, RequestContext
|
||||
from django.contrib.auth.decorators import login_required
|
||||
|
||||
from .models import *
|
||||
from django.conf import settings
|
||||
from .funcs import get_inter_http_response
|
||||
@@ -14,9 +15,9 @@ from django.views.decorators.csrf import csrf_exempt
|
||||
from webpush import send_user_notification
|
||||
import json
|
||||
from datetime import datetime, timedelta
|
||||
from django.urls import reverse
|
||||
|
||||
def test_code(request):
|
||||
|
||||
def generate_routes(request, routes_count):
|
||||
if (not request.user
|
||||
or not request.user.is_active
|
||||
or not request.user.is_authenticated
|
||||
@@ -36,8 +37,8 @@ def test_code(request):
|
||||
routes = [
|
||||
Route(
|
||||
type_transport='road',
|
||||
departure_DT=datetime(year=2024, month=9, day=1),
|
||||
arrival_DT=datetime(year=2024, month=9, day=3),
|
||||
departure_DT=datetime.now() + timedelta(days=7),
|
||||
arrival_DT=datetime.now() + timedelta(days=8),
|
||||
from_address_point=to_air.city.id,
|
||||
to_address_point=from_air.city.id,
|
||||
from_city=to_air.city,
|
||||
@@ -45,9 +46,60 @@ def test_code(request):
|
||||
weight=item,
|
||||
phone='0987654321',
|
||||
owner=request.user
|
||||
) for item in range(1000)
|
||||
) for item in range(routes_count)
|
||||
]
|
||||
|
||||
Route.objects.bulk_create(routes)
|
||||
|
||||
if res:
|
||||
if type(res) == str:
|
||||
return HttpResponse(res)
|
||||
else:
|
||||
return res
|
||||
|
||||
return HttpResponse('finished')
|
||||
|
||||
|
||||
|
||||
def test_code(request):
|
||||
|
||||
if (not request.user
|
||||
or not request.user.is_active
|
||||
or not request.user.is_authenticated
|
||||
or not request.user.is_staff
|
||||
):
|
||||
raise Http404
|
||||
|
||||
res = ''
|
||||
|
||||
from RoutesApp.search_matches import search_matches
|
||||
from RoutesApp.models import Route
|
||||
search_matches(Route.objects.filter(id=17158))
|
||||
|
||||
# from RoutesApp.funcs import get_city_by_type_transport_and_address_point
|
||||
# from RoutesApp.models import Route
|
||||
# from ReferenceDataApp.models import Airport, City
|
||||
#
|
||||
# res = None
|
||||
#
|
||||
# from_air = Airport.objects.get(iata_code='MSQ')
|
||||
# to_air = Airport.objects.get(iata_code='SVO')
|
||||
#
|
||||
# routes = [
|
||||
# Route(
|
||||
# type_transport='road',
|
||||
# departure_DT=datetime.now() + timedelta(days=7),
|
||||
# arrival_DT=datetime.now() + timedelta(days=8),
|
||||
# from_address_point=to_air.city.id,
|
||||
# to_address_point=from_air.city.id,
|
||||
# from_city=to_air.city,
|
||||
# to_city=from_air.city,
|
||||
# weight=item,
|
||||
# phone='0987654321',
|
||||
# owner=request.user
|
||||
# ) for item in range(100)
|
||||
# ]
|
||||
|
||||
# routes = [
|
||||
# Route(
|
||||
# type_transport='avia',
|
||||
@@ -62,8 +114,8 @@ def test_code(request):
|
||||
# owner = request.user
|
||||
# ) for item in range(1000)
|
||||
# ]
|
||||
|
||||
Route.objects.bulk_create(routes)
|
||||
#
|
||||
# Route.objects.bulk_create(routes)
|
||||
|
||||
|
||||
# from RoutesApp.search_matches import search_matches
|
||||
@@ -97,7 +149,52 @@ def Page404(request, exeption=None):
|
||||
except Exception as e:
|
||||
return HttpResponse(str(e))
|
||||
|
||||
def LandingMoverPage(request):
|
||||
|
||||
from .init_options import init_options
|
||||
init_options()
|
||||
|
||||
|
||||
print(f'LOCALE_PATHS = {str(settings.LOCALE_PATHS)}')
|
||||
|
||||
page, is_created = StaticPage.objects.get_or_create(url='landing_mover')
|
||||
|
||||
Dict = {
|
||||
'page': page,
|
||||
}
|
||||
|
||||
|
||||
|
||||
breadcrumbs_Dict = {
|
||||
}
|
||||
Dict.update({'breadcrumbs': breadcrumbs_Dict})
|
||||
|
||||
t = loader.get_template('pages/p_mover_landing_page.html')
|
||||
return get_inter_http_response(t, Dict, request)
|
||||
|
||||
|
||||
def LandingCustomerPage(request):
|
||||
|
||||
from .init_options import init_options
|
||||
init_options()
|
||||
|
||||
|
||||
print(f'LOCALE_PATHS = {str(settings.LOCALE_PATHS)}')
|
||||
|
||||
page, is_created = StaticPage.objects.get_or_create(url='landing_customer')
|
||||
|
||||
Dict = {
|
||||
'page': page,
|
||||
}
|
||||
|
||||
|
||||
|
||||
breadcrumbs_Dict = {
|
||||
}
|
||||
Dict.update({'breadcrumbs': breadcrumbs_Dict})
|
||||
|
||||
t = loader.get_template('pages/p_customer_landing_page.html')
|
||||
return get_inter_http_response(t, Dict, request)
|
||||
|
||||
|
||||
def MainPage(request):
|
||||
@@ -152,6 +249,12 @@ def StaticPageView(request, url):
|
||||
'route_form': RouteForm(),
|
||||
'owner_type': 'mover'
|
||||
})
|
||||
elif url in ['landing_customer', 'landing_mover']:
|
||||
raise Http404
|
||||
# return HttpResponseRedirect(reverse('customer_landing_page'))
|
||||
# elif url == 'landing_mover':
|
||||
# return HttpResponseRedirect(reverse('mover_landing_page'))
|
||||
|
||||
# elif url == 'works':
|
||||
# return WorksPage(request)
|
||||
elif url in ['main']:
|
||||
|
||||
@@ -3,20 +3,33 @@ from .models import *
|
||||
from django.contrib import admin
|
||||
|
||||
class Admin_Route(Admin_Trans_BaseModel):
|
||||
readonly_fields = ['highlight_end_DT', 'rising_DT']
|
||||
readonly_fields = [
|
||||
# 'highlight_end_DT',
|
||||
'rising_DT'
|
||||
]
|
||||
list_display = [
|
||||
'id', 'owner_type', 'receive_msg_by_email', 'type_transport', 'cargo_type',
|
||||
'id', 'owner_type',
|
||||
'rising_DT',
|
||||
'receive_msg_by_email', 'type_transport', 'cargo_type',
|
||||
'departure_DT', 'from_city', 'from_place',
|
||||
'arrival_DT', 'to_city', 'to_place', 'owner',
|
||||
'order', 'modifiedDT', 'createDT'
|
||||
]
|
||||
list_editable = ['rising_DT']
|
||||
|
||||
list_display_links = ['id']
|
||||
|
||||
list_filter = ['owner_type', 'type_transport', 'cargo_type', 'from_place', 'arrival_DT', 'modifiedDT', 'createDT']
|
||||
search_fields = [
|
||||
'owner__first_name', 'owner__last_name', 'from_city__name', 'to_city__name'
|
||||
list_filter = [
|
||||
'owner_type', 'type_transport',
|
||||
'rising_DT',
|
||||
'cargo_type',
|
||||
'from_place', 'arrival_DT',
|
||||
'modifiedDT', 'createDT'
|
||||
]
|
||||
raw_id_fields = ['from_city', 'to_city']
|
||||
|
||||
admin.site.register(Route,Admin_Route)
|
||||
search_fields = [
|
||||
'owner__first_name', 'owner__last_name', 'from_city__name', 'to_city__name', 'owner__email'
|
||||
]
|
||||
raw_id_fields = ['from_city', 'to_city', 'owner']
|
||||
|
||||
admin.site.register(Route, Admin_Route)
|
||||
|
||||
@@ -1,9 +1,11 @@
|
||||
from BaseModels.mailSender import techSendMail
|
||||
from GeneralApp.funcs_options import get_mail_send_options
|
||||
from .models import *
|
||||
from .forms import *
|
||||
from django.utils.translation import gettext as _
|
||||
from django.template.loader import render_to_string
|
||||
from datetime import datetime
|
||||
from django.db.models import F
|
||||
from datetime import datetime, timedelta
|
||||
from django.db.models import F, Q
|
||||
|
||||
elements_on_page = 25
|
||||
|
||||
@@ -170,6 +172,7 @@ def get_routes_Dict(user=None, data=None):
|
||||
'owner': user
|
||||
})
|
||||
|
||||
|
||||
from_el = None
|
||||
to_el = None
|
||||
|
||||
@@ -258,6 +261,12 @@ def get_routes_Dict(user=None, data=None):
|
||||
# rising_DT=None
|
||||
# )
|
||||
|
||||
routes_rising_off = Route.objects.exclude(rising_DT=None).filter(
|
||||
Q(rising_DT__lt=datetime.now() - timedelta(days=1)) | Q(departure_DT__lt=datetime.now())
|
||||
)
|
||||
if routes_rising_off:
|
||||
routes_rising_off.update(rising_DT=None)
|
||||
|
||||
routes = Route.objects.filter(
|
||||
**kwargs
|
||||
).order_by(
|
||||
|
||||
@@ -305,6 +305,14 @@ def get_my_routes_ajax(request):
|
||||
data = json.loads(request.body)
|
||||
|
||||
try:
|
||||
|
||||
if not request.user or request.user.is_anonymous:
|
||||
msg = (f'get_my_routes_ajax not have user - user={str(request.user)}<br>'
|
||||
f'data={str(data)}<br>'
|
||||
f'request={str(request)}')
|
||||
mail_sets = get_mail_send_options()
|
||||
techSendMail(mail_sets, msg)
|
||||
|
||||
routes_Dict = get_routes_Dict(request.user, data)
|
||||
if 'errors' in routes_Dict:
|
||||
return JsonResponse(routes_Dict, status=400)
|
||||
|
||||
18
RoutesApp/migrations/0009_alter_route_phone.py
Normal file
@@ -0,0 +1,18 @@
|
||||
# Generated by Django 4.2.2 on 2024-11-12 10:51
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('RoutesApp', '0008_route_highlight_end_dt'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterField(
|
||||
model_name='route',
|
||||
name='phone',
|
||||
field=models.CharField(blank=True, null=True, verbose_name='Укажите номер для связи'),
|
||||
),
|
||||
]
|
||||
@@ -57,7 +57,7 @@ class Route(BaseModel):
|
||||
verbose_name=_('Куда можете доставить?'))
|
||||
cargo_type = models.CharField(choices=cargo_type_choices, default='parcel', verbose_name=_('Могу перевезти'))
|
||||
weight = models.IntegerField(verbose_name=_('Укажите вес до (кг)'))
|
||||
phone = models.CharField(verbose_name=_('Укажите номер для связи'))
|
||||
phone = models.CharField(verbose_name=_('Укажите номер для связи'), blank=True, null=True)
|
||||
extra_phone = models.CharField(verbose_name=_('Дополнительный номер'), blank=True, null=True)
|
||||
receive_msg_by_email = models.BooleanField(default=False, verbose_name=_('Получать уведомления по E-mail'))
|
||||
receive_msg_by_sms = models.BooleanField(default=False, verbose_name=_('Получать уведомления по SMS'))
|
||||
|
||||
@@ -47,7 +47,7 @@ def send_push_message_for_found_matches_routes(route, data_Dict):
|
||||
|
||||
|
||||
|
||||
def send_mail_found_matches_routes(route, data_Dict):
|
||||
def send_mail_found_matches_routes(route, matched_route, data_Dict):
|
||||
print(f'send_mail_found_matches_routes to route id = {route.id}')
|
||||
|
||||
Dict = {
|
||||
@@ -67,7 +67,9 @@ def send_mail_found_matches_routes(route, data_Dict):
|
||||
from_email=mail_sets['sender_email'], to=to,
|
||||
html_content=html
|
||||
)
|
||||
to = ['web@syncsystems.net']
|
||||
|
||||
subject = f'route matches {route.id} <> {matched_route.id} send to {route.owner.email}'
|
||||
to = ['web@syncsystems.net', 'sa@a3-global.com']
|
||||
res = admin_send_mail_by_SMTPlib(
|
||||
mail_sets,
|
||||
subject=subject,
|
||||
@@ -78,6 +80,56 @@ def send_mail_found_matches_routes(route, data_Dict):
|
||||
return res
|
||||
|
||||
|
||||
def user_notify_by_result_search_matches(route_for_send, founded_route, params):
|
||||
log = ''
|
||||
|
||||
data_Dict = None
|
||||
try:
|
||||
data_Dict = get_Dict_for_send_msgs(params, founded_route.owner_type)
|
||||
except Exception as e:
|
||||
msg = f'<br>\n! search_matches Error get_Dict_for_send_msgs = {str(e)}'
|
||||
print(msg)
|
||||
log += msg
|
||||
|
||||
if data_Dict and check_option_in_cur_user_subscribe(
|
||||
route_for_send.owner, 'push уведомления'
|
||||
):
|
||||
try:
|
||||
msg = send_push_message_for_found_matches_routes(route_for_send, data_Dict)
|
||||
if msg:
|
||||
log += msg
|
||||
except Exception as e:
|
||||
msg = f'<br>\n! search_matches Error send_push_message_for_found_matches_routes = {str(e)}'
|
||||
print(msg)
|
||||
log += msg
|
||||
|
||||
if data_Dict and check_option_in_cur_user_subscribe(
|
||||
route_for_send.owner,
|
||||
'уведомление на e-mail о появлении перевозчика по заданным критериям'
|
||||
):
|
||||
try:
|
||||
msg = send_mail_found_matches_routes(route_for_send, founded_route, data_Dict)
|
||||
if msg:
|
||||
log += msg
|
||||
except Exception as e:
|
||||
msg = f'<br>\n! search_matches Error send_mail_found_matches_routes = {str(e)}'
|
||||
print(msg)
|
||||
log += msg
|
||||
|
||||
return log
|
||||
|
||||
|
||||
|
||||
def users_notify_by_result_search_matches(source_route, found_routes, params):
|
||||
log = ''
|
||||
log += user_notify_by_result_search_matches(source_route, found_routes[0], params)
|
||||
|
||||
for route in found_routes:
|
||||
log += user_notify_by_result_search_matches(route, source_route, params)
|
||||
|
||||
return log
|
||||
|
||||
|
||||
def search_matches(for_routes=None):
|
||||
print('search_matches')
|
||||
|
||||
@@ -91,8 +143,11 @@ def search_matches(for_routes=None):
|
||||
)
|
||||
|
||||
check_fields = [
|
||||
'type_transport', 'departure_DT', 'arrival_DT', 'from_address_point', 'to_address_point',
|
||||
'from_place', 'to_place', 'cargo_type', 'weight'
|
||||
'type_transport', 'departure_DT', 'arrival_DT',
|
||||
# 'from_address_point', 'to_address_point',
|
||||
'from_place', 'to_place',
|
||||
'cargo_type', 'weight',
|
||||
'from_city', 'to_city',
|
||||
]
|
||||
|
||||
if for_routes:
|
||||
@@ -113,11 +168,20 @@ def search_matches(for_routes=None):
|
||||
kwargs.update({f"{field_name}__date": field_val.date()})
|
||||
elif field_name == 'weight':
|
||||
# print(field_name)
|
||||
params.update({f"{field_name}": field_val})
|
||||
if route.owner_type == 'mover':
|
||||
# params.update({f"{field_name}__lte": field_val})
|
||||
kwargs.update({f"{field_name}__lte": field_val})
|
||||
else:
|
||||
# params.update({f"{field_name}__gte": field_val})
|
||||
kwargs.update({f"{field_name}__gte": field_val})
|
||||
elif field_name == 'from_city':
|
||||
params.update({'from_address_point': field_val.id})
|
||||
kwargs.update({field_name: field_val})
|
||||
elif field_name == 'to_city':
|
||||
params.update({'to_address_point': field_val.id})
|
||||
kwargs.update({field_name: field_val})
|
||||
# elif field_name in ['from_address_point', 'to_address_point']:
|
||||
# kwargs.update({field_name: field_val})
|
||||
else:
|
||||
kwargs.update({field_name: field_val})
|
||||
params.update({field_name: field_val})
|
||||
@@ -135,39 +199,9 @@ def search_matches(for_routes=None):
|
||||
|
||||
if found_routes:
|
||||
msg = f'found routes for send messages = {found_routes.count()}'
|
||||
print(msg)
|
||||
|
||||
data_Dict = None
|
||||
try:
|
||||
data_Dict = get_Dict_for_send_msgs(params, found_routes[0].owner_type)
|
||||
except Exception as e:
|
||||
msg = f'<br>\n! search_matches Error get_Dict_for_send_msgs = {str(e)}'
|
||||
print(msg)
|
||||
log += msg
|
||||
|
||||
if data_Dict and check_option_in_cur_user_subscribe(
|
||||
route.owner, 'push уведомления'
|
||||
):
|
||||
try:
|
||||
msg = send_push_message_for_found_matches_routes(route, data_Dict)
|
||||
if msg:
|
||||
log += msg
|
||||
except Exception as e:
|
||||
msg = f'<br>\n! search_matches Error send_push_message_for_found_matches_routes = {str(e)}'
|
||||
print(msg)
|
||||
log += msg
|
||||
|
||||
if data_Dict and check_option_in_cur_user_subscribe(
|
||||
route.owner,
|
||||
'уведомление на e-mail о появлении перевозчика по заданным критериям'
|
||||
):
|
||||
try:
|
||||
msg = send_mail_found_matches_routes(route, data_Dict)
|
||||
if msg:
|
||||
log += msg
|
||||
except Exception as e:
|
||||
msg = f'<br>\n! search_matches Error send_mail_found_matches_routes = {str(e)}'
|
||||
print(msg)
|
||||
log += msg
|
||||
log += users_notify_by_result_search_matches(route, found_routes, params)
|
||||
|
||||
except Exception as e:
|
||||
msg = f'<br>\n! search_matches Error = {str(e)}'
|
||||
|
||||
@@ -99,6 +99,6 @@ class Admin_SubscribeForUser(Admin_Trans_BaseModel):
|
||||
'modifiedDT', 'createDT'
|
||||
]
|
||||
list_editable = ['enable']
|
||||
search_fields = ['name']
|
||||
search_fields = ['name', 'id', 'user__email', 'user__first_name', 'user__last_name']
|
||||
|
||||
admin.site.register(SubscribeForUser,Admin_SubscribeForUser)
|
||||
14
SubscribesApp/migrations/0008_merge_20250217_1748.py
Normal file
@@ -0,0 +1,14 @@
|
||||
# Generated by Django 4.2.2 on 2025-02-17 17:48
|
||||
|
||||
from django.db import migrations
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('SubscribesApp', '0004_alter_subscribe_bg_color_alter_subscribe_text_color'),
|
||||
('SubscribesApp', '0007_subscribeoption_route_highlight_hours'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
]
|
||||
@@ -1,4 +1,5 @@
|
||||
User-agent: *
|
||||
Disallow: /
|
||||
Disallow: */admin/*
|
||||
|
||||
Host: dev.tripwb.com
|
||||
@@ -1,6 +1,10 @@
|
||||
from BaseModels.admin_utils import Admin_GenericBaseIconStackedInline, Admin_BaseIconModel, GenericStackedInline
|
||||
from BaseModels.admin_utils import (
|
||||
Admin_GenericBaseIconStackedInline, Admin_BaseIconModel, GenericStackedInline,
|
||||
AdminImageWidget, get_image_thumb
|
||||
)
|
||||
from copy import deepcopy
|
||||
|
||||
from django.db import models
|
||||
from django.utils.translation import gettext as _
|
||||
|
||||
|
||||
class Admin_BaseModel(Admin_BaseIconModel):
|
||||
@@ -86,12 +90,17 @@ class AdminTranslationBase(TranslationAdmin):
|
||||
'screen': ('modeltranslation/css/tabbed_translation_fields.css',),
|
||||
}
|
||||
|
||||
from modeltranslation.admin import TranslationGenericStackedInline
|
||||
class AdminStacked_FAQitem(TranslationGenericStackedInline):
|
||||
from GeneralApp.models import FAQitem
|
||||
model = FAQitem
|
||||
extra = 0
|
||||
fields = ['order', 'question', 'answer']
|
||||
from modeltranslation.admin import TranslationGenericStackedInline, TranslationGenericTabularInline
|
||||
class TranslationGenericTabularInlineCustom(TranslationGenericTabularInline):
|
||||
formfield_overrides = {
|
||||
models.ImageField: {'widget': AdminImageWidget},
|
||||
}
|
||||
|
||||
def image_thumb(self, obj):
|
||||
return get_image_thumb(self, obj)
|
||||
|
||||
image_thumb.short_description = _('Миниатюра')
|
||||
image_thumb.allow_tags = True
|
||||
|
||||
class Media:
|
||||
|
||||
@@ -105,6 +114,46 @@ class AdminStacked_FAQitem(TranslationGenericStackedInline):
|
||||
'screen': ('modeltranslation/css/tabbed_translation_fields.css',),
|
||||
}
|
||||
|
||||
class TranslationGenericStackedInlineCustom(TranslationGenericStackedInline):
|
||||
formfield_overrides = {
|
||||
models.ImageField: {'widget': AdminImageWidget},
|
||||
}
|
||||
|
||||
def image_thumb(self, obj):
|
||||
return get_image_thumb(self, obj)
|
||||
|
||||
image_thumb.short_description = _('Миниатюра')
|
||||
image_thumb.allow_tags = True
|
||||
|
||||
class Media:
|
||||
|
||||
js = (
|
||||
'modeltranslation/js/force_jquery.js',
|
||||
'http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js',
|
||||
'http://ajax.googleapis.com/ajax/libs/jqueryui/1.10.2/jquery-ui.min.js',
|
||||
'modeltranslation/js/tabbed_translation_fields.js',
|
||||
)
|
||||
css = {
|
||||
'screen': ('modeltranslation/css/tabbed_translation_fields.css',),
|
||||
}
|
||||
|
||||
|
||||
class AdminStacked_FAQitem(TranslationGenericStackedInlineCustom):
|
||||
from GeneralApp.models import FAQitem
|
||||
model = FAQitem
|
||||
extra = 0
|
||||
fields = ['order', 'question', 'answer']
|
||||
|
||||
|
||||
|
||||
class AdminTabular_Mediaitem(TranslationGenericTabularInlineCustom):
|
||||
from GeneralApp.models import MediaItem
|
||||
model = MediaItem
|
||||
extra = 0
|
||||
fields = ['order', 'video', 'picture']
|
||||
|
||||
|
||||
|
||||
class Admin_BaseModelViewPage(Admin_BaseIconModel):
|
||||
pass
|
||||
# def get_fieldsets(self, request, obj=None):
|
||||
@@ -129,7 +178,7 @@ class Admin_BaseModelViewPage(Admin_BaseIconModel):
|
||||
# else:
|
||||
# return {}
|
||||
#
|
||||
inlines = [AdminStacked_FAQitem]
|
||||
inlines = [AdminStacked_FAQitem, AdminTabular_Mediaitem]
|
||||
|
||||
|
||||
|
||||
|
||||
2
static/css/moover.css
Normal file
178
static/css/moover/about.css
Normal file
@@ -0,0 +1,178 @@
|
||||
.about {
|
||||
margin-bottom: 168px;
|
||||
}
|
||||
|
||||
@media (min-width: 1720px) {
|
||||
.about {
|
||||
margin-bottom: 188px;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 1304.98px) {
|
||||
.about {
|
||||
margin-bottom: 138px;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 991.98px) {
|
||||
.about {
|
||||
margin-bottom: 110px;
|
||||
}
|
||||
}
|
||||
|
||||
.about .title {
|
||||
margin-bottom: 60px;
|
||||
}
|
||||
|
||||
@media (min-width: 1720px) {
|
||||
.about .title {
|
||||
margin-bottom: 49px;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 1304.98px) {
|
||||
.about .title {
|
||||
margin-bottom: 39px;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 991.98px) {
|
||||
.about .title {
|
||||
margin-bottom: 48px;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 479.98px) {
|
||||
.about .title {
|
||||
margin-bottom: 37px;
|
||||
}
|
||||
}
|
||||
|
||||
.about__grid {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(2, 1fr);
|
||||
}
|
||||
|
||||
@media (max-width: 991.98px) {
|
||||
.about__grid {
|
||||
display: block;
|
||||
}
|
||||
}
|
||||
|
||||
.about__img {
|
||||
box-shadow: inset 18.19px 1.21px 18.19px 0 #FFFFFFCC, inset -18.19px -1.21px 18.19px 0 #4052801A, 48.5px 36.38px 36.38px 0 #6B7F9933;
|
||||
border-radius: 31px;
|
||||
margin-left: -20px;
|
||||
margin-top: 8px;
|
||||
}
|
||||
|
||||
@media (min-width: 1720px) {
|
||||
.about__img {
|
||||
margin-top: 19px;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 1304.98px) {
|
||||
.about__img {
|
||||
margin-left: -10px;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 991.98px) {
|
||||
.about__img {
|
||||
margin-left: 0;
|
||||
margin-bottom: 49px;
|
||||
display: block;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 479.98px) {
|
||||
.about__img {
|
||||
margin-bottom: 38px;
|
||||
}
|
||||
}
|
||||
|
||||
.about__right {
|
||||
text-align: left;
|
||||
padding-top: 43px;
|
||||
padding-left: 50px;
|
||||
}
|
||||
|
||||
@media (min-width: 1720px) {
|
||||
.about__right {
|
||||
padding-top: 90px;
|
||||
padding-left: 21px;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 1304.98px) {
|
||||
.about__right {
|
||||
padding-left: 11px;
|
||||
padding-top: 19px;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 991.98px) {
|
||||
.about__right {
|
||||
padding: 0 8px;
|
||||
text-align: center;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 479.98px) {
|
||||
.about__right {
|
||||
padding: 0;
|
||||
}
|
||||
}
|
||||
|
||||
.about__right::after {
|
||||
content: '';
|
||||
display: block;
|
||||
clear: both;
|
||||
}
|
||||
|
||||
.about__half {
|
||||
max-width: 50%;
|
||||
float: left;
|
||||
}
|
||||
|
||||
@media (max-width: 991.98px) {
|
||||
.about__half {
|
||||
max-width: initial;
|
||||
}
|
||||
}
|
||||
|
||||
.about__half:last-child {
|
||||
padding-left: 16px;
|
||||
max-width: 47%;
|
||||
}
|
||||
|
||||
@media (max-width: 991.98px) {
|
||||
.about__half:last-child {
|
||||
max-width: initial;
|
||||
padding-left: 0;
|
||||
}
|
||||
}
|
||||
|
||||
.about b {
|
||||
letter-spacing: 0.4px;
|
||||
}
|
||||
|
||||
@media (min-width: 1720px) {
|
||||
.about b {
|
||||
font-weight: 700;
|
||||
letter-spacing: 0;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 479.98px) {
|
||||
.about b {
|
||||
letter-spacing: 0.9px;
|
||||
}
|
||||
}
|
||||
|
||||
@media (min-width: 1720px) {
|
||||
.about p {
|
||||
margin-bottom: 39px;
|
||||
}
|
||||
}
|
||||
1
static/css/moover/animate.css
vendored
Normal file
@@ -0,0 +1 @@
|
||||
.animate{padding:60px 40px 49px;opacity:0;background-color:var(--color-black2);border-radius:30px;color:white;margin-bottom:160px}@media (min-width: 1720px){.animate{padding-top:100px;padding-bottom:89px;margin-bottom:180px}}@media (max-width: 1304.98px){.animate{margin-bottom:141px}}@media (max-width: 991.98px){.animate{padding-top:40px;padding-bottom:29px;margin-bottom:121px}}@media (max-width: 479.98px){.animate{padding:30px 7px 19px}}.animate.left{transform:scale(0);opacity:0}.animate.right{opacity:0;transform:scale(0)}.animate.right .title{margin-bottom:17px}@media (min-width: 1720px){.animate.right .title{max-width:80%;margin-bottom:40px}}@media (max-width: 1304.98px){.animate.right .title{margin-bottom:25px}}@media (max-width: 991.98px){.animate.right .title{margin-bottom:31px}}@media (max-width: 479.98px){.animate.right .title{margin-bottom:20px}}@media (max-width: 991.98px){.animate.right .subtitle{margin-bottom:31px}}@media (max-width: 479.98px){.animate.right .use__btn{margin-top:-11px}}.animate__link{color:var(--color-orange);text-decoration:underline !important}.animate .title{margin-bottom:25px;max-width:87%}@media (min-width: 1720px){.animate .title{margin-bottom:40px}}@media (max-width: 1304.98px){.animate .title{max-width:99%}}@media (max-width: 991.98px){.animate .title{max-width:85%;font-size:24px;line-height:29.05px}}@media (max-width: 767.98px){.animate .title{max-width:100%;margin-bottom:14px}}.animate .subtitle{width:47%;margin:0 auto 23px}@media (min-width: 1720px){.animate .subtitle{line-height:26px;letter-spacing:0.1px;margin-bottom:40px}}@media (max-width: 1304.98px){.animate .subtitle{width:54%}}@media (max-width: 991.98px){.animate .subtitle{width:102%;margin-bottom:26px}}@media (max-width: 479.98px){.animate .use__btn{margin-top:-6px;padding-left:15px;padding-right:15px;display:flex}}
|
||||
157
static/css/moover/benefits.css
Normal file
@@ -0,0 +1,157 @@
|
||||
.benefits {
|
||||
margin-bottom: 132px;
|
||||
}
|
||||
|
||||
@media (min-width: 1720px) {
|
||||
.benefits {
|
||||
margin-bottom: 147px;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 1304.98px) {
|
||||
.benefits {
|
||||
margin-bottom: 101px;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 991.98px) {
|
||||
.benefits {
|
||||
margin-bottom: 93px;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 479.98px) {
|
||||
.benefits {
|
||||
margin-bottom: 103px;
|
||||
}
|
||||
}
|
||||
|
||||
.benefits__grid {
|
||||
text-align: left;
|
||||
display: grid;
|
||||
grid-template-columns: 1.5fr 3fr 1.5fr;
|
||||
}
|
||||
|
||||
@media (max-width: 991.98px) {
|
||||
.benefits__grid {
|
||||
grid-template-columns: 1fr 1fr;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 479.98px) {
|
||||
.benefits__grid {
|
||||
grid-template-columns: 1fr;
|
||||
text-align: center;
|
||||
}
|
||||
}
|
||||
|
||||
.benefits__item {
|
||||
min-height: 122px;
|
||||
padding-right: 7px;
|
||||
margin-bottom: 22px;
|
||||
}
|
||||
|
||||
@media (min-width: 1720px) {
|
||||
.benefits__item {
|
||||
min-height: 145px;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 991.98px) {
|
||||
.benefits__item {
|
||||
padding-right: 25px;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 479.98px) {
|
||||
.benefits__item {
|
||||
padding-right: 0;
|
||||
margin-bottom: 19px;
|
||||
min-height: 90px;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 991.98px) {
|
||||
.benefits__second {
|
||||
grid-column: 1 / 3;
|
||||
order: -1;
|
||||
margin-bottom: 56px;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 479.98px) {
|
||||
.benefits__second {
|
||||
grid-column: 1/2;
|
||||
margin-bottom: 31px;
|
||||
}
|
||||
}
|
||||
|
||||
.benefits__third {
|
||||
padding-left: 16px;
|
||||
}
|
||||
|
||||
@media (min-width: 1720px) {
|
||||
.benefits__third {
|
||||
padding-left: 31px;
|
||||
margin-right: 5px;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 991.98px) {
|
||||
.benefits__third {
|
||||
padding-left: 11px;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 479.98px) {
|
||||
.benefits__third {
|
||||
padding-left: 0;
|
||||
}
|
||||
}
|
||||
|
||||
.benefits .title {
|
||||
margin-bottom: 76px;
|
||||
}
|
||||
|
||||
@media (min-width: 1720px) {
|
||||
.benefits .title {
|
||||
margin-bottom: 93px;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 991.98px) {
|
||||
.benefits .title {
|
||||
margin-bottom: 19px;
|
||||
}
|
||||
}
|
||||
|
||||
.benefits img {
|
||||
position: relative;
|
||||
top: 14px;
|
||||
right: -11px;
|
||||
}
|
||||
|
||||
@media (min-width: 1720px) {
|
||||
.benefits img {
|
||||
top: -33px;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 1304.98px) {
|
||||
.benefits img {
|
||||
top: 20px;
|
||||
right: 0;
|
||||
}
|
||||
}
|
||||
|
||||
@media (min-width: 1720px) {
|
||||
.benefits h2 {
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 479.98px) {
|
||||
.benefits p {
|
||||
margin-bottom: 13px;
|
||||
}
|
||||
}
|
||||
194
static/css/moover/cards.css
Normal file
@@ -0,0 +1,194 @@
|
||||
.cards__list {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(4, 1fr);
|
||||
}
|
||||
|
||||
.cards__item {
|
||||
position: relative;
|
||||
}
|
||||
|
||||
@media (max-width: 991.98px) {
|
||||
.cards__item {
|
||||
max-width: 270px;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 767.98px) {
|
||||
.cards__item {
|
||||
max-width: 251px;
|
||||
margin-right: 18px;
|
||||
}
|
||||
}
|
||||
|
||||
.slick-active .cards__item .cards__desc, .cards__item:hover .cards__desc, .cards__item:focus .cards__desc {
|
||||
-webkit-line-clamp: initial;
|
||||
/* number of lines to show */
|
||||
line-clamp: initial;
|
||||
max-height: 17em;
|
||||
}
|
||||
|
||||
.cards__img {
|
||||
margin-bottom: 5px;
|
||||
}
|
||||
|
||||
@media (min-width: 1720px) {
|
||||
.cards__img {
|
||||
width: 100%;
|
||||
margin-bottom: 15px;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 1304.98px) {
|
||||
.cards__img {
|
||||
margin-bottom: 8px;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 991.98px) {
|
||||
.cards__img {
|
||||
margin-bottom: 8px;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 767.98px) {
|
||||
.cards__img {
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
}
|
||||
|
||||
.cards__img:hover {
|
||||
scale: 1.05;
|
||||
transition: scale 0.15s linear;
|
||||
}
|
||||
|
||||
.cards__desc {
|
||||
font-weight: 500;
|
||||
line-height: 22px;
|
||||
padding: 0 5px;
|
||||
overflow: hidden;
|
||||
display: -webkit-box;
|
||||
-webkit-line-clamp: 7;
|
||||
/* number of lines to show */
|
||||
line-clamp: 7;
|
||||
-webkit-box-orient: vertical;
|
||||
transition: all 0.3s ease-in-out;
|
||||
max-height: 10em;
|
||||
}
|
||||
|
||||
@media (min-width: 1720px) {
|
||||
.cards__desc {
|
||||
font-size: 20px;
|
||||
line-height: 26px;
|
||||
padding-left: 20px;
|
||||
padding-right: 20px;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 1279.98px) {
|
||||
.cards__desc {
|
||||
padding-left: 5px;
|
||||
padding-right: 5px;
|
||||
margin-bottom: 3px;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 991.98px) {
|
||||
.cards__desc {
|
||||
padding-left: 8px;
|
||||
padding-right: 8px;
|
||||
}
|
||||
}
|
||||
|
||||
.slick-active .cards__desc, .cards__desc:hover, .cards__desc:focus {
|
||||
-webkit-line-clamp: initial;
|
||||
/* number of lines to show */
|
||||
line-clamp: initial;
|
||||
max-height: 999em;
|
||||
}
|
||||
|
||||
.cards__desc a {
|
||||
color: var(--color-orange);
|
||||
}
|
||||
|
||||
.cards__arrow {
|
||||
width: 62px;
|
||||
height: 20px;
|
||||
position: absolute;
|
||||
right: -30px;
|
||||
top: -21px;
|
||||
background-image: url("/static/img/svg/Arrow23.svg");
|
||||
}
|
||||
|
||||
@media (min-width: 1720px) {
|
||||
.cards__arrow {
|
||||
right: -45px;
|
||||
top: -29px;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 1304.98px) {
|
||||
.cards__arrow {
|
||||
top: -8%;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 991.98px) {
|
||||
.cards__arrow {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
|
||||
.cards .slick-list {
|
||||
overflow: visible;
|
||||
}
|
||||
|
||||
@media (max-width: 767.98px) {
|
||||
.cards .slick-list {
|
||||
margin-bottom: 1px;
|
||||
padding-left: 58px;
|
||||
}
|
||||
}
|
||||
|
||||
.cards .slick-dots {
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
margin: 0;
|
||||
padding: 1rem 0;
|
||||
list-style-type: none;
|
||||
}
|
||||
|
||||
.cards .slick-dots li {
|
||||
margin: 0 0.25rem;
|
||||
}
|
||||
|
||||
@media (max-width: 767.98px) {
|
||||
.cards .slick-dots li {
|
||||
margin: 0 0.31rem;
|
||||
}
|
||||
}
|
||||
|
||||
.cards .slick-dots button {
|
||||
display: block;
|
||||
width: 8px;
|
||||
height: 8px;
|
||||
padding: 0;
|
||||
border: none;
|
||||
border-radius: 100%;
|
||||
background-color: #D9D9D9;
|
||||
text-indent: -9999px;
|
||||
}
|
||||
|
||||
.cards .slick-dots li.slick-active button {
|
||||
background-color: var(--color-orange);
|
||||
}
|
||||
|
||||
.cards--cstmr .cards__desc {
|
||||
padding: 0 50px;
|
||||
}
|
||||
|
||||
@media (max-width: 1304.98px) {
|
||||
.cards--cstmr .cards__desc {
|
||||
padding-left: 10px;
|
||||
padding-right: 10px;
|
||||
}
|
||||
}
|
||||
1
static/css/moover/chatterbox.css
Normal file
@@ -0,0 +1 @@
|
||||
.chatterbox{margin-bottom:160px}@media (min-width: 1720px){.chatterbox{margin-bottom:180px}}@media (max-width: 1304.98px){.chatterbox{margin-bottom:142px}}@media (max-width: 991.98px){.chatterbox{margin-left:-50vw;margin-right:-50vw;margin-bottom:122px}}@media (max-width: 767.98px){.chatterbox{max-width:100vw;margin:0 auto 121px;position:relative}}.chatterbox__slider{max-width:1200px;margin:0 auto}@media (min-width: 1720px){.chatterbox__slider{max-width:1640px}}@media (max-width: 1304.98px){.chatterbox__slider{max-width:1100px}}@media (max-width: 991.98px){.chatterbox__slider{max-width:720px}}@media (max-width: 767.98px){.chatterbox__slider{max-width:830px;width:830px;left:50%;transform:translateX(-50%)}}@media (max-width: 479.98px){.chatterbox__slider{max-width:initial}}.chatterbox__slide{width:335px;height:615px;background:url("/static/img/webp/phone-border.webp") center no-repeat;transition:scale 0.2s ease-in-out;margin:auto;position:relative}@media (min-width: 1720px){.chatterbox__slide{width:456px;height:836px;background-size:456px 836px}}@media (max-width: 1304.98px){.chatterbox__slide{width:308px;height:565px;background-size:308px 565px}}@media (max-width: 991.98px){.chatterbox__slide{width:206px;height:377px;background-size:206px 377px}}@media (max-width: 767.98px){.chatterbox__slide{width:234px;height:429px;background-size:234px 429px}}.chatterbox__slide.loaded video{opacity:1}.chatterbox__slide.loaded img{z-index:-10}.chatterbox__slide video{max-width:100%;opacity:0;transition:opacity 0.2s ease-in-out;pointer-events:none;position:relative}@media (min-width: 1720px){.chatterbox__slide video{top:-2px}}@media (max-width: 1304.98px){.chatterbox__slide video{top:10px}}@media (max-width: 991.98px){.chatterbox__slide video{top:-4px}}@media (max-width: 767.98px){.chatterbox__slide video{top:22px}}.chatterbox__slide img{position:absolute;scale:1.32;top:11%}.chatterbox__wrap{position:absolute;left:8px;right:8px;top:8px;bottom:8px;border-radius:25px;background-color:grey;overflow:hidden}@media (min-width: 1720px){.chatterbox__wrap{border-radius:50px}}.chatterbox__vbtn{position:absolute;left:0;right:0;top:0;bottom:0;opacity:0;transition:opacity 0.2s ease-in-out;pointer-events:none}.loaded .chatterbox__vbtn{display:none}.chatterbox__vbtn::before{width:80px;height:80px;display:flex;align-items:center;justify-content:center;background:var(--color-primary);border:0;border-radius:50%;transition:opacity 100ms linear}@media (min-width: 1720px){.chatterbox__vbtn::before{width:109px;height:109px}}@media (max-width: 991.98px){.chatterbox__vbtn::before{width:48px;height:48px}}@media (max-width: 767.98px){.chatterbox__vbtn::before{width:55px;height:55px}}.chatterbox__vbtn::before,.chatterbox__vbtn::after{content:"";position:absolute;left:50%;top:50%;transform:translate(-50%, -50%);cursor:pointer}.chatterbox__vbtn::after{border-color:transparent transparent transparent #ffffff;border-style:solid;border-width:15px 0 15px 25px;display:inline-block;margin-left:2px}@media (min-width: 1720px){.chatterbox__vbtn::after{border-width:23px 0 23px 35px;margin-left:4px}}@media (max-width: 991.98px){.chatterbox__vbtn::after{border-width:10px 0 10px 14px}}.chatterbox__vbox{position:relative;display:flex;justify-content:center;align-items:center;height:600px}@media (min-width: 1720px){.chatterbox__vbox{height:827px}}@media (max-width: 1304.98px){.chatterbox__vbox{height:530px}}@media (max-width: 991.98px){.chatterbox__vbox{height:370px}}.chatterbox__mbtns{position:absolute;top:58%;transform:translateY(-50%);left:0;right:0}@media (max-width: 479.98px){.chatterbox__mbtns{top:61.6%}}.chatterbox .title{margin-bottom:60px}@media (max-width: 1304.98px){.chatterbox .title{margin-bottom:39px}}@media (max-width: 767.98px){.chatterbox .title{margin-bottom:50px}}.chatterbox .slick-next{right:-40px}@media (max-width: 1304.98px){.chatterbox .slick-next{right:-10px}}@media (max-width: 991.98px){.chatterbox .slick-next{width:40px;height:40px;background-size:32%;right:5%}}@media (max-width: 479.98px){.chatterbox .slick-next{right:0}}.chatterbox .slick-prev{left:-40px}@media (max-width: 1304.98px){.chatterbox .slick-prev{left:-10px}}@media (max-width: 991.98px){.chatterbox .slick-prev{width:40px;height:40px;background-size:32%;left:5%}}@media (max-width: 479.98px){.chatterbox .slick-prev{left:0}}@media (max-width: 991.98px){.chatterbox .slick-list{overflow:visible}}.slick-slide:not(.slick-center) .chatterbox__slide{scale:0.72}@media (max-width: 1304.98px){.slick-slide:not(.slick-center) .chatterbox__slide{scale:0.69}}@media (max-width: 991.98px){.slick-slide:not(.slick-center) .chatterbox__slide{scale:0.8}}@media (max-width: 479.98px){.slick-slide:not(.slick-center) .chatterbox__slide{scale:0.85}}.slick-center .chatterbox__vbtn{opacity:1;pointer-events:initial;z-index:1}.slick-center .chatterbox__vbox video{pointer-events:initial;cursor:pointer}
|
||||
347
static/css/moover/diff.css
Normal file
@@ -0,0 +1,347 @@
|
||||
.diff {
|
||||
margin-bottom: 179px;
|
||||
}
|
||||
|
||||
@media (min-width: 1720px) {
|
||||
.diff {
|
||||
margin-bottom: 172px;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 1304.98px) {
|
||||
.diff {
|
||||
margin-bottom: 140px;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 991.98px) {
|
||||
.diff {
|
||||
margin-bottom: 125px;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 767.98px) {
|
||||
.diff {
|
||||
margin-bottom: 139px;
|
||||
}
|
||||
}
|
||||
|
||||
.diff .title {
|
||||
width: 60%;
|
||||
margin-bottom: 65px;
|
||||
}
|
||||
|
||||
@media (min-width: 1720px) {
|
||||
.diff .title {
|
||||
width: 49%;
|
||||
margin-bottom: 60px;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 1304.98px) {
|
||||
.diff .title {
|
||||
width: 73%;
|
||||
margin-bottom: 40px;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 991.98px) {
|
||||
.diff .title {
|
||||
width: 90%;
|
||||
margin-bottom: 40px;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 767.98px) {
|
||||
.diff .title {
|
||||
width: 100%;
|
||||
margin-bottom: 30px;
|
||||
}
|
||||
}
|
||||
|
||||
.diff__grid {
|
||||
display: flex;
|
||||
position: relative;
|
||||
margin-bottom: 30px;
|
||||
}
|
||||
|
||||
.diff__grid::before {
|
||||
content: '';
|
||||
position: absolute;
|
||||
height: 96%;
|
||||
width: 5px;
|
||||
border-radius: 5px;
|
||||
background-color: #EDEDED;
|
||||
left: 50%;
|
||||
transform: translateX(-50%);
|
||||
bottom: 0;
|
||||
}
|
||||
|
||||
@media (max-width: 1304.98px) {
|
||||
.diff__grid::before {
|
||||
height: 90%;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 991.98px) {
|
||||
.diff__grid::before {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 991.98px) {
|
||||
.diff__grid {
|
||||
display: block;
|
||||
}
|
||||
}
|
||||
|
||||
.diff__coll {
|
||||
width: 50%;
|
||||
}
|
||||
|
||||
@media (max-width: 991.98px) {
|
||||
.diff__coll {
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
|
||||
.diff__coll.left {
|
||||
margin-right: 29px;
|
||||
}
|
||||
|
||||
@media (min-width: 1720px) {
|
||||
.diff__coll.left {
|
||||
margin-right: 12px;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 1304.98px) {
|
||||
.diff__coll.left {
|
||||
margin-right: 10px;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 991.98px) {
|
||||
.diff__coll.left {
|
||||
margin-right: 0;
|
||||
}
|
||||
}
|
||||
|
||||
.diff__coll.left .diff__coll-title {
|
||||
padding-left: 39px;
|
||||
}
|
||||
|
||||
@media (min-width: 1720px) {
|
||||
.diff__coll.left .diff__coll-title {
|
||||
padding-left: 2px;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 1304.98px) {
|
||||
.diff__coll.left .diff__coll-title {
|
||||
padding-left: 0;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 991.98px) {
|
||||
.diff__coll.left .diff__coll-title {
|
||||
padding-left: 0;
|
||||
}
|
||||
}
|
||||
|
||||
.diff__coll.right {
|
||||
margin-left: 29px;
|
||||
}
|
||||
|
||||
@media (max-width: 1304.98px) {
|
||||
.diff__coll.right {
|
||||
margin-left: 10px;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 991.98px) {
|
||||
.diff__coll.right {
|
||||
margin-left: 0;
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
|
||||
.diff__coll.right .diff__coll-title {
|
||||
padding-right: 39px;
|
||||
}
|
||||
|
||||
@media (min-width: 1720px) {
|
||||
.diff__coll.right .diff__coll-title {
|
||||
padding-right: 0;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 1304.98px) {
|
||||
.diff__coll.right .diff__coll-title {
|
||||
padding-right: 0;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 991.98px) {
|
||||
.diff__coll.right .diff__coll-title {
|
||||
padding-right: 0;
|
||||
}
|
||||
}
|
||||
|
||||
.diff__coll-title {
|
||||
margin-bottom: 38px;
|
||||
}
|
||||
|
||||
@media (max-width: 1304.98px) {
|
||||
.diff__coll-title {
|
||||
margin-bottom: 18px;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 991.98px) {
|
||||
.diff__coll-title {
|
||||
margin-bottom: 19px;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 767.98px) {
|
||||
.diff__coll-title {
|
||||
margin-bottom: 29px;
|
||||
}
|
||||
}
|
||||
|
||||
.diff__item {
|
||||
position: relative;
|
||||
text-align: left;
|
||||
padding-left: 10px;
|
||||
padding-top: 11px;
|
||||
padding-bottom: 11px;
|
||||
display: flex;
|
||||
gap: 11px;
|
||||
align-items: center;
|
||||
background-color: #FFFFFF;
|
||||
border-radius: 15px;
|
||||
font-weight: 500;
|
||||
font-size: 20px;
|
||||
line-height: 28px;
|
||||
margin-bottom: 35px;
|
||||
cursor: default;
|
||||
}
|
||||
|
||||
@media (min-width: 1720px) {
|
||||
.diff__item {
|
||||
padding: 20px;
|
||||
gap: 20px;
|
||||
margin-bottom: 40px;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 1304.98px) {
|
||||
.diff__item {
|
||||
margin-bottom: 18px;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 991.98px) {
|
||||
.diff__item {
|
||||
font-size: 18px;
|
||||
margin-bottom: 25px;
|
||||
padding-bottom: 9px;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 767.98px) {
|
||||
.diff__item {
|
||||
font-size: 16px;
|
||||
line-height: 19.36px;
|
||||
padding-right: 15px;
|
||||
margin-bottom: 14px;
|
||||
}
|
||||
}
|
||||
|
||||
.diff__item:last-child {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
.diff__item:hover .diff__status::before {
|
||||
scale: 1.2;
|
||||
}
|
||||
|
||||
.diff__status {
|
||||
position: relative;
|
||||
height: 48px;
|
||||
width: 48px;
|
||||
border-radius: 5px;
|
||||
flex-shrink: 0;
|
||||
}
|
||||
|
||||
@media (min-width: 1720px) {
|
||||
.diff__status {
|
||||
border-radius: 12px;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 1304.98px) {
|
||||
.diff__status {
|
||||
border-radius: 13px;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 991.98px) {
|
||||
.diff__status {
|
||||
border-radius: 11px;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 767.98px) {
|
||||
.diff__status {
|
||||
width: 35px;
|
||||
height: 35px;
|
||||
}
|
||||
}
|
||||
|
||||
.diff__status::before {
|
||||
position: absolute;
|
||||
left: 50%;
|
||||
top: 50%;
|
||||
transform: translate(-50%, -50%);
|
||||
transform-origin: 0% 15%;
|
||||
}
|
||||
|
||||
.diff__status::before {
|
||||
content: '';
|
||||
width: 36px;
|
||||
height: 36px;
|
||||
}
|
||||
|
||||
.diff__item--done .diff__status {
|
||||
background-color: #CCF9D9;
|
||||
}
|
||||
|
||||
.diff__item--done .diff__status::before {
|
||||
width: 26px;
|
||||
height: 26px;
|
||||
background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjYiIGhlaWdodD0iMjYiIHZpZXdCb3g9IjAgMCAyNiAyNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTI0IDJMOS4zMzMzMyAyNEwyIDEzLjAwMDUiIHN0cm9rZT0iIzQ1QzIyNiIgc3Ryb2tlLXdpZHRoPSI0IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiLz4KPC9zdmc+Cg==);
|
||||
}
|
||||
|
||||
@media (max-width: 767.98px) {
|
||||
.diff__item--done .diff__status::before {
|
||||
scale: 0.7;
|
||||
}
|
||||
}
|
||||
|
||||
.diff__item--error .diff__status {
|
||||
background-color: #F9CCCC;
|
||||
}
|
||||
|
||||
.diff__item--error .diff__status::before {
|
||||
width: 36px;
|
||||
height: 36px;
|
||||
background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzYiIGhlaWdodD0iMzYiIHZpZXdCb3g9IjAgMCAzNiAzNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTI4LjEyNSA3Ljg3NUw3Ljg3NSAyOC4xMjUiIHN0cm9rZT0iI0ZGMDAwMCIgc3Ryb2tlLXdpZHRoPSI0IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiLz4KPHBhdGggZD0iTTI4LjEyNSAyOC4xMjVMNy44NzUgNy44NzUiIHN0cm9rZT0iI0ZGMDAwMCIgc3Ryb2tlLXdpZHRoPSI0IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiLz4KPC9zdmc+Cg==);
|
||||
}
|
||||
|
||||
@media (max-width: 767.98px) {
|
||||
.diff__item--error .diff__status::before {
|
||||
scale: 0.7;
|
||||
}
|
||||
}
|
||||
418
static/css/moover/easy.css
Normal file
@@ -0,0 +1,418 @@
|
||||
.easy {
|
||||
margin-bottom: 162px;
|
||||
}
|
||||
|
||||
@media (min-width: 1720px) {
|
||||
.easy {
|
||||
margin-bottom: 180px;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 1304.98px) {
|
||||
.easy {
|
||||
margin-bottom: 140px;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 991.98px) {
|
||||
.easy {
|
||||
margin-bottom: 121px;
|
||||
}
|
||||
}
|
||||
|
||||
.easy .title {
|
||||
max-width: 55%;
|
||||
margin-bottom: 21px;
|
||||
}
|
||||
|
||||
@media (min-width: 1720px) {
|
||||
.easy .title {
|
||||
max-width: 45%;
|
||||
margin-bottom: 23px;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 991.98px) {
|
||||
.easy .title {
|
||||
max-width: 75%;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 767.98px) {
|
||||
.easy .title {
|
||||
max-width: 95%;
|
||||
margin-bottom: 30px;
|
||||
}
|
||||
}
|
||||
|
||||
.easy .subtitle {
|
||||
margin-bottom: 41px;
|
||||
}
|
||||
|
||||
@media (min-width: 1720px) {
|
||||
.easy .subtitle {
|
||||
margin-bottom: 59px;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 767.98px) {
|
||||
.easy .subtitle {
|
||||
max-width: 90%;
|
||||
margin: 0 auto 23px;
|
||||
}
|
||||
}
|
||||
|
||||
.easy__grid {
|
||||
display: grid;
|
||||
grid-template-columns: 1fr 1fr;
|
||||
grid-template-rows: repeat(2, minmax(186px, auto));
|
||||
grid-template-areas: 'a b' 'a c';
|
||||
grid-column-gap: 20px;
|
||||
grid-row-gap: 80px;
|
||||
margin-bottom: 46px;
|
||||
}
|
||||
|
||||
@media (min-width: 1720px) {
|
||||
.easy__grid {
|
||||
grid-column-gap: 147px;
|
||||
grid-template-rows: repeat(2, minmax(245px, auto));
|
||||
grid-row-gap: 136px;
|
||||
margin-bottom: 63px;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 1304.98px) {
|
||||
.easy__grid {
|
||||
grid-column-gap: 69px;
|
||||
grid-template-rows: repeat(2, minmax(172px, auto));
|
||||
margin-bottom: 41px;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 991.98px) {
|
||||
.easy__grid {
|
||||
display: block;
|
||||
margin-bottom: 37px;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 767.98px) {
|
||||
.easy__grid {
|
||||
margin-bottom: 40px;
|
||||
}
|
||||
}
|
||||
|
||||
.easy__item {
|
||||
border-radius: 30px;
|
||||
background-color: var(--color-grey);
|
||||
/*background-color: #a72525;*/
|
||||
text-align: left;
|
||||
padding: 21px;
|
||||
box-shadow: var(--box-shadow-primary);
|
||||
}
|
||||
|
||||
.easy__item--fir {
|
||||
grid-area: a;
|
||||
margin-right: 60px;
|
||||
padding-bottom: 0;
|
||||
}
|
||||
|
||||
@media (min-width: 1720px) {
|
||||
.easy__item--fir {
|
||||
margin-right: -10px;
|
||||
padding-top: 31px;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 1304.98px) {
|
||||
.easy__item--fir {
|
||||
margin-right: 13px;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 991.98px) {
|
||||
.easy__item--fir {
|
||||
padding-top: 17px;
|
||||
margin-right: 0;
|
||||
margin-bottom: 49px;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 767.98px) {
|
||||
.easy__item--fir {
|
||||
margin-bottom: 42px;
|
||||
}
|
||||
}
|
||||
|
||||
.easy__item--fir p {
|
||||
width: 93%;
|
||||
margin-bottom: 29px;
|
||||
}
|
||||
|
||||
@media (min-width: 1720px) {
|
||||
.easy__item--fir p {
|
||||
width: 89%;
|
||||
margin-bottom: 53px;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 991.98px) {
|
||||
.easy__item--fir p {
|
||||
max-width: 78%;
|
||||
}
|
||||
}
|
||||
|
||||
.easy__item--sec {
|
||||
grid-area: b;
|
||||
position: relative;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
margin-bottom: 0;
|
||||
padding-top: 0;
|
||||
padding-bottom: 0;
|
||||
}
|
||||
|
||||
@media (min-width: 1720px) {
|
||||
.easy__item--sec {
|
||||
padding-left: 15px;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 991.98px) {
|
||||
.easy__item--sec {
|
||||
padding-top: 35px;
|
||||
padding-bottom: 37px;
|
||||
margin-bottom: 46px;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 767.98px) {
|
||||
.easy__item--sec {
|
||||
display: block;
|
||||
padding-top: 0;
|
||||
padding-bottom: 0;
|
||||
margin-bottom: 49px;
|
||||
}
|
||||
}
|
||||
|
||||
.easy__item--sec img {
|
||||
margin-bottom: -10px;
|
||||
margin-right: -5px;
|
||||
max-width: 50.1%;
|
||||
}
|
||||
|
||||
@media (min-width: 1720px) {
|
||||
.easy__item--sec img {
|
||||
max-width: 53%;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 1304.98px) {
|
||||
.easy__item--sec img {
|
||||
max-width: 42%;
|
||||
margin-bottom: -4px;
|
||||
margin-right: 0;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 991.98px) {
|
||||
.easy__item--sec img {
|
||||
margin-right: 0;
|
||||
margin-bottom: 0;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 767.98px) {
|
||||
.easy__item--sec img {
|
||||
max-width: 104%;
|
||||
position: relative;
|
||||
left: -6px;
|
||||
top: -4px;
|
||||
}
|
||||
}
|
||||
|
||||
.easy__item--sec p {
|
||||
margin-bottom: 0;
|
||||
padding-top: 0;
|
||||
padding-bottom: 0;
|
||||
}
|
||||
|
||||
@media (max-width: 767.98px) {
|
||||
.easy__item--sec p {
|
||||
margin-bottom: 22px;
|
||||
}
|
||||
}
|
||||
|
||||
.easy__item--thr {
|
||||
grid-area: c;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
margin-bottom: 0;
|
||||
padding-top: 0;
|
||||
padding-bottom: 0;
|
||||
}
|
||||
|
||||
@media (min-width: 1720px) {
|
||||
.easy__item--thr {
|
||||
padding-left: 15px;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 991.98px) {
|
||||
.easy__item--thr {
|
||||
padding-top: 42px;
|
||||
padding-bottom: 46px;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 767.98px) {
|
||||
.easy__item--thr {
|
||||
display: block;
|
||||
padding-top: 0;
|
||||
padding-bottom: 0;
|
||||
}
|
||||
}
|
||||
|
||||
.easy__item--thr .img {
|
||||
margin-bottom: -10px;
|
||||
margin-right: 24px;
|
||||
max-width: 80%;
|
||||
}
|
||||
|
||||
@media (max-width: 1279.98px) {
|
||||
.easy__item--thr .img {
|
||||
max-width: 35%;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 1304.98px) {
|
||||
.easy__item--thr .img {
|
||||
margin-right: 2px;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 991.98px) {
|
||||
.easy__item--thr .img {
|
||||
margin-right: 0;
|
||||
max-width: 34%;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 767.98px) {
|
||||
.easy__item--thr .img img {
|
||||
display: block;
|
||||
margin: 0 auto;
|
||||
}
|
||||
}
|
||||
|
||||
.easy__item--thr p {
|
||||
max-width: 50%;
|
||||
margin-bottom: 0;
|
||||
padding-top: 0;
|
||||
padding-bottom: 0;
|
||||
}
|
||||
|
||||
@media (max-width: 991.98px) {
|
||||
.easy__item--thr p {
|
||||
max-width: 60%;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 767.98px) {
|
||||
.easy__item--thr p {
|
||||
margin-bottom: 22px;
|
||||
max-width: 100%;
|
||||
}
|
||||
}
|
||||
|
||||
.easy__arrow {
|
||||
width: 68px;
|
||||
height: 18px;
|
||||
background-image: url("/static/img/svg/Arrow08.svg");
|
||||
position: absolute;
|
||||
z-index: 1;
|
||||
}
|
||||
|
||||
@media (min-width: 1720px) {
|
||||
.easy__arrow {
|
||||
scale: 1.4;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 1304.98px) {
|
||||
.easy__arrow {
|
||||
scale: 0.8;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 991.98px) {
|
||||
.easy__arrow {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
|
||||
.easy__arrow--fir {
|
||||
top: 46%;
|
||||
right: 101%;
|
||||
}
|
||||
|
||||
@media (min-width: 1720px) {
|
||||
.easy__arrow--fir {
|
||||
right: 105%;
|
||||
top: 34%;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 1304.98px) {
|
||||
.easy__arrow--fir {
|
||||
top: 48%;
|
||||
}
|
||||
}
|
||||
|
||||
.easy__arrow--sec {
|
||||
top: 117%;
|
||||
left: 30%;
|
||||
transform: rotate(90deg);
|
||||
}
|
||||
|
||||
@media (min-width: 1720px) {
|
||||
.easy__arrow--sec {
|
||||
left: 45%;
|
||||
top: 124%;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 1304.98px) {
|
||||
.easy__arrow--sec {
|
||||
left: 38%;
|
||||
}
|
||||
}
|
||||
|
||||
.easy__btn {
|
||||
margin-top: -21px;
|
||||
}
|
||||
|
||||
@media (max-width: 1304.98px) {
|
||||
.easy__btn {
|
||||
margin-top: -20px;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 991.98px) {
|
||||
.easy__btn {
|
||||
margin-top: -19px;
|
||||
padding-left: 54px;
|
||||
padding-right: 54px;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 767.98px) {
|
||||
.easy__btn {
|
||||
padding-left: 50px;
|
||||
padding-right: 50px;
|
||||
margin-top: -8px;
|
||||
max-width: 100%;
|
||||
}
|
||||
}
|
||||
1
static/css/moover/header.css
Normal file
@@ -0,0 +1 @@
|
||||
.header{margin-top:0;position:fixed;display:block;left:0;top:0;width:100vw;padding:15px 5px;transition:all 0.1s ease-in-out;background-color:white}@media (max-width: 991.98px){.header{padding-top:7px;padding-bottom:7px}}.header.scrolled{padding-top:7px;padding-bottom:7px;box-shadow:var(--box-shadow-primary);border-bottom:1px solid var(--color-grey)}.header__grid,.header__list{display:flex;align-items:center;justify-content:space-between}.header__logo{width:48px;height:48px;position:relative;left:5px}@media (max-width: 1304.98px){.header__logo{left:6px}}@media (max-width: 991.98px){.header__logo{left:0}}@media (max-width: 767.98px){.header__logo{left:-3px}}.header__nav{flex-grow:1;max-width:41%;margin-left:auto}@media (min-width: 1720px){.header__nav{max-width:34%}}@media (max-width: 1304.98px){.header__nav{max-width:46.5%}}.header__link{color:var(--color-black2);text-decoration:none}.header__btn{padding:8px 0 6px;font-size:16px;margin-left:61px;margin-right:-3px}@media (min-width: 1720px){.header__btn{margin-left:81px}}@media (max-width: 1304.98px){.header__btn{margin-right:0}}@media (max-width: 991.98px){.header__btn{display:none}}.header .dropdown{left:-4px}@media (max-width: 767.98px){.header .dropdown{left:-8px}}.header .dropdown-content{right:0;height:initial}@media (max-width: 575px){.header .dropdown-content{right:0;left:initial}}
|
||||
189
static/css/moover/presentation.css
Normal file
@@ -0,0 +1,189 @@
|
||||
.presentation {
|
||||
margin: 12px -65px 140px;
|
||||
}
|
||||
|
||||
@media (min-width: 1720px) {
|
||||
.presentation {
|
||||
margin-left: 0;
|
||||
margin-right: 0;
|
||||
margin-bottom: 160px;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 1304.98px) {
|
||||
.presentation {
|
||||
margin-bottom: 118px;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 991.98px) {
|
||||
.presentation {
|
||||
margin-bottom: 105px;
|
||||
}
|
||||
}
|
||||
|
||||
.presentation__top {
|
||||
position: relative;
|
||||
min-height: 270px;
|
||||
margin: 0 auto 116px;
|
||||
padding: 29px 0 40px;
|
||||
background-image: url(/static/img/png/Box9.png), url(/static/img/png/Box10.png), url(/static/img/png/Box11.png), url(/static/img/png/Box12.png);
|
||||
background-position: top -4px left 46px, top -30px right -14px, bottom 73px left 278px, bottom 71px right 276px;
|
||||
background-repeat: no-repeat, no-repeat, no-repeat, no-repeat;
|
||||
background-size: 17.5%, 21.8%, 8.5%, 8.8%;
|
||||
}
|
||||
|
||||
@media (min-width: 1720px) {
|
||||
.presentation__top {
|
||||
background-size: 18.5%, 22%, 9%, 10.1%;
|
||||
background-position: top -47px left 58px, top -31px right 20px, bottom 8px left 347px, bottom -5px right 352px;
|
||||
padding-top: 95px;
|
||||
margin-bottom: 176px;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 1304.98px) {
|
||||
.presentation__top {
|
||||
background-size: 16%, 20%, 9.5%, 10.1%;
|
||||
background-position: top -2.8% left 6.5%, top -19% right 3.5%, bottom 32% left 23%, bottom 29% right 22.6%;
|
||||
margin-bottom: 96px;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 991.98px) {
|
||||
.presentation__top {
|
||||
background-size: 14.5%, 17%, 8.3%, 9.1%;
|
||||
background-position: top 9% left 7%, top 5% right 6%, bottom 51% left 14.8%, bottom 47.5% right 13.8%;
|
||||
padding-top: 31px;
|
||||
margin-bottom: 76px;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 767.98px) {
|
||||
.presentation__top {
|
||||
margin-bottom: 77px;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 991.98px) {
|
||||
.presentation__bottom .subtitle {
|
||||
max-width: 40%;
|
||||
margin: 0 auto 30px;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 767.98px) {
|
||||
.presentation__bottom .subtitle {
|
||||
max-width: 65%;
|
||||
margin-bottom: 21px;
|
||||
}
|
||||
}
|
||||
|
||||
.presentation__title {
|
||||
margin-bottom: 23px;
|
||||
}
|
||||
|
||||
@media (max-width: 991.98px) {
|
||||
.presentation__title {
|
||||
max-width: 75%;
|
||||
margin: 0 auto 19px;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 767.98px) {
|
||||
.presentation__title {
|
||||
margin-bottom: 15px;
|
||||
}
|
||||
}
|
||||
|
||||
.presentation__subtitle {
|
||||
margin-bottom: 41px;
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
@media (max-width: 991.98px) {
|
||||
.presentation__subtitle {
|
||||
max-width: 55%;
|
||||
margin: 0 auto 40px;
|
||||
font-size: 16px;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 767.98px) {
|
||||
.presentation__subtitle {
|
||||
margin-bottom: 30px;
|
||||
max-width: 77%;
|
||||
}
|
||||
}
|
||||
|
||||
.presentation__btn {
|
||||
margin-bottom: 40px;
|
||||
}
|
||||
|
||||
@media (max-width: 991.98px) {
|
||||
.presentation__btn {
|
||||
padding-left: 82px;
|
||||
padding-right: 82px;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 767.98px) {
|
||||
.presentation__btn {
|
||||
margin-bottom: 30px;
|
||||
}
|
||||
}
|
||||
|
||||
.presentation__next {
|
||||
font-weight: 500;
|
||||
line-height: 22px;
|
||||
padding-right: 5px;
|
||||
}
|
||||
|
||||
.presentation__arrows {
|
||||
padding-top: 2px;
|
||||
animation: jump 2s ease-in-out infinite;
|
||||
}
|
||||
|
||||
.presentation__cards {
|
||||
max-width: 1300px;
|
||||
margin: 0 auto;
|
||||
}
|
||||
|
||||
@media (min-width: 1720px) {
|
||||
.presentation__cards {
|
||||
max-width: initial;
|
||||
margin-left: -10px;
|
||||
margin-right: -10px;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 1304.98px) {
|
||||
.presentation__cards {
|
||||
max-width: 1140px;
|
||||
}
|
||||
}
|
||||
|
||||
.presentation__bottom .presentation__title {
|
||||
margin-bottom: 13px;
|
||||
}
|
||||
|
||||
@keyframes jump {
|
||||
0% {
|
||||
transform: translateY(0px);
|
||||
}
|
||||
50% {
|
||||
transform: translateY(-5px);
|
||||
}
|
||||
60% {
|
||||
transform: translateY(20px);
|
||||
}
|
||||
70% {
|
||||
transform: translateY(0px);
|
||||
}
|
||||
80% {
|
||||
transform: translateY(20px);
|
||||
}
|
||||
100% {
|
||||
transform: translateY(0px);
|
||||
}
|
||||
}
|
||||
2
static/css/moover/root.css
Normal file
@@ -0,0 +1,2 @@
|
||||
.container{margin:0 auto;width:1280px;position:relative}@media (min-width: 1720px){.container{width:1720px}}@media (max-width: 1304.98px){.container{width:1120px;max-width:88vw}}@media (max-width: 991.98px){.container{width:640px;max-width:100vw}}@media (max-width: 767.98px){.container{margin:0 16px;width:auto}}:root{--color-primary: #FF613A;--color-white: #FFFFFF;--color-black: #000000;--color-black2: #272424;--color-grey: #F1F1F1;--color-grey2: #7A7979;--color-orange: #FF613A;--box-shadow-primary: -1px 4px 10px 0 rgba(198, 199, 203, 0.20),
|
||||
0 -1px 10px 0 rgba(198, 199, 203, 0.20);text-align:center;color:var(--color-black2)}html,body{max-width:100vw;max-height:initial}body{height:100%;position:relative}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{font-weight:700}h1,.h1{font-size:44px;line-height:52px}@media (min-width: 1720px){h1,.h1{font-size:48px;line-height:52px}}h2,.h2{font-size:24px;line-height:36px;margin-bottom:10px}@media (min-width: 1720px){h2,.h2{font-size:28px;margin-bottom:20px}}h3,.h3{font-size:20px;line-height:28px;margin-bottom:12px}@media (max-width: 1304.98px){h3,.h3{margin-bottom:13px}}h4,.h4{font-size:18px;line-height:26px;margin-bottom:20px}p{line-height:22px;margin-bottom:20px}@media (min-width: 1720px){p{font-size:20px;line-height:26px}}@media (max-width: 991.98px){p{margin-bottom:18px}}@media (max-width: 479.98px){p{margin-bottom:14px}}b{font-weight:500}@media (max-width: 991.98px){b{font-size:16px;line-height:22px}}.btn{display:inline-flex;text-decoration:none;color:black;line-height:22px;border-radius:10px;padding:20px 76px 18px;justify-content:center;align-items:center;margin:0 3px;letter-spacing:0.2px;font-size:18px}.btn--primary{background:var(--color-primary);color:var(--color-white)}.title{font-size:44px;font-weight:700;line-height:52px;margin-bottom:13px;margin-left:auto;margin-right:auto}@media (min-width: 1720px){.title{font-size:48px;margin-bottom:22px}}@media (max-width: 1304.98px){.title{margin-bottom:20px}}@media (max-width: 991.98px){.title{font-size:32px;line-height:38.73px}}@media (max-width: 767.98px){.title{margin-bottom:14px}}.subtitle{margin-bottom:81px;line-height:22px}@media (min-width: 1720px){.subtitle{font-size:20px;margin-bottom:105px}}@media (max-width: 1304.98px){.subtitle{margin-bottom:71px}}.hide{display:none}.hide__xxl{display:inline-flex}@media (min-width: 1720px){.hide__xxl{display:none}}@media (max-width: 991.98px){.hide__md{display:none}}@media (max-width: 479.98px){.hide__xs{display:none}}.show__xxl{display:none}@media (min-width: 1720px){.show__xxl{display:block}}.show__md{display:none}@media (max-width: 991.98px){.show__md{display:initial}}@media (min-width: 480px){.show__xs{display:none}}@media (min-width: 1440px){.br--xxl{display:none}}@media (max-width: 991.98px){.br--md{display:none}}@media (max-width: 767.98px){.br--sm{display:none}}.is-container.wrapper_main{overflow-x:hidden}.is-container.wrapper_main>.container{padding-top:129px}@media (max-width: 1304.98px){.is-container.wrapper_main>.container{padding-top:126px}}@media (max-width: 991.98px){.is-container.wrapper_main>.container{padding-top:85px}}@media (max-width: 767.98px){.is-container.wrapper_main>.container{padding-top:57px}}@media (min-width: 1440px){.is-container.wrapper_main{max-width:initial}}.is-container.wrapper_main>.container{position:relative;left:15px}@media (min-width: 1720px){.is-container.wrapper_main>.container{left:17px}}@media (max-width: 767.98px){.is-container.wrapper_main>.container{left:0}}
|
||||
1
static/css/moover/sore.css
Normal file
@@ -0,0 +1 @@
|
||||
.sore{margin-bottom:160px;margin-top:1px}@media (min-width: 1720px){.sore{margin-bottom:178px}}@media (max-width: 1304.98px){.sore{margin-bottom:140px}}@media (max-width: 991.98px){.sore{margin-bottom:60px}}@media (max-width: 479.98px){.sore{margin-bottom:40px}}.sore__img{margin:0 auto 13px;position:relative;left:-17px;top:-13px}@media (min-width: 1720px){.sore__img{margin-bottom:40px;top:-5px;left:-21px}}@media (max-width: 1304.98px){.sore__img{left:2px;top:-22px;margin-bottom:4px}}@media (max-width: 991.98px){.sore__img{top:-8px;left:-15px;margin-bottom:18px}}@media (max-width: 479.98px){.sore__img{max-width:108.5%;top:-26px;left:-18px;margin-bottom:-9px}}.sore .title{margin-bottom:40px}@media (min-width: 1720px){.sore .title{margin-bottom:61px}}@media (max-width: 991.98px){.sore .title{margin-bottom:20px}}@media (max-width: 479.98px){.sore .title{margin-bottom:29px}}.sore .subtitle{max-width:62%;margin:0 auto 10px}@media (min-width: 1720px){.sore .subtitle{line-height:26px;max-width:60%}}@media (max-width: 1304.98px){.sore .subtitle{max-width:65%}}@media (max-width: 991.98px){.sore .subtitle{max-width:85%}}@media (max-width: 479.98px){.sore .subtitle{max-width:99%}}.sore .h3{max-width:47%;margin:0 auto 19px}@media (min-width: 1720px){.sore .h3{max-width:38%}}@media (max-width: 1304.98px){.sore .h3{max-width:50%}}@media (max-width: 991.98px){.sore .h3{max-width:65%;margin-bottom:21px}}@media (max-width: 479.98px){.sore .h3{max-width:100%;margin-bottom:17px}}@media (max-width: 767.98px){.sore__btn{padding-left:50px;padding-right:50px}}@media (max-width: 479.98px){.sore__btn{box-sizing:border-box;padding:8px 15px;min-height:60px;display:flex}}
|
||||
1
static/css/moover/use.css
Normal file
@@ -0,0 +1 @@
|
||||
.use{margin-bottom:123px}@media (min-width: 1720px){.use{margin-bottom:184px}}@media (max-width: 1304.98px){.use{margin-bottom:142px}}@media (max-width: 991.98px){.use{margin-bottom:121px}}.use__img{width:67.5%;margin-left:16px;margin-bottom:31px}@media (min-width: 1720px){.use__img{width:50.2%;margin-left:15px;margin-bottom:46px}}@media (max-width: 1304.98px){.use__img{width:77%;margin-left:10px;margin-bottom:34px}}@media (max-width: 991.98px){.use__img{margin-left:0;width:100%;margin-bottom:40px}}@media (max-width: 767.98px){.use__img{margin-bottom:30px}}.use__btn{margin-bottom:11px;text-align:center}@media (max-width: 767.98px){.use__btn{max-width:100%;padding-left:50px;padding-right:50px}}.use__link{font-size:18px;font-weight:600;line-height:26px;color:var(--color-grey2)}.use .title{max-width:80%;margin-bottom:49px}@media (min-width: 1720px){.use .title{max-width:40%}}@media (max-width: 991.98px){.use .title{margin-bottom:40px}}@media (max-width: 767.98px){.use .title{max-width:100%;margin-bottom:29px}}.use--lett{margin-bottom:120px}@media (min-width: 1720px){.use--lett{margin-bottom:126px}}@media (max-width: 1304.98px){.use--lett{margin-bottom:106px}}@media (max-width: 991.98px){.use--lett{margin-bottom:79px}}@media (max-width: 767.98px){.use--lett{margin-bottom:81px}}.use--lett .title{margin-bottom:51px}@media (max-width: 1304.98px){.use--lett .title{margin-bottom:39px}}@media (max-width: 767.98px){.use--lett .title{margin-bottom:10px}}.use--lett .use__img{margin-left:-5px;margin-right:-5px;max-width:110%;width:1290px}@media (min-width: 1720px){.use--lett .use__img{width:initial}}@media (max-width: 1304.98px){.use--lett .use__img{margin-left:0;margin-right:0;max-width:100%;width:1120px}}@media (max-width: 767.98px){.use--lett .use__img{max-width:103%;margin-left:-5px;margin-top:-6px}}@media (max-width: 479.98px){.use--lett .use__img{margin-bottom:3px}}@media (max-width: 991.98px){.use .h3{max-width:75%;margin:0 auto 22px}}@media (max-width: 767.98px){.use .h3{max-width:100%;margin-bottom:16px}}
|
||||
189
static/css/moover/uses.css
Normal file
@@ -0,0 +1,189 @@
|
||||
.uses {
|
||||
margin-bottom: 120px;
|
||||
}
|
||||
|
||||
@media (min-width: 1720px) {
|
||||
.uses {
|
||||
margin-bottom: 136px;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 1304.98px) {
|
||||
.uses {
|
||||
margin-bottom: 125px;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 991.98px) {
|
||||
.uses {
|
||||
margin-bottom: 100px;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 479.98px) {
|
||||
.uses {
|
||||
margin-bottom: 199px;
|
||||
}
|
||||
}
|
||||
|
||||
.uses__grid {
|
||||
text-align: left;
|
||||
display: grid;
|
||||
grid-template-columns: repeat(3, 1fr);
|
||||
/* max-width: 101.5%; */
|
||||
/* width: 101.5%; */
|
||||
}
|
||||
|
||||
@media (max-width: 991.98px) {
|
||||
.uses__grid {
|
||||
grid-template-columns: 1fr 1fr;
|
||||
column-gap: 15px;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 479.98px) {
|
||||
.uses__grid {
|
||||
display: block;
|
||||
text-align: center;
|
||||
}
|
||||
}
|
||||
|
||||
.uses__item {
|
||||
min-height: 50px;
|
||||
margin-bottom: 19px;
|
||||
padding: 0 50px 0 2px;
|
||||
}
|
||||
|
||||
@media (min-width: 1720px) {
|
||||
.uses__item {
|
||||
margin-bottom: 22px;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 991.98px) {
|
||||
.uses__item {
|
||||
padding-right: 0;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 991.98px) {
|
||||
.uses__item p:last-child {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
}
|
||||
|
||||
.uses__icon {
|
||||
margin-bottom: 11px;
|
||||
}
|
||||
|
||||
@media (min-width: 1720px) {
|
||||
.uses__icon {
|
||||
width: 147px;
|
||||
height: 147px;
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
}
|
||||
|
||||
.uses .title {
|
||||
max-width: 50%;
|
||||
margin: 0 auto 60px;
|
||||
}
|
||||
|
||||
@media (max-width: 1304.98px) {
|
||||
.uses .title {
|
||||
max-width: 70%;
|
||||
margin-bottom: 39px;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 479.98px) {
|
||||
.uses .title {
|
||||
margin-bottom: 30px;
|
||||
}
|
||||
}
|
||||
|
||||
.uses__title {
|
||||
font-size: 24px;
|
||||
font-weight: 700;
|
||||
line-height: 36px;
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
|
||||
.uses--cstmr .uses__item {
|
||||
text-align: center;
|
||||
padding: 0 15px;
|
||||
}
|
||||
|
||||
@media (max-width: 991.98px) {
|
||||
.uses--cstmr .uses__item {
|
||||
margin-bottom: 42px;
|
||||
min-height: 255px;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 479.98px) {
|
||||
.uses--cstmr .uses__item {
|
||||
margin-bottom: 25px;
|
||||
min-height: 194px;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 991.98px) {
|
||||
.uses--cstmr .uses__item p {
|
||||
max-width: 90%;
|
||||
margin: 0 auto;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 479.98px) {
|
||||
.uses--cstmr .uses__item p {
|
||||
max-width: 100%;
|
||||
}
|
||||
}
|
||||
|
||||
.uses--cstmr .uses__icon {
|
||||
width: 118px;
|
||||
height: 118px;
|
||||
}
|
||||
|
||||
@media (max-width: 991.98px) {
|
||||
.uses--cstmr .uses__icon {
|
||||
width: 142px;
|
||||
height: 142px;
|
||||
margin-bottom: 23px;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 479.98px) {
|
||||
.uses--cstmr .uses__icon {
|
||||
width: 117px;
|
||||
height: 117px;
|
||||
margin-bottom: 8px;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 991.98px) {
|
||||
.uses--cstmr .uses__grid {
|
||||
grid-template-columns: 1fr;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 1304.98px) {
|
||||
.uses--cstmr .title {
|
||||
margin-bottom: 61px;
|
||||
max-width: 80%;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 991.98px) {
|
||||
.uses--cstmr .title {
|
||||
margin-bottom: 44px;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 479.98px) {
|
||||
.uses--cstmr .title {
|
||||
max-width: 90%;
|
||||
margin-bottom: 31px;
|
||||
}
|
||||
}
|
||||
204
static/css/slick-theme.css
Normal file
@@ -0,0 +1,204 @@
|
||||
@charset 'UTF-8';
|
||||
/* Slider */
|
||||
.slick-loading .slick-list
|
||||
{
|
||||
background: #fff url('./ajax-loader.gif') center center no-repeat;
|
||||
}
|
||||
|
||||
/* Icons */
|
||||
@font-face
|
||||
{
|
||||
font-family: 'slick';
|
||||
font-weight: normal;
|
||||
font-style: normal;
|
||||
|
||||
src: url('./fonts/slick.eot');
|
||||
src: url('./fonts/slick.eot?#iefix') format('embedded-opentype'), url('./fonts/slick.woff') format('woff'), url('./fonts/slick.ttf') format('truetype'), url('./fonts/slick.svg#slick') format('svg');
|
||||
}
|
||||
/* Arrows */
|
||||
.slick-prev,
|
||||
.slick-next
|
||||
{
|
||||
font-size: 0;
|
||||
line-height: 0;
|
||||
|
||||
position: absolute;
|
||||
top: 50%;
|
||||
|
||||
display: block;
|
||||
|
||||
width: 20px;
|
||||
height: 20px;
|
||||
padding: 0;
|
||||
-webkit-transform: translate(0, -50%);
|
||||
-ms-transform: translate(0, -50%);
|
||||
transform: translate(0, -50%);
|
||||
|
||||
cursor: pointer;
|
||||
|
||||
color: transparent;
|
||||
border: none;
|
||||
outline: none;
|
||||
background: transparent;
|
||||
}
|
||||
.slick-prev:hover,
|
||||
.slick-prev:focus,
|
||||
.slick-next:hover,
|
||||
.slick-next:focus
|
||||
{
|
||||
color: transparent;
|
||||
outline: none;
|
||||
background: transparent;
|
||||
}
|
||||
.slick-prev:hover:before,
|
||||
.slick-prev:focus:before,
|
||||
.slick-next:hover:before,
|
||||
.slick-next:focus:before
|
||||
{
|
||||
opacity: 1;
|
||||
}
|
||||
.slick-prev.slick-disabled:before,
|
||||
.slick-next.slick-disabled:before
|
||||
{
|
||||
opacity: .25;
|
||||
}
|
||||
|
||||
.slick-prev:before,
|
||||
.slick-next:before
|
||||
{
|
||||
font-family: 'slick';
|
||||
font-size: 20px;
|
||||
line-height: 1;
|
||||
|
||||
opacity: .75;
|
||||
color: white;
|
||||
|
||||
-webkit-font-smoothing: antialiased;
|
||||
-moz-osx-font-smoothing: grayscale;
|
||||
}
|
||||
|
||||
.slick-prev
|
||||
{
|
||||
left: -25px;
|
||||
}
|
||||
[dir='rtl'] .slick-prev
|
||||
{
|
||||
right: -25px;
|
||||
left: auto;
|
||||
}
|
||||
.slick-prev:before
|
||||
{
|
||||
content: '←';
|
||||
}
|
||||
[dir='rtl'] .slick-prev:before
|
||||
{
|
||||
content: '→';
|
||||
}
|
||||
|
||||
.slick-next
|
||||
{
|
||||
right: -25px;
|
||||
}
|
||||
[dir='rtl'] .slick-next
|
||||
{
|
||||
right: auto;
|
||||
left: -25px;
|
||||
}
|
||||
.slick-next:before
|
||||
{
|
||||
content: '→';
|
||||
}
|
||||
[dir='rtl'] .slick-next:before
|
||||
{
|
||||
content: '←';
|
||||
}
|
||||
|
||||
/* Dots */
|
||||
.slick-dotted.slick-slider
|
||||
{
|
||||
margin-bottom: 30px;
|
||||
}
|
||||
|
||||
.slick-dots
|
||||
{
|
||||
position: absolute;
|
||||
bottom: -25px;
|
||||
|
||||
display: block;
|
||||
|
||||
width: 100%;
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
|
||||
list-style: none;
|
||||
|
||||
text-align: center;
|
||||
}
|
||||
.slick-dots li
|
||||
{
|
||||
position: relative;
|
||||
|
||||
display: inline-block;
|
||||
|
||||
width: 20px;
|
||||
height: 20px;
|
||||
margin: 0 5px;
|
||||
padding: 0;
|
||||
|
||||
cursor: pointer;
|
||||
}
|
||||
.slick-dots li button
|
||||
{
|
||||
font-size: 0;
|
||||
line-height: 0;
|
||||
|
||||
display: block;
|
||||
|
||||
width: 20px;
|
||||
height: 20px;
|
||||
padding: 5px;
|
||||
|
||||
cursor: pointer;
|
||||
|
||||
color: transparent;
|
||||
border: 0;
|
||||
outline: none;
|
||||
background: transparent;
|
||||
}
|
||||
.slick-dots li button:hover,
|
||||
.slick-dots li button:focus
|
||||
{
|
||||
outline: none;
|
||||
}
|
||||
.slick-dots li button:hover:before,
|
||||
.slick-dots li button:focus:before
|
||||
{
|
||||
opacity: 1;
|
||||
}
|
||||
.slick-dots li button:before
|
||||
{
|
||||
font-family: 'slick';
|
||||
font-size: 6px;
|
||||
line-height: 20px;
|
||||
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
|
||||
width: 20px;
|
||||
height: 20px;
|
||||
|
||||
content: '•';
|
||||
text-align: center;
|
||||
|
||||
opacity: .25;
|
||||
color: black;
|
||||
|
||||
-webkit-font-smoothing: antialiased;
|
||||
-moz-osx-font-smoothing: grayscale;
|
||||
}
|
||||
.slick-dots li.slick-active button:before
|
||||
{
|
||||
opacity: .75;
|
||||
color: black;
|
||||
}
|
||||
146
static/css/slick.css
Normal file
@@ -0,0 +1,146 @@
|
||||
/* Slider */
|
||||
.slick-slider {
|
||||
position: relative;
|
||||
display: block;
|
||||
box-sizing: border-box;
|
||||
-webkit-user-select: none;
|
||||
-moz-user-select: none;
|
||||
-ms-user-select: none;
|
||||
user-select: none;
|
||||
-webkit-touch-callout: none;
|
||||
-khtml-user-select: none;
|
||||
-ms-touch-action: pan-y;
|
||||
touch-action: pan-y;
|
||||
-webkit-tap-highlight-color: transparent;
|
||||
}
|
||||
|
||||
.slick-list {
|
||||
position: relative;
|
||||
display: block;
|
||||
overflow: hidden;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
.slick-list:focus {
|
||||
outline: none;
|
||||
}
|
||||
|
||||
.slick-list.dragging {
|
||||
cursor: pointer;
|
||||
cursor: hand;
|
||||
}
|
||||
|
||||
.slick-slider .slick-track,
|
||||
.slick-slider .slick-list {
|
||||
-webkit-transform: translate3d(0, 0, 0);
|
||||
-moz-transform: translate3d(0, 0, 0);
|
||||
-ms-transform: translate3d(0, 0, 0);
|
||||
-o-transform: translate3d(0, 0, 0);
|
||||
transform: translate3d(0, 0, 0);
|
||||
}
|
||||
|
||||
.slick-track {
|
||||
position: relative;
|
||||
top: 0;
|
||||
left: 0;
|
||||
display: block;
|
||||
margin-left: auto;
|
||||
margin-right: auto;
|
||||
}
|
||||
|
||||
.slick-track:before,
|
||||
.slick-track:after {
|
||||
display: table;
|
||||
content: '';
|
||||
}
|
||||
|
||||
.slick-track:after {
|
||||
clear: both;
|
||||
}
|
||||
|
||||
.slick-loading .slick-track {
|
||||
visibility: hidden;
|
||||
}
|
||||
|
||||
.slick-slide {
|
||||
display: none;
|
||||
float: left;
|
||||
height: 100%;
|
||||
min-height: 1px;
|
||||
}
|
||||
|
||||
[dir='rtl'] .slick-slide {
|
||||
float: right;
|
||||
}
|
||||
|
||||
.slick-slide img {
|
||||
display: block;
|
||||
}
|
||||
|
||||
.slick-slide.slick-loading img {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.slick-slide.dragging img {
|
||||
pointer-events: none;
|
||||
}
|
||||
|
||||
.slick-initialized .slick-slide {
|
||||
display: block;
|
||||
}
|
||||
|
||||
.slick-loading .slick-slide {
|
||||
visibility: hidden;
|
||||
}
|
||||
|
||||
.slick-vertical .slick-slide {
|
||||
display: block;
|
||||
|
||||
height: auto;
|
||||
|
||||
border: 1px solid transparent;
|
||||
}
|
||||
|
||||
.slick-arrow.slick-hidden {
|
||||
display: none;
|
||||
}
|
||||
|
||||
|
||||
.slick-prev, .slick-next {
|
||||
font-size: 0;
|
||||
line-height: 0;
|
||||
position: absolute;
|
||||
top: 50%;
|
||||
display: block;
|
||||
width: 80px;
|
||||
height: 80px;
|
||||
padding: 0;
|
||||
-webkit-transform: translate(0, -50%);
|
||||
-ms-transform: translate(0, -50%);
|
||||
transform: translate(0, -50%);
|
||||
cursor: pointer;
|
||||
color: transparent;
|
||||
outline: none;
|
||||
background: transparent;
|
||||
-webkit-appearance: none;
|
||||
-moz-appearance: none;
|
||||
appearance: none;
|
||||
border: 1px solid var(--color-primary);
|
||||
outline: 0;
|
||||
border-radius: 50%;
|
||||
box-sizing: border-box;
|
||||
text-indent: -9999px;
|
||||
z-index: 1;
|
||||
background: var(--color-primary) url("/static/img/svg/slick-arrow.svg") no-repeat center;
|
||||
transition: background-color .2s ease-in-out;
|
||||
}
|
||||
|
||||
.slick-next {
|
||||
right: 0;
|
||||
transform: rotate(180deg) translate(0, 50%);
|
||||
}
|
||||
|
||||
.slick-disabled {
|
||||
display: none !important;
|
||||
}
|
||||
@@ -253,6 +253,7 @@ footer {
|
||||
height: 318px;
|
||||
background: #272424;
|
||||
margin-top: 50px;
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
section.register>h1 {
|
||||
@@ -419,6 +420,7 @@ footer>div {
|
||||
font-style: normal;
|
||||
font-weight: 400;
|
||||
line-height: 22px;
|
||||
|
||||
}
|
||||
|
||||
.footer_text_contact {
|
||||
@@ -1000,6 +1002,16 @@ section.register>form {
|
||||
display: inline-block;
|
||||
width: 90%;
|
||||
}
|
||||
.necessary_text {
|
||||
color: rgba(39, 36, 36, 0.60);
|
||||
/* Body text 3 */
|
||||
font-size: 14px;
|
||||
font-style: normal;
|
||||
font-weight: 400;
|
||||
line-height: 20px;
|
||||
display: inline-block;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.button_register>button {
|
||||
display: block;
|
||||
@@ -1209,7 +1221,7 @@ section.login {
|
||||
margin-bottom: 120px;
|
||||
}
|
||||
|
||||
section.login>h1 {
|
||||
section.login>h1, div.recovery_pas>h1 {
|
||||
color: #272424;
|
||||
text-align: center;
|
||||
/* Heading 1 */
|
||||
@@ -1221,7 +1233,7 @@ section.login>h1 {
|
||||
margin-bottom: 40px;
|
||||
}
|
||||
|
||||
section.login>form {
|
||||
section.login>form, div.recovery_pas>form {
|
||||
max-width: 420px;
|
||||
margin: auto;
|
||||
text-align: center;
|
||||
@@ -1293,7 +1305,8 @@ section.login>form {
|
||||
color: rgba(39, 36, 36, 0.60);
|
||||
}
|
||||
.call_to_reg {
|
||||
|
||||
cursor: pointer;
|
||||
text-align: center;
|
||||
color: rgba(39, 36, 36, 0.60);
|
||||
font-style: normal;
|
||||
font-weight: 500;
|
||||
@@ -3355,6 +3368,25 @@ details[open] summary ~ *{
|
||||
|
||||
/*END news articles all*/
|
||||
|
||||
.login.hide{
|
||||
display: none;
|
||||
}
|
||||
.recovery_pas{
|
||||
display: none;
|
||||
}
|
||||
.recovery_pas.show{
|
||||
display: block;
|
||||
}
|
||||
|
||||
.recovery.hide{
|
||||
display: none;
|
||||
}
|
||||
|
||||
input.error::placeholder {
|
||||
color: red;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
BIN
static/favicon/android-icon-144x144.png
Normal file
|
After Width: | Height: | Size: 11 KiB |
BIN
static/favicon/android-icon-192x192.png
Normal file
|
After Width: | Height: | Size: 12 KiB |
BIN
static/favicon/android-icon-36x36.png
Normal file
|
After Width: | Height: | Size: 2.4 KiB |
BIN
static/favicon/android-icon-48x48.png
Normal file
|
After Width: | Height: | Size: 3.3 KiB |
BIN
static/favicon/android-icon-72x72.png
Normal file
|
After Width: | Height: | Size: 5.0 KiB |
BIN
static/favicon/android-icon-96x96.png
Normal file
|
After Width: | Height: | Size: 7.0 KiB |
BIN
static/favicon/apple-icon-114x114.png
Normal file
|
After Width: | Height: | Size: 8.2 KiB |
BIN
static/favicon/apple-icon-120x120.png
Normal file
|
After Width: | Height: | Size: 8.7 KiB |
BIN
static/favicon/apple-icon-144x144.png
Normal file
|
After Width: | Height: | Size: 11 KiB |
BIN
static/favicon/apple-icon-152x152.png
Normal file
|
After Width: | Height: | Size: 11 KiB |
BIN
static/favicon/apple-icon-180x180.png
Normal file
|
After Width: | Height: | Size: 14 KiB |
BIN
static/favicon/apple-icon-57x57.png
Normal file
|
After Width: | Height: | Size: 4.0 KiB |
BIN
static/favicon/apple-icon-60x60.png
Normal file
|
After Width: | Height: | Size: 4.2 KiB |
BIN
static/favicon/apple-icon-72x72.png
Normal file
|
After Width: | Height: | Size: 5.0 KiB |
BIN
static/favicon/apple-icon-76x76.png
Normal file
|
After Width: | Height: | Size: 5.4 KiB |
BIN
static/favicon/apple-icon-precomposed.png
Normal file
|
After Width: | Height: | Size: 13 KiB |
BIN
static/favicon/apple-icon.png
Normal file
|
After Width: | Height: | Size: 13 KiB |
BIN
static/favicon/favicon-16x16.png
Normal file
|
After Width: | Height: | Size: 1.5 KiB |
BIN
static/favicon/favicon-32x32.png
Normal file
|
After Width: | Height: | Size: 2.2 KiB |
BIN
static/favicon/favicon-96x96.png
Normal file
|
After Width: | Height: | Size: 7.0 KiB |
BIN
static/favicon/favicon.ico
Normal file
|
After Width: | Height: | Size: 1.1 KiB |
|
Before Width: | Height: | Size: 81 KiB After Width: | Height: | Size: 81 KiB |
BIN
static/favicon/ms-icon-144x144.png
Normal file
|
After Width: | Height: | Size: 11 KiB |
BIN
static/favicon/ms-icon-150x150.png
Normal file
|
After Width: | Height: | Size: 11 KiB |
BIN
static/favicon/ms-icon-310x310.png
Normal file
|
After Width: | Height: | Size: 31 KiB |
BIN
static/favicon/ms-icon-70x70.png
Normal file
|
After Width: | Height: | Size: 4.9 KiB |
BIN
static/img/png/Box10.png
Normal file
|
After Width: | Height: | Size: 80 KiB |
BIN
static/img/png/Box11.png
Normal file
|
After Width: | Height: | Size: 19 KiB |
BIN
static/img/png/Box12.png
Normal file
|
After Width: | Height: | Size: 20 KiB |
BIN
static/img/png/Box9.png
Normal file
|
After Width: | Height: | Size: 73 KiB |
BIN
static/img/png/customer/sender-card2.png
Normal file
|
After Width: | Height: | Size: 844 KiB |
BIN
static/img/png/customer/sender-card3-md.png
Normal file
|
After Width: | Height: | Size: 326 KiB |
BIN
static/img/png/customer/sender-card3.png
Normal file
|
After Width: | Height: | Size: 467 KiB |
BIN
static/img/png/customer/use-1120.png
Normal file
|
After Width: | Height: | Size: 3.0 MiB |
BIN
static/img/png/customer/use-1280.png
Normal file
|
After Width: | Height: | Size: 3.0 MiB |
BIN
static/img/png/customer/use-1720.png
Normal file
|
After Width: | Height: | Size: 3.0 MiB |
BIN
static/img/png/customer/use-328.png
Normal file
|
After Width: | Height: | Size: 777 KiB |
BIN
static/img/png/customer/use-640.png
Normal file
|
After Width: | Height: | Size: 2.3 MiB |
BIN
static/img/png/mover/about-1120.png
Normal file
|
After Width: | Height: | Size: 605 KiB |
BIN
static/img/png/mover/about-1280.png
Normal file
|
After Width: | Height: | Size: 706 KiB |
BIN
static/img/png/mover/about-1720.png
Normal file
|
After Width: | Height: | Size: 884 KiB |
BIN
static/img/png/mover/about-328.png
Normal file
|
After Width: | Height: | Size: 305 KiB |
BIN
static/img/png/mover/about-640.png
Normal file
|
After Width: | Height: | Size: 689 KiB |
BIN
static/img/png/mover/benefits-1120.png
Normal file
|
After Width: | Height: | Size: 1.3 MiB |
BIN
static/img/png/mover/benefits-1280.png
Normal file
|
After Width: | Height: | Size: 1.7 MiB |
BIN
static/img/png/mover/benefits-1720.png
Normal file
|
After Width: | Height: | Size: 2.6 MiB |
BIN
static/img/png/mover/benefits-328.png
Normal file
|
After Width: | Height: | Size: 558 KiB |
BIN
static/img/png/mover/benefits-640.png
Normal file
|
After Width: | Height: | Size: 1.7 MiB |
BIN
static/img/png/mover/image1.png
Normal file
|
After Width: | Height: | Size: 78 KiB |
BIN
static/img/png/mover/image2.png
Normal file
|
After Width: | Height: | Size: 74 KiB |
BIN
static/img/png/mover/image3.png
Normal file
|
After Width: | Height: | Size: 60 KiB |
BIN
static/img/png/mover/image4.png
Normal file
|
After Width: | Height: | Size: 99 KiB |
BIN
static/img/png/mover/sender-card1.png
Normal file
|
After Width: | Height: | Size: 1.2 MiB |
BIN
static/img/png/mover/sender-card2.png
Normal file
|
After Width: | Height: | Size: 967 KiB |
BIN
static/img/png/mover/sender-card3-md.png
Normal file
|
After Width: | Height: | Size: 380 KiB |
BIN
static/img/png/mover/sender-card3.png
Normal file
|
After Width: | Height: | Size: 501 KiB |