2 Commits
1.1.0 ... 1.3.0

Author SHA1 Message Date
3d851a2087 mobile fixes 2026-04-20 22:21:07 +05:00
e6c0c57b1f favicon compress, rofls, calculator new parameters 2026-04-19 20:13:57 +05:00
44 changed files with 625 additions and 364 deletions

View File

@@ -195,39 +195,37 @@ final class index extends core
'site' => 'Сайт', 'site' => 'Сайт',
'chat_robot' => 'Чат-робот', 'chat_robot' => 'Чат-робот',
'program' => 'Программа', 'program' => 'Программа',
'module' => 'Модуль',
'parser' => 'Парсер',
'script' => 'Скрипт',
'game' => 'Видеоигра', 'game' => 'Видеоигра',
/* 'site' => 'Сайты и браузерные расширения', 'script' => 'Скрипт, парсер, макрос',
'chat_robot' => 'Чат-роботы (любой мессенджер)', 'module' => 'Модуль, плагин, расширение',
'program' => 'Программа (Android, iOS, Windows)',
'module' => 'Модуль для любой программы',
'parser' => 'Парсер данных API, HTTP и эмуляция',
'script' => 'Скрипт (автоматизация процессов)',
'game' => 'Видеоигра (Android, iOS, Windows)' */
], ],
'purposes' => [ 'purposes' => [
'funnel' => 'Воронка', 'funnel' => 'Воронка (обработка пользователя)',
'contacts' => 'Контакты', 'contacts' => 'Контакты (сбор данных)',
'neural_network' => 'Нейросети', 'ai' => 'Внедрение ИИ',
'gallery' => 'Галерея', 'archive' => 'Архив (галерея, библиотека, реестр)',
'crm' => 'CRM', 'crm' => 'Индивидуальная CRM',
'landing' => 'Лендинг', 'landing' => 'Лендинг (посадочная страница)',
'marketplace' => 'Маркетплейс', 'marketplace' => 'Маркетплейс, магазин, витрина',
'search' => 'Поиск', 'saas' => 'SaaS проект',
'calculate' => 'Расчёты', 'search' => 'Поиск и анализ',
'logic' => 'Логика', 'calculate' => 'Вычисления (калькулятор)',
'game' => гра', 'individual' => ндивидуальная разработка',
'special' => 'Особенный',
], ],
'integrations' => [ 'integrations' => [
'one_c' => '1C', 'one_c' => '1C',
'bitrix24' => 'Битрикс24', 'bitrix24' => 'Битрикс24',
'moy_sklad' => 'Мой Склад', 'moy_sklad' => 'Мой Склад',
'telegram' => 'Телеграм',
'mail' => 'Почта', 'mail' => 'Почта',
'excel' => 'Excel' 'excel' => 'Excel',
'ozon' => 'OZON',
'wildberries' => 'Wildberries',
'yandex_market' => 'Яндекс Маркет',
'avito' => 'Авито',
'vk' => 'ВКонтакте',
'max' => 'МАКС',
'telegram' => 'Телеграм',
'neural_networks' => 'Нейросети'
] ]
]; ];
@@ -249,19 +247,19 @@ final class index extends core
// Initializing contacts data // Initializing contacts data
$this->view->integrations = [ $this->view->integrations = [
'Вайлдберриз' => 'wildberries',
'ОЗОН' => 'ozon',
'Мой Склад' => 'moy_sklad', 'Мой Склад' => 'moy_sklad',
'1С Предприятие' => '1c', '1С Предприятие' => '1c',
'Битрикс 24' => 'bitrix24', 'Битрикс 24' => 'bitrix24',
'ВКонтакте' => 'vk', 'ВКонтакте' => 'vk',
'МАКС' => 'max', 'МАКС' => 'max',
/* 'yandex_direct', */
'Яндекс Директ' => 'yandex_market',
'ОЗОН' => 'ozon',
'Вайлдберриз' => 'wildberries',
'Авито' => 'avito', 'Авито' => 'avito',
'YClients' => 'yclients', 'YClients' => 'yclients',
'ЮКасса' => 'yookassa', 'ЮКасса' => 'yookassa',
'OpenAI' => 'openai' 'OpenAI' => 'openai',
/* 'yandex_direct', */
'Яндекс Директ' => 'yandex_market',
]; ];
// Render page // Render page

View File

@@ -83,20 +83,20 @@ final class project extends core
$mail->setLanguage('ru'); $mail->setLanguage('ru');
$mail->CharSet = mail::CHARSET_UTF8; $mail->CharSet = mail::CHARSET_UTF8;
$mail->isSMTP(); $mail->isSMTP();
$mail->Host = 'smtp.mail.ru'; $mail->Host = MAIL_SERVER['host'];
$mail->SMTPAuth = true; $mail->SMTPAuth = true;
$mail->Username = 'system@kodorvan.tech'; $mail->Username = MAIL_SERVER['sender']['mail'];
$mail->Password = 'c6oQF2nY0javI312eDS0'; $mail->Password = MAIL_SERVER['sender']['password'];
$mail->SMTPSecure = mail::ENCRYPTION_SMTPS; $mail->SMTPSecure = mail::ENCRYPTION_SMTPS;
$mail->Port = 465; $mail->Port = 465;
$mail->setFrom('system@kodorvan.tech', 'Система'); $mail->setFrom(MAIL_SERVER['sender']['mail'], MAIL_SERVER['sender']['name']);
$mail->addAddress('request@kodorvan.tech', 'Заявки'); $mail->addAddress(MAIL_SERVER['receiver']['mail'], MAIL_SERVER['receiver']['name']);
// The message // The message
$mail->isHTML(true); $mail->isHTML(true);
$mail->Subject = empty($request['project']['name']) ? 'Заказ' : 'Заказ: ' . $request['project']['name']; $mail->Subject = empty($request['project']['name']) ? 'Заказ' : 'Заказ: ' . $request['project']['name'];
$mail->Body = $this->view->render('messages/request.html', $request); $mail->Body = $this->view->render('messages/request.html', $request);
$mail->AltBody = 'This is the body in plain text for non-HTML mail clients'; /* $mail->AltBody = 'This is the body in plain text for non-HTML mail clients'; */
// Attachments // Attachments
foreach ($files as $name => $file) { foreach ($files as $name => $file) {

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 13 KiB

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

After

Width:  |  Height:  |  Size: 3.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

After

Width:  |  Height:  |  Size: 4.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 17 KiB

After

Width:  |  Height:  |  Size: 4.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 17 KiB

After

Width:  |  Height:  |  Size: 4.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 893 B

After

Width:  |  Height:  |  Size: 542 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 20 KiB

After

Width:  |  Height:  |  Size: 5.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 22 KiB

After

Width:  |  Height:  |  Size: 5.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 37 KiB

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.6 KiB

After

Width:  |  Height:  |  Size: 934 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 46 KiB

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 63 KiB

After

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.6 KiB

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.9 KiB

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.2 KiB

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.3 KiB

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.8 KiB

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 10 KiB

After

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 364 KiB

After

Width:  |  Height:  |  Size: 1.1 KiB

View File

@@ -1,71 +1 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?> <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="489.618" height="472.806" viewBox="0 0 129.545 125.097"><defs><radialGradient xlink:href="#a" id="c" cx="69.685" cy="90.596" r="49.385" fx="69.685" fy="90.596" gradientTransform="matrix(1.46578 -.63256 .71685 1.6611 -96.021 -9.471)" gradientUnits="userSpaceOnUse"/><radialGradient xlink:href="#b" id="d" cx="133.001" cy="106.398" r="64.772" fx="133.001" fy="106.398" gradientTransform="matrix(-2.5562 .5368 -.45438 -2.16374 446.938 196.267)" gradientUnits="userSpaceOnUse"/><linearGradient id="a"><stop offset=".206" style="stop-color:#0060c6;stop-opacity:1"/><stop offset=".999" style="stop-color:#000356;stop-opacity:1"/></linearGradient><linearGradient id="b"><stop offset=".171" style="stop-color:#6fc4ff;stop-opacity:1"/><stop offset="1" style="stop-color:#0adf70;stop-opacity:.63586265"/></linearGradient></defs><path d="M114.15 66.01a49.385 49.385 0 0 1-48.988 49.384 49.385 49.385 0 0 1-49.776-48.588A49.385 49.385 0 0 1 63.57 16.64a49.385 49.385 0 0 1 50.554 47.779" style="display:inline;fill:url(#c);fill-opacity:.983988;fill-rule:nonzero;stroke-width:2.22122;paint-order:stroke fill markers"/><path d="M129.545 60.324c0 35.57-28.682 64.484-64.25 64.77S.582 96.933.009 61.368c-.287-17.782 6.623-34.016 18.049-45.912L32.79 50.834l31.962 13.812-.97 41.644L99.85 58.627 73.743 35 88.406 0a64.9 64.9 0 0 1 20.857 13.25 64.9 64.9 0 0 1 14.405 20.076 64.6 64.6 0 0 1 5.843 24.91" style="display:inline;fill:url(#d);stroke-width:2.64583;paint-order:stroke fill markers"/></svg>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
width="129.54482mm"
height="125.09652mm"
viewBox="0 0 129.54482 125.09652"
version="1.1"
id="svg1"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<defs
id="defs1">
<linearGradient
id="linearGradient3">
<stop
style="stop-color:#0060c6;stop-opacity:1;"
offset="0.20645721"
id="stop3" />
<stop
style="stop-color:#000356;stop-opacity:1;"
offset="0.9989059"
id="stop4" />
</linearGradient>
<linearGradient
id="linearGradient1">
<stop
style="stop-color:#6fc4ff;stop-opacity:1;"
offset="0.17076893"
id="stop1" />
<stop
style="stop-color:#0adf70;stop-opacity:0.63586265;"
offset="1"
id="stop2" />
</linearGradient>
<radialGradient
xlink:href="#linearGradient3"
id="radialGradient4"
cx="69.684677"
cy="90.595695"
fx="69.684677"
fy="90.595695"
r="49.385239"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1.4657787,-0.63256258,0.71685408,1.6610996,-96.020968,-9.4714476)" />
<radialGradient
xlink:href="#linearGradient1"
id="radialGradient8"
cx="133.0006"
cy="106.39822"
fx="133.0006"
fy="106.39822"
r="64.772408"
gradientTransform="matrix(-2.5562072,0.53679846,-0.45438206,-2.1637443,446.93777,196.26702)"
gradientUnits="userSpaceOnUse" />
</defs>
<path
style="display:inline;fill:url(#radialGradient4);fill-opacity:0.983988;fill-rule:nonzero;stroke-width:2.22122;paint-order:stroke fill markers"
id="path2"
d="M 114.14959,66.009985 A 49.385239,49.385239 0 0 1 65.162476,115.39362 49.385239,49.385239 0 0 1 15.38553,66.806211 49.385239,49.385239 0 0 1 63.570075,16.639189 49.385239,49.385239 0 0 1 114.12391,64.41774" />
<path
id="path1"
style="display:inline;fill:url(#radialGradient8);stroke-width:2.64583;paint-order:stroke fill markers"
d="m 129.54482,60.324142 c 0,35.56901 -28.68229,64.483468 -64.250152,64.770218 C 29.72681,125.38111 0.58206084,96.932842 0.00858984,61.368452 -0.27814616,43.586256 6.6315828,27.351873 18.057823,15.455519 L 32.789578,50.834474 64.751888,64.645522 63.781478,106.2899 99.850468,58.627162 73.743498,34.999493 88.406328,0 c 7.79332,3.057143 14.862732,7.58429 20.856772,13.249271 5.99404,5.664982 10.91271,12.467797 14.40455,20.076274 3.49183,7.608477 5.55683,16.022617 5.84353,24.910247" />
<path
id="path5"
style="display:none;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2;stroke-dasharray:none;stroke-opacity:1;paint-order:markers fill stroke"
d="m 156.03189,48.675988 c 0,0 -0.48124,1.149734 -0.48124,1.149734 7.47158,3.127366 13.76035,8.757556 18.60133,15.033917 3.47372,4.503708 5.77328,8.679785 8.08747,12.343411 1.02716,1.626109 1.99256,3.317001 2.88786,5.073729 5.57385,10.936769 8.27496,24.254811 6.33597,38.307871 -1.81681,13.16752 -7.63944,25.96117 -17.4307,35.65948 -5.03375,4.98596 -10.97996,9.0142 -17.69827,11.85196 -7.22782,3.05296 -15.1235,4.63388 -23.42167,4.73245 -0.85262,0.0108 -1.69223,0.004 -2.51863,-0.0189 -14.1633,-0.39672 -25.57791,-5.05285 -34.17105,-11.0133 C 85.038155,154.03818 77.884734,143.64417 73.765338,134.02513 68.088136,120.76851 67.595266,108.31489 69.031333,98.509565 70.913466,85.658549 76.262275,76.52398 79.737684,71.524371 c 3.696594,-5.317797 5.945701,-7.392864 5.945701,-7.392864 0,0 -2.33932,1.972559 -6.214586,7.199789 -3.636021,4.904518 -9.303495,13.993979 -11.461258,27.018426 -1.64637,9.937638 -1.344521,22.656968 4.328486,36.278968 4.114552,9.87985 11.373099,20.61326 22.855995,28.64738 8.830228,6.17816 20.582878,10.99648 35.149578,11.4045 0.84878,0.0238 1.71085,0.0347 2.58621,0.0316 8.48799,-0.0368 16.67375,-1.34049 24.38977,-4.07858 7.17719,-2.54687 13.78867,-6.28188 19.64994,-11.14174 11.39583,-9.44885 19.35723,-22.68375 22.78331,-37.34635 3.64637,-15.60541 1.86385,-31.494338 -4.58101,-44.839852 -1.02738,-2.127422 -2.16303,-4.170709 -3.39713,-6.124429 -2.75251,-4.35753 -6.99513,-8.511352 -12.19307,-12.129511 -7.56806,-5.267932 -15.28231,-8.267232 -23.06649,-11.525444 0,0 -0.48124,1.149734 -0.48124,1.149734 z"
transform="translate(-67.625562,-48.675988)" />
</svg>

Before

Width:  |  Height:  |  Size: 4.4 KiB

After

Width:  |  Height:  |  Size: 1.5 KiB

View File

@@ -340,18 +340,46 @@ export default class project {
symbol: Symbol("moy_sklad"), symbol: Symbol("moy_sklad"),
coefficient: 3 coefficient: 3
}, },
telegram: {
symbol: Symbol("telegram"),
coefficient: 2
},
mail: { mail: {
symbol: Symbol("mail"), symbol: Symbol("mail"),
coefficient: 1.4 coefficient: 1.4
}, },
excel: { excel: {
symbol: Symbol("excel"), symbol: Symbol("excel"),
coefficient: 1.6 coefficient: 1.8
} },
ozon: {
symbol: Symbol("ozon"),
coefficient: 2.8
},
wildberries: {
symbol: Symbol("wildberries"),
coefficient: 2.9
},
yandex_market: {
symbol: Symbol("yandex_market"),
coefficient: 2.6
},
avito: {
symbol: Symbol("avito"),
coefficient: 2.4
},
vk: {
symbol: Symbol("vk"),
coefficient: 2
},
max: {
symbol: Symbol("max"),
coefficient: 2
},
telegram: {
symbol: Symbol("telegram"),
coefficient: 2
},
neural_networks: {
symbol: Symbol("neural_networks"),
coefficient: 2.6
},
}); });
/** /**
@@ -399,33 +427,49 @@ export default class project {
* @protected * @protected
*/ */
#purposes = Object.freeze({ #purposes = Object.freeze({
project: { funnel: {
symbol: Symbol("project"), symbol: Symbol("funnel"),
integrations: new Set([ integrations: new Set([
this.services.telegram, this.services.telegram,
this.services.max,
this.services.vk,
this.services.mail, this.services.mail,
this.services.bitrix24 this.services.bitrix24,
this.services.neural_networks,
]), ]),
coefficient: 2.1 coefficient: 1.2
}, },
contact: { contacts: {
symbol: Symbol("contact"), symbol: Symbol("contacts"),
integrations: new Set([ integrations: new Set([
this.services.telegram, this.services.telegram,
this.services.max,
this.services.vk,
this.services.mail, this.services.mail,
this.services.bitrix24 this.services.bitrix24,
this.services.neural_networks,
]), ]),
coefficient: 1.1 coefficient: 1.1
}, },
neural_network: { ai: {
symbol: Symbol("neural_network"), symbol: Symbol("ai"),
integrations: new Set([ integrations: new Set([
this.services.telegram this.services.telegram,
this.services.max,
this.services.vk,
this.services.one_c,
this.services.bitrix24,
this.services.excel,
this.services.mail,
this.services.ozon,
this.services.wildberries,
this.services.avito,
this.services.yandex_market,
]), ]),
coefficient: 4 coefficient: 3
}, },
gallery: { archive: {
symbol: Symbol("gallery"), symbol: Symbol("archive"),
integrations: new Set([ integrations: new Set([
]), ]),
coefficient: 1 coefficient: 1
@@ -433,9 +477,16 @@ export default class project {
crm: { crm: {
symbol: Symbol("crm"), symbol: Symbol("crm"),
integrations: new Set([ integrations: new Set([
this.services.telegram,
this.services.max,
this.services.vk,
this.services.one_c, this.services.one_c,
this.services.moy_sklad, this.services.moy_sklad,
this.services.excel this.services.excel,
this.services.ozon,
this.services.wildberries,
this.services.avito,
this.services.yandex_market,
]), ]),
coefficient: 6 coefficient: 6
}, },
@@ -443,8 +494,10 @@ export default class project {
symbol: Symbol("landing"), symbol: Symbol("landing"),
integrations: new Set([ integrations: new Set([
this.services.telegram, this.services.telegram,
this.services.max,
this.services.vk,
this.services.mail, this.services.mail,
this.services.bitrix24 this.services.bitrix24,
]), ]),
coefficient: 1.5 coefficient: 1.5
}, },
@@ -453,13 +506,40 @@ export default class project {
integrations: new Set([ integrations: new Set([
this.services.one_c, this.services.one_c,
this.services.moy_sklad, this.services.moy_sklad,
this.services.excel this.services.excel,
this.services.ozon,
this.services.wildberries,
this.services.avito,
this.services.yandex_market,
]),
coefficient: 8
},
saas: {
symbol: Symbol("saas"),
integrations: new Set([
this.services.telegram,
this.services.max,
this.services.vk,
this.services.one_c,
this.services.moy_sklad,
this.services.excel,
this.services.ozon,
this.services.wildberries,
this.services.avito,
this.services.yandex_market,
]), ]),
coefficient: 8 coefficient: 8
}, },
search: { search: {
symbol: Symbol("search"), symbol: Symbol("search"),
integrations: new Set([ integrations: new Set([
this.services.telegram,
this.services.max,
this.services.vk,
this.services.ozon,
this.services.wildberries,
this.services.avito,
this.services.yandex_market,
]), ]),
coefficient: 1 coefficient: 1
}, },
@@ -468,19 +548,25 @@ export default class project {
integrations: new Set([ integrations: new Set([
this.services.one_c, this.services.one_c,
this.services.moy_sklad, this.services.moy_sklad,
this.services.excel this.services.excel,
this.services.ozon,
this.services.wildberries,
this.services.avito,
this.services.yandex_market,
]), ]),
coefficient: 2 coefficient: 2
}, },
logic: { game: {
symbol: Symbol("logic"), symbol: Symbol("game"),
integrations: new Set([ integrations: new Set([
]), ]),
coefficient: 1 coefficient: 4
}, },
special: { individual: {
symbol: Symbol("special"), symbol: Symbol("individual"),
integrations: this.services, // integrations: this.services,
integrations: new Set([
]),
coefficient: 3 coefficient: 3
} }
}); });
@@ -510,19 +596,22 @@ export default class project {
site: { site: {
symbol: Symbol("site"), symbol: Symbol("site"),
purposes: new Set([ purposes: new Set([
this.purposes.project, this.purposes.funnel,
this.purposes.contact, this.purposes.landing,
this.purposes.neural_network, this.purposes.contacts,
this.purposes.gallery, this.purposes.archive,
this.purposes.ai,
this.purposes.crm, this.purposes.crm,
this.purposes.calculate, this.purposes.calculate,
this.purposes.landing, this.purposes.saas,
this.purposes.marketplace this.purposes.marketplace,
this.purposes.search,
this.purposes.individual,
]), ]),
coefficient: 3, coefficient: 3,
cost: { cost: {
usd: 80, usd: 120,
rub: 8000 rub: 12000
}, },
team: new Map([ team: new Map([
[this.#workers.programmer, 1], [this.#workers.programmer, 1],
@@ -533,15 +622,16 @@ export default class project {
chat_robot: { chat_robot: {
symbol: Symbol("chat_robot"), symbol: Symbol("chat_robot"),
purposes: new Set([ purposes: new Set([
this.purposes.project, this.purposes.funnel,
this.purposes.contact, this.purposes.landing,
this.purposes.neural_network, this.purposes.contacts,
this.purposes.game, this.purposes.archive,
this.purposes.gallery, this.purposes.ai,
this.purposes.crm, this.purposes.crm,
this.purposes.calculate, this.purposes.calculate,
this.purposes.landing, this.purposes.saas,
this.purposes.marketplace this.purposes.marketplace,
this.purposes.individual,
]), ]),
coefficient: 3, coefficient: 3,
cost: { cost: {
@@ -551,21 +641,23 @@ export default class project {
team: new Map([ team: new Map([
[this.#workers.programmer, 1], [this.#workers.programmer, 1],
[this.#workers.designer, 0], [this.#workers.designer, 0],
[this.#workers.booster, 1] [this.#workers.booster, 0]
]) ])
}, },
program: { program: {
symbol: Symbol("program"), symbol: Symbol("program"),
purposes: new Set([ purposes: new Set([
this.purposes.neural_network, this.purposes.neural_network,
this.purposes.ai,
this.purposes.crm, this.purposes.crm,
this.purposes.calculate, this.purposes.calculate,
this.purposes.marketplace this.purposes.marketplace,
this.purposes.individual,
]), ]),
coefficient: 4, coefficient: 4,
cost: { cost: {
usd: 100, usd: 180,
rub: 10000 rub: 18000
}, },
team: new Map([ team: new Map([
[this.#workers.programmer, 1], [this.#workers.programmer, 1],
@@ -573,38 +665,7 @@ export default class project {
[this.#workers.booster, 0] [this.#workers.booster, 0]
]) ])
}, },
parser: {
symbol: Symbol("parser"),
purposes: new Set([
this.purposes.search
]),
coefficient: 2,
cost: {
usd: 35,
rub: 3500
},
team: new Map([
[this.#workers.programmer, 1],
[this.#workers.designer, 0],
[this.#workers.booster, 0]
])
},
script: {
symbol: Symbol("script"),
purposes: new Set([
this.purposes.logic
]),
coefficient: 1,
cost: {
usd: 20,
rub: 2000
},
team: new Map([
[this.#workers.programmer, 1],
[this.#workers.designer, 0],
[this.#workers.booster, 0]
])
},
game: { game: {
symbol: Symbol("game"), symbol: Symbol("game"),
purposes: new Set([ purposes: new Set([
@@ -619,6 +680,39 @@ export default class project {
[this.#workers.programmer, 1], [this.#workers.programmer, 1],
[this.#workers.designer, 1], [this.#workers.designer, 1],
[this.#workers.booster, 1] [this.#workers.booster, 1]
])
},
script: {
symbol: Symbol("script"),
purposes: new Set([
this.purposes.search,
this.purposes.individual,
]),
coefficient: 1,
cost: {
usd: 20,
rub: 2000
},
team: new Map([
[this.#workers.programmer, 1],
[this.#workers.designer, 0],
[this.#workers.booster, 0]
])
},
module: {
symbol: Symbol("module"),
purposes: new Set([
this.purposes.individual,
]),
coefficient: 1,
cost: {
usd: 60,
rub: 6000
},
team: new Map([
[this.#workers.programmer, 1],
[this.#workers.designer, 0],
[this.#workers.booster, 0]
]) ])
} }
}); });
@@ -1759,6 +1853,15 @@ export default class project {
// Reloading the page @todo make something smarter // Reloading the page @todo make something smarter
alert("Запрос доставлен, ожидайте обратной связи"); alert("Запрос доставлен, ожидайте обратной связи");
// Initializing the rofls HTML-element
const rofls = document.getElementById('rofls');
// Showing rofls
rofls.style.removeProperty('display');
// Starting the rofls hotline.mjs instance
rofls.instance.start();
// Exit (success) // Exit (success)
resolve(); resolve();
} }

View File

@@ -4,8 +4,10 @@
:root { :root {
--text-color: #fff; --text-color: #fff;
--text-color-inverted: #000; --text-color-inverted: #000;
--button-background-color-inverted: #fff; --button-background-color: #fff;
--button-background-color: #000; --button-background-color-inverted: #000;
--button-hover-background-color: #abc7c6;
--button-active-background-color: #8fa3a2;
--section-background-color-inverted: #fff; --section-background-color-inverted: #fff;
--section-background-color: #000; --section-background-color: #000;
--background-color: #fbfaf6; --background-color: #fbfaf6;
@@ -21,9 +23,6 @@
--blue: #0ea5e9; --blue: #0ea5e9;
--paper: var(--white); --paper: var(--white);
--button-plain-hover-background-color: #bdd2c8;
--button-plain-active-background-color: #7d9f8f;
} }
/* } */ /* } */
@@ -56,8 +55,10 @@
:root { :root {
--text-color: #fff; --text-color: #fff;
--text-color-inverted: #000; --text-color-inverted: #000;
--button-background-color-inverted: #fff; --button-background-color: #fff;
--button-background-color: #000; --button-background-color-inverted: #000;
--button-hover-background-color: #abc7c6;
--button-active-background-color: #8fa3a2;
--section-background-color-inverted: #fff; --section-background-color-inverted: #fff;
--section-background-color: #000; --section-background-color: #000;
--background-color: #fbfaf6; --background-color: #fbfaf6;
@@ -72,8 +73,5 @@
--white: #fff; --white: #fff;
--paper: var(--white); --paper: var(--white);
--button-plain-hover-background-color: #bdd2c8;
--button-plain-active-background-color: #7d9f8f;
} }
} }

View File

@@ -1,6 +1,6 @@
@charset "UTF-8"; @charset "UTF-8";
section#companies { article#companies {
z-index: 50; z-index: 50;
width: 100vw; width: 100vw;
height: 70px; height: 70px;

View File

@@ -30,11 +30,12 @@ section#cookies {
} }
>div { >div {
padding: 0.8rem 1.2rem 0.7rem; padding: 0.9rem 1.2rem 0.8rem;
display: flex; display: flex;
flex-direction: column; flex-direction: column;
justify-content: center; justify-content: center;
align-items: center; align-items: center;
gap: 0.3rem;
>p { >p {
margin: unset; margin: unset;
@@ -43,6 +44,8 @@ section#cookies {
} }
>small { >small {
line-height: 1rem;
text-align: center;
font-family: Nunito; font-family: Nunito;
font-size: 0.9rem; font-size: 0.9rem;
font-weight: 400; font-weight: 400;

View File

@@ -125,8 +125,8 @@ section#project {
display: flex; display: flex;
flex-direction: column; flex-direction: column;
gap: 0.8em; gap: 0.8em;
overflow: hidden; /* overflow: hidden;
border-radius: 1.125rem; border-radius: 1.125rem; */
/* border: 2px solid; /* border: 2px solid;
background-color: #fff; background-color: #fff;
box-shadow: var(--shadow); box-shadow: var(--shadow);
@@ -185,6 +185,8 @@ section#project {
>:is(input, select, textarea) { >:is(input, select, textarea) {
grid-column: 2; grid-column: 2;
grid-row: 2; grid-row: 2;
width: 100%;
border-radius: 0;
} }
>small.guide { >small.guide {
@@ -266,7 +268,7 @@ section#project {
width: 100%; width: 100%;
box-sizing: border-box; box-sizing: border-box;
display: flex; display: flex;
flex-flow: row wrap; justify-content: space-between;
gap: 0.6em 1em; gap: 0.6em 1em;
/* border-radius: 0.75rem; */ /* border-radius: 0.75rem; */
border: 1px solid #000; border: 1px solid #000;
@@ -278,45 +280,39 @@ section#project {
font-weight: 400; font-weight: 400;
} }
>div.row { >label {
width: 100%; width: 100%;
display: flex; display: flex;
justify-content: space-between; flex-direction: column;
align-items: center;
gap: 0.3rem;
>label { >input[type="number"] {
width: 100%; appearance: textfield;
display: flex; -moz-appearance: textfield;
flex-direction: column; width: 80%;
align-items: center; /* padding: 0.4em 0.6em 0.4em 1.2em; */
gap: 0.3rem; padding: 0.4em 0.6em;
box-sizing: border-box;
text-align: center;
font-family: Nunito;
font-weight: 400;
font-size: 1em;
outline: unset;
border: unset;
border-bottom: 1px solid #000;
background: unset;
>input[type="number"] { &::-webkit-outer-spin-button,
appearance: textfield; &::-webkit-inner-spin-button {
-moz-appearance: textfield; -webkit-appearance: none;
width: 80%; display: none;
/* padding: 0.4em 0.6em 0.4em 1.2em; */
padding: 0.4em 0.6em;
box-sizing: border-box;
text-align: center;
font-family: Nunito;
font-weight: 400;
font-size: 1em;
outline: unset;
border: unset;
border-bottom: 1px solid #000;
background: unset;
&::-webkit-outer-spin-button,
&::-webkit-inner-spin-button {
-webkit-appearance: none;
display: none;
}
} }
}
>span { >span {
font-size: 0.9em; font-size: 0.9em;
cursor: pointer; cursor: pointer;
}
} }
} }
} }
@@ -703,11 +699,9 @@ section#project {
gap: unset; gap: unset;
>label#requester_personal { >label#requester_personal {
padding: 1em 0.8em; padding: 0.6em 0.8em;
box-sizing: border-box; box-sizing: border-box;
display: grid; display: flex;
grid-template-columns: 3ch auto;
grid-template-rows: 2ch;
align-items: center; align-items: center;
gap: 0.7ch; gap: 0.7ch;
font-size: 0.9rem; font-size: 0.9rem;
@@ -725,8 +719,7 @@ section#project {
} }
>div { >div {
grid-column: 1; scale: 0.8;
scale: 0.7;
>input { >input {
position: absolute; position: absolute;
@@ -762,7 +755,6 @@ section#project {
} }
>span { >span {
grid-column: 2;
margin-top: 0.15ch; margin-top: 0.15ch;
} }
} }
@@ -858,7 +850,7 @@ section#project {
display: contents; display: contents;
>button#back { >button#back {
--diameter: 6ch; --diameter: 7ch;
--radius: calc(var(--diameter, 4ch) / 2); --radius: calc(var(--diameter, 4ch) / 2);
position: absolute; position: absolute;
left: calc(-1.2rem - var(--diameter, 4ch)); left: calc(-1.2rem - var(--diameter, 4ch));
@@ -870,14 +862,14 @@ section#project {
align-items: center; align-items: center;
border-radius: 100%; border-radius: 100%;
border: unset; border: unset;
background-color: #fff; background-color: var(--button-background-color, #fff);
&:is(:hover, :focus) { &:is(:hover, :focus) {
background-color: var(--button-plain-hover-background-color, #bdd2c8); background-color: var(--button-hover-background-color, #abc7c6);
} }
&:active { &:active {
background-color: var(--button-plain-active-background-color, #7d9f8f); background-color: var(--button-active-background-color, #8fa3a2);
} }
>img { >img {
@@ -894,20 +886,33 @@ section#project {
/* padding: 1.05em 1.3em 1em; /* padding: 1.05em 1.3em 1em;
border-radius: 0.75rem; */ border-radius: 0.75rem; */
box-sizing: border-box; box-sizing: border-box;
padding: 1.55em 1.3em 1.5em; padding: 1.25em 1.3em 1.2em;
font-size: 1rem;
border-radius: 1.25rem; border-radius: 1.25rem;
border: unset; border: unset;
background-color: #fff; background-color: var(--button-background-color, #fff);
&:is(:hover, :focus) {
background-color: var(--button-hover-background-color, #abc7c6);
}
&:active {
background-color: var(--button-active-background-color, #8fa3a2);
}
&:is(#send) { &:is(#send) {
--shadow: 0 4px 5px -4px rgba(0, 0, 0, 0.5); --shadow: 0 4px 5px -4px rgba(0, 0, 0, 0.5);
/* padding: 2.3ch 4.5ch 2.5ch; */ /* padding: 2.3ch 4.5ch 2.5ch; */
line-height: 0.9em; font-weight: 600;
font-size: 1rem;
color: #fff;
text-shadow: 0 0 4px #000, 0 3px 1.4rem #0009;
border: unset; border: unset;
background: #ff5c5c; background: hsl(var(--button-send-background-color, 120deg) 40% 50%);
box-shadow: var(--shadow); box-shadow: var(--shadow);
-webkit-box-shadow: var(--shadow); -webkit-box-shadow: var(--shadow);
-moz-box-shadow: var(--shadow); -moz-box-shadow: var(--shadow);
transition: background 1.2s ease-out;
&:not(:disabled) { &:not(:disabled) {
filter: contrast(1.1); filter: contrast(1.1);
@@ -934,16 +939,6 @@ section#project {
filter: grayscale(1) brightness(0.8); filter: grayscale(1) brightness(0.8);
} }
} }
>span {
line-height: 1rem;
font-family: Geologica;
font-weight: 600;
font-size: 1rem;
color: #fff;
text-shadow: 0 0 4px #00000070;
/* mix-blend-mode: overlay; */
}
} }
} }
@@ -965,6 +960,10 @@ section#project {
font-size: 0.8em; font-size: 0.8em;
color: #fff; color: #fff;
text-shadow: 0px 1px 3px #000C, 0px 1px 1px #000B; text-shadow: 0px 1px 3px #000C, 0px 1px 1px #000B;
>b {
display: block;
}
} }
>section#contacts_shortcut { >section#contacts_shortcut {
@@ -1022,7 +1021,22 @@ section#project {
margin: unset; margin: unset;
min-width: var(--diameter, 4ch); min-width: var(--diameter, 4ch);
width: 30%; width: 30%;
border-radius: 0.75rem; height: auto;
border-radius: 1.25rem;
}
}
}
}
@media (width < 480px) {
section#project {
>article {
>section[data-paginator-page] {
>section#team {
>fieldset {
flex-flow: row wrap;
}
}
} }
} }
} }

View File

@@ -0,0 +1,61 @@
@charset "UTF-8";
body {
&:has(> article#rofls > img.eye:is(:hover, :focus, :active)) {
>article#rofls {
>img.eye {
cursor: none;
}
>img:not(.eye) {
opacity: 0;
transition: opacity 0.1s ease-in;
}
}
>*:not(section#buttons) {
opacity: 0;
transition: opacity 0.1s ease-in;
}
}
>article#rofls {
z-index: 50;
width: min-content;
height: 32px;
display: flex;
flex-direction: row;
overflow: hidden;
&:has(> img.colors:is(:hover, :focus, :active)) {
z-index: 9999;
mix-blend-mode: color-dodge;
filter: contrast(50);
}
>img {
margin: unset;
height: 100%;
overflow: hidden;
&:is(.noclick) {
cursor: not-allowed;
}
&:is(.antibuttons) {
cursor: pointer;
}
&:is(.construction, .cogs) {
cursor: wait;
}
}
}
}
@media (width < 800px) {
section#rofls {
height: 50px;
padding-bottom: 2.5rem;
}
}

View File

@@ -20,12 +20,24 @@ section#superpacks {
scale: 1.4; scale: 1.4;
transform-origin: top; transform-origin: top;
/* &:before {
content: '';
border-bottom: 0.65vw solid #1f5a58;
position: absolute;
bottom: 0;
width: 12.8%;
} */
>img.layer { >img.layer {
z-index: 30; z-index: 30;
position: absolute; position: absolute;
padding-left: 3.2vw; padding-left: 3.2vw;
width: 100%; width: 100%;
height: 5vw; height: 5vw;
&:is(.packs) {
margin-left: 3px;
}
} }
>div.labubumba { >div.labubumba {
@@ -35,7 +47,8 @@ section#superpacks {
width: 72vw; width: 72vw;
height: 17.2vw; height: 17.2vw;
background: red; background: red;
background: radial-gradient(circle, red 20vw, #af0000 40vw); background: radial-gradient(circle, red 12vw, #000 50vw);
background: radial-gradient(circle, hsl(calc(var(--scroll-deg, 0deg) * 12) 100% 50%) 12vw, #000 50vw);
mask: var(--mask); mask: var(--mask);
clip-path: polygon(0 0, 0 100%, 39% 100%, 39% 46.5%, 61% 46.5%, 61% 100%, 100% 100%, 100% 0); clip-path: polygon(0 0, 0 100%, 39% 100%, 39% 46.5%, 61% 46.5%, 61% 100%, 100% 100%, 100% 0);
} }

View File

@@ -167,12 +167,23 @@ footer {
text-align: right; text-align: right;
gap: 0.2em; gap: 0.2em;
font-size: 0.8rem; font-size: 0.8rem;
color: grey; color: #a3a396;
::selection {
color: #FFF;
background: #12A;
}
::-moz-selection {
color: #FFF;
background: #12A;
}
>span.row { >span.row {
display: inline-flex; display: inline-flex;
justify-content: end; justify-content: end;
font-weight: 400; font-weight: 400;
gap: 0.6em;
&:before { &:before {
margin-right: auto; margin-right: auto;
@@ -247,3 +258,23 @@ footer {
} }
} }
} }
@media (width < 520px) {
footer {
>div.sector {
&:is(.company) {
flex-direction: column;
gap: 3rem;
>article#contacts {
width: 100%;
align-items: center;
}
>article#company {
width: 100%;
}
}
}
}
}

View File

@@ -78,16 +78,16 @@ body {
--dot-size: 23px; --dot-size: 23px;
--dot-space: 24px; --dot-space: 24px;
z-index: -50; z-index: -50;
position: fixed;top: -200%; position: fixed;
left: -200vw; top: 0;
top: -200%; left: min(-30vw, -300px);
justify-self: center; justify-self: center;
align-self: center; align-self: center;
width: 400vw; width: max(250vw, 600px);
min-height: 1000px; height: 200vh;
height: 800%;
rotate: -16deg; rotate: -16deg;
pointer-events: none; pointer-events: none;
background: linear-gradient(90deg, var(--dot-bg) calc(var(--dot-space) - var(--dot-size)), transparent 1%) center / var(--dot-space) var(--dot-space), linear-gradient(var(--dot-bg) calc(var(--dot-space) - var(--dot-size)), transparent 1%) center / var(--dot-space) var(--dot-space), var(--dot-color); background: linear-gradient(90deg, var(--dot-bg) calc(var(--dot-space) - var(--dot-size)), transparent 1%) center / var(--dot-space) var(--dot-space), linear-gradient(var(--dot-bg) calc(var(--dot-space) - var(--dot-size)), transparent 1%) center / var(--dot-space) var(--dot-space), var(--dot-color);
transform-origin: top left;
} }
} }

View File

@@ -68,16 +68,15 @@ body {
--dot-space: 24px; --dot-space: 24px;
z-index: -50; z-index: -50;
position: fixed; position: fixed;
top: -200%; top: 0;
left: -200vw; left: min(-30vw, -300px);
top: -200%;
justify-self: center; justify-self: center;
align-self: center; align-self: center;
width: 400vw; width: max(250vw, 600px);
min-height: 1000px; height: 200vh;
height: 800%;
rotate: -16deg; rotate: -16deg;
pointer-events: none; pointer-events: none;
background: linear-gradient(90deg, var(--dot-bg) calc(var(--dot-space) - var(--dot-size)), transparent 1%) center / var(--dot-space) var(--dot-space), linear-gradient(var(--dot-bg) calc(var(--dot-space) - var(--dot-size)), transparent 1%) center / var(--dot-space) var(--dot-space), var(--dot-color); background: linear-gradient(90deg, var(--dot-bg) calc(var(--dot-space) - var(--dot-size)), transparent 1%) center / var(--dot-space) var(--dot-space), linear-gradient(var(--dot-bg) calc(var(--dot-space) - var(--dot-size)), transparent 1%) center / var(--dot-space) var(--dot-space), var(--dot-color);
transform-origin: top left;
} }
} }

View File

@@ -34,12 +34,25 @@
transition: 0.1s ease-out; transition: 0.1s ease-out;
} }
::selection {
color: #000;
background: #FF2;
text-shadow: none;
}
::-moz-selection {
color: #000;
background: #FF2;
text-shadow: none;
}
body { body {
margin: unset; margin: unset;
width: 100vw; width: 100vw;
overflow-x: hidden; overflow-x: hidden;
background: var(--background-color, #fff); /* background: var(--background-color, #fff);
background: var(--background-gradient); background: var(--background-gradient); */
background-color: #020c13;
} }
.unselectable { .unselectable {
@@ -67,6 +80,7 @@ input:not([type="range"]) {
outline: unset; outline: unset;
border: unset; border: unset;
border-bottom: 1px solid; border-bottom: 1px solid;
border-radius: unset;
background: unset; background: unset;
} }
@@ -130,6 +144,6 @@ button {
&:disabled { &:disabled {
cursor: not-allowed; cursor: not-allowed;
background-color: #08111d17; background-color: #08111d17;
filter: grayscale(1) brightness(0.8); filter: grayscale(1) brightness(0.55);
} }
} }

View File

@@ -7,6 +7,19 @@ define('TELEGRAM_ROBOT', [
'domain' => 'kodorvan_bot' 'domain' => 'kodorvan_bot'
]); ]);
define('MAIL_SERVER', [
'host' => 'smtp.mail.ru',
'sender' => [
'mail' => 'system@kodorvan.tech',
'name' => 'Система',
'password' => '',
],
'receiver' => [
'mail' => 'requests@kodorvan.tech',
'name' => 'Заявки'
]
]);
define('PROJECT_CONTACTS_SIM_REQUESTS', '79005004010'); define('PROJECT_CONTACTS_SIM_REQUESTS', '79005004010');
define('PROJECT_CONTACTS_SIM_REQUESTS_COUNTRY', '7'); define('PROJECT_CONTACTS_SIM_REQUESTS_COUNTRY', '7');
define('PROJECT_CONTACTS_SIM_REQUESTS_OPERATOR', '900'); define('PROJECT_CONTACTS_SIM_REQUESTS_OPERATOR', '900');

View File

@@ -13,7 +13,7 @@
{% block css %} {% block css %}
{% endblock %} {% endblock %}
{% include '/elements/yandex.html' %} {% include '/metrics/yandex.html' %}
</head> </head>
<body> <body>

View File

@@ -46,21 +46,21 @@
</section> </section>
<script> <script>
document.addEventListener('core.initialized', () => document.addEventListener('core.initialized', () =>
core.modules.connect(["hotline"]).then((connected) => { core.modules.connect(["hotline"]).then((connected) => {
// Imported the hotline.mjs module // Imported the hotline.mjs module
// Initializing an instance of the hotline.mjs // Initializing an instance of the hotline.mjs
const instance = new connected.hotline(document.getElementById("cases")); const instance = new connected.hotline(document.getElementById("cases"));
// Initializing settings of the hotline instance // Initializing settings of the hotline instance
instance.alive = true; instance.alive = true;
instance.wheel = false; instance.wheel = false;
instance.delta = 3; instance.delta = 3;
instance.step = -0.5; instance.step = -0.5;
// Starting the hotline instance // Starting the hotline instance
instance.start(); instance.start();
}) })
); );
</script> </script>

View File

@@ -1,27 +1,27 @@
<section id="companies" class="unselectable"> <article id="companies" class="unselectable">
{% for alt, file in integrations %} {% for alt, file in integrations %}
<img class="{{ file }}" src="/themes/{{ theme }}/images/logotypes/{{ file }}.svg" alt="{{ alt }}" ondragstart="return false"/> <img class="{{ file }}" src="/themes/{{ theme }}/images/logotypes/{{ file }}.svg" alt="{{ alt }}" ondragstart="return false"/>
{% endfor %} {% endfor %}
</section> </article>
<script> <script>
document.addEventListener('core.initialized', () => document.addEventListener('core.initialized', () =>
core.modules.connect(["hotline"]).then((connected) => { core.modules.connect(["hotline"]).then((connected) => {
// Imported the hotline.mjs module // Imported the hotline.mjs module
// Initializing an instance of the hotline.mjs // Initializing an instance of the hotline.mjs
const instance = new connected.hotline(document.getElementById("companies")); const instance = new connected.hotline(document.getElementById("companies"));
// Initializing settings of the hotline instance // Initializing settings of the hotline instance
instance.alive = true; instance.alive = true;
instance.wheel = false; instance.wheel = false;
instance.movable = false; instance.movable = false;
instance.hover = false; instance.hover = false;
instance.delta = 3; instance.delta = 3;
instance.step = 0.2; instance.step = -0.2;
// Starting the hotline instance // Starting the hotline instance
instance.start(); instance.start();
}) })
); );
</script> </script>

View File

@@ -30,7 +30,7 @@
autocomplete="off" autocomplete="off"
oninput="core.project.architecture = this.value" oninput="core.project.architecture = this.value"
> >
<option value="" selected="true" disabled="true" hidden="true" data-paginator-select-title="true">Выберите архитектуру</option> <option value="" selected="true" disabled="true" hidden="true" data-project-select-title="true">Выберите архитектуру</option>
{% for value, label in project.architectures %} {% for value, label in project.architectures %}
<option value="{{ value }}">{{ label }}</option> <option value="{{ value }}">{{ label }}</option>
{% endfor %} {% endfor %}
@@ -47,7 +47,7 @@
autocomplete="off" autocomplete="off"
oninput="core.project.purpose = this.value" oninput="core.project.purpose = this.value"
> >
<option value="" selected="true" disabled="true" hidden="true" data-paginator-select-title="true">Выберите назначение</option> <option value="" selected="true" disabled="true" hidden="true" data-project-select-title="true">Выберите назначение</option>
{% for value, label in project.purposes %} {% for value, label in project.purposes %}
<option value="{{ value }}">{{ label }}</option> <option value="{{ value }}">{{ label }}</option>
{% endfor %} {% endfor %}
@@ -80,47 +80,45 @@
<section id="team" class="row" style="display: none;"> <section id="team" class="row" style="display: none;">
<fieldset> <fieldset>
<legend>Команда</legend> <legend>Команда</legend>
<div class="row"> <label for="programmers">
<label for="programmers"> <input
<input id="programmers"
id="programmers" class="input"
class="input" type="number"
type="number" min="0"
min="0" max="3"
max="3" value="0"
value="0" autocomplete="off"
autocomplete="off" onkeyup="core.project.programmers = this.value"
onkeyup="core.project.programmers = this.value" />
/> <span>Программисты</span>
<span>Программисты</span> </label>
</label> <label for="designers">
<label for="designers"> <input
<input id="designers"
id="designers" class="input"
class="input" type="number"
type="number" min="0"
min="0" max="4"
max="4" value="0"
value="0" autocomplete="off"
autocomplete="off" onkeyup="core.project.designers = this.value"
onkeyup="core.project.designers = this.value" />
/> <span>Дизайнеры</span>
<span>Дизайнеры</span> </label>
</label> <label for="boosters">
<label for="boosters"> <input
<input id="boosters"
id="boosters" class="input"
class="input" type="number"
type="number" min="0"
min="0" max="2"
max="2" value="0"
value="0" autocomplete="off"
autocomplete="off" onkeyup="core.project.boosters = this.value"
onkeyup="core.project.boosters = this.value" />
/> <span>Бустеры</span>
<span>Бустеры</span> </label>
</label>
</div>
</fieldset> </fieldset>
<small class="guide">Соберите команду разработчиков проекта</small> <small class="guide">Соберите команду разработчиков проекта</small>
</section> </section>
@@ -317,21 +315,21 @@
<button onclick="core.paginator.relative(1)" style="display: none" data-paginator-page-button="2" disabled="true">ПРОДОЛЖИТЬ</button> <button onclick="core.paginator.relative(1)" style="display: none" data-paginator-page-button="2" disabled="true">ПРОДОЛЖИТЬ</button>
<button <button
id="send" id="send"
class="gradient"
style="display: none" style="display: none"
onclick="core.project.send();" onclick="core.project.send();"
data-paginator-page-button="3" data-paginator-page-button="3"
disabled="true" disabled="true"
> >ОТПРАВИТЬ</button>
<span>НАЧАТЬ РАЗРАБОТКУ</span>
<div class="color yellow"></div>
<div class="color green"></div>
<div class="color blue"></div>
</button>
</section> </section>
<script>
const send = document.getElementById('send');
let deg = 120;
setInterval(() => send.style.setProperty('--button-send-background-color', (deg += 43) + 'deg'), 1200);
</script>
</div> </div>
<small class="offer unselectable">Создан для удобства и <b>не является публичной офертой</b></br>Точная стоимость после изучения задания</small> <small class="offer unselectable">Создан для удобного планирования и <b>не является публичной офертой</b></small>
<section id="contacts_shortcut"> <section id="contacts_shortcut">
<p class="sim"><span class="country">7</span><span class="operator">901</span><span>592</span><span>4211</span></p> <p class="sim"><span class="country">7</span><span class="operator">901</span><span>592</span><span>4211</span></p>

View File

@@ -0,0 +1,67 @@
<article id="rofls" class="unselectable" style="display: none;">
<img class="construction" loading="lazy" src="https://lyra.horse/css-clicker/buttons/construction.gif"
ondragstart="return false;" />
<img loading="lazy" src="https://lyra.horse/css-clicker/buttons/css2.gif" ondragstart="return false;" />
<img loading="lazy" src="https://lyra.horse/css-clicker/buttons/dbd.gif" ondragstart="return false;" />
<!-- <img loading="lazy" src="https://lyra.horse/css-clicker/buttons/gaywebring.gif" ondragstart="return false;" /> -->
<!-- <img loading="lazy" src="https://lyra.horse/css-clicker/buttons/miku.gif" ondragstart="return false;" /> -->
<img loading="lazy" src="https://lyra.horse/css-clicker/buttons/mozbutd1.gif" ondragstart="return false;" />
<img loading="lazy" src="https://lyra.horse/css-clicker/buttons/nofuckingthanks.gif" ondragstart="return false;" />
<img class="noclick" loading="lazy" src="https://maia.crimew.gay/badges/noclick.gif" onclick="alert('bruh');"
ondragstart="return false;" />
<img loading="lazy" src="https://cyber.dabamos.de/88x31/zanarkand.gif" ondragstart="return false;" />
<img loading="lazy" src="https://88x31.nl/gifs/antinazi.gif" ondragstart="return false;" />
<img class="hell" loading="lazy" src="https://cyber.dabamos.de/88x31/tohell.gif" ondragstart="return false;"
ondragstart="return false;" />
<img loading="lazy" src="https://88x31.nl/gifs/say-no-to-web3.gif" ondragstart="return false;" />
<img loading="lazy" src="https://88x31.nl/gifs/they-walk-among-us.png" ondragstart="return false;" />
<img class="eye" loading="lazy" src="https://88x31.nl/gifs/uranohead.gif" ondragstart="return false;" />
<img loading="lazy" src="https://88x31.nl/gifs/discord-no-way.gif" ondragstart="return false;" />
<img loading="lazy" src="https://88x31.nl/gifs/chat.gif" ondragstart="return false;" />
<img loading="lazy" src="https://88x31.nl/gifs/upallnight%20(3).gif" ondragstart="return false;" />
<img loading="lazy" src="https://lyra.horse/css-clicker/buttons/free-sex.gif" ondragstart="return false;" />
<img loading="lazy" src="https://88x31.nl/gifs/virusalert.gif" ondragstart="return false;" />
<img loading="lazy" src="https://cyber.dabamos.de/88x31/microsoft_stop.gif" ondragstart="return false;" />
<img loading="lazy" src="https://88x31.nl/gifs/linuxnow2.gif" ondragstart="return false;" />
<img loading="lazy" src="https://88x31.nl/gifs/vim.vialle.love.anim.gif" ondragstart="return false;" />
<img loading="lazy" src="https://cyber.dabamos.de/88x31/tummy.gif" ondragstart="return false;" />
<img loading="lazy" src="https://88x31.nl/gifs/anybrow%20(3).gif" ondragstart="return false;" />
<img loading="lazy" src="https://88x31.nl/gifs/camtime.png" ondragstart="return false;" />
<img loading="lazy" src="https://88x31.nl/gifs/reshirii.gif" ondragstart="return false;" />
<img loading="lazy" src="https://88x31.nl/gifs/alien2.gif" ondragstart="return false;" />
<img class="antibuttons" loading="lazy" src="https://88x31.nl/gifs/anti_button.gif"
onclick="alert('BUTTONS SUCKS!'); document.getElementById('buttons').remove();" ondragstart="return false;" />
<img loading="lazy" src="https://88x31.nl/gifs/fspeech96a.gif" ondragstart="return false;" />
<img loading="lazy" src="https://88x31.nl/gifs/saratov.gif" ondragstart="return false;" />
<img loading="lazy" src="https://88x31.nl/gifs/thatpays2.gif" ondragstart="return false;" />
<img loading="lazy" src="https://lyra.horse/css-clicker/buttons/antinft.gif" ondragstart="return false;" />
<img loading="lazy" src="https://88x31.nl/gifs/tumblr_ptmmk6djdu1xwjivko5_100.gif" ondragstart="return false;" />
<img loading="lazy" src="https://88x31.nl/gifs/ieshit.gif" ondragstart="return false;" />
<img loading="lazy" src="https://88x31.nl/gifs/underground.gif" ondragstart="return false;" />
<img loading="lazy" src="https://88x31.nl/gifs/volta.gif" ondragstart="return false;" />
<img loading="lazy" src="https://88x31.nl/gifs/ocartswap_2.gif" ondragstart="return false;" />
<img loading="lazy" src="https://88x31.nl/gifs/f_ckfb.gif" ondragstart="return false;" />
<img class="cogs" loading="lazy" src="https://88x31.nl/gifs/cogs.gif" ondragstart="return false;" />
<img loading="lazy" src="https://88x31.nl/gifs/antifa.gif" ondragstart="return false;" />
<img loading="lazy" src="https://cyber.dabamos.de/88x31/newbuttonone.gif" ondragstart="return false;" />
<img class="colors" loading="lazy" src="https://88x31.nl/gifs/bestviewed16bit.gif" ondragstart="return false;" />
</article>
<script>
document.addEventListener('core.initialized', () =>
core.modules.connect(["hotline"]).then((connected) => {
// Imported the hotline.mjs module
// Initializing an instance of the hotline.mjs
const instance = new connected.hotline(document.getElementById("rofls"), true);
// Initializing settings of the hotline instance
instance.alive = true;
instance.wheel = true;
instance.movable = true;
instance.hover = true;
instance.delta = 3.2;
instance.step = -0.2;
})
);
</script>

View File

@@ -9,6 +9,7 @@
--company-tax: "{{ language.name == 'ru' or true ? 'ИНН' : 'TAX' }}"; --company-tax: "{{ language.name == 'ru' or true ? 'ИНН' : 'TAX' }}";
} }
</style> </style>
<link type="text/css" rel="stylesheet" href="/themes/default/css/elements/rofls.css" />
{% endblock %} {% endblock %}
{% block body %} {% block body %}
@@ -46,6 +47,7 @@
<!-- <strong class="background unselectable">КОДОРВАНЬ</strong> --> <!-- <strong class="background unselectable">КОДОРВАНЬ</strong> -->
</footer> </footer>
{% include '/themes/default/elements/rofls.html' %}
{% endblock %} {% endblock %}
{% block js %} {% block js %}

View File

@@ -7,7 +7,7 @@
<meta name="author" content="Арсен Мирзаев Татьяно-Мурадович" /> <meta name="author" content="Арсен Мирзаев Татьяно-Мурадович" />
<meta name="robots" content="index, follow" /> <meta name="robots" content="index, follow" />
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no" /> <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no, shrink-to-fit=no" />
<meta name="HandheldFriendly" content="true" /> <meta name="HandheldFriendly" content="true" />
<meta name="MobileOptimized" content="width" /> <meta name="MobileOptimized" content="width" />
<meta name="mobile-web-app-capable" content="yes" /> <meta name="mobile-web-app-capable" content="yes" />

View File

@@ -21,7 +21,10 @@
<link type="text/css" rel="stylesheet" href="/themes/default/css/elements/companies.css" /> <link type="text/css" rel="stylesheet" href="/themes/default/css/elements/companies.css" />
<link type="text/css" rel="stylesheet" href="/themes/default/css/elements/project.css" /> <link type="text/css" rel="stylesheet" href="/themes/default/css/elements/project.css" />
<link type="text/css" rel="stylesheet" href="/themes/default/css/elements/superpacks.css" /> <link type="text/css" rel="stylesheet" href="/themes/default/css/elements/superpacks.css" />
{% if not smartphone %} {% if smartphone %}
<link rel="preload" as="image" href="/themes/default/images/interface/labubumba_2_mobile.svg" />
{% else %}
<link rel="preload" as="image" href="/themes/default/images/interface/labubumba_2.svg" />
<!-- <link type="text/css" rel="stylesheet" href="/themes/default/css/elements/cases.css" /> --> <!-- <link type="text/css" rel="stylesheet" href="/themes/default/css/elements/cases.css" /> -->
{% endif %} {% endif %}
<link type="text/css" rel="stylesheet" href="/themes/default/css/elements/cookies.css" /> <link type="text/css" rel="stylesheet" href="/themes/default/css/elements/cookies.css" />
@@ -46,7 +49,7 @@
{% if cookies.cookies_popup_closed is empty %} {% if cookies.cookies_popup_closed is empty %}
{% include '/themes/default/elements/cookies.html' %} {% include '/themes/default/elements/cookies.html' %}
{% endif %} {% endif %}
{% endblock %} {% endblock %}
{% block after %} {% block after %}
<div class="vignette"></div> <div class="vignette"></div>
@@ -65,6 +68,20 @@
}, 60); }, 60);
</script> </script>
<script>
const companies = document.getElementById("companies");
companies.style.setProperty('margin-top', '70vh');
companies.style.setProperty('transition', 'margin 0.6s cubic-bezier(0, 1, .45, 1)');
const companies_show = setTimeout(() => companies.style.removeProperty('margin-top'), 2000);
document.addEventListener('load', () => {
clearTimeout(companies_show);
companies.style.removeProperty('margin-top');
});
</script>
<script src="/js/modules/project.mjs" type="module"></script> <script src="/js/modules/project.mjs" type="module"></script>
<script src="/js/modules/paginator.mjs" type="module"></script> <script src="/js/modules/paginator.mjs" type="module"></script>
<script src="/js/modules/hotline.mjs" type="module"></script> <script src="/js/modules/hotline.mjs" type="module"></script>