Compare commits
187 Commits
488cd72f2c
...
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 | |||
|
|
b4beac26a7 | ||
|
|
86d78fdd06 | ||
|
|
92ad985355 | ||
|
|
eaf94f0ceb | ||
|
|
acee0ccec5 | ||
|
|
fddea097d3 | ||
|
|
7dc25532a3 | ||
|
|
19721cf5da | ||
|
|
a6d9d1595a | ||
| 5e0d5f4b91 | |||
| 09a6de1544 | |||
| a20b502b70 | |||
| 8bb8013f67 | |||
| 94c7c54cc1 | |||
| c257d22618 | |||
| b57dbb75e8 | |||
| 9781f33440 | |||
| 45b4236748 | |||
| 8b0c82c3ca | |||
| 5518a99ee9 | |||
| 63124a350e | |||
|
|
c7de08ca49 | ||
|
|
41e4b23317 | ||
|
|
b23f379db0 | ||
|
|
1faf9e0cc7 | ||
|
|
90e1a87bf4 | ||
| 9ec8d4189f | |||
| 8f08e360ef | |||
|
|
4371cd1a85 | ||
|
|
f6ba0ab1ad | ||
|
|
c60b9942f6 | ||
|
|
85f6e69d63 | ||
|
|
83aeab9341 | ||
|
|
8a539a2868 |
4
.gitignore
vendored
@@ -415,3 +415,7 @@ fabric.properties
|
|||||||
# Android studio 3.1+ serialized cache file
|
# Android studio 3.1+ serialized cache file
|
||||||
.idea/caches/build_file_checksums.ser
|
.idea/caches/build_file_checksums.ser
|
||||||
|
|
||||||
|
# packages for node
|
||||||
|
package.json
|
||||||
|
package-lock.json
|
||||||
|
|
||||||
|
|||||||
@@ -26,7 +26,7 @@ class RegistrationForm(forms.Form):
|
|||||||
email = forms.EmailField()
|
email = forms.EmailField()
|
||||||
password = forms.CharField(widget=forms.PasswordInput())
|
password = forms.CharField(widget=forms.PasswordInput())
|
||||||
confirm_password = forms.CharField(widget=forms.PasswordInput())
|
confirm_password = forms.CharField(widget=forms.PasswordInput())
|
||||||
tel = forms.CharField()
|
tel = forms.CharField(required=False)
|
||||||
agreement = forms.BooleanField(initial=False, required=True)
|
agreement = forms.BooleanField(initial=False, required=True)
|
||||||
|
|
||||||
def __init__(self, *args, **kwargs):
|
def __init__(self, *args, **kwargs):
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
from django.http import QueryDict
|
||||||
from django.template.loader import render_to_string
|
from django.template.loader import render_to_string
|
||||||
from SubscribesApp.funcs import check_option_in_cur_user_subscribe
|
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
|
return None
|
||||||
|
|
||||||
|
|
||||||
def get_profile_change_page_content_html(request):
|
def get_profile_change_page_content_html(request, data=None):
|
||||||
|
|
||||||
init_Dict = {
|
init_Dict = {
|
||||||
'firstname': request.user.first_name,
|
'firstname': request.user.first_name,
|
||||||
@@ -66,6 +67,25 @@ def get_profile_change_page_content_html(request):
|
|||||||
'country': request.user.user_profile.country,
|
'country': request.user.user_profile.country,
|
||||||
'city': request.user.user_profile.city,
|
'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
|
from .forms import RegistrationForm
|
||||||
form = RegistrationForm(initial=init_Dict)
|
form = RegistrationForm(initial=init_Dict)
|
||||||
|
|
||||||
|
|||||||
@@ -23,6 +23,8 @@ urlpatterns = [
|
|||||||
|
|
||||||
path('support_tickets/', support_tickets_ajax, name='support_tickets_ajax'),
|
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/', change_profile_ajax, name='change_profile_ajax'),
|
||||||
path('change_profile_confirm/', change_profile_confirm_ajax, name='change_profile_confirm_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)
|
# html = render_to_string('blocks/profile/b_subscribe.html', Dict, request=request)
|
||||||
# return JsonResponse({'html': html}, status=200)
|
# 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):
|
def mailing_subscribe_ajax(request):
|
||||||
if request.method != 'POST':
|
if request.method != 'POST':
|
||||||
@@ -195,7 +314,18 @@ def send_message_ajax(request):
|
|||||||
html = render_to_string('mail/m_request_offer.html', Dict, request)
|
html = render_to_string('mail/m_request_offer.html', Dict, request)
|
||||||
from BaseModels.mailSender import admin_send_mail_by_SMTPlib
|
from BaseModels.mailSender import admin_send_mail_by_SMTPlib
|
||||||
mail_sets = get_mail_send_options()
|
mail_sets = get_mail_send_options()
|
||||||
to = [mail_sets['sender_email'], 'web@syncsystems.net']
|
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,
|
||||||
|
from_email=mail_sets['sender_email'], to=to,
|
||||||
|
html_content=html
|
||||||
|
)
|
||||||
|
to = ['web@syncsystems.net']
|
||||||
res = admin_send_mail_by_SMTPlib(
|
res = admin_send_mail_by_SMTPlib(
|
||||||
mail_sets,
|
mail_sets,
|
||||||
subject=subject,
|
subject=subject,
|
||||||
@@ -213,7 +343,6 @@ def send_message_ajax(request):
|
|||||||
res_Dict.update(get_add_to_ajax_response_Dict(request.user))
|
res_Dict.update(get_add_to_ajax_response_Dict(request.user))
|
||||||
return JsonResponse(res_Dict)
|
return JsonResponse(res_Dict)
|
||||||
|
|
||||||
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
return JsonResponse({
|
return JsonResponse({
|
||||||
'status': 'error',
|
'status': 'error',
|
||||||
@@ -377,7 +506,7 @@ def change_profile_confirm_ajax(request):
|
|||||||
if data_for_save:
|
if data_for_save:
|
||||||
user_profiles.update(**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
|
from GeneralApp.funcs import get_add_to_ajax_response_Dict
|
||||||
res_Dict = {'html': html}
|
res_Dict = {'html': html}
|
||||||
res_Dict.update(get_add_to_ajax_response_Dict(request.user))
|
res_Dict.update(get_add_to_ajax_response_Dict(request.user))
|
||||||
@@ -514,15 +643,23 @@ def send_check_email_after_registration(data_Dict, user):
|
|||||||
html = render_to_string('mail/m_confirm_email.html', Dict)
|
html = render_to_string('mail/m_confirm_email.html', Dict)
|
||||||
from BaseModels.mailSender import admin_send_mail_by_SMTPlib
|
from BaseModels.mailSender import admin_send_mail_by_SMTPlib
|
||||||
mail_sets = get_mail_send_options()
|
mail_sets = get_mail_send_options()
|
||||||
to = [user.email, 'web@syncsystems.net', 'sa@a3-global.com', 'sysadmin.hax@gmail.com']
|
to = [user.email]
|
||||||
res = admin_send_mail_by_SMTPlib(
|
res = admin_send_mail_by_SMTPlib(
|
||||||
mail_sets,
|
mail_sets,
|
||||||
subject=subject,
|
subject=subject,
|
||||||
from_email=mail_sets['sender_email'], to=to,
|
from_email=mail_sets['sender_email'], to=to,
|
||||||
html_content=html
|
html_content=html
|
||||||
)
|
)
|
||||||
|
to = ['web@syncsystems.net', 'sa@a3-global.com', 'sysadmin.hax@gmail.com']
|
||||||
|
admin_send_mail_by_SMTPlib(
|
||||||
|
mail_sets,
|
||||||
|
subject=subject,
|
||||||
|
from_email=mail_sets['sender_email'], to=to,
|
||||||
|
html_content=html
|
||||||
|
)
|
||||||
|
|
||||||
return res
|
return res
|
||||||
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
print(f'send_registration_mail Error = {str(e)}')
|
print(f'send_registration_mail Error = {str(e)}')
|
||||||
return None
|
return None
|
||||||
@@ -578,6 +715,7 @@ def registration_ajax(request):
|
|||||||
}
|
}
|
||||||
|
|
||||||
res = send_check_email_after_registration(mail_Dict, user)
|
res = send_check_email_after_registration(mail_Dict, user)
|
||||||
|
print(str(res))
|
||||||
# res = send_registration_mail(mail_Dict, user)
|
# res = send_registration_mail(mail_Dict, user)
|
||||||
|
|
||||||
res_Dict = {
|
res_Dict = {
|
||||||
|
|||||||
@@ -8,6 +8,9 @@ from django.contrib.auth import views
|
|||||||
urlpatterns = [
|
urlpatterns = [
|
||||||
|
|
||||||
path('registration/', registration_View, name='registration_page'),
|
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('', user_profile_View, name='user_profile'),
|
||||||
# path('page/chat/<int:user_id>/', chat_w_user_View, name='chat_w_user'),
|
# 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'),
|
# path('page/chat/', chat_w_user_View, name='chat_w_user_wo_user_id'),
|
||||||
|
|||||||
@@ -37,15 +37,23 @@ def send_registration_mail(user):
|
|||||||
html = render_to_string('mail/m_registration.html', Dict)
|
html = render_to_string('mail/m_registration.html', Dict)
|
||||||
from BaseModels.mailSender import admin_send_mail_by_SMTPlib
|
from BaseModels.mailSender import admin_send_mail_by_SMTPlib
|
||||||
mail_sets = get_mail_send_options()
|
mail_sets = get_mail_send_options()
|
||||||
to = [user.email, 'web@syncsystems.net', 'sa@a3-global.com', 'sysadmin.hax@gmail.com']
|
to = [user.email]
|
||||||
res = admin_send_mail_by_SMTPlib(
|
res = admin_send_mail_by_SMTPlib(
|
||||||
mail_sets,
|
mail_sets,
|
||||||
subject=subject,
|
subject=subject,
|
||||||
from_email=mail_sets['sender_email'], to=to,
|
from_email=mail_sets['sender_email'], to=to,
|
||||||
html_content=html
|
html_content=html
|
||||||
)
|
)
|
||||||
|
to = ['web@syncsystems.net', 'sa@a3-global.com', 'sysadmin.hax@gmail.com']
|
||||||
|
admin_send_mail_by_SMTPlib(
|
||||||
|
mail_sets,
|
||||||
|
subject=subject,
|
||||||
|
from_email=mail_sets['sender_email'], to=to,
|
||||||
|
html_content=html
|
||||||
|
)
|
||||||
|
|
||||||
return res
|
return res
|
||||||
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
print(f'send_registration_mail Error = {str(e)}')
|
print(f'send_registration_mail Error = {str(e)}')
|
||||||
return None
|
return None
|
||||||
@@ -270,12 +278,19 @@ def decode_get_param(data):
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
def recovery_password_user(request, uidb64=None, token=None):
|
def recovery_password_page_View(request, user_id, token):
|
||||||
from django.contrib.auth.views import PasswordResetConfirmView
|
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)
|
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):
|
def __str__(self):
|
||||||
if self.name:
|
if self.name:
|
||||||
return self.name
|
return self.name
|
||||||
else:
|
else:
|
||||||
return str(self.id)
|
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):
|
def pop_node_by_name(self, node_name):
|
||||||
if not self.json_data or not node_name in self.json_data:
|
if not self.json_data or not node_name in self.json_data:
|
||||||
return None
|
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_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')
|
FAQ_items = GenericRelation('GeneralApp.FAQitem', related_query_name='grel_%(class)s_for_faq_item')
|
||||||
|
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
abstract = True
|
abstract = True
|
||||||
|
|
||||||
|
|||||||
@@ -145,8 +145,8 @@ def send_mail_by_SMTPlib(sets, subject, from_email, to_init, html_content, smtp_
|
|||||||
res = None
|
res = None
|
||||||
|
|
||||||
if type(to) in (list, tuple):
|
if type(to) in (list, tuple):
|
||||||
if sets['sender_email'] in to:
|
# if sets['sender_email'] in to:
|
||||||
to.remove(sets['sender_email'])
|
# to.remove(sets['sender_email'])
|
||||||
|
|
||||||
if len(to) > 1:
|
if len(to) > 1:
|
||||||
to_str = u', '.join(to)
|
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.contrib import admin
|
||||||
from django.utils.translation import gettext as _
|
from django.utils.translation import gettext as _
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class Admin_StaticPage(Admin_Trans_BaseModelViewPage):
|
class Admin_StaticPage(Admin_Trans_BaseModelViewPage):
|
||||||
|
|
||||||
fieldsets = [
|
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 django.utils.translation import gettext_lazy as _
|
||||||
# from ckeditor.fields import RichTextField
|
# from ckeditor.fields import RichTextField
|
||||||
from ckeditor_uploader.fields import RichTextUploadingField
|
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):
|
class StaticPage(BaseModelViewPage):
|
||||||
promo_header = models.BooleanField(verbose_name=_('Промо-хэдер'), default=False)
|
promo_header = models.BooleanField(verbose_name=_('Промо-хэдер'), default=False)
|
||||||
@@ -29,9 +49,6 @@ class Option(BaseModel):
|
|||||||
|
|
||||||
class FAQitem(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)
|
content_type = models.ForeignKey(ContentType, on_delete=models.SET_NULL, null=True)
|
||||||
object_id = models.PositiveIntegerField()
|
object_id = models.PositiveIntegerField()
|
||||||
content_object = GenericForeignKey('content_type', 'object_id')
|
content_object = GenericForeignKey('content_type', 'object_id')
|
||||||
|
|||||||
@@ -27,3 +27,9 @@ class FAQitem_TranslationOptions(TranslationOptions):
|
|||||||
)
|
)
|
||||||
translator.register(FAQitem, FAQitem_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 = [
|
urlpatterns = [
|
||||||
path('', MainPage, name='main'),
|
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('page/<str:url>/', StaticPageView, name='static_page'),
|
||||||
path('test_code', test_code, name='test_code'),
|
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
|
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.template import loader, RequestContext
|
||||||
from django.contrib.auth.decorators import login_required
|
from django.contrib.auth.decorators import login_required
|
||||||
|
|
||||||
from .models import *
|
from .models import *
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from .funcs import get_inter_http_response
|
from .funcs import get_inter_http_response
|
||||||
@@ -14,14 +15,113 @@ from django.views.decorators.csrf import csrf_exempt
|
|||||||
from webpush import send_user_notification
|
from webpush import send_user_notification
|
||||||
import json
|
import json
|
||||||
from datetime import datetime, timedelta
|
from datetime import datetime, timedelta
|
||||||
|
from django.urls import reverse
|
||||||
|
|
||||||
|
def generate_routes(request, routes_count):
|
||||||
|
if (not request.user
|
||||||
|
or not request.user.is_active
|
||||||
|
or not request.user.is_authenticated
|
||||||
|
or not request.user.is_staff
|
||||||
|
):
|
||||||
|
raise Http404
|
||||||
|
|
||||||
def test_code(request):
|
|
||||||
from RoutesApp.funcs import get_city_by_type_transport_and_address_point
|
from RoutesApp.funcs import get_city_by_type_transport_and_address_point
|
||||||
from RoutesApp.models import Route
|
from RoutesApp.models import Route
|
||||||
from ReferenceDataApp.models import Airport, City
|
from ReferenceDataApp.models import Airport, City
|
||||||
|
|
||||||
res = None
|
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(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',
|
||||||
|
# departure_DT=datetime(year=2024, month=9, day=1),
|
||||||
|
# arrival_DT=datetime(year=2024, month=9, day=3),
|
||||||
|
# from_address_point = from_air.id,
|
||||||
|
# to_address_point = to_air.id,
|
||||||
|
# from_city = from_air.city,
|
||||||
|
# to_city = to_air.city,
|
||||||
|
# weight = item,
|
||||||
|
# phone = '1234567890',
|
||||||
|
# owner = request.user
|
||||||
|
# ) for item in range(1000)
|
||||||
|
# ]
|
||||||
|
#
|
||||||
|
# Route.objects.bulk_create(routes)
|
||||||
|
|
||||||
|
|
||||||
|
# from RoutesApp.search_matches import search_matches
|
||||||
|
# routes = Route.objects.filter()[:10]
|
||||||
|
# msg = search_matches(routes)
|
||||||
|
|
||||||
# from ReferenceDataApp.funcs import parse_data
|
# from ReferenceDataApp.funcs import parse_data
|
||||||
# parse_data()
|
# parse_data()
|
||||||
|
|
||||||
@@ -49,7 +149,52 @@ def Page404(request, exeption=None):
|
|||||||
except Exception as e:
|
except Exception as e:
|
||||||
return HttpResponse(str(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):
|
def MainPage(request):
|
||||||
@@ -104,6 +249,12 @@ def StaticPageView(request, url):
|
|||||||
'route_form': RouteForm(),
|
'route_form': RouteForm(),
|
||||||
'owner_type': 'mover'
|
'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':
|
# elif url == 'works':
|
||||||
# return WorksPage(request)
|
# return WorksPage(request)
|
||||||
elif url in ['main']:
|
elif url in ['main']:
|
||||||
|
|||||||
@@ -3,20 +3,33 @@ from .models import *
|
|||||||
from django.contrib import admin
|
from django.contrib import admin
|
||||||
|
|
||||||
class Admin_Route(Admin_Trans_BaseModel):
|
class Admin_Route(Admin_Trans_BaseModel):
|
||||||
readonly_fields = ['highlight_end_DT', 'rising_DT']
|
readonly_fields = [
|
||||||
|
# 'highlight_end_DT',
|
||||||
|
'rising_DT'
|
||||||
|
]
|
||||||
list_display = [
|
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',
|
'departure_DT', 'from_city', 'from_place',
|
||||||
'arrival_DT', 'to_city', 'to_place', 'owner',
|
'arrival_DT', 'to_city', 'to_place', 'owner',
|
||||||
'order', 'modifiedDT', 'createDT'
|
'order', 'modifiedDT', 'createDT'
|
||||||
]
|
]
|
||||||
|
list_editable = ['rising_DT']
|
||||||
|
|
||||||
list_display_links = ['id']
|
list_display_links = ['id']
|
||||||
|
|
||||||
list_filter = ['owner_type', 'type_transport', 'cargo_type', 'from_place', 'arrival_DT', 'modifiedDT', 'createDT']
|
list_filter = [
|
||||||
search_fields = [
|
'owner_type', 'type_transport',
|
||||||
'owner__first_name', 'owner__last_name', 'from_city__name', 'to_city__name'
|
'rising_DT',
|
||||||
|
'cargo_type',
|
||||||
|
'from_place', 'arrival_DT',
|
||||||
|
'modifiedDT', 'createDT'
|
||||||
]
|
]
|
||||||
raw_id_fields = ['from_city', 'to_city']
|
|
||||||
|
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)
|
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 .models import *
|
||||||
from .forms import *
|
from .forms import *
|
||||||
from django.utils.translation import gettext as _
|
from django.utils.translation import gettext as _
|
||||||
from django.template.loader import render_to_string
|
from django.template.loader import render_to_string
|
||||||
from datetime import datetime
|
from datetime import datetime, timedelta
|
||||||
from django.db.models import F
|
from django.db.models import F, Q
|
||||||
|
|
||||||
elements_on_page = 25
|
elements_on_page = 25
|
||||||
|
|
||||||
@@ -170,6 +172,7 @@ def get_routes_Dict(user=None, data=None):
|
|||||||
'owner': user
|
'owner': user
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
||||||
from_el = None
|
from_el = None
|
||||||
to_el = None
|
to_el = None
|
||||||
|
|
||||||
@@ -258,6 +261,12 @@ def get_routes_Dict(user=None, data=None):
|
|||||||
# rising_DT=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(
|
routes = Route.objects.filter(
|
||||||
**kwargs
|
**kwargs
|
||||||
).order_by(
|
).order_by(
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
import json
|
import json
|
||||||
|
from copy import deepcopy
|
||||||
|
|
||||||
from django.shortcuts import render
|
from django.shortcuts import render
|
||||||
|
|
||||||
@@ -304,6 +305,14 @@ def get_my_routes_ajax(request):
|
|||||||
data = json.loads(request.body)
|
data = json.loads(request.body)
|
||||||
|
|
||||||
try:
|
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)
|
routes_Dict = get_routes_Dict(request.user, data)
|
||||||
if 'errors' in routes_Dict:
|
if 'errors' in routes_Dict:
|
||||||
return JsonResponse(routes_Dict, status=400)
|
return JsonResponse(routes_Dict, status=400)
|
||||||
@@ -347,6 +356,7 @@ def create_or_change_route_ajax(request, route_id=None):
|
|||||||
lang = get_and_set_lang(request)
|
lang = get_and_set_lang(request)
|
||||||
|
|
||||||
Dict = {}
|
Dict = {}
|
||||||
|
route_old_Dict = None
|
||||||
|
|
||||||
try:
|
try:
|
||||||
|
|
||||||
@@ -361,6 +371,7 @@ def create_or_change_route_ajax(request, route_id=None):
|
|||||||
if route:
|
if route:
|
||||||
form = RouteForm(data, instance=route)
|
form = RouteForm(data, instance=route)
|
||||||
Dict.update({'route': route})
|
Dict.update({'route': route})
|
||||||
|
route_old_Dict = deepcopy(route.__dict__)
|
||||||
else:
|
else:
|
||||||
form = RouteForm(data)
|
form = RouteForm(data)
|
||||||
|
|
||||||
@@ -381,6 +392,16 @@ def create_or_change_route_ajax(request, route_id=None):
|
|||||||
if obj.to_address_point:
|
if obj.to_address_point:
|
||||||
obj.to_city = get_city_by_type_transport_and_address_point(obj.type_transport, obj.to_address_point)
|
obj.to_city = get_city_by_type_transport_and_address_point(obj.type_transport, obj.to_address_point)
|
||||||
|
|
||||||
|
if route_old_Dict:
|
||||||
|
if route_old_Dict['highlight_color'] != obj.highlight_color:
|
||||||
|
obj.highlight_color = route_old_Dict['highlight_color']
|
||||||
|
|
||||||
|
if route_old_Dict['highlight_end_DT'] != obj.highlight_end_DT:
|
||||||
|
obj.highlight_end_DT = route_old_Dict['highlight_end_DT']
|
||||||
|
|
||||||
|
if route_old_Dict['rising_DT'] != obj.rising_DT:
|
||||||
|
obj.rising_DT = route_old_Dict['rising_DT']
|
||||||
|
|
||||||
obj.owner = request.user
|
obj.owner = request.user
|
||||||
obj.save()
|
obj.save()
|
||||||
|
|
||||||
|
|||||||
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=_('Куда можете доставить?'))
|
verbose_name=_('Куда можете доставить?'))
|
||||||
cargo_type = models.CharField(choices=cargo_type_choices, default='parcel', verbose_name=_('Могу перевезти'))
|
cargo_type = models.CharField(choices=cargo_type_choices, default='parcel', verbose_name=_('Могу перевезти'))
|
||||||
weight = models.IntegerField(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)
|
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_email = models.BooleanField(default=False, verbose_name=_('Получать уведомления по E-mail'))
|
||||||
receive_msg_by_sms = models.BooleanField(default=False, verbose_name=_('Получать уведомления по SMS'))
|
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}')
|
print(f'send_mail_found_matches_routes to route id = {route.id}')
|
||||||
|
|
||||||
Dict = {
|
Dict = {
|
||||||
@@ -59,7 +59,7 @@ def send_mail_found_matches_routes(route, data_Dict):
|
|||||||
|
|
||||||
|
|
||||||
mail_sets = get_mail_send_options()
|
mail_sets = get_mail_send_options()
|
||||||
to = [route.owner.email, 'web@syncsystems.net']
|
to = [route.owner.email]
|
||||||
subject = _('Мы нашли исполнителя по Вашему объявлению!')
|
subject = _('Мы нашли исполнителя по Вашему объявлению!')
|
||||||
res = admin_send_mail_by_SMTPlib(
|
res = admin_send_mail_by_SMTPlib(
|
||||||
mail_sets,
|
mail_sets,
|
||||||
@@ -68,9 +68,68 @@ def send_mail_found_matches_routes(route, data_Dict):
|
|||||||
html_content=html
|
html_content=html
|
||||||
)
|
)
|
||||||
|
|
||||||
|
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,
|
||||||
|
from_email=mail_sets['sender_email'], to=to,
|
||||||
|
html_content=html
|
||||||
|
)
|
||||||
|
|
||||||
return res
|
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):
|
def search_matches(for_routes=None):
|
||||||
print('search_matches')
|
print('search_matches')
|
||||||
|
|
||||||
@@ -84,8 +143,11 @@ def search_matches(for_routes=None):
|
|||||||
)
|
)
|
||||||
|
|
||||||
check_fields = [
|
check_fields = [
|
||||||
'type_transport', 'departure_DT', 'arrival_DT', 'from_address_point', 'to_address_point',
|
'type_transport', 'departure_DT', 'arrival_DT',
|
||||||
'from_place', 'to_place', 'cargo_type', 'weight'
|
# 'from_address_point', 'to_address_point',
|
||||||
|
'from_place', 'to_place',
|
||||||
|
'cargo_type', 'weight',
|
||||||
|
'from_city', 'to_city',
|
||||||
]
|
]
|
||||||
|
|
||||||
if for_routes:
|
if for_routes:
|
||||||
@@ -106,11 +168,20 @@ def search_matches(for_routes=None):
|
|||||||
kwargs.update({f"{field_name}__date": field_val.date()})
|
kwargs.update({f"{field_name}__date": field_val.date()})
|
||||||
elif field_name == 'weight':
|
elif field_name == 'weight':
|
||||||
# print(field_name)
|
# print(field_name)
|
||||||
params.update({f"{field_name}": field_val})
|
|
||||||
if route.owner_type == 'mover':
|
if route.owner_type == 'mover':
|
||||||
|
# params.update({f"{field_name}__lte": field_val})
|
||||||
kwargs.update({f"{field_name}__lte": field_val})
|
kwargs.update({f"{field_name}__lte": field_val})
|
||||||
else:
|
else:
|
||||||
|
# params.update({f"{field_name}__gte": field_val})
|
||||||
kwargs.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:
|
else:
|
||||||
kwargs.update({field_name: field_val})
|
kwargs.update({field_name: field_val})
|
||||||
params.update({field_name: field_val})
|
params.update({field_name: field_val})
|
||||||
@@ -128,39 +199,9 @@ def search_matches(for_routes=None):
|
|||||||
|
|
||||||
if found_routes:
|
if found_routes:
|
||||||
msg = f'found routes for send messages = {found_routes.count()}'
|
msg = f'found routes for send messages = {found_routes.count()}'
|
||||||
|
|
||||||
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)
|
print(msg)
|
||||||
log += msg
|
|
||||||
|
|
||||||
if data_Dict and check_option_in_cur_user_subscribe(
|
log += users_notify_by_result_search_matches(route, found_routes, params)
|
||||||
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
|
|
||||||
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
msg = f'<br>\n! search_matches Error = {str(e)}'
|
msg = f'<br>\n! search_matches Error = {str(e)}'
|
||||||
|
|||||||
@@ -99,6 +99,6 @@ class Admin_SubscribeForUser(Admin_Trans_BaseModel):
|
|||||||
'modifiedDT', 'createDT'
|
'modifiedDT', 'createDT'
|
||||||
]
|
]
|
||||||
list_editable = ['enable']
|
list_editable = ['enable']
|
||||||
search_fields = ['name']
|
search_fields = ['name', 'id', 'user__email', 'user__first_name', 'user__last_name']
|
||||||
|
|
||||||
admin.site.register(SubscribeForUser,Admin_SubscribeForUser)
|
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 = [
|
||||||
|
]
|
||||||
@@ -30,7 +30,7 @@ def send_mail_for_user_subscribes_that_is_going_to_finish():
|
|||||||
html = render_to_string('mail/m_user_subscribes_that_is_going_to_finish.html', Dict)
|
html = render_to_string('mail/m_user_subscribes_that_is_going_to_finish.html', Dict)
|
||||||
from BaseModels.mailSender import admin_send_mail_by_SMTPlib
|
from BaseModels.mailSender import admin_send_mail_by_SMTPlib
|
||||||
mail_sets = get_mail_send_options()
|
mail_sets = get_mail_send_options()
|
||||||
to = [user_subscribe.user.email, 'web@syncsystems.net', 'sa@a3-global.com', 'sysadmin.hax@gmail.com']
|
to = [user_subscribe.user.email]
|
||||||
res = admin_send_mail_by_SMTPlib(
|
res = admin_send_mail_by_SMTPlib(
|
||||||
mail_sets,
|
mail_sets,
|
||||||
subject=subject,
|
subject=subject,
|
||||||
@@ -40,7 +40,13 @@ def send_mail_for_user_subscribes_that_is_going_to_finish():
|
|||||||
if res and type(res) == str:
|
if res and type(res) == str:
|
||||||
print(res)
|
print(res)
|
||||||
# log += f'\n{res}'
|
# log += f'\n{res}'
|
||||||
|
to = ['web@syncsystems.net', 'sa@a3-global.com', 'sysadmin.hax@gmail.com']
|
||||||
|
admin_send_mail_by_SMTPlib(
|
||||||
|
mail_sets,
|
||||||
|
subject=subject,
|
||||||
|
from_email=mail_sets['sender_email'], to=to,
|
||||||
|
html_content=html
|
||||||
|
)
|
||||||
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
msg = (f'send_mail_for_user_subscribes_that_is_going_to_finish '
|
msg = (f'send_mail_for_user_subscribes_that_is_going_to_finish '
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
User-agent: *
|
User-agent: *
|
||||||
Allow: /
|
Disallow: /
|
||||||
Disallow: */admin/*
|
Disallow: */admin/*
|
||||||
|
|
||||||
Host: tripwb.com
|
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 copy import deepcopy
|
||||||
|
from django.db import models
|
||||||
|
from django.utils.translation import gettext as _
|
||||||
|
|
||||||
|
|
||||||
class Admin_BaseModel(Admin_BaseIconModel):
|
class Admin_BaseModel(Admin_BaseIconModel):
|
||||||
@@ -86,12 +90,17 @@ class AdminTranslationBase(TranslationAdmin):
|
|||||||
'screen': ('modeltranslation/css/tabbed_translation_fields.css',),
|
'screen': ('modeltranslation/css/tabbed_translation_fields.css',),
|
||||||
}
|
}
|
||||||
|
|
||||||
from modeltranslation.admin import TranslationGenericStackedInline
|
from modeltranslation.admin import TranslationGenericStackedInline, TranslationGenericTabularInline
|
||||||
class AdminStacked_FAQitem(TranslationGenericStackedInline):
|
class TranslationGenericTabularInlineCustom(TranslationGenericTabularInline):
|
||||||
from GeneralApp.models import FAQitem
|
formfield_overrides = {
|
||||||
model = FAQitem
|
models.ImageField: {'widget': AdminImageWidget},
|
||||||
extra = 0
|
}
|
||||||
fields = ['order', 'question', 'answer']
|
|
||||||
|
def image_thumb(self, obj):
|
||||||
|
return get_image_thumb(self, obj)
|
||||||
|
|
||||||
|
image_thumb.short_description = _('Миниатюра')
|
||||||
|
image_thumb.allow_tags = True
|
||||||
|
|
||||||
class Media:
|
class Media:
|
||||||
|
|
||||||
@@ -105,6 +114,46 @@ class AdminStacked_FAQitem(TranslationGenericStackedInline):
|
|||||||
'screen': ('modeltranslation/css/tabbed_translation_fields.css',),
|
'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):
|
class Admin_BaseModelViewPage(Admin_BaseIconModel):
|
||||||
pass
|
pass
|
||||||
# def get_fieldsets(self, request, obj=None):
|
# def get_fieldsets(self, request, obj=None):
|
||||||
@@ -129,7 +178,7 @@ class Admin_BaseModelViewPage(Admin_BaseIconModel):
|
|||||||
# else:
|
# else:
|
||||||
# return {}
|
# 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;
|
height: 318px;
|
||||||
background: #272424;
|
background: #272424;
|
||||||
margin-top: 50px;
|
margin-top: 50px;
|
||||||
|
text-align: left;
|
||||||
}
|
}
|
||||||
|
|
||||||
section.register>h1 {
|
section.register>h1 {
|
||||||
@@ -419,6 +420,7 @@ footer>div {
|
|||||||
font-style: normal;
|
font-style: normal;
|
||||||
font-weight: 400;
|
font-weight: 400;
|
||||||
line-height: 22px;
|
line-height: 22px;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.footer_text_contact {
|
.footer_text_contact {
|
||||||
@@ -1000,6 +1002,16 @@ section.register>form {
|
|||||||
display: inline-block;
|
display: inline-block;
|
||||||
width: 90%;
|
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 {
|
.button_register>button {
|
||||||
display: block;
|
display: block;
|
||||||
@@ -1209,7 +1221,7 @@ section.login {
|
|||||||
margin-bottom: 120px;
|
margin-bottom: 120px;
|
||||||
}
|
}
|
||||||
|
|
||||||
section.login>h1 {
|
section.login>h1, div.recovery_pas>h1 {
|
||||||
color: #272424;
|
color: #272424;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
/* Heading 1 */
|
/* Heading 1 */
|
||||||
@@ -1221,7 +1233,7 @@ section.login>h1 {
|
|||||||
margin-bottom: 40px;
|
margin-bottom: 40px;
|
||||||
}
|
}
|
||||||
|
|
||||||
section.login>form {
|
section.login>form, div.recovery_pas>form {
|
||||||
max-width: 420px;
|
max-width: 420px;
|
||||||
margin: auto;
|
margin: auto;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
@@ -1293,7 +1305,8 @@ section.login>form {
|
|||||||
color: rgba(39, 36, 36, 0.60);
|
color: rgba(39, 36, 36, 0.60);
|
||||||
}
|
}
|
||||||
.call_to_reg {
|
.call_to_reg {
|
||||||
|
cursor: pointer;
|
||||||
|
text-align: center;
|
||||||
color: rgba(39, 36, 36, 0.60);
|
color: rgba(39, 36, 36, 0.60);
|
||||||
font-style: normal;
|
font-style: normal;
|
||||||
font-weight: 500;
|
font-weight: 500;
|
||||||
@@ -3355,6 +3368,25 @@ details[open] summary ~ *{
|
|||||||
|
|
||||||
/*END news articles all*/
|
/*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/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 |
BIN
static/img/png/mover/sore-1120.png
Normal file
|
After Width: | Height: | Size: 2.0 MiB |
BIN
static/img/png/mover/sore-1280.png
Normal file
|
After Width: | Height: | Size: 2.0 MiB |
BIN
static/img/png/mover/sore-1720.png
Normal file
|
After Width: | Height: | Size: 2.0 MiB |
BIN
static/img/png/mover/sore-328.png
Normal file
|
After Width: | Height: | Size: 2.1 MiB |
BIN
static/img/png/mover/sore-640.png
Normal file
|
After Width: | Height: | Size: 2.7 MiB |
BIN
static/img/png/mover/use-1120.png
Normal file
|
After Width: | Height: | Size: 2.9 MiB |
BIN
static/img/png/mover/use-1280.png
Normal file
|
After Width: | Height: | Size: 2.9 MiB |
BIN
static/img/png/mover/use-1720.png
Normal file
|
After Width: | Height: | Size: 2.9 MiB |
BIN
static/img/png/mover/use-328.png
Normal file
|
After Width: | Height: | Size: 767 KiB |
BIN
static/img/png/mover/use-640.png
Normal file
|
After Width: | Height: | Size: 1.8 MiB |
BIN
static/img/png/mover/use-letters-1120.png
Normal file
|
After Width: | Height: | Size: 2.6 MiB |
BIN
static/img/png/mover/use-letters-1280.png
Normal file
|
After Width: | Height: | Size: 2.3 MiB |
BIN
static/img/png/mover/use-letters-1739.png
Normal file
|
After Width: | Height: | Size: 2.6 MiB |
BIN
static/img/png/mover/use-letters-328.png
Normal file
|
After Width: | Height: | Size: 663 KiB |
BIN
static/img/png/mover/use-letters-640.png
Normal file
|
After Width: | Height: | Size: 1.2 MiB |
BIN
static/img/png/mover/use-letters-s1.png
Normal file
|
After Width: | Height: | Size: 190 KiB |
BIN
static/img/png/mover/use-letters-s2.png
Normal file
|
After Width: | Height: | Size: 231 KiB |
BIN
static/img/png/mover/use-letters-s3.png
Normal file
|
After Width: | Height: | Size: 245 KiB |
BIN
static/img/png/mover/use-letters-s4.png
Normal file
|
After Width: | Height: | Size: 426 KiB |
BIN
static/img/png/mover/use-letters-s5.png
Normal file
|
After Width: | Height: | Size: 321 KiB |
BIN
static/img/png/mover/use-letters-s6.png
Normal file
|
After Width: | Height: | Size: 307 KiB |
BIN
static/img/png/mover/use-letters-s7.png
Normal file
|
After Width: | Height: | Size: 695 KiB |
BIN
static/img/png/mover/use-letters-s8.png
Normal file
|
After Width: | Height: | Size: 127 KiB |
3
static/img/svg/Arrow08.svg
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
<svg width="68" height="18" viewBox="0 0 68 18" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<path d="M54.5455 2.94981C52.766 1.91497 50.7812 0.832029 50.1346 0.543456C48.2971 -0.276928 46.5619 -0.157082 46.0488 0.825723C45.351 2.16215 46.6527 3.4895 50.8124 5.68494C52.8468 6.75803 54.4597 7.6888 54.3974 7.75267C54.2493 7.90445 35.6219 5.73738 28.188 4.70333C25.0146 4.26219 18.1492 3.28688 12.9317 2.53588C7.71422 1.78488 2.84561 1.17067 2.11246 1.17067C0.627678 1.17067 -0.472054 2.11365 0.203789 2.80631C1.35891 3.99017 43.0138 10.8158 56.6476 12.0552L59.7199 12.3347L58.0351 13.068C55.8895 14.0019 52.6137 16.4548 52.6137 17.1277C52.6137 18.5099 56.4795 18.2249 61.8455 16.4473C66.0379 15.0585 68 13.4902 68 11.5286C68 9.87083 66.8087 8.92115 61.9936 6.7399C59.6768 5.69008 56.3249 3.98465 54.5455 2.94981Z" fill="#FF613A" fill-opacity="0.8"/>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 860 B |