diff --git a/composer.json b/composer.json index c42153b..c195826 100755 --- a/composer.json +++ b/composer.json @@ -32,7 +32,9 @@ "twig/twig": "^3.2", "twig/extra-bundle": "^3.7", "twig/intl-extra": "^3.10", - "phpmailer/phpmailer": "^7.0" + "phpmailer/phpmailer": "^7.0", + "mirzaev/record": "^2.2", + "svoboda/time": "^1.0" }, "suggest": { "mirzaev/files": "Easy working with files", diff --git a/composer.lock b/composer.lock index 3d859af..eb8ccd1 100755 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "3d3b850ebd1027cf1790dfa901746eab", + "content-hash": "15ac0ce9a39edb330d95b578175d5636", "packages": [ { "name": "mirzaev/baza", @@ -141,6 +141,48 @@ }, "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", "version": "4.8.10", @@ -540,6 +582,39 @@ }, "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", "version": "v8.0.8", diff --git a/kodorvan/site/system/controllers/index.php b/kodorvan/site/system/controllers/index.php index 54efa1e..31fc81e 100755 --- a/kodorvan/site/system/controllers/index.php +++ b/kodorvan/site/system/controllers/index.php @@ -248,7 +248,7 @@ final class index extends core // Render page $page = $this->view->render( - 'main/index.html', + 'pages/index.html', [ 'smartphone' => $this->request->smartphone, 'tablet' => $this->request->tablet diff --git a/kodorvan/site/system/controllers/offer.php b/kodorvan/site/system/controllers/offer.php index 7df1158..3903061 100755 --- a/kodorvan/site/system/controllers/offer.php +++ b/kodorvan/site/system/controllers/offer.php @@ -46,7 +46,7 @@ final class offer extends core // Render page $page = $this->view->render( - 'main/offer.html', + 'pages/offer.html', [ 'smartphone' => $this->request->smartphone, 'tablet' => $this->request->tablet diff --git a/kodorvan/site/system/controllers/superpack.php b/kodorvan/site/system/controllers/superpack.php new file mode 100755 index 0000000..a05fbe7 --- /dev/null +++ b/kodorvan/site/system/controllers/superpack.php @@ -0,0 +1,98 @@ + + */ +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; + } +} diff --git a/kodorvan/site/system/models/superpack.php b/kodorvan/site/system/models/superpack.php new file mode 100644 index 0000000..8ae25d7 --- /dev/null +++ b/kodorvan/site/system/models/superpack.php @@ -0,0 +1,215 @@ + + */ +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; + } */ +} diff --git a/kodorvan/site/system/public/index.php b/kodorvan/site/system/public/index.php index 8538013..3f0d94d 100755 --- a/kodorvan/site/system/public/index.php +++ b/kodorvan/site/system/public/index.php @@ -47,6 +47,11 @@ $core = new core(namespace: __NAMESPACE__); $core->router ->write('/', new route('index', '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') ; diff --git a/kodorvan/site/system/public/js/core.js b/kodorvan/site/system/public/js/core.js index e543a7a..f760d0f 100644 --- a/kodorvan/site/system/public/js/core.js +++ b/kodorvan/site/system/public/js/core.js @@ -16,9 +16,6 @@ class core { // Language static language = "ru"; - // Theme - static theme = window.getComputedStyle(document.getElementById('theme')); - // Window static window; diff --git a/kodorvan/site/system/public/js/modules/project.mjs b/kodorvan/site/system/public/js/modules/project.mjs index 516946f..44a2a83 100644 --- a/kodorvan/site/system/public/js/modules/project.mjs +++ b/kodorvan/site/system/public/js/modules/project.mjs @@ -1860,7 +1860,7 @@ export default class project { rofls.style.removeProperty('display'); // Starting the rofls hotline.mjs instance - rofls.instance.start(); + rofls.hotline.start(); // Exit (success) resolve(); diff --git a/kodorvan/site/system/public/js/three.core.js b/kodorvan/site/system/public/js/three.core.js deleted file mode 120000 index 544bf9a..0000000 --- a/kodorvan/site/system/public/js/three.core.js +++ /dev/null @@ -1 +0,0 @@ -../../../../../three.js/build/three.core.js \ No newline at end of file diff --git a/kodorvan/site/system/public/js/three.module.js b/kodorvan/site/system/public/js/three.module.js deleted file mode 120000 index 45304b5..0000000 --- a/kodorvan/site/system/public/js/three.module.js +++ /dev/null @@ -1 +0,0 @@ -../../../../../three.js/build/three.module.js \ No newline at end of file diff --git a/kodorvan/site/system/public/themes/default/css/colorscheme.css b/kodorvan/site/system/public/themes/default/css/colorscheme.css index 29d123e..0fe22e3 100755 --- a/kodorvan/site/system/public/themes/default/css/colorscheme.css +++ b/kodorvan/site/system/public/themes/default/css/colorscheme.css @@ -4,6 +4,9 @@ :root { --text-color: #fff; --text-color-inverted: #000; + --link-color: #475bf9; + --link-hover-color: #6375ff; + --link-active-color: #3d53f6; --button-background-color: #fff; --button-background-color-inverted: #000; --button-hover-background-color: #abc7c6; @@ -55,6 +58,9 @@ :root { --text-color: #fff; --text-color-inverted: #000; + --link-color: #475bf9; + --link-hover-color: #6375ff; + --link-active-color: #3d53f6; --button-background-color: #fff; --button-background-color-inverted: #000; --button-hover-background-color: #abc7c6; diff --git a/kodorvan/site/system/public/themes/default/css/elements/project.css b/kodorvan/site/system/public/themes/default/css/elements/project.css index 235ffea..71d36ff 100755 --- a/kodorvan/site/system/public/themes/default/css/elements/project.css +++ b/kodorvan/site/system/public/themes/default/css/elements/project.css @@ -978,23 +978,21 @@ section#project { font-weight: 600; } - >p { - margin: unset; - display: flex; - gap: 0.4rem; - 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; + >div.sim { + a.number { + margin: unset; + color: #fff; 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; + } } } } diff --git a/kodorvan/site/system/public/themes/default/css/fonts.css b/kodorvan/site/system/public/themes/default/css/fonts.css index 3737a14..22ff313 100755 --- a/kodorvan/site/system/public/themes/default/css/fonts.css +++ b/kodorvan/site/system/public/themes/default/css/fonts.css @@ -4,7 +4,7 @@ @import url('/css/fonts/nunito.css'); @import url('/css/fonts/cascadia_code.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/vredina.css'); */ @import url('/css/fonts/gost.css'); @@ -14,5 +14,5 @@ /* @import url('/css/fonts/urban_slavic.css'); */ /* @import url('/css/fonts/slifted.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'); */ diff --git a/kodorvan/site/system/public/themes/default/css/footer.css b/kodorvan/site/system/public/themes/default/css/footer.css index 037a45f..f6cb60d 100755 --- a/kodorvan/site/system/public/themes/default/css/footer.css +++ b/kodorvan/site/system/public/themes/default/css/footer.css @@ -3,42 +3,33 @@ footer { z-index: 4000; position: relative; - height: var(--footer-height, 200px); + min-height: 230px; + height: var(--footer-height, 230px); + box-sizing: border-box; padding: 2rem 10vw; display: flex; - align-items: self-end; + flex-direction: column; justify-content: space-between; - gap: 3rem; - /* overflow: hidden; */ + gap: 2rem; color: #fff; background-color: #000; >div.sector { height: 100%; display: flex; - flex-direction: column; - justify-content: end; + flex-direction: row; + justify-content: space-between; gap: 2rem; - &.company { - justify-content: space-between; - align-items: end; - - >article#contacts { - display: flex; - flex-direction: column; - align-items: end; - } - } - - >article#office { - width: 250px; - height: 100%; + >article.company { + flex-grow: 1; display: flex; + gap: 2rem; >div.map { - width: 100%; - height: 100%; + max-width: 350px; + width: 250px; + flex-grow: 3; overflow: hidden; border-radius: 0.75rem; border: 2px solid #474023; @@ -70,143 +61,145 @@ footer { } } } - } - nav#links { - flex-grow: 1; - display: inline-flex; - justify-content: center; - gap: 1rem; + >div.information { + min-width: 230px; + max-width: 250px; + justify-self: end; + flex-grow: 1; + display: flex; + flex-direction: column; + gap: 0.5rem; + font-family: "Cascadia Code"; - >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; + >h1.name { + margin: unset; + display: block; + font-weight: 600; + font-size: 1rem; } - &:active { - color: #4b4b4b; - transition: color 0s; + >p.column { + margin: unset; + display: inline-flex; + flex-direction: column; + gap: 0.2em; + font-size: 0.8rem; + color: #a3a396; + + ::selection { + 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) ":"; + } + } + } + + >p.worktime { + margin: unset; + margin-top: auto; + display: flex; + gap: 0.5em; + font-family: "Bahnschrift"; + + >span.time.from { + 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#contacts { - >h1.sim { + >article.contacts { + min-height: 100px; + display: flex; + flex-direction: column; + align-items: end; + text-align: right; + + >div.media { margin: unset; - display: flex; - gap: 0.4em; - font-size: 1.4em; + margin-top: auto; + justify-content: end; + } - >span.country:before { - content: '+'; - } - - >span.operator:before { - content: '('; - } - - >span.operator:after { - content: ')'; + >div.sim { + a.number { + color: #fff; } } >a.mail { margin-top: 0.2em; - } - - >p.worktime { - margin: unset; - margin-top: 0.8em; - display: flex; - gap: 0.5em; - - >span.time.from { - 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'); - } - } + margin-bottom: 1rem; + font-family: "Cascadia Code"; } } + } - >article#company { - justify-self: end; - width: 160px; - display: flex; - flex-direction: column; - gap: 0.5rem; - font-family: "Cascadia Code"; + >nav#links { + display: inline-flex; + justify-content: start; + gap: 1rem; - >h1.name { - margin: unset; - display: block; - text-align: right; - font-weight: 600; - font-size: 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; } - >p.column { - margin: unset; - display: inline-flex; - flex-direction: column; - text-align: right; - gap: 0.2em; - font-size: 0.8rem; - color: #a3a396; - - ::selection { - 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) ":"; - } - } + &:active { + color: #4b4b4b; + transition: color 0s; } } } @@ -233,52 +226,48 @@ footer { @media (width < 1200px) { footer { height: unset; - flex-direction: column; - align-items: center; >div.sector { width: 100%; + flex-direction: column; - >article#office { - width: 100%; - height: 100px; + >article.company { + >div.map { + max-width: unset; + width: 100%; + height: 150px; + } } - nav#links { - display: inline-flex; - justify-content: space-between; - gap: 1rem; - flex-flow: wrap row; + >article.contacts { align-items: center; } + } - &:is(.company) { - flex-direction: row; - - >article#contacts { - align-items: start; - } - } + >nav#links { + display: inline-flex; + /* justify-content: space-between; */ + flex-flow: wrap row; + justify-content: center; + gap: 1rem; } } } -@media (width < 520px) { +@media (width < 800px) { footer { >div.sector { - &:is(.company) { + >article.company { flex-direction: column; - gap: 3rem; - >article#contacts { - width: 100%; - align-items: center; - } - - >article#company { - width: 100%; + >div.information { + max-width: unset; } } } + + >nav#links { + justify-content: space-between; + } } } diff --git a/kodorvan/site/system/public/themes/default/css/interface/logotype.css b/kodorvan/site/system/public/themes/default/css/interface/logotype.css new file mode 100644 index 0000000..633552d --- /dev/null +++ b/kodorvan/site/system/public/themes/default/css/interface/logotype.css @@ -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 */ + } +} diff --git a/kodorvan/site/system/public/themes/default/css/interface/media.css b/kodorvan/site/system/public/themes/default/css/interface/media.css new file mode 100755 index 0000000..9c1a038 --- /dev/null +++ b/kodorvan/site/system/public/themes/default/css/interface/media.css @@ -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%; + } + } +} diff --git a/kodorvan/site/system/public/themes/default/css/interface/sim.css b/kodorvan/site/system/public/themes/default/css/interface/sim.css new file mode 100755 index 0000000..37a3560 --- /dev/null +++ b/kodorvan/site/system/public/themes/default/css/interface/sim.css @@ -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; + } + } +} diff --git a/kodorvan/site/system/public/themes/default/css/main.css b/kodorvan/site/system/public/themes/default/css/main.css index 1c5ade9..425c48a 100755 --- a/kodorvan/site/system/public/themes/default/css/main.css +++ b/kodorvan/site/system/public/themes/default/css/main.css @@ -11,6 +11,8 @@ main { align-items: center; transition: 0s; overflow-x: hidden; + overflow-y: scroll; + overscroll-behavior: none; &:not(:has(*)) { display: none; diff --git a/kodorvan/site/system/public/themes/default/css/pages/index.css b/kodorvan/site/system/public/themes/default/css/pages/index.css index 2b838d3..8e804d1 100755 --- a/kodorvan/site/system/public/themes/default/css/pages/index.css +++ b/kodorvan/site/system/public/themes/default/css/pages/index.css @@ -1,43 +1,7 @@ @charset "UTF-8"; body { - 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 */ - } - } - + >main { >section.section { z-index: 500; width: 100%; diff --git a/kodorvan/site/system/public/themes/default/css/pages/offer.css b/kodorvan/site/system/public/themes/default/css/pages/offer.css index ef90822..8dcbfa4 100755 --- a/kodorvan/site/system/public/themes/default/css/pages/offer.css +++ b/kodorvan/site/system/public/themes/default/css/pages/offer.css @@ -1,7 +1,7 @@ @charset "UTF-8"; body { - main { + >main { >h1#title { z-index: 200; margin: unset; @@ -89,3 +89,15 @@ body { transform-origin: top left; } } + +@media (width < 1000px) { + body { + >main { + >article#offer { + margin-bottom: unset; + width: 100%; + border-radius: unset; + } + } + } +} diff --git a/kodorvan/site/system/public/themes/default/css/system.css b/kodorvan/site/system/public/themes/default/css/system.css index 4980a8c..f5c3b56 100755 --- a/kodorvan/site/system/public/themes/default/css/system.css +++ b/kodorvan/site/system/public/themes/default/css/system.css @@ -20,18 +20,12 @@ --cookies-width: 24rem; --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; text-decoration: none; outline: none; border: none; transition: 0.1s ease-out; + overscroll-behavior: none; } ::selection { @@ -50,33 +44,33 @@ body { margin: unset; width: 100vw; overflow-x: hidden; + /* background: var(--background-color, #fff); background: var(--background-gradient); */ background-color: #020c13; } a { - font-family: "Cascadia Code"; text-decoration: unset; - color: #094ef2; + color: var(--link-color); &:is(:hover, :focus) { - color: #487dfa; + color: var(--link-hover-color); } &:active { - color: #1224bc; + color: var(--link-active-color); } &::selection { - color: #094ef2; - background: #FAA; + color: #094ef2; + background: #FFF; text-shadow: none; } &::-moz-selection { - color: #094ef2; - background: #FAA; + color: #094ef2; + background: #FFF; text-shadow: none; } } @@ -148,28 +142,34 @@ textarea { } button { - padding: 0.77em 1.3em 0.6em; - cursor: pointer; font-family: Bahnschrift; font-weight: 400; + cursor: pointer; outline: unset; - border-radius: 0.75rem; - border: 1px solid #000; background: unset; - &:not(:disabled) { - &:is(:hover, :focus) { - background-color: #e7e6e0; - } - - &:active { - background-color: #c0bfb4; - } - } - &:disabled { cursor: not-allowed; - background-color: #08111d17; - filter: grayscale(1) brightness(0.55); + } + + &: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); + } } } diff --git a/kodorvan/site/system/public/themes/default/images/icons/copy.svg b/kodorvan/site/system/public/themes/default/images/icons/copy.svg new file mode 100644 index 0000000..4a13a7c --- /dev/null +++ b/kodorvan/site/system/public/themes/default/images/icons/copy.svg @@ -0,0 +1,17 @@ + + + + + + \ No newline at end of file diff --git a/kodorvan/site/system/public/themes/default/images/icons/kodorvan.svg b/kodorvan/site/system/public/themes/default/images/icons/kodorvan.svg index c6ccdcd..a312b81 100644 --- a/kodorvan/site/system/public/themes/default/images/icons/kodorvan.svg +++ b/kodorvan/site/system/public/themes/default/images/icons/kodorvan.svg @@ -1,71 +1 @@ - - - - - - - - - - - - - - - - - - - - + \ No newline at end of file diff --git a/kodorvan/site/system/public/themes/default/images/icons/max.svg b/kodorvan/site/system/public/themes/default/images/icons/max.svg new file mode 100644 index 0000000..195078b --- /dev/null +++ b/kodorvan/site/system/public/themes/default/images/icons/max.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/kodorvan/site/system/public/themes/default/images/icons/telegram.svg b/kodorvan/site/system/public/themes/default/images/icons/telegram.svg old mode 100755 new mode 100644 index c67526f..778fd81 --- a/kodorvan/site/system/public/themes/default/images/icons/telegram.svg +++ b/kodorvan/site/system/public/themes/default/images/icons/telegram.svg @@ -1,16 +1 @@ - - - - Artboard - Created with Sketch. - - - - - - - - - - - \ No newline at end of file + \ No newline at end of file diff --git a/kodorvan/site/system/public/themes/default/images/icons/white/copy.svg b/kodorvan/site/system/public/themes/default/images/icons/white/copy.svg new file mode 100644 index 0000000..2427c75 --- /dev/null +++ b/kodorvan/site/system/public/themes/default/images/icons/white/copy.svg @@ -0,0 +1,17 @@ + + + + + + diff --git a/kodorvan/site/system/storage/projects/.gitignore b/kodorvan/site/system/storage/projects/.gitignore new file mode 100644 index 0000000..d6b7ef3 --- /dev/null +++ b/kodorvan/site/system/storage/projects/.gitignore @@ -0,0 +1,2 @@ +* +!.gitignore diff --git a/kodorvan/site/system/views/themes/default/elements/cookies.html b/kodorvan/site/system/views/themes/default/elements/cookies.html index 72ac29f..493da58 100755 --- a/kodorvan/site/system/views/themes/default/elements/cookies.html +++ b/kodorvan/site/system/views/themes/default/elements/cookies.html @@ -1,11 +1,19 @@
-
diff --git a/kodorvan/site/system/views/themes/default/elements/project.html b/kodorvan/site/system/views/themes/default/elements/project.html index 3b728ba..7182cf2 100755 --- a/kodorvan/site/system/views/themes/default/elements/project.html +++ b/kodorvan/site/system/views/themes/default/elements/project.html @@ -329,10 +329,11 @@ - Создан для удобного планирования и не является публичной офертой + Создан для удобного планирования и не является публичной офертой
-

79015924211

+ {% include '/themes/default/interface/media.html' %} + {% include '/themes/default/interface/sim.html' %} ЗВОНИТЕ ПО НОМЕРУ
diff --git a/kodorvan/site/system/views/themes/default/footer.html b/kodorvan/site/system/views/themes/default/footer.html index 95ac16b..b54e5b2 100755 --- a/kodorvan/site/system/views/themes/default/footer.html +++ b/kodorvan/site/system/views/themes/default/footer.html @@ -15,48 +15,42 @@ {% block body %} {% include '/themes/default/elements/rofls.html' %} {% endblock %} diff --git a/kodorvan/site/system/views/themes/default/head.html b/kodorvan/site/system/views/themes/default/head.html index 74bce74..d7ffc30 100755 --- a/kodorvan/site/system/views/themes/default/head.html +++ b/kodorvan/site/system/views/themes/default/head.html @@ -1,7 +1,9 @@ {% block meta %} - {% if head.title != empty %}{{ head.title }}{% else %}Кодорвань - разработка сайтов в Перми{% endif %} + + + {{ title ?? 'Кодорвань - разработка сайтов в Перми' }} @@ -12,12 +14,24 @@ - - + + - - + + + {% if opengraph.image.uri is not empty %} + + {% if opengraph.image.width is not empty %} + + {% endif %} + {% if opengraph.image.height is not empty %} + + {% endif %} + {% if opengraph.image.alt is not empty %} + + {% endif %} + {% endif %} @@ -59,26 +73,26 @@ {% for meta in head.metas %} - + {% endfor %} {% endblock %} @@ -86,16 +100,18 @@ {% for element in css %} {% endfor %} - + + + + + - -