Compare commits
3 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| aa9b2e722c | |||
| b304c89698 | |||
| 3d851a2087 |
@@ -32,7 +32,9 @@
|
|||||||
"twig/twig": "^3.2",
|
"twig/twig": "^3.2",
|
||||||
"twig/extra-bundle": "^3.7",
|
"twig/extra-bundle": "^3.7",
|
||||||
"twig/intl-extra": "^3.10",
|
"twig/intl-extra": "^3.10",
|
||||||
"phpmailer/phpmailer": "^7.0"
|
"phpmailer/phpmailer": "^7.0",
|
||||||
|
"mirzaev/record": "^2.2",
|
||||||
|
"svoboda/time": "^1.0"
|
||||||
},
|
},
|
||||||
"suggest": {
|
"suggest": {
|
||||||
"mirzaev/files": "Easy working with files",
|
"mirzaev/files": "Easy working with files",
|
||||||
|
|||||||
77
composer.lock
generated
@@ -4,7 +4,7 @@
|
|||||||
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
|
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
|
||||||
"This file is @generated automatically"
|
"This file is @generated automatically"
|
||||||
],
|
],
|
||||||
"content-hash": "3d3b850ebd1027cf1790dfa901746eab",
|
"content-hash": "15ac0ce9a39edb330d95b578175d5636",
|
||||||
"packages": [
|
"packages": [
|
||||||
{
|
{
|
||||||
"name": "mirzaev/baza",
|
"name": "mirzaev/baza",
|
||||||
@@ -141,6 +141,48 @@
|
|||||||
},
|
},
|
||||||
"time": "2026-04-17T06:08:04+00:00"
|
"time": "2026-04-17T06:08:04+00:00"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"name": "mirzaev/record",
|
||||||
|
"version": "2.2.0",
|
||||||
|
"source": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://git.svoboda.works/mirzaev/record",
|
||||||
|
"reference": "71360614d6cbab0fe33ec0feca15005ca913397a"
|
||||||
|
},
|
||||||
|
"require": {
|
||||||
|
"mirzaev/baza": "^3.4",
|
||||||
|
"php": "^8.4",
|
||||||
|
"svoboda/time": "^1.0"
|
||||||
|
},
|
||||||
|
"type": "pattern",
|
||||||
|
"autoload": {
|
||||||
|
"psr-4": {
|
||||||
|
"mirzaev\\record\\": "mirzaev/record/system"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"notification-url": "https://packagist.org/downloads/",
|
||||||
|
"license": [
|
||||||
|
"WTFPL"
|
||||||
|
],
|
||||||
|
"authors": [
|
||||||
|
{
|
||||||
|
"name": "Arsen Mirzaev Tatyano-Muradovich",
|
||||||
|
"email": "arsen@mirzaev.sexy",
|
||||||
|
"homepage": "https://mirzaev.sexy",
|
||||||
|
"role": "Creator"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"description": "Active Record pattern for Baza",
|
||||||
|
"homepage": "https://git.svoboda.works/mirzaev/record",
|
||||||
|
"keywords": [
|
||||||
|
"baza"
|
||||||
|
],
|
||||||
|
"support": {
|
||||||
|
"issues": "https://git.svoboda.works/mirzaev/record/issues",
|
||||||
|
"wiki": "https://git.svoboda.works/mirzaev/record/wiki"
|
||||||
|
},
|
||||||
|
"time": "2026-03-08T18:23:49+00:00"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"name": "mobiledetect/mobiledetectlib",
|
"name": "mobiledetect/mobiledetectlib",
|
||||||
"version": "4.8.10",
|
"version": "4.8.10",
|
||||||
@@ -540,6 +582,39 @@
|
|||||||
},
|
},
|
||||||
"time": "2021-10-29T13:26:27+00:00"
|
"time": "2021-10-29T13:26:27+00:00"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"name": "svoboda/time",
|
||||||
|
"version": "1.0.0",
|
||||||
|
"source": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://git.svoboda.works/svoboda/time",
|
||||||
|
"reference": "0764960606d56a9f0865ebb07671d30a7d232b6a"
|
||||||
|
},
|
||||||
|
"require": {
|
||||||
|
"php": "^8.4"
|
||||||
|
},
|
||||||
|
"type": "library",
|
||||||
|
"autoload": {
|
||||||
|
"psr-4": {
|
||||||
|
"svoboda\\time\\": "svoboda/time/system"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"notification-url": "https://packagist.org/downloads/",
|
||||||
|
"license": [
|
||||||
|
"WTFPL"
|
||||||
|
],
|
||||||
|
"authors": [
|
||||||
|
{
|
||||||
|
"name": "Arsen Mirzaev Tatyano-Muradovich",
|
||||||
|
"email": "arsen@mirzaev.sexy",
|
||||||
|
"homepage": "https://mirzaev.sexy",
|
||||||
|
"role": "Programmer"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"description": "Time since Svoboda was created",
|
||||||
|
"homepage": "https://git.svoboda.works/svoboda/time",
|
||||||
|
"time": "2025-02-02T11:04:25+00:00"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"name": "symfony/cache",
|
"name": "symfony/cache",
|
||||||
"version": "v8.0.8",
|
"version": "v8.0.8",
|
||||||
|
|||||||
@@ -209,7 +209,7 @@ final class index extends core
|
|||||||
'marketplace' => 'Маркетплейс, магазин, витрина',
|
'marketplace' => 'Маркетплейс, магазин, витрина',
|
||||||
'saas' => 'SaaS проект',
|
'saas' => 'SaaS проект',
|
||||||
'search' => 'Поиск и анализ',
|
'search' => 'Поиск и анализ',
|
||||||
'calculate' => 'Автоматизированное вычисление (калькулятор)',
|
'calculate' => 'Вычисления (калькулятор)',
|
||||||
'individual' => 'Индивидуальная разработка',
|
'individual' => 'Индивидуальная разработка',
|
||||||
],
|
],
|
||||||
'integrations' => [
|
'integrations' => [
|
||||||
@@ -229,22 +229,6 @@ final class index extends core
|
|||||||
]
|
]
|
||||||
];
|
];
|
||||||
|
|
||||||
// Initializing contacts data
|
|
||||||
$this->view->contacts = [
|
|
||||||
'sim' => [
|
|
||||||
'requests' => [
|
|
||||||
'full' => PROJECT_CONTACTS_SIM_REQUESTS ?? 'Ошибка',
|
|
||||||
'country' => PROJECT_CONTACTS_SIM_REQUESTS_COUNTRY ?? 'Ошибка',
|
|
||||||
'operator' => PROJECT_CONTACTS_SIM_REQUESTS_OPERATOR ?? 'Ошибка',
|
|
||||||
'number' => [
|
|
||||||
PROJECT_CONTACTS_SIM_REQUESTS_NUMBER_1 ?? 'Ошибка',
|
|
||||||
PROJECT_CONTACTS_SIM_REQUESTS_NUMBER_2 ?? 'Ошибка',
|
|
||||||
PROJECT_CONTACTS_SIM_REQUESTS_NUMBER_3 ?? 'Ошибка'
|
|
||||||
]
|
|
||||||
]
|
|
||||||
]
|
|
||||||
];
|
|
||||||
|
|
||||||
// Initializing contacts data
|
// Initializing contacts data
|
||||||
$this->view->integrations = [
|
$this->view->integrations = [
|
||||||
'Вайлдберриз' => 'wildberries',
|
'Вайлдберриз' => 'wildberries',
|
||||||
@@ -264,7 +248,7 @@ final class index extends core
|
|||||||
|
|
||||||
// Render page
|
// Render page
|
||||||
$page = $this->view->render(
|
$page = $this->view->render(
|
||||||
'main/index.html',
|
'pages/index.html',
|
||||||
[
|
[
|
||||||
'smartphone' => $this->request->smartphone,
|
'smartphone' => $this->request->smartphone,
|
||||||
'tablet' => $this->request->tablet
|
'tablet' => $this->request->tablet
|
||||||
|
|||||||
@@ -44,25 +44,9 @@ final class offer extends core
|
|||||||
if (str_contains($this->request->headers['accept'] ?? '', content::html->value)) {
|
if (str_contains($this->request->headers['accept'] ?? '', content::html->value)) {
|
||||||
// Request for HTML response
|
// Request for HTML response
|
||||||
|
|
||||||
// Initializing contacts data
|
|
||||||
$this->view->contacts = [
|
|
||||||
'sim' => [
|
|
||||||
'requests' => [
|
|
||||||
'full' => PROJECT_CONTACTS_SIM_REQUESTS ?? 'Ошибка',
|
|
||||||
'country' => PROJECT_CONTACTS_SIM_REQUESTS_COUNTRY ?? 'Ошибка',
|
|
||||||
'operator' => PROJECT_CONTACTS_SIM_REQUESTS_OPERATOR ?? 'Ошибка',
|
|
||||||
'number' => [
|
|
||||||
PROJECT_CONTACTS_SIM_REQUESTS_NUMBER_1 ?? 'Ошибка',
|
|
||||||
PROJECT_CONTACTS_SIM_REQUESTS_NUMBER_2 ?? 'Ошибка',
|
|
||||||
PROJECT_CONTACTS_SIM_REQUESTS_NUMBER_3 ?? 'Ошибка'
|
|
||||||
]
|
|
||||||
]
|
|
||||||
]
|
|
||||||
];
|
|
||||||
|
|
||||||
// Render page
|
// Render page
|
||||||
$page = $this->view->render(
|
$page = $this->view->render(
|
||||||
'main/offer.html',
|
'pages/offer.html',
|
||||||
[
|
[
|
||||||
'smartphone' => $this->request->smartphone,
|
'smartphone' => $this->request->smartphone,
|
||||||
'tablet' => $this->request->tablet
|
'tablet' => $this->request->tablet
|
||||||
|
|||||||
@@ -83,14 +83,14 @@ 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 = MAIL_SERVER['host'];
|
$mail->Host = MAIL['host'];
|
||||||
$mail->SMTPAuth = true;
|
$mail->SMTPAuth = true;
|
||||||
$mail->Username = MAIL_SERVER['sender']['mail'];
|
$mail->Username = MAIL['sender']['mail'];
|
||||||
$mail->Password = MAIL_SERVER['password'];
|
$mail->Password = MAIL['sender']['password'];
|
||||||
$mail->SMTPSecure = mail::ENCRYPTION_SMTPS;
|
$mail->SMTPSecure = mail::ENCRYPTION_SMTPS;
|
||||||
$mail->Port = 465;
|
$mail->Port = 465;
|
||||||
$mail->setFrom(MAIL_SERVER['sender']['mail'], MAIL_SERVER['sender']['name']);
|
$mail->setFrom(MAIL['sender']['mail'], MAIL['sender']['name']);
|
||||||
$mail->addAddress(MAIL_SERVER['receiver']['mail'], MAIL_SERVER['receiver']['name']);
|
$mail->addAddress(MAIL['receiver']['mail'], MAIL['receiver']['name']);
|
||||||
|
|
||||||
// The message
|
// The message
|
||||||
$mail->isHTML(true);
|
$mail->isHTML(true);
|
||||||
|
|||||||
98
kodorvan/site/system/controllers/superpack.php
Executable file
@@ -0,0 +1,98 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace kodorvan\site\controllers;
|
||||||
|
|
||||||
|
// Files of the project
|
||||||
|
use kodorvan\site\controllers\core,
|
||||||
|
kodorvan\site\models\superpack;
|
||||||
|
|
||||||
|
// Framework for PHP
|
||||||
|
use mirzaev\minimal\http\enumerations\content,
|
||||||
|
mirzaev\minimal\http\enumerations\status;
|
||||||
|
|
||||||
|
// Baza database
|
||||||
|
use mirzaev\baza\database,
|
||||||
|
mirzaev\baza\column,
|
||||||
|
mirzaev\baza\record,
|
||||||
|
mirzaev\baza\enumerations\encoding,
|
||||||
|
mirzaev\baza\enumerations\type;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Offer
|
||||||
|
*
|
||||||
|
* @package kodorvan\site\controllers
|
||||||
|
*
|
||||||
|
* @param array $errors Registry of errors
|
||||||
|
*
|
||||||
|
* @method null index() Main page
|
||||||
|
*
|
||||||
|
* @license http://www.wtfpl.net/ Do What The Fuck You Want To Public License
|
||||||
|
* @author Arsen Mirzaev Tatyano-Muradovich <arsen@mirzaev.sexy>
|
||||||
|
*/
|
||||||
|
final class superpack extends core
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Errors
|
||||||
|
*
|
||||||
|
* @var array $errors Registry of errors
|
||||||
|
*/
|
||||||
|
protected array $errors = [
|
||||||
|
'system' => []
|
||||||
|
];
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Page: superpack
|
||||||
|
*
|
||||||
|
* @return null
|
||||||
|
*/
|
||||||
|
public function index(string $urn): null
|
||||||
|
{
|
||||||
|
if (str_contains($this->request->headers['accept'] ?? '', content::html->value)) {
|
||||||
|
// Request for HTML response
|
||||||
|
|
||||||
|
// Initializing the superpack
|
||||||
|
$superpack = new superpack()->read(filter: fn(record $record) => $record->urn === $urn && $record->active === 1);
|
||||||
|
|
||||||
|
if ($superpack instanceof superpack) {
|
||||||
|
// Initialized the superpack
|
||||||
|
|
||||||
|
// Render page
|
||||||
|
$page = $this->view->render(
|
||||||
|
'pages/article.html',
|
||||||
|
[
|
||||||
|
'article' => [
|
||||||
|
'urn' => $urn,
|
||||||
|
'title' => $superpack->title,
|
||||||
|
'html' => $superpack->html
|
||||||
|
],
|
||||||
|
'smartphone' => $this->request->smartphone,
|
||||||
|
'tablet' => $this->request->tablet
|
||||||
|
]
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
// Not initialized the superpack
|
||||||
|
}
|
||||||
|
|
||||||
|
// Sending response
|
||||||
|
$this->response
|
||||||
|
->start()
|
||||||
|
->clean()
|
||||||
|
->sse()
|
||||||
|
->write($page)
|
||||||
|
->validate($this->request)
|
||||||
|
?->body()
|
||||||
|
->end();
|
||||||
|
|
||||||
|
// Deinitializing rendered page
|
||||||
|
unset($page);
|
||||||
|
|
||||||
|
// Exit (success)
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Exit (fail)
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
215
kodorvan/site/system/models/superpack.php
Normal file
@@ -0,0 +1,215 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace kodorvan\site\models;
|
||||||
|
|
||||||
|
// Files of the project
|
||||||
|
use kodorvan\site\models\core;
|
||||||
|
|
||||||
|
// Baza database
|
||||||
|
use mirzaev\baza\database,
|
||||||
|
mirzaev\baza\column,
|
||||||
|
mirzaev\baza\record,
|
||||||
|
mirzaev\baza\enumerations\encoding,
|
||||||
|
mirzaev\baza\enumerations\type;
|
||||||
|
|
||||||
|
// Active Record pattern
|
||||||
|
use mirzaev\record\interfaces\record as record_interface,
|
||||||
|
mirzaev\record\traits\record as record_trait;
|
||||||
|
|
||||||
|
// Svoboda time
|
||||||
|
use svoboda\time\statement as svoboda;
|
||||||
|
|
||||||
|
// Built-in libraries
|
||||||
|
use Exception as exception,
|
||||||
|
LogicException as exception_logic,
|
||||||
|
RuntimeException as exception_runtime;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Project
|
||||||
|
*
|
||||||
|
* @package kodorvan\site\models
|
||||||
|
*
|
||||||
|
* @license http://www.wtfpl.net/ Do What The Fuck You Want To Public License
|
||||||
|
* @author Arsen Mirzaev Tatyano-Muradovich <arsen@mirzaev.sexy>
|
||||||
|
*/
|
||||||
|
final class superpack extends core implements record_interface
|
||||||
|
{
|
||||||
|
use record_trait;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* File
|
||||||
|
*
|
||||||
|
* @var string $file Path to the database file
|
||||||
|
*/
|
||||||
|
protected string $file = DATABASES . DIRECTORY_SEPARATOR . 'superpacks.baza';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Database
|
||||||
|
*
|
||||||
|
* @var database $database The database
|
||||||
|
*/
|
||||||
|
public protected(set) database $database;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Serialized
|
||||||
|
*
|
||||||
|
* @var bool $serialized Is the implementator object serialized?
|
||||||
|
*/
|
||||||
|
private bool $serialized = true;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructor
|
||||||
|
*
|
||||||
|
* @method record|null $record The record
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function __construct(?record $record = null)
|
||||||
|
{
|
||||||
|
// Initializing the database
|
||||||
|
$this->database = new database()
|
||||||
|
->encoding(encoding::utf8)
|
||||||
|
->columns(
|
||||||
|
new column('identifier', type::long_long_unsigned),
|
||||||
|
/* new column('account', type::long_long_unsigned), */
|
||||||
|
new column('urn', type::long_long_unsigned),
|
||||||
|
new column('title', type::string, ['length' => 64]),
|
||||||
|
new column('html', type::string, ['length' => 8192]),
|
||||||
|
new column('text', type::string, ['length' => 8192]),
|
||||||
|
new column('supercost', type::integer_unsigned),
|
||||||
|
new column('active', type::char),
|
||||||
|
new column('updated', type::integer_unsigned),
|
||||||
|
new column('created', type::integer_unsigned)
|
||||||
|
)
|
||||||
|
->connect($this->file);
|
||||||
|
|
||||||
|
// Initializing the record
|
||||||
|
$record instanceof record and $this->record = $record;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Write
|
||||||
|
*
|
||||||
|
* @throws exception_logic when failed to process project integration
|
||||||
|
*
|
||||||
|
* @param int $account The account identifier
|
||||||
|
* @param string $urn URN
|
||||||
|
* @param string $title Title
|
||||||
|
* @param string|null $html Content (HTML)
|
||||||
|
* @param string|null $html Content (text)
|
||||||
|
* @param int $supercost Cost
|
||||||
|
* @param int $active Is the record active?
|
||||||
|
*
|
||||||
|
* @return record|false The record, if created
|
||||||
|
*/
|
||||||
|
public function write(
|
||||||
|
/* int $account, */
|
||||||
|
string $urn,
|
||||||
|
string $title,
|
||||||
|
?string $html = null,
|
||||||
|
?string $text = null,
|
||||||
|
?int $supercost = null,
|
||||||
|
bool $active = true,
|
||||||
|
): record|false {
|
||||||
|
if (!empty($html) || !empty($text)) {
|
||||||
|
// Initializing the record
|
||||||
|
$record = $this->database->record(
|
||||||
|
$this->database->count() + 1,
|
||||||
|
/* $account, */
|
||||||
|
$urn,
|
||||||
|
$title,
|
||||||
|
(string) $html,
|
||||||
|
(string) $text,
|
||||||
|
(int) $supercost,
|
||||||
|
(int) $active,
|
||||||
|
svoboda::timestamp(),
|
||||||
|
svoboda::timestamp()
|
||||||
|
);
|
||||||
|
|
||||||
|
// Writing the record into the database
|
||||||
|
$created = $this->database->write($record);
|
||||||
|
|
||||||
|
// Exit (success)
|
||||||
|
return $created ? $record : false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Exit (fail)
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Serialize
|
||||||
|
*
|
||||||
|
* @return self The instance from which the method was called (fluent interface)
|
||||||
|
*/
|
||||||
|
public function serialize(): self
|
||||||
|
{
|
||||||
|
if ($this->serialized) {
|
||||||
|
// The record implementor is serialized
|
||||||
|
|
||||||
|
// Exit (fail)
|
||||||
|
throw new exception_runtime('The record implementor is already serialized');
|
||||||
|
}
|
||||||
|
|
||||||
|
// Serializing the record parameters
|
||||||
|
$this->record->active = (int) $this->record->active;
|
||||||
|
|
||||||
|
// Writing the status of serializing
|
||||||
|
$this->serialized = true;
|
||||||
|
|
||||||
|
// Exit (success)
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Deserialize
|
||||||
|
*
|
||||||
|
* @return self The instance from which the method was called (fluent interface)
|
||||||
|
*/
|
||||||
|
public function deserialize(): self
|
||||||
|
{
|
||||||
|
if (!$this->serialized) {
|
||||||
|
// The record implementor is deserialized
|
||||||
|
|
||||||
|
// Exit (fail)
|
||||||
|
throw new exception_runtime('The record implementor is already deserialized');
|
||||||
|
}
|
||||||
|
|
||||||
|
// Deserializing the record parameters
|
||||||
|
$this->record->active = (bool) $this->record->active;
|
||||||
|
|
||||||
|
// Writing the status of serializing
|
||||||
|
$this->serialized = false;
|
||||||
|
|
||||||
|
// Exit (success)
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Account
|
||||||
|
*
|
||||||
|
* Search for the account
|
||||||
|
*
|
||||||
|
* @return account|null The account
|
||||||
|
*/
|
||||||
|
/* public function account(): ?account
|
||||||
|
{
|
||||||
|
// Search for the account
|
||||||
|
$account = new account()->read(filter: fn(record $record) => $record->identifier === $this->account && $record->active === 1);
|
||||||
|
|
||||||
|
if ($account instanceof account) {
|
||||||
|
// Found the account account
|
||||||
|
|
||||||
|
// Deserializing the record
|
||||||
|
$account->deserialize();
|
||||||
|
|
||||||
|
// Exit (success)
|
||||||
|
return $account;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Exit (fail)
|
||||||
|
return null;
|
||||||
|
} */
|
||||||
|
}
|
||||||
@@ -47,6 +47,11 @@ $core = new core(namespace: __NAMESPACE__);
|
|||||||
$core->router
|
$core->router
|
||||||
->write('/', new route('index', 'index'), 'GET')
|
->write('/', new route('index', 'index'), 'GET')
|
||||||
->write('/offer', new route('offer', 'index'), 'GET')
|
->write('/offer', new route('offer', 'index'), 'GET')
|
||||||
|
->write('/policy', new route('policy', 'index'), 'GET')
|
||||||
|
->write('/recomendations', new route('recomendations', 'index'), 'GET')
|
||||||
|
|
||||||
|
->write('/superpack/$urn', new route('superpack', 'index'), 'GET')
|
||||||
|
|
||||||
->write('/project/request', new route('project', 'request'), 'PUT')
|
->write('/project/request', new route('project', 'request'), 'PUT')
|
||||||
;
|
;
|
||||||
|
|
||||||
|
|||||||
@@ -16,9 +16,6 @@ class core {
|
|||||||
// Language
|
// Language
|
||||||
static language = "ru";
|
static language = "ru";
|
||||||
|
|
||||||
// Theme
|
|
||||||
static theme = window.getComputedStyle(document.getElementById('theme'));
|
|
||||||
|
|
||||||
// Window
|
// Window
|
||||||
static window;
|
static window;
|
||||||
|
|
||||||
|
|||||||
@@ -514,6 +514,22 @@ export default class project {
|
|||||||
]),
|
]),
|
||||||
coefficient: 8
|
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
|
||||||
|
},
|
||||||
search: {
|
search: {
|
||||||
symbol: Symbol("search"),
|
symbol: Symbol("search"),
|
||||||
integrations: new Set([
|
integrations: new Set([
|
||||||
@@ -1844,7 +1860,7 @@ export default class project {
|
|||||||
rofls.style.removeProperty('display');
|
rofls.style.removeProperty('display');
|
||||||
|
|
||||||
// Starting the rofls hotline.mjs instance
|
// Starting the rofls hotline.mjs instance
|
||||||
rofls.instance.start();
|
rofls.hotline.start();
|
||||||
|
|
||||||
// Exit (success)
|
// Exit (success)
|
||||||
resolve();
|
resolve();
|
||||||
|
|||||||
@@ -1 +0,0 @@
|
|||||||
../../../../../three.js/build/three.core.js
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
../../../../../three.js/build/three.module.js
|
|
||||||
@@ -4,8 +4,13 @@
|
|||||||
:root {
|
:root {
|
||||||
--text-color: #fff;
|
--text-color: #fff;
|
||||||
--text-color-inverted: #000;
|
--text-color-inverted: #000;
|
||||||
--button-background-color-inverted: #fff;
|
--link-color: #475bf9;
|
||||||
--button-background-color: #000;
|
--link-hover-color: #6375ff;
|
||||||
|
--link-active-color: #3d53f6;
|
||||||
|
--button-background-color: #fff;
|
||||||
|
--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 +26,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 +58,13 @@
|
|||||||
:root {
|
:root {
|
||||||
--text-color: #fff;
|
--text-color: #fff;
|
||||||
--text-color-inverted: #000;
|
--text-color-inverted: #000;
|
||||||
--button-background-color-inverted: #fff;
|
--link-color: #475bf9;
|
||||||
--button-background-color: #000;
|
--link-hover-color: #6375ff;
|
||||||
|
--link-active-color: #3d53f6;
|
||||||
|
--button-background-color: #fff;
|
||||||
|
--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 +79,5 @@
|
|||||||
--white: #fff;
|
--white: #fff;
|
||||||
|
|
||||||
--paper: var(--white);
|
--paper: var(--white);
|
||||||
|
|
||||||
--button-plain-hover-background-color: #bdd2c8;
|
|
||||||
--button-plain-active-background-color: #7d9f8f;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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 {
|
||||||
@@ -979,23 +978,21 @@ section#project {
|
|||||||
font-weight: 600;
|
font-weight: 600;
|
||||||
}
|
}
|
||||||
|
|
||||||
>p {
|
>div.sim {
|
||||||
margin: unset;
|
a.number {
|
||||||
display: flex;
|
margin: unset;
|
||||||
gap: 0.4rem;
|
color: #fff;
|
||||||
font-family: Bahnschrift;
|
|
||||||
font-size: 1.4em;
|
|
||||||
font-weight: 400;
|
|
||||||
text-shadow: 0px 1px 3px #000C, 0px 1px 1px #000B;
|
|
||||||
|
|
||||||
>span {
|
|
||||||
font-weight: 400;
|
|
||||||
}
|
|
||||||
|
|
||||||
+small {
|
|
||||||
font-family: "Bahnschrift";
|
|
||||||
font-weight: 100;
|
|
||||||
text-shadow: 0px 1px 3px #000C, 0px 1px 1px #000B;
|
text-shadow: 0px 1px 3px #000C, 0px 1px 1px #000B;
|
||||||
|
|
||||||
|
>span {
|
||||||
|
font-weight: 400;
|
||||||
|
}
|
||||||
|
|
||||||
|
+small {
|
||||||
|
font-family: "Bahnschrift";
|
||||||
|
font-weight: 100;
|
||||||
|
text-shadow: 0px 1px 3px #000C, 0px 1px 1px #000B;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1022,7 +1019,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;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
@import url('/css/fonts/nunito.css');
|
@import url('/css/fonts/nunito.css');
|
||||||
@import url('/css/fonts/cascadia_code.css');
|
@import url('/css/fonts/cascadia_code.css');
|
||||||
@import url('/css/fonts/geologica.css');
|
@import url('/css/fonts/geologica.css');
|
||||||
@import url('/css/fonts/commissioner.css');
|
/* @import url('/css/fonts/commissioner.css'); */
|
||||||
@import url('/css/fonts/mt_sans.css');
|
@import url('/css/fonts/mt_sans.css');
|
||||||
/* @import url('/css/fonts/vredina.css'); */
|
/* @import url('/css/fonts/vredina.css'); */
|
||||||
@import url('/css/fonts/gost.css');
|
@import url('/css/fonts/gost.css');
|
||||||
@@ -14,5 +14,5 @@
|
|||||||
/* @import url('/css/fonts/urban_slavic.css'); */
|
/* @import url('/css/fonts/urban_slavic.css'); */
|
||||||
/* @import url('/css/fonts/slifted.css'); */
|
/* @import url('/css/fonts/slifted.css'); */
|
||||||
/* @import url('/css/fonts/compacta.css'); */
|
/* @import url('/css/fonts/compacta.css'); */
|
||||||
@import url('/css/fonts/industry.css');
|
/* @import url('/css/fonts/industry.css'); */
|
||||||
/* @import url('/css/fonts/palui.css'); */
|
/* @import url('/css/fonts/palui.css'); */
|
||||||
|
|||||||
@@ -3,42 +3,33 @@
|
|||||||
footer {
|
footer {
|
||||||
z-index: 4000;
|
z-index: 4000;
|
||||||
position: relative;
|
position: relative;
|
||||||
height: var(--footer-height, 200px);
|
min-height: 230px;
|
||||||
|
height: var(--footer-height, 230px);
|
||||||
|
box-sizing: border-box;
|
||||||
padding: 2rem 10vw;
|
padding: 2rem 10vw;
|
||||||
display: flex;
|
display: flex;
|
||||||
align-items: self-end;
|
flex-direction: column;
|
||||||
justify-content: space-between;
|
justify-content: space-between;
|
||||||
gap: 3rem;
|
gap: 2rem;
|
||||||
/* overflow: hidden; */
|
|
||||||
color: #fff;
|
color: #fff;
|
||||||
background-color: #000;
|
background-color: #000;
|
||||||
|
|
||||||
>div.sector {
|
>div.sector {
|
||||||
height: 100%;
|
height: 100%;
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: column;
|
flex-direction: row;
|
||||||
justify-content: end;
|
justify-content: space-between;
|
||||||
gap: 1rem;
|
gap: 2rem;
|
||||||
|
|
||||||
&.company {
|
>article.company {
|
||||||
justify-content: space-between;
|
flex-grow: 1;
|
||||||
align-items: end;
|
|
||||||
|
|
||||||
>article#contacts {
|
|
||||||
display: flex;
|
|
||||||
flex-direction: column;
|
|
||||||
align-items: end;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
>article#office {
|
|
||||||
width: 250px;
|
|
||||||
height: 100%;
|
|
||||||
display: flex;
|
display: flex;
|
||||||
|
gap: 2rem;
|
||||||
|
|
||||||
>div.map {
|
>div.map {
|
||||||
width: 100%;
|
max-width: 350px;
|
||||||
height: 100%;
|
width: 250px;
|
||||||
|
flex-grow: 3;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
border-radius: 0.75rem;
|
border-radius: 0.75rem;
|
||||||
border: 2px solid #474023;
|
border: 2px solid #474023;
|
||||||
@@ -70,128 +61,145 @@ footer {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
nav#links {
|
>div.information {
|
||||||
flex-grow: 1;
|
min-width: 230px;
|
||||||
display: inline-flex;
|
max-width: 250px;
|
||||||
justify-content: center;
|
justify-self: end;
|
||||||
gap: 1rem;
|
flex-grow: 1;
|
||||||
|
|
||||||
>a {
|
|
||||||
text-decoration: none;
|
|
||||||
font-family: "Geologica";
|
|
||||||
font-weight: 400;
|
|
||||||
font-size: 0.85rem;
|
|
||||||
color: #807f7f;
|
|
||||||
transition: color 0.1s ease-out;
|
|
||||||
|
|
||||||
&:is(:hover, :focus) {
|
|
||||||
color: #d5d5d5;
|
|
||||||
transition: color 0s;
|
|
||||||
}
|
|
||||||
|
|
||||||
&:active {
|
|
||||||
color: #4b4b4b;
|
|
||||||
transition: color 0s;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
>article#contacts {
|
|
||||||
>h1.sim {
|
|
||||||
margin: unset;
|
|
||||||
display: flex;
|
display: flex;
|
||||||
gap: 0.4em;
|
flex-direction: column;
|
||||||
font-size: 1.4em;
|
gap: 0.5rem;
|
||||||
|
font-family: "Cascadia Code";
|
||||||
|
|
||||||
>span.country:before {
|
>h1.name {
|
||||||
content: '+';
|
margin: unset;
|
||||||
|
display: block;
|
||||||
|
font-weight: 600;
|
||||||
|
font-size: 1rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
>span.operator:before {
|
>p.column {
|
||||||
content: '(';
|
margin: unset;
|
||||||
}
|
display: inline-flex;
|
||||||
|
flex-direction: column;
|
||||||
>span.operator:after {
|
|
||||||
content: ')';
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
>p.worktime {
|
|
||||||
margin: unset;
|
|
||||||
margin-top: 0.6em;
|
|
||||||
display: flex;
|
|
||||||
gap: 0.5em;
|
|
||||||
|
|
||||||
>span.time.from {
|
|
||||||
display: flex;
|
|
||||||
gap: 0.2em;
|
gap: 0.2em;
|
||||||
|
font-size: 0.8rem;
|
||||||
|
color: #a3a396;
|
||||||
|
|
||||||
&:before {
|
::selection {
|
||||||
content: var(--contacts-worktime-from, 'from');
|
color: #000;
|
||||||
|
background: #F22;
|
||||||
|
}
|
||||||
|
|
||||||
|
::-moz-selection {
|
||||||
|
color: #000;
|
||||||
|
background: #F22;
|
||||||
|
}
|
||||||
|
|
||||||
|
>span.row {
|
||||||
|
display: inline-flex;
|
||||||
|
justify-content: end;
|
||||||
|
font-weight: 400;
|
||||||
|
gap: 0.6em;
|
||||||
|
|
||||||
|
&:before {
|
||||||
|
margin-right: auto;
|
||||||
|
font-weight: 600;
|
||||||
|
color: #fff;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
>span.tax {
|
||||||
|
&:before {
|
||||||
|
content: var(--company-tax) ":";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
>span.identifier {
|
||||||
|
&:before {
|
||||||
|
content: var(--company-identifier) ":";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
>span.time.to {
|
>p.worktime {
|
||||||
|
margin: unset;
|
||||||
|
margin-top: auto;
|
||||||
display: flex;
|
display: flex;
|
||||||
gap: 0.2em;
|
gap: 0.5em;
|
||||||
|
font-family: "Bahnschrift";
|
||||||
|
|
||||||
&:before {
|
>span.time.from {
|
||||||
content: var(--contacts-worktime-to, 'to');
|
margin-left: auto;
|
||||||
|
display: flex;
|
||||||
|
gap: 0.2em;
|
||||||
|
|
||||||
|
&:before {
|
||||||
|
content: var(--contacts-worktime-from, 'from');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
>span.time.to {
|
||||||
|
display: flex;
|
||||||
|
gap: 0.2em;
|
||||||
|
|
||||||
|
&:before {
|
||||||
|
content: var(--contacts-worktime-to, 'to');
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
>article#company {
|
>article.contacts {
|
||||||
justify-self: end;
|
min-height: 100px;
|
||||||
width: 160px;
|
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
gap: 0.5rem;
|
align-items: end;
|
||||||
font-family: "Bahnschrift";
|
text-align: right;
|
||||||
|
|
||||||
>h1.name {
|
>div.media {
|
||||||
margin: unset;
|
margin: unset;
|
||||||
display: block;
|
margin-top: auto;
|
||||||
text-align: right;
|
justify-content: end;
|
||||||
font-weight: 600;
|
|
||||||
font-size: 1rem;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
>p.column {
|
>div.sim {
|
||||||
margin: unset;
|
a.number {
|
||||||
display: inline-flex;
|
color: #fff;
|
||||||
flex-direction: column;
|
|
||||||
text-align: right;
|
|
||||||
gap: 0.2em;
|
|
||||||
font-size: 0.8rem;
|
|
||||||
color: grey;
|
|
||||||
|
|
||||||
>span.row {
|
|
||||||
display: inline-flex;
|
|
||||||
justify-content: end;
|
|
||||||
font-weight: 400;
|
|
||||||
|
|
||||||
&:before {
|
|
||||||
margin-right: auto;
|
|
||||||
font-weight: 600;
|
|
||||||
color: #fff;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
>span.tax {
|
>a.mail {
|
||||||
&:before {
|
margin-top: 0.2em;
|
||||||
content: var(--company-tax) ":";
|
margin-bottom: 1rem;
|
||||||
}
|
font-family: "Cascadia Code";
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
>span.identifier {
|
>nav#links {
|
||||||
&:before {
|
display: inline-flex;
|
||||||
content: var(--company-identifier) ":";
|
justify-content: start;
|
||||||
}
|
gap: 1rem;
|
||||||
}
|
|
||||||
|
>a {
|
||||||
|
text-decoration: none;
|
||||||
|
font-family: "Geologica";
|
||||||
|
font-weight: 400;
|
||||||
|
font-size: 0.85rem;
|
||||||
|
color: #807f7f;
|
||||||
|
transition: color 0.1s ease-out;
|
||||||
|
|
||||||
|
&:is(:hover, :focus) {
|
||||||
|
color: #d5d5d5;
|
||||||
|
transition: color 0s;
|
||||||
|
}
|
||||||
|
|
||||||
|
&:active {
|
||||||
|
color: #4b4b4b;
|
||||||
|
transition: color 0s;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -218,32 +226,48 @@ footer {
|
|||||||
@media (width < 1200px) {
|
@media (width < 1200px) {
|
||||||
footer {
|
footer {
|
||||||
height: unset;
|
height: unset;
|
||||||
flex-direction: column;
|
|
||||||
align-items: center;
|
|
||||||
|
|
||||||
>div.sector {
|
>div.sector {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
|
flex-direction: column;
|
||||||
|
|
||||||
>article#office {
|
>article.company {
|
||||||
width: 100%;
|
>div.map {
|
||||||
height: 100px;
|
max-width: unset;
|
||||||
}
|
width: 100%;
|
||||||
|
height: 150px;
|
||||||
nav#links {
|
|
||||||
display: inline-flex;
|
|
||||||
justify-content: space-between;
|
|
||||||
gap: 1rem;
|
|
||||||
flex-flow: wrap row;
|
|
||||||
align-items: center;
|
|
||||||
}
|
|
||||||
|
|
||||||
&:is(.company) {
|
|
||||||
flex-direction: row;
|
|
||||||
|
|
||||||
>article#contacts {
|
|
||||||
align-items: start;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
>article.contacts {
|
||||||
|
align-items: center;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
>nav#links {
|
||||||
|
display: inline-flex;
|
||||||
|
/* justify-content: space-between; */
|
||||||
|
flex-flow: wrap row;
|
||||||
|
justify-content: center;
|
||||||
|
gap: 1rem;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (width < 800px) {
|
||||||
|
footer {
|
||||||
|
>div.sector {
|
||||||
|
>article.company {
|
||||||
|
flex-direction: column;
|
||||||
|
|
||||||
|
>div.information {
|
||||||
|
max-width: unset;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
>nav#links {
|
||||||
|
justify-content: space-between;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,35 @@
|
|||||||
|
h1#logotype {
|
||||||
|
z-index: 200;
|
||||||
|
margin: unset;
|
||||||
|
margin-top: 4rem;
|
||||||
|
margin-bottom: 2rem;
|
||||||
|
width: max-content;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
text-align: center;
|
||||||
|
gap: 0.6rem;
|
||||||
|
font-family: "";
|
||||||
|
font-size: min(8vw, 4rem);
|
||||||
|
font-weight: 400;
|
||||||
|
/* scale: 0.8; */
|
||||||
|
color: #fff;
|
||||||
|
|
||||||
|
>span.slogan {
|
||||||
|
line-height: 0.8em;
|
||||||
|
font-family: "GOST";
|
||||||
|
font-weight: 400;
|
||||||
|
font-size: 1.24em;
|
||||||
|
color: #3688a2;
|
||||||
|
}
|
||||||
|
|
||||||
|
>a.kodorvan {
|
||||||
|
line-height: 0.8em;
|
||||||
|
font-family: "MT Sans";
|
||||||
|
font-size: 2em;
|
||||||
|
text-decoration: unset;
|
||||||
|
color: #c2ff98;
|
||||||
|
/* text-shadow:
|
||||||
|
0px 0px 4px #ffff00b5,
|
||||||
|
0px 0px 11px #ffff008a */
|
||||||
|
}
|
||||||
|
}
|
||||||
17
kodorvan/site/system/public/themes/default/css/interface/media.css
Executable file
@@ -0,0 +1,17 @@
|
|||||||
|
@charset "UTF-8";
|
||||||
|
|
||||||
|
div.social.media {
|
||||||
|
margin: 0.6em 0;
|
||||||
|
height: 3.5ch;
|
||||||
|
display: flex;
|
||||||
|
gap: 1ch;
|
||||||
|
|
||||||
|
>a {
|
||||||
|
display: contents;
|
||||||
|
|
||||||
|
>img {
|
||||||
|
width: auto;
|
||||||
|
height: 100%;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
37
kodorvan/site/system/public/themes/default/css/interface/sim.css
Executable file
@@ -0,0 +1,37 @@
|
|||||||
|
@charset "UTF-8";
|
||||||
|
|
||||||
|
div.sim {
|
||||||
|
display: flex;
|
||||||
|
gap: 0.4em;
|
||||||
|
|
||||||
|
>a.number {
|
||||||
|
display: flex;
|
||||||
|
gap: 0.4em;
|
||||||
|
font-family: Bahnschrift;
|
||||||
|
font-size: 1.5em;
|
||||||
|
|
||||||
|
>span.country:before {
|
||||||
|
content: '+';
|
||||||
|
}
|
||||||
|
|
||||||
|
>span.operator:before {
|
||||||
|
content: '(';
|
||||||
|
}
|
||||||
|
|
||||||
|
>span.operator:after {
|
||||||
|
content: ')';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
>button.copy {
|
||||||
|
margin: unset;
|
||||||
|
padding: 0 0.2em;
|
||||||
|
cursor: pointer;
|
||||||
|
border: unset;
|
||||||
|
|
||||||
|
>img.icon {
|
||||||
|
scale: 0.8;
|
||||||
|
color: #fff;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -11,6 +11,8 @@ main {
|
|||||||
align-items: center;
|
align-items: center;
|
||||||
transition: 0s;
|
transition: 0s;
|
||||||
overflow-x: hidden;
|
overflow-x: hidden;
|
||||||
|
overflow-y: scroll;
|
||||||
|
overscroll-behavior: none;
|
||||||
|
|
||||||
&:not(:has(*)) {
|
&:not(:has(*)) {
|
||||||
display: none;
|
display: none;
|
||||||
|
|||||||
@@ -1,43 +1,7 @@
|
|||||||
@charset "UTF-8";
|
@charset "UTF-8";
|
||||||
|
|
||||||
body {
|
body {
|
||||||
main {
|
>main {
|
||||||
>h1#title {
|
|
||||||
z-index: 200;
|
|
||||||
margin: unset;
|
|
||||||
margin-top: 4rem;
|
|
||||||
margin-bottom: 2rem;
|
|
||||||
width: max-content;
|
|
||||||
display: flex;
|
|
||||||
flex-direction: column;
|
|
||||||
text-align: center;
|
|
||||||
gap: 0.6rem;
|
|
||||||
font-family: "";
|
|
||||||
font-size: min(8vw, 4rem);
|
|
||||||
font-weight: 400;
|
|
||||||
/* scale: 0.8; */
|
|
||||||
color: #fff;
|
|
||||||
|
|
||||||
>span.slogan {
|
|
||||||
line-height: 0.8em;
|
|
||||||
font-family: "GOST";
|
|
||||||
font-weight: 400;
|
|
||||||
font-size: 1.24em;
|
|
||||||
color: #3688a2;
|
|
||||||
}
|
|
||||||
|
|
||||||
>a.kodorvan {
|
|
||||||
line-height: 0.8em;
|
|
||||||
font-family: "MT Sans";
|
|
||||||
font-size: 2em;
|
|
||||||
text-decoration: unset;
|
|
||||||
color: #c2ff98;
|
|
||||||
/* text-shadow:
|
|
||||||
0px 0px 4px #ffff00b5,
|
|
||||||
0px 0px 11px #ffff008a */
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
>section.section {
|
>section.section {
|
||||||
z-index: 500;
|
z-index: 500;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
@@ -78,16 +42,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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
@charset "UTF-8";
|
@charset "UTF-8";
|
||||||
|
|
||||||
body {
|
body {
|
||||||
main {
|
>main {
|
||||||
>h1#title {
|
>h1#title {
|
||||||
z-index: 200;
|
z-index: 200;
|
||||||
margin: unset;
|
margin: unset;
|
||||||
@@ -39,13 +39,22 @@ body {
|
|||||||
}
|
}
|
||||||
|
|
||||||
>article#offer {
|
>article#offer {
|
||||||
background: #fff;
|
|
||||||
z-index: 500;
|
z-index: 500;
|
||||||
border-radius: 1.25rem;
|
border-radius: 1.25rem;
|
||||||
margin: 3rem 10vw 8rem;
|
margin: 3rem 0 8rem;
|
||||||
padding: 1rem 4rem;
|
width: 880px;
|
||||||
|
box-sizing: border-box;
|
||||||
|
padding: 3rem 4rem;
|
||||||
|
background: #fff;
|
||||||
|
|
||||||
>h1 {}
|
>h1 {
|
||||||
|
margin-top: unset;
|
||||||
|
margin-bottom: 2.5rem;
|
||||||
|
text-align: center;
|
||||||
|
font-family: "MT Sans";
|
||||||
|
font-size: 3rem;
|
||||||
|
font-weight: 400;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -68,16 +77,27 @@ 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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (width < 1000px) {
|
||||||
|
body {
|
||||||
|
>main {
|
||||||
|
>article#offer {
|
||||||
|
margin-bottom: unset;
|
||||||
|
width: 100%;
|
||||||
|
border-radius: unset;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -20,26 +20,59 @@
|
|||||||
--cookies-width: 24rem;
|
--cookies-width: 24rem;
|
||||||
--cookies-height: 4rem;
|
--cookies-height: 4rem;
|
||||||
|
|
||||||
font-family: "Commissioner";
|
|
||||||
font-family: "Share Tech Mono";
|
|
||||||
font-family: "Montserrat";
|
|
||||||
font-family: "Alumni Sans Pinstripe";
|
|
||||||
font-family: "DejaVu";
|
|
||||||
font-family: "Fira";
|
|
||||||
font-family: "Hack";
|
|
||||||
font-family: "Nunito", "DejaVu", sans-serif;
|
font-family: "Nunito", "DejaVu", sans-serif;
|
||||||
text-decoration: none;
|
text-decoration: none;
|
||||||
outline: none;
|
outline: none;
|
||||||
border: none;
|
border: none;
|
||||||
transition: 0.1s ease-out;
|
transition: 0.1s ease-out;
|
||||||
|
overscroll-behavior: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
::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-gradient);
|
/* background: var(--background-color, #fff);
|
||||||
|
background: var(--background-gradient); */
|
||||||
|
background-color: #020c13;
|
||||||
|
}
|
||||||
|
|
||||||
|
a {
|
||||||
|
text-decoration: unset;
|
||||||
|
color: var(--link-color);
|
||||||
|
|
||||||
|
&:is(:hover, :focus) {
|
||||||
|
color: var(--link-hover-color);
|
||||||
|
}
|
||||||
|
|
||||||
|
&:active {
|
||||||
|
color: var(--link-active-color);
|
||||||
|
}
|
||||||
|
|
||||||
|
&::selection {
|
||||||
|
color: #094ef2;
|
||||||
|
background: #FFF;
|
||||||
|
text-shadow: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
&::-moz-selection {
|
||||||
|
color: #094ef2;
|
||||||
|
background: #FFF;
|
||||||
|
text-shadow: none;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.unselectable {
|
.unselectable {
|
||||||
@@ -67,6 +100,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;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -108,28 +142,34 @@ textarea {
|
|||||||
}
|
}
|
||||||
|
|
||||||
button {
|
button {
|
||||||
padding: 0.77em 1.3em 0.6em;
|
|
||||||
cursor: pointer;
|
|
||||||
font-family: Bahnschrift;
|
font-family: Bahnschrift;
|
||||||
font-weight: 400;
|
font-weight: 400;
|
||||||
|
cursor: pointer;
|
||||||
outline: unset;
|
outline: unset;
|
||||||
border-radius: 0.75rem;
|
|
||||||
border: 1px solid #000;
|
|
||||||
background: unset;
|
background: unset;
|
||||||
|
|
||||||
&:not(:disabled) {
|
|
||||||
&:is(:hover, :focus) {
|
|
||||||
background-color: #e7e6e0;
|
|
||||||
}
|
|
||||||
|
|
||||||
&:active {
|
|
||||||
background-color: #c0bfb4;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
&:disabled {
|
&:disabled {
|
||||||
cursor: not-allowed;
|
cursor: not-allowed;
|
||||||
background-color: #08111d17;
|
}
|
||||||
filter: grayscale(1) brightness(0.8);
|
|
||||||
|
&:not(.inline) {
|
||||||
|
padding: 0.77em 1.3em 0.6em;
|
||||||
|
border-radius: 0.75rem;
|
||||||
|
border: 1px solid #000;
|
||||||
|
|
||||||
|
&:not(:disabled) {
|
||||||
|
&:is(:hover, :focus) {
|
||||||
|
background-color: #e7e6e0;
|
||||||
|
}
|
||||||
|
|
||||||
|
&:active {
|
||||||
|
background-color: #c0bfb4;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
&:disabled {
|
||||||
|
background-color: #08111d17;
|
||||||
|
filter: grayscale(1) brightness(0.55);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,17 @@
|
|||||||
|
<svg
|
||||||
|
width="24"
|
||||||
|
height="24"
|
||||||
|
viewBox="0 0 24 24"
|
||||||
|
fill="none"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
>
|
||||||
|
<path d="M13 7H7V5H13V7Z" fill="currentColor" />
|
||||||
|
<path d="M13 11H7V9H13V11Z" fill="currentColor" />
|
||||||
|
<path d="M7 15H13V13H7V15Z" fill="currentColor" />
|
||||||
|
<path
|
||||||
|
fill-rule="evenodd"
|
||||||
|
clip-rule="evenodd"
|
||||||
|
d="M3 19V1H17V5H21V23H7V19H3ZM15 17V3H5V17H15ZM17 7V19H9V21H19V7H17Z"
|
||||||
|
fill="currentColor"
|
||||||
|
/>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 429 B |
@@ -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 |
@@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" xml:space="preserve" viewBox="0 0 1000 1000"><defs><linearGradient id="b"><stop offset="0" stop-color="#00f"/><stop offset="1" stop-opacity="0"/><stop offset="1" stop-opacity="0"/></linearGradient><linearGradient id="a"><stop offset="0" stop-color="#4cf"/><stop offset=".662" stop-color="#53e"/><stop offset="1" stop-color="#93d"/></linearGradient><linearGradient id="c" x1="117.847" x2="1000" y1="760.536" y2="500" gradientUnits="userSpaceOnUse" href="#a"/><radialGradient id="d" cx="-87.392" cy="1166.116" r="500" fx="-87.392" fy="1166.116" gradientTransform="rotate(51.356 1551.476 559.302)scale(2.42703 1)" gradientUnits="userSpaceOnUse" href="#b"/></defs><rect width="1000" height="1000" fill="url(#c)" ry="249.681"/><rect width="1000" height="1000" fill="url(#d)" ry="249.681"/><path fill="#fff" fill-rule="evenodd" d="M508.211 878.328c-75.007 0-109.864-10.95-170.453-54.75-38.325 49.275-159.686 87.783-164.979 21.9 0-49.456-10.95-91.248-23.36-136.873-14.782-56.21-31.572-118.807-31.572-209.508 0-216.626 177.754-379.597 388.357-379.597 210.785 0 375.947 171.001 375.947 381.604.707 207.346-166.595 376.118-373.94 377.224m3.103-571.585c-102.564-5.292-182.499 65.7-200.201 177.024-14.6 92.162 11.315 204.398 33.397 210.238 10.585 2.555 37.23-18.98 53.837-35.587a189.8 189.8 0 0 0 92.71 33.032c106.273 5.112 197.08-75.794 204.215-181.95 4.154-106.382-77.67-196.486-183.958-202.574Z" clip-rule="evenodd"/></svg>
|
||||||
|
After Width: | Height: | Size: 1.4 KiB |
17
kodorvan/site/system/public/themes/default/images/icons/telegram.svg
Executable file → Normal file
@@ -1,16 +1 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<svg xmlns="http://www.w3.org/2000/svg" width="1000" height="1000"><defs><linearGradient id="a" x1="50%" x2="50%" y1="0%" y2="99.258%"><stop offset="0%" stop-color="#2AABEE"/><stop offset="100%" stop-color="#229ED9"/></linearGradient></defs><g fill="none" fill-rule="evenodd"><circle cx="500" cy="500" r="500" fill="url(#a)"/><path fill="#FFF" d="M226.328 494.722q218.64-95.258 291.59-125.6c138.855-57.755 167.707-67.787 186.513-68.118 4.137-.073 13.385.952 19.375 5.813 5.059 4.104 6.45 9.649 7.117 13.54s1.495 12.757.836 19.684c-7.525 79.061-40.084 270.924-56.648 359.474-7.009 37.47-20.81 50.033-34.17 51.262-29.036 2.672-51.085-19.189-79.208-37.624-44.006-28.847-68.867-46.804-111.583-74.953-49.366-32.531-17.364-50.411 10.77-79.631C468.281 550.92 596.214 434.556 598.69 424c.31-1.32.597-6.241-2.326-8.84-2.924-2.598-7.239-1.71-10.353-1.003q-6.62 1.503-210.902 139.4-29.933 20.553-54.223 20.028c-17.853-.386-52.194-10.094-77.723-18.393-31.313-10.178-56.2-15.56-54.032-32.846q1.692-13.505 37.196-27.624"/></g></svg>
|
||||||
<svg width="1000px" height="1000px" viewBox="0 0 1000 1000" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
|
||||||
<!-- Generator: Sketch 53.2 (72643) - https://sketchapp.com -->
|
|
||||||
<title>Artboard</title>
|
|
||||||
<desc>Created with Sketch.</desc>
|
|
||||||
<defs>
|
|
||||||
<linearGradient x1="50%" y1="0%" x2="50%" y2="99.2583404%" id="linearGradient-1">
|
|
||||||
<stop stop-color="#2AABEE" offset="0%"></stop>
|
|
||||||
<stop stop-color="#229ED9" offset="100%"></stop>
|
|
||||||
</linearGradient>
|
|
||||||
</defs>
|
|
||||||
<g id="Artboard" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
|
||||||
<circle id="Oval" fill="url(#linearGradient-1)" cx="500" cy="500" r="500"></circle>
|
|
||||||
<path d="M226.328419,494.722069 C372.088573,431.216685 469.284839,389.350049 517.917216,369.122161 C656.772535,311.36743 685.625481,301.334815 704.431427,301.003532 C708.567621,300.93067 717.815839,301.955743 723.806446,306.816707 C728.864797,310.92121 730.256552,316.46581 730.922551,320.357329 C731.588551,324.248848 732.417879,333.113828 731.758626,340.040666 C724.234007,419.102486 691.675104,610.964674 675.110982,699.515267 C668.10208,736.984342 654.301336,749.547532 640.940618,750.777006 C611.904684,753.448938 589.856115,731.588035 561.733393,713.153237 C517.726886,684.306416 492.866009,666.349181 450.150074,638.200013 C400.78442,605.66878 432.786119,587.789048 460.919462,558.568563 C468.282091,550.921423 596.21508,434.556479 598.691227,424.000355 C599.00091,422.680135 599.288312,417.758981 596.36474,415.160431 C593.441168,412.561881 589.126229,413.450484 586.012448,414.157198 C581.598758,415.158943 511.297793,461.625274 375.109553,553.556189 C355.154858,567.258623 337.080515,573.934908 320.886524,573.585046 C303.033948,573.199351 268.692754,563.490928 243.163606,555.192408 C211.851067,545.013936 186.964484,539.632504 189.131547,522.346309 C190.260287,513.342589 202.659244,504.134509 226.328419,494.722069 Z" id="Path-3" fill="#FFFFFF"></path>
|
|
||||||
</g>
|
|
||||||
</svg>
|
|
||||||
|
Before Width: | Height: | Size: 2.0 KiB After Width: | Height: | Size: 1018 B |
@@ -0,0 +1,17 @@
|
|||||||
|
<svg
|
||||||
|
width="24"
|
||||||
|
height="24"
|
||||||
|
viewBox="0 0 24 24"
|
||||||
|
fill="none"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
>
|
||||||
|
<path d="M13 7H7V5H13V7Z" fill="#fff" />
|
||||||
|
<path d="M13 11H7V9H13V11Z" fill="#fff" />
|
||||||
|
<path d="M7 15H13V13H7V15Z" fill="#fff" />
|
||||||
|
<path
|
||||||
|
fill-rule="evenodd"
|
||||||
|
clip-rule="evenodd"
|
||||||
|
d="M3 19V1H17V5H21V23H7V19H3ZM15 17V3H5V17H15ZM17 7V19H9V21H19V7H17Z"
|
||||||
|
fill="#fff"
|
||||||
|
/>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 398 B |
@@ -1,13 +1,37 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
// Initializing default theme for the views templater
|
|
||||||
define('THEME', 'default');
|
define('THEME', 'default');
|
||||||
|
|
||||||
define('TELEGRAM_ROBOT', [
|
define('DOMAIN', 'kodorvan.tech');
|
||||||
'domain' => 'kodorvan_bot'
|
|
||||||
|
define('COMPANY', [
|
||||||
|
'identifier' => '000000000000000',
|
||||||
|
'tax' => '000000000000',
|
||||||
|
'name' => [
|
||||||
|
'short' => 'ИП Мирзаев',
|
||||||
|
'full' => 'ИП Мирзаев Арсен Магомедович'
|
||||||
|
],
|
||||||
|
'address' => [
|
||||||
|
'full' => 'Пермь'
|
||||||
|
],
|
||||||
|
'worktime' => [
|
||||||
|
'from' => '10:00',
|
||||||
|
'to' => '19:00'
|
||||||
|
],
|
||||||
|
'contacts' => [
|
||||||
|
'request' => [
|
||||||
|
'sim' => [
|
||||||
|
'full' => '79005004010',
|
||||||
|
'country' => '7',
|
||||||
|
'operator' => '900',
|
||||||
|
'number' => ['500', '40', '10']
|
||||||
|
],
|
||||||
|
'mail' => 'request@kodorvan.tech'
|
||||||
|
]
|
||||||
|
]
|
||||||
]);
|
]);
|
||||||
|
|
||||||
define('MAIL_SERVER', [
|
define('MAIL', [
|
||||||
'host' => 'smtp.mail.ru',
|
'host' => 'smtp.mail.ru',
|
||||||
'sender' => [
|
'sender' => [
|
||||||
'mail' => 'system@kodorvan.tech',
|
'mail' => 'system@kodorvan.tech',
|
||||||
@@ -15,14 +39,11 @@ define('MAIL_SERVER', [
|
|||||||
'password' => '',
|
'password' => '',
|
||||||
],
|
],
|
||||||
'receiver' => [
|
'receiver' => [
|
||||||
'mail' => 'requests@kodorvan.tech',
|
'mail' => 'request@kodorvan.tech',
|
||||||
'name' => 'Заявки'
|
'name' => 'Заявки'
|
||||||
]
|
]
|
||||||
]);
|
]);
|
||||||
|
|
||||||
define('PROJECT_CONTACTS_SIM_REQUESTS', '79005004010');
|
define('TELEGRAM_ROBOT', [
|
||||||
define('PROJECT_CONTACTS_SIM_REQUESTS_COUNTRY', '7');
|
'domain' => 'kodorvan_bot'
|
||||||
define('PROJECT_CONTACTS_SIM_REQUESTS_OPERATOR', '900');
|
]);
|
||||||
define('PROJECT_CONTACTS_SIM_REQUESTS_NUMBER_1', '500');
|
|
||||||
define('PROJECT_CONTACTS_SIM_REQUESTS_NUMBER_2', '40');
|
|
||||||
define('PROJECT_CONTACTS_SIM_REQUESTS_NUMBER_3', '10');
|
|
||||||
|
|||||||
2
kodorvan/site/system/storage/projects/.gitignore
vendored
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
*
|
||||||
|
!.gitignore
|
||||||
@@ -63,6 +63,8 @@ final class templater extends controller implements array_access
|
|||||||
|
|
||||||
// Initializing global variables
|
// Initializing global variables
|
||||||
$this->twig->addGlobal('theme', THEME);
|
$this->twig->addGlobal('theme', THEME);
|
||||||
|
$this->twig->addGlobal('domain', DOMAIN);
|
||||||
|
$this->twig->addGlobal('company', COMPANY);
|
||||||
$this->twig->addGlobal('server', $_SERVER);
|
$this->twig->addGlobal('server', $_SERVER);
|
||||||
$this->twig->addGlobal('cookies', $_COOKIE);
|
$this->twig->addGlobal('cookies', $_COOKIE);
|
||||||
$this->twig->addGlobal('language', $language = $session?->buffer['language'] ?? language::en);
|
$this->twig->addGlobal('language', $language = $session?->buffer['language'] ?? language::en);
|
||||||
|
|||||||
@@ -13,7 +13,7 @@
|
|||||||
{% block css %}
|
{% block css %}
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
||||||
{% include '/elements/yandex.html' %}
|
{% include '/metrics/yandex.html' %}
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
<body>
|
<body>
|
||||||
|
|||||||
@@ -1,11 +1,19 @@
|
|||||||
<section id="cookies" class="unselectable">
|
<section id="cookies" class="unselectable">
|
||||||
<div class="popup">
|
<div class="popup" aria-label="Используется технология cookies">
|
||||||
<div>
|
<div>
|
||||||
<p>ИСПОЛЬЗУЕТСЯ ТЕХНОЛОГИЯ COOKIES</p>
|
<p>ИСПОЛЬЗУЕТСЯ ТЕХНОЛОГИЯ COOKIES</p>
|
||||||
<small>№152-ФЗ «О персональных данных»</small>
|
<small>№152-ФЗ «О персональных данных»</small>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<button onclick="let date = new Date(); document.cookie = 'cookies_popup_closed=true; expires=' + date.setDate(date.getDate() + 7) + '; path=/'; setTimeout(() => this.parentElement.remove(), 700); this.parentElement.style.opacity = 0">
|
<button
|
||||||
<img class="cookie" src="/themes/default/images/cookie.png" alt="kodorvan cookies" ondragstart="return false" />
|
onclick="let date = new Date(); document.cookie = 'cookies_popup_closed=true; expires=' + date.setDate(date.getDate() + 7) + '; path=/'; setTimeout(() => this.parentElement.remove(), 700); this.parentElement.style.opacity = 0"
|
||||||
|
title="Закрыть"
|
||||||
|
>
|
||||||
|
<img
|
||||||
|
class="cookie"
|
||||||
|
src="/themes/default/images/cookie.png"
|
||||||
|
alt="kodorvan cookies"
|
||||||
|
ondragstart="return false"
|
||||||
|
/>
|
||||||
</button>
|
</button>
|
||||||
</section>
|
</section>
|
||||||
|
|||||||
@@ -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,24 +315,25 @@
|
|||||||
<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>не является <a href="/offer" rel="terms-of-service noopener">публичной офертой</a></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>
|
{% include '/themes/default/interface/media.html' %}
|
||||||
|
{% include '/themes/default/interface/sim.html' %}
|
||||||
<small class="unselectable">ЗВОНИТЕ ПО НОМЕРУ</small>
|
<small class="unselectable">ЗВОНИТЕ ПО НОМЕРУ</small>
|
||||||
</section>
|
</section>
|
||||||
</section>
|
</section>
|
||||||
|
|||||||
@@ -52,7 +52,7 @@
|
|||||||
{% for button in buttons %}
|
{% for button in buttons %}
|
||||||
{% set icon = button.icon ?? 'close' %}
|
{% set icon = button.icon ?? 'close' %}
|
||||||
<link type="text/css" rel="stylesheet" href="/css/icons/{{ button.icon|replace({' ': '_'}) }}.css" />
|
<link type="text/css" rel="stylesheet" href="/css/icons/{{ button.icon|replace({' ': '_'}) }}.css" />
|
||||||
<a type="button" href="{{ button.href }}" target="_blank" rel="nofollow noopener noreferrer"><i class="icon {{ button.icon }}"></i></a>
|
<a type="button" href="{{ button.href }}" target="_blank" rel="external nofollow noopener noreferrer"><i class="icon {{ button.icon }}"></i></a>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</div>
|
</div>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|||||||
@@ -15,37 +15,42 @@
|
|||||||
{% block body %}
|
{% block body %}
|
||||||
<footer>
|
<footer>
|
||||||
<div class="sector">
|
<div class="sector">
|
||||||
<article id="office">
|
<article class="company">
|
||||||
<div class="map">
|
<div class="map">
|
||||||
<div class="loading">
|
<div class="loading">
|
||||||
<i class="icon loading spinner animated"></i>
|
<i class="icon loading spinner animated"></i>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
<div class="information">
|
||||||
|
<h1 class="name">{{ company.name.short }}</h1>
|
||||||
|
<p class="column"><span class="tax row">{{ company.tax }}</span><span class="identifier row">{{ company.identifier }}</span></p>
|
||||||
|
<p class="worktime unselectable">
|
||||||
|
{% if company.address.full is not empty %}{{ company.address.full }}{% endif %},
|
||||||
|
<span class="time from">{{ company.worktime.from }}</span>
|
||||||
|
<span class="time to">{{ company.worktime.to }}</span>
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
</article>
|
</article>
|
||||||
|
|
||||||
<nav id="links" class="unselectable">
|
<article class="contacts">
|
||||||
<a href="/offer">ПУБЛИЧНАЯ ОФЕРТА</a>
|
{% include '/themes/default/interface/sim.html' %}
|
||||||
<a href="https://ru.wikipedia.org/wiki/WTFPL">ЛИЦЕНЗИЯ</a>
|
|
||||||
<a href="https://t.me/kodorvan">КОДОРВАНЬ</a>
|
|
||||||
<a href="https://t.me/from_mirzaev">МИРЗАЕВ</a>
|
|
||||||
<a href="https://git.svoboda.works/kodorvan">РЕПОЗИТОРИЙ</a>
|
|
||||||
</nav>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="sector company">
|
{% if company.contacts.request.mail is not empty %}
|
||||||
<article id="contacts">
|
<a class="mail support" href="mailto:{{ company.contacts.request.mail }}" rel="external noreferrer noopener nofollow">{{ company.contacts.request.mail }}</a>
|
||||||
<h1 class="sim"><span class="country">7</span><span class="operator">901</span><span>592</span><span>4211</span></h1>
|
{% endif %}
|
||||||
<span class="mail support">support@kodorvan.tech</span>
|
|
||||||
<p class="worktime unselectable">Пермь, <span class="time from">10:00</span><span class="time to">19:00</span></p>
|
|
||||||
</article>
|
|
||||||
|
|
||||||
<article id="company">
|
{% include '/themes/default/interface/media.html' %}
|
||||||
<h1 class="name">ИП Мирзаев</h1>
|
|
||||||
<p class="column"><span class="tax row">271103176488</span><span class="identifier row">322270000004691</span></p>
|
|
||||||
</article>
|
</article>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- <strong class="background unselectable">КОДОРВАНЬ</strong> -->
|
<nav id="links" class="unselectable">
|
||||||
|
<a href="/offer" rel="terms-of-service noopener">ОФЕРТА</a>
|
||||||
|
<a href="/policy" rel="privacy-policy noopener">ПОЛИТИКА</a>
|
||||||
|
<a href="https://ru.wikipedia.org/wiki/WTFPL" rel="license external nofollow noopener" >ЛИЦЕНЗИЯ</a>
|
||||||
|
<a href="https://git.svoboda.works/kodorvan" rel="external nofollow noopener">РЕПОЗИТОРИЙ</a>
|
||||||
|
<a href="https://t.me/kodorvan" rel="help external nofollow noopener">БЛОГ</a>
|
||||||
|
<a href="https://t.me/from_mirzaev" rel="author external nofollow noopener">МИРЗАЕВ</a>
|
||||||
|
</nav>
|
||||||
</footer>
|
</footer>
|
||||||
{% include '/themes/default/elements/rofls.html' %}
|
{% include '/themes/default/elements/rofls.html' %}
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|||||||
@@ -1,23 +1,37 @@
|
|||||||
{% block meta %}
|
{% block meta %}
|
||||||
<meta charset="utf-8" />
|
<meta charset="utf-8" />
|
||||||
|
|
||||||
<title>{% if head.title != empty %}{{ head.title }}{% else %}Кодорвань - разработка сайтов в Перми{% endif %}</title>
|
<link rel="canonical" href="{{ uri ?? domain ? ('https://' ~ domain) : '' }}" />
|
||||||
|
|
||||||
|
<title>{{ title ?? 'Кодорвань - разработка сайтов в Перми' }}</title>
|
||||||
<meta name="application-name" content="Кодорвань" />
|
<meta name="application-name" content="Кодорвань" />
|
||||||
<meta name="description" content="Чистый код, авангардный дизайн, крепкий бустинг и юридическая броня! Заходи на сайт и посчитай проект за 2 минуты! Рвём шаблоны!" />
|
<meta name="description" content="Чистый код, авангардный дизайн, крепкий бустинг и юридическая броня! Заходи на сайт и посчитай проект за 2 минуты! Рвём шаблоны!" />
|
||||||
<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" />
|
||||||
|
|
||||||
<meta property="og:title" content="Кодорвань - разработка сайтов в Перми" />
|
<meta property="og:title" content="{{ opengraph.title ?? 'Кодорвань - разработка сайтов в Перми' }}" />
|
||||||
<meta property="og:description" content="Чистый код, авангардный дизайн, крепкий бустинг и юридическая броня! Заходи на сайт и посчитай проект за 2 минуты! Рвём шаблоны!" />
|
<meta property="og:description" content="{{ opengraph.description ?? 'Чистый код, авангардный дизайн, крепкий бустинг и юридическая броня! Заходи на сайт и посчитай проект за 2 минуты! Рвём шаблоны!' }}" />
|
||||||
<meta property="og:locale" content="ru_RU" />
|
<meta property="og:locale" content="ru_RU" />
|
||||||
<meta property="og:type" content="website" />
|
<meta property="og:type" content="website" />
|
||||||
<meta property="og:url" content="https://kodorvan.tech" />
|
<meta property="og:url" content="{{ uri ?? domain ? ('https://' ~ domain) : '' }}" />
|
||||||
<meta property="og:logo" content="https://kodorvan.tech/images/kodorvan.png" />
|
<meta property="og:logo" content="{{ opengraph.logo ?? 'https://kodorvan.tech/images/kodorvan.png' }}" />
|
||||||
|
{% if opengraph.image.uri is not empty %}
|
||||||
|
<meta property="og:image" content="{{ opengraph.image.uri }}" />
|
||||||
|
{% if opengraph.image.width is not empty %}
|
||||||
|
<meta property="og:image:width" content="{{ opengraph.image.width }}" />
|
||||||
|
{% endif %}
|
||||||
|
{% if opengraph.image.height is not empty %}
|
||||||
|
<meta property="og:image:height" content="{{ opengraph.image.height }}" />
|
||||||
|
{% endif %}
|
||||||
|
{% if opengraph.image.alt is not empty %}
|
||||||
|
<meta property="og:image:alt" content="{{ opengraph.image.alt }}" />
|
||||||
|
{% endif %}
|
||||||
|
{% endif %}
|
||||||
<meta property="og:image" content="https://kodorvan.tech/images/kodorvan_1200_630.webp" />
|
<meta property="og:image" content="https://kodorvan.tech/images/kodorvan_1200_630.webp" />
|
||||||
<meta property="og:image:width" content="1200" />
|
<meta property="og:image:width" content="1200" />
|
||||||
<meta property="og:image:height" content="630" />
|
<meta property="og:image:height" content="630" />
|
||||||
@@ -35,8 +49,6 @@
|
|||||||
<meta name="twitter:description" content="Programming, design, boosting and legal armor!" />
|
<meta name="twitter:description" content="Programming, design, boosting and legal armor!" />
|
||||||
<meta name="twitter:image" content="https://kodorvan.tech/images/kodorvan_1200_630.webp" />
|
<meta name="twitter:image" content="https://kodorvan.tech/images/kodorvan_1200_630.webp" />
|
||||||
|
|
||||||
<link rel="canonical" href="https://kodorvan.tech" />
|
|
||||||
|
|
||||||
<link rel="apple-touch-icon" sizes="57x57" href="/images/favicon/favicon-57x57.png" />
|
<link rel="apple-touch-icon" sizes="57x57" href="/images/favicon/favicon-57x57.png" />
|
||||||
<link rel="apple-touch-icon" sizes="60x60" href="/images/favicon/favicon-60x60.png" />
|
<link rel="apple-touch-icon" sizes="60x60" href="/images/favicon/favicon-60x60.png" />
|
||||||
<link rel="apple-touch-icon" sizes="72x72" href="/images/favicon/favicon-72x72.png" />
|
<link rel="apple-touch-icon" sizes="72x72" href="/images/favicon/favicon-72x72.png" />
|
||||||
@@ -61,26 +73,26 @@
|
|||||||
<meta name="theme-color" content="#ffffff" />
|
<meta name="theme-color" content="#ffffff" />
|
||||||
|
|
||||||
{% for meta in head.metas %}
|
{% for meta in head.metas %}
|
||||||
<meta {% for name, value in meta.attributes %}{{ name }}="{{ value }}" {% endfor %} />
|
<meta {% for name, value in meta.attributes %}{{ name }}="{{ value }}" {% endfor %}/>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
|
|
||||||
<script type="application/ld+json">
|
<script type="application/ld+json">
|
||||||
{
|
{
|
||||||
"@context": "https://schema.org",
|
"@context": "https://schema.org",
|
||||||
"@type": "Organization",
|
"@type": "Organization",
|
||||||
"logo": "https://kodorvan.tech/images/kodorvan.png",
|
"logo": "https://kodorvan.tech/images/kodorvan.png",
|
||||||
"name": "Кодорвань",
|
"name": "Кодорвань",
|
||||||
"description": "Чистый код, авангардный дизайн, крепкий бустинг и юридическая броня! Заходи на сайт и посчитай проект за 2 минуты! Рвём шаблоны!",
|
"description": "Чистый код, авангардный дизайн, крепкий бустинг и юридическая броня! Заходи на сайт и посчитай проект за 2 минуты! Рвём шаблоны!",
|
||||||
"url": "https://kodorvan.tech"
|
"url": "https://kodorvan.tech",
|
||||||
"contactPoint": [
|
"contactPoint": [
|
||||||
{ "@type": "ContactPoint",
|
{ "@type": "ContactPoint",
|
||||||
"telephone": "+7-901-592-4211",
|
"telephone": "+7-901-592-4211",
|
||||||
"contactType": "Бесплатная консультация",
|
"contactType": "Бесплатная консультация",
|
||||||
"contactOption": "TollFree",
|
"contactOption": "TollFree",
|
||||||
"areaServed": "RU"
|
"areaServed": "RU"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
||||||
@@ -88,16 +100,18 @@
|
|||||||
{% for element in css %}
|
{% for element in css %}
|
||||||
<link type="text/css" rel="stylesheet" {% if element.href %} href="{{ element.href }}" {% endif %} />
|
<link type="text/css" rel="stylesheet" {% if element.href %} href="{{ element.href }}" {% endif %} />
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
<link type="text/css" rel="stylesheet" href="/themes/default/css/fonts.css" />
|
<link type="text/css" rel="stylesheet" href="/themes/default/css/colorscheme.css" />
|
||||||
<link type="text/css" rel="stylesheet" href="/themes/default/css/system.css" />
|
<link type="text/css" rel="stylesheet" href="/themes/default/css/system.css" />
|
||||||
<link type="text/css" rel="stylesheet" href="/themes/default/css/header.css" />
|
<link type="text/css" rel="stylesheet" href="/themes/default/css/header.css" />
|
||||||
|
<link type="text/css" rel="stylesheet" href="/themes/default/css/interface/logotype.css" />
|
||||||
<link type="text/css" rel="stylesheet" href="/themes/default/css/main.css" />
|
<link type="text/css" rel="stylesheet" href="/themes/default/css/main.css" />
|
||||||
<link type="text/css" rel="stylesheet" href="/themes/default/css/aside.css" />
|
<link type="text/css" rel="stylesheet" href="/themes/default/css/aside.css" />
|
||||||
|
<link type="text/css" rel="stylesheet" href="/themes/default/css/interface/sim.css" />
|
||||||
|
<link type="text/css" rel="stylesheet" href="/themes/default/css/interface/media.css" />
|
||||||
|
<link type="text/css" rel="stylesheet" href="/themes/default/css/fonts.css" />
|
||||||
<link type="text/css" rel="stylesheet" href="/themes/default/css/footer.css" />
|
<link type="text/css" rel="stylesheet" href="/themes/default/css/footer.css" />
|
||||||
<style id="theme" />
|
|
||||||
@import url('/themes/default/css/colorscheme.css');
|
<style id="localization" />
|
||||||
</style>
|
|
||||||
<style if="localization" />
|
|
||||||
:root {
|
:root {
|
||||||
--days: "{{ language.name == 'ru' or true ? 'дн' : 'd' }}";
|
--days: "{{ language.name == 'ru' or true ? 'дн' : 'd' }}";
|
||||||
--hours: "{{ language.name == 'ru' or true ? 'ч' : 'h' }}";
|
--hours: "{{ language.name == 'ru' or true ? 'ч' : 'h' }}";
|
||||||
|
|||||||
@@ -0,0 +1,10 @@
|
|||||||
|
<h1 id="logotype" class="unselectable">
|
||||||
|
<span class="slogan">ВСЕХ ШАБЛОНОВ</span>
|
||||||
|
<a
|
||||||
|
href="/"
|
||||||
|
class="kodorvan"
|
||||||
|
title="Перейти на главную страницу"
|
||||||
|
rel="noopener"
|
||||||
|
ondragstart="return false"
|
||||||
|
>КОДОРВАНЬ</a>
|
||||||
|
</h1>
|
||||||
@@ -0,0 +1,22 @@
|
|||||||
|
<div class="social media unselectable">
|
||||||
|
<a href="https://max.ru/id271103176488_biz" title="Канал Кодорвань в МАКС">
|
||||||
|
<img
|
||||||
|
src="/themes/{{ theme }}/images/icons/max.svg"
|
||||||
|
width="50"
|
||||||
|
height="50"
|
||||||
|
alt="МАКС"
|
||||||
|
aria-label="МАКС"
|
||||||
|
ondragstart="return false"
|
||||||
|
/>
|
||||||
|
</a>
|
||||||
|
<a href="https://t.me/kodorvan" title="Канал Кодорвань в Телеграм">
|
||||||
|
<img
|
||||||
|
src="/themes/{{ theme }}/images/icons/telegram.svg"
|
||||||
|
width="50"
|
||||||
|
height="50"
|
||||||
|
alt="Телеграм"
|
||||||
|
aria-label="Телеграм"
|
||||||
|
ondragstart="return false"
|
||||||
|
/>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
29
kodorvan/site/system/views/themes/default/interface/sim.html
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
{% if company.contacts.request.sim is not empty %}
|
||||||
|
<div class="sim">
|
||||||
|
<a
|
||||||
|
class="number"
|
||||||
|
href="tel:+{{ company.contacts.request.sim.full }}"
|
||||||
|
rel="external noreferrer noopener nofollow"
|
||||||
|
title="SIM-номер оператора Кодорвань"
|
||||||
|
aria-label="SIM-номер оператора Кодорвань"
|
||||||
|
>
|
||||||
|
<span class="country">{{ company.contacts.request.sim.country }}</span>
|
||||||
|
<span class="operator">{{ company.contacts.request.sim.operator }}</span>
|
||||||
|
<span>{{ company.contacts.request.sim.number[0] }}</span>
|
||||||
|
<span>{{ company.contacts.request.sim.number[1] ~ company.contacts.request.sim.number[2] }}</span>
|
||||||
|
</a>
|
||||||
|
<button
|
||||||
|
class="copy inline"
|
||||||
|
onclick="navigator.clipboard.writeText('{{ company.contacts.request.sim.full }}')"
|
||||||
|
title="Скопировать SIM-номер"
|
||||||
|
aria-label="Скопировать SIM-номер"
|
||||||
|
>
|
||||||
|
<img
|
||||||
|
class="icon"
|
||||||
|
src="/themes/{{ theme }}/images/icons/white/copy.svg"
|
||||||
|
alt="copy kodorvan"
|
||||||
|
ondragstart="return false"
|
||||||
|
/>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
{% endif %}
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
{% block js %}
|
{% block js %}
|
||||||
<script src="/js/modules/damper.mjs" type="module"></script>
|
<link rel="modulepreload" href="/js/modules/damper.mjs" ></script>
|
||||||
<script src="/js/core.js"></script>
|
<script src="/js/core.js"></script>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|||||||
@@ -1,135 +0,0 @@
|
|||||||
{% extends "/themes/default/index.html" %}
|
|
||||||
|
|
||||||
{% block css %}
|
|
||||||
{{ parent() }}
|
|
||||||
<link type="text/css" rel="stylesheet" href="/css/icons/loading_spinner.css" />
|
|
||||||
<link type="text/css" rel="stylesheet" href="/themes/default/css/pages/offer.css" />
|
|
||||||
<link type="text/css" rel="stylesheet" href="/themes/default/css/elements/cookies.css" />
|
|
||||||
{% endblock %}
|
|
||||||
|
|
||||||
{% block before %}
|
|
||||||
{% endblock %}
|
|
||||||
|
|
||||||
{% block main %}
|
|
||||||
<h1 id="title" class="unselectable">
|
|
||||||
<span class="slogan">ВСЕХ ШАБЛОНОВ</span>
|
|
||||||
<a href="/" class="kodorvan">КОДОРВАНЬ</a>
|
|
||||||
</h1>
|
|
||||||
|
|
||||||
<article id="offer" aria-label="Публичная оферта">
|
|
||||||
<h1>Согласие на обработку электронных пользовательских данных</h1>
|
|
||||||
|
|
||||||
<div class="text">
|
|
||||||
<p>Я даю согласие на обработку моих электронных пользовательских данных АО «ПФ «СКБ Контур» (ИНН
|
|
||||||
6663003127) и его дочерним обществам (далее вместе — СКБ Контур, группа компаний),
|
|
||||||
в соответствии с разделом 6 <a class="external-link" href="https://kontur.ru/about/policy"
|
|
||||||
rel="nofollow noopener">Политики обработки персональных данных</a> (далее — Политика),
|
|
||||||
в следующих целях:</p>
|
|
||||||
|
|
||||||
<ul>
|
|
||||||
<li>обеспечение корректной работы сайтов и программных продуктов СКБ Контур, персонализация, сохранение
|
|
||||||
настроек пользователя, повышение удобства работы;</li>
|
|
||||||
<li>сбор, обработка аналитических и статистических данных по тематике деятельности СКБ Контур,
|
|
||||||
использования информационных ресурсов, программных продуктов, товаров, работ и услуг СКБ Контур
|
|
||||||
для разработки новых программных продуктов, расширения спектра оказываемых услуг, контроля качества,
|
|
||||||
противодействия незаконным или несанкционированным действиям, мошенничеству при использовании
|
|
||||||
программных продуктов, товаров, работ и услуг СКБ Контур, обеспечение информационной безопасности.
|
|
||||||
</li>
|
|
||||||
</ul>
|
|
||||||
|
|
||||||
<p>Перечень электронных пользовательских данных, которые могут обрабатываться в соответствии с указанными
|
|
||||||
целями обработки:</p>
|
|
||||||
|
|
||||||
<ul>
|
|
||||||
<li>идентификаторы пользователя;</li>
|
|
||||||
<li>сетевые адреса;</li>
|
|
||||||
<li>файлы cookies;</li>
|
|
||||||
<li>идентификаторы устройств;</li>
|
|
||||||
<li>размеры и разрешение экрана;</li>
|
|
||||||
<li>сведения об аппаратном и программном обеспечении, например, браузерах, операционной системе,
|
|
||||||
установленных приложениях;</li>
|
|
||||||
<li>геолокация;</li>
|
|
||||||
<li>языковые настройки;</li>
|
|
||||||
<li>часовой пояс;</li>
|
|
||||||
<li>время и статистика использования приложений и информационных ресурсов СКБ Контур;</li>
|
|
||||||
<li>действия в сервисах СКБ Контур, источники переходов на веб-страницы, отправленные поисковые
|
|
||||||
и иные запросы, созданный пользователем контент.</li>
|
|
||||||
</ul>
|
|
||||||
|
|
||||||
<p>Кроме обработки данных cookies, установленных самими сайтами СКБ Контур, на моем устройстве могут
|
|
||||||
устанавливаться cookies, относящиеся к сайтам сторонних организаций, например, в случаях, когда
|
|
||||||
на сайтах СКБ Контур используются сторонние компоненты и программное обеспечение. Обработка таких
|
|
||||||
cookies регулируется политиками соответствующих сайтов, к которым они относятся, и может изменяться
|
|
||||||
без моего предварительного уведомления. К таким случаям может относиться размещение на сайтах:</p>
|
|
||||||
|
|
||||||
<ul>
|
|
||||||
<li><span>счетчиков посещений, аналитических и статистических сервисов для сбора статистики посещаемости
|
|
||||||
общедоступных страниц сайтов (Яндекс.Метрика, Яндекс.Аудитории, VK.com, Mail.ru);</span></li>
|
|
||||||
<li><span>виджетов вспомогательных сервисов для сбора обратной связи, организации чатов и иных видов
|
|
||||||
коммуникаций с пользователями (Carrot Quest, Callibri);</span></li>
|
|
||||||
<li><span>систем контекстной рекламы, баннерных и иных маркетинговых сетей (VK Ads);</span></li>
|
|
||||||
<li><span>кнопок авторизации на сайтах с помощью учетных записей в социальных сетях (VK ID, Яндекс
|
|
||||||
ID, Alfa ID);</span></li>
|
|
||||||
<li><span>иных сторонних компонент, используемых СКБ Контур на своих сайтах.</span></li>
|
|
||||||
</ul>
|
|
||||||
|
|
||||||
<p>Действия, на которые дается согласие: сбор, запись, систематизация, накопление, хранение, уточнение
|
|
||||||
(обновление, изменение), извлечение, использование, передача (предоставление, доступ, без осуществления
|
|
||||||
трансграничной передачи), обезличивание, блокирование, удаление, уничтожение, осуществляемые с использованием
|
|
||||||
средств автоматизации.</p>
|
|
||||||
|
|
||||||
<p>В случае если я не согласен с обработкой cookies, я принимаю на себя риск того,
|
|
||||||
что в таком случае функции и возможности сайта могут не быть доступны в полном объеме,
|
|
||||||
и могу выбрать один из следующих вариантов:</p>
|
|
||||||
|
|
||||||
<ul>
|
|
||||||
<li>произвести самостоятельную настройку своего браузера в соответствии с документацией
|
|
||||||
или справкой к нему таким образом, чтобы он на постоянной основе не разрешал принимать
|
|
||||||
и отправлять данные cookies для любых сайтов либо для конкретного сайта СКБ Контур
|
|
||||||
или сайта стороннего компонента;</li>
|
|
||||||
<li>переключиться в специальный режим «инкогнито» браузера для использования сайтом cookies
|
|
||||||
до закрытия окна браузера или до переключения обратно в обычный режим;</li>
|
|
||||||
<li>покинуть сайт во избежание дальнейшей обработки cookies.</li>
|
|
||||||
</ul>
|
|
||||||
|
|
||||||
<p>Я понимаю, что могу самостоятельно через встроенные в браузеры средства работы с данными
|
|
||||||
cookies управлять сохраненными данными, в том числе, удалять или просматривать сведения
|
|
||||||
об установленных сайтами cookies, включая:</p>
|
|
||||||
|
|
||||||
<ul>
|
|
||||||
<li>адреса сайтов и пути на них, куда будут отправляться cookies;</li>
|
|
||||||
<li>названия и значения параметров, хранящихся в cookies;</li>
|
|
||||||
<li>сроки действия cookies.</li>
|
|
||||||
</ul>
|
|
||||||
|
|
||||||
<p>Срок обработки электронных пользовательских данных — до наступления условий:</p>
|
|
||||||
|
|
||||||
<ul>
|
|
||||||
<li>достижение целей обработки персональных данных или максимальных сроков хранения;</li>
|
|
||||||
<li>утрата необходимости в достижении целей обработки персональных данных;</li>
|
|
||||||
<li>предоставление субъектом персональных данных или его законным представителем подтверждения того,
|
|
||||||
что персональные данные являются незаконно полученными или не являются необходимыми
|
|
||||||
для заявленной цели обработки;</li>
|
|
||||||
<li>отзыв согласия на обработку персональных данных, если сохранение персональных данных более
|
|
||||||
не требуется для целей обработки персональных данных;</li>
|
|
||||||
<li>законное требование о прекращении обработки персональных данных;</li>
|
|
||||||
<li>ликвидация (реорганизация) отдельно взятого общества, входящего в СКБ Контур, если обработка
|
|
||||||
осуществлялась исключительно в интересах данного общества и отсутствует какой-либо правопреемник
|
|
||||||
общества в СКБ Контур.</li>
|
|
||||||
</ul>
|
|
||||||
|
|
||||||
<p>Я уведомлен, что при необходимости я могу ознакомиться с актуальной версией Политики обработки
|
|
||||||
персональных данных СКБ Контур по адресу <a class="external-link"
|
|
||||||
href="https://kontur.ru/about/policy" rel="nofollow noopener">https://kontur.ru/about/policy</a>.</p>
|
|
||||||
</div>
|
|
||||||
</article>
|
|
||||||
{% endblock %}
|
|
||||||
|
|
||||||
{% block after %}
|
|
||||||
<div class="vignette"></div>
|
|
||||||
<div class="dots"></div>
|
|
||||||
{% endblock %}
|
|
||||||
|
|
||||||
{% block js %}
|
|
||||||
{{ parent() }}
|
|
||||||
{% endblock %}
|
|
||||||
31
kodorvan/site/system/views/themes/default/pages/article.html
Executable file
@@ -0,0 +1,31 @@
|
|||||||
|
{% extends "/themes/default/index.html" %}
|
||||||
|
|
||||||
|
{% block css %}
|
||||||
|
{{ parent() }}
|
||||||
|
|
||||||
|
<link type="text/css" rel="stylesheet" href="/css/icons/loading_spinner.css" />
|
||||||
|
<link type="text/css" rel="stylesheet" href="/themes/default/css/pages/offer.css" />
|
||||||
|
<link type="text/css" rel="stylesheet" href="/themes/default/css/elements/cookies.css" />
|
||||||
|
{% endblock %}
|
||||||
|
|
||||||
|
{% block before %}
|
||||||
|
{% endblock %}
|
||||||
|
|
||||||
|
{% block main %}
|
||||||
|
{% include '/themes/default/interface/logotype.html %}
|
||||||
|
|
||||||
|
<article id="{{ article.identifier }}" aria-label="{{ article.title }}">
|
||||||
|
<h1>{{ article.title }}</h1>
|
||||||
|
|
||||||
|
{{ article.html|raw }}
|
||||||
|
</article>
|
||||||
|
{% endblock %}
|
||||||
|
|
||||||
|
{% block after %}
|
||||||
|
<div class="vignette"></div>
|
||||||
|
<div class="dots"></div>
|
||||||
|
{% endblock %}
|
||||||
|
|
||||||
|
{% block js %}
|
||||||
|
{{ parent() }}
|
||||||
|
{% endblock %}
|
||||||
@@ -2,6 +2,7 @@
|
|||||||
|
|
||||||
{% block css %}
|
{% block css %}
|
||||||
{{ parent() }}
|
{{ parent() }}
|
||||||
|
|
||||||
<link type="text/css" rel="stylesheet" href="/css/icons/loading_spinner.css" />
|
<link type="text/css" rel="stylesheet" href="/css/icons/loading_spinner.css" />
|
||||||
<!-- <link type="text/css" rel="stylesheet" href="/css/icons/code_slash.css" />
|
<!-- <link type="text/css" rel="stylesheet" href="/css/icons/code_slash.css" />
|
||||||
<link type="text/css" rel="stylesheet" href="/css/icons/coffe.css" />
|
<link type="text/css" rel="stylesheet" href="/css/icons/coffe.css" />
|
||||||
@@ -22,9 +23,9 @@
|
|||||||
<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 smartphone %}
|
{% if smartphone %}
|
||||||
<link rel="preload" as="image" href="/themes/default/images/interface/labubumba_2_mobile.svg" />
|
<link rel="preload expect" as="image" href="/themes/default/images/interface/labubumba_2_mobile.svg" />
|
||||||
{% else %}
|
{% else %}
|
||||||
<link rel="preload" as="image" href="/themes/default/images/interface/labubumba_2.svg" />
|
<link rel="preload expect" 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" />
|
||||||
@@ -36,10 +37,7 @@
|
|||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
||||||
{% block main %}
|
{% block main %}
|
||||||
<h1 id="title" class="unselectable">
|
{% include '/themes/default/interface/logotype.html' %}
|
||||||
<span class="slogan">ВСЕХ ШАБЛОНОВ</span>
|
|
||||||
<a href="/" class="kodorvan">КОДОРВАНЬ</a>
|
|
||||||
</h1>
|
|
||||||
|
|
||||||
{% include '/themes/default/elements/project.html' %}
|
{% include '/themes/default/elements/project.html' %}
|
||||||
|
|
||||||
@@ -82,8 +80,8 @@
|
|||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
<link rel="modulepreload" href="/js/modules/hotline.mjs" ></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/pages/main.js" type="module" defer></script>
|
<script src="/js/pages/main.js" type="module" defer></script>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
131
kodorvan/site/system/views/themes/default/pages/offer.html
Executable file
@@ -0,0 +1,131 @@
|
|||||||
|
{% extends "/themes/default/index.html" %}
|
||||||
|
|
||||||
|
{% block css %}
|
||||||
|
{{ parent() }}
|
||||||
|
|
||||||
|
<link type="text/css" rel="stylesheet" href="/css/icons/loading_spinner.css" />
|
||||||
|
<link type="text/css" rel="stylesheet" href="/themes/default/css/pages/offer.css" />
|
||||||
|
<link type="text/css" rel="stylesheet" href="/themes/default/css/elements/cookies.css" />
|
||||||
|
{% endblock %}
|
||||||
|
|
||||||
|
{% block before %}
|
||||||
|
{% endblock %}
|
||||||
|
|
||||||
|
{% block main %}
|
||||||
|
{% include '/themes/default/interface/logotype.html %}
|
||||||
|
|
||||||
|
|
||||||
|
<article id="offer" aria-label="Публичная оферта">
|
||||||
|
<h1>Согласие на обработку электронных пользовательских данных</h1>
|
||||||
|
|
||||||
|
<div class="text">
|
||||||
|
<p>Я даю согласие на обработку моих электронных пользовательских данных «{{ company.name.full ?? company.name.short }}» (ИНН
|
||||||
|
{{ company.tax }}) и его дочерним обществам (далее вместе — {{ company.name.short }}, группа компаний),
|
||||||
|
в соответствии с разделом 6 <a href="/policy" rel="nofollow noopener">Политики обработки персональных данных</a> (далее — Политика),
|
||||||
|
в следующих целях:</p>
|
||||||
|
<ul>
|
||||||
|
<li>обеспечение корректной работы сайтов и программных продуктов {{ company.name.short }}, персонализация, сохранение
|
||||||
|
настроек пользователя, повышение удобства работы;</li>
|
||||||
|
<li>сбор, обработка аналитических и статистических данных по тематике деятельности {{ company.name.short }},
|
||||||
|
использования информационных ресурсов, программных продуктов, товаров, работ и услуг {{ company.name.short }}
|
||||||
|
для разработки новых программных продуктов, расширения спектра оказываемых услуг, контроля качества,
|
||||||
|
противодействия незаконным или несанкционированным действиям, мошенничеству при использовании
|
||||||
|
программных продуктов, товаров, работ и услуг {{ company.name.short }}, обеспечение информационной безопасности.
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>Перечень электронных пользовательских данных, которые могут обрабатываться в соответствии с указанными
|
||||||
|
целями обработки:</p>
|
||||||
|
|
||||||
|
<ul>
|
||||||
|
<li>идентификаторы пользователя;</li>
|
||||||
|
<li>сетевые адреса;</li>
|
||||||
|
<li>файлы cookies;</li>
|
||||||
|
<li>идентификаторы устройств;</li>
|
||||||
|
<li>размеры и разрешение экрана;</li>
|
||||||
|
<li>сведения об аппаратном и программном обеспечении, например, браузерах, операционной системе,
|
||||||
|
установленных приложениях;</li>
|
||||||
|
<li>геолокация;</li>
|
||||||
|
<li>языковые настройки;</li>
|
||||||
|
<li>часовой пояс;</li>
|
||||||
|
<li>время и статистика использования приложений и информационных ресурсов {{ company.name.short }};</li>
|
||||||
|
<li>действия в сервисах {{ company.name.short }}, источники переходов на веб-страницы, отправленные поисковые
|
||||||
|
и иные запросы, созданный пользователем контент.</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>Кроме обработки данных cookies, установленных самими сайтами {{ company.name.short }}, на моем устройстве могут
|
||||||
|
устанавливаться cookies, относящиеся к сайтам сторонних организаций, например, в случаях, когда
|
||||||
|
на сайтах {{ company.name.short }} используются сторонние компоненты и программное обеспечение. Обработка таких
|
||||||
|
cookies регулируется политиками соответствующих сайтов, к которым они относятся, и может изменяться
|
||||||
|
без моего предварительного уведомления. К таким случаям может относиться размещение на сайтах:</p>
|
||||||
|
|
||||||
|
<ul>
|
||||||
|
<li><span>счетчиков посещений, аналитических и статистических сервисов для сбора статистики посещаемости
|
||||||
|
общедоступных страниц сайтов (Яндекс.Метрика, Яндекс.Аудитории, VK.com, Mail.ru);</span></li>
|
||||||
|
<li><span>виджетов вспомогательных сервисов для сбора обратной связи, организации чатов и иных видов
|
||||||
|
коммуникаций с пользователями (Carrot Quest, Callibri);</span></li>
|
||||||
|
<li><span>систем контекстной рекламы, баннерных и иных маркетинговых сетей (VK Ads);</span></li>
|
||||||
|
<li><span>кнопок авторизации на сайтах с помощью учетных записей в социальных сетях (VK ID, Яндекс
|
||||||
|
ID, Alfa ID);</span></li>
|
||||||
|
<li><span>иных сторонних компонент, используемых {{ company.name.short }} на своих сайтах.</span></li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>Действия, на которые дается согласие: сбор, запись, систематизация, накопление, хранение, уточнение
|
||||||
|
(обновление, изменение), извлечение, использование, передача (предоставление, доступ, без осуществления
|
||||||
|
трансграничной передачи), обезличивание, блокирование, удаление, уничтожение, осуществляемые с использованием
|
||||||
|
средств автоматизации.</p>
|
||||||
|
|
||||||
|
<p>В случае если я не согласен с обработкой cookies, я принимаю на себя риск того,
|
||||||
|
что в таком случае функции и возможности сайта могут не быть доступны в полном объеме,
|
||||||
|
и могу выбрать один из следующих вариантов:</p>
|
||||||
|
|
||||||
|
<ul>
|
||||||
|
<li>произвести самостоятельную настройку своего браузера в соответствии с документацией
|
||||||
|
или справкой к нему таким образом, чтобы он на постоянной основе не разрешал принимать
|
||||||
|
и отправлять данные cookies для любых сайтов либо для конкретного сайта {{ company.name.short }}
|
||||||
|
или сайта стороннего компонента;</li>
|
||||||
|
<li>переключиться в специальный режим «инкогнито» браузера для использования сайтом cookies
|
||||||
|
до закрытия окна браузера или до переключения обратно в обычный режим;</li>
|
||||||
|
<li>покинуть сайт во избежание дальнейшей обработки cookies.</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>Я понимаю, что могу самостоятельно через встроенные в браузеры средства работы с данными
|
||||||
|
cookies управлять сохраненными данными, в том числе, удалять или просматривать сведения
|
||||||
|
об установленных сайтами cookies, включая:</p>
|
||||||
|
|
||||||
|
<ul>
|
||||||
|
<li>адреса сайтов и пути на них, куда будут отправляться cookies;</li>
|
||||||
|
<li>названия и значения параметров, хранящихся в cookies;</li>
|
||||||
|
<li>сроки действия cookies.</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>Срок обработки электронных пользовательских данных — до наступления условий:</p>
|
||||||
|
|
||||||
|
<ul>
|
||||||
|
<li>достижение целей обработки персональных данных или максимальных сроков хранения;</li>
|
||||||
|
<li>утрата необходимости в достижении целей обработки персональных данных;</li>
|
||||||
|
<li>предоставление субъектом персональных данных или его законным представителем подтверждения того,
|
||||||
|
что персональные данные являются незаконно полученными или не являются необходимыми
|
||||||
|
для заявленной цели обработки;</li>
|
||||||
|
<li>отзыв согласия на обработку персональных данных, если сохранение персональных данных более
|
||||||
|
не требуется для целей обработки персональных данных;</li>
|
||||||
|
<li>законное требование о прекращении обработки персональных данных;</li>
|
||||||
|
<li>ликвидация (реорганизация) отдельно взятого общества, входящего в {{ company.name.short }}, если обработка
|
||||||
|
осуществлялась исключительно в интересах данного общества и отсутствует какой-либо правопреемник
|
||||||
|
общества в {{ company.name.short }}.</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>Я уведомлен, что при необходимости я могу ознакомиться с актуальной версией Политики обработки
|
||||||
|
персональных данных {{ company.name.short }} по адресу <a href="/offer" rel="nofollow noopener">https://{{ domain }}/policy</a>.</p>
|
||||||
|
</div>
|
||||||
|
</article>
|
||||||
|
{% endblock %}
|
||||||
|
|
||||||
|
{% block after %}
|
||||||
|
<div class="vignette"></div>
|
||||||
|
<div class="dots"></div>
|
||||||
|
{% endblock %}
|
||||||
|
|
||||||
|
{% block js %}
|
||||||
|
{{ parent() }}
|
||||||
|
{% endblock %}
|
||||||