generated from mirzaev/pot-php
Compare commits
6 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| e6c0c57b1f | |||
| 60884ab2ed | |||
| 16b0361268 | |||
| 5a7edafee2 | |||
| c631428699 | |||
| d26b0ca9ea |
10
.gitmodules
vendored
Normal file → Executable file
10
.gitmodules
vendored
Normal file → Executable file
@@ -2,11 +2,15 @@
|
|||||||
path = hotline.mjs
|
path = hotline.mjs
|
||||||
url = https://git.svoboda.works/mirzaev/hotline.mjs
|
url = https://git.svoboda.works/mirzaev/hotline.mjs
|
||||||
branch = stable
|
branch = stable
|
||||||
[submodule "womb3-simplex.mjs"]
|
[submodule "damper.mjs"]
|
||||||
path = womb3-simplex.mjs
|
path = damper.mjs
|
||||||
url = https://git.svoboda.works/mirzaev/womb3-simplex.mjs
|
url = https://git.svoboda.works/mirzaev/damper.mjs.git
|
||||||
branch = stable
|
branch = stable
|
||||||
[submodule "icons"]
|
[submodule "icons"]
|
||||||
path = icons
|
path = icons
|
||||||
url = https://git.svoboda.works/mirzaev/icons
|
url = https://git.svoboda.works/mirzaev/icons
|
||||||
branch = stable
|
branch = stable
|
||||||
|
[submodule "womb3-simplex.mjs"]
|
||||||
|
path = womb3-simplex.mjs
|
||||||
|
url = https://git.svoboda.works/mirzaev/womb3-simplex.mjs
|
||||||
|
branch = stable
|
||||||
|
|||||||
@@ -1,13 +1,13 @@
|
|||||||
{
|
{
|
||||||
"name": "kodorvan/perm",
|
"name": "kodorvan/site",
|
||||||
"description": "Лендинг для Перми от Ксении",
|
"description": "The kodorvan team main site",
|
||||||
"homepage": "https://git.svoboda.works/kodorvan/perm",
|
"homepage": "https://git.svoboda.works/kodorvan/site",
|
||||||
"type": "site",
|
"type": "site",
|
||||||
"keywords": [
|
"keywords": [
|
||||||
"minimal",
|
"minimal",
|
||||||
"baza",
|
"baza",
|
||||||
"landing",
|
"landing",
|
||||||
"perm"
|
"site"
|
||||||
],
|
],
|
||||||
"readme": "README.md",
|
"readme": "README.md",
|
||||||
"license": "WTFPL",
|
"license": "WTFPL",
|
||||||
@@ -17,25 +17,22 @@
|
|||||||
"email": "arsen@mirzaev.sexy",
|
"email": "arsen@mirzaev.sexy",
|
||||||
"homepage": "https://mirzaev.sexy",
|
"homepage": "https://mirzaev.sexy",
|
||||||
"role": "Programmer"
|
"role": "Programmer"
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Hollspae",
|
|
||||||
"email": "ksena.vilkova79@gmail.om",
|
|
||||||
"role": "Creator-Programmer"
|
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"support": {
|
"support": {
|
||||||
"wiki": "https://git.svoboda.works/kodorvan/perm/wiki",
|
"wiki": "https://git.svoboda.works/kodorvan/site/wiki",
|
||||||
"issues": "https://git.svoboda.works/kodorvan/perm/issues"
|
"issues": "https://git.svoboda.works/kodorvan/site/issues"
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
"php": "^8.4",
|
"php": "^8.5",
|
||||||
|
"ext-blake3": "^0.1",
|
||||||
"mirzaev/minimal": "^3.8",
|
"mirzaev/minimal": "^3.8",
|
||||||
"mirzaev/baza": "^3.4",
|
"mirzaev/baza": "^3.4",
|
||||||
"mirzaev/languages": "^1",
|
"mirzaev/languages": "^1",
|
||||||
"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"
|
||||||
},
|
},
|
||||||
"suggest": {
|
"suggest": {
|
||||||
"mirzaev/files": "Easy working with files",
|
"mirzaev/files": "Easy working with files",
|
||||||
@@ -44,12 +41,12 @@
|
|||||||
},
|
},
|
||||||
"autoload": {
|
"autoload": {
|
||||||
"psr-4": {
|
"psr-4": {
|
||||||
"kodorvan\\perm\\": "kodorvan/perm/system"
|
"kodorvan\\site\\": "kodorvan/site/system"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"autoload-dev": {
|
"autoload-dev": {
|
||||||
"psr-4": {
|
"psr-4": {
|
||||||
"kodorvan\\perm\\tests\\": "kodorvan/perm/tests"
|
"kodorvan\\site\\tests\\": "kodorvan/site/tests"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"scripts": {
|
"scripts": {
|
||||||
|
|||||||
994
composer.lock
generated
Normal file → Executable file
994
composer.lock
generated
Normal file → Executable file
File diff suppressed because it is too large
Load Diff
1
damper.mjs
Submodule
1
damper.mjs
Submodule
Submodule damper.mjs added at 81d208b964
Submodule hotline.mjs updated: 5e627e14ae...c25963fca8
2
icons
2
icons
Submodule icons updated: d6a92fc4bf...c4dedad538
38
install.sh
38
install.sh
@@ -1,35 +1,43 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
|
git submodule update --init --recursive
|
||||||
|
|
||||||
if [ -d author/project ]; then
|
if [ -d author/project ]; then
|
||||||
mv author/project author/perm
|
mv author/project author/site
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ -d author ]; then
|
if [ -d author ]; then
|
||||||
mv author kodorvan
|
mv author kodorvan
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ -e kodorvan/perm/system/settings/*.sample ]; then
|
for i in kodorvan/site/system/settings/*.sample; do
|
||||||
for i in kodorvan/perm/system/settings/*.sample; do
|
echo $i;
|
||||||
cp "$i" "${i/.sample/}";
|
if [ ! -f "${i/.sample/}" ]; then
|
||||||
done
|
cp -n "$i" "${i/.sample/}";
|
||||||
|
echo ${i/.sample/};
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
if ! [ -d kodorvan/site/system/public/js/modules ]; then
|
||||||
|
mkdir kodorvan/site/system/public/js/modules -p
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if ! [ -d kodorvan/perm/system/public/js/modules ]; then
|
if ! [ -L kodorvan/site/system/public/js/modules/damper.mjs ]; then
|
||||||
mkdir kodorvan/perm/system/public/js/modules -p
|
ln -s ../../../../../../damper.mjs/damper.mjs kodorvan/site/system/public/js/modules/damper.mjs;
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if ! [ -L kodorvan/perm/system/public/js/modules/hotline.mjs ]; then
|
if ! [ -L kodorvan/site/system/public/js/modules/hotline.mjs ]; then
|
||||||
ln -s ../../../../../../hotline.mjs/hotline.mjs kodorvan/perm/system/public/js/modules/hotline.mjs;
|
ln -s ../../../../../../hotline.mjs/hotline.mjs kodorvan/site/system/public/js/modules/hotline.mjs;
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if ! [ -L kodorvan/perm/system/public/js/modules/womb3-simplex.mjs ]; then
|
if ! [ -L kodorvan/site/system/public/js/modules/womb3-simplex.mjs ]; then
|
||||||
ln -s ../../../../../../womb3-simplex.mjs/womb3-simplex.mjs kodorvan/perm/system/public/js/modules/womb3-simplex.mjs;
|
ln -s ../../../../../../womb3-simplex.mjs/womb3-simplex.mjs kodorvan/site/system/public/js/modules/womb3-simplex.mjs;
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if ! [ -L kodorvan/perm/system/public/js/modules/simplex-noise.mjs ]; then
|
if ! [ -L kodorvan/site/system/public/js/modules/simplex-noise.mjs ]; then
|
||||||
ln -s ../../../../../../womb3-simplex.mjs/simplex-noise.mjs kodorvan/perm/system/public/js/modules/simplex-noise.mjs;
|
ln -s ../../../../../../womb3-simplex.mjs/simplex-noise.mjs kodorvan/site/system/public/js/modules/simplex-noise.mjs;
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if ! [ -d kodorvan/perm/system/public/css/icons ]; then
|
if ! [ -L kodorvan/site/system/public/css/icons ]; then
|
||||||
ln -s ../../../../../icons/css kodorvan/perm/system/public/css/icons;
|
ln -s ../../../../../icons/css kodorvan/site/system/public/css/icons;
|
||||||
fi
|
fi
|
||||||
|
|||||||
@@ -1,15 +0,0 @@
|
|||||||
const items = document.querySelectorAll(".accordion button");
|
|
||||||
|
|
||||||
function toggleAccordion() {
|
|
||||||
const itemToggle = this.getAttribute('aria-expanded');
|
|
||||||
|
|
||||||
for (i = 0; i < items.length; i++) {
|
|
||||||
items[i].setAttribute('aria-expanded', 'false');
|
|
||||||
}
|
|
||||||
|
|
||||||
if (itemToggle == 'false') {
|
|
||||||
this.setAttribute('aria-expanded', 'true');
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
items.forEach(item => item.addEventListener('click', toggleAccordion));
|
|
||||||
@@ -1,19 +0,0 @@
|
|||||||
document.addEventListener('DOMContentLoaded', function() {
|
|
||||||
const blocks = document.querySelectorAll('.block');
|
|
||||||
|
|
||||||
blocks.forEach(block => {
|
|
||||||
const question = block.querySelector('.question');
|
|
||||||
const answerCont = block.querySelector('.answercont');
|
|
||||||
|
|
||||||
question.addEventListener('click', function() {
|
|
||||||
// Просто переключаем текущий блок без влияния на другие
|
|
||||||
if (block.classList.contains('active')) {
|
|
||||||
answerCont.style.maxHeight = '0';
|
|
||||||
block.classList.remove('active');
|
|
||||||
} else {
|
|
||||||
answerCont.style.maxHeight = answerCont.scrollHeight + 'px';
|
|
||||||
block.classList.add('active');
|
|
||||||
}
|
|
||||||
});
|
|
||||||
});
|
|
||||||
});
|
|
||||||
@@ -1,49 +0,0 @@
|
|||||||
"use strict";
|
|
||||||
|
|
||||||
import("../modules/hotline.mjs").then((module) => {
|
|
||||||
// Imported the hotline.mjs module
|
|
||||||
|
|
||||||
// Initializing an instance of the hotline.mjs
|
|
||||||
const instance = new module.hotline(document.getElementById("wrap"));
|
|
||||||
|
|
||||||
// Initializing settings of the hotline instance
|
|
||||||
instance.alive = true;
|
|
||||||
instance.wheel = false;
|
|
||||||
instance.delta = 3;
|
|
||||||
instance.step = -0.5;
|
|
||||||
|
|
||||||
// Starting the hotline instance
|
|
||||||
instance.start();
|
|
||||||
});
|
|
||||||
|
|
||||||
import("../modules/womb3-simplex.mjs").then((module) => {
|
|
||||||
// Initializing the instance
|
|
||||||
const womb = new module.womb(document.getElementById("introdution_animation"));
|
|
||||||
womb.block = {
|
|
||||||
width: 40,
|
|
||||||
height: 40,
|
|
||||||
};
|
|
||||||
womb.init();
|
|
||||||
womb.generate(undefined, '#000');
|
|
||||||
|
|
||||||
// Initializing the process registers
|
|
||||||
let offset = 0;
|
|
||||||
let speed = 0.01;
|
|
||||||
|
|
||||||
// Starting the process
|
|
||||||
setInterval(function () {
|
|
||||||
womb.dump();
|
|
||||||
womb.generate((offset += speed), '#000');
|
|
||||||
}, 60);
|
|
||||||
|
|
||||||
// Initializing the resizing event processor
|
|
||||||
window.addEventListener(
|
|
||||||
"resize",
|
|
||||||
function (e) {
|
|
||||||
womb.init();
|
|
||||||
womb.dump();
|
|
||||||
womb.generate((offset += speed), '#000');
|
|
||||||
},
|
|
||||||
true
|
|
||||||
);
|
|
||||||
});
|
|
||||||
@@ -1,67 +0,0 @@
|
|||||||
@charset "UTF-8";
|
|
||||||
|
|
||||||
@media (prefers-color-scheme: default) {
|
|
||||||
:root {
|
|
||||||
--text-color: #fff;
|
|
||||||
--text-color-inverted: #000;
|
|
||||||
--button-background-color-inverted: #fff;
|
|
||||||
--button-background-color: #000;
|
|
||||||
--section-background-color-inverted: #fff;
|
|
||||||
--section-background-color: #000;
|
|
||||||
--background-color: #000;
|
|
||||||
--background-color-inverted: #fff;
|
|
||||||
|
|
||||||
--interface-top-background-color: var(--background-color, #000);
|
|
||||||
--interface-background-color: var(--background-color, #000);
|
|
||||||
--interface-bottom-background-color: var(--background-color, #000);
|
|
||||||
|
|
||||||
--red: red;
|
|
||||||
--white: #fff;
|
|
||||||
--blue: #0ea5e9;
|
|
||||||
|
|
||||||
--paper: var(--white);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@media (prefers-color-scheme: dark) {
|
|
||||||
:root {
|
|
||||||
--text-color: #fff;
|
|
||||||
--text-color-inverted: #000;
|
|
||||||
--button-background-color-inverted: #fff;
|
|
||||||
--button-background-color: #000;
|
|
||||||
--section-background-color-inverted: #fff;
|
|
||||||
--section-background-color: #fff;
|
|
||||||
--background-color: #000;
|
|
||||||
--background-color-inverted: #fff;
|
|
||||||
|
|
||||||
--interface-top-background-color: var(--background-color, #000);
|
|
||||||
--interface-background-color: var(--background-color, #000);
|
|
||||||
--interface-bottom-background-color: var(--background-color, #000);
|
|
||||||
|
|
||||||
--red: red;
|
|
||||||
--white: #fff;
|
|
||||||
|
|
||||||
--paper: var(--white);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@media (prefers-color-scheme: light) {
|
|
||||||
:root {
|
|
||||||
--text-color: #fff;
|
|
||||||
--text-color-inverted: #000;
|
|
||||||
--button-background-color-inverted: #fff;
|
|
||||||
--button-background-color: #000;
|
|
||||||
--section-background-color-inverted: #fff;
|
|
||||||
--section-background-color: #000;
|
|
||||||
--background-color: #000;
|
|
||||||
--background-color-inverted: #fff;
|
|
||||||
|
|
||||||
--interface-top-background-color: var(--background-color, #000);
|
|
||||||
--interface-background-color: var(--background-color, #000);
|
|
||||||
--interface-bottom-background-color: var(--background-color, #000);
|
|
||||||
|
|
||||||
--red: red;
|
|
||||||
--white: #fff;
|
|
||||||
|
|
||||||
--paper: var(--white);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,118 +0,0 @@
|
|||||||
@charset "UTF-8";
|
|
||||||
|
|
||||||
.advantages {
|
|
||||||
margin: 0 auto;
|
|
||||||
|
|
||||||
width: 48rem;
|
|
||||||
|
|
||||||
> h2.title {
|
|
||||||
text-align: center;
|
|
||||||
font-size: 2.4rem;
|
|
||||||
font-family: "Bahnschrift";
|
|
||||||
margin: 0.1em 0 0.2em 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
.accordion {
|
|
||||||
.accordion-item {
|
|
||||||
border-bottom: 1px solid #4d5974;
|
|
||||||
|
|
||||||
button[aria-expanded="true"] {
|
|
||||||
border-bottom: 1px solid #0ea5e9;
|
|
||||||
}
|
|
||||||
|
|
||||||
&:last-child {
|
|
||||||
border: none;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
button {
|
|
||||||
position: relative;
|
|
||||||
display: block;
|
|
||||||
text-align: left;
|
|
||||||
width: 100%;
|
|
||||||
padding: 1em 0;
|
|
||||||
color: #7288a2;
|
|
||||||
font-size: 1.2rem;
|
|
||||||
font-family: "Bahnschrift";
|
|
||||||
font-weight: 400;
|
|
||||||
border: none;
|
|
||||||
background: none;
|
|
||||||
outline: none;
|
|
||||||
|
|
||||||
&:hover,
|
|
||||||
&:focus {
|
|
||||||
cursor: pointer;
|
|
||||||
color: #0ea5e9;
|
|
||||||
|
|
||||||
&::after {
|
|
||||||
cursor: pointer;
|
|
||||||
color: #0ea5e9;
|
|
||||||
border: 1px solid #0ea5e9;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
.title {
|
|
||||||
padding: 1em 1.5em 1em 0;
|
|
||||||
}
|
|
||||||
.icon {
|
|
||||||
display: inline-block;
|
|
||||||
position: absolute;
|
|
||||||
top: 18px;
|
|
||||||
right: 0;
|
|
||||||
width: 22px;
|
|
||||||
height: 22px;
|
|
||||||
border: 1px solid;
|
|
||||||
border-radius: 22px;
|
|
||||||
|
|
||||||
&::before {
|
|
||||||
display: block;
|
|
||||||
position: absolute;
|
|
||||||
content: "";
|
|
||||||
top: 11px;
|
|
||||||
left: 6px;
|
|
||||||
width: 10px;
|
|
||||||
height: 2px;
|
|
||||||
background: currentColor;
|
|
||||||
}
|
|
||||||
&::after {
|
|
||||||
display: block;
|
|
||||||
position: absolute;
|
|
||||||
content: "";
|
|
||||||
top: 7px;
|
|
||||||
left: 10px;
|
|
||||||
width: 2px;
|
|
||||||
height: 10px;
|
|
||||||
background: currentColor;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
button[aria-expanded="true"] {
|
|
||||||
color: #0ea5e9;
|
|
||||||
.icon {
|
|
||||||
&::after {
|
|
||||||
width: 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
+ .accordion-content {
|
|
||||||
opacity: 1;
|
|
||||||
max-height: 9em;
|
|
||||||
transition: all 200ms linear;
|
|
||||||
will-change: opacity, max-height;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
.accordion-content {
|
|
||||||
opacity: 0;
|
|
||||||
max-height: 0;
|
|
||||||
overflow: hidden;
|
|
||||||
transition: opacity 200ms linear, max-height 200ms linear;
|
|
||||||
will-change: opacity, max-height;
|
|
||||||
|
|
||||||
p {
|
|
||||||
align-items: left;
|
|
||||||
font-size: 1.05rem;
|
|
||||||
font-weight: 300;
|
|
||||||
font-family: "Bahnschrift";
|
|
||||||
margin: 2em 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,54 +0,0 @@
|
|||||||
@charset "UTF-8";
|
|
||||||
|
|
||||||
section#company {
|
|
||||||
justify-self: end;
|
|
||||||
width: 160px;
|
|
||||||
padding: 1rem;
|
|
||||||
padding-bottom: unset;
|
|
||||||
display: flex;
|
|
||||||
flex-direction: column;
|
|
||||||
gap: 0.5rem;
|
|
||||||
font-family: "Bahnschrift";
|
|
||||||
|
|
||||||
> h4.name {
|
|
||||||
margin: unset;
|
|
||||||
display: block;
|
|
||||||
text-align: right;
|
|
||||||
font-weight: 600;
|
|
||||||
font-size: 1rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
> p.column {
|
|
||||||
margin: unset;
|
|
||||||
display: inline-flex;
|
|
||||||
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 {
|
|
||||||
&:before {
|
|
||||||
content: var(--company-tax) ":";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
> span.identifier {
|
|
||||||
&:before {
|
|
||||||
content: var(--company-identifier) ":";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,54 +0,0 @@
|
|||||||
@charset "UTF-8";
|
|
||||||
|
|
||||||
section#cookies {
|
|
||||||
--shadow: 4px 4px 10px 0px rgb(0 0 0 / 45%);
|
|
||||||
z-index: 3100;
|
|
||||||
right: var(--fixed-right, 2rem);
|
|
||||||
bottom: var(--fixed-bottom, 2rem);
|
|
||||||
position: fixed;
|
|
||||||
font-family: "Bahnschrift";
|
|
||||||
/* border: 1px solid #a8a8a847; */
|
|
||||||
border: 1px solid #fff;
|
|
||||||
/* border-right: unset;
|
|
||||||
border-bottom: unset; */
|
|
||||||
border-radius: 0.75rem;
|
|
||||||
color: #fff;
|
|
||||||
background-color: #000000b8;
|
|
||||||
background-color: #000000;
|
|
||||||
/* backdrop-filter: blur(3px); */
|
|
||||||
box-shadow: var(--shadow);
|
|
||||||
-webkit-box-shadow: var(--shadow);
|
|
||||||
-moz-box-shadow: var(--shadow);
|
|
||||||
transition: opacity 0.1s ease-out;
|
|
||||||
|
|
||||||
> div {
|
|
||||||
padding: 0.8rem 1.2rem 0.7rem;
|
|
||||||
display: flex;
|
|
||||||
flex-direction: column;
|
|
||||||
justify-content: center;
|
|
||||||
align-items: center;
|
|
||||||
|
|
||||||
> p {
|
|
||||||
margin: unset;
|
|
||||||
font-size: 1rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
> small {
|
|
||||||
font-size: 0.8rem;
|
|
||||||
font-weight: 200;
|
|
||||||
color: #a6a69d;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
> button {
|
|
||||||
top: -0.4rem;
|
|
||||||
right: -2rem;
|
|
||||||
position: absolute;
|
|
||||||
padding: unset;
|
|
||||||
padding-right: 0.1em;
|
|
||||||
cursor: pointer;
|
|
||||||
border: unset;
|
|
||||||
color: #f00;
|
|
||||||
background: unset;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,70 +0,0 @@
|
|||||||
@charset "UTF-8";
|
|
||||||
|
|
||||||
section#cookies {
|
|
||||||
--shadow: 4px 4px 10px 0px rgb(0 0 0 / 45%);
|
|
||||||
z-index: var(--cookies-z-index, 6000);
|
|
||||||
right: var(--cookies-right, 2rem);
|
|
||||||
bottom: var(--cookies-bottom, 2rem);
|
|
||||||
position: fixed;
|
|
||||||
width: var(--cookies-width, 400px);
|
|
||||||
height: var(--cookies-height, 40px);
|
|
||||||
/* padding: 0.8rem 1.2rem 0.7rem; */
|
|
||||||
font-family: "Bahnschrift";
|
|
||||||
color: #fff;
|
|
||||||
transition: opacity 0.1s ease-out;
|
|
||||||
|
|
||||||
:is(> label[for="cookies"]:focus) {
|
|
||||||
opacity: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
+ div.cookies.background {
|
|
||||||
z-index: calc(var(--cookies-z-index, 6000) - 1);
|
|
||||||
right: var(--cookies-right, 2rem);
|
|
||||||
bottom: var(--cookies-bottom, 2rem);
|
|
||||||
position: fixed;
|
|
||||||
width: var(--cookies-width, 400px);
|
|
||||||
height: var(--cookies-height, 40px);
|
|
||||||
border: 1px solid #a8a8a847;
|
|
||||||
border-right: unset;
|
|
||||||
border-bottom: unset;
|
|
||||||
border-radius: 0.75rem;
|
|
||||||
background-color: #33323691;
|
|
||||||
backdrop-filter: blur(3px);
|
|
||||||
mix-blend-mode: screen;
|
|
||||||
box-shadow: var(--shadow);
|
|
||||||
-webkit-box-shadow: var(--shadow);
|
|
||||||
-moz-box-shadow: var(--shadow);
|
|
||||||
}
|
|
||||||
|
|
||||||
> div {
|
|
||||||
width: 100%;
|
|
||||||
height: 100%;
|
|
||||||
display: flex;
|
|
||||||
flex-direction: column;
|
|
||||||
justify-content: center;
|
|
||||||
align-items: center;
|
|
||||||
|
|
||||||
> p {
|
|
||||||
margin: unset;
|
|
||||||
font-size: 1rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
> small {
|
|
||||||
font-size: 0.8rem;
|
|
||||||
font-weight: 200;
|
|
||||||
color: #a6a69d;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
> label {
|
|
||||||
right: -20px;
|
|
||||||
top: -20px;
|
|
||||||
position: absolute;
|
|
||||||
padding: unset;
|
|
||||||
padding-right: 0.1em;
|
|
||||||
cursor: pointer;
|
|
||||||
border: unset;
|
|
||||||
color: #f00;
|
|
||||||
background: unset;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,162 +0,0 @@
|
|||||||
@charset "UTF-8";
|
|
||||||
|
|
||||||
section#introdution {
|
|
||||||
position: relative;
|
|
||||||
width: 100%;
|
|
||||||
height: var(--introdution-height, 350px);
|
|
||||||
overflow: hidden;
|
|
||||||
|
|
||||||
+ section.row {
|
|
||||||
--shadow: 0px -10px 60px 30px rgba(0, 0, 0, 0.6);
|
|
||||||
padding-top: 1rem;
|
|
||||||
box-shadow: var(--shadow);
|
|
||||||
-webkit-box-shadow: var(--shadow);
|
|
||||||
-moz-box-shadow: var(--shadow);
|
|
||||||
}
|
|
||||||
|
|
||||||
> div.information {
|
|
||||||
z-index: 200;
|
|
||||||
position: fixed;
|
|
||||||
width: 30vw;
|
|
||||||
display: flex;
|
|
||||||
flex-direction: column;
|
|
||||||
align-items: center;
|
|
||||||
cursor: default;
|
|
||||||
|
|
||||||
> span#label {
|
|
||||||
margin-top: -2em;
|
|
||||||
padding: 0.4em 0.8em 0.2em 1.2em;
|
|
||||||
display: flex;
|
|
||||||
justify-content: center;
|
|
||||||
align-items: center;
|
|
||||||
gap: 1em;
|
|
||||||
font-size: 1.2rem;
|
|
||||||
font-family: "Bahnschrift";
|
|
||||||
font-weight: 400;
|
|
||||||
border-radius: 1.125rem;
|
|
||||||
color: #aeb629;
|
|
||||||
border: 1px solid #bababa1c;
|
|
||||||
background-color: #6262623b;
|
|
||||||
backdrop-filter: blur(1.3px);
|
|
||||||
|
|
||||||
> i.icon.code {
|
|
||||||
margin-bottom: 3px;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
> h2#title {
|
|
||||||
margin: unset;
|
|
||||||
width: max-content;
|
|
||||||
padding: 0.2em 0.5em 0em;
|
|
||||||
font-family: Bahnschrift;
|
|
||||||
font-size: 2.6rem;
|
|
||||||
font-weight: 400;
|
|
||||||
color: #fff;
|
|
||||||
text-shadow:
|
|
||||||
0px 0px 4px #ffffff,
|
|
||||||
0px 0px 9px #ffffff96;
|
|
||||||
}
|
|
||||||
|
|
||||||
> p#team {
|
|
||||||
margin: unset;
|
|
||||||
width: 100%;
|
|
||||||
/* height: 70px; */
|
|
||||||
box-sizing: border-box;
|
|
||||||
padding: 0.6em 1em;
|
|
||||||
text-align: center;
|
|
||||||
font-size: 1.2rem;
|
|
||||||
font-family: "Bahnschrift";
|
|
||||||
font-weight: 400;
|
|
||||||
border-radius: 0.75rem;
|
|
||||||
background-color: #fff;
|
|
||||||
|
|
||||||
> b {
|
|
||||||
color: #152bcb;
|
|
||||||
}
|
|
||||||
|
|
||||||
> strong {
|
|
||||||
color: #de1111;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
> span {
|
|
||||||
position: absolute;
|
|
||||||
display: flex;
|
|
||||||
padding: 0.4em 0.8rem 0.3em;
|
|
||||||
font-size: 1.2rem;
|
|
||||||
font-family: "Bahnschrift";
|
|
||||||
font-weight: 400;
|
|
||||||
border-radius: 0.75rem;
|
|
||||||
background-color: #fff;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
> div.background {
|
|
||||||
z-index: 100;
|
|
||||||
top: -5%;
|
|
||||||
left: -5%;
|
|
||||||
position: absolute;
|
|
||||||
width: 110%;
|
|
||||||
height: 110%;
|
|
||||||
animation-name: appearance;
|
|
||||||
animation-fill-mode: forwards;
|
|
||||||
animation-duration: 0.2s;
|
|
||||||
animation-timing-function: ease-in;
|
|
||||||
filter: blur(1.8px) contrast(50);
|
|
||||||
|
|
||||||
> div.dots {
|
|
||||||
--dot-bg: black;
|
|
||||||
--dot-color: #00ff00;
|
|
||||||
--dot-size: 4px;
|
|
||||||
--dot-space: 7px;
|
|
||||||
z-index: -50;
|
|
||||||
position: absolute;
|
|
||||||
width: 100%;
|
|
||||||
height: 100%;
|
|
||||||
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);
|
|
||||||
mix-blend-mode: color-burn;
|
|
||||||
filter: contrast(5);
|
|
||||||
}
|
|
||||||
|
|
||||||
> video:only-of-type {
|
|
||||||
z-index: -100;
|
|
||||||
position: absolute;
|
|
||||||
width: 100%;
|
|
||||||
height: 100%;
|
|
||||||
object-fit: cover;
|
|
||||||
object-position: center;
|
|
||||||
scale: 1.1;
|
|
||||||
filter: blur(5px);
|
|
||||||
}
|
|
||||||
|
|
||||||
> canvas#introdution_animation {
|
|
||||||
z-index: -100;
|
|
||||||
position: absolute;
|
|
||||||
width: 100%;
|
|
||||||
scale: 1.2;
|
|
||||||
filter: url(#blob) contrast(var(--contrast, 30));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@keyframes appearance {
|
|
||||||
0% {
|
|
||||||
opacity: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
100% {
|
|
||||||
opacity: 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,27 +0,0 @@
|
|||||||
@charset "UTF-8";
|
|
||||||
|
|
||||||
nav#links {
|
|
||||||
flex-grow: 1;
|
|
||||||
display: inline-flex;
|
|
||||||
justify-content: center;
|
|
||||||
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;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,41 +0,0 @@
|
|||||||
@charset "UTF-8";
|
|
||||||
|
|
||||||
section#office {
|
|
||||||
display: flex;
|
|
||||||
height: 100%;
|
|
||||||
|
|
||||||
> div.map {
|
|
||||||
width: 250px;
|
|
||||||
height: 100%;
|
|
||||||
overflow: hidden;
|
|
||||||
border-radius: 0.75rem;
|
|
||||||
border: 1px solid #fff;
|
|
||||||
background-color: #0c110c;
|
|
||||||
|
|
||||||
> div.loading {
|
|
||||||
width: 100%;
|
|
||||||
height: 100%;
|
|
||||||
display: flex;
|
|
||||||
justify-content: center;
|
|
||||||
align-items: center;
|
|
||||||
filter: brigtless(0.8) blur(1px);
|
|
||||||
|
|
||||||
&:before {
|
|
||||||
margin-top: 50px;
|
|
||||||
position: absolute;
|
|
||||||
content: var(--map-loading, "Loading");
|
|
||||||
width: max-content;
|
|
||||||
text-align: center;
|
|
||||||
font-family: "Geologica";
|
|
||||||
font-style: normal;
|
|
||||||
font-weight: 400;
|
|
||||||
font-size: 0.6rem;
|
|
||||||
color: #533a3a;
|
|
||||||
}
|
|
||||||
|
|
||||||
> i.icon.loading.spinner {
|
|
||||||
color: #fff;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,72 +0,0 @@
|
|||||||
@charset "UTF-8";
|
|
||||||
|
|
||||||
section#projects {
|
|
||||||
padding-top: 2.5rem;
|
|
||||||
padding-bottom: 1rem;
|
|
||||||
/* transform: rotate3d(220, -777, -100, 385deg) scale(1.1); */
|
|
||||||
|
|
||||||
> h2.title {
|
|
||||||
font-size: 2.4rem;
|
|
||||||
font-family: "Bahnschrift";
|
|
||||||
margin: 0.1em 0 0.2em 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
div.hotline {
|
|
||||||
width: 100vw;
|
|
||||||
height: 250px;
|
|
||||||
display: inline-flex;
|
|
||||||
gap: 15px;
|
|
||||||
|
|
||||||
> :is(article, div) {
|
|
||||||
position: relative;
|
|
||||||
min-width: 220px;
|
|
||||||
max-width: 220px;
|
|
||||||
width: 220px;
|
|
||||||
height: 100%;
|
|
||||||
overflow: hidden;
|
|
||||||
border-radius: 0.75rem;
|
|
||||||
|
|
||||||
h4 {
|
|
||||||
position: absolute;
|
|
||||||
z-index: 50;
|
|
||||||
justify-self: center;
|
|
||||||
bottom: 0.4rem;
|
|
||||||
margin: unset;
|
|
||||||
padding: 0.4rem 1rem 0.3rem;
|
|
||||||
font-family: "Bahnschrift";
|
|
||||||
font-size: 1.2rem;
|
|
||||||
font-weight: 900;
|
|
||||||
color: #fff;
|
|
||||||
text-shadow: 2px 2px 3px #000;
|
|
||||||
}
|
|
||||||
|
|
||||||
img.background {
|
|
||||||
position: absolute;
|
|
||||||
top: 0;
|
|
||||||
width: 100%;
|
|
||||||
height: 100%;
|
|
||||||
object-fit: cover;
|
|
||||||
}
|
|
||||||
|
|
||||||
&:is(.pechatalka) {
|
|
||||||
> img.background {
|
|
||||||
filter: blur(1.5px) brightness(0.8);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
&:is(.understyle) {
|
|
||||||
> img.background {
|
|
||||||
object-position: bottom;
|
|
||||||
filter: blur(1px) brightness(0.8);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
&:is(.surikov) {
|
|
||||||
> img.background {
|
|
||||||
object-position: bottom;
|
|
||||||
filter: blur(0.4px) brightness(0.8);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,41 +0,0 @@
|
|||||||
@charset "UTF-8";
|
|
||||||
|
|
||||||
section#shortcut {
|
|
||||||
> div {
|
|
||||||
width: var(--width);
|
|
||||||
display: flex;
|
|
||||||
flex-direction: row;
|
|
||||||
gap: 1rem;
|
|
||||||
|
|
||||||
> div.column {
|
|
||||||
display: flex;
|
|
||||||
flex-direction: column;
|
|
||||||
|
|
||||||
&:is(.statistics) {
|
|
||||||
width: 300px;
|
|
||||||
|
|
||||||
> p {
|
|
||||||
margin: unset;
|
|
||||||
margin-top: 0.8rem;
|
|
||||||
display: flex;
|
|
||||||
gap: 0.4rem;
|
|
||||||
font-family: "Cascadia Code";
|
|
||||||
font-weight: 600;
|
|
||||||
|
|
||||||
&:is(:first-of-type) {
|
|
||||||
margin-top: unset;
|
|
||||||
}
|
|
||||||
|
|
||||||
> span {
|
|
||||||
font-weight: 400;
|
|
||||||
}
|
|
||||||
|
|
||||||
+ small {
|
|
||||||
font-family: "Bahnschrift";
|
|
||||||
font-weight: 100;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,10 +0,0 @@
|
|||||||
@import url('/css/fonts/fira.css');
|
|
||||||
@import url('/css/fonts/hack.css');
|
|
||||||
@import url('/css/fonts/dejavu.css');
|
|
||||||
@import url('/css/fonts/bahnschrift.css');
|
|
||||||
|
|
||||||
@font-face {
|
|
||||||
font-family: 'Commissioner';
|
|
||||||
src: url('/fonts/commissioner.ttf');
|
|
||||||
font-weight: 400;
|
|
||||||
}
|
|
||||||
@@ -1,28 +0,0 @@
|
|||||||
@charset "UTF-8";
|
|
||||||
|
|
||||||
footer {
|
|
||||||
z-index: 4000;
|
|
||||||
position: relative;
|
|
||||||
height: var(--footer-height, 200px);
|
|
||||||
padding: 1rem 10vw;
|
|
||||||
display: flex;
|
|
||||||
align-items: self-end;
|
|
||||||
color: #fff;
|
|
||||||
background-color: #000;
|
|
||||||
--shadow: 0px 0px 80px 25px rgba(0, 0, 0, 0.4);
|
|
||||||
box-shadow: var(--shadow);
|
|
||||||
-webkit-box-shadow: var(--shadow);
|
|
||||||
-moz-box-shadow: var(--shadow);
|
|
||||||
|
|
||||||
> div.column {
|
|
||||||
height: 100%;
|
|
||||||
display: flex;
|
|
||||||
flex-direction: column;
|
|
||||||
justify-content: end;
|
|
||||||
gap: 1rem;
|
|
||||||
|
|
||||||
&:is(:last-of-type:last-child) {
|
|
||||||
margin-left: auto;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,21 +0,0 @@
|
|||||||
@charset "UTF-8";
|
|
||||||
|
|
||||||
@import url("https://fonts.googleapis.com/css2?family=Commissioner:wght@100;200;300;400;500;600;700;800;900&display=swap");
|
|
||||||
@import url("https://fonts.googleapis.com/css2?family=Cascadia+Code:ital,wght@0,200..700;1,200..700&family=Rubik:ital,wght@0,300..900;1,300..900&family=Wix+Madefor+Display:wght@400..800&display=swap");
|
|
||||||
@import url("https://fonts.googleapis.com/css2?family=Share+Tech+Mono&display=swap");
|
|
||||||
@import url("https://fonts.googleapis.com/css2?family=Montserrat:wght@900&display=swap");
|
|
||||||
@import url("https://fonts.googleapis.com/css2?family=Geologica:wght@100..900&family=Pochaevsk&display=swap");
|
|
||||||
|
|
||||||
main {
|
|
||||||
margin-top: var(--menu-height);
|
|
||||||
display: flex;
|
|
||||||
flex-direction: column;
|
|
||||||
flex-grow: 1;
|
|
||||||
align-items: center;
|
|
||||||
transition: 0s;
|
|
||||||
overflow-x: hidden;
|
|
||||||
|
|
||||||
&:not(:has(*)) {
|
|
||||||
display: none;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,130 +0,0 @@
|
|||||||
@charset "UTF-8";
|
|
||||||
|
|
||||||
main {
|
|
||||||
> section.row {
|
|
||||||
z-index: 500;
|
|
||||||
width: 100%;
|
|
||||||
display: flex;
|
|
||||||
flex-direction: column;
|
|
||||||
justify-content: center;
|
|
||||||
align-items: center;
|
|
||||||
background-color: #fff;
|
|
||||||
|
|
||||||
> h2#title {
|
|
||||||
font-size: 2.4rem;
|
|
||||||
font-family: "Bahnschrift";
|
|
||||||
margin: 0.1em 0 0.2em 0;
|
|
||||||
|
|
||||||
> span {
|
|
||||||
color: #0ea5e9;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
> p#description {
|
|
||||||
margin: unset;
|
|
||||||
text-align: center;
|
|
||||||
font-size: 1.2rem;
|
|
||||||
font-family: "Geologica";
|
|
||||||
font-weight: 400;
|
|
||||||
color: rgb(0, 0, 0, 0.6);
|
|
||||||
|
|
||||||
> span {
|
|
||||||
color: #0ea5e9;
|
|
||||||
font-weight: 800;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
> p.description {
|
|
||||||
width: 40%;
|
|
||||||
}
|
|
||||||
|
|
||||||
> a#order {
|
|
||||||
padding: 0.5em 1.3em;
|
|
||||||
margin-top: 1rem;
|
|
||||||
display: flex;
|
|
||||||
align-items: center;
|
|
||||||
gap: 5px;
|
|
||||||
border-radius: 1.125em;
|
|
||||||
font-size: 1em;
|
|
||||||
font-family: "Geologica";
|
|
||||||
font-weight: 400;
|
|
||||||
text-decoration: none;
|
|
||||||
background-color: #0ea5e9;
|
|
||||||
color: #fff;
|
|
||||||
transition: 0.2s;
|
|
||||||
|
|
||||||
&:hover {
|
|
||||||
transform: scale(1.05);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
> div#team {
|
|
||||||
margin-top: 1rem;
|
|
||||||
display: inline-flex;
|
|
||||||
justify-content: center;
|
|
||||||
align-items: center;
|
|
||||||
gap: 1rem;
|
|
||||||
|
|
||||||
> div#card {
|
|
||||||
padding: 0.6em 0.8em;
|
|
||||||
width: 180px;
|
|
||||||
height: 220px;
|
|
||||||
display: flex;
|
|
||||||
flex-direction: column;
|
|
||||||
justify-content: center;
|
|
||||||
align-items: center;
|
|
||||||
text-align: center;
|
|
||||||
border-radius: 1.125rem;
|
|
||||||
box-shadow: 0px 0px 15px 0px rgba(14, 165, 233, 0.1);
|
|
||||||
background-color: #fff;
|
|
||||||
transition: ease 0.2s;
|
|
||||||
|
|
||||||
> img {
|
|
||||||
object-fit: cover;
|
|
||||||
width: 140px;
|
|
||||||
height: 140px;
|
|
||||||
border-radius: 100%;
|
|
||||||
}
|
|
||||||
|
|
||||||
> p {
|
|
||||||
margin: 1em 0 0;
|
|
||||||
font-size: 1.2em;
|
|
||||||
font-family: "Geologica";
|
|
||||||
font-weight: 900;
|
|
||||||
color: #000000;
|
|
||||||
}
|
|
||||||
|
|
||||||
> span {
|
|
||||||
font-size: 1em;
|
|
||||||
font-family: "Geologica";
|
|
||||||
font-weight: 400;
|
|
||||||
color: #0ea5e9;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
> a#telegram {
|
|
||||||
padding: 0.5em 1.3em;
|
|
||||||
margin-top: 1rem;
|
|
||||||
display: flex;
|
|
||||||
align-items: center;
|
|
||||||
gap: 5px;
|
|
||||||
border-radius: 1.125em;
|
|
||||||
font-size: 1em;
|
|
||||||
font-family: "Geologica";
|
|
||||||
font-weight: 400;
|
|
||||||
text-decoration: none;
|
|
||||||
background-color: #0ea5e9;
|
|
||||||
color: #fff;
|
|
||||||
transition: 0.2s;
|
|
||||||
|
|
||||||
&:hover {
|
|
||||||
transform: scale(1.05);
|
|
||||||
}
|
|
||||||
|
|
||||||
> img {
|
|
||||||
width: 20px;
|
|
||||||
height: 20px;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,40 +0,0 @@
|
|||||||
@charset "UTF-8";
|
|
||||||
|
|
||||||
:root {
|
|
||||||
--width: max(850px, 45vw);
|
|
||||||
--menu-height: 70px;
|
|
||||||
--introdution-height: min(350px, 35vh);
|
|
||||||
--gap: min(12px, 1rem);
|
|
||||||
--fixed-right: 3rem;
|
|
||||||
--fixed-bottom: 2rem;
|
|
||||||
--fixed-left: 3rem;
|
|
||||||
--telegram-diameter: 50px;
|
|
||||||
|
|
||||||
--cookies-z-index: 6000;
|
|
||||||
--cookies-right: var(--fixed-right);
|
|
||||||
--cookies-bottom: var(--fixed-bottom);
|
|
||||||
--cookies-width: 24rem;
|
|
||||||
--cookies-height: 4rem;
|
|
||||||
|
|
||||||
/* font-family: , system-ui, sans-serif; */
|
|
||||||
font-family: "dejavu";
|
|
||||||
text-decoration: none;
|
|
||||||
outline: none;
|
|
||||||
border: none;
|
|
||||||
transition: 0.1s ease-out;
|
|
||||||
}
|
|
||||||
|
|
||||||
body {
|
|
||||||
margin: unset;
|
|
||||||
overflow-x: hidden;
|
|
||||||
background-color: #f7fafc;
|
|
||||||
}
|
|
||||||
|
|
||||||
.unselectable {
|
|
||||||
-webkit-touch-callout: none;
|
|
||||||
-webkit-user-select: none;
|
|
||||||
-khtml-user-select: none;
|
|
||||||
-moz-user-select: none;
|
|
||||||
-ms-user-select: none;
|
|
||||||
user-select: none;
|
|
||||||
}
|
|
||||||
@@ -1,4 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
// Initializing default theme for the views templater
|
|
||||||
define('THEME', 'default');
|
|
||||||
@@ -1,11 +0,0 @@
|
|||||||
<style>
|
|
||||||
:root {
|
|
||||||
--company-identifier: "{{ language.name == 'ru' or true ? 'ОГРН' : 'ID' }}";
|
|
||||||
--company-tax: "{{ language.name == 'ru' or true ? 'ИНН' : 'TAX' }}";
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
|
|
||||||
<section id="company">
|
|
||||||
<h4 class="name">ИП Мирзаев</h4>
|
|
||||||
<p class="column"><span class="tax row">271103176488</span><span class="identifier row">322270000004691</span></p>
|
|
||||||
</section>
|
|
||||||
@@ -1,7 +0,0 @@
|
|||||||
<section id="cookies" class="unselectable">
|
|
||||||
<div>
|
|
||||||
<p>ИСПОЛЬЗУЕТСЯ ТЕХНОЛОГИЯ COOKIES</p>
|
|
||||||
<small>№152-ФЗ «О персональных данных»</small>
|
|
||||||
</div>
|
|
||||||
<button onclick="setTimeout(() => this.parentElement.remove(), 200); this.parentElement.style.opacity = 0"><i class="icon close small"></i></button>
|
|
||||||
</section>
|
|
||||||
@@ -1,7 +0,0 @@
|
|||||||
<nav id="links" class="unselectable">
|
|
||||||
<a href="/offer">ПУБЛИЧНАЯ ОФЕРТА</a>
|
|
||||||
<a href="https://ru.wikipedia.org/wiki/WTFPL">ЛИЦЕНЗИЯ</a>
|
|
||||||
<a href="https://t.me/kodorvan">КОДОРВАНЬ</a>
|
|
||||||
<a href="https://t.me/blog_mirzaev_sexy">МИРЗАЕВ</a>
|
|
||||||
<a href="https://git.svoboda.works/kodorvan">РЕПОЗИТОРИЙ</a>
|
|
||||||
</nav>
|
|
||||||
@@ -1,13 +0,0 @@
|
|||||||
<style>
|
|
||||||
:root {
|
|
||||||
--map-loading: "Загрузка карты";
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
|
|
||||||
<section id="office">
|
|
||||||
<div class="map">
|
|
||||||
<div class="loading">
|
|
||||||
<i class="icon loading spinner animated"></i>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</section>
|
|
||||||
@@ -1,21 +0,0 @@
|
|||||||
{% block css %}
|
|
||||||
<link type="text/css" rel="stylesheet" href="/themes/default/css/elements/company.css" />
|
|
||||||
<link type="text/css" rel="stylesheet" href="/themes/default/css/elements/links.css" />
|
|
||||||
<link type="text/css" rel="stylesheet" href="/themes/default/css/elements/office.css" />
|
|
||||||
{% endblock %}
|
|
||||||
|
|
||||||
{% block body %}
|
|
||||||
<footer>
|
|
||||||
<div class="column">
|
|
||||||
{% include '/themes/default/elements/office.html' %}
|
|
||||||
{% include '/themes/default/elements/links.html' %}
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="column">
|
|
||||||
{% include '/themes/default/elements/company.html' %}
|
|
||||||
</div>
|
|
||||||
</footer>
|
|
||||||
{% endblock %}
|
|
||||||
|
|
||||||
{% block js %}
|
|
||||||
{% endblock %}
|
|
||||||
@@ -1,26 +0,0 @@
|
|||||||
{% block title %}
|
|
||||||
<title>{% if head.title != empty %}{{ head.title }}{% else %}perm by kodorvan{% endif %}</title>
|
|
||||||
{% endblock %}
|
|
||||||
|
|
||||||
{% block meta %}
|
|
||||||
<meta charset="utf-8">
|
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
|
|
||||||
{% for meta in head.metas %}
|
|
||||||
<meta {% for name, value in meta.attributes %}{{ name }}="{{ value }}" {% endfor %}>
|
|
||||||
{% endfor %}
|
|
||||||
{% endblock %}
|
|
||||||
|
|
||||||
{% block css %}
|
|
||||||
{% for element in css %}
|
|
||||||
<link type="text/css" rel="stylesheet" {% if element.href %} href="{{ element.href }}" {% endif %} />
|
|
||||||
{% endfor %}
|
|
||||||
<link type="text/css" rel="stylesheet" href="/themes/default/css/fonts.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/main.css" />
|
|
||||||
<link type="text/css" rel="stylesheet" href="/themes/default/css/aside.css" />
|
|
||||||
<link type="text/css" rel="stylesheet" href="/themes/default/css/footer.css" />
|
|
||||||
<style id="theme">
|
|
||||||
@import url('/themes/default/css/themes/default/colorscheme.css');
|
|
||||||
</style>
|
|
||||||
{% endblock %}
|
|
||||||
@@ -1,16 +0,0 @@
|
|||||||
{% block css %} {% endblock %} {% block body %}
|
|
||||||
<header>
|
|
||||||
<div>
|
|
||||||
<a href="https://perm.kodorvan.tech" id="logotype" class="unselectable">
|
|
||||||
<h4>КОДОРВАНЬ</h4>
|
|
||||||
<small>реальных программистов</small>
|
|
||||||
</a>
|
|
||||||
|
|
||||||
<nav id="menu" class="unselectable">
|
|
||||||
<a href="https://git.svoboda.works/kodorvan">Проекты</a>
|
|
||||||
<a href="#contacts">Контакты</a>
|
|
||||||
<a href="#services">Услуги</a>
|
|
||||||
</nav>
|
|
||||||
</div>
|
|
||||||
</header>
|
|
||||||
{% endblock %} {% block js %} {% endblock %}
|
|
||||||
@@ -1,9 +0,0 @@
|
|||||||
{% block js %}
|
|
||||||
{% for element in js %}
|
|
||||||
<script
|
|
||||||
{% if element.src %}src="{{ element.src }}" {% endif %}
|
|
||||||
{% if element.type %}type="{{ element.type }}" {% endif %}>
|
|
||||||
{{ element.innerText }}
|
|
||||||
</script>
|
|
||||||
{% endfor %}
|
|
||||||
{% endblock %}
|
|
||||||
@@ -1,62 +0,0 @@
|
|||||||
<section class="advantages">
|
|
||||||
<h2 class="title unselectable">Преимущества</h2>
|
|
||||||
|
|
||||||
<div class="accordion">
|
|
||||||
|
|
||||||
<div class="accordion-item">
|
|
||||||
<button id="accordion-button-1" aria-expanded="false">
|
|
||||||
<span class="title ">Техническое задание</span>
|
|
||||||
<span class="icon" aria-hidden="true"></span>
|
|
||||||
</button>
|
|
||||||
|
|
||||||
<div class="accordion-content">
|
|
||||||
<p>Четкое описание всех требований и функционала проекта.</p>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="accordion-item">
|
|
||||||
<button id="accordion-button-2" aria-expanded="false">
|
|
||||||
<span class="title">Хостинг на нашем сервере</span>
|
|
||||||
<span class="icon" aria-hidden="true"></span>
|
|
||||||
</button>
|
|
||||||
|
|
||||||
<div class="accordion-content">
|
|
||||||
<p>Проект может быть размещен на нашем сервере или перенесен на другой по желанию клиента.</p>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="accordion-item">
|
|
||||||
<button id="accordion-button-3" aria-expanded="false">
|
|
||||||
<span class="title">Безопасность и приватность</span>
|
|
||||||
<span class="icon" aria-hidden="true"></span>
|
|
||||||
</button>
|
|
||||||
|
|
||||||
<div class="accordion-content">
|
|
||||||
<p>Код зашифрован, проект полностью приватный и защищен от несанкционированного доступа.</p>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="accordion-item">
|
|
||||||
<button id="accordion-button-4" aria-expanded="false">
|
|
||||||
<span class="title">Бесплатная поддержка</span>
|
|
||||||
<span class="icon" aria-hidden="true"></span>
|
|
||||||
</button>
|
|
||||||
|
|
||||||
<div class="accordion-content">
|
|
||||||
<p>Помощь и консультация после запуска проекта.</p>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="accordion-item">
|
|
||||||
<button id="accordion-button-5" aria-expanded="false">
|
|
||||||
<span class="title">Персонализированный подход</span>
|
|
||||||
<span class="icon" aria-hidden="true"></span>
|
|
||||||
</button>
|
|
||||||
|
|
||||||
<div class="accordion-content">
|
|
||||||
<p>Учет уникальных потребностей и пожеланий клиента.</p>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
</section>
|
|
||||||
@@ -1,24 +0,0 @@
|
|||||||
<section id="comand" class="container">
|
|
||||||
<h2 id="title" class="unselectable">Разработчики</h2>
|
|
||||||
<p id="description" class="unselectable">
|
|
||||||
Более <span>12 лет</span> разработки в различных IT сферах
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<div id="team">
|
|
||||||
<div id="card">
|
|
||||||
<img src="themes/test/images/avatar/123.jpg" alt="Арсен" />
|
|
||||||
<p class="unselectable">Арсен</p>
|
|
||||||
<span class="unselectable">Программист</span>
|
|
||||||
</div>
|
|
||||||
<div id="card">
|
|
||||||
<img src="themes/test/images/avatar/123.jpg" alt="Ксения" />
|
|
||||||
<p class="unselectable">Ксения</p>
|
|
||||||
<span class="unselectable">Coder</span>
|
|
||||||
</div>
|
|
||||||
<div id="card">
|
|
||||||
<img src="themes/test/images/avatar/123.jpg" alt="Альгиз" />
|
|
||||||
<p class="unselectable">Альгиз</p>
|
|
||||||
<span class="unselectable">Нeйроcетка и крипта</span>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</section>
|
|
||||||
@@ -1,17 +0,0 @@
|
|||||||
<section id="contacts" class="row unselectable">
|
|
||||||
<h2 id="title">Связатьcя с нами</h2>
|
|
||||||
<p id="description">Готовы обсудить ваш проект? Напишите нам!</p>
|
|
||||||
|
|
||||||
<a id="telegram" class="unselectable" href="https://t.me/kodorvan?direct">
|
|
||||||
<img src="themes/default/images/icons/telegram.svg" alt="">
|
|
||||||
|
|
||||||
<span>Telegram</span>
|
|
||||||
</a>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<!-- Готовы обсудить проект
|
|
||||||
заменить на
|
|
||||||
что-то связанное с конструктором заказа
|
|
||||||
написать о том что будет посчитана цена, составлено ТЗ, сроки
|
|
||||||
влепить что есть рассрочка, оплата по СБП, работа с юр лицами
|
|
||||||
поэтапная оплата и возможность индивидуального чего-нибудь -->
|
|
||||||
@@ -1,30 +0,0 @@
|
|||||||
<section id="description" class="row">
|
|
||||||
<p class="unselectable"><strong>Создание сайта</strong>, <strong>разработка чат-бота телеграм</strong>, <strong>написание парсера</strong>, <strong>подключение воронки</strong>, а так же разработка любой сложности калькулятора, интернет-магазина (маркетплейса) и полноценной CRM с нуля <strong>в Перми</strong></p>
|
|
||||||
|
|
||||||
<ul class="table unselectable">
|
|
||||||
<li>
|
|
||||||
<span class="bad"><i class="icon close small"></i>Не копируем проекты по шаблонам</span>
|
|
||||||
<span class="good"><i class="icon check small"></i><strong>Пишем код с нуля</strong> с использованием наших <strong>уникальных технологий</strong>, которые позволяют сокращать сроки разработки и преумножить качество проекта</span>
|
|
||||||
</li>
|
|
||||||
<li>
|
|
||||||
<span class="bad"><i class="icon close small"></i>Не перепродаём проекты другим заказчикам</span>
|
|
||||||
<span class="good"><i class="icon check small"></i><strong>Репозиторий и код проекта полностью передаются заказчику</strong> под нашу публичную репутацию, либо под патент или договор о неразглашении (NDA)</span>
|
|
||||||
</li>
|
|
||||||
<li>
|
|
||||||
<span class="bad"><i class="icon close small"></i>Не навязываем дополнительные услуги</span>
|
|
||||||
<span class="good"><i class="icon check small"></i><strong>Бесплатный сервер</strong> на время разработки, <strong>бесплатная установка на сервер заказчика</strong> и <strong>бесплатная техподдержка</strong></span>
|
|
||||||
</li>
|
|
||||||
<li>
|
|
||||||
<span class="bad"><i class="icon close small"></i>Не создаём зависимость от нашей команды</span>
|
|
||||||
<span class="good"><i class="icon check small"></i>Документируем код, пишем инструкции и разрабатываем систему вики-страниц на английском языке для <strong>длительной поддержки проекта</strong></span>
|
|
||||||
</li>
|
|
||||||
<li>
|
|
||||||
<span class="bad"><i class="icon close small"></i>Не вводим в заблуждение сложной терминологией</span>
|
|
||||||
<span class="good"><i class="icon check small"></i>Процесс работы можно наблюдать в реальном времени на нашем сайте, чтобы убедиться, что <strong>мы честно отрабатываем поставленную задачу</strong></span>
|
|
||||||
</li>
|
|
||||||
</ul>
|
|
||||||
|
|
||||||
<strong class="partners">Мы мотивированы сотрудничать на <span>постоянной основе</span>, поэтому <span>работаем на результат</span></strong>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<!-- , либо реально выгодная аренда сервера у нас по самой низкой цене на рынке и максимально эффективной техподдержкой с бесплатными бекапами и оперативной установкой критических обновлений безопасности -->
|
|
||||||
@@ -1,27 +0,0 @@
|
|||||||
<section id="introdution" class="row">
|
|
||||||
<div class="information">
|
|
||||||
<span id="label">
|
|
||||||
<i class="icon code slash"></i>
|
|
||||||
<span class="unselectable">ПРОФЕССИОНАЛЫ С ОПЫТОМ</span>
|
|
||||||
</span>
|
|
||||||
|
|
||||||
<h2 id="title" class="unselectable">ПЕРМСКИЕ РАЗРАБОТЧИКИ</h2>
|
|
||||||
|
|
||||||
<p id="team" class="unselectable"><b>Чистый код</b>, реальные сроки и собственные сервера в <strong>Перми</strong><br />по <b>честной цене</b> и с <b>вечной техподдержкой</b></p>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="background" style="opacity: 0">
|
|
||||||
<div class="dots"></div>
|
|
||||||
|
|
||||||
<canvas id="introdution_animation"></canvas>
|
|
||||||
|
|
||||||
<svg style="position: absolute">
|
|
||||||
<defs>
|
|
||||||
<filter id="blob">
|
|
||||||
<feGaussianBlur in="SourceGraphic" stdDeviation="12" result="blur"></feGaussianBlur>
|
|
||||||
<feColorMatrix in="blur" mode="matrix" values="1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 19 -9" result="blob"></feColorMatrix>
|
|
||||||
</filter>
|
|
||||||
</defs>
|
|
||||||
</svg>
|
|
||||||
</div>
|
|
||||||
</section>
|
|
||||||
@@ -1,48 +0,0 @@
|
|||||||
<section id="projects" class="row unselectable">
|
|
||||||
<div id="wrap" class="hotline unselectable">
|
|
||||||
<article class="pechatalka">
|
|
||||||
<h4>ПЕЧАТАЛКА</h4>
|
|
||||||
<img class="background" src="/themes/default/images/projects/pechatalka.gif" alt="pechatalka" ondragstart="return false;"/>
|
|
||||||
</article>
|
|
||||||
|
|
||||||
<article class="understyle">
|
|
||||||
<h4>under.style</h4>
|
|
||||||
<img class="background" src="/themes/default/images/projects/understyle.png" alt="under.style" ondragstart="return false;"/>
|
|
||||||
</article>
|
|
||||||
|
|
||||||
<article class="surikov">
|
|
||||||
<h4>Музей-библиотека имени Сурикова</h4>
|
|
||||||
<img class="background" src="/themes/default/images/projects/surikov.png" alt="surikov" ondragstart="return false;"/>
|
|
||||||
</article>
|
|
||||||
|
|
||||||
<article class="pechatalka">
|
|
||||||
<h4>ПЕЧАТАЛКА</h4>
|
|
||||||
<img class="background" src="/themes/default/images/projects/pechatalka.gif" alt="pechatalka" ondragstart="return false;"/>
|
|
||||||
</article>
|
|
||||||
|
|
||||||
<article class="understyle">
|
|
||||||
<h4>under.style</h4>
|
|
||||||
<img class="background" src="/themes/default/images/projects/understyle.png" alt="under.style" ondragstart="return false;"/>
|
|
||||||
</article>
|
|
||||||
|
|
||||||
<article class="surikov">
|
|
||||||
<h4>Музей-библиотека имени Сурикова</h4>
|
|
||||||
<img class="background" src="/themes/default/images/projects/surikov.png" alt="surikov" ondragstart="return false;"/>
|
|
||||||
</article>
|
|
||||||
|
|
||||||
<article class="pechatalka">
|
|
||||||
<h4>ПЕЧАТАЛКА</h4>
|
|
||||||
<img class="background" src="/themes/default/images/projects/pechatalka.gif" alt="pechatalka" ondragstart="return false;"/>
|
|
||||||
</article>
|
|
||||||
|
|
||||||
<article class="understyle">
|
|
||||||
<h4>under.style</h4>
|
|
||||||
<img class="background" src="/themes/default/images/projects/understyle.png" alt="under.style" ondragstart="return false;"/>
|
|
||||||
</article>
|
|
||||||
|
|
||||||
<article class="surikov">
|
|
||||||
<h4>Музей-библиотека имени Сурикова</h4>
|
|
||||||
<img class="background" src="/themes/default/images/projects/surikov.png" alt="surikov" ondragstart="return false;"/>
|
|
||||||
</article>
|
|
||||||
</div>
|
|
||||||
</section>
|
|
||||||
@@ -1,2 +0,0 @@
|
|||||||
<section id="server" class="row">
|
|
||||||
</section>
|
|
||||||
@@ -1,35 +0,0 @@
|
|||||||
<section id="services" class="container ">
|
|
||||||
<h2 id="title">Предоставляемые услуги</h2>
|
|
||||||
|
|
||||||
<div id="service">
|
|
||||||
<div id="card">
|
|
||||||
<div class="text">
|
|
||||||
<p class="title">Телеграм-боты под ключ</p>
|
|
||||||
<span class="discription">Создаем Telegram-ботов для продаж, поддержки клиентов и автоматизации
|
|
||||||
бизнес-процессов. Рассматриваем разработку мини-приложений в Telegram: магазин, сервисы, игры и полноценные
|
|
||||||
платформы</span>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<a href="https://t.me/kodorvan?direct">Запустить бота за 7 дней</a>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div id="card">
|
|
||||||
<div class="text">
|
|
||||||
<p class="title">Разработка сайта</p>
|
|
||||||
<span class="discription">Разработаем сайт любой сложности — от одностраничных лендингов до многофункциональных интернет-магазинов и представительных корпоративных сайтов. Каждый
|
|
||||||
проект будет современным и адаптивным</span>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<a href="https://t.me/kodorvan?direct">Заказать сайт</a>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div id="card">
|
|
||||||
<div class="text">
|
|
||||||
<p class="title"> API-интеграции под ключ</p>
|
|
||||||
<span class="discription">Настраиваем надежное и безопасное взаимодействие вашего сайта или бота с любыми внешними сервисами. Интеграция с платежными системами, CRM, Telegram, базами данных и другими системами, чтобы автоматизировать бизнес-процессы.</span>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<a href="https://t.me/kodorvan?direct">Подключить</a>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</section>
|
|
||||||
@@ -1,11 +0,0 @@
|
|||||||
<section id="shortcut" class="row">
|
|
||||||
<div class="row">
|
|
||||||
<div class="statistics column">
|
|
||||||
<p>Репозитории:<span>{{ projects ?? 98 }}</span></p>
|
|
||||||
<small class="unselectable">Наши разработки + проекты заказчиков</small>
|
|
||||||
|
|
||||||
<p>Просмотры:<span>{{ month ?? '304 258' }}</span></p>
|
|
||||||
<small class="unselectable">За последние 30 дней</small>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</section>
|
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
<section id="workload" class="row">
|
|
||||||
<p><i class="icon coffe"></i>Загруженность команды: <span class="{{ workload < 51 ? 'small' : (workload < 71 ? 'medium' : 'heavy')}}">{{ workload }}%<small class="unselectable">Обновлено 5 минут назад</small></span></p>
|
|
||||||
</section>
|
|
||||||
@@ -1,45 +0,0 @@
|
|||||||
{% extends "/themes/default/index.html" %}
|
|
||||||
|
|
||||||
{% block css %}
|
|
||||||
{{ parent() }}
|
|
||||||
<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/telegram.css" />
|
|
||||||
<link type="text/css" rel="stylesheet" href="/css/icons/close.css" />
|
|
||||||
<link type="text/css" rel="stylesheet" href="/css/icons/check.css" />
|
|
||||||
<link type="text/css" rel="stylesheet" href="/css/icons/eye.css" />
|
|
||||||
<link type="text/css" rel="stylesheet" href="/css/icons/loading_spinner.css" />
|
|
||||||
<link type="text/css" rel="stylesheet" href="/css/icons/close.css" />
|
|
||||||
<link type="text/css" rel="stylesheet" href="/themes/default/css/pages/index.css" />
|
|
||||||
<link type="text/css" rel="stylesheet" href="/themes/default/css/elements/introdution.css" />
|
|
||||||
<link type="text/css" rel="stylesheet" href="/themes/default/css/elements/shortcut.css" />
|
|
||||||
<link type="text/css" rel="stylesheet" href="/themes/default/css/elements/description.css" />
|
|
||||||
<link type="text/css" rel="stylesheet" href="/themes/default/css/elements/projects.css" />
|
|
||||||
<link type="text/css" rel="stylesheet" href="/themes/default/css/elements/service.css" />
|
|
||||||
<link type="text/css" rel="stylesheet" href="/themes/default/css/elements/advantages.css" />
|
|
||||||
<link type="text/css" rel="stylesheet" href="/themes/default/css/elements/advantages.css" />
|
|
||||||
<link type="text/css" rel="stylesheet" href="/themes/default/css/elements/telegram.css" />
|
|
||||||
<link type="text/css" rel="stylesheet" href="/themes/default/css/elements/workload.css" />
|
|
||||||
<link type="text/css" rel="stylesheet" href="/themes/default/css/elements/cookies.css" />
|
|
||||||
{% endblock %}
|
|
||||||
|
|
||||||
{% block main %}
|
|
||||||
{% include '/themes/default/main/elements/introdution.html' %}
|
|
||||||
{% include '/themes/default/main/elements/workload.html' %}
|
|
||||||
{% include '/themes/default/main/elements/shortcut.html' %}
|
|
||||||
{% include '/themes/default/main/elements/description.html' %}
|
|
||||||
{% include '/themes/default/main/elements/projects.html' %}
|
|
||||||
{% include '/themes/default/main/elements/server.html' %}
|
|
||||||
|
|
||||||
{% include '/themes/default/elements/telegram.html' %}
|
|
||||||
{% include '/themes/default/elements/cookies.html' %}
|
|
||||||
{% endblock %}
|
|
||||||
|
|
||||||
{% block js %}
|
|
||||||
{{ parent() }}
|
|
||||||
<script src="/js/modules/hotline.mjs" type="module"></script>
|
|
||||||
<script src="/js/modules/womb3-simplex.mjs" type="module"></script>
|
|
||||||
<script src="/js/pages/main.js" defer></script>
|
|
||||||
<script src="/js/modules/service.js" defer></script>
|
|
||||||
<script src="/js/modules/advantages.js" defer></script>
|
|
||||||
{% endblock %}
|
|
||||||
@@ -2,11 +2,11 @@
|
|||||||
|
|
||||||
declare(strict_types=1);
|
declare(strict_types=1);
|
||||||
|
|
||||||
namespace kodorvan\perm\controllers;
|
namespace kodorvan\site\controllers;
|
||||||
|
|
||||||
// Files of the project
|
// Files of the project
|
||||||
use kodorvan\perm\views\templater,
|
use kodorvan\site\views\templater,
|
||||||
kodorvan\perm\models\core as models;
|
kodorvan\site\models\core as models;
|
||||||
|
|
||||||
// Library for languages support
|
// Library for languages support
|
||||||
use mirzaev\languages\language;
|
use mirzaev\languages\language;
|
||||||
@@ -20,7 +20,7 @@ use mirzaev\minimal\core as minimal,
|
|||||||
/**
|
/**
|
||||||
* Controllers core
|
* Controllers core
|
||||||
*
|
*
|
||||||
* @package kodorvan\perm\controllers
|
* @package kodorvan\site\controllers
|
||||||
*
|
*
|
||||||
* @param language $language Language
|
* @param language $language Language
|
||||||
* @param response $response Response
|
* @param response $response Response
|
||||||
294
kodorvan/site/system/controllers/index.php
Executable file
294
kodorvan/site/system/controllers/index.php
Executable file
@@ -0,0 +1,294 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace kodorvan\site\controllers;
|
||||||
|
|
||||||
|
// Files of the project
|
||||||
|
use kodorvan\site\controllers\core;
|
||||||
|
|
||||||
|
// Framework for PHP
|
||||||
|
use mirzaev\minimal\http\enumerations\content,
|
||||||
|
mirzaev\minimal\http\enumerations\status;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Index
|
||||||
|
*
|
||||||
|
* @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 index extends core
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Errors
|
||||||
|
*
|
||||||
|
* @var array $errors Registry of errors
|
||||||
|
*/
|
||||||
|
protected array $errors = [
|
||||||
|
'system' => []
|
||||||
|
];
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Main page
|
||||||
|
*
|
||||||
|
* @return null
|
||||||
|
*/
|
||||||
|
public function index(): null
|
||||||
|
{
|
||||||
|
if (str_contains($this->request->headers['accept'] ?? '', content::html->value)) {
|
||||||
|
// Request for HTML response
|
||||||
|
|
||||||
|
// Initializing the team workload
|
||||||
|
$this->view->workload = (string) ($_COOKIE['workload'] ?? rand(20, 80));
|
||||||
|
|
||||||
|
// Initializing services
|
||||||
|
$this->view->services = [
|
||||||
|
[
|
||||||
|
'class' => 'telegram voronka',
|
||||||
|
'title' => 'Телеграм воронка',
|
||||||
|
'icon_left' => '',
|
||||||
|
/* 'icon_center' => 'import', */
|
||||||
|
'icon_center' => 'crown',
|
||||||
|
'icon_right' => '',
|
||||||
|
'description' => <<<TXT
|
||||||
|
Поступательно запросит данные пользователя, скомпонует, запишет в базу данных и синхронизирует в CRM
|
||||||
|
<br><br>
|
||||||
|
Используя иммерсивные технологии и многофакторный сбор обеспечивает максимальное удержание пользователя
|
||||||
|
TXT,
|
||||||
|
'howto' => 'Направьте к нему клиентов и ждите новых заказов в вашей CRM, на сайте или в чате',
|
||||||
|
'buttons' => [
|
||||||
|
[
|
||||||
|
'icon' => 'comment',
|
||||||
|
'href' => 'https://t.me/' . TELEGRAM_ROBOT['domain'] . '?start=telegram voronka'
|
||||||
|
]
|
||||||
|
],
|
||||||
|
'theses' => [
|
||||||
|
[
|
||||||
|
'class' => 'yellow',
|
||||||
|
'characteristic' => '-80%',
|
||||||
|
'text' => 'НАГРУЗКА'
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'class' => 'blue',
|
||||||
|
'colored' => true,
|
||||||
|
'characteristic' => '+5%',
|
||||||
|
'text' => 'КОНВЕРСИИ'
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'class' => 'green',
|
||||||
|
'characteristic' => '0₽',
|
||||||
|
'text' => 'НИКАКОЙ АРЕНДЫ'
|
||||||
|
]
|
||||||
|
],
|
||||||
|
'background_image_src' => '/themes/default/images/telegram_voronka.png',
|
||||||
|
'background_image_alt' => 'Телеграм воронка КОДОРВАНЬ',
|
||||||
|
'cost' => '2000',
|
||||||
|
'canceled' => 'ЗАБЛОКИРОВАН'
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'class' => 'parser',
|
||||||
|
'title' => 'Парсер',
|
||||||
|
'icon_left' => '',
|
||||||
|
'icon_center' => 'search',
|
||||||
|
'icon_right' => '',
|
||||||
|
'description' => <<<TXT
|
||||||
|
Любая работа за компьютером может быть автоматизирована
|
||||||
|
<br><br>
|
||||||
|
Парсер берёт данные с сайтов через API, либо эмулируя пользователя, а так же из excel-документов, CRM и бухгалтерии, затем просчитывает, анализирует и записывает результат
|
||||||
|
TXT,
|
||||||
|
'howto' => 'Подключите источники и снизьте нагрузку на операторов, оптимизируйте процессы',
|
||||||
|
'extra' => [
|
||||||
|
'Wildberries',
|
||||||
|
'OZON',
|
||||||
|
'Yandex Market',
|
||||||
|
'Avito',
|
||||||
|
'CDEK',
|
||||||
|
'1C',
|
||||||
|
'Bitrix',
|
||||||
|
'Мой Склад'
|
||||||
|
],
|
||||||
|
'buttons' => [
|
||||||
|
[
|
||||||
|
'icon' => 'comment',
|
||||||
|
/* 'href' => 'https://t.me/' . TELEGRAM_ROBOT['domain'] . '?start=parser' */
|
||||||
|
'href' => 'https://t.me/' . TELEGRAM_ROBOT['domain'] . '?start=parser'
|
||||||
|
]
|
||||||
|
],
|
||||||
|
'theses' => [
|
||||||
|
[
|
||||||
|
'class' => 'yellow',
|
||||||
|
'colored' => true,
|
||||||
|
'characteristic' => '-100%',
|
||||||
|
'text' => 'НАГРУЗКА'
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'class' => 'cyan',
|
||||||
|
'icon' => 'infinity',
|
||||||
|
'text' => 'ВЕЧНАЯ ПОДДЕРЖКА'
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'class' => 'green',
|
||||||
|
'icon' => 'play forwards',
|
||||||
|
'text' => 'РЕКОРД СКОРОСТИ'
|
||||||
|
]
|
||||||
|
],
|
||||||
|
'background_image_src' => '/themes/default/images/excel_small_compressed.jpg',
|
||||||
|
'background_image_alt' => 'Парсеры КОДОРВАНЬ',
|
||||||
|
'cost' => '3000'
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'class' => 'calculator',
|
||||||
|
'title' => 'Калькулятор',
|
||||||
|
'icon_left' => '',
|
||||||
|
'icon_center' => 'calculator',
|
||||||
|
'icon_right' => '',
|
||||||
|
'description' => <<<TXT
|
||||||
|
Составление алгоритма обработки большого объёма данных с использованием нейросетей и грамотно выбранной сортировки
|
||||||
|
<br><br>
|
||||||
|
Оператор вводит данные, нажимает на кнопки, двигает ползунки и мгновенно получает точный результат вычислений
|
||||||
|
TXT,
|
||||||
|
'howto' => 'Настройте параметры в панели управления и в долгосрочной перспективе сэкономьте тысячи часов рабочего времени',
|
||||||
|
'extra' => [],
|
||||||
|
'buttons' => [
|
||||||
|
[
|
||||||
|
'icon' => 'comment',
|
||||||
|
'href' => 'https://t.me/' . TELEGRAM_ROBOT['domain'] . '?start=calculator'
|
||||||
|
]
|
||||||
|
],
|
||||||
|
'theses' => [
|
||||||
|
[
|
||||||
|
'class' => 'yellow',
|
||||||
|
'characteristic' => '-95%',
|
||||||
|
'text' => 'НАГРУЗКА'
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'class' => 'green',
|
||||||
|
'characteristic' => '-80%',
|
||||||
|
'text' => 'ОШИБОК ВЫЧИСЛЕНИЙ'
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'class' => 'red',
|
||||||
|
'colored' => true,
|
||||||
|
'characteristic' => '+20%',
|
||||||
|
'text' => 'ОБУЧАЕМОСТЬ'
|
||||||
|
]
|
||||||
|
],
|
||||||
|
'background_image_src' => '/themes/default/images/tordv_compressed.jpg',
|
||||||
|
'background_image_alt' => 'Калькулятор КОДОРВАНЬ',
|
||||||
|
'cost' => '10 000'
|
||||||
|
]
|
||||||
|
|
||||||
|
];
|
||||||
|
|
||||||
|
// Sending the cookie with the team workload (1800 = 30min)
|
||||||
|
setcookie('workload', $this->view->workload, time() + 1800, '/');
|
||||||
|
|
||||||
|
// Initializing the project constructor data
|
||||||
|
$this->view->project = [
|
||||||
|
'architectures' => [
|
||||||
|
'site' => 'Сайт',
|
||||||
|
'chat_robot' => 'Чат-робот',
|
||||||
|
'program' => 'Программа',
|
||||||
|
'game' => 'Видеоигра',
|
||||||
|
'script' => 'Скрипт, парсер, макрос',
|
||||||
|
'module' => 'Модуль, плагин, расширение',
|
||||||
|
],
|
||||||
|
'purposes' => [
|
||||||
|
'funnel' => 'Воронка (обработка пользователя)',
|
||||||
|
'contacts' => 'Контакты (сбор данных)',
|
||||||
|
'ai' => 'Внедрение ИИ',
|
||||||
|
'archive' => 'Архив (галерея, библиотека, реестр)',
|
||||||
|
'crm' => 'Индивидуальная CRM',
|
||||||
|
'landing' => 'Лендинг (посадочная страница)',
|
||||||
|
'marketplace' => 'Маркетплейс, магазин, витрина',
|
||||||
|
'saas' => 'SaaS проект',
|
||||||
|
'search' => 'Поиск и анализ',
|
||||||
|
'calculate' => 'Автоматизированное вычисление (калькулятор)',
|
||||||
|
'individual' => 'Индивидуальная разработка',
|
||||||
|
],
|
||||||
|
'integrations' => [
|
||||||
|
'one_c' => '1C',
|
||||||
|
'bitrix24' => 'Битрикс24',
|
||||||
|
'moy_sklad' => 'Мой Склад',
|
||||||
|
'mail' => 'Почта',
|
||||||
|
'excel' => 'Excel',
|
||||||
|
'ozon' => 'OZON',
|
||||||
|
'wildberries' => 'Wildberries',
|
||||||
|
'yandex_market' => 'Яндекс Маркет',
|
||||||
|
'avito' => 'Авито',
|
||||||
|
'vk' => 'ВКонтакте',
|
||||||
|
'max' => 'МАКС',
|
||||||
|
'telegram' => 'Телеграм',
|
||||||
|
'neural_networks' => 'Нейросети'
|
||||||
|
]
|
||||||
|
];
|
||||||
|
|
||||||
|
// 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
|
||||||
|
$this->view->integrations = [
|
||||||
|
'Вайлдберриз' => 'wildberries',
|
||||||
|
'ОЗОН' => 'ozon',
|
||||||
|
'Мой Склад' => 'moy_sklad',
|
||||||
|
'1С Предприятие' => '1c',
|
||||||
|
'Битрикс 24' => 'bitrix24',
|
||||||
|
'ВКонтакте' => 'vk',
|
||||||
|
'МАКС' => 'max',
|
||||||
|
'Авито' => 'avito',
|
||||||
|
'YClients' => 'yclients',
|
||||||
|
'ЮКасса' => 'yookassa',
|
||||||
|
'OpenAI' => 'openai',
|
||||||
|
/* 'yandex_direct', */
|
||||||
|
'Яндекс Директ' => 'yandex_market',
|
||||||
|
];
|
||||||
|
|
||||||
|
// Render page
|
||||||
|
$page = $this->view->render(
|
||||||
|
'main/index.html',
|
||||||
|
[
|
||||||
|
'smartphone' => $this->request->smartphone,
|
||||||
|
'tablet' => $this->request->tablet
|
||||||
|
]
|
||||||
|
);
|
||||||
|
|
||||||
|
// 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;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -2,19 +2,19 @@
|
|||||||
|
|
||||||
declare(strict_types=1);
|
declare(strict_types=1);
|
||||||
|
|
||||||
namespace kodorvan\perm\controllers;
|
namespace kodorvan\site\controllers;
|
||||||
|
|
||||||
// Files of the project
|
// Files of the project
|
||||||
use kodorvan\perm\controllers\core;
|
use kodorvan\site\controllers\core;
|
||||||
|
|
||||||
// Framework for PHP
|
// Framework for PHP
|
||||||
use mirzaev\minimal\http\enumerations\content,
|
use mirzaev\minimal\http\enumerations\content,
|
||||||
mirzaev\minimal\http\enumerations\status;
|
mirzaev\minimal\http\enumerations\status;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Index
|
* Offer
|
||||||
*
|
*
|
||||||
* @package kodorvan\perm\controllers
|
* @package kodorvan\site\controllers
|
||||||
*
|
*
|
||||||
* @param array $errors Registry of errors
|
* @param array $errors Registry of errors
|
||||||
*
|
*
|
||||||
@@ -23,7 +23,7 @@ use mirzaev\minimal\http\enumerations\content,
|
|||||||
* @license http://www.wtfpl.net/ Do What The Fuck You Want To Public License
|
* @license http://www.wtfpl.net/ Do What The Fuck You Want To Public License
|
||||||
* @author Arsen Mirzaev Tatyano-Muradovich <arsen@mirzaev.sexy>
|
* @author Arsen Mirzaev Tatyano-Muradovich <arsen@mirzaev.sexy>
|
||||||
*/
|
*/
|
||||||
final class index extends core
|
final class offer extends core
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
* Errors
|
* Errors
|
||||||
@@ -35,7 +35,7 @@ final class index extends core
|
|||||||
];
|
];
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Main page
|
* Page: offer
|
||||||
*
|
*
|
||||||
* @return null
|
* @return null
|
||||||
*/
|
*/
|
||||||
@@ -44,14 +44,30 @@ final class index 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 the team workload
|
// Initializing contacts data
|
||||||
$this->view->workload = (string) ($_COOKIE['workload'] ?? rand(20, 80));
|
$this->view->contacts = [
|
||||||
|
'sim' => [
|
||||||
// Sending the cookie with the team workload (1800 = 30min)
|
'requests' => [
|
||||||
setcookie('workload', $this->view->workload, time() + 1800, '/');
|
'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('main/index.html');
|
$page = $this->view->render(
|
||||||
|
'main/offer.html',
|
||||||
|
[
|
||||||
|
'smartphone' => $this->request->smartphone,
|
||||||
|
'tablet' => $this->request->tablet
|
||||||
|
]
|
||||||
|
);
|
||||||
|
|
||||||
// Sending response
|
// Sending response
|
||||||
$this->response
|
$this->response
|
||||||
126
kodorvan/site/system/controllers/project.php
Executable file
126
kodorvan/site/system/controllers/project.php
Executable file
@@ -0,0 +1,126 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace kodorvan\site\controllers;
|
||||||
|
|
||||||
|
// Files of the project
|
||||||
|
use kodorvan\site\controllers\core;
|
||||||
|
|
||||||
|
// PHP framework
|
||||||
|
use mirzaev\minimal\http\enumerations\content,
|
||||||
|
mirzaev\minimal\http\enumerations\status;
|
||||||
|
|
||||||
|
// Mail server
|
||||||
|
use PHPMailer\PHPMailer\PHPMailer as mail,
|
||||||
|
PHPMailer\PHPMailer\SMTP as smtp,
|
||||||
|
PHPMailer\PHPMailer\Exception as mail_exception;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Index
|
||||||
|
*
|
||||||
|
* @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 project extends core
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Errors
|
||||||
|
*
|
||||||
|
* @var array $errors Registry of errors
|
||||||
|
*/
|
||||||
|
protected array $errors = [
|
||||||
|
'system' => []
|
||||||
|
];
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* @return null
|
||||||
|
*/
|
||||||
|
public function request(string $request): null
|
||||||
|
{
|
||||||
|
// Initializing the project identifier (temporary solution)
|
||||||
|
$identifier = blake3($request, 20);
|
||||||
|
|
||||||
|
// Initializing the project storage path
|
||||||
|
$path = STORAGE . DIRECTORY_SEPARATOR . 'projects' . DIRECTORY_SEPARATOR . $identifier;
|
||||||
|
|
||||||
|
// Initializing the project storage directory in the storage
|
||||||
|
if (!file_exists($path)) mkdir($path, 0775, true);
|
||||||
|
|
||||||
|
// Declaring the project storage files registry
|
||||||
|
$files = [];
|
||||||
|
|
||||||
|
foreach ($this->request->files as $file) {
|
||||||
|
// Iterating over files
|
||||||
|
|
||||||
|
// Initializing the file destination path
|
||||||
|
$destination = $path . DIRECTORY_SEPARATOR . $file['name'];
|
||||||
|
|
||||||
|
// Writing the file into the project storage
|
||||||
|
copy($file['tmp_name'], $destination);
|
||||||
|
|
||||||
|
// Writing the file destination path into the project storage files registry
|
||||||
|
$files[$file['name']] = $destination;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Decoding the request JSON argument
|
||||||
|
$request = json_decode(json: $request, associative: true, depth: 5);
|
||||||
|
|
||||||
|
// Initializing the mail server
|
||||||
|
$mail = new mail(true);
|
||||||
|
|
||||||
|
try {
|
||||||
|
// Writing the mail server parameters
|
||||||
|
/* $mail->SMTPDebug = smtp::DEBUG_SERVER; */
|
||||||
|
$mail->setLanguage('ru');
|
||||||
|
$mail->CharSet = mail::CHARSET_UTF8;
|
||||||
|
$mail->isSMTP();
|
||||||
|
$mail->Host = MAIL_SERVER['host'];
|
||||||
|
$mail->SMTPAuth = true;
|
||||||
|
$mail->Username = MAIL_SERVER['sender']['mail'];
|
||||||
|
$mail->Password = MAIL_SERVER['password'];
|
||||||
|
$mail->SMTPSecure = mail::ENCRYPTION_SMTPS;
|
||||||
|
$mail->Port = 465;
|
||||||
|
$mail->setFrom(MAIL_SERVER['sender']['mail'], MAIL_SERVER['sender']['name']);
|
||||||
|
$mail->addAddress(MAIL_SERVER['receiver']['mail'], MAIL_SERVER['receiver']['name']);
|
||||||
|
|
||||||
|
// The message
|
||||||
|
$mail->isHTML(true);
|
||||||
|
$mail->Subject = empty($request['project']['name']) ? 'Заказ' : 'Заказ: ' . $request['project']['name'];
|
||||||
|
$mail->Body = $this->view->render('messages/request.html', $request);
|
||||||
|
/* $mail->AltBody = 'This is the body in plain text for non-HTML mail clients'; */
|
||||||
|
|
||||||
|
// Attachments
|
||||||
|
foreach ($files as $name => $file) {
|
||||||
|
// Iterating of project storage files registry
|
||||||
|
|
||||||
|
// Writing the attachment into the message
|
||||||
|
$mail->addAttachment($file, $name);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Sending the message
|
||||||
|
$mail->send();
|
||||||
|
} catch (mail_exception $exception) {
|
||||||
|
}
|
||||||
|
|
||||||
|
// Sending response
|
||||||
|
$this->response
|
||||||
|
->start()
|
||||||
|
->clean()
|
||||||
|
->sse()
|
||||||
|
->validate($this->request)
|
||||||
|
?->body()
|
||||||
|
->end();
|
||||||
|
|
||||||
|
// Exit (fail)
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
0
kodorvan/perm/system/databases/.gitignore → kodorvan/site/system/databases/.gitignore
vendored
Normal file → Executable file
0
kodorvan/perm/system/databases/.gitignore → kodorvan/site/system/databases/.gitignore
vendored
Normal file → Executable file
0
kodorvan/perm/system/localizations/english.php → kodorvan/site/system/localizations/english.php
Normal file → Executable file
0
kodorvan/perm/system/localizations/english.php → kodorvan/site/system/localizations/english.php
Normal file → Executable file
0
kodorvan/perm/system/localizations/russian.php → kodorvan/site/system/localizations/russian.php
Normal file → Executable file
0
kodorvan/perm/system/localizations/russian.php → kodorvan/site/system/localizations/russian.php
Normal file → Executable file
@@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
declare(strict_types=1);
|
declare(strict_types=1);
|
||||||
|
|
||||||
namespace kodorvan\perm\models;
|
namespace kodorvan\site\models;
|
||||||
|
|
||||||
// Framework for PHP
|
// Framework for PHP
|
||||||
use mirzaev\minimal\model,
|
use mirzaev\minimal\model,
|
||||||
@@ -14,7 +14,7 @@ use exception;
|
|||||||
/**
|
/**
|
||||||
* Models core
|
* Models core
|
||||||
*
|
*
|
||||||
* @package kodorvan\perm\models
|
* @package kodorvan\site\models
|
||||||
*
|
*
|
||||||
* @method void __construct() Constructor
|
* @method void __construct() Constructor
|
||||||
*
|
*
|
||||||
8
kodorvan/site/system/public/css/fonts/akony.css
Executable file
8
kodorvan/site/system/public/css/fonts/akony.css
Executable file
@@ -0,0 +1,8 @@
|
|||||||
|
@charset "UTF-8";
|
||||||
|
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Akony';
|
||||||
|
src: url("/fonts/akony/AKONY.ttf");
|
||||||
|
font-weight: normal;
|
||||||
|
font-style: normal;
|
||||||
|
}
|
||||||
@@ -28,7 +28,7 @@
|
|||||||
font-style: normal;
|
font-style: normal;
|
||||||
}
|
}
|
||||||
|
|
||||||
@font-face {
|
@font-face {
|
||||||
font-family: 'Bahnschrift';
|
font-family: 'Bahnschrift';
|
||||||
src: url("/fonts/bahnschrift/BAHNSCHRIFT 5.TTF");
|
src: url("/fonts/bahnschrift/BAHNSCHRIFT 5.TTF");
|
||||||
font-weight: 500;
|
font-weight: 500;
|
||||||
50
kodorvan/site/system/public/css/fonts/cascadia_code.css
Executable file
50
kodorvan/site/system/public/css/fonts/cascadia_code.css
Executable file
@@ -0,0 +1,50 @@
|
|||||||
|
@charset "UTF-8";
|
||||||
|
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Cascadia Code';
|
||||||
|
src: url("/fonts/cascadia_code/CascadiaCode-ExtraLight.woff2");
|
||||||
|
font-weight: 100;
|
||||||
|
font-style: normal;
|
||||||
|
}
|
||||||
|
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Cascadia Code';
|
||||||
|
src: url("/fonts/cascadia_code/CascadiaCode-Light.woff2");
|
||||||
|
font-weight: 200;
|
||||||
|
font-style: normal;
|
||||||
|
}
|
||||||
|
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Cascadia Code';
|
||||||
|
src: url("/fonts/cascadia_code/CascadiaCode-SemiLight.woff2");
|
||||||
|
font-weight: 300;
|
||||||
|
font-style: normal;
|
||||||
|
}
|
||||||
|
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Cascadia Code';
|
||||||
|
src: url("/fonts/cascadia_code/CascadiaCode-Regular.woff2");
|
||||||
|
font-weight: 400;
|
||||||
|
font-style: normal;
|
||||||
|
}
|
||||||
|
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Cascadia Code';
|
||||||
|
src: url("/fonts/cascadia_code/CascadiaCode-Regular.woff2");
|
||||||
|
font-weight: 500;
|
||||||
|
font-style: normal;
|
||||||
|
}
|
||||||
|
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Cascadia Code';
|
||||||
|
src: url("/fonts/cascadia_code/CascadiaCode-SemiBold.woff2");
|
||||||
|
font-weight: 600;
|
||||||
|
font-style: normal;
|
||||||
|
}
|
||||||
|
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Cascadia Code';
|
||||||
|
src: url("/fonts/cascadia_code/CascadiaCode-Bold.woff2");
|
||||||
|
font-weight: 700;
|
||||||
|
font-style: normal;
|
||||||
|
}
|
||||||
6
kodorvan/site/system/public/css/fonts/commissioner.css
Executable file
6
kodorvan/site/system/public/css/fonts/commissioner.css
Executable file
@@ -0,0 +1,6 @@
|
|||||||
|
@charset "UTF-8";
|
||||||
|
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Commissioner';
|
||||||
|
src: url('/fonts/commissioner.ttf');
|
||||||
|
}
|
||||||
6
kodorvan/site/system/public/css/fonts/compacta.css
Executable file
6
kodorvan/site/system/public/css/fonts/compacta.css
Executable file
@@ -0,0 +1,6 @@
|
|||||||
|
@charset "UTF-8";
|
||||||
|
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Compacta';
|
||||||
|
src: url("/fonts/compacta/compacta_lt_light_compress.otf");
|
||||||
|
}
|
||||||
8
kodorvan/site/system/public/css/fonts/eitai.css
Executable file
8
kodorvan/site/system/public/css/fonts/eitai.css
Executable file
@@ -0,0 +1,8 @@
|
|||||||
|
@charset "UTF-8";
|
||||||
|
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Eitai';
|
||||||
|
src: url("/fonts/eitai/eitai.otf");
|
||||||
|
font-weight: normal;
|
||||||
|
font-style: normal;
|
||||||
|
}
|
||||||
15
kodorvan/site/system/public/css/fonts/gost.css
Executable file
15
kodorvan/site/system/public/css/fonts/gost.css
Executable file
@@ -0,0 +1,15 @@
|
|||||||
|
@charset "UTF-8";
|
||||||
|
|
||||||
|
@font-face {
|
||||||
|
font-family: 'GOST';
|
||||||
|
src: url("/fonts/gost/GOST 2.304-81 type A.ttf");
|
||||||
|
font-weight: 300;
|
||||||
|
font-style: normal;
|
||||||
|
}
|
||||||
|
|
||||||
|
@font-face {
|
||||||
|
font-family: 'GOST';
|
||||||
|
src: url("/fonts/gost/GOST 2.304-81 type B.ttf");
|
||||||
|
font-weight: 400;
|
||||||
|
font-style: normal;
|
||||||
|
}
|
||||||
8
kodorvan/site/system/public/css/fonts/industry.css
Executable file
8
kodorvan/site/system/public/css/fonts/industry.css
Executable file
@@ -0,0 +1,8 @@
|
|||||||
|
@charset "UTF-8";
|
||||||
|
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Industry';
|
||||||
|
src: url("/fonts/industry/Industry-Bold_RUS.ttf");
|
||||||
|
font-weight: normal;
|
||||||
|
font-style: normal;
|
||||||
|
}
|
||||||
63
kodorvan/site/system/public/css/fonts/mt_sans.css
Executable file
63
kodorvan/site/system/public/css/fonts/mt_sans.css
Executable file
@@ -0,0 +1,63 @@
|
|||||||
|
@charset "UTF-8";
|
||||||
|
|
||||||
|
@font-face {
|
||||||
|
font-family: 'MT Sans';
|
||||||
|
src: url("/fonts/mt_sans/MTSans-LightCondensed.ttf");
|
||||||
|
font-weight: 100;
|
||||||
|
font-style: normal;
|
||||||
|
}
|
||||||
|
@font-face {
|
||||||
|
font-family: 'MT Sans';
|
||||||
|
src: url("/fonts/mt_sans/MTSans-LightCondensed.ttf");
|
||||||
|
font-weight: 200;
|
||||||
|
font-style: normal;
|
||||||
|
}
|
||||||
|
|
||||||
|
@font-face {
|
||||||
|
font-family: 'MT Sans';
|
||||||
|
src: url("/fonts/mt_sans/MTSans-LightCondensed.ttf");
|
||||||
|
font-weight: 300;
|
||||||
|
font-style: normal;
|
||||||
|
}
|
||||||
|
|
||||||
|
@font-face {
|
||||||
|
font-family: 'MT Sans';
|
||||||
|
src: url("/fonts/mt_sans/MTSans-RegularCondensed.ttf");
|
||||||
|
font-weight: 400;
|
||||||
|
font-style: normal;
|
||||||
|
}
|
||||||
|
|
||||||
|
@font-face {
|
||||||
|
font-family: 'MT Sans';
|
||||||
|
src: url("/fonts/mt_sans/MTSans-RegularCondensed.ttf");
|
||||||
|
font-weight: 500;
|
||||||
|
font-style: normal;
|
||||||
|
}
|
||||||
|
|
||||||
|
@font-face {
|
||||||
|
font-family: 'MT Sans';
|
||||||
|
src: url("/fonts/mt_sans/MTSans-Bold.ttf");
|
||||||
|
font-weight: 600;
|
||||||
|
font-style: normal;
|
||||||
|
}
|
||||||
|
|
||||||
|
@font-face {
|
||||||
|
font-family: 'MT Sans';
|
||||||
|
src: url("/fonts/mt_sans/MTSans-BoldCondensed.ttf");
|
||||||
|
font-weight: 700;
|
||||||
|
font-style: normal;
|
||||||
|
}
|
||||||
|
|
||||||
|
@font-face {
|
||||||
|
font-family: 'MT Sans';
|
||||||
|
src: url("/fonts/mt_sans/MTSans-BlackCondensed.ttf");
|
||||||
|
font-weight: 800;
|
||||||
|
font-style: normal;
|
||||||
|
}
|
||||||
|
|
||||||
|
@font-face {
|
||||||
|
font-family: 'MT Sans';
|
||||||
|
src: url("/fonts/mt_sans/MTSans-BlackExtended.ttf");
|
||||||
|
font-weight: 900;
|
||||||
|
font-style: normal;
|
||||||
|
}
|
||||||
64
kodorvan/site/system/public/css/fonts/nunito.css
Executable file
64
kodorvan/site/system/public/css/fonts/nunito.css
Executable file
@@ -0,0 +1,64 @@
|
|||||||
|
@charset "UTF-8";
|
||||||
|
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Nunito';
|
||||||
|
src: url("/fonts/nunito/Nunito-ExtraLight.ttf");
|
||||||
|
font-weight: 100;
|
||||||
|
font-style: normal;
|
||||||
|
}
|
||||||
|
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Nunito';
|
||||||
|
src: url("/fonts/nunito/Nunito-Light.ttf");
|
||||||
|
font-weight: 200;
|
||||||
|
font-style: normal;
|
||||||
|
}
|
||||||
|
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Nunito';
|
||||||
|
src: url("/fonts/nunito/Nunito-Regular.ttf");
|
||||||
|
font-weight: 300;
|
||||||
|
font-style: normal;
|
||||||
|
}
|
||||||
|
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Nunito';
|
||||||
|
src: url("/fonts/nunito/Nunito-Regular.ttf");
|
||||||
|
font-weight: 400;
|
||||||
|
font-style: normal;
|
||||||
|
}
|
||||||
|
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Nunito';
|
||||||
|
src: url("/fonts/nunito/Nunito-Medium.ttf");
|
||||||
|
font-weight: 500;
|
||||||
|
font-style: normal;
|
||||||
|
}
|
||||||
|
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Nunito';
|
||||||
|
src: url("/fonts/nunito/Nunito-Bold.ttf");
|
||||||
|
font-weight: 600;
|
||||||
|
font-style: normal;
|
||||||
|
}
|
||||||
|
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Nunito';
|
||||||
|
src: url("/fonts/nunito/Nunito-ExtraBold.ttf");
|
||||||
|
font-weight: 700;
|
||||||
|
font-style: normal;
|
||||||
|
}
|
||||||
|
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Nunito';
|
||||||
|
src: url("/fonts/nunito/Nunito-Black.ttf");
|
||||||
|
font-weight: 800;
|
||||||
|
font-style: normal;
|
||||||
|
}
|
||||||
|
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Nunito';
|
||||||
|
src: url("/fonts/nunito/Nunito-Black.ttf");
|
||||||
|
font-weight: 900;
|
||||||
|
font-style: normal;
|
||||||
|
}
|
||||||
8
kodorvan/site/system/public/css/fonts/palui.css
Executable file
8
kodorvan/site/system/public/css/fonts/palui.css
Executable file
@@ -0,0 +1,8 @@
|
|||||||
|
@charset "UTF-8";
|
||||||
|
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Palui';
|
||||||
|
src: url("/fonts/palui/PaluiSPDemo-Bold.otf");
|
||||||
|
font-weight: normal;
|
||||||
|
font-style: normal;
|
||||||
|
}
|
||||||
6
kodorvan/site/system/public/css/fonts/slifted.css
Executable file
6
kodorvan/site/system/public/css/fonts/slifted.css
Executable file
@@ -0,0 +1,6 @@
|
|||||||
|
@charset "UTF-8";
|
||||||
|
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Slifted';
|
||||||
|
src: url("/fonts/slifted/slifted.otf");
|
||||||
|
}
|
||||||
6
kodorvan/site/system/public/css/fonts/urban_slavic.css
Executable file
6
kodorvan/site/system/public/css/fonts/urban_slavic.css
Executable file
@@ -0,0 +1,6 @@
|
|||||||
|
@charset "UTF-8";
|
||||||
|
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Urban Slavic';
|
||||||
|
src: url("/fonts/urban_slavic/UrbanSlavic.otf");
|
||||||
|
}
|
||||||
6
kodorvan/site/system/public/css/fonts/vredina.css
Executable file
6
kodorvan/site/system/public/css/fonts/vredina.css
Executable file
@@ -0,0 +1,6 @@
|
|||||||
|
@charset "UTF-8";
|
||||||
|
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Vredina';
|
||||||
|
src: url("/fonts/vredina/SAVredina-ThinUltraCondensed.woff");
|
||||||
|
}
|
||||||
BIN
kodorvan/site/system/public/fonts/akony/AKONY.ttf
Normal file
BIN
kodorvan/site/system/public/fonts/akony/AKONY.ttf
Normal file
Binary file not shown.
0
kodorvan/perm/system/public/fonts/bahnschrift/BAHNSCHRIFT.TTF → kodorvan/site/system/public/fonts/bahnschrift/BAHNSCHRIFT.TTF
Normal file → Executable file
0
kodorvan/perm/system/public/fonts/bahnschrift/BAHNSCHRIFT.TTF → kodorvan/site/system/public/fonts/bahnschrift/BAHNSCHRIFT.TTF
Normal file → Executable file
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user