From 995960380eabba5a751df8e796f3a786c327294f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=90=D0=BD=D0=B4=D1=80=D0=B5=D0=B9=20=20=D0=9B=D0=B0=D1=80?= =?UTF-8?q?=D0=B8=D0=BE=D0=BD=D0=BE=D0=B2?= Date: Mon, 17 Apr 2023 16:43:04 +0700 Subject: [PATCH] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2=D0=BB=D0=B5=D0?= =?UTF-8?q?=BD=D0=B8=D1=8F=20=D0=BE=D1=84=D0=B8=D1=81=D0=BE=D0=B2=20=D0=BD=D0?= =?UTF-8?q?=B0=20=D0=BF=D0=BE=D0=BC=D0=B5=D1=89=D0=B5=D0=BD=D0=B8=D1=8F,=20=D0?= =?UTF-8?q?=B3=D0=B5=D0=BD=D0=B5=D1=80=D0=B0=D1=82=D0=BE=D1=80=20pdf?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .htaccess | 1 + .../Controllers/Admin/CompanyAreaController.php | 2 +- app/Http/Controllers/Admin/HousesController.php | 11 +- app/Http/Controllers/MainController.php | 14 +- app/Http/Requests/HousesRequest.php | 41 +- composer.json | 1 + composer.lock | 353 +- config/app.php | 2 + config/dompdf.php | 284 + config/flare.php | 80 + config/ignition.php | 234 + config/tinker.php | 50 + docker/7.4/Dockerfile | 57 + docker/7.4/php.ini | 4 + docker/7.4/start-container | 17 + docker/7.4/supervisord.conf | 14 + docker/8.0/Dockerfile | 59 + docker/8.0/php.ini | 4 + docker/8.0/start-container | 17 + docker/8.0/supervisord.conf | 14 + docker/8.1/Dockerfile | 58 + docker/8.1/php.ini | 4 + docker/8.1/start-container | 17 + docker/8.1/supervisord.conf | 14 + docker/8.2/Dockerfile | 58 + docker/8.2/php.ini | 4 + docker/8.2/start-container | 17 + docker/8.2/supervisord.conf | 14 + public/.htaccess | 1 + public/css/style.css | 6398 ------------------- public/css/style_main.css | 6432 ++++++++++++++++++++ public/images/NLS_logo.png | Bin 0 -> 241 bytes public/images/author-nls.svg | 23 + resources/views/admin/houses/add_img.blade.php | 8 +- resources/views/admin/houses/create.blade.php | 8 +- resources/views/admin/houses/edit.blade.php | 8 +- resources/views/admin/houses/form.blade.php | 169 +- resources/views/admin/houses/index.blade.php | 8 +- resources/views/admin/houses/view_img.blade.php | 10 +- resources/views/admin/index.blade.php | 2 +- resources/views/errors/401.blade.php | 5 + resources/views/errors/402.blade.php | 5 + resources/views/errors/403.blade.php | 5 + resources/views/errors/419.blade.php | 5 + resources/views/errors/429.blade.php | 5 + resources/views/errors/500.blade.php | 5 + resources/views/errors/503.blade.php | 5 + resources/views/errors/layout.blade.php | 53 + resources/views/errors/minimal.blade.php | 34 + resources/views/house/pdf.blade.php | 72 + resources/views/house/post.blade.php | 17 +- resources/views/layout/admin.blade.php | 9 +- resources/views/layout/site.blade.php | 14 +- resources/views/vendor/mail/html/button.blade.php | 24 + resources/views/vendor/mail/html/footer.blade.php | 11 + resources/views/vendor/mail/html/header.blade.php | 12 + resources/views/vendor/mail/html/layout.blade.php | 57 + resources/views/vendor/mail/html/message.blade.php | 27 + resources/views/vendor/mail/html/panel.blade.php | 14 + resources/views/vendor/mail/html/subcopy.blade.php | 7 + resources/views/vendor/mail/html/table.blade.php | 3 + .../views/vendor/mail/html/themes/default.css | 290 + resources/views/vendor/mail/text/button.blade.php | 1 + resources/views/vendor/mail/text/footer.blade.php | 1 + resources/views/vendor/mail/text/header.blade.php | 1 + resources/views/vendor/mail/text/layout.blade.php | 9 + resources/views/vendor/mail/text/message.blade.php | 27 + resources/views/vendor/mail/text/panel.blade.php | 1 + resources/views/vendor/mail/text/subcopy.blade.php | 1 + resources/views/vendor/mail/text/table.blade.php | 1 + .../views/vendor/notifications/email.blade.php | 58 + .../views/vendor/pagination/bootstrap-4.blade.php | 46 + .../views/vendor/pagination/bootstrap-5.blade.php | 88 + .../views/vendor/pagination/default.blade.php | 46 + .../views/vendor/pagination/semantic-ui.blade.php | 36 + .../vendor/pagination/simple-bootstrap-4.blade.php | 27 + .../vendor/pagination/simple-bootstrap-5.blade.php | 29 + .../vendor/pagination/simple-default.blade.php | 19 + .../vendor/pagination/simple-tailwind.blade.php | 25 + .../views/vendor/pagination/tailwind.blade.php | 106 + routes/web.php | 3 + sail | 516 ++ 82 files changed, 9657 insertions(+), 6575 deletions(-) create mode 100644 config/dompdf.php create mode 100644 config/flare.php create mode 100644 config/ignition.php create mode 100644 config/tinker.php create mode 100644 docker/7.4/Dockerfile create mode 100644 docker/7.4/php.ini create mode 100644 docker/7.4/start-container create mode 100644 docker/7.4/supervisord.conf create mode 100644 docker/8.0/Dockerfile create mode 100644 docker/8.0/php.ini create mode 100644 docker/8.0/start-container create mode 100644 docker/8.0/supervisord.conf create mode 100644 docker/8.1/Dockerfile create mode 100644 docker/8.1/php.ini create mode 100644 docker/8.1/start-container create mode 100644 docker/8.1/supervisord.conf create mode 100644 docker/8.2/Dockerfile create mode 100644 docker/8.2/php.ini create mode 100644 docker/8.2/start-container create mode 100644 docker/8.2/supervisord.conf delete mode 100644 public/css/style.css create mode 100644 public/css/style_main.css create mode 100644 public/images/NLS_logo.png create mode 100644 public/images/author-nls.svg create mode 100644 resources/views/errors/401.blade.php create mode 100644 resources/views/errors/402.blade.php create mode 100644 resources/views/errors/403.blade.php create mode 100644 resources/views/errors/419.blade.php create mode 100644 resources/views/errors/429.blade.php create mode 100644 resources/views/errors/500.blade.php create mode 100644 resources/views/errors/503.blade.php create mode 100644 resources/views/errors/layout.blade.php create mode 100644 resources/views/errors/minimal.blade.php create mode 100644 resources/views/house/pdf.blade.php create mode 100644 resources/views/vendor/mail/html/button.blade.php create mode 100644 resources/views/vendor/mail/html/footer.blade.php create mode 100644 resources/views/vendor/mail/html/header.blade.php create mode 100644 resources/views/vendor/mail/html/layout.blade.php create mode 100644 resources/views/vendor/mail/html/message.blade.php create mode 100644 resources/views/vendor/mail/html/panel.blade.php create mode 100644 resources/views/vendor/mail/html/subcopy.blade.php create mode 100644 resources/views/vendor/mail/html/table.blade.php create mode 100644 resources/views/vendor/mail/html/themes/default.css create mode 100644 resources/views/vendor/mail/text/button.blade.php create mode 100644 resources/views/vendor/mail/text/footer.blade.php create mode 100644 resources/views/vendor/mail/text/header.blade.php create mode 100644 resources/views/vendor/mail/text/layout.blade.php create mode 100644 resources/views/vendor/mail/text/message.blade.php create mode 100644 resources/views/vendor/mail/text/panel.blade.php create mode 100644 resources/views/vendor/mail/text/subcopy.blade.php create mode 100644 resources/views/vendor/mail/text/table.blade.php create mode 100644 resources/views/vendor/notifications/email.blade.php create mode 100644 resources/views/vendor/pagination/bootstrap-4.blade.php create mode 100644 resources/views/vendor/pagination/bootstrap-5.blade.php create mode 100644 resources/views/vendor/pagination/default.blade.php create mode 100644 resources/views/vendor/pagination/semantic-ui.blade.php create mode 100644 resources/views/vendor/pagination/simple-bootstrap-4.blade.php create mode 100644 resources/views/vendor/pagination/simple-bootstrap-5.blade.php create mode 100644 resources/views/vendor/pagination/simple-default.blade.php create mode 100644 resources/views/vendor/pagination/simple-tailwind.blade.php create mode 100644 resources/views/vendor/pagination/tailwind.blade.php create mode 100644 sail diff --git a/.htaccess b/.htaccess index 430f730..249c7ef 100644 --- a/.htaccess +++ b/.htaccess @@ -1,3 +1,4 @@ +AddDefaultCharset UTF-8 RewriteEngine on RewriteRule ^(.*)$ public/$1 [L] diff --git a/app/Http/Controllers/Admin/CompanyAreaController.php b/app/Http/Controllers/Admin/CompanyAreaController.php index 3cdf2d5..a62d322 100644 --- a/app/Http/Controllers/Admin/CompanyAreaController.php +++ b/app/Http/Controllers/Admin/CompanyAreaController.php @@ -122,7 +122,7 @@ class CompanyAreaController extends Controller public function add_partner_post(Request $request) { $rules = [ 'name' => 'required|min:3|max:255', - 'foto' => 'required|min:3|max:255', + 'foto' => 'required|min:3|max:10000', ]; $messages = [ 'required' => 'Укажите обязательное поле', diff --git a/app/Http/Controllers/Admin/HousesController.php b/app/Http/Controllers/Admin/HousesController.php index 413571c..52d07f6 100644 --- a/app/Http/Controllers/Admin/HousesController.php +++ b/app/Http/Controllers/Admin/HousesController.php @@ -109,21 +109,29 @@ class HousesController extends Controller if ($request->has('foto_main')) { Storage::delete($house->foto_main); $params['foto_main'] = $request->file('foto_main')->store('houses', 'public'); + } else { + if (!empty($house->foto_main)) $params['foto_main'] = $house->foto_main; } if ($request->has('object_plan')) { Storage::delete($house->object_plan); $params['object_plan'] = $request->file('object_plan')->store('houses', 'public'); + } else { + if (!empty($house->object_plan)) $params['object_plan'] = $house->object_plan; } if ($request->has('floor_plan')) { Storage::delete($house->floor_plan); $params['floor_plan'] = $request->file('floor_plan')->store('houses', 'public'); + } else { + if (!empty($house->floor_plan)) $params['floor_plan'] = $house->floor_plan; } if ($request->has('present')) { Storage::delete($house->present); $params['present'] = $request->file('present')->store('houses', 'public'); + } else { + if (!empty($house->present)) $params['present'] = $house->present; } $house->update($params); @@ -148,10 +156,11 @@ class HousesController extends Controller public function add_images_store(Request $request, House $house) { $rules = [ - 'foto' => 'required|min:3|max:255', + 'foto' => 'required|min:1|max:10000', ]; $messages = [ 'required' => 'Укажите обязательное поле', + ]; $validator = Validator::make($request->all(), $rules, $messages); diff --git a/app/Http/Controllers/MainController.php b/app/Http/Controllers/MainController.php index 59143ed..0bd0dbd 100644 --- a/app/Http/Controllers/MainController.php +++ b/app/Http/Controllers/MainController.php @@ -15,6 +15,7 @@ use App\Models\News; use App\Models\Page; use App\Models\Partners; use App\Models\type_area; +use Barryvdh\DomPDF\Facade\Pdf; use Illuminate\Database\Eloquent\Model; use Illuminate\Http\Request; use App\Classes\RusDate; @@ -24,6 +25,7 @@ use PhpParser\Node\Stmt\Switch_; use Illuminate\Support\Facades\Response; use App\Classes\FilterData; //use App\Mail\SendMail; +//use PDF; class MainController extends Controller { @@ -594,7 +596,17 @@ class MainController extends Controller // выводим количество пользователей гостей данной страницы $count_user = DB::table('pages')->where('url', '=', "$url")->get(); - return view('house.post', compact('house', 'houses', 'count_user')); + $title = $house->title; + + return view('house.post', compact('house', 'houses', 'count_user', 'title')); + } + + public function generate_PDF(House $house) { + $arr_house = ['0' => $house]; + view()->share('house',$arr_house); + $pdf = PDF::loadView('house.pdf', $arr_house); + $id = $house->id; + return $pdf->download("pdf_file_".$id.".pdf"); } /* diff --git a/app/Http/Requests/HousesRequest.php b/app/Http/Requests/HousesRequest.php index 3695875..30cda54 100644 --- a/app/Http/Requests/HousesRequest.php +++ b/app/Http/Requests/HousesRequest.php @@ -45,8 +45,44 @@ class HousesRequest extends FormRequest ], 'price' => [ 'required', - 'min:1', - 'max:100', + 'numeric', + 'min:0', + 'max:9999999', + ], + 'area' => [ + 'numeric', + 'min:0', + 'max:9999999', + ], + 'floor' => [ + 'numeric', + 'min:0', + 'max:9999999', + ], + 'floor_bild' => [ + 'numeric', + 'min:0', + 'max:9999999', + ], + 'price_m2' => [ + 'numeric', + 'min:0', + 'max:9999999', + ], + 'rent_in_year' => [ + 'numeric', + 'min:0', + 'max:9999999', + ], + 'windows' => [ + 'numeric', + 'min:0', + 'max:9999999', + ], + 'parking' => [ + 'numeric', + 'min:0', + 'max:9999999', ], 'foto_main' => [ 'mimes:jpeg,jpg,png', @@ -68,6 +104,7 @@ class HousesRequest extends FormRequest 'file' => 'Файл «:attribute» должен быть не больше :max Кбайт' ], 'mimes' => 'Файл «:attribute» должен иметь формат :values', + 'numeric' => 'В поле «:attribute» должно быть указано целое число от 0 до 999999', ]; } diff --git a/composer.json b/composer.json index 024809f..2caff61 100644 --- a/composer.json +++ b/composer.json @@ -6,6 +6,7 @@ "license": "MIT", "require": { "php": "^8.0.2", + "barryvdh/laravel-dompdf": "^2.0", "guzzlehttp/guzzle": "^7.2", "laravel/framework": "^9.19", "laravel/sanctum": "^3.0", diff --git a/composer.lock b/composer.lock index f440633..149a0bc 100644 --- a/composer.lock +++ b/composer.lock @@ -4,9 +4,86 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "fe33f98a750b8c5a51b30c78bd3fab21", + "content-hash": "90d551da0678879fb477e7932090751b", "packages": [ { + "name": "barryvdh/laravel-dompdf", + "version": "v2.0.1", + "source": { + "type": "git", + "url": "https://github.com/barryvdh/laravel-dompdf.git", + "reference": "9843d2be423670fb434f4c978b3c0f4dd92c87a6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/barryvdh/laravel-dompdf/zipball/9843d2be423670fb434f4c978b3c0f4dd92c87a6", + "reference": "9843d2be423670fb434f4c978b3c0f4dd92c87a6", + "shasum": "" + }, + "require": { + "dompdf/dompdf": "^2.0.1", + "illuminate/support": "^6|^7|^8|^9|^10", + "php": "^7.2 || ^8.0" + }, + "require-dev": { + "nunomaduro/larastan": "^1|^2", + "orchestra/testbench": "^4|^5|^6|^7|^8", + "phpro/grumphp": "^1", + "squizlabs/php_codesniffer": "^3.5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0-dev" + }, + "laravel": { + "providers": [ + "Barryvdh\\DomPDF\\ServiceProvider" + ], + "aliases": { + "Pdf": "Barryvdh\\DomPDF\\Facade\\Pdf", + "PDF": "Barryvdh\\DomPDF\\Facade\\Pdf" + } + } + }, + "autoload": { + "psr-4": { + "Barryvdh\\DomPDF\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Barry vd. Heuvel", + "email": "barryvdh@gmail.com" + } + ], + "description": "A DOMPDF Wrapper for Laravel", + "keywords": [ + "dompdf", + "laravel", + "pdf" + ], + "support": { + "issues": "https://github.com/barryvdh/laravel-dompdf/issues", + "source": "https://github.com/barryvdh/laravel-dompdf/tree/v2.0.1" + }, + "funding": [ + { + "url": "https://fruitcake.nl", + "type": "custom" + }, + { + "url": "https://github.com/barryvdh", + "type": "github" + } + ], + "time": "2023-01-12T15:12:49+00:00" + }, + { "name": "brick/math", "version": "0.10.2", "source": { @@ -350,6 +427,68 @@ "time": "2022-12-14T08:49:07+00:00" }, { + "name": "dompdf/dompdf", + "version": "v2.0.3", + "source": { + "type": "git", + "url": "https://github.com/dompdf/dompdf.git", + "reference": "e8d2d5e37e8b0b30f0732a011295ab80680d7e85" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/dompdf/dompdf/zipball/e8d2d5e37e8b0b30f0732a011295ab80680d7e85", + "reference": "e8d2d5e37e8b0b30f0732a011295ab80680d7e85", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-mbstring": "*", + "masterminds/html5": "^2.0", + "phenx/php-font-lib": ">=0.5.4 <1.0.0", + "phenx/php-svg-lib": ">=0.3.3 <1.0.0", + "php": "^7.1 || ^8.0" + }, + "require-dev": { + "ext-json": "*", + "ext-zip": "*", + "mockery/mockery": "^1.3", + "phpunit/phpunit": "^7.5 || ^8 || ^9", + "squizlabs/php_codesniffer": "^3.5" + }, + "suggest": { + "ext-gd": "Needed to process images", + "ext-gmagick": "Improves image processing performance", + "ext-imagick": "Improves image processing performance", + "ext-zlib": "Needed for pdf stream compression" + }, + "type": "library", + "autoload": { + "psr-4": { + "Dompdf\\": "src/" + }, + "classmap": [ + "lib/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "LGPL-2.1" + ], + "authors": [ + { + "name": "The Dompdf Community", + "homepage": "https://github.com/dompdf/dompdf/blob/master/AUTHORS.md" + } + ], + "description": "DOMPDF is a CSS 2.1 compliant HTML to PDF converter", + "homepage": "https://github.com/dompdf/dompdf", + "support": { + "issues": "https://github.com/dompdf/dompdf/issues", + "source": "https://github.com/dompdf/dompdf/tree/v2.0.3" + }, + "time": "2023-02-07T12:51:48+00:00" + }, + { "name": "dragonmantank/cron-expression", "version": "v3.3.2", "source": { @@ -1752,6 +1891,75 @@ "time": "2022-04-17T13:12:02+00:00" }, { + "name": "masterminds/html5", + "version": "2.7.6", + "source": { + "type": "git", + "url": "https://github.com/Masterminds/html5-php.git", + "reference": "897eb517a343a2281f11bc5556d6548db7d93947" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Masterminds/html5-php/zipball/897eb517a343a2281f11bc5556d6548db7d93947", + "reference": "897eb517a343a2281f11bc5556d6548db7d93947", + "shasum": "" + }, + "require": { + "ext-ctype": "*", + "ext-dom": "*", + "ext-libxml": "*", + "php": ">=5.3.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.35 || ^5.7.21 || ^6 || ^7" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.7-dev" + } + }, + "autoload": { + "psr-4": { + "Masterminds\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Matt Butcher", + "email": "technosophos@gmail.com" + }, + { + "name": "Matt Farina", + "email": "matt@mattfarina.com" + }, + { + "name": "Asmir Mustafic", + "email": "goetas@gmail.com" + } + ], + "description": "An HTML5 parser and serializer.", + "homepage": "http://masterminds.github.io/html5-php", + "keywords": [ + "HTML5", + "dom", + "html", + "parser", + "querypath", + "serializer", + "xml" + ], + "support": { + "issues": "https://github.com/Masterminds/html5-php/issues", + "source": "https://github.com/Masterminds/html5-php/tree/2.7.6" + }, + "time": "2022-08-18T16:18:26+00:00" + }, + { "name": "monolog/monolog", "version": "2.9.1", "source": { @@ -2247,6 +2455,96 @@ "time": "2023-02-08T01:06:31+00:00" }, { + "name": "phenx/php-font-lib", + "version": "0.5.4", + "source": { + "type": "git", + "url": "https://github.com/dompdf/php-font-lib.git", + "reference": "dd448ad1ce34c63d09baccd05415e361300c35b4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/dompdf/php-font-lib/zipball/dd448ad1ce34c63d09baccd05415e361300c35b4", + "reference": "dd448ad1ce34c63d09baccd05415e361300c35b4", + "shasum": "" + }, + "require": { + "ext-mbstring": "*" + }, + "require-dev": { + "symfony/phpunit-bridge": "^3 || ^4 || ^5" + }, + "type": "library", + "autoload": { + "psr-4": { + "FontLib\\": "src/FontLib" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "LGPL-3.0" + ], + "authors": [ + { + "name": "Fabien Ménager", + "email": "fabien.menager@gmail.com" + } + ], + "description": "A library to read, parse, export and make subsets of different types of font files.", + "homepage": "https://github.com/PhenX/php-font-lib", + "support": { + "issues": "https://github.com/dompdf/php-font-lib/issues", + "source": "https://github.com/dompdf/php-font-lib/tree/0.5.4" + }, + "time": "2021-12-17T19:44:54+00:00" + }, + { + "name": "phenx/php-svg-lib", + "version": "0.5.0", + "source": { + "type": "git", + "url": "https://github.com/dompdf/php-svg-lib.git", + "reference": "76876c6cf3080bcb6f249d7d59705108166a6685" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/dompdf/php-svg-lib/zipball/76876c6cf3080bcb6f249d7d59705108166a6685", + "reference": "76876c6cf3080bcb6f249d7d59705108166a6685", + "shasum": "" + }, + "require": { + "ext-mbstring": "*", + "php": "^7.1 || ^8.0", + "sabberworm/php-css-parser": "^8.4" + }, + "require-dev": { + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5" + }, + "type": "library", + "autoload": { + "psr-4": { + "Svg\\": "src/Svg" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "LGPL-3.0" + ], + "authors": [ + { + "name": "Fabien Ménager", + "email": "fabien.menager@gmail.com" + } + ], + "description": "A library to read, parse and export to PDF SVG files.", + "homepage": "https://github.com/PhenX/php-svg-lib", + "support": { + "issues": "https://github.com/dompdf/php-svg-lib/issues", + "source": "https://github.com/dompdf/php-svg-lib/tree/0.5.0" + }, + "time": "2022-09-06T12:16:56+00:00" + }, + { "name": "phpoption/phpoption", "version": "1.9.1", "source": { @@ -2988,6 +3286,59 @@ "time": "2023-01-12T18:13:24+00:00" }, { + "name": "sabberworm/php-css-parser", + "version": "8.4.0", + "source": { + "type": "git", + "url": "https://github.com/sabberworm/PHP-CSS-Parser.git", + "reference": "e41d2140031d533348b2192a83f02d8dd8a71d30" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sabberworm/PHP-CSS-Parser/zipball/e41d2140031d533348b2192a83f02d8dd8a71d30", + "reference": "e41d2140031d533348b2192a83f02d8dd8a71d30", + "shasum": "" + }, + "require": { + "ext-iconv": "*", + "php": ">=5.6.20" + }, + "require-dev": { + "codacy/coverage": "^1.4", + "phpunit/phpunit": "^4.8.36" + }, + "suggest": { + "ext-mbstring": "for parsing UTF-8 CSS" + }, + "type": "library", + "autoload": { + "psr-4": { + "Sabberworm\\CSS\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Raphael Schweikert" + } + ], + "description": "Parser for CSS Files written in PHP", + "homepage": "https://www.sabberworm.com/blog/2010/6/10/php-css-parser", + "keywords": [ + "css", + "parser", + "stylesheet" + ], + "support": { + "issues": "https://github.com/sabberworm/PHP-CSS-Parser/issues", + "source": "https://github.com/sabberworm/PHP-CSS-Parser/tree/8.4.0" + }, + "time": "2021-12-11T13:40:54+00:00" + }, + { "name": "symfony/console", "version": "v6.0.19", "source": { diff --git a/config/app.php b/config/app.php index cc8bd7a..f1385d0 100644 --- a/config/app.php +++ b/config/app.php @@ -195,6 +195,7 @@ return [ App\Providers\EventServiceProvider::class, App\Providers\RouteServiceProvider::class, \App\Providers\ComposerServiceProvider::class, + Barryvdh\DomPDF\ServiceProvider::class, ], @@ -211,6 +212,7 @@ return [ 'aliases' => Facade::defaultAliases()->merge([ // 'ExampleClass' => App\Example\ExampleClass::class, + 'PDF' => Barryvdh\DomPDF\Facade::class, ])->toArray(), ]; diff --git a/config/dompdf.php b/config/dompdf.php new file mode 100644 index 0000000..8ad2022 --- /dev/null +++ b/config/dompdf.php @@ -0,0 +1,284 @@ + false, // Throw an Exception on warnings from dompdf + + 'public_path' => null, // Override the public path if needed + + /* + * Dejavu Sans font is missing glyphs for converted entities, turn it off if you need to show € and £. + */ + 'convert_entities' => true, + + 'options' => array( + /** + * The location of the DOMPDF font directory + * + * The location of the directory where DOMPDF will store fonts and font metrics + * Note: This directory must exist and be writable by the webserver process. + * *Please note the trailing slash.* + * + * Notes regarding fonts: + * Additional .afm font metrics can be added by executing load_font.php from command line. + * + * Only the original "Base 14 fonts" are present on all pdf viewers. Additional fonts must + * be embedded in the pdf file or the PDF may not display correctly. This can significantly + * increase file size unless font subsetting is enabled. Before embedding a font please + * review your rights under the font license. + * + * Any font specification in the source HTML is translated to the closest font available + * in the font directory. + * + * The pdf standard "Base 14 fonts" are: + * Courier, Courier-Bold, Courier-BoldOblique, Courier-Oblique, + * Helvetica, Helvetica-Bold, Helvetica-BoldOblique, Helvetica-Oblique, + * Times-Roman, Times-Bold, Times-BoldItalic, Times-Italic, + * Symbol, ZapfDingbats. + */ + "font_dir" => storage_path('fonts'), // advised by dompdf (https://github.com/dompdf/dompdf/pull/782) + + /** + * The location of the DOMPDF font cache directory + * + * This directory contains the cached font metrics for the fonts used by DOMPDF. + * This directory can be the same as DOMPDF_FONT_DIR + * + * Note: This directory must exist and be writable by the webserver process. + */ + "font_cache" => storage_path('fonts'), + + /** + * The location of a temporary directory. + * + * The directory specified must be writeable by the webserver process. + * The temporary directory is required to download remote images and when + * using the PFDLib back end. + */ + "temp_dir" => sys_get_temp_dir(), + + /** + * ==== IMPORTANT ==== + * + * dompdf's "chroot": Prevents dompdf from accessing system files or other + * files on the webserver. All local files opened by dompdf must be in a + * subdirectory of this directory. DO NOT set it to '/' since this could + * allow an attacker to use dompdf to read any files on the server. This + * should be an absolute path. + * This is only checked on command line call by dompdf.php, but not by + * direct class use like: + * $dompdf = new DOMPDF(); $dompdf->load_html($htmldata); $dompdf->render(); $pdfdata = $dompdf->output(); + */ + "chroot" => realpath(base_path()), + + /** + * Protocol whitelist + * + * Protocols and PHP wrappers allowed in URIs, and the validation rules + * that determine if a resouce may be loaded. Full support is not guaranteed + * for the protocols/wrappers specified + * by this array. + * + * @var array + */ + 'allowed_protocols' => [ + "file://" => ["rules" => []], + "http://" => ["rules" => []], + "https://" => ["rules" => []] + ], + + /** + * @var string + */ + 'log_output_file' => null, + + /** + * Whether to enable font subsetting or not. + */ + "enable_font_subsetting" => false, + + /** + * The PDF rendering backend to use + * + * Valid settings are 'PDFLib', 'CPDF' (the bundled R&OS PDF class), 'GD' and + * 'auto'. 'auto' will look for PDFLib and use it if found, or if not it will + * fall back on CPDF. 'GD' renders PDFs to graphic files. {@link + * Canvas_Factory} ultimately determines which rendering class to instantiate + * based on this setting. + * + * Both PDFLib & CPDF rendering backends provide sufficient rendering + * capabilities for dompdf, however additional features (e.g. object, + * image and font support, etc.) differ between backends. Please see + * {@link PDFLib_Adapter} for more information on the PDFLib backend + * and {@link CPDF_Adapter} and lib/class.pdf.php for more information + * on CPDF. Also see the documentation for each backend at the links + * below. + * + * The GD rendering backend is a little different than PDFLib and + * CPDF. Several features of CPDF and PDFLib are not supported or do + * not make any sense when creating image files. For example, + * multiple pages are not supported, nor are PDF 'objects'. Have a + * look at {@link GD_Adapter} for more information. GD support is + * experimental, so use it at your own risk. + * + * @link http://www.pdflib.com + * @link http://www.ros.co.nz/pdf + * @link http://www.php.net/image + */ + "pdf_backend" => "CPDF", + + /** + * PDFlib license key + * + * If you are using a licensed, commercial version of PDFlib, specify + * your license key here. If you are using PDFlib-Lite or are evaluating + * the commercial version of PDFlib, comment out this setting. + * + * @link http://www.pdflib.com + * + * If pdflib present in web server and auto or selected explicitely above, + * a real license code must exist! + */ + //"DOMPDF_PDFLIB_LICENSE" => "your license key here", + + /** + * html target media view which should be rendered into pdf. + * List of types and parsing rules for future extensions: + * http://www.w3.org/TR/REC-html40/types.html + * screen, tty, tv, projection, handheld, print, braille, aural, all + * Note: aural is deprecated in CSS 2.1 because it is replaced by speech in CSS 3. + * Note, even though the generated pdf file is intended for print output, + * the desired content might be different (e.g. screen or projection view of html file). + * Therefore allow specification of content here. + */ + "default_media_type" => "screen", + + /** + * The default paper size. + * + * North America standard is "letter"; other countries generally "a4" + * + * @see CPDF_Adapter::PAPER_SIZES for valid sizes ('letter', 'legal', 'A4', etc.) + */ + "default_paper_size" => "a4", + + /** + * The default paper orientation. + * + * The orientation of the page (portrait or landscape). + * + * @var string + */ + 'default_paper_orientation' => "portrait", + + /** + * The default font family + * + * Used if no suitable fonts can be found. This must exist in the font folder. + * @var string + */ + "default_font" => "serif", + + /** + * Image DPI setting + * + * This setting determines the default DPI setting for images and fonts. The + * DPI may be overridden for inline images by explictly setting the + * image's width & height style attributes (i.e. if the image's native + * width is 600 pixels and you specify the image's width as 72 points, + * the image will have a DPI of 600 in the rendered PDF. The DPI of + * background images can not be overridden and is controlled entirely + * via this parameter. + * + * For the purposes of DOMPDF, pixels per inch (PPI) = dots per inch (DPI). + * If a size in html is given as px (or without unit as image size), + * this tells the corresponding size in pt. + * This adjusts the relative sizes to be similar to the rendering of the + * html page in a reference browser. + * + * In pdf, always 1 pt = 1/72 inch + * + * Rendering resolution of various browsers in px per inch: + * Windows Firefox and Internet Explorer: + * SystemControl->Display properties->FontResolution: Default:96, largefonts:120, custom:? + * Linux Firefox: + * about:config *resolution: Default:96 + * (xorg screen dimension in mm and Desktop font dpi settings are ignored) + * + * Take care about extra font/image zoom factor of browser. + * + * In images, size in pixel attribute, img css style, are overriding + * the real image dimension in px for rendering. + * + * @var int + */ + "dpi" => 96, + + /** + * Enable inline PHP + * + * If this setting is set to true then DOMPDF will automatically evaluate + * inline PHP contained within tags. + * + * Enabling this for documents you do not trust (e.g. arbitrary remote html + * pages) is a security risk. Set this option to false if you wish to process + * untrusted documents. + * + * @var bool + */ + "enable_php" => false, + + /** + * Enable inline Javascript + * + * If this setting is set to true then DOMPDF will automatically insert + * JavaScript code contained within tags. + * + * @var bool + */ + "enable_javascript" => true, + + /** + * Enable remote file access + * + * If this setting is set to true, DOMPDF will access remote sites for + * images and CSS files as required. + * This is required for part of test case www/test/image_variants.html through www/examples.php + * + * Attention! + * This can be a security risk, in particular in combination with DOMPDF_ENABLE_PHP and + * allowing remote access to dompdf.php or on allowing remote html code to be passed to + * $dompdf = new DOMPDF(, $dompdf->load_html(..., + * This allows anonymous users to download legally doubtful internet content which on + * tracing back appears to being downloaded by your server, or allows malicious php code + * in remote html pages to be executed by your server with your account privileges. + * + * @var bool + */ + "enable_remote" => true, + + /** + * A ratio applied to the fonts height to be more like browsers' line height + */ + "font_height_ratio" => 1.1, + + /** + * Use the HTML5 Lib parser + * + * @deprecated This feature is now always on in dompdf 2.x + * @var bool + */ + "enable_html5_parser" => true, + ), + + +); diff --git a/config/flare.php b/config/flare.php new file mode 100644 index 0000000..a4896f3 --- /dev/null +++ b/config/flare.php @@ -0,0 +1,80 @@ + env('FLARE_KEY'), + + /* + |-------------------------------------------------------------------------- + | Middleware + |-------------------------------------------------------------------------- + | + | These middleware will modify the contents of the report sent to Flare. + | + */ + + 'flare_middleware' => [ + RemoveRequestIp::class, + AddGitInformation::class, + AddNotifierName::class, + AddEnvironmentInformation::class, + AddExceptionInformation::class, + AddDumps::class, + AddLogs::class => [ + 'maximum_number_of_collected_logs' => 200, + ], + AddQueries::class => [ + 'maximum_number_of_collected_queries' => 200, + 'report_query_bindings' => true, + ], + AddJobs::class => [ + 'max_chained_job_reporting_depth' => 5, + ], + CensorRequestBodyFields::class => [ + 'censor_fields' => [ + 'password', + 'password_confirmation', + ], + ], + CensorRequestHeaders::class => [ + 'headers' => [ + 'API-KEY', + ] + ] + ], + + /* + |-------------------------------------------------------------------------- + | Reporting log statements + |-------------------------------------------------------------------------- + | + | If this setting is `false` log statements won't be sent as events to Flare, + | no matter which error level you specified in the Flare log channel. + | + */ + + 'send_logs_as_events' => true, +]; diff --git a/config/ignition.php b/config/ignition.php new file mode 100644 index 0000000..a4fe3ce --- /dev/null +++ b/config/ignition.php @@ -0,0 +1,234 @@ + env('IGNITION_EDITOR', 'phpstorm'), + + /* + |-------------------------------------------------------------------------- + | Theme + |-------------------------------------------------------------------------- + | + | Here you may specify which theme Ignition should use. + | + | Supported: "light", "dark", "auto" + | + */ + + 'theme' => env('IGNITION_THEME', 'auto'), + + /* + |-------------------------------------------------------------------------- + | Sharing + |-------------------------------------------------------------------------- + | + | You can share local errors with colleagues or others around the world. + | Sharing is completely free and doesn't require an account on Flare. + | + | If necessary, you can completely disable sharing below. + | + */ + + 'enable_share_button' => env('IGNITION_SHARING_ENABLED', true), + + /* + |-------------------------------------------------------------------------- + | Register Ignition commands + |-------------------------------------------------------------------------- + | + | Ignition comes with an additional make command that lets you create + | new solution classes more easily. To keep your default Laravel + | installation clean, this command is not registered by default. + | + | You can enable the command registration below. + | + */ + + 'register_commands' => env('REGISTER_IGNITION_COMMANDS', false), + + /* + |-------------------------------------------------------------------------- + | Solution Providers + |-------------------------------------------------------------------------- + | + | You may specify a list of solution providers (as fully qualified class + | names) that shouldn't be loaded. Ignition will ignore these classes + | and possible solutions provided by them will never be displayed. + | + */ + + 'solution_providers' => [ + // from spatie/ignition + BadMethodCallSolutionProvider::class, + MergeConflictSolutionProvider::class, + UndefinedPropertySolutionProvider::class, + + // from spatie/laravel-ignition + IncorrectValetDbCredentialsSolutionProvider::class, + MissingAppKeySolutionProvider::class, + DefaultDbNameSolutionProvider::class, + TableNotFoundSolutionProvider::class, + MissingImportSolutionProvider::class, + InvalidRouteActionSolutionProvider::class, + ViewNotFoundSolutionProvider::class, + RunningLaravelDuskInProductionProvider::class, + MissingColumnSolutionProvider::class, + UnknownValidationSolutionProvider::class, + MissingMixManifestSolutionProvider::class, + MissingViteManifestSolutionProvider::class, + MissingLivewireComponentSolutionProvider::class, + UndefinedViewVariableSolutionProvider::class, + GenericLaravelExceptionSolutionProvider::class, + ], + + /* + |-------------------------------------------------------------------------- + | Ignored Solution Providers + |-------------------------------------------------------------------------- + | + | You may specify a list of solution providers (as fully qualified class + | names) that shouldn't be loaded. Ignition will ignore these classes + | and possible solutions provided by them will never be displayed. + | + */ + + 'ignored_solution_providers' => [ + + ], + + /* + |-------------------------------------------------------------------------- + | Runnable Solutions + |-------------------------------------------------------------------------- + | + | Some solutions that Ignition displays are runnable and can perform + | various tasks. By default, runnable solutions are only enabled when your + | app has debug mode enabled and the environment is `local` or + | `development`. + | + | Using the `IGNITION_ENABLE_RUNNABLE_SOLUTIONS` environment variable, you + | can override this behaviour and enable or disable runnable solutions + | regardless of the application's environment. + | + | Default: env('IGNITION_ENABLE_RUNNABLE_SOLUTIONS') + | + */ + + 'enable_runnable_solutions' => env('IGNITION_ENABLE_RUNNABLE_SOLUTIONS'), + + /* + |-------------------------------------------------------------------------- + | Remote Path Mapping + |-------------------------------------------------------------------------- + | + | If you are using a remote dev server, like Laravel Homestead, Docker, or + | even a remote VPS, it will be necessary to specify your path mapping. + | + | Leaving one, or both of these, empty or null will not trigger the remote + | URL changes and Ignition will treat your editor links as local files. + | + | "remote_sites_path" is an absolute base path for your sites or projects + | in Homestead, Vagrant, Docker, or another remote development server. + | + | Example value: "/home/vagrant/Code" + | + | "local_sites_path" is an absolute base path for your sites or projects + | on your local computer where your IDE or code editor is running on. + | + | Example values: "/Users//Code", "C:\Users\\Documents\Code" + | + */ + + 'remote_sites_path' => env('IGNITION_REMOTE_SITES_PATH', base_path()), + 'local_sites_path' => env('IGNITION_LOCAL_SITES_PATH', ''), + + /* + |-------------------------------------------------------------------------- + | Housekeeping Endpoint Prefix + |-------------------------------------------------------------------------- + | + | Ignition registers a couple of routes when it is enabled. Below you may + | specify a route prefix that will be used to host all internal links. + | + */ + + 'housekeeping_endpoint_prefix' => '_ignition', + + /* + |-------------------------------------------------------------------------- + | Settings File + |-------------------------------------------------------------------------- + | + | Ignition allows you to save your settings to a specific global file. + | + | If no path is specified, a file with settings will be saved to the user's + | home directory. The directory depends on the OS and its settings but it's + | typically `~/.ignition.json`. In this case, the settings will be applied + | to all of your projects where Ignition is used and the path is not + | specified. + | + | However, if you want to store your settings on a project basis, or you + | want to keep them in another directory, you can specify a path where + | the settings file will be saved. The path should be an existing directory + | with correct write access. + | For example, create a new `ignition` folder in the storage directory and + | use `storage_path('ignition')` as the `settings_file_path`. + | + | Default value: '' (empty string) + */ + + 'settings_file_path' => '', + + /* + |-------------------------------------------------------------------------- + | Recorders + |-------------------------------------------------------------------------- + | + | Ignition registers a couple of recorders when it is enabled. Below you may + | specify a recorders will be used to record specific events. + | + */ + + 'recorders' => [ + DumpRecorder::class, + JobRecorder::class, + LogRecorder::class, + QueryRecorder::class + ] +]; diff --git a/config/tinker.php b/config/tinker.php new file mode 100644 index 0000000..c187942 --- /dev/null +++ b/config/tinker.php @@ -0,0 +1,50 @@ + [ + // App\Console\Commands\ExampleCommand::class, + ], + + /* + |-------------------------------------------------------------------------- + | Auto Aliased Classes + |-------------------------------------------------------------------------- + | + | Tinker will not automatically alias classes in your vendor namespaces + | but you may explicitly allow a subset of classes to get aliased by + | adding the names of each of those classes to the following list. + | + */ + + 'alias' => [ + // + ], + + /* + |-------------------------------------------------------------------------- + | Classes That Should Not Be Aliased + |-------------------------------------------------------------------------- + | + | Typically, Tinker automatically aliases classes as you require them in + | Tinker. However, you may wish to never alias certain classes, which + | you may accomplish by listing the classes in the following array. + | + */ + + 'dont_alias' => [ + 'App\Nova', + ], + +]; diff --git a/docker/7.4/Dockerfile b/docker/7.4/Dockerfile new file mode 100644 index 0000000..bb1899f --- /dev/null +++ b/docker/7.4/Dockerfile @@ -0,0 +1,57 @@ +FROM ubuntu:20.04 + +LABEL maintainer="Taylor Otwell" + +ARG WWWGROUP +ARG NODE_VERSION=16 +ARG POSTGRES_VERSION=13 + +WORKDIR /var/www/html + +ENV DEBIAN_FRONTEND noninteractive +ENV TZ=UTC + +RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone + +RUN apt-get update \ + && apt-get install -y gnupg gosu curl ca-certificates zip unzip git supervisor sqlite3 libcap2-bin libpng-dev python2 dnsutils \ + && curl -sS 'https://keyserver.ubuntu.com/pks/lookup?op=get&search=0x14aa40ec0831756756d7f66c4f4ea0aae5267a6c' | gpg --dearmor | tee /usr/share/keyrings/ppa_ondrej_php.gpg > /dev/null \ + && echo "deb [signed-by=/usr/share/keyrings/ppa_ondrej_php.gpg] https://ppa.launchpadcontent.net/ondrej/php/ubuntu focal main" > /etc/apt/sources.list.d/ppa_ondrej_php.list \ + && apt-get update \ + && apt-get install -y php7.4-cli php7.4-dev \ + php7.4-pgsql php7.4-sqlite3 php7.4-gd \ + php7.4-curl php7.4-memcached \ + php7.4-imap php7.4-mysql php7.4-mbstring \ + php7.4-xml php7.4-zip php7.4-bcmath php7.4-soap \ + php7.4-intl php7.4-readline php7.4-pcov \ + php7.4-msgpack php7.4-igbinary php7.4-ldap \ + php7.4-redis php7.4-xdebug \ + && php -r "readfile('https://getcomposer.org/installer');" | php -- --install-dir=/usr/bin/ --filename=composer \ + && curl -sLS https://deb.nodesource.com/setup_$NODE_VERSION.x | bash - \ + && apt-get install -y nodejs \ + && npm install -g npm \ + && curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | gpg --dearmor | tee /usr/share/keyrings/yarnkey.gpg >/dev/null \ + && echo "deb [signed-by=/usr/share/keyrings/yarnkey.gpg] https://dl.yarnpkg.com/debian/ stable main" > /etc/apt/sources.list.d/yarn.list \ + && curl -sS https://www.postgresql.org/media/keys/ACCC4CF8.asc | gpg --dearmor | tee /usr/share/keyrings/pgdg.gpg >/dev/null \ + && echo "deb [signed-by=/usr/share/keyrings/pgdg.gpg] http://apt.postgresql.org/pub/repos/apt focal-pgdg main" > /etc/apt/sources.list.d/pgdg.list \ + && apt-get update \ + && apt-get install -y yarn \ + && apt-get install -y mysql-client \ + && apt-get install -y postgresql-client-$POSTGRES_VERSION \ + && apt-get -y autoremove \ + && apt-get clean \ + && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* + +RUN setcap "cap_net_bind_service=+ep" /usr/bin/php7.4 + +RUN groupadd --force -g $WWWGROUP sail +RUN useradd -ms /bin/bash --no-user-group -g $WWWGROUP -u 1337 sail + +COPY start-container /usr/local/bin/start-container +COPY supervisord.conf /etc/supervisor/conf.d/supervisord.conf +COPY php.ini /etc/php/7.4/cli/conf.d/99-sail.ini +RUN chmod +x /usr/local/bin/start-container + +EXPOSE 8000 + +ENTRYPOINT ["start-container"] diff --git a/docker/7.4/php.ini b/docker/7.4/php.ini new file mode 100644 index 0000000..66d04d5 --- /dev/null +++ b/docker/7.4/php.ini @@ -0,0 +1,4 @@ +[PHP] +post_max_size = 100M +upload_max_filesize = 100M +variables_order = EGPCS diff --git a/docker/7.4/start-container b/docker/7.4/start-container new file mode 100644 index 0000000..b864399 --- /dev/null +++ b/docker/7.4/start-container @@ -0,0 +1,17 @@ +#!/usr/bin/env bash + +if [ ! -z "$WWWUSER" ]; then + usermod -u $WWWUSER sail +fi + +if [ ! -d /.composer ]; then + mkdir /.composer +fi + +chmod -R ugo+rw /.composer + +if [ $# -gt 0 ]; then + exec gosu $WWWUSER "$@" +else + exec /usr/bin/supervisord -c /etc/supervisor/conf.d/supervisord.conf +fi diff --git a/docker/7.4/supervisord.conf b/docker/7.4/supervisord.conf new file mode 100644 index 0000000..9d28479 --- /dev/null +++ b/docker/7.4/supervisord.conf @@ -0,0 +1,14 @@ +[supervisord] +nodaemon=true +user=root +logfile=/var/log/supervisor/supervisord.log +pidfile=/var/run/supervisord.pid + +[program:php] +command=/usr/bin/php -d variables_order=EGPCS /var/www/html/artisan serve --host=0.0.0.0 --port=80 +user=sail +environment=LARAVEL_SAIL="1" +stdout_logfile=/dev/stdout +stdout_logfile_maxbytes=0 +stderr_logfile=/dev/stderr +stderr_logfile_maxbytes=0 diff --git a/docker/8.0/Dockerfile b/docker/8.0/Dockerfile new file mode 100644 index 0000000..cf3fe75 --- /dev/null +++ b/docker/8.0/Dockerfile @@ -0,0 +1,59 @@ +FROM ubuntu:20.04 + +LABEL maintainer="Taylor Otwell" + +ARG WWWGROUP +ARG NODE_VERSION=16 +ARG POSTGRES_VERSION=13 + +WORKDIR /var/www/html + +ENV DEBIAN_FRONTEND noninteractive +ENV TZ=UTC + +RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone + +RUN apt-get update \ + && apt-get install -y gnupg gosu curl ca-certificates zip unzip git supervisor sqlite3 libcap2-bin libpng-dev python2 dnsutils \ + && curl -sS 'https://keyserver.ubuntu.com/pks/lookup?op=get&search=0x14aa40ec0831756756d7f66c4f4ea0aae5267a6c' | gpg --dearmor | tee /usr/share/keyrings/ppa_ondrej_php.gpg > /dev/null \ + && echo "deb [signed-by=/usr/share/keyrings/ppa_ondrej_php.gpg] https://ppa.launchpadcontent.net/ondrej/php/ubuntu focal main" > /etc/apt/sources.list.d/ppa_ondrej_php.list \ + && apt-get update \ + && apt-get install -y php8.0-cli php8.0-dev \ + php8.0-pgsql php8.0-sqlite3 php8.0-gd \ + php8.0-curl php8.0-memcached \ + php8.0-imap php8.0-mysql php8.0-mbstring \ + php8.0-xml php8.0-zip php8.0-bcmath php8.0-soap \ + php8.0-intl php8.0-readline php8.0-pcov \ + php8.0-msgpack php8.0-igbinary php8.0-ldap \ + php8.0-redis php8.0-swoole php8.0-xdebug \ + && php -r "readfile('https://getcomposer.org/installer');" | php -- --install-dir=/usr/bin/ --filename=composer \ + && curl -sLS https://deb.nodesource.com/setup_$NODE_VERSION.x | bash - \ + && apt-get install -y nodejs \ + && npm install -g npm \ + && curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | gpg --dearmor | tee /usr/share/keyrings/yarnkey.gpg >/dev/null \ + && echo "deb [signed-by=/usr/share/keyrings/yarnkey.gpg] https://dl.yarnpkg.com/debian/ stable main" > /etc/apt/sources.list.d/yarn.list \ + && curl -sS https://www.postgresql.org/media/keys/ACCC4CF8.asc | gpg --dearmor | tee /usr/share/keyrings/pgdg.gpg >/dev/null \ + && echo "deb [signed-by=/usr/share/keyrings/pgdg.gpg] http://apt.postgresql.org/pub/repos/apt focal-pgdg main" > /etc/apt/sources.list.d/pgdg.list \ + && apt-get update \ + && apt-get install -y yarn \ + && apt-get install -y mysql-client \ + && apt-get install -y postgresql-client-$POSTGRES_VERSION \ + && apt-get -y autoremove \ + && apt-get clean \ + && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* + +RUN update-alternatives --set php /usr/bin/php8.0 + +RUN setcap "cap_net_bind_service=+ep" /usr/bin/php8.0 + +RUN groupadd --force -g $WWWGROUP sail +RUN useradd -ms /bin/bash --no-user-group -g $WWWGROUP -u 1337 sail + +COPY start-container /usr/local/bin/start-container +COPY supervisord.conf /etc/supervisor/conf.d/supervisord.conf +COPY php.ini /etc/php/8.0/cli/conf.d/99-sail.ini +RUN chmod +x /usr/local/bin/start-container + +EXPOSE 8000 + +ENTRYPOINT ["start-container"] diff --git a/docker/8.0/php.ini b/docker/8.0/php.ini new file mode 100644 index 0000000..66d04d5 --- /dev/null +++ b/docker/8.0/php.ini @@ -0,0 +1,4 @@ +[PHP] +post_max_size = 100M +upload_max_filesize = 100M +variables_order = EGPCS diff --git a/docker/8.0/start-container b/docker/8.0/start-container new file mode 100644 index 0000000..b864399 --- /dev/null +++ b/docker/8.0/start-container @@ -0,0 +1,17 @@ +#!/usr/bin/env bash + +if [ ! -z "$WWWUSER" ]; then + usermod -u $WWWUSER sail +fi + +if [ ! -d /.composer ]; then + mkdir /.composer +fi + +chmod -R ugo+rw /.composer + +if [ $# -gt 0 ]; then + exec gosu $WWWUSER "$@" +else + exec /usr/bin/supervisord -c /etc/supervisor/conf.d/supervisord.conf +fi diff --git a/docker/8.0/supervisord.conf b/docker/8.0/supervisord.conf new file mode 100644 index 0000000..9d28479 --- /dev/null +++ b/docker/8.0/supervisord.conf @@ -0,0 +1,14 @@ +[supervisord] +nodaemon=true +user=root +logfile=/var/log/supervisor/supervisord.log +pidfile=/var/run/supervisord.pid + +[program:php] +command=/usr/bin/php -d variables_order=EGPCS /var/www/html/artisan serve --host=0.0.0.0 --port=80 +user=sail +environment=LARAVEL_SAIL="1" +stdout_logfile=/dev/stdout +stdout_logfile_maxbytes=0 +stderr_logfile=/dev/stderr +stderr_logfile_maxbytes=0 diff --git a/docker/8.1/Dockerfile b/docker/8.1/Dockerfile new file mode 100644 index 0000000..50f2c2b --- /dev/null +++ b/docker/8.1/Dockerfile @@ -0,0 +1,58 @@ +FROM ubuntu:22.04 + +LABEL maintainer="Taylor Otwell" + +ARG WWWGROUP +ARG NODE_VERSION=18 +ARG POSTGRES_VERSION=14 + +WORKDIR /var/www/html + +ENV DEBIAN_FRONTEND noninteractive +ENV TZ=UTC + +RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone + +RUN apt-get update \ + && apt-get install -y gnupg gosu curl ca-certificates zip unzip git supervisor sqlite3 libcap2-bin libpng-dev python2 dnsutils \ + && curl -sS 'https://keyserver.ubuntu.com/pks/lookup?op=get&search=0x14aa40ec0831756756d7f66c4f4ea0aae5267a6c' | gpg --dearmor | tee /usr/share/keyrings/ppa_ondrej_php.gpg > /dev/null \ + && echo "deb [signed-by=/usr/share/keyrings/ppa_ondrej_php.gpg] https://ppa.launchpadcontent.net/ondrej/php/ubuntu jammy main" > /etc/apt/sources.list.d/ppa_ondrej_php.list \ + && apt-get update \ + && apt-get install -y php8.1-cli php8.1-dev \ + php8.1-pgsql php8.1-sqlite3 php8.1-gd \ + php8.1-curl \ + php8.1-imap php8.1-mysql php8.1-mbstring \ + php8.1-xml php8.1-zip php8.1-bcmath php8.1-soap \ + php8.1-intl php8.1-readline \ + php8.1-ldap \ + php8.1-msgpack php8.1-igbinary php8.1-redis php8.1-swoole \ + php8.1-memcached php8.1-pcov php8.1-xdebug \ + && php -r "readfile('https://getcomposer.org/installer');" | php -- --install-dir=/usr/bin/ --filename=composer \ + && curl -sLS https://deb.nodesource.com/setup_$NODE_VERSION.x | bash - \ + && apt-get install -y nodejs \ + && npm install -g npm \ + && curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | gpg --dearmor | tee /usr/share/keyrings/yarn.gpg >/dev/null \ + && echo "deb [signed-by=/usr/share/keyrings/yarn.gpg] https://dl.yarnpkg.com/debian/ stable main" > /etc/apt/sources.list.d/yarn.list \ + && curl -sS https://www.postgresql.org/media/keys/ACCC4CF8.asc | gpg --dearmor | tee /usr/share/keyrings/pgdg.gpg >/dev/null \ + && echo "deb [signed-by=/usr/share/keyrings/pgdg.gpg] http://apt.postgresql.org/pub/repos/apt jammy-pgdg main" > /etc/apt/sources.list.d/pgdg.list \ + && apt-get update \ + && apt-get install -y yarn \ + && apt-get install -y mysql-client \ + && apt-get install -y postgresql-client-$POSTGRES_VERSION \ + && apt-get -y autoremove \ + && apt-get clean \ + && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* + +RUN setcap "cap_net_bind_service=+ep" /usr/bin/php8.1 + +RUN groupadd --force -g $WWWGROUP sail +RUN useradd -ms /bin/bash --no-user-group -g $WWWGROUP -u 1337 sail + +COPY start-container /usr/local/bin/start-container +COPY supervisord.conf /etc/supervisor/conf.d/supervisord.conf +COPY php.ini /etc/php/8.1/cli/conf.d/99-sail.ini +RUN chmod +x /usr/local/bin/start-container + +EXPOSE 8000 + +ENTRYPOINT ["start-container"] diff --git a/docker/8.1/php.ini b/docker/8.1/php.ini new file mode 100644 index 0000000..66d04d5 --- /dev/null +++ b/docker/8.1/php.ini @@ -0,0 +1,4 @@ +[PHP] +post_max_size = 100M +upload_max_filesize = 100M +variables_order = EGPCS diff --git a/docker/8.1/start-container b/docker/8.1/start-container new file mode 100644 index 0000000..b864399 --- /dev/null +++ b/docker/8.1/start-container @@ -0,0 +1,17 @@ +#!/usr/bin/env bash + +if [ ! -z "$WWWUSER" ]; then + usermod -u $WWWUSER sail +fi + +if [ ! -d /.composer ]; then + mkdir /.composer +fi + +chmod -R ugo+rw /.composer + +if [ $# -gt 0 ]; then + exec gosu $WWWUSER "$@" +else + exec /usr/bin/supervisord -c /etc/supervisor/conf.d/supervisord.conf +fi diff --git a/docker/8.1/supervisord.conf b/docker/8.1/supervisord.conf new file mode 100644 index 0000000..9d28479 --- /dev/null +++ b/docker/8.1/supervisord.conf @@ -0,0 +1,14 @@ +[supervisord] +nodaemon=true +user=root +logfile=/var/log/supervisor/supervisord.log +pidfile=/var/run/supervisord.pid + +[program:php] +command=/usr/bin/php -d variables_order=EGPCS /var/www/html/artisan serve --host=0.0.0.0 --port=80 +user=sail +environment=LARAVEL_SAIL="1" +stdout_logfile=/dev/stdout +stdout_logfile_maxbytes=0 +stderr_logfile=/dev/stderr +stderr_logfile_maxbytes=0 diff --git a/docker/8.2/Dockerfile b/docker/8.2/Dockerfile new file mode 100644 index 0000000..df0400c --- /dev/null +++ b/docker/8.2/Dockerfile @@ -0,0 +1,58 @@ +FROM ubuntu:22.04 + +LABEL maintainer="Taylor Otwell" + +ARG WWWGROUP +ARG NODE_VERSION=18 +ARG POSTGRES_VERSION=14 + +WORKDIR /var/www/html + +ENV DEBIAN_FRONTEND noninteractive +ENV TZ=UTC + +RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone + +RUN apt-get update \ + && apt-get install -y gnupg gosu curl ca-certificates zip unzip git supervisor sqlite3 libcap2-bin libpng-dev python2 dnsutils \ + && curl -sS 'https://keyserver.ubuntu.com/pks/lookup?op=get&search=0x14aa40ec0831756756d7f66c4f4ea0aae5267a6c' | gpg --dearmor | tee /etc/apt/keyrings/ppa_ondrej_php.gpg > /dev/null \ + && echo "deb [signed-by=/etc/apt/keyrings/ppa_ondrej_php.gpg] https://ppa.launchpadcontent.net/ondrej/php/ubuntu jammy main" > /etc/apt/sources.list.d/ppa_ondrej_php.list \ + && apt-get update \ + && apt-get install -y php8.2-cli php8.2-dev \ + php8.2-pgsql php8.2-sqlite3 php8.2-gd \ + php8.2-curl \ + php8.2-imap php8.2-mysql php8.2-mbstring \ + php8.2-xml php8.2-zip php8.2-bcmath php8.2-soap \ + php8.2-intl php8.2-readline \ + php8.2-ldap \ + php8.2-msgpack php8.2-igbinary php8.2-redis php8.2-swoole \ + php8.2-memcached php8.2-pcov php8.2-xdebug \ + && php -r "readfile('https://getcomposer.org/installer');" | php -- --install-dir=/usr/bin/ --filename=composer \ + && curl -sLS https://deb.nodesource.com/setup_$NODE_VERSION.x | bash - \ + && apt-get install -y nodejs \ + && npm install -g npm \ + && curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | gpg --dearmor | tee /etc/apt/keyrings/yarn.gpg >/dev/null \ + && echo "deb [signed-by=/etc/apt/keyrings/yarn.gpg] https://dl.yarnpkg.com/debian/ stable main" > /etc/apt/sources.list.d/yarn.list \ + && curl -sS https://www.postgresql.org/media/keys/ACCC4CF8.asc | gpg --dearmor | tee /etc/apt/keyrings/pgdg.gpg >/dev/null \ + && echo "deb [signed-by=/etc/apt/keyrings/pgdg.gpg] http://apt.postgresql.org/pub/repos/apt jammy-pgdg main" > /etc/apt/sources.list.d/pgdg.list \ + && apt-get update \ + && apt-get install -y yarn \ + && apt-get install -y mysql-client \ + && apt-get install -y postgresql-client-$POSTGRES_VERSION \ + && apt-get -y autoremove \ + && apt-get clean \ + && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* + +RUN setcap "cap_net_bind_service=+ep" /usr/bin/php8.2 + +RUN groupadd --force -g $WWWGROUP sail +RUN useradd -ms /bin/bash --no-user-group -g $WWWGROUP -u 1337 sail + +COPY start-container /usr/local/bin/start-container +COPY supervisord.conf /etc/supervisor/conf.d/supervisord.conf +COPY php.ini /etc/php/8.2/cli/conf.d/99-sail.ini +RUN chmod +x /usr/local/bin/start-container + +EXPOSE 8000 + +ENTRYPOINT ["start-container"] diff --git a/docker/8.2/php.ini b/docker/8.2/php.ini new file mode 100644 index 0000000..66d04d5 --- /dev/null +++ b/docker/8.2/php.ini @@ -0,0 +1,4 @@ +[PHP] +post_max_size = 100M +upload_max_filesize = 100M +variables_order = EGPCS diff --git a/docker/8.2/start-container b/docker/8.2/start-container new file mode 100644 index 0000000..b864399 --- /dev/null +++ b/docker/8.2/start-container @@ -0,0 +1,17 @@ +#!/usr/bin/env bash + +if [ ! -z "$WWWUSER" ]; then + usermod -u $WWWUSER sail +fi + +if [ ! -d /.composer ]; then + mkdir /.composer +fi + +chmod -R ugo+rw /.composer + +if [ $# -gt 0 ]; then + exec gosu $WWWUSER "$@" +else + exec /usr/bin/supervisord -c /etc/supervisor/conf.d/supervisord.conf +fi diff --git a/docker/8.2/supervisord.conf b/docker/8.2/supervisord.conf new file mode 100644 index 0000000..9d28479 --- /dev/null +++ b/docker/8.2/supervisord.conf @@ -0,0 +1,14 @@ +[supervisord] +nodaemon=true +user=root +logfile=/var/log/supervisor/supervisord.log +pidfile=/var/run/supervisord.pid + +[program:php] +command=/usr/bin/php -d variables_order=EGPCS /var/www/html/artisan serve --host=0.0.0.0 --port=80 +user=sail +environment=LARAVEL_SAIL="1" +stdout_logfile=/dev/stdout +stdout_logfile_maxbytes=0 +stderr_logfile=/dev/stderr +stderr_logfile_maxbytes=0 diff --git a/public/.htaccess b/public/.htaccess index 3aec5e2..4fa4db0 100644 --- a/public/.htaccess +++ b/public/.htaccess @@ -1,3 +1,4 @@ +AddDefaultCharset UTF-8 Options -MultiViews -Indexes diff --git a/public/css/style.css b/public/css/style.css deleted file mode 100644 index dec844a..0000000 --- a/public/css/style.css +++ /dev/null @@ -1,6398 +0,0 @@ -/*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */ -/* Document - ========================================================================== */ -/** - * 1. Correct the line height in all browsers. - * 2. Prevent adjustments of font size after orientation changes in iOS. - */ -html { - line-height: 1.15; /* 1 */ - -webkit-text-size-adjust: 100%; /* 2 */ -} - -/* Sections - ========================================================================== */ -/** - * Remove the margin in all browsers. - */ -body { - margin: 0; -} - -/** - * Render the `main` element consistently in IE. - */ -main { - display: block; -} - -/** - * Correct the font size and margin on `h1` elements within `section` and - * `article` contexts in Chrome, Firefox, and Safari. - */ -h1 { - font-size: 2em; - margin: 0.67em 0; -} - -/* Grouping content - ========================================================================== */ -/** - * 1. Add the correct box sizing in Firefox. - * 2. Show the overflow in Edge and IE. - */ -hr { - -webkit-box-sizing: content-box; - box-sizing: content-box; /* 1 */ - height: 0; /* 1 */ - overflow: visible; /* 2 */ -} - -/** - * 1. Correct the inheritance and scaling of font size in all browsers. - * 2. Correct the odd `em` font sizing in all browsers. - */ -pre { - font-family: monospace, monospace; /* 1 */ - font-size: 1em; /* 2 */ -} - -/* Text-level semantics - ========================================================================== */ -/** - * Remove the gray background on active links in IE 10. - */ -a { - background-color: transparent; -} - -/** - * 1. Remove the bottom border in Chrome 57- - * 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari. - */ -abbr[title] { - border-bottom: none; /* 1 */ - text-decoration: underline; /* 2 */ - -webkit-text-decoration: underline dotted; - text-decoration: underline dotted; /* 2 */ -} - -/** - * Add the correct font weight in Chrome, Edge, and Safari. - */ -b, -strong { - font-weight: bolder; -} - -/** - * 1. Correct the inheritance and scaling of font size in all browsers. - * 2. Correct the odd `em` font sizing in all browsers. - */ -code, -kbd, -samp { - font-family: monospace, monospace; /* 1 */ - font-size: 1em; /* 2 */ -} - -/** - * Add the correct font size in all browsers. - */ -small { - font-size: 80%; -} - -/** - * Prevent `sub` and `sup` elements from affecting the line height in - * all browsers. - */ -sub, -sup { - font-size: 75%; - line-height: 0; - position: relative; - vertical-align: baseline; -} - -sub { - bottom: -0.25em; -} - -sup { - top: -0.5em; -} - -/* Embedded content - ========================================================================== */ -/** - * Remove the border on images inside links in IE 10. - */ -img { - border-style: none; -} - -/* Forms - ========================================================================== */ -/** - * 1. Change the font styles in all browsers. - * 2. Remove the margin in Firefox and Safari. - */ -button, -input, -optgroup, -select, -textarea { - font-family: inherit; /* 1 */ - font-size: 100%; /* 1 */ - line-height: 1.15; /* 1 */ - margin: 0; /* 2 */ -} - -/** - * Show the overflow in IE. - * 1. Show the overflow in Edge. - */ -button, -input { /* 1 */ - overflow: visible; -} - -/** - * Remove the inheritance of text transform in Edge, Firefox, and IE. - * 1. Remove the inheritance of text transform in Firefox. - */ -button, -select { /* 1 */ - text-transform: none; -} - -/** - * Correct the inability to style clickable types in iOS and Safari. - */ -button, -[type=button], -[type=reset], -[type=submit] { - -webkit-appearance: button; -} - -/** - * Remove the inner border and padding in Firefox. - */ -button::-moz-focus-inner, -[type=button]::-moz-focus-inner, -[type=reset]::-moz-focus-inner, -[type=submit]::-moz-focus-inner { - border-style: none; - padding: 0; -} - -/** - * Restore the focus styles unset by the previous rule. - */ -button:-moz-focusring, -[type=button]:-moz-focusring, -[type=reset]:-moz-focusring, -[type=submit]:-moz-focusring { - outline: 1px dotted ButtonText; -} - -/** - * Correct the padding in Firefox. - */ -fieldset { - padding: 0.35em 0.75em 0.625em; -} - -/** - * 1. Correct the text wrapping in Edge and IE. - * 2. Correct the color inheritance from `fieldset` elements in IE. - * 3. Remove the padding so developers are not caught out when they zero out - * `fieldset` elements in all browsers. - */ -legend { - -webkit-box-sizing: border-box; - box-sizing: border-box; /* 1 */ - color: inherit; /* 2 */ - display: table; /* 1 */ - max-width: 100%; /* 1 */ - padding: 0; /* 3 */ - white-space: normal; /* 1 */ -} - -/** - * Add the correct vertical alignment in Chrome, Firefox, and Opera. - */ -progress { - vertical-align: baseline; -} - -/** - * Remove the default vertical scrollbar in IE 10+. - */ -textarea { - overflow: auto; -} - -/** - * 1. Add the correct box sizing in IE 10. - * 2. Remove the padding in IE 10. - */ -[type=checkbox], -[type=radio] { - -webkit-box-sizing: border-box; - box-sizing: border-box; /* 1 */ - padding: 0; /* 2 */ -} - -/** - * Correct the cursor style of increment and decrement buttons in Chrome. - */ -[type=number]::-webkit-inner-spin-button, -[type=number]::-webkit-outer-spin-button { - height: auto; -} - -/** - * 1. Correct the odd appearance in Chrome and Safari. - * 2. Correct the outline style in Safari. - */ -[type=search] { - -webkit-appearance: textfield; /* 1 */ - outline-offset: -2px; /* 2 */ -} - -/** - * Remove the inner padding in Chrome and Safari on macOS. - */ -[type=search]::-webkit-search-decoration { - -webkit-appearance: none; -} - -/** - * 1. Correct the inability to style clickable types in iOS and Safari. - * 2. Change font properties to `inherit` in Safari. - */ -::-webkit-file-upload-button { - -webkit-appearance: button; /* 1 */ - font: inherit; /* 2 */ -} - -/* Interactive - ========================================================================== */ -/* - * Add the correct display in Edge, IE 10+, and Firefox. - */ -details { - display: block; -} - -/* - * Add the correct display in all browsers. - */ -summary { - display: list-item; -} - -/* Misc - ========================================================================== */ -/** - * Add the correct display in IE 10+. - */ -template { - display: none; -} - -/** - * Add the correct display in IE 10. - */ -[hidden] { - display: none; -} - -@font-face { - font-family: "Manrope"; - src: url("../fonts/Manrope-ExtraLight.woff2") format("woff2"), url("../fonts/Manrope-ExtraLight.woff") format("woff"); - font-weight: 200; - font-style: normal; - font-display: swap; -} -@font-face { - font-family: "Manrope"; - src: url("../fonts/Manrope-Light.woff2") format("woff2"), url("../fonts/Manrope-Light.woff") format("woff"); - font-weight: 300; - font-style: normal; - font-display: swap; -} -@font-face { - font-family: "Manrope"; - src: url("../fonts/Manrope-Regular.woff2") format("woff2"), url("../fonts/Manrope-Regular.woff") format("woff"); - font-weight: 400; - font-style: normal; - font-display: swap; -} -@font-face { - font-family: "Manrope"; - src: url("../fonts/Manrope-Medium.woff2") format("woff2"), url("../fonts/Manrope-Medium.woff") format("woff"); - font-weight: 500; - font-style: normal; - font-display: swap; -} -@font-face { - font-family: "Manrope"; - src: url("../fonts/Manrope-SemiBold.woff2") format("woff2"), url("../fonts/Manrope-SemiBold.woff") format("woff"); - font-weight: 600; - font-style: normal; - font-display: swap; -} -@font-face { - font-family: "Manrope"; - src: url("../fonts/Manrope-Bold.woff2") format("woff2"), url("../fonts/Manrope-Bold.woff") format("woff"); - font-weight: 700; - font-style: normal; - font-display: swap; -} -@font-face { - font-family: "Manrope"; - src: url("../fonts/Manrope-ExtraBold.woff2") format("woff2"), url("../fonts/Manrope-ExtraBold.woff") format("woff"); - font-weight: 800; - font-style: normal; - font-display: swap; -} -html { - scrollbar-color: #42AAFF transparent; - scrollbar-width: thin; -} - -::-webkit-scrollbar { - width: 8px; - border-radius: 8px; - background-color: transparent; -} - -::-webkit-scrollbar-thumb { - background-color: #42aaff; - border-radius: 8px; -} -@media (min-width: 1200px) { - ::-webkit-scrollbar-thumb { - background-color: rgba(66, 170, 255, 0.5); - } -} - -@media (min-width: 1200px) { - ::-webkit-scrollbar-thumb:hover { - background-color: #42aaff; - } -} - -*, -*::before, -*::after { - -webkit-box-sizing: border-box; - box-sizing: border-box; - -webkit-tap-highlight-color: rgba(0, 0, 0, 0); -} - -a { - display: inline-block; - color: inherit; - text-decoration: none; -} - -h1, -h2, -h3, -h4, -h5, -h6, -p, -ul, -ol, -li { - margin: 0; - padding: 0; -} - -li { - list-style: none; -} - -body { - font-family: "Manrope", sans-serif; - color: #363A3F; - font-size: 16px; - font-weight: 400; - overflow-x: hidden; - padding-top: 80px; -} -@media (min-width: 1200px) { - body { - padding-top: 110px; - } -} -body::before { - content: ""; - position: fixed; - top: 0; - left: 0; - z-index: 100; - width: 100%; - height: 100%; - background-color: rgba(3, 9, 15, 0.6); - opacity: 0; - visibility: hidden; - -webkit-transition: 0.3s; - -o-transition: 0.3s; - transition: 0.3s; -} -body.overlay::before { - opacity: 1; - visibility: visible; -} - -img { - display: block; -} - -button { - padding: 0; - border: none; - color: inherit; - background-color: transparent; - cursor: pointer; -} - -.container { - max-width: 1256px; - padding: 0 20px; - margin: 0 auto; -} - -html, -body { - height: 100%; -} - -.wrapper { - display: -webkit-box; - display: -ms-flexbox; - display: flex; - -webkit-box-orient: vertical; - -webkit-box-direction: normal; - -ms-flex-direction: column; - flex-direction: column; - min-height: 100%; - overflow-x: hidden; -} - -main { - -webkit-box-flex: 1; - -ms-flex: 1 1 auto; - flex: 1 1 auto; -} - -input::-webkit-input-placeholder, textarea::-webkit-input-placeholder { - -webkit-transition: 0.3s; - transition: 0.3s; -} - -input::-moz-placeholder, textarea::-moz-placeholder { - -moz-transition: 0.3s; - transition: 0.3s; -} - -input:-ms-input-placeholder, textarea:-ms-input-placeholder { - -ms-transition: 0.3s; - transition: 0.3s; -} - -input::-ms-input-placeholder, textarea::-ms-input-placeholder { - -ms-transition: 0.3s; - transition: 0.3s; -} - -input::placeholder, -textarea::placeholder { - -webkit-transition: 0.3s; - -o-transition: 0.3s; - transition: 0.3s; -} -input:focus::-webkit-input-placeholder, textarea:focus::-webkit-input-placeholder { - opacity: 0; -} -input:focus::-moz-placeholder, textarea:focus::-moz-placeholder { - opacity: 0; -} -input:focus:-ms-input-placeholder, textarea:focus:-ms-input-placeholder { - opacity: 0; -} -input:focus::-ms-input-placeholder, textarea:focus::-ms-input-placeholder { - opacity: 0; -} -input:focus::placeholder, -textarea:focus::placeholder { - opacity: 0; -} - -.visually-hidden { - position: absolute; - width: 1px; - height: 1px; - margin: -1px; - padding: 0; - overflow: hidden; - border: 0; - clip: rect(0 0 0 0); -} - -.title-main { - color: #FFFFFF; - font-size: 32px; - line-height: 36px; - font-weight: 800; -} -@media (min-width: 1200px) { - .title-main { - font-size: 48px; - line-height: 52px; - } -} -.title-main strong { - color: #42AAFF; -} - -.title { - font-size: 32px; - line-height: 36px; - font-weight: 800; -} -@media (min-width: 1200px) { - .title { - font-size: 36px; - line-height: 44px; - } -} - -.btn { - font-size: 16px; - line-height: 22px; - font-weight: 600; - text-align: center; - padding: 12px 38px; - border-radius: 10px; - -webkit-transition: 0.3s; - -o-transition: 0.3s; - transition: 0.3s; -} -.btn--main { - color: #FFFFFF; - background-color: #012060; - border: 2px solid #012060; - -webkit-box-shadow: 0px 2px 12px rgba(9, 34, 57, 0.2); - box-shadow: 0px 2px 12px rgba(9, 34, 57, 0.2); -} -@media (min-width: 1200px) { - .btn--main:hover { - background-color: #344D80; - border-color: #344D80; - } -} -@media (min-width: 1200px) { - .btn--main:active { - background-color: #011A4D; - border-color: #011A4D; - } -} -.btn--main span { - position: relative; - display: block; - padding-left: 30px; -} -.btn--main svg { - position: absolute; - top: 50%; - left: 0; - -webkit-transform: translateY(-50%); - -ms-transform: translateY(-50%); - transform: translateY(-50%); - fill: #FFFFFF; -} -.btn--white { - color: #012060; - background-color: #FFFFFF; - border: 2px solid #FFFFFF; -} -@media (min-width: 1200px) { - .btn--white:hover { - color: #FFFFFF; - background-color: #012060; - border-color: #012060; - } -} -@media (min-width: 1200px) { - .btn--white:active { - color: #FFFFFF; - background-color: #011A4D; - border-color: #011A4D; - } -} -.btn--bordered { - color: #012060; - background-color: transparent; - border: 2px solid #012060; -} -@media (min-width: 1200px) { - .btn--bordered:hover { - color: #FFFFFF; - background-color: #012060; - } -} -@media (min-width: 1200px) { - .btn--bordered:active { - color: #FFFFFF; - background-color: #011A4D; - border-color: #011A4D; - } -} -.btn:disabled { - opacity: 0.5; - cursor: auto; - pointer-events: none; -} - -.field { - display: block; -} -.field input, -.field textarea { - display: block; - width: 100%; - padding: 14px 19px; - border-radius: 10px; - border: 1px solid transparent; - outline: none; - color: #363A3F; - font-size: 14px; - line-height: 20px; - font-weight: 400; - background-color: #FFFFFF; -} -.field input::-webkit-input-placeholder, .field textarea::-webkit-input-placeholder { - color: #CDCECF; -} -.field input::-moz-placeholder, .field textarea::-moz-placeholder { - color: #CDCECF; -} -.field input:-ms-input-placeholder, .field textarea:-ms-input-placeholder { - color: #CDCECF; -} -.field input::-ms-input-placeholder, .field textarea::-ms-input-placeholder { - color: #CDCECF; -} -.field input::placeholder, -.field textarea::placeholder { - color: #CDCECF; -} -.field input:focus, .field input.no-error, -.field textarea:focus, -.field textarea.no-error { - border-color: #42AAFF; -} -.field input.error, -.field textarea.error { - border-color: #E9162F; -} -.field input { - height: 50px; -} -.field textarea { - resize: none; -} -.field span.error { - display: block; - margin-top: 4px; - font-weight: 500; - color: #E9162F; - font-size: 12px; - line-height: 18px; -} - -.spinner { - position: fixed; - top: 50%; - left: 50%; - z-index: 100; - display: block; - width: 50px; - height: 50px; - margin: -25px 0px 0px -25px; - border: 4px solid #edf7ff; - border-radius: 50%; - border-top-color: #42AAFF; - opacity: 0; - visibility: hidden; - -webkit-transition: 0.3s; - -o-transition: 0.3s; - transition: 0.3s; -} -.spinner.active { - opacity: 1; - visibility: visible; - -webkit-animation: spin 1s ease-in-out infinite; - animation: spin 1s ease-in-out infinite; -} - -@-webkit-keyframes spin { - to { - -webkit-transform: rotate(360deg); - transform: rotate(360deg); - } -} - -@keyframes spin { - to { - -webkit-transform: rotate(360deg); - transform: rotate(360deg); - } -} -.map { - height: 500px; - background-color: #ccc; -} -.map [class*=copyrights-pane], -.map [class*=ground-pane] { - -webkit-filter: grayscale(1); - filter: grayscale(1); -} -.map [class*=image-with-content-content] { - width: 100% !important; -} -.map .my-hint { - display: inline-block; - width: 240px; - padding: 20px; - background: #FFFFFF; - -webkit-box-shadow: 0px 2px 12px rgba(104, 107, 111, 0.32); - box-shadow: 0px 2px 12px rgba(104, 107, 111, 0.32); - border-radius: 10px; - color: #4B4E53; - font-size: 16px; - line-height: 20px; - font-weight: 600; - position: relative; - left: 30px; - -webkit-transform: translateY(-100%); - -ms-transform: translateY(-100%); - transform: translateY(-100%); -} - -.pages { - min-height: 100vh; - display: -webkit-box; - display: -ms-flexbox; - display: flex; - -webkit-box-pack: center; - -ms-flex-pack: center; - justify-content: center; - -webkit-box-align: center; - -ms-flex-align: center; - align-items: center; - font-size: 16px; - line-height: 115%; - padding: 20px; - margin-top: -110px; -} -@media (min-width: 640px) { - .pages { - font-size: 20px; - } -} -.pages li { - margin: 5px; - color: #42AAFF; - position: relative; - list-style-type: decimal; - cursor: pointer; -} -.pages li:has(a) { - cursor: auto; -} -.pages a { - color: #42AAFF; -} - -.header { - position: fixed; - top: 0; - left: 0; - z-index: 50; - width: 100%; - background-color: #FFFFFF; - -webkit-box-shadow: 0px 2px 16px rgba(14, 56, 94, 0.08); - box-shadow: 0px 2px 16px rgba(14, 56, 94, 0.08); -} -@media (min-width: 1200px) { - .header.fixed .header__wrap { - min-height: 90px; - } -} -.header__wrap { - display: -webkit-box; - display: -ms-flexbox; - display: flex; - -webkit-box-align: center; - -ms-flex-align: center; - align-items: center; - -webkit-box-pack: justify; - -ms-flex-pack: justify; - justify-content: space-between; - min-height: 80px; - padding: 10px 0; - -webkit-transition: 0.2s; - -o-transition: 0.2s; - transition: 0.2s; -} -@media (min-width: 1200px) { - .header__wrap { - min-height: 110px; - } -} -.header__logo img { - max-width: 175px; - max-height: 50px; -} -@media (min-width: 1200px) { - .header__logo img { - max-height: 70px; - } -} -.header__nav { - margin: 0 30px; -} -.header__buttons { - display: -webkit-box; - display: -ms-flexbox; - display: flex; - -webkit-box-align: center; - -ms-flex-align: center; - align-items: center; -} -.header__contacts { - display: none; -} -@media (min-width: 1200px) { - .header__contacts { - display: -webkit-box; - display: -ms-flexbox; - display: flex; - margin-right: 30px; - } -} -.header__btn-phone { - display: -webkit-box; - display: -ms-flexbox; - display: flex; - -webkit-box-align: center; - -ms-flex-align: center; - align-items: center; - -webkit-box-pack: center; - -ms-flex-pack: center; - justify-content: center; - width: 40px; - height: 40px; - margin-right: 5px; -} -@media (min-width: 1200px) { - .header__btn-phone { - display: none; - } -} -.header__col { - position: relative; - display: -webkit-box; - display: -ms-flexbox; - display: flex; - -webkit-box-orient: vertical; - -webkit-box-direction: normal; - -ms-flex-direction: column; - flex-direction: column; - -webkit-box-align: start; - -ms-flex-align: start; - align-items: flex-start; - -webkit-box-pack: center; - -ms-flex-pack: center; - justify-content: center; - -ms-flex-negative: 0; - flex-shrink: 0; -} -.header__col:not(:last-child) { - margin-right: 26px; -} -.header__col:not(:last-child)::after { - content: ""; - position: absolute; - top: 0; - right: -14px; - bottom: 0; - width: 2px; - pointer-events: none; - background-color: #42AAFF; -} -.header__contact { - display: block; - font-size: 18px; - line-height: 24px; - font-weight: 500; - -webkit-transition: 0.3s; - -o-transition: 0.3s; - transition: 0.3s; -} -@media (min-width: 1200px) { - .header__contact:hover { - color: #42AAFF; - } -} -.header__btn-callback { - margin-top: 1px; - font-size: 14px; - line-height: 22px; - font-weight: 500; - border-bottom: 2px dotted #363A3F; - -webkit-transition: 0.3s; - -o-transition: 0.3s; - transition: 0.3s; -} -@media (min-width: 1200px) { - .header__btn-callback:hover { - color: #42AAFF; - border-color: #42AAFF; - } -} -.header__burger { - position: relative; - margin-right: -6px; - width: 40px; - height: 40px; - font-size: 0; - line-height: 0; - -webkit-transition: 0.3s; - -o-transition: 0.3s; - transition: 0.3s; -} -@media (min-width: 1200px) { - .header__burger { - margin-right: 0; - padding-left: 40px; - width: auto; - height: auto; - color: #363A3F; - font-size: 16px; - line-height: 40px; - font-weight: 600; - } -} -.header__burger svg { - position: absolute; - top: 50%; - left: 50%; - -webkit-transform: translate(-50%, -50%); - -ms-transform: translate(-50%, -50%); - transform: translate(-50%, -50%); - fill: #363A3F; - -webkit-transition: 0.3s; - -o-transition: 0.3s; - transition: 0.3s; -} -@media (min-width: 1200px) { - .header__burger svg { - left: 0; - -webkit-transform: translateY(-50%); - -ms-transform: translateY(-50%); - transform: translateY(-50%); - } -} -@media (min-width: 1200px) { - .header__burger:hover { - color: #42AAFF; - } -} -@media (min-width: 1200px) { - .header__burger:hover svg { - fill: #42AAFF; - } -} - -.menu { - position: fixed; - top: 0; - left: 0; - z-index: 100; - display: -webkit-box; - display: -ms-flexbox; - display: flex; - -webkit-box-pack: end; - -ms-flex-pack: end; - justify-content: flex-end; - width: 100%; - height: 100%; - background-color: rgba(3, 9, 15, 0.6); - opacity: 0; - visibility: hidden; - -webkit-transition: 0.4s; - -o-transition: 0.4s; - transition: 0.4s; -} -.menu.active { - opacity: 1; - visibility: visible; -} -.menu.active .menu__wrap { - -webkit-transform: translate(0); - -ms-transform: translate(0); - transform: translate(0); -} -.menu__wrap { - position: relative; - max-width: 280px; - width: 100%; - padding: 111px 0 0 0px; - background-color: #4B4E53; - -webkit-transform: translate(100%); - -ms-transform: translate(100%); - transform: translate(100%); - -webkit-transition: 0.4s; - -o-transition: 0.4s; - transition: 0.4s; -} -@media (min-width: 1200px) { - .menu__wrap { - max-width: 530px; - padding: 126px 0 0 60px; - } -} -.menu__close { - position: absolute; - top: 44px; - right: 20px; - padding: 0 32px 0 0; - color: #FFFFFF; - font-size: 16px; - line-height: 22px; - font-weight: 600; - fill: #FFFFFF; - -webkit-transition: 0.3s; - -o-transition: 0.3s; - transition: 0.3s; -} -@media (min-width: 1200px) { - .menu__close { - left: 100px; - right: auto; - padding: 0 0 0 32px; - } -} -.menu__close svg { - position: absolute; - top: 1px; - right: 0; - -webkit-transition: 0.3s; - -o-transition: 0.3s; - transition: 0.3s; -} -@media (min-width: 1200px) { - .menu__close svg { - left: 0; - right: auto; - } -} -@media (min-width: 1200px) { - .menu__close:hover { - color: #42AAFF; - } -} -@media (min-width: 1200px) { - .menu__close:hover svg { - fill: #42AAFF; - } -} -.menu__inner { - overflow-y: auto; - height: 100%; - padding-bottom: 20px; -} -.menu__nav { - margin-bottom: 80px; -} -.menu__list { - padding-left: 40px; -} -@media (min-width: 1200px) { - .menu__list { - padding-left: 0; - } -} -.menu__item { - padding: 20px 20px 20px 40px; - border-bottom: 1px solid #A0A2A4; -} -.menu__link { - color: #FFFFFF; - font-size: 24px; - line-height: 33px; - font-weight: 600; - -webkit-transition: 0.3s; - -o-transition: 0.3s; - transition: 0.3s; -} -@media (min-width: 1200px) { - .menu__link:hover { - color: #42AAFF; - } -} -.menu__link-favorites { - position: relative; -} -.menu__link-favorites span { - position: absolute; - top: 50%; - left: -80px; - -webkit-transform: translateY(-50%); - -ms-transform: translateY(-50%); - transform: translateY(-50%); - min-width: 30px; - height: 40px; - padding: 9px 5px; - border-radius: 0px 10px 10px 0px; - font-size: 16px; - line-height: 22px; - font-weight: 600; - text-align: center; - color: #FFFFFF; - background-color: #42AAFF; - background-color: #42AAFF; -} -@media (min-width: 1200px) { - .menu__link-favorites span { - display: none; - } -} -.menu__contacts { - margin-bottom: 40px; - padding-left: 40px; -} -@media (min-width: 1200px) { - .menu__contacts { - padding-left: 0; - } -} -.menu__contact { - display: block; - width: -webkit-fit-content; - width: -moz-fit-content; - width: fit-content; - color: #FFFFFF; - font-size: 12px; - line-height: 18px; - font-weight: 700; -} -.menu__contact:not(:last-child) { - margin-bottom: 20px; -} -.menu__contact span { - display: block; - font-size: 16px; - line-height: 24px; - font-weight: 500; - -webkit-transition: 0.3s; - -o-transition: 0.3s; - transition: 0.3s; -} -@media (min-width: 1200px) { - .menu__contact:hover span { - color: #42AAFF; - } -} -.menu__social { - padding-left: 40px; -} -@media (min-width: 1200px) { - .menu__social { - padding-left: 0; - } -} - -.nav { - display: none; -} -@media (min-width: 1200px) { - .nav { - display: block; - } -} -.nav__list { - display: -webkit-box; - display: -ms-flexbox; - display: flex; -} -.nav__item { - -ms-flex-negative: 0; - flex-shrink: 0; -} -.nav__item:not(:last-child) { - margin-right: 20px; -} -.nav__link { - font-size: 16px; - line-height: 22px; - font-weight: 500; - -webkit-transition: 0.3s; - -o-transition: 0.3s; - transition: 0.3s; -} -@media (min-width: 1200px) { - .nav__link:hover { - color: #42AAFF; - } -} -.nav__link-favorites { - position: relative; - margin-right: 28px; -} -.nav__link-favorites span { - position: absolute; - top: -10px; - left: calc(100% + 4px); - min-width: 24px; - color: #FFFFFF; - font-size: 14px; - line-height: 24px; - font-weight: 600; - text-align: center; - border-radius: 15px; - padding: 0 5px; - background-color: #42AAFF; - -webkit-transition: 0.3s; - -o-transition: 0.3s; - transition: 0.3s; -} -@media (min-width: 1200px) { - .nav__link-favorites:hover span { - background-color: #3588CC; - } -} - -.social__title { - margin-bottom: 20px; - color: #363A3F; - font-size: 14px; - line-height: 20px; - font-weight: 600; -} -.social__list { - display: -webkit-box; - display: -ms-flexbox; - display: flex; -} -.social__item:not(:last-child) { - margin-right: 10px; -} -.social__link { - position: relative; - display: block; - width: 40px; - height: 40px; - border-radius: 50%; -} - -.hero { - position: relative; - overflow: hidden; -} -.hero::before { - content: ""; - position: absolute; - top: 0; - left: 0; - width: 100%; - height: 100%; - background-color: rgba(3, 9, 15, 0.6); -} -.hero__bg { - position: absolute; - top: 0; - left: 0; - z-index: -1; - width: 100%; - height: 100%; - background-repeat: no-repeat; - background-size: cover; - background-position: center; -} -@media (min-width: 1200px) { - .hero__bg { - -webkit-animation: bg-scale 20s linear infinite alternate; - animation: bg-scale 20s linear infinite alternate; - } -} -.hero__wrap { - position: relative; - display: -webkit-box; - display: -ms-flexbox; - display: flex; - -webkit-box-orient: vertical; - -webkit-box-direction: normal; - -ms-flex-direction: column; - flex-direction: column; - -webkit-box-pack: center; - -ms-flex-pack: center; - justify-content: center; - padding: 80px 0; -} -@media (min-width: 1200px) { - .hero__wrap { - min-height: calc(100vh - 110px); - padding: 50px 0 105px; - } -} -.hero__cnt { - max-width: 830px; - margin-bottom: 40px; -} -@media (min-width: 1200px) { - .hero__cnt { - margin-bottom: 60px; - } -} -.hero__descr { - color: #FFFFFF; - font-size: 20px; - line-height: 24px; - font-weight: 500; - margin-top: 12px; -} -@media (min-width: 1200px) { - .hero__descr { - line-height: 30px; - } -} -.hero__links { - margin-bottom: 20px; - display: -webkit-box; - display: -ms-flexbox; - display: flex; - -webkit-box-orient: vertical; - -webkit-box-direction: normal; - -ms-flex-direction: column; - flex-direction: column; - -webkit-box-align: start; - -ms-flex-align: start; - align-items: flex-start; -} -@media (min-width: 1200px) { - .hero__links { - -webkit-box-orient: horizontal; - -webkit-box-direction: normal; - -ms-flex-direction: row; - flex-direction: row; - } -} -.hero__link { - position: relative; - padding-left: 12px; - color: #FFFFFF; - font-size: 14px; - line-height: 20px; - font-weight: 700; - -webkit-transition: 0.3s; - -o-transition: 0.3s; - transition: 0.3s; -} -@media (min-width: 1200px) { - .hero__link { - padding-left: 0; - } -} -.hero__link::before { - content: ""; - position: absolute; - top: 8px; - left: 0; - width: 4px; - height: 4px; - border-radius: 50%; - background-color: #FFFFFF; -} -@media (min-width: 1200px) { - .hero__link::before { - display: none; - } -} -.hero__link:not(:last-child) { - margin: 0px 0px 10px 0px; -} -@media (min-width: 1200px) { - .hero__link:not(:last-child) { - margin: 0px 41px 0px 0px; - } -} -@media (min-width: 1200px) { - .hero__link:not(:last-child)::after { - content: ""; - position: absolute; - top: 0; - right: -20px; - bottom: 0; - width: 1px; - background-color: #FFFFFF; - pointer-events: none; - } -} -@media (min-width: 1200px) { - .hero__link:hover { - color: #42AAFF; - } -} -.hero__link.active { - color: #42AAFF; -} -.hero__btn { - display: none; -} -@media (min-width: 1200px) { - .hero__btn { - display: block; - position: absolute; - bottom: 25px; - left: 50%; - -webkit-transform: translateX(-50%); - -ms-transform: translateX(-50%); - transform: translateX(-50%); - width: 20px; - height: 36px; - border: 1px solid #FFFFFF; - border-radius: 60px; - } -} -@media (min-width: 1200px) { - .hero__btn::before { - content: ""; - width: 5px; - height: 5px; - position: absolute; - top: 5px; - left: 50%; - -webkit-transform: translateX(-50%); - -ms-transform: translateX(-50%); - transform: translateX(-50%); - background-color: #FFFFFF; - border-radius: 50%; - opacity: 1; - -webkit-animation: wheel 2s infinite; - animation: wheel 2s infinite; - } -} -.hero .breadcrumbs { - display: none; -} -.hero--modified1 .breadcrumbs, .hero--modified2 .breadcrumbs { - display: block; -} -.hero--modified1 .hero__bg, .hero--modified2 .hero__bg { - -webkit-animation: none; - animation: none; -} -.hero--modified1 .hero__wrap, .hero--modified2 .hero__wrap { - min-height: 0; - display: block; - padding: 0 0 80px; -} -@media (min-width: 1200px) { - .hero--modified1 .hero__wrap, .hero--modified2 .hero__wrap { - padding: 0 0 160px; - } -} -.hero--modified1 .hero__btn, .hero--modified2 .hero__btn { - display: none; -} -.hero--modified1 .hero__cnt { - max-width: 720px; -} -.hero--modified2 .hero__descr, -.hero--modified2 .hero__links { - display: none; -} -.hero--modified2 .hero-search__btn.btn--white { - display: none; -} - -@-webkit-keyframes wheel { - 100% { - opacity: 0; - top: 24px; - } -} - -@keyframes wheel { - 100% { - opacity: 0; - top: 24px; - } -} -@-webkit-keyframes bg-scale { - 0% { - -webkit-transform: scale(1); - transform: scale(1); - } - 100% { - -webkit-transform: scale(1.2); - transform: scale(1.2); - } -} -@keyframes bg-scale { - 0% { - -webkit-transform: scale(1); - transform: scale(1); - } - 100% { - -webkit-transform: scale(1.2); - transform: scale(1.2); - } -} -.hero-search__control { - display: grid; - grid-template-columns: repeat(1, 1fr); - grid-gap: 10px; - margin-bottom: 10px; -} -@media (min-width: 640px) { - .hero-search__control { - grid-template-columns: repeat(2, 1fr); - margin-bottom: 40px; - } -} -@media (min-width: 920px) { - .hero-search__control { - grid-template-columns: repeat(3, 1fr); - } -} -@media (min-width: 1200px) { - .hero-search__control { - display: -webkit-box; - display: -ms-flexbox; - display: flex; - grid-gap: 0; - } -} -.hero-search__bottom { - display: -webkit-box; - display: -ms-flexbox; - display: flex; - -ms-flex-wrap: wrap; - flex-wrap: wrap; - -webkit-box-align: center; - -ms-flex-align: center; - align-items: center; - -webkit-box-pack: justify; - -ms-flex-pack: justify; - justify-content: space-between; -} -@media (min-width: 780px) { - .hero-search__bottom { - -ms-flex-wrap: nowrap; - flex-wrap: nowrap; - } -} -.hero-search__field { - width: 100%; - position: relative; - margin: 0px 0px 40px 0px; -} -@media (min-width: 640px) { - .hero-search__field { - margin: 0px 0px 10px 0px; - } -} -@media (min-width: 780px) { - .hero-search__field { - max-width: 380px; - margin: 0px 10px 0px 0px; - } -} -.hero-search__field input { - display: block; - width: 100%; - height: 50px; - color: #363A3F; - font-size: 14px; - line-height: 20px; - font-weight: 400; - padding: 15px 64px 15px 20px; - border-radius: 10px; - border: none; - background-color: #FFFFFF; -} -.hero-search__field input::-webkit-input-placeholder { - color: #CDCECF; -} -.hero-search__field input::-moz-placeholder { - color: #CDCECF; -} -.hero-search__field input:-ms-input-placeholder { - color: #CDCECF; -} -.hero-search__field input::-ms-input-placeholder { - color: #CDCECF; -} -.hero-search__field input::placeholder { - color: #CDCECF; -} -.hero-search__field button { - position: absolute; - top: 0; - right: 0; - display: -webkit-box; - display: -ms-flexbox; - display: flex; - -webkit-box-align: center; - -ms-flex-align: center; - align-items: center; - -webkit-box-pack: center; - -ms-flex-pack: center; - justify-content: center; - width: 64px; - height: 50px; -} -.hero-search__buttons { - display: -webkit-box; - display: -ms-flexbox; - display: flex; - -webkit-box-orient: vertical; - -webkit-box-direction: normal; - -ms-flex-direction: column; - flex-direction: column; - width: 100%; -} -@media (min-width: 640px) { - .hero-search__buttons { - width: auto; - -webkit-box-orient: horizontal; - -webkit-box-direction: normal; - -ms-flex-direction: row; - flex-direction: row; - } -} -.hero-search__btn { - white-space: nowrap; -} -.hero-search__btn:not(:last-child) { - margin: 0px 0px 10px 0px; -} -@media (min-width: 640px) { - .hero-search__btn:not(:last-child) { - margin: 0px 10px 0px 0px; - } -} - -.hero-filter { - position: relative; -} -@media (min-width: 1200px) { - .hero-filter:not(:last-child) { - border-right: 1px solid #E6E7E7; - } -} -.hero-filter__current { - position: relative; - color: #686B6F; - font-size: 14px; - line-height: 22px; - font-weight: 400; - padding: 14px 40px 14px 20px; - background-color: #FFFFFF; - border-radius: 10px; - cursor: pointer; - -o-text-overflow: ellipsis; - text-overflow: ellipsis; - white-space: nowrap; - overflow: hidden; -} -@media (min-width: 1200px) { - .hero-filter__current { - border-radius: 0; - font-size: 16px; - padding: 19px 40px 19px 20px; - } -} -.hero-filter__current::after { - content: ""; - position: absolute; - top: 50%; - right: 20px; - -webkit-transform: translateY(-50%) rotate(-90deg); - -ms-transform: translateY(-50%) rotate(-90deg); - transform: translateY(-50%) rotate(-90deg); - width: 13px; - height: 7px; - background-repeat: no-repeat; - background-image: url("data:image/svg+xml,%3Csvg width='13' height='7' viewBox='0 0 13 7' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M11.333 1L6.33301 6L1.33301 1' stroke='%2342AAFF' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E"); - -webkit-transition: 0.3s; - -o-transition: 0.3s; - transition: 0.3s; -} -.hero-filter__dropdown { - position: absolute; - top: calc(100% + 30px); - left: 0; - right: 0; - z-index: 5; - padding: 10px 12px 10px 20px; - border-radius: 10px; - background-color: #FFFFFF; - -webkit-box-shadow: 0px 0px 12px rgba(14, 56, 94, 0.4), 0px 0px 40px rgba(14, 56, 94, 0.08); - box-shadow: 0px 0px 12px rgba(14, 56, 94, 0.4), 0px 0px 40px rgba(14, 56, 94, 0.08); - opacity: 0; - visibility: hidden; - -webkit-transition: 0.3s; - -o-transition: 0.3s; - transition: 0.3s; -} -@media (min-width: 1200px) { - .hero-filter__dropdown { - right: auto; - } -} -.hero-filter__list { - max-height: 130px; - height: 100%; - overflow-y: auto; - padding: 10px 10px 10px 0; - scrollbar-color: #42AAFF transparent; - scrollbar-width: thin; -} -.hero-filter__list::-webkit-scrollbar { - background-color: #E6E7E7; -} -.hero-filter__list::-webkit-scrollbar-thumb { - background-color: #42aaff; -} -.hero-filter__item { - color: #4B4E53; - font-size: 14px; - line-height: 20px; - font-weight: 500; - cursor: pointer; -} -.hero-filter__item:not(:last-child) { - margin-bottom: 10px; -} -.hero-filter__fields { - display: -webkit-box; - display: -ms-flexbox; - display: flex; -} -.hero-filter__field { - width: 50%; -} -.hero-filter__field span { - display: block; - color: #4B4E53; - font-size: 14px; - line-height: 20px; - font-weight: 500; - margin-bottom: 8px; -} -.hero-filter__field input { - display: block; - width: 100%; - color: #363A3F; - font-size: 14px; - line-height: 20px; - font-weight: 500; - border: 1px solid #CFD1D2; - border-radius: 10px; - padding: 9px; - -webkit-transition: 0.3s; - -o-transition: 0.3s; - transition: 0.3s; -} -.hero-filter__field input::-webkit-input-placeholder { - color: #CDCECF; -} -.hero-filter__field input::-moz-placeholder { - color: #CDCECF; -} -.hero-filter__field input:-ms-input-placeholder { - color: #CDCECF; -} -.hero-filter__field input::-ms-input-placeholder { - color: #CDCECF; -} -.hero-filter__field input::placeholder { - color: #CDCECF; -} -.hero-filter__field input:focus { - border-color: #42AAFF; - background-color: #EDF7FF; -} -.hero-filter__field:not(:last-child) { - margin-right: 10px; -} -.hero-filter__reset { - position: relative; - display: none; - color: #363A3F; - font-size: 14px; - line-height: 20px; - font-weight: 600; - padding-left: 18px; - margin: 16px 0px 0px auto; -} -.hero-filter__reset::before { - content: ""; - position: absolute; - top: 4px; - left: 0; - width: 12px; - height: 12px; - background-repeat: no-repeat; - background-image: url("data:image/svg+xml,%3Csvg width='12' height='12' viewBox='0 0 12 12' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M11.2501 0.757943C10.9251 0.432943 10.4001 0.432943 10.0751 0.757943L6.0001 4.82461L1.9251 0.749609C1.6001 0.424609 1.0751 0.424609 0.750098 0.749609C0.425098 1.07461 0.425098 1.59961 0.750098 1.92461L4.8251 5.99961L0.750098 10.0746C0.425098 10.3996 0.425098 10.9246 0.750098 11.2496C1.0751 11.5746 1.6001 11.5746 1.9251 11.2496L6.0001 7.17461L10.0751 11.2496C10.4001 11.5746 10.9251 11.5746 11.2501 11.2496C11.5751 10.9246 11.5751 10.3996 11.2501 10.0746L7.1751 5.99961L11.2501 1.92461C11.5668 1.60794 11.5668 1.07461 11.2501 0.757943Z' fill='%23363A3F'/%3E%3C/svg%3E%0A"); -} -.hero-filter__reset.active { - display: block; -} -.hero-filter.active .hero-filter__current::after { - -webkit-transform: translateY(-50%) rotate(-180deg); - -ms-transform: translateY(-50%) rotate(-180deg); - transform: translateY(-50%) rotate(-180deg); -} -.hero-filter.active .hero-filter__dropdown { - top: calc(100% + 10px); - opacity: 1; - visibility: visible; -} -@media (min-width: 1200px) { - .hero-filter--modified1 { - width: 211px; - } -} -@media (min-width: 1200px) { - .hero-filter--modified1 .hero-filter__current { - border-radius: 10px 0px 0px 10px; - } -} -@media (min-width: 1200px) { - .hero-filter--modified1 .hero-filter__dropdown { - width: 269px; - } -} -@media (min-width: 1200px) { - .hero-filter--modified2 { - width: 303px; - } -} -@media (min-width: 1200px) { - .hero-filter--modified2 .hero-filter__dropdown { - width: 306px; - } -} -@media (min-width: 1200px) { - .hero-filter--modified3 { - width: 281px; - } -} -@media (min-width: 1200px) { - .hero-filter--modified3 .hero-filter__dropdown { - width: 260px; - } -} -@media (min-width: 1200px) { - .hero-filter--modified4 { - width: 202px; - } -} -.hero-filter--modified4 .hero-filter__dropdown { - padding: 20px; -} -@media (min-width: 1200px) { - .hero-filter--modified4 .hero-filter__dropdown { - width: 290px; - } -} -@media (min-width: 1200px) { - .hero-filter--modified5 { - width: 219px; - } -} -@media (min-width: 1200px) { - .hero-filter--modified5 .hero-filter__current { - border-radius: 0px 10px 10px 0px; - } -} -.hero-filter--modified5 .hero-filter__dropdown { - padding: 20px; -} -@media (min-width: 1200px) { - .hero-filter--modified5 .hero-filter__dropdown { - left: auto; - right: 0; - width: 330px; - } -} - -.slider { - padding: 60px 0; -} -@media (min-width: 1200px) { - .slider { - padding: 100px 0; - } -} -.slider__wrap { - position: relative; -} -.slider__wrap .swiper-pagination { - position: static; - bottom: 0; -} -.slider__wrap .swiper-pagination .swiper-pagination-bullet { - margin: 0 5px; -} -.slider__wrap .swiper-pagination-bullet { - width: 30px; - height: 4px; - margin: 0 5px; - border-radius: 5px; - background-color: #F2F2F3; - opacity: 1; - -webkit-transition: 0.3s; - -o-transition: 0.3s; - transition: 0.3s; -} -@media (min-width: 1200px) { - .slider__wrap .swiper-pagination-bullet { - width: 40px; - } -} -@media (min-width: 1200px) { - .slider__wrap .swiper-pagination-bullet:hover { - background-color: #42AAFF; - } -} -.slider__wrap .swiper-pagination-bullet-active { - background-color: #42AAFF; -} -.slider__top { - display: -webkit-box; - display: -ms-flexbox; - display: flex; - -webkit-box-orient: vertical; - -webkit-box-direction: normal; - -ms-flex-direction: column; - flex-direction: column; -} -@media (min-width: 1200px) { - .slider__top { - -webkit-box-orient: horizontal; - -webkit-box-direction: normal; - -ms-flex-direction: row; - flex-direction: row; - -webkit-box-align: center; - -ms-flex-align: center; - align-items: center; - -webkit-box-pack: justify; - -ms-flex-pack: justify; - justify-content: space-between; - } -} -@media (min-width: 1200px) { - .slider__title { - margin: 0px 30px 0px 0px; - } -} -.slider__more { - margin: 16px 0 0 0; - color: #4B4E53; - font-size: 16px; - line-height: 22px; - font-weight: 500; - white-space: nowrap; - border-bottom: 1px solid #42AAFF; - -webkit-transition: 0.3s; - -o-transition: 0.3s; - transition: 0.3s; -} -@media (min-width: 1200px) { - .slider__more { - margin: 0 30px 10px auto; - } -} -@media (min-width: 1200px) { - .slider__more:hover { - color: #42AAFF; - } -} -.slider__control { - display: none; -} -@media (min-width: 1200px) { - .slider__control { - display: -webkit-box; - display: -ms-flexbox; - display: flex; - } -} -.slider__control .swiper-button-prev, -.slider__control .swiper-button-next { - position: static; - width: 40px; - height: 40px; - border-radius: 10px; - border: 1px solid #012060; - margin: 0; - -webkit-transition: 0.3s; - -o-transition: 0.3s; - transition: 0.3s; -} -.slider__control .swiper-button-prev:after, -.slider__control .swiper-button-next:after { - display: none; -} -.slider__control .swiper-button-prev svg, -.slider__control .swiper-button-next svg { - stroke: #012060; - -webkit-transition: 0.3s; - -o-transition: 0.3s; - transition: 0.3s; -} -@media (min-width: 1200px) { - .slider__control .swiper-button-prev:hover, - .slider__control .swiper-button-next:hover { - background-color: #012060; - } -} -@media (min-width: 1200px) { - .slider__control .swiper-button-prev:hover svg, - .slider__control .swiper-button-next:hover svg { - stroke: #FFFFFF; - } -} -.slider__control .swiper-button-prev { - margin-right: 10px; -} -.slider__control .swiper-button-next svg { - -webkit-transform: rotate(180deg); - -ms-transform: rotate(180deg); - transform: rotate(180deg); -} -.slider__swiper { - padding: 40px 0 45px; -} -@media (min-width: 1200px) { - .slider__swiper { - padding: 60px 0 54px; - } -} -.slider__swiper .swiper-slide { - height: auto; -} - -.benefits { - background-color: #EDF7FF; - padding: 60px 0 80px; -} -@media (min-width: 1200px) { - .benefits { - padding: 60px 0 125px; - } -} -.benefits__title { - margin-bottom: 40px; -} -@media (min-width: 1200px) { - .benefits__title { - margin-bottom: 80px; - } -} -.benefits__items { - display: grid; - grid-template-columns: repeat(1, 1fr); - grid-gap: 60px; -} -@media (min-width: 1024px) { - .benefits__items { - grid-template-columns: repeat(3, 1fr); - grid-gap: 30px; - } -} -@media (min-width: 1200px) { - .benefits__items { - grid-gap: 50px; - } -} - -.benefits-item__top { - display: -webkit-box; - display: -ms-flexbox; - display: flex; - margin-bottom: 20px; -} -.benefits-item__img { - -ms-flex-negative: 0; - flex-shrink: 0; - width: 50px; - margin-right: 20px; -} -@media (min-width: 1200px) { - .benefits-item__img { - margin-right: 30px; - } -} -.benefits-item__img img { - max-width: 100%; -} -.benefits-item__title { - max-width: 260px; - color: #363A3F; - font-size: 18px; - line-height: 24px; - font-weight: 600; -} -.benefits-item__descr { - padding: 20px 22px 0 0; - border-top: 1px solid #8ECCFF; - color: #686B6F; - font-size: 14px; - line-height: 20px; - font-weight: 500; -} - -.partners { - padding-top: 60px; -} -@media (min-width: 1200px) { - .partners { - padding-top: 100px; - } -} -.partners__title { - margin-bottom: 60px; -} -.partners__inner { - display: grid; - grid-template-columns: repeat(6, 1fr); - grid-gap: 20px; -} -.partners__swiper { - overflow: visible; -} -@media (min-width: 1200px) { - .partners__swiper { - padding-bottom: 0; - } -} -.partners__swiper .swiper-scrollbar { - display: none; - width: 200px; - height: 4px; - left: 0; - right: 0; - bottom: 3px; - margin: 0 auto; - background-color: #F2F2F3; -} -@media (min-width: 1200px) { - .partners__swiper .swiper-scrollbar { - display: none; - } -} -.partners__swiper .swiper-scrollbar-drag { - top: -3px; - height: 10px; - background-color: #42AAFF; - cursor: pointer; -} - -.partners-item { - background-color: #FFFFFF; - -webkit-box-shadow: 0px 2px 12px rgba(6, 15, 26, 0.04); - box-shadow: 0px 2px 12px rgba(6, 15, 26, 0.04); - border-radius: 10px; - padding: 20px; - -webkit-transition: 0.3s; - -o-transition: 0.3s; - transition: 0.3s; -} -.partners-item img { - height: 95px; - width: 100%; - -o-object-fit: contain; - object-fit: contain; - -webkit-filter: grayscale(1); - filter: grayscale(1); - -webkit-transition: 0.3s; - -o-transition: 0.3s; - transition: 0.3s; -} -.partners-item:hover { - -webkit-box-shadow: 0px 2px 20px rgba(6, 15, 26, 0.04), 0px 2px 12px rgba(6, 15, 26, 0.04); - box-shadow: 0px 2px 20px rgba(6, 15, 26, 0.04), 0px 2px 12px rgba(6, 15, 26, 0.04); -} -.partners-item:hover img { - -webkit-filter: grayscale(0); - filter: grayscale(0); -} -.partners-item:nth-child(7), .partners-item:nth-child(8), .partners-item:nth-child(9), .partners-item:nth-child(10), .partners-item:nth-child(11), .partners-item:nth-child(12) { - -webkit-transform: translateX(-50%); - -ms-transform: translateX(-50%); - transform: translateX(-50%); -} -@media (min-width: 1200px) { - .partners-item:nth-child(7), .partners-item:nth-child(8), .partners-item:nth-child(9), .partners-item:nth-child(10), .partners-item:nth-child(11), .partners-item:nth-child(12) { - -webkit-transform: translateX(0); - -ms-transform: translateX(0); - transform: translateX(0); - } -} - -.contacts-top { - position: relative; - padding-bottom: 200px; - background-repeat: no-repeat; - background-size: cover; - background-position: center; -} -.contacts-top::before { - content: ""; - position: absolute; - top: 0; - left: 0; - width: 100%; - height: 100%; - background-color: rgba(3, 9, 15, 0.6); -} -.contacts-top__wrap { - position: relative; -} - -.contacts-middle { - padding-bottom: 60px; -} -@media (min-width: 1200px) { - .contacts-middle { - padding-bottom: 100px; - } -} -.contacts-middle__wrap { - position: relative; - min-height: 558px; - margin-top: -140px; - border-radius: 10px; - overflow: hidden; - -webkit-box-shadow: 0px 4px 36px rgba(14, 56, 94, 0.04), 0px 4px 16px rgba(14, 56, 94, 0.04); - box-shadow: 0px 4px 36px rgba(14, 56, 94, 0.04), 0px 4px 16px rgba(14, 56, 94, 0.04); - background-color: #FFFFFF; -} -@media (min-width: 780px) { - .contacts-middle__wrap { - display: -webkit-box; - display: -ms-flexbox; - display: flex; - } -} - -.contacts__cnt { - max-width: 500px; -} -.contacts__title { - margin-bottom: 12px; -} -.contacts__descr { - max-width: 380px; - color: #FFFFFF; - font-size: 16px; - line-height: 22px; - font-weight: 500; -} -.contacts__feedback { - position: relative; - z-index: 5; -} -@media (min-width: 780px) { - .contacts__feedback { - width: 721px; - } -} -.contacts__form { - padding: 40px 20px 60px; -} -@media (min-width: 1024px) { - .contacts__form { - padding: 40px 67px 60px 60px; - } -} -.contacts__form.hidden { - opacity: 0; - visibility: hidden; -} -.contacts__caption { - margin-bottom: 30px; - font-size: 20px; - line-height: 30px; - font-weight: 700; -} -@media (min-width: 1200px) { - .contacts__caption { - margin-bottom: 40px; - } -} -.contacts__fields { - display: grid; - grid-template-columns: repeat(1, 1fr); - grid-gap: 16px; - margin-bottom: 40px; -} -@media (min-width: 1200px) { - .contacts__fields { - grid-template-columns: repeat(2, 1fr); - } -} -.contacts__field input, -.contacts__field textarea { - border-color: #CDCECF; -} -.contacts__field textarea { - height: 110px; -} -@media (min-width: 1200px) { - .contacts__field:last-child { - grid-column: span 2; - } -} -.contacts__btn { - width: 100%; - margin-bottom: 16px; - padding: 12px; -} -@media (min-width: 480px) { - .contacts__btn { - width: auto; - padding: 12px 38px; - } -} -.contacts__btn.btn-animate { - -webkit-animation: btn-animate 0.5s linear infinite; - animation: btn-animate 0.5s linear infinite; - background-size: 30px 30px; - background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.3) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.3) 50%, rgba(255, 255, 255, 0.3) 75%, transparent 75%, transparent); - background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.3) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.3) 50%, rgba(255, 255, 255, 0.3) 75%, transparent 75%, transparent); -} -.contacts__confirm { - max-width: 525px; - color: #9A9C9F; - font-size: 14px; - line-height: 20px; - font-weight: 500; -} -.contacts__confirm a { - text-decoration: underline; -} -.contacts__info { - padding: 40px 20px 80px; - background-color: #EDF7FF; -} -@media (min-width: 780px) { - .contacts__info { - width: 495px; - } -} -@media (min-width: 1024px) { - .contacts__info { - padding: 40px 50px; - } -} -.contacts__items { - margin-bottom: 40px; -} - -@-webkit-keyframes btn-animate { - from { - background-position: 0 0; - } - to { - background-position: 60px 30px; - } -} - -@keyframes btn-animate { - from { - background-position: 0 0; - } - to { - background-position: 60px 30px; - } -} -.contacts-success { - position: absolute; - top: 0; - left: 0; - width: 100%; - height: 100%; - display: -webkit-box; - display: -ms-flexbox; - display: flex; - -webkit-box-orient: vertical; - -webkit-box-direction: normal; - -ms-flex-direction: column; - flex-direction: column; - -webkit-box-pack: center; - -ms-flex-pack: center; - justify-content: center; - height: 100%; - padding: 50px; - opacity: 0; - visibility: hidden; - text-align: center; - background-color: #42AAFF; - -webkit-transition: 0.3s; - -o-transition: 0.3s; - transition: 0.3s; -} -.contacts-success.active { - opacity: 1; - visibility: visible; -} -.contacts-success__logo { - display: -webkit-box; - display: -ms-flexbox; - display: flex; - -webkit-box-align: center; - -ms-flex-align: center; - align-items: center; - -webkit-box-pack: center; - -ms-flex-pack: center; - justify-content: center; - width: 96px; - height: 96px; - margin: 0 auto 30px; - border-radius: 50%; - background-color: #FFFFFF; - -webkit-filter: drop-shadow(0px 4px 24px rgba(14, 51, 81, 0.12)); - filter: drop-shadow(0px 4px 24px rgba(14, 51, 81, 0.12)); -} -.contacts-success__logo svg { - stroke: #42AAFF; -} -.contacts-success__title { - color: #FFFFFF; - font-size: 36px; - line-height: 48px; - font-weight: 800; - margin-bottom: 12px; -} -.contacts-success__descr { - color: #FFFFFF; - font-size: 18px; - line-height: 24px; - font-weight: 500; - text-align: center; -} - -.contacts-item__caption { - margin-bottom: 4px; - color: #686B6F; - font-size: 12px; - line-height: 18px; - font-weight: 600; - text-transform: uppercase; -} -.contacts-item__contact { - font-size: 16px; - line-height: 22px; - font-weight: 500; - font-style: normal; -} -.contacts-item:not(:last-child) { - margin-bottom: 20px; -} - -.page-404 { - background: -o-linear-gradient(329.62deg, #D9EEFF 0%, #B3DDFF 100%); - background: linear-gradient(120.38deg, #D9EEFF 0%, #B3DDFF 100%); -} -.page-404__wrap { - display: -webkit-box; - display: -ms-flexbox; - display: flex; - -webkit-box-orient: vertical; - -webkit-box-direction: normal; - -ms-flex-direction: column; - flex-direction: column; - padding: 60px 0 80px; -} -@media (min-width: 780px) { - .page-404__wrap { - -webkit-box-orient: horizontal; - -webkit-box-direction: normal; - -ms-flex-direction: row; - flex-direction: row; - -webkit-box-align: center; - -ms-flex-align: center; - align-items: center; - } -} -@media (min-width: 1200px) { - .page-404__wrap { - min-height: calc(100vh - 110px); - } -} -.page-404__img { - margin: 0px auto 75px; -} -@media (min-width: 480px) { - .page-404__img { - -ms-flex-negative: 0; - flex-shrink: 0; - width: 400px; - } -} -@media (min-width: 780px) { - .page-404__img { - margin: 0px 30px 0px 0px; - } -} -@media (min-width: 1200px) { - .page-404__img { - width: 600px; - margin: 0px 48px 0px 0px; - } -} -.page-404__img img { - width: 100%; - margin: 0 auto; -} -@media (min-width: 480px) { - .page-404__img img { - width: auto; - max-width: 100%; - } -} -.page-404__title { - margin-bottom: 20px; - color: #03090F; - font-size: 32px; - line-height: 36px; - font-weight: 800; -} -@media (min-width: 1200px) { - .page-404__title { - margin-bottom: 24px; - font-size: 48px; - line-height: 52px; - } -} -.page-404__descr { - max-width: 420px; - margin-bottom: 60px; - font-size: 16px; - line-height: 22px; - font-weight: 500; -} -.page-404__btn { - width: 100%; -} -@media (min-width: 480px) { - .page-404__btn { - width: auto; - } -} - -.breadcrumbs { - padding: 40px 0 30px; -} -@media (min-width: 1200px) { - .breadcrumbs { - padding: 40px 0 50px; - } -} -.breadcrumbs__list { - display: -webkit-box; - display: -ms-flexbox; - display: flex; - overflow-x: auto; - margin: 0 -20px; - padding: 0 20px 10px; - scrollbar-width: none; -} -.breadcrumbs__list::-webkit-scrollbar { - height: 0; -} -.breadcrumbs__item { - position: relative; - -ms-flex-negative: 0; - flex-shrink: 0; -} -.breadcrumbs__item:not(:last-child) { - position: relative; - margin-right: 28px; -} -.breadcrumbs__item:not(:last-child)::after { - content: ""; - position: absolute; - top: 50%; - right: -16px; - -webkit-transform: translateY(-50%); - -ms-transform: translateY(-50%); - transform: translateY(-50%); - width: 4px; - height: 4px; - background-color: #FFFFFF; -} -.breadcrumbs__item:last-child .breadcrumbs__link { - color: #CDCECF; -} -.breadcrumbs__link { - display: block; - color: #FFFFFF; - font-size: 14px; - line-height: 20px; - font-weight: 600; -} - -.pagination { - padding: 30px 0 50px; -} -@media (min-width: 1200px) { - .pagination { - border-top: 1px solid rgba(154, 156, 159, 0.2); - padding: 30px 0 100px; - } -} -.pagination__inner { - display: -webkit-box; - display: -ms-flexbox; - display: flex; - -webkit-box-pack: center; - -ms-flex-pack: center; - justify-content: center; -} -.pagination__btn { - display: -webkit-box; - display: -ms-flexbox; - display: flex; - -webkit-box-align: center; - -ms-flex-align: center; - align-items: center; - -webkit-box-pack: center; - -ms-flex-pack: center; - justify-content: center; - width: 40px; - height: 40px; - border: 1px solid #012060; - border-radius: 10px; - -webkit-transition: 0.3s; - -o-transition: 0.3s; - transition: 0.3s; -} -.pagination__btn svg { - stroke: #012060; - -webkit-transition: 0.3s; - -o-transition: 0.3s; - transition: 0.3s; -} -.pagination__btn.disabled { - pointer-events: none; - opacity: 0.5; -} -.pagination__btn:hover { - background-color: #012060; -} -.pagination__btn:hover svg { - stroke: #FFFFFF; -} -.pagination__btn-prev { - margin-right: 20px; -} -@media (min-width: 1200px) { - .pagination__btn-prev { - margin-right: 79px; - } -} -.pagination__btn-next { - margin-left: 20px; -} -@media (min-width: 1200px) { - .pagination__btn-next { - margin-left: 79px; - } -} -.pagination__btn-next svg { - -webkit-transform: rotate(180deg); - -ms-transform: rotate(180deg); - transform: rotate(180deg); -} -.pagination__list { - display: -webkit-box; - display: -ms-flexbox; - display: flex; - -webkit-box-align: center; - -ms-flex-align: center; - align-items: center; -} -.pagination__item:not(:last-child) { - margin-right: 20px; -} -.pagination__link { - color: #CDCECF; - font-size: 16px; - line-height: 20px; - font-weight: 800; - -webkit-transition: 0.3s; - -o-transition: 0.3s; - transition: 0.3s; -} -.pagination__link.active { - width: 30px; - height: 30px; - border-radius: 50%; - background-color: #D9EEFF; - color: #42AAFF; - line-height: 30px; - text-align: center; -} -.pagination__link.more { - color: #012060; -} -@media (min-width: 1200px) { - .pagination__link:hover { - color: #42AAFF; - } -} - -.news__wrap { - position: relative; - padding-bottom: 60px; - margin-bottom: 60px; - background-repeat: no-repeat; - background-size: cover; - background-position: center; -} -@media (min-width: 1200px) { - .news__wrap { - padding-bottom: 110px; - margin-bottom: 100px; - } -} -.news__wrap::before { - content: ""; - position: absolute; - top: 0; - left: 0; - width: 100%; - height: 100%; - background-color: rgba(3, 9, 15, 0.6); -} -.news__inner { - position: relative; -} -.news__cnt { - max-width: 470px; -} -.news__title { - margin-bottom: 12px; -} -.news__descr { - color: #FFFFFF; - font-size: 16px; - line-height: 22px; - font-weight: 500; -} -@media (min-width: 1200px) { - .news__descr { - font-size: 20px; - line-height: 30px; - font-weight: 400; - } -} -.news__grid { - display: grid; - grid-template-columns: repeat(1, 1fr); - grid-gap: 20px; - margin-bottom: 20px; -} -@media (min-width: 500px) { - .news__grid { - grid-template-columns: repeat(2, 1fr); - } -} -@media (min-width: 920px) { - .news__grid { - grid-template-columns: repeat(3, 1fr); - } -} -@media (min-width: 1200px) { - .news__grid { - grid-template-columns: repeat(4, 1fr); - margin-bottom: 60px; - } -} - -.news-one-top { - position: relative; - padding-bottom: 30px; - background-repeat: no-repeat; - background-size: cover; - background-position: center; -} -@media (min-width: 1200px) { - .news-one-top { - padding-bottom: 40px; - } -} -.news-one-top::before { - content: ""; - position: absolute; - top: 0; - left: 0; - width: 100%; - height: 100%; - background-color: rgba(3, 9, 15, 0.6); -} -.news-one-top__wrap { - position: relative; -} - -.news-one__title { - max-width: 880px; - margin-bottom: 128px; - line-height: 36px; -} -@media (min-width: 1200px) { - .news-one__title { - line-height: 58px; - margin-bottom: 84px; - } -} -.news-one__date span { - display: block; - color: #FFFFFF; -} -.news-one__date span:nth-child(1) { - font-size: 32px; - line-height: 40px; - font-weight: 800; - margin-bottom: 2px; -} -.news-one__date span:nth-child(2) { - font-size: 14px; - line-height: 20px; - font-weight: 500; -} -.news-one__inner { - display: -webkit-box; - display: -ms-flexbox; - display: flex; - -webkit-box-orient: vertical; - -webkit-box-direction: normal; - -ms-flex-direction: column; - flex-direction: column; - padding: 40px 0 0; -} -@media (min-width: 780px) { - .news-one__inner { - -webkit-box-orient: horizontal; - -webkit-box-direction: normal; - -ms-flex-direction: row; - flex-direction: row; - -webkit-box-align: start; - -ms-flex-align: start; - align-items: flex-start; - padding: 40px 0; - border-bottom: 1px solid #E8E8E9; - } -} -@media (min-width: 1200px) { - .news-one__inner { - padding: 60px 0; - } -} -.news-one__social { - -webkit-box-ordinal-group: 2; - -ms-flex-order: 1; - order: 1; - margin: 40px 0px 0px 0px; -} -@media (min-width: 780px) { - .news-one__social { - -webkit-box-ordinal-group: 1; - -ms-flex-order: 0; - order: 0; - margin: 0px 30px 0px 0px; - } -} -@media (min-width: 1200px) { - .news-one__social { - margin: 0px 50px 0px 0px; - } -} -.news-one__social.social { - width: 260px; - -ms-flex-negative: 0; - flex-shrink: 0; - padding: 20px 20px 30px; - border-radius: 10px; - -webkit-box-shadow: 0px 2px 12px rgba(14, 56, 94, 0.04); - box-shadow: 0px 2px 12px rgba(14, 56, 94, 0.04); - background-color: #EDF7FF; -} -.news-one__descr { - max-width: 700px; - color: #4B4E53; - font-size: 14px; - line-height: 22px; - font-weight: 500; - padding-bottom: 40px; - border-bottom: 1px solid #E8E8E9; -} -@media (min-width: 780px) { - .news-one__descr { - padding-bottom: 0; - border: none; - } -} -@media (min-width: 1200px) { - .news-one__descr { - font-size: 16px; - } -} -.news-one__descr p { - color: #4B4E53; - font-size: 14px; - line-height: 22px; - font-weight: 500; -} -@media (min-width: 1200px) { - .news-one__descr p { - font-size: 16px; - } -} -.news-one__descr p:not(:last-child) { - margin-bottom: 16px; -} -@media (min-width: 1200px) { - .news-one__descr p:not(:last-child) { - margin-bottom: 20px; - } -} - -.card { - display: -webkit-box; - display: -ms-flexbox; - display: flex; - -webkit-box-orient: vertical; - -webkit-box-direction: normal; - -ms-flex-direction: column; - flex-direction: column; - height: 100%; - background-color: White; - -webkit-box-shadow: 0px 4px 28px rgba(14, 56, 94, 0.08), 0px 4px 16px rgba(14, 56, 94, 0.04); - box-shadow: 0px 4px 28px rgba(14, 56, 94, 0.08), 0px 4px 16px rgba(14, 56, 94, 0.04); - border-radius: 10px; - overflow: hidden; -} -.card__top { - position: relative; - display: -webkit-box; - display: -ms-flexbox; - display: flex; - -webkit-box-orient: vertical; - -webkit-box-direction: normal; - -ms-flex-direction: column; - flex-direction: column; - -webkit-box-pack: end; - -ms-flex-pack: end; - justify-content: flex-end; - min-height: 160px; - padding: 20px 20px 15px; -} -.card__top::before { - content: ""; - position: absolute; - top: 0; - left: 0; - z-index: 1; - width: 100%; - height: 100%; - background: rgba(3, 9, 15, 0.4); -} -.card__top img { - position: absolute; - top: 0; - left: 0; - width: 100%; - height: 100%; - -o-object-fit: cover; - object-fit: cover; -} -.card__title { - position: relative; - z-index: 1; - color: #FFFFFF; - font-size: 24px; - line-height: 28px; - font-weight: 800; -} -.card__labels { - position: absolute; - top: 20px; - right: 20px; - z-index: 1; - display: -webkit-box; - display: -ms-flexbox; - display: flex; -} -.card__label { - position: relative; - width: 40px; - height: 40px; - border-radius: 50%; - -webkit-transition: 0.3s; - -o-transition: 0.3s; - transition: 0.3s; - cursor: pointer; -} -.card__label svg { - position: absolute; - top: 50%; - left: 50%; - -webkit-transform: translate(-50%, -50%); - -ms-transform: translate(-50%, -50%); - transform: translate(-50%, -50%); -} -.card__label:not(:last-child) { - margin-right: 8px; -} -.card__label-favorites { - background-color: rgba(255, 255, 255, 0.8); -} -.card__label-favorites svg { - -webkit-transition: 0.3s; - -o-transition: 0.3s; - transition: 0.3s; -} -.card__label-favorites svg:nth-child(1) { - stroke: #42AAFF; -} -.card__label-favorites svg:nth-child(2) { - opacity: 0; - visibility: hidden; -} -@media (min-width: 1200px) { - .card__label-favorites:hover { - background-color: #42AAFF; - } -} -@media (min-width: 1200px) { - .card__label-favorites:hover svg:nth-child(1) { - stroke: #FFFFFF; - } -} -.card__label-favorites.active { - background-color: white; -} -.card__label-favorites.active svg:nth-child(1) { - opacity: 0; - visibility: hidden; -} -.card__label-favorites.active svg:nth-child(2) { - opacity: 1; - visibility: visible; -} -.card__label-messenger { - background-color: rgba(37, 211, 102, 0.6); -} -@media (min-width: 1200px) { - .card__label-messenger:hover { - background-color: hwb(142 15% 17%); - } -} -.card__cnt { - -webkit-box-flex: 1; - -ms-flex-positive: 1; - flex-grow: 1; - display: -webkit-box; - display: -ms-flexbox; - display: flex; - -webkit-box-orient: vertical; - -webkit-box-direction: normal; - -ms-flex-direction: column; - flex-direction: column; - padding: 20px; -} -.card__info { - margin: 0 -20px 20px; -} -.card__line { - position: relative; - color: #686B6F; - font-size: 14px; - line-height: 20px; - font-weight: 500; - font-style: normal; - padding: 0 20px; - -o-text-overflow: ellipsis; - text-overflow: ellipsis; - overflow: hidden; - white-space: nowrap; -} -.card__line b { - color: #363A3F; - width: 600px; -} -.card__line:not(:last-child) { - margin-bottom: 8px; -} -.card__line span { - position: absolute; - top: 4px; - left: 0; - width: 6px; - height: 12px; - background-color: #FFC955; - border-radius: 0px 3px 3px 0px; -} -.card__line-complex { - color: #4B4E53; - font-weight: 700; -} -.card__price { - display: -webkit-box; - display: -ms-flexbox; - display: flex; - -webkit-box-align: end; - -ms-flex-align: end; - align-items: flex-end; - margin: auto 0 12px; -} -.card__price span { - -ms-flex-negative: 0; - flex-shrink: 0; -} -.card__price span:nth-child(1) { - color: #363A3F; - font-size: 24px; - line-height: 30px; - font-weight: 800; -} -.card__price span:nth-child(2) { - color: #9A9C9F; - font-size: 14px; - line-height: 20px; - font-weight: 500; - margin-left: 4px; -} -.card__btn { - padding: 12px; - -o-text-overflow: ellipsis; - text-overflow: ellipsis; - white-space: nowrap; - overflow: hidden; -} - -.card-news { - display: -webkit-box; - display: -ms-flexbox; - display: flex; - -webkit-box-orient: vertical; - -webkit-box-direction: normal; - -ms-flex-direction: column; - flex-direction: column; - height: 100%; - background-color: White; - -webkit-box-shadow: 0px 4px 28px rgba(14, 56, 94, 0.08), 0px 4px 16px rgba(14, 56, 94, 0.04); - box-shadow: 0px 4px 28px rgba(14, 56, 94, 0.08), 0px 4px 16px rgba(14, 56, 94, 0.04); - border-radius: 10px; - overflow: hidden; -} -.card-news__top { - position: relative; - display: -webkit-box; - display: -ms-flexbox; - display: flex; - -webkit-box-orient: vertical; - -webkit-box-direction: normal; - -ms-flex-direction: column; - flex-direction: column; - -webkit-box-pack: end; - -ms-flex-pack: end; - justify-content: flex-end; - padding: 20px 20px 15px; - min-height: 170px; -} -.card-news__top::before { - content: ""; - position: absolute; - top: 0; - left: 0; - z-index: 1; - width: 100%; - height: 100%; - background: rgba(3, 9, 15, 0.4); -} -.card-news__top img { - position: absolute; - top: 0; - left: 0; - width: 100%; - height: 100%; - -o-object-fit: cover; - object-fit: cover; -} -.card-news__date { - position: relative; - z-index: 1; -} -.card-news__date span { - display: block; - color: #FFFFFF; - display: -webkit-box; - -webkit-box-orient: vertical; - overflow: hidden; - -webkit-line-clamp: 1; -} -.card-news__date span:nth-child(1) { - font-size: 32px; - line-height: 36px; - font-weight: 800; - margin-bottom: 4px; -} -@media (min-width: 1200px) { - .card-news__date span:nth-child(1) { - line-height: 40px; - margin-bottom: 2px; - } -} -.card-news__date span:nth-child(2) { - font-size: 14px; - line-height: 20px; - font-weight: 600; -} -.card-news__cnt { - position: relative; - z-index: 2; - -webkit-box-flex: 1; - -ms-flex-positive: 1; - flex-grow: 1; - display: -webkit-box; - display: -ms-flexbox; - display: flex; - -webkit-box-orient: vertical; - -webkit-box-direction: normal; - -ms-flex-direction: column; - flex-direction: column; - padding: 20px 20px 20px; - background-color: #FFFFFF; -} -.card-news__descr { - font-weight: 600; - font-size: 14px; - line-height: 20px; - color: #40454A; - margin-bottom: 32px; - display: -webkit-box; - -webkit-box-orient: vertical; - overflow: hidden; - -webkit-line-clamp: 3; -} -.card-news__link { - position: relative; - -ms-flex-item-align: start; - align-self: flex-start; - color: #40454A; - font-size: 14px; - line-height: 20px; - font-weight: 600; - margin-top: auto; - padding: 0 28px 7px 0; -} -.card-news__link::before { - content: ""; - position: absolute; - left: 0; - bottom: 0; - width: 100%; - height: 2px; - border-radius: 5px; - background-color: #E6E7E7; -} -.card-news__link::after { - content: ""; - position: absolute; - left: 0; - bottom: 0; - height: 2px; - width: 0; - border-radius: 5px; - background-color: #42AAFF; - -webkit-transition: 0.3s; - -o-transition: 0.3s; - transition: 0.3s; -} -.card-news__link:hover::after { - width: 100%; -} -.card-news__link svg { - position: absolute; - top: 4px; - right: 0; -} - -.popup { - position: fixed; - top: 0; - left: 0; - z-index: 100; - width: 100%; - height: 100%; - display: -webkit-box; - display: -ms-flexbox; - display: flex; - opacity: 0; - visibility: hidden; - background-color: rgba(3, 9, 15, 0.6); - -webkit-transition: 0.3s; - -o-transition: 0.3s; - transition: 0.3s; -} -@media (min-width: 640px) { - .popup { - overflow-y: auto; - } -} -.popup.active { - opacity: 1; - visibility: visible; -} -.popup__wrap { - position: relative; - background-color: #FFFFFF; -} -@media (min-width: 640px) { - .popup__wrap { - border-radius: 10px; - -webkit-box-shadow: 0px 4px 32px rgba(14, 56, 94, 0.12); - box-shadow: 0px 4px 32px rgba(14, 56, 94, 0.12); - margin: auto; - } -} -.popup__close { - position: absolute; - top: 0; - right: 0; - width: 60px; - height: 60px; - display: -webkit-box; - display: -ms-flexbox; - display: flex; - -webkit-box-align: center; - -ms-flex-align: center; - align-items: center; - -webkit-box-pack: center; - -ms-flex-pack: center; - justify-content: center; -} -.popup__close svg { - fill: #363A3F; - -webkit-transition: 0.3s; - -o-transition: 0.3s; - transition: 0.3s; -} -@media (min-width: 1200px) { - .popup__close:hover svg { - fill: #42AAFF; - } -} - -.popup-feedback .popup__wrap { - width: 100%; - padding: 60px 0 0 20px; -} -@media (min-width: 640px) { - .popup-feedback .popup__wrap { - max-width: 500px; - padding: 60px 54px 60px; - } -} -.popup-feedback__form { - overflow-y: auto; - height: 100%; - padding: 0 20px 30px 0; -} -@media (min-width: 640px) { - .popup-feedback__form { - overflow-y: visible; - height: auto; - padding: 0; - } -} -.popup-feedback__title { - font-size: 32px; - line-height: 36px; - font-weight: 700; - margin-bottom: 40px; -} -@media (min-width: 1200px) { - .popup-feedback__title { - line-height: 48px; - } -} -.popup-feedback__fields { - margin-bottom: 40px; -} -.popup-feedback__field input { - border-color: #CDCECF; -} -.popup-feedback__field:not(:last-child) { - margin-bottom: 16px; -} -.popup-feedback__btn { - width: 100%; - margin-bottom: 16px; -} -@media (min-width: 480px) { - .popup-feedback__btn { - width: auto; - padding: 12px 78px; - } -} -.popup-feedback__btn.btn-animate { - -webkit-animation: btn-animate 0.5s linear infinite; - animation: btn-animate 0.5s linear infinite; - background-size: 30px 30px; - background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.3) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.3) 50%, rgba(255, 255, 255, 0.3) 75%, transparent 75%, transparent); - background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.3) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.3) 50%, rgba(255, 255, 255, 0.3) 75%, transparent 75%, transparent); -} -.popup-feedback__confirm { - color: #9A9C9F; - font-size: 14px; - line-height: 20px; - font-weight: 500; -} -.popup-feedback__confirm a { - text-decoration: underline; - padding: 0; - margin: 0; -} - -@keyframes btn-animate { - from { - background-position: 0 0; - } - to { - background-position: 60px 30px; - } -} -.popup-success .popup__wrap { - width: 100%; - text-align: center; - padding: 60px 0 0 20px; -} -@media (min-width: 640px) { - .popup-success .popup__wrap { - max-width: 600px; - padding: 60px 75px 70px; - } -} -.popup-success__inner { - overflow-y: auto; - height: 100%; - padding: 0 20px 30px 0; -} -@media (min-width: 640px) { - .popup-success__inner { - overflow-y: visible; - height: auto; - padding: 0; - } -} -.popup-success__logo { - display: -webkit-box; - display: -ms-flexbox; - display: flex; - -webkit-box-align: center; - -ms-flex-align: center; - align-items: center; - -webkit-box-pack: center; - -ms-flex-pack: center; - justify-content: center; - width: 96px; - height: 96px; - border-radius: 50%; - margin: 0 auto 30px; - background-color: #42AAFF; -} -.popup-success__logo svg { - stroke: #FFFFFF; -} -.popup-success__title { - margin-bottom: 12px; - font-size: 36px; - line-height: 48px; - font-weight: 800; -} -.popup-success__descr { - color: #9A9C9F; - font-size: 18px; - line-height: 24px; - font-weight: 500; -} - -.contact-us { - position: fixed; - right: 0; - bottom: 0; - z-index: 50; - -webkit-transform: translateY(105%); - -ms-transform: translateY(105%); - transform: translateY(105%); - width: 100%; - border-radius: 30px 30px 0px 0px; - overflow: hidden; - -webkit-box-shadow: 0px 0px 8px rgba(14, 56, 94, 0.16), 0px 0px 32px rgba(14, 56, 94, 0.08); - box-shadow: 0px 0px 8px rgba(14, 56, 94, 0.16), 0px 0px 32px rgba(14, 56, 94, 0.08); - background-color: #FFFFFF; - -webkit-transition: 0.3s; - -o-transition: 0.3s; - transition: 0.3s; -} -@media (min-width: 480px) { - .contact-us { - max-width: 360px; - border-radius: 50px 10px 0px 0px; - } -} -@media (min-width: 1200px) { - .contact-us { - right: 100px; - } -} -.contact-us.active { - -webkit-transform: translateY(0); - -ms-transform: translateY(0); - transform: translateY(0); -} -.contact-us__top { - position: relative; - padding: 40px 40px 40px 20px; - background-color: #21ADD9; -} -.contact-us__close { - position: absolute; - top: 0; - right: 0; - width: 60px; - height: 60px; - display: -webkit-box; - display: -ms-flexbox; - display: flex; - -webkit-box-align: center; - -ms-flex-align: center; - align-items: center; - -webkit-box-pack: center; - -ms-flex-pack: center; - justify-content: center; -} -.contact-us__close svg { - fill: #FFFFFF; -} -.contact-us__title { - color: #FFFFFF; - font-size: 24px; - line-height: 28px; - font-weight: 700; -} -.contact-us__body { - padding: 40px 20px; -} -.contact-us__items { - display: grid; - grid-template-columns: repeat(3, 1fr); - grid-gap: 20px; - margin-bottom: 40px; -} -.contact-us__socials { - display: -webkit-box; - display: -ms-flexbox; - display: flex; - -webkit-box-pack: center; - -ms-flex-pack: center; - justify-content: center; -} - -@media (min-width: 1200px) { - .contact-us-item:hover svg { - -webkit-transform: scale(1.2); - -ms-transform: scale(1.2); - transform: scale(1.2); - } -} -.contact-us-item__icon { - display: -webkit-box; - display: -ms-flexbox; - display: flex; - -webkit-box-align: center; - -ms-flex-align: center; - align-items: center; - -webkit-box-pack: center; - -ms-flex-pack: center; - justify-content: center; - height: 90px; - margin-bottom: 8px; - border-radius: 10px; - background-color: #EDF7FF; -} -.contact-us-item__icon svg { - -webkit-transition: 0.3s; - -o-transition: 0.3s; - transition: 0.3s; -} -.contact-us-item__name { - color: #686B6F; - font-size: 14px; - line-height: 20px; - font-weight: 500; - text-align: center; -} - -@media (min-width: 1200px) { - .contact-us-social:hover img, - .contact-us-social:hover svg { - -webkit-transform: scale(1.2); - -ms-transform: scale(1.2); - transform: scale(1.2); - } -} -.contact-us-social:not(:last-child) { - margin-right: 20px; -} -.contact-us-social__icon { - display: -webkit-box; - display: -ms-flexbox; - display: flex; - -webkit-box-align: center; - -ms-flex-align: center; - align-items: center; - -webkit-box-pack: center; - -ms-flex-pack: center; - justify-content: center; - width: 80px; - height: 80px; - margin-bottom: 13px; - border-radius: 10px; -} -.contact-us-social__icon img, -.contact-us-social__icon svg { - -webkit-transition: 0.3s; - -o-transition: 0.3s; - transition: 0.3s; -} -.contact-us-social__icon-tg { - background: -o-linear-gradient(246.8deg, #37AEE2 21.67%, #1E96C8 70%); - background: linear-gradient(203.2deg, #37AEE2 21.67%, #1E96C8 70%); -} -.contact-us-social__icon-wa { - background-color: #25D366; -} -.contact-us-social__name { - color: #686B6F; - font-size: 14px; - line-height: 20px; - font-weight: 500; - text-align: center; -} - -.catalog { - padding: 60px 0; -} -@media (min-width: 1200px) { - .catalog { - padding: 100px 0; - } -} -.catalog__sliders .slider { - padding-bottom: 0; -} -.catalog__sliders .slider__top { - -webkit-box-align: start; - -ms-flex-align: start; - align-items: flex-start; -} -@media (min-width: 1200px) { - .catalog__sliders .slider__top { - -webkit-box-align: end; - -ms-flex-align: end; - align-items: flex-end; - } -} -.catalog__sliders .slider__title { - position: relative; - padding: 18px 50px 18px 0; - color: #FFFFFF; - background-color: #42AAFF; - border-radius: 0 1000px 1000px 0; -} -.catalog__sliders .slider__title::before { - content: ""; - position: absolute; - top: 0; - bottom: 0; - right: calc(100% - 1px); - width: 100vw; - background-color: #42AAFF; -} - -.category { - padding: 60px 0 0; -} -@media (min-width: 1200px) { - .category { - padding: 100px 0 0; - } -} -.category__top { - margin-bottom: 60px; -} -.category__grid { - display: grid; - grid-gap: 20px; - grid-template-columns: repeat(1, 1fr); - margin-bottom: 20px; -} -@media (min-width: 540px) { - .category__grid { - grid-template-columns: repeat(2, 1fr); - } -} -@media (min-width: 920px) { - .category__grid { - grid-template-columns: repeat(3, 1fr); - } -} -@media (min-width: 1200px) { - .category__grid { - grid-template-columns: repeat(4, 1fr); - margin-bottom: 60px; - } -} - -.complex { - padding: 60px 0 0; -} -@media (min-width: 1200px) { - .complex { - padding: 100px 0 0; - } -} -.complex__sliders { - padding-bottom: 60px; -} -@media (min-width: 1200px) { - .complex__sliders { - padding-bottom: 100px; - } -} -.complex__sliders .slider { - padding-bottom: 0; -} -.complex__sliders .slider__top { - -webkit-box-align: start; - -ms-flex-align: start; - align-items: flex-start; -} -@media (min-width: 1200px) { - .complex__sliders .slider__top { - -webkit-box-align: end; - -ms-flex-align: end; - align-items: flex-end; - } -} -.complex__sliders .slider__title { - position: relative; - padding: 18px 50px 18px 0; - color: #FFFFFF; - background-color: #42AAFF; - border-radius: 0 1000px 1000px 0; -} -.complex__sliders .slider__title::before { - content: ""; - position: absolute; - top: 0; - bottom: 0; - right: calc(100% - 1px); - width: 100vw; - background-color: #42AAFF; -} - -.intro { - position: relative; - padding-bottom: 60px; - background-repeat: no-repeat; - background-position: center; - background-size: cover; -} -@media (min-width: 1200px) { - .intro { - padding-bottom: 80px; - } -} -.intro::before { - content: ""; - position: absolute; - top: 0; - left: 0; - width: 100%; - height: 100%; - background-color: rgba(3, 9, 15, 0.5); - -webkit-backdrop-filter: blur(10px); - backdrop-filter: blur(10px); -} -.intro__wrap { - position: relative; -} -@media (min-width: 1200px) { - .intro__inner { - display: -webkit-box; - display: -ms-flexbox; - display: flex; - -webkit-box-pack: justify; - -ms-flex-pack: justify; - justify-content: space-between; - } -} -.intro__cnt { - margin: 0px 0px 60px 0px; -} -@media (min-width: 1200px) { - .intro__cnt { - width: 540px; - margin: 0px 30px 0px 0px; - } -} -.intro__descr { - color: #FFFFFF; - font-size: 16px; - line-height: 22px; - font-weight: 500; - margin-top: 12px; -} -@media (min-width: 1200px) { - .intro__descr { - margin-top: 20px; - } -} -.intro__link-complex { - display: block; - max-width: 432px; - padding: 15px 20px; - border-radius: 10px; - color: #4B4E53; - font-size: 14px; - line-height: 20px; - font-weight: 600; - background-color: #FFFFFF; - margin-top: 12px; -} -.intro__link-complex span { - text-decoration: underline; -} -.intro__row { - max-width: 475px; - display: grid; - grid-gap: 20px; - grid-template-columns: repeat(1, 1fr); - margin-top: 20px; -} -@media (min-width: 480px) { - .intro__row { - grid-template-columns: repeat(2, 1fr); - } -} -.intro__col:nth-child(1) .intro__link-map { - display: none; -} -@media (min-width: 480px) { - .intro__col:nth-child(1) .intro__link-map { - display: inline-block; - } -} -@media (min-width: 480px) { - .intro__col:nth-child(2) .intro__link-map { - display: none; - } -} -.intro__item { - position: relative; - color: #FFFFFF; - font-size: 16px; - line-height: 22px; - font-weight: 500; - padding-left: 16px; -} -.intro__item span { - color: #FFFFFF !important; -} -.intro__item::before { - content: ""; - position: absolute; - top: 7px; - left: 0; - width: 8px; - height: 8px; - background-color: currentColor; - border-radius: 2px; -} -.intro__item:not(:last-child) { - margin-bottom: 8px; -} -.intro__link-map { - margin-top: 16px; - color: #FFFFFF; - font-size: 14px; - line-height: 20px; - font-weight: 500; - -webkit-text-decoration-line: underline; - text-decoration-line: underline; -} -@media (min-width: 1200px) { - .intro__link-map { - margin-top: 20px; - } -} -.intro__group span { - display: block; - color: #FFFFFF; -} -.intro__group span:nth-child(1) { - font-size: 14px; - line-height: 20px; - font-weight: 700; - margin-bottom: 2px; -} -.intro__group span:nth-child(2) { - font-size: 16px; - line-height: 22px; - font-weight: 500; -} -.intro__group:not(:first-child) { - margin-top: 12px; -} -.intro__bottom { - display: -webkit-box; - display: -ms-flexbox; - display: flex; - -webkit-box-orient: vertical; - -webkit-box-direction: normal; - -ms-flex-direction: column; - flex-direction: column; - -webkit-box-align: start; - -ms-flex-align: start; - align-items: flex-start; - margin-top: 40px; -} -@media (min-width: 640px) { - .intro__bottom { - -webkit-box-orient: horizontal; - -webkit-box-direction: normal; - -ms-flex-direction: row; - flex-direction: row; - -webkit-box-align: center; - -ms-flex-align: center; - align-items: center; - } -} -.intro__views { - -webkit-box-ordinal-group: 2; - -ms-flex-order: 1; - order: 1; - position: relative; - -webkit-box-flex: 1; - -ms-flex-positive: 1; - flex-grow: 1; - padding: 15px 36px; - border-radius: 10px; - margin-top: 10px; - background-color: #42AAFF; - color: #FFFFFF; - font-size: 14px; - line-height: 20px; - font-weight: 700; -} -@media (min-width: 480px) { - .intro__views { - margin-right: 20px; - } -} -@media (min-width: 640px) { - .intro__views { - -webkit-box-ordinal-group: 1; - -ms-flex-order: 0; - order: 0; - margin-top: 0; - } -} -.intro__views::before { - content: ""; - position: absolute; - top: 20px; - left: 20px; - width: 8px; - height: 8px; - background-color: #FFFFFF; - border-radius: 2px; -} -.intro__link-phone { - display: -webkit-box; - display: -ms-flexbox; - display: flex; - -webkit-box-pack: center; - -ms-flex-pack: center; - justify-content: center; - width: 100%; - padding: 12px; -} -@media (min-width: 480px) { - .intro__link-phone { - -ms-flex-negative: 0; - flex-shrink: 0; - width: auto; - padding: 12px 48px; - } -} -.intro__swiper { - margin: 0 -20px; - padding: 0 20px 34px; -} -@media (min-width: 1200px) { - .intro__swiper { - width: 598px; - margin: 0; - padding: 0 0 34px; - } -} -.intro__swiper .swiper-pagination { - bottom: 0; -} -.intro__swiper .swiper-pagination .swiper-pagination-bullet { - margin: 0 5px; -} -.intro__swiper .swiper-pagination-bullet { - width: 40px; - height: 4px; - margin: 0 5px; - border-radius: 5px; - background-color: #FFFFFF; - opacity: 1; - -webkit-transition: 0.3s; - -o-transition: 0.3s; - transition: 0.3s; -} -@media (min-width: 1200px) { - .intro__swiper .swiper-pagination-bullet:hover { - background-color: #42AAFF; - } -} -.intro__swiper .swiper-pagination-bullet-active { - background-color: #42AAFF; -} -.intro__swiper .swiper-button-prev, -.intro__swiper .swiper-button-next { - display: none; -} -@media (min-width: 1200px) { - .intro__swiper .swiper-button-prev, - .intro__swiper .swiper-button-next { - display: -webkit-box; - display: -ms-flexbox; - display: flex; - top: calc(50% - 17px); - -webkit-transform: translateY(-50%); - -ms-transform: translateY(-50%); - transform: translateY(-50%); - width: 40px; - height: 40px; - border-radius: 10px; - border: 1px solid #FFFFFF; - margin: 0; - -webkit-transition: 0.3s; - -o-transition: 0.3s; - transition: 0.3s; - } -} -.intro__swiper .swiper-button-prev:after, -.intro__swiper .swiper-button-next:after { - display: none; -} -.intro__swiper .swiper-button-prev svg, -.intro__swiper .swiper-button-next svg { - stroke: #FFFFFF; - -webkit-transition: 0.3s; - -o-transition: 0.3s; - transition: 0.3s; -} -@media (min-width: 1200px) { - .intro__swiper .swiper-button-prev:hover, - .intro__swiper .swiper-button-next:hover { - background-color: #FFFFFF; - } -} -@media (min-width: 1200px) { - .intro__swiper .swiper-button-prev:hover svg, - .intro__swiper .swiper-button-next:hover svg { - stroke: #012060; - } -} -.intro__swiper .swiper-button-prev { - left: 20px; -} -.intro__swiper .swiper-button-next { - right: 20px; -} -.intro__swiper .swiper-button-next svg { - -webkit-transform: rotate(180deg); - -ms-transform: rotate(180deg); - transform: rotate(180deg); -} - -.intro-item { - position: relative; - border-radius: 20px; - overflow: hidden; -} -.intro-item::before { - content: ""; - position: absolute; - top: 0; - left: 0; - width: 100%; - height: 100%; - background-color: rgba(3, 9, 15, 0.3); -} -.intro-item__img { - height: 217px; -} -@media (min-width: 1200px) { - .intro-item__img { - height: 366px; - } -} -.intro-item__img img { - width: 100%; - height: 100%; - -o-object-fit: cover; - object-fit: cover; -} -.intro-item__btn { - position: absolute; - bottom: 20px; - right: 20px; - display: -webkit-box; - display: -ms-flexbox; - display: flex; - -webkit-box-align: center; - -ms-flex-align: center; - align-items: center; - -webkit-box-pack: center; - -ms-flex-pack: center; - justify-content: center; - width: 30px; - height: 30px; - background-color: #FFFFFF; - opacity: 0.8; - border-radius: 5px; - -webkit-transition: 0.3s; - -o-transition: 0.3s; - transition: 0.3s; -} -.intro-item__btn:hover { - opacity: 1; -} - -.offer__wrap { - padding: 60px 0; -} -@media (min-width: 1200px) { - .offer__wrap { - padding: 60px 0 100px; - } -} -.offer__inner { - margin-bottom: 40px; -} -@media (min-width: 780px) { - .offer__inner { - display: -webkit-box; - display: -ms-flexbox; - display: flex; - } -} -@media (min-width: 1200px) { - .offer__inner { - margin-bottom: 100px; - } -} -.offer__line { - display: -webkit-box; - display: -ms-flexbox; - display: flex; - -webkit-box-align: end; - -ms-flex-align: end; - align-items: flex-end; - -webkit-box-pack: justify; - -ms-flex-pack: justify; - justify-content: space-between; - border-bottom: 1px dashed #E6E7E7; -} -.offer__line span { - font-size: 16px; - line-height: 22px; - background-color: #FFFFFF; - margin-bottom: -5px; -} -.offer__line span:nth-child(1) { - -ms-flex-negative: 0; - flex-shrink: 0; - margin-right: 30px; - color: #9A9C9F; - font-size: 14px; - font-weight: 400; -} -@media (min-width: 1200px) { - .offer__line span:nth-child(1) { - font-size: 16px; - } -} -.offer__line span:nth-child(2) { - color: #4B4E53; - font-weight: 500; -} -.offer__line:not(:last-child) { - margin-bottom: 17px; -} -.offer__cnt { - margin: 40px 0px 0px 0px; -} -@media (min-width: 780px) { - .offer__cnt { - -webkit-box-flex: 1; - -ms-flex-positive: 1; - flex-grow: 1; - margin: 0px 0px 0px 20px; - } -} -.offer__title { - font-size: 24px; - line-height: 28px; - font-weight: 800; - margin-bottom: 30px; -} -@media (min-width: 1200px) { - .offer__title { - font-size: 32px; - line-height: 40px; - } -} -.offer__additional { - margin-top: 40px; - font-weight: 500; - color: #4B4E53; - font-size: 14px; - line-height: 22px; -} -@media (min-width: 1200px) { - .offer__additional { - font-size: 16px; - margin-top: 50px; - } -} - -@media (min-width: 780px) { - .offer-side { - max-width: 495px; - width: 100%; - } -} -.offer-side__tabs { - display: -webkit-box; - display: -ms-flexbox; - display: flex; - margin-bottom: 30px; -} -.offer-side__tab { - position: relative; - font-weight: 600; - font-size: 14px; - line-height: 20px; - color: #9A9C9F; - -webkit-transition: 0.3s; - -o-transition: 0.3s; - transition: 0.3s; -} -.offer-side__tab:not(:last-child) { - margin-right: 34px; -} -.offer-side__tab:not(:last-child)::after { - content: ""; - position: absolute; - top: 0; - bottom: 0; - right: -18px; - width: 2px; - background-color: #42AAFF; - border-radius: 5px; - pointer-events: none; -} -.offer-side__tab:hover, .offer-side__tab.active { - color: #363A3F; -} -.offer-side__cnt { - margin-bottom: 40px; -} -.offer-side__buttons { - margin-top: 40px; -} -.offer-side__btn { - display: -webkit-box; - display: -ms-flexbox; - display: flex; - -webkit-box-pack: center; - -ms-flex-pack: center; - justify-content: center; - width: 100%; - padding: 12px; -} -.offer-side__btn:not(:last-child) { - margin-bottom: 10px; -} -.offer-side__download { - display: -webkit-box; - display: -ms-flexbox; - display: flex; - -webkit-box-align: center; - -ms-flex-align: center; - align-items: center; - -webkit-box-pack: center; - -ms-flex-pack: center; - justify-content: center; - min-height: 160px; - margin-top: 40px; - padding: 20px; - border: 1px dashed #E6E7E7; - border-radius: 20px; -} -.offer-side__download span { - position: relative; - padding-left: 68px; - color: #4B4E53; - font-size: 16px; - line-height: 22px; - font-weight: 400; - -webkit-text-decoration-line: underline; - text-decoration-line: underline; -} -.offer-side__download svg { - position: absolute; - top: 50%; - left: 0; - -webkit-transform: translateY(-50%); - -ms-transform: translateY(-50%); - transform: translateY(-50%); - -webkit-transition: 0.3s; - -o-transition: 0.3s; - transition: 0.3s; -} -@media (min-width: 1200px) { - .offer-side__download:hover svg { - -webkit-transform: translateY(-50%) scale(1.2); - -ms-transform: translateY(-50%) scale(1.2); - transform: translateY(-50%) scale(1.2); - } -} - -.offer-side-item { - display: none; - position: relative; - padding: 20px 29px; - background-color: #FFFFFF; - -webkit-box-shadow: 0px 4px 28px rgba(6, 15, 26, 0.08), 0px 4px 16px rgba(6, 15, 26, 0.04); - box-shadow: 0px 4px 28px rgba(6, 15, 26, 0.08), 0px 4px 16px rgba(6, 15, 26, 0.04); - border-radius: 10px; -} -.offer-side-item__img { - height: 180px; -} -@media (min-width: 480px) { - .offer-side-item__img { - height: 300px; - } -} -.offer-side-item__img img { - width: 100%; - height: 100%; - -o-object-fit: contain; - object-fit: contain; -} -.offer-side-item__btn { - position: absolute; - bottom: 20px; - right: 20px; - display: -webkit-box; - display: -ms-flexbox; - display: flex; - -webkit-box-align: center; - -ms-flex-align: center; - align-items: center; - -webkit-box-pack: center; - -ms-flex-pack: center; - justify-content: center; - width: 30px; - height: 30px; - background-color: #EDF7FF; - opacity: 0.8; - border-radius: 5px; - -webkit-transition: 0.3s; - -o-transition: 0.3s; - transition: 0.3s; -} -.offer-side-item__btn:hover { - opacity: 1; -} -.offer-side-item.active { - display: block; -} -.offer-side-item.fade { - -webkit-animation-name: fade; - animation-name: fade; - -webkit-animation-duration: 0.4s; - animation-duration: 0.4s; -} - -@-webkit-keyframes fade { - from { - opacity: 0; - } - to { - opacity: 1; - } -} - -@keyframes fade { - from { - opacity: 0; - } - to { - opacity: 1; - } -} -.offer-descr { - padding-top: 40px; - border-top: 1px solid #E6E7E7; -} -@media (min-width: 1200px) { - .offer-descr { - padding-top: 60px; - } -} -.offer-descr h3, .offer-descr__caption { - max-width: 805px; - color: #4B4E53; - font-size: 20px; - line-height: 30px; - font-weight: 500; - margin-bottom: 12px; -} -.offer-descr p, .offer-descr__text { - max-width: 805px; - color: #9A9C9F; - font-size: 14px; - line-height: 22px; - font-weight: 500; -} -@media (min-width: 1200px) { - .offer-descr p, .offer-descr__text { - font-size: 16px; - } -} -.offer-descr p:not(:last-child), .offer-descr__text:not(:last-child) { - margin-bottom: 12px; -} - -.offer-side-popup { - position: fixed; - top: 0; - left: 0; - z-index: 100; - width: 100%; - height: 100%; - display: -webkit-box; - display: -ms-flexbox; - display: flex; - padding: 0 20px; - opacity: 0; - visibility: hidden; - background-color: rgba(3, 9, 15, 0.6); - -webkit-transition: 0.3s; - -o-transition: 0.3s; - transition: 0.3s; - overflow-y: auto; -} -.offer-side-popup.active { - opacity: 1; - visibility: visible; -} -.offer-side-popup__wrap { - position: relative; - max-width: 1216px; - width: 100%; - height: 310px; - padding: 40px 20px 20px; - margin: auto; - border-radius: 10px; - -webkit-box-shadow: 0px 4px 32px rgba(14, 56, 94, 0.12); - box-shadow: 0px 4px 32px rgba(14, 56, 94, 0.12); - background-color: #FFFFFF; -} -@media (min-width: 640px) { - .offer-side-popup__wrap { - height: 80%; - } -} -@media (min-width: 1200px) { - .offer-side-popup__wrap { - padding: 70px 110px 20px; - } -} -.offer-side-popup__close { - position: absolute; - top: 0; - right: 0; - width: 60px; - height: 60px; - display: -webkit-box; - display: -ms-flexbox; - display: flex; - -webkit-box-align: center; - -ms-flex-align: center; - align-items: center; - -webkit-box-pack: center; - -ms-flex-pack: center; - justify-content: center; -} -.offer-side-popup__close svg { - fill: #363A3F; - -webkit-transition: 0.3s; - -o-transition: 0.3s; - transition: 0.3s; -} -@media (min-width: 1200px) { - .offer-side-popup__close:hover svg { - fill: #42AAFF; - } -} -.offer-side-popup__cnt { - height: calc(100% - 40px); -} -@media (min-width: 1200px) { - .offer-side-popup__cnt { - height: calc(100% - 50px); - } -} -.offer-side-popup__item { - display: none; - height: 100%; -} -.offer-side-popup__item img { - width: 100%; - height: 100%; - -o-object-fit: contain; - object-fit: contain; -} -.offer-side-popup__item.active { - display: block; -} -.offer-side-popup__item.fade { - -webkit-animation-name: fade; - animation-name: fade; - -webkit-animation-duration: 0.4s; - animation-duration: 0.4s; -} -.offer-side-popup__tabs { - display: -webkit-box; - display: -ms-flexbox; - display: flex; - margin-top: 20px; -} -@media (min-width: 640px) { - .offer-side-popup__tabs { - -webkit-box-pack: center; - -ms-flex-pack: center; - justify-content: center; - } -} -@media (min-width: 1200px) { - .offer-side-popup__tabs { - margin-top: 30px; - } -} -.offer-side-popup__tab { - position: relative; - font-weight: 600; - font-size: 14px; - line-height: 20px; - color: #9A9C9F; - -webkit-transition: 0.3s; - -o-transition: 0.3s; - transition: 0.3s; -} -.offer-side-popup__tab:not(:last-child) { - margin-right: 34px; -} -.offer-side-popup__tab:not(:last-child)::after { - content: ""; - position: absolute; - top: 0; - bottom: 0; - right: -18px; - width: 2px; - background-color: #42AAFF; - border-radius: 5px; - pointer-events: none; -} -.offer-side-popup__tab:hover, .offer-side-popup__tab.active { - color: #363A3F; -} -.offer-side-popup__sizeoff { - position: absolute; - right: 20px; - bottom: 20px; - width: 30px; - height: 30px; - display: -webkit-box; - display: -ms-flexbox; - display: flex; - -webkit-box-align: center; - -ms-flex-align: center; - align-items: center; - -webkit-box-pack: center; - -ms-flex-pack: center; - justify-content: center; - background-color: #EDF7FF; - opacity: 0.8; - border-radius: 5px; - -webkit-transition: 0.3s; - -o-transition: 0.3s; - transition: 0.3s; -} -@media (min-width: 1200px) { - .offer-side-popup__sizeoff:hover { - opacity: 1; - } -} - -.img-viewer { - position: fixed; - top: 0; - left: 0; - z-index: 100; - display: -webkit-box; - display: -ms-flexbox; - display: flex; - width: 100%; - height: 100%; - padding: 0 20px; - opacity: 0; - visibility: hidden; - background: rgba(3, 9, 15, 0.6); - -webkit-backdrop-filter: blur(10px); - backdrop-filter: blur(10px); - -webkit-transition: 0.3s; - -o-transition: 0.3s; - transition: 0.3s; - overflow-y: auto; -} -@media (min-width: 1200px) { - .img-viewer { - padding: 0 100px; - } -} -.img-viewer.active { - opacity: 1; - visibility: visible; -} -.img-viewer__wrap { - position: relative; - max-width: 1010px; - width: 100%; - height: 310px; - margin: auto; - -webkit-box-shadow: 0px 4px 32px rgba(14, 56, 94, 0.12); - box-shadow: 0px 4px 32px rgba(14, 56, 94, 0.12); -} -@media (min-width: 640px) { - .img-viewer__wrap { - height: 67.5%; - } -} -.img-viewer__close { - position: absolute; - top: 0; - right: 0; - z-index: 5; - width: 60px; - height: 60px; - display: -webkit-box; - display: -ms-flexbox; - display: flex; - -webkit-box-align: center; - -ms-flex-align: center; - align-items: center; - -webkit-box-pack: center; - -ms-flex-pack: center; - justify-content: center; -} -.img-viewer__close svg { - fill: #FFFFFF; - -webkit-transition: 0.3s; - -o-transition: 0.3s; - transition: 0.3s; -} -@media (min-width: 1200px) { - .img-viewer__close:hover svg { - fill: #012060; - } -} -.img-viewer__thumbs { - position: absolute; - z-index: 5; - bottom: 16px; - left: 20px; - max-width: 224px; - width: 100%; -} -@media (min-width: 640px) { - .img-viewer__thumbs { - left: 0; - right: 0; - bottom: 20px; - margin: 0 auto; - max-width: 380px; - } -} -.img-viewer__thumbs-swiper .swiper-slide { - height: 46px; - border-radius: 10px; - overflow: hidden; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; - cursor: pointer; -} -@media (min-width: 640px) { - .img-viewer__thumbs-swiper .swiper-slide { - height: 80px; - } -} -.img-viewer__thumbs-swiper .swiper-slide img { - width: 100%; - height: 100%; - -o-object-fit: cover; - object-fit: cover; -} -.img-viewer__slider { - height: 100%; -} -.img-viewer__slider .swiper-button-prev, -.img-viewer__slider .swiper-button-next { - display: none; -} -@media (min-width: 1200px) { - .img-viewer__slider .swiper-button-prev, - .img-viewer__slider .swiper-button-next { - display: -webkit-box; - display: -ms-flexbox; - display: flex; - top: 50%; - -webkit-transform: translateY(-50%); - -ms-transform: translateY(-50%); - transform: translateY(-50%); - width: 40px; - height: 40px; - border-radius: 10px; - border: 1px solid #FFFFFF; - margin: 0; - -webkit-transition: 0.3s; - -o-transition: 0.3s; - transition: 0.3s; - } -} -.img-viewer__slider .swiper-button-prev:after, -.img-viewer__slider .swiper-button-next:after { - display: none; -} -.img-viewer__slider .swiper-button-prev svg, -.img-viewer__slider .swiper-button-next svg { - stroke: #FFFFFF; - -webkit-transition: 0.3s; - -o-transition: 0.3s; - transition: 0.3s; -} -@media (min-width: 1200px) { - .img-viewer__slider .swiper-button-prev:hover, - .img-viewer__slider .swiper-button-next:hover { - background-color: #FFFFFF; - } -} -@media (min-width: 1200px) { - .img-viewer__slider .swiper-button-prev:hover svg, - .img-viewer__slider .swiper-button-next:hover svg { - stroke: #012060; - } -} -.img-viewer__slider .swiper-button-prev { - left: -70px; -} -.img-viewer__slider .swiper-button-next { - right: -70px; -} -.img-viewer__slider .swiper-button-next svg { - -webkit-transform: rotate(180deg); - -ms-transform: rotate(180deg); - transform: rotate(180deg); -} -.img-viewer__slider-swiper { - height: 100%; - border-radius: 20px; -} -.img-viewer__slider-swiper .swiper-slide { - position: relative; - border-radius: 20px; - overflow: hidden; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; -} -.img-viewer__slider-swiper .swiper-slide img { - width: 100%; - height: 100%; - -o-object-fit: cover; - object-fit: cover; -} -.img-viewer__slider-swiper .swiper-slide::before { - content: ""; - position: absolute; - top: 0; - left: 0; - width: 100%; - height: 100%; - background: rgba(3, 9, 15, 0.3); -} -.img-viewer__caption { - position: absolute; - top: calc(100% + 12px); - left: 0; - right: 0; - z-index: 5; - color: #FFFFFF; - font-size: 16px; - line-height: 22px; - font-weight: 600; - text-align: center; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; -} -@media (min-width: 640px) { - .img-viewer__caption { - top: 102.3%; - } -} -.img-viewer__sizeoff { - position: absolute; - right: 20px; - bottom: 20px; - z-index: 1; - width: 30px; - height: 30px; - display: -webkit-box; - display: -ms-flexbox; - display: flex; - -webkit-box-align: center; - -ms-flex-align: center; - align-items: center; - -webkit-box-pack: center; - -ms-flex-pack: center; - justify-content: center; - background-color: #EDF7FF; - opacity: 0.8; - border-radius: 5px; - -webkit-transition: 0.3s; - -o-transition: 0.3s; - transition: 0.3s; -} -@media (min-width: 1200px) { - .img-viewer__sizeoff:hover { - opacity: 1; - } -} - -.about { - position: relative; - background-repeat: no-repeat; - background-position: center; - background-size: cover; -} -.about::before { - content: ""; - position: absolute; - top: 0; - left: 0; - width: 100%; - height: 100%; - background-color: rgba(3, 9, 15, 0.5); -} -.about__wrap { - position: relative; - padding-bottom: 80px; -} -@media (min-width: 1200px) { - .about__wrap { - padding-bottom: 160px; - } -} -.about__cnt { - max-width: 800px; -} -.about__title { - margin-bottom: 12px; -} -.about__descr { - max-width: 780px; - margin-bottom: 30px; - color: #FFFFFF; - font-size: 20px; - line-height: 24px; - font-weight: 500; -} -@media (min-width: 1200px) { - .about__descr { - line-height: 30px; - } -} -.about__subdescr { - max-width: 780px; - color: #FFFFFF; - font-size: 16px; - line-height: 22px; - font-weight: 500; -} - -.experience { - padding: 60px 0; -} -@media (min-width: 1200px) { - .experience { - padding: 100px 0; - } -} -.experience__title { - display: -webkit-box; - display: -ms-flexbox; - display: flex; - -ms-flex-wrap: wrap; - flex-wrap: wrap; - -webkit-box-align: center; - -ms-flex-align: center; - align-items: center; - max-width: 730px; - margin-bottom: 40px; - font-size: 32px; - line-height: 36px; - font-weight: 800; -} -@media (min-width: 640px) { - .experience__title { - -ms-flex-wrap: nowrap; - flex-wrap: nowrap; - } -} -@media (min-width: 1200px) { - .experience__title { - margin-bottom: 60px; - font-size: 36px; - line-height: 40px; - } -} -.experience__title span { - margin: 0px 30px 0px 0px; - font-size: 100px; - line-height: 100px; - color: #42AAFF; -} -@media (min-width: 1200px) { - .experience__title span { - font-size: 142px; - line-height: 142px; - } -} -@media (min-width: 780px) { - .experience__inner { - display: -webkit-box; - display: -ms-flexbox; - display: flex; - -webkit-box-pack: justify; - -ms-flex-pack: justify; - justify-content: space-between; - } -} -.experience__cnt { - margin: 0 0 40px 0; -} -@media (min-width: 780px) { - .experience__cnt { - width: 600px; - margin: 0 30px 0 0; - } -} -.experience__subtitle { - color: #40454A; - font-size: 24px; - line-height: 28px; - font-weight: 600; - margin-bottom: 16px; -} -@media (min-width: 1200px) { - .experience__subtitle { - margin-bottom: 20px; - } -} -.experience__descr, .experience__text { - color: #707477; - font-size: 16px; - line-height: 22px; - font-weight: 500; -} -.experience__text:not(:last-child) { - margin-bottom: 20px; -} -@media (min-width: 780px) { - .experience__img { - width: 568px; - } -} -@media (min-width: 1200px) { - .experience__img { - margin-top: -65px; - } -} -.experience__img img { - max-width: 100%; -} - -.sort-group { - position: relative; - width: 200px; -} -.sort-group--wide { - width: 294px; -} -.sort-group__current { - position: relative; - padding: 15px 40px 15px 20px; - border-radius: 10px; - font-weight: 600; - font-size: 14px; - line-height: 20px; - color: #4B4E53; - background-color: #EDF7FF; - cursor: pointer; - -o-text-overflow: ellipsis; - text-overflow: ellipsis; - white-space: nowrap; - overflow: hidden; -} -.sort-group__current::after { - content: ""; - position: absolute; - top: 50%; - right: 20px; - -webkit-transform: translateY(-50%) rotate(0); - -ms-transform: translateY(-50%) rotate(0); - transform: translateY(-50%) rotate(0); - width: 12px; - height: 7px; - background-repeat: no-repeat; - background-image: url("data:image/svg+xml,%3Csvg width='12' height='7' viewBox='0 0 12 7' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M11 1L6 6L1 1' stroke='%2342AAFF' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E"); - -webkit-transition: 0.3s; - -o-transition: 0.3s; - transition: 0.3s; -} -.sort-group__list { - position: absolute; - top: calc(100% + 30px); - left: 0; - right: 0; - z-index: 5; - opacity: 0; - overflow: hidden; - visibility: hidden; - background-color: #FFFFFF; - -webkit-box-shadow: 0px 4px 28px rgba(14, 56, 94, 0.08), 0px 4px 16px rgba(14, 56, 94, 0.04); - box-shadow: 0px 4px 28px rgba(14, 56, 94, 0.08), 0px 4px 16px rgba(14, 56, 94, 0.04); - border-radius: 10px; - -webkit-transition: 0.3s; - -o-transition: 0.3s; - transition: 0.3s; -} -.sort-group__item { - padding: 10px 20px; - color: #4B4E53; - font-size: 14px; - line-height: 20px; - font-weight: 600; - cursor: pointer; - -webkit-transition: 0.3s; - -o-transition: 0.3s; - transition: 0.3s; -} -.sort-group__item.active { - background-color: #EDF7FF; -} -.sort-group.active .sort-group__current::after { - -webkit-transform: translateY(-50%) rotate(-180deg); - -ms-transform: translateY(-50%) rotate(-180deg); - transform: translateY(-50%) rotate(-180deg); -} -.sort-group.active .sort-group__list { - top: calc(100% + 10px); - opacity: 1; - visibility: visible; -} - -.top-catalog { - display: -webkit-box; - display: -ms-flexbox; - display: flex; - -ms-flex-wrap: wrap; - flex-wrap: wrap; - -webkit-box-align: start; - -ms-flex-align: start; - align-items: flex-start; -} -@media (min-width: 1200px) { - .top-catalog { - -ms-flex-wrap: nowrap; - flex-wrap: nowrap; - -webkit-box-pack: justify; - -ms-flex-pack: justify; - justify-content: space-between; - } -} -.top-catalog__inner { - margin: 0px 0px 40px 0px; -} -@media (min-width: 1200px) { - .top-catalog__inner { - width: 450px; - margin: 0px 30px 0px 0px; - } -} -.top-catalog__title { - margin-bottom: 20px; -} -.top-catalog__result { - color: #9A9C9F; - font-size: 16px; - line-height: 22px; - font-weight: 500; -} -.top-catalog__result span { - color: #363A3F; - font-weight: 600; -} -.top-catalog__sorts { - width: 100%; - display: -webkit-box; - display: -ms-flexbox; - display: flex; - -ms-flex-wrap: wrap; - flex-wrap: wrap; - -webkit-box-align: center; - -ms-flex-align: center; - align-items: center; - margin: 0 -5px; -} -@media (min-width: 780px) { - .top-catalog__sorts { - -ms-flex-wrap: nowrap; - flex-wrap: nowrap; - margin: 0; - } -} -@media (min-width: 1200px) { - .top-catalog__sorts { - width: auto; - padding-top: 10px; - } -} -.top-catalog__sort-group { - width: calc(100% - 10px); - margin: 0 5px; -} -@media (min-width: 480px) { - .top-catalog__sort-group { - width: calc(50% - 10px); - } -} -@media (min-width: 780px) { - .top-catalog__sort-group { - width: 200px; - margin: 0; - } -} -.top-catalog__sort-group:not(:last-child) { - margin: 0px 5px 10px; -} -@media (min-width: 780px) { - .top-catalog__sort-group:not(:last-child) { - margin: 0px 10px 0px 0px; - } -} -@media (min-width: 780px) { - .top-catalog__sort-group.sort-group--wide { - width: 294px; - } -} - -.footer { - background-repeat: no-repeat; - background-size: cover; - background-position: center; -} -.footer__buttons { - position: fixed; - right: 20px; - bottom: 20px; - z-index: 10; -} -.footer__btn { - display: block; - width: 60px; - height: 60px; - border-radius: 50%; -} -.footer__btn:not(:last-child) { - margin-bottom: 10px; -} -.footer__btn-phone { - background-color: #012060; -} -.footer__btn-up { - background-color: #FFFFFF; - -webkit-box-shadow: 0px 1px 8px rgba(14, 56, 94, 0.12), 0px 0px 44px rgba(14, 56, 94, 0.12); - box-shadow: 0px 1px 8px rgba(14, 56, 94, 0.12), 0px 0px 44px rgba(14, 56, 94, 0.12); -} -@media (min-width: 1024px) { - .footer__col { - padding: 0 15px; - } -} -.footer__col:not(:first-child) { - border-top: 1px solid #FFFFFF; -} -@media (min-width: 1024px) { - .footer__col:not(:first-child) { - border-top: none; - padding-bottom: 0; - } -} -.footer__col-intro { - margin-bottom: 60px; -} -@media (min-width: 1024px) { - .footer__col-intro { - width: 350px; - margin-bottom: 0; - } -} -@media (min-width: 1024px) { - .footer__col-menu { - position: relative; - padding-bottom: 120px !important; - } -} -.footer__col-contacts .footer__caption::after { - display: none; -} -.footer__block { - display: none; -} -@media (min-width: 1024px) { - .footer__block { - display: block !important; - height: auto !important; - } -} -.footer__block .footer__list { - padding: 10px 0 30px; -} -@media (min-width: 1024px) { - .footer__block .footer__list { - padding-bottom: 0; - } -} -.footer__logo { - margin-bottom: 16px; -} -@media (min-width: 1200px) { - .footer__logo { - margin-bottom: 18px; - } -} -.footer__logo img { - max-height: 50px; -} -@media (min-width: 1200px) { - .footer__logo img { - max-height: none; - } -} -.footer__descr { - color: #E6E7E7; - font-size: 14px; - line-height: 20px; - font-weight: 500; - margin-bottom: 30px; -} -.footer__caption { - position: relative; - padding: 30px 0 30px; - color: #FFFFFF; - font-size: 18px; - line-height: 24px; - font-weight: 600; - cursor: pointer; -} -@media (min-width: 1024px) { - .footer__caption { - margin-bottom: 16px; - padding: 0; - font-size: 16px; - line-height: 20px; - cursor: auto; - } -} -.footer__caption::after { - content: ""; - position: absolute; - top: 50%; - right: 20px; - -webkit-transform: translateY(-50%); - -ms-transform: translateY(-50%); - transform: translateY(-50%); - width: 13px; - height: 7px; - background-repeat: no-repeat; - background-image: url("data:image/svg+xml,%3Csvg width='13' height='7' viewBox='0 0 13 7' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M11.3334 1L6.33337 6L1.33337 1' stroke='white' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E"); - -webkit-transition: 0.3s; - -o-transition: 0.3s; - transition: 0.3s; -} -@media (min-width: 1024px) { - .footer__caption::after { - display: none; - } -} -.footer__caption.active::after { - -webkit-transform: rotate(180deg); - -ms-transform: rotate(180deg); - transform: rotate(180deg); -} -.footer__item:not(:last-child) { - margin-bottom: 12px; -} -@media (min-width: 1024px) { - .footer__item:not(:last-child) { - margin-bottom: 8px; - } -} -.footer__link { - color: #FFFFFF; - font-size: 16px; - line-height: 22px; - font-weight: 500; - font-style: normal; - -webkit-transition: 0.3s; - -o-transition: 0.3s; - transition: 0.3s; -} -@media (min-width: 1024px) { - .footer__link { - font-size: 14px; - line-height: 20px; - } -} -@media (min-width: 1200px) { - .footer__link:hover { - color: #42AAFF; - } -} -.footer__author { - position: absolute; - top: calc(100% + 22px); - left: 0; -} -@media (min-width: 1024px) { - .footer__author { - top: auto; - bottom: 0; - } -} -.footer__author img { - max-width: 250px; - max-height: 107px; -} -.footer__copy, .footer__plicy { - color: #FFFFFF; - font-size: 14px; - line-height: 20px; -} -.footer__copy { - font-weight: 400; - margin-bottom: 10px; -} -@media (min-width: 1200px) { - .footer__copy { - margin-bottom: 0; - } -} -.footer__plicy { - font-weight: 500; - -webkit-transition: 0.3s; - -o-transition: 0.3s; - transition: 0.3s; -} -@media (min-width: 1200px) { - .footer__plicy:hover { - color: #42AAFF; - } -} -.footer--mini .footer-top { - display: none; -} - -.footer-top { - background: rgba(255, 255, 255, 0.6); - -webkit-backdrop-filter: blur(6px); - backdrop-filter: blur(6px); - padding: 60px 0 80px; -} -@media (min-width: 1200px) { - .footer-top { - padding: 80px 0; - } -} -@media (min-width: 1200px) { - .footer-feedback { - display: -webkit-box; - display: -ms-flexbox; - display: flex; - -webkit-box-pack: justify; - -ms-flex-pack: justify; - justify-content: space-between; - } -} -.footer-feedback__cnt { - margin: 0px 0px 40px 0px; -} -@media (min-width: 1200px) { - .footer-feedback__cnt { - -ms-flex-negative: 0; - flex-shrink: 0; - width: 310px; - margin: 0px 30px 0px 0px; - } -} -.footer-feedback__title { - margin-bottom: 10px; -} -.footer-feedback__descr { - color: #4B4E53; - font-size: 18px; - line-height: 24px; - font-weight: 600; -} -@media (min-width: 1200px) { - .footer-feedback__form { - width: 804px; - } -} -.footer-feedback__row { - margin-bottom: 40px; -} -@media (min-width: 640px) { - .footer-feedback__row { - display: -webkit-box; - display: -ms-flexbox; - display: flex; - } -} -.footer-feedback__col:nth-child(1) { - margin: 0px 0px 16px 0px; -} -@media (min-width: 640px) { - .footer-feedback__col:nth-child(1) { - width: 50%; - margin: 0px 16px 0px 0px; - } -} -@media (min-width: 1200px) { - .footer-feedback__col:nth-child(1) { - max-width: 293px; - width: 100%; - } -} -@media (min-width: 640px) { - .footer-feedback__col:nth-child(2) { - width: 50%; - } -} -@media (min-width: 1200px) { - .footer-feedback__col:nth-child(2) { - max-width: 495px; - width: 100%; - } -} -.footer-feedback__field:not(:last-child) { - margin-bottom: 16px; -} -.footer-feedback__field textarea { - height: 116px; -} -@media (min-width: 640px) { - .footer-feedback__control { - display: -webkit-box; - display: -ms-flexbox; - display: flex; - -webkit-box-align: center; - -ms-flex-align: center; - align-items: center; - } -} -.footer-feedback__btn { - margin: 0px 0px 30px 0px; - -webkit-box-shadow: 0px 2px 12px rgba(9, 34, 57, 0.2); - box-shadow: 0px 2px 12px rgba(9, 34, 57, 0.2); -} -@media (min-width: 640px) { - .footer-feedback__btn { - margin: 0px 30px 0px 0px; - } -} -.footer-feedback__btn.btn-animate { - -webkit-animation: btn-animate 0.5s linear infinite; - animation: btn-animate 0.5s linear infinite; - background-size: 30px 30px; - background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.3) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.3) 50%, rgba(255, 255, 255, 0.3) 75%, transparent 75%, transparent); - background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.3) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.3) 50%, rgba(255, 255, 255, 0.3) 75%, transparent 75%, transparent); -} -.footer-feedback__privacy { - font-size: 14px; - line-height: 20px; - font-weight: 500; -} -@media (min-width: 640px) { - .footer-feedback__privacy { - max-width: 510px; - } -} -.footer-feedback__privacy a { - font-weight: 600; - text-decoration: underline; -} - -.footer-middle, -.footer-bottom { - position: relative; -} -.footer-middle::before, -.footer-bottom::before { - content: ""; - position: absolute; - top: 0; - left: 0; - width: 100%; - height: 100%; - background-color: rgba(3, 9, 15, 0.8); -} - -.footer-middle { - padding: 60px 0 185px; -} -@media (min-width: 1024px) { - .footer-middle { - padding: 60px 0; - } -} -.footer-middle__wrap { - position: relative; -} -@media (min-width: 1024px) { - .footer-middle__wrap { - display: -webkit-box; - display: -ms-flexbox; - display: flex; - -webkit-box-pack: justify; - -ms-flex-pack: justify; - justify-content: space-between; - margin: 0 -15px; - } -} - -@media (min-width: 1200px) { - .footer-questions { - padding-top: 30px; - border-top: 1px solid #FFFFFF; - } -} -.footer-questions__title { - color: #FFFFFF; - font-size: 16px; - line-height: 20px; - font-weight: 600; - margin-bottom: 20px; -} - -.footer__social { - margin-top: 40px; -} - -.footer-bottom { - padding: 24px 0; - border-top: 1px solid #9A9C9F; -} -@media (min-width: 1200px) { - .footer-bottom { - padding: 30px 0; - } -} -.footer-bottom__wrap { - position: relative; -} -@media (min-width: 640px) { - .footer-bottom__wrap { - display: -webkit-box; - display: -ms-flexbox; - display: flex; - -webkit-box-pack: justify; - -ms-flex-pack: justify; - justify-content: space-between; - } -} - -.policy-top { - background-color: #286699; - padding-bottom: 60px; -} - -.policy-cnt { - padding: 60px 0; -} -@media (min-width: 1200px) { - .policy-cnt { - padding: 100px 0; - } -} - -.policy__title { - max-width: 780px; - word-wrap: break-word; -} -.policy__inner { - max-width: 1030px; -} -.policy__inner ol { - counter-reset: my-counter; -} -.policy__inner ol li { - margin: 0; -} -.policy__inner ol li:not(:last-child) { - margin-bottom: 60px; -} -.policy__inner h2 { - position: relative; - padding-left: 42px; - margin: 0px 0px 24px 0px; - font-size: 32px; - line-height: 36px; - font-weight: 800; -} -@media (min-width: 1200px) { - .policy__inner h2 { - padding-left: 48px; - font-size: 36px; - line-height: 44px; - } -} -.policy__inner h2::before { - content: counter(my-counter) "."; - counter-increment: my-counter; - position: absolute; - top: 0; - left: 0; -} -.policy__inner p { - margin: 0; - color: #4B4E53; - font-size: 14px; - line-height: 20px; - font-weight: 500; -} -@media (min-width: 1200px) { - .policy__inner p { - font-size: 16px; - line-height: 24px; - } -} -.policy__inner p:not(:last-child) { - margin-bottom: 20px; -} - -.cookies { - position: fixed; - z-index: 150; - left: 0; - bottom: 0; - width: 100%; - background: #EDF7FF; - border-radius: 30px 30px 0px 0px; - -webkit-box-shadow: 0px -4px 28px rgba(14, 56, 94, 0.08), 0px -4px 16px rgba(14, 56, 94, 0.04); - box-shadow: 0px -4px 28px rgba(14, 56, 94, 0.08), 0px -4px 16px rgba(14, 56, 94, 0.04); - visibility: hidden; - opacity: 0; - -webkit-transition: 0.3s; - -o-transition: 0.3s; - transition: 0.3s; -} -@media (min-width: 480px) { - .cookies { - border-radius: 0px; - } -} -.cookies.active { - visibility: visible; - opacity: 1; -} -.cookies__wrap { - display: -webkit-box; - display: -ms-flexbox; - display: flex; - -ms-flex-wrap: wrap; - flex-wrap: wrap; - -webkit-box-align: center; - -ms-flex-align: center; - align-items: center; -} -@media (min-width: 480px) { - .cookies__wrap { - padding: 30px 0; - } -} -@media (min-width: 780px) { - .cookies__wrap { - -ms-flex-wrap: nowrap; - flex-wrap: nowrap; - } -} -.cookies__top { - display: -webkit-box; - display: -ms-flexbox; - display: flex; - -webkit-box-align: center; - -ms-flex-align: center; - align-items: center; - -webkit-box-flex: 1; - -ms-flex-positive: 1; - flex-grow: 1; - margin: 0 -20px 40px; - padding: 20px; - background-color: #42AAFF; - border-radius: 30px 30px 0px 0px; -} -@media (min-width: 480px) { - .cookies__top { - -webkit-box-flex: 0; - -ms-flex-positive: 0; - flex-grow: 0; - display: block; - margin: 0; - padding: 0; - background-color: transparent; - } -} -.cookies__img { - margin-right: 20px; -} -@media (min-width: 1200px) { - .cookies__img { - margin-right: 43px; - } -} -.cookies__img img { - max-width: 40px; -} -@media (min-width: 480px) { - .cookies__img img { - max-width: 60px; - } -} -.cookies__title { - color: #FFFFFF; - font-size: 36px; - line-height: 40px; - font-weight: 800; -} -@media (min-width: 480px) { - .cookies__title { - display: none; - } -} -.cookies__descr { - -webkit-box-flex: 1; - -ms-flex-positive: 1; - flex-grow: 1; - width: 100%; -} -@media (min-width: 480px) { - .cookies__descr { - width: calc(100% - 80px); - } -} -@media (min-width: 780px) { - .cookies__descr { - width: auto; - margin-right: 30px; - } -} -.cookies__buttons { - display: -webkit-box; - display: -ms-flexbox; - display: flex; - -webkit-box-align: center; - -ms-flex-align: center; - align-items: center; - width: 100%; - margin: 40px 0px 0px; -} -@media (min-width: 480px) { - .cookies__buttons { - margin: 40px 0px 0px 80px; - } -} -@media (min-width: 780px) { - .cookies__buttons { - width: auto; - margin: 0; - } -} -.cookies__btn { - -webkit-box-flex: 1; - -ms-flex-positive: 1; - flex-grow: 1; - padding: 12px 48px; - margin-right: 20px; -} -@media (min-width: 480px) { - .cookies__btn { - -webkit-box-flex: 0; - -ms-flex-positive: 0; - flex-grow: 0; - } -} -.cookies__link { - color: #40454A; - font-size: 16px; - line-height: 22px; - font-weight: 700; - -webkit-text-decoration-line: underline; - text-decoration-line: underline; -} -@media (min-width: 1200px) { - .cookies__link:hover { - color: #42AAFF; - -webkit-transition: 0.3s; - -o-transition: 0.3s; - transition: 0.3s; - } -} - -.page-cookies__title { - max-width: 460px; -} -.page-cookies__inner { - max-width: 1070px; -} -.page-cookies__inner p { - margin: 0; - color: #4B4E53; - font-size: 14px; - line-height: 20px; - font-weight: 500; -} -@media (min-width: 1200px) { - .page-cookies__inner p { - font-size: 16px; - line-height: 24px; - } -} -.page-cookies__inner p:not(:last-child) { - margin-bottom: 24px; -} -.page-cookies__inner ul { - margin: 0; -} -.page-cookies__inner ul:not(:last-child) { - margin-bottom: 24px; -} -.page-cookies__inner ul li { - position: relative; - margin: 0; - padding-left: 38px; - color: #4B4E53; - font-weight: 500; - font-size: 14px; - line-height: 20px; -} -@media (min-width: 1200px) { - .page-cookies__inner ul li { - padding-left: 58px; - font-size: 16px; - line-height: 24px; - } -} -.page-cookies__inner ul li::before { - content: ""; - position: absolute; - top: 7px; - left: 20px; - width: 6px; - height: 6px; - border-radius: 50%; - background-color: #42AAFF; -} -@media (min-width: 1200px) { - .page-cookies__inner ul li::before { - top: 9px; - left: 40px; - } -} -.page-cookies__inner ul li:not(:last-child) { - margin-bottom: 8px; -} -@media (min-width: 1200px) { - .page-cookies__inner ul li:not(:last-child) { - margin-bottom: 4px; - } -} -.page-cookies__btn { - width: 100%; - margin-top: 40px; -} -@media (min-width: 480px) { - .page-cookies__btn { - width: auto; - } -} -@media (min-width: 1200px) { - .page-cookies__btn { - margin-top: 60px; - } -} - -.page-cookies-top { - padding-bottom: 60px; - background-color: #286699; -} - -.page-cookies-cnt { - padding: 60px 0 60px; -} -@media (min-width: 1200px) { - .page-cookies-cnt { - padding: 60px 0 100px; - } -} - -.favorites__descr { - max-width: 400px; - color: #FFFFFF; - font-size: 16px; - line-height: 22px; - font-weight: 500; - margin-top: 12px; -} -.favorites__sorts { - display: -webkit-box; - display: -ms-flexbox; - display: flex; - -ms-flex-wrap: wrap; - flex-wrap: wrap; - margin: 0 -5px 40px; -} -@media (min-width: 780px) { - .favorites__sorts { - -ms-flex-wrap: nowrap; - flex-wrap: nowrap; - margin: 0 0 40px; - } -} -@media (min-width: 1200px) { - .favorites__sorts { - margin: 0 0 60px; - } -} -.favorites__sort-group { - width: calc(100% - 10px); - margin: 0 5px; -} -@media (min-width: 480px) { - .favorites__sort-group { - width: calc(50% - 10px); - } -} -@media (min-width: 780px) { - .favorites__sort-group { - width: 200px; - margin: 0; - } -} -.favorites__sort-group:not(:last-child) { - margin: 0px 5px 10px; -} -@media (min-width: 780px) { - .favorites__sort-group:not(:last-child) { - margin: 0px 10px 0px 0px; - } -} -@media (min-width: 780px) { - .favorites__sort-group.sort-group--wide { - width: 294px; - } -} -.favorites__grid { - display: grid; - grid-gap: 20px; - grid-template-columns: repeat(1, 1fr); -} -@media (min-width: 540px) { - .favorites__grid { - grid-template-columns: repeat(2, 1fr); - } -} -@media (min-width: 920px) { - .favorites__grid { - grid-template-columns: repeat(3, 1fr); - } -} -@media (min-width: 1200px) { - .favorites__grid { - grid-template-columns: repeat(4, 1fr); - } -} -.favorites__items { - display: grid; - grid-gap: 20px; - grid-template-columns: repeat(1, 1fr); -} -@media (min-width: 640px) { - .favorites__items { - grid-template-columns: repeat(2, 1fr); - } -} -@media (min-width: 1024px) { - .favorites__items { - grid-template-columns: repeat(3, 1fr); - } -} - -.favorites-top { - background-color: #286699; - padding-bottom: 60px; -} -.favorites-top__link { - font-size: 32px; - line-height: 36px; - font-weight: 800; - -webkit-text-decoration-line: underline; - text-decoration-line: underline; - color: rgba(255, 255, 255, 0.6); - margin-top: 8px; -} -@media (min-width: 1200px) { - .favorites-top__link { - font-size: 48px; - line-height: 52px; - margin-top: 0; - } -} - -.favorites-cnt { - padding: 60px 0; -} -@media (min-width: 1200px) { - .favorites-cnt { - padding: 100px 0; - } -} - -.favorites-item { - display: -webkit-box; - display: -ms-flexbox; - display: flex; - -webkit-box-align: center; - -ms-flex-align: center; - align-items: center; - background-color: #EDF7FF; - border-radius: 10px; - padding: 25px 20px; -} -@media (min-width: 1200px) { - .favorites-item { - padding: 25px 20px; - } -} -.favorites-item__img { - -ms-flex-negative: 0; - flex-shrink: 0; - width: 80px; - margin-right: 20px; -} -.favorites-item__img img { - max-width: 100%; -} -.favorites-item__descr { - font-size: 14px; - line-height: 20px; - font-weight: 500; -} -.favorites-item__descr a { - color: #42AAFF; - font-weight: 600; -} -.favorites-item__descr img { - display: inline-block; - margin-bottom: -5px; -} - -.page-map__wrap { - overflow: hidden; -} -.page-map__map { - height: 700px; - background-color: #ccc; -} -.page-map__map [class*=copyrights-pane], -.page-map__map [class*=ground-pane] { - -webkit-filter: grayscale(1); - filter: grayscale(1); -} -.page-map__map [class*=image-with-content-content] { - width: 100% !important; -} -.page-map__inner { - position: relative; -} - -.page-map-bar { - position: absolute; - bottom: 0; - left: 0; - right: 0; - -webkit-transform: translateY(calc(100% - 70px)); - -ms-transform: translateY(calc(100% - 70px)); - transform: translateY(calc(100% - 70px)); - -webkit-box-shadow: 0px 0px 28px rgba(14, 56, 94, 0.08), 0px 0px 16px rgba(14, 56, 94, 0.08); - box-shadow: 0px 0px 28px rgba(14, 56, 94, 0.08), 0px 0px 16px rgba(14, 56, 94, 0.08); - border-radius: 10px 10px 0px 0px; - background-color: #FFFFFF; - -webkit-transition: 0.3s; - -o-transition: 0.3s; - transition: 0.3s; -} -@media (min-width: 480px) { - .page-map-bar { - left: 0; - right: auto; - width: 350px; - } -} -.page-map-bar.active { - -webkit-transform: translateY(0); - -ms-transform: translateY(0); - transform: translateY(0); -} -.page-map-bar.active .page-map-bar__close svg { - -webkit-transform: rotate(0); - -ms-transform: rotate(0); - transform: rotate(0); -} -.page-map-bar__top { - position: relative; - font-size: 20px; - line-height: 30px; - font-weight: 700; - padding: 20px 60px 20px 20px; - background-color: #EDF7FF; -} -.page-map-bar__close { - position: absolute; - top: 0; - right: 0; - display: -webkit-box; - display: -ms-flexbox; - display: flex; - -webkit-box-align: center; - -ms-flex-align: center; - align-items: center; - -webkit-box-pack: center; - -ms-flex-pack: center; - justify-content: center; - width: 60px; - height: 70px; -} -.page-map-bar__close svg { - fill: #42AAFF; - -webkit-transform: rotate(45deg); - -ms-transform: rotate(45deg); - transform: rotate(45deg); - -webkit-transition: 0.3s; - -o-transition: 0.3s; - transition: 0.3s; -} -.page-map-bar__list { - display: -webkit-box; - display: -ms-flexbox; - display: flex; - -webkit-box-orient: vertical; - -webkit-box-direction: normal; - -ms-flex-direction: column; - flex-direction: column; -} -.page-map-bar__item { - position: relative; - color: #4B4E53; - font-size: 14px; - line-height: 20px; - font-weight: 500; - padding: 12px 45px 12px 20px; - cursor: pointer; - -webkit-transition: 0.3s; - -o-transition: 0.3s; - transition: 0.3s; -} -.page-map-bar__item::after { - content: ""; - position: absolute; - top: 50%; - right: 23px; - -webkit-transform: translateY(-50%); - -ms-transform: translateY(-50%); - transform: translateY(-50%); - width: 12px; - height: 7px; - background-repeat: no-repeat; - background-image: url("data:image/svg+xml,%3Csvg width='12' height='7' viewBox='0 0 12 7' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M11 1L6 6L1 1' stroke='%2342AAFF' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E"); - -webkit-transition: 0.3s; - -o-transition: 0.3s; - transition: 0.3s; -} -.page-map-bar__item:not(:last-child) { - border-bottom: 1px solid #E6E7E7; -} -@media (min-width: 1200px) { - .page-map-bar__item:hover { - color: #FFFFFF; - background-color: #42AAFF; - } - .page-map-bar__item:hover::after { - background-image: url("data:image/svg+xml,%3Csvg width='12' height='7' viewBox='0 0 12 7' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M11 1L6 6L1 1' stroke='%23FFFFFF' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E"); - } -} -.page-map-bar__item.active { - -webkit-box-ordinal-group: 0; - -ms-flex-order: -1; - order: -1; - color: #FFFFFF; - background-color: #42AAFF; -} -@media (min-width: 780px) { - .page-map-bar__item.active { - -webkit-box-ordinal-group: 1; - -ms-flex-order: 0; - order: 0; - } -} -.page-map-bar__item.active::after { - background-image: url("data:image/svg+xml,%3Csvg width='12' height='7' viewBox='0 0 12 7' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M11 1L6 6L1 1' stroke='%23FFFFFF' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E"); - -webkit-transform: translateY(-50%) rotate(-90deg); - -ms-transform: translateY(-50%) rotate(-90deg); - transform: translateY(-50%) rotate(-90deg); -} -.page-map-bar .card-news { - position: absolute; - bottom: 0; - left: 20px; - right: 20px; - height: 384px; - border-radius: 10px 10px 0 0; - -webkit-transform: translateY(calc(100% + 25px)); - -ms-transform: translateY(calc(100% + 25px)); - transform: translateY(calc(100% + 25px)); - -webkit-transition: 0.3s; - -o-transition: 0.3s; - transition: 0.3s; -} -@media (min-width: 780px) { - .page-map-bar .card-news { - left: calc(100% + 10px); - right: auto; - width: 360px; - } -} -.page-map-bar .card-news.active { - -webkit-transform: translateY(0); - -ms-transform: translateY(0); - transform: translateY(0); - z-index: 1; -} -.page-map-bar .card-news__top { - min-height: 150px; -} -.page-map-bar .card-news__date span { - font-weight: 800; - font-size: 24px; - line-height: 28px; - -webkit-line-clamp: 2; -} -.page-map-bar .card-news__date span:nth-child(1) { - margin-bottom: 0; -} -.page-map-bar .card-news__date span:nth-child(n+2) { - display: none; -} -.page-map-bar .card-news__descr { - -webkit-line-clamp: 6; -} \ No newline at end of file diff --git a/public/css/style_main.css b/public/css/style_main.css new file mode 100644 index 0000000..bc54479 --- /dev/null +++ b/public/css/style_main.css @@ -0,0 +1,6432 @@ +/*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */ +/* Document + ========================================================================== */ +/** + * 1. Correct the line height in all browsers. + * 2. Prevent adjustments of font size after orientation changes in iOS. + */ +html { + line-height: 1.15; /* 1 */ + -webkit-text-size-adjust: 100%; /* 2 */ +} + +/* Sections + ========================================================================== */ +/** + * Remove the margin in all browsers. + */ +body { + margin: 0; +} + +/** + * Render the `main` element consistently in IE. + */ +main { + display: block; +} + +/** + * Correct the font size and margin on `h1` elements within `section` and + * `article` contexts in Chrome, Firefox, and Safari. + */ +h1 { + font-size: 2em; + margin: 0.67em 0; +} + +/* Grouping content + ========================================================================== */ +/** + * 1. Add the correct box sizing in Firefox. + * 2. Show the overflow in Edge and IE. + */ +hr { + -webkit-box-sizing: content-box; + box-sizing: content-box; /* 1 */ + height: 0; /* 1 */ + overflow: visible; /* 2 */ +} + +/** + * 1. Correct the inheritance and scaling of font size in all browsers. + * 2. Correct the odd `em` font sizing in all browsers. + */ +pre { + font-family: monospace, monospace; /* 1 */ + font-size: 1em; /* 2 */ +} + +/* Text-level semantics + ========================================================================== */ +/** + * Remove the gray background on active links in IE 10. + */ +a { + background-color: transparent; +} + +/** + * 1. Remove the bottom border in Chrome 57- + * 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari. + */ +abbr[title] { + border-bottom: none; /* 1 */ + text-decoration: underline; /* 2 */ + -webkit-text-decoration: underline dotted; + text-decoration: underline dotted; /* 2 */ +} + +/** + * Add the correct font weight in Chrome, Edge, and Safari. + */ +b, +strong { + font-weight: bolder; +} + +/** + * 1. Correct the inheritance and scaling of font size in all browsers. + * 2. Correct the odd `em` font sizing in all browsers. + */ +code, +kbd, +samp { + font-family: monospace, monospace; /* 1 */ + font-size: 1em; /* 2 */ +} + +/** + * Add the correct font size in all browsers. + */ +small { + font-size: 80%; +} + +/** + * Prevent `sub` and `sup` elements from affecting the line height in + * all browsers. + */ +sub, +sup { + font-size: 75%; + line-height: 0; + position: relative; + vertical-align: baseline; +} + +sub { + bottom: -0.25em; +} + +sup { + top: -0.5em; +} + +/* Embedded content + ========================================================================== */ +/** + * Remove the border on images inside links in IE 10. + */ +img { + border-style: none; +} + +/* Forms + ========================================================================== */ +/** + * 1. Change the font styles in all browsers. + * 2. Remove the margin in Firefox and Safari. + */ +button, +input, +optgroup, +select, +textarea { + font-family: inherit; /* 1 */ + font-size: 100%; /* 1 */ + line-height: 1.15; /* 1 */ + margin: 0; /* 2 */ +} + +/** + * Show the overflow in IE. + * 1. Show the overflow in Edge. + */ +button, +input { /* 1 */ + overflow: visible; +} + +/** + * Remove the inheritance of text transform in Edge, Firefox, and IE. + * 1. Remove the inheritance of text transform in Firefox. + */ +button, +select { /* 1 */ + text-transform: none; +} + +/** + * Correct the inability to style clickable types in iOS and Safari. + */ +button, +[type=button], +[type=reset], +[type=submit] { + -webkit-appearance: button; +} + +/** + * Remove the inner border and padding in Firefox. + */ +button::-moz-focus-inner, +[type=button]::-moz-focus-inner, +[type=reset]::-moz-focus-inner, +[type=submit]::-moz-focus-inner { + border-style: none; + padding: 0; +} + +/** + * Restore the focus styles unset by the previous rule. + */ +button:-moz-focusring, +[type=button]:-moz-focusring, +[type=reset]:-moz-focusring, +[type=submit]:-moz-focusring { + outline: 1px dotted ButtonText; +} + +/** + * Correct the padding in Firefox. + */ +fieldset { + padding: 0.35em 0.75em 0.625em; +} + +/** + * 1. Correct the text wrapping in Edge and IE. + * 2. Correct the color inheritance from `fieldset` elements in IE. + * 3. Remove the padding so developers are not caught out when they zero out + * `fieldset` elements in all browsers. + */ +legend { + -webkit-box-sizing: border-box; + box-sizing: border-box; /* 1 */ + color: inherit; /* 2 */ + display: table; /* 1 */ + max-width: 100%; /* 1 */ + padding: 0; /* 3 */ + white-space: normal; /* 1 */ +} + +/** + * Add the correct vertical alignment in Chrome, Firefox, and Opera. + */ +progress { + vertical-align: baseline; +} + +/** + * Remove the default vertical scrollbar in IE 10+. + */ +textarea { + overflow: auto; +} + +/** + * 1. Add the correct box sizing in IE 10. + * 2. Remove the padding in IE 10. + */ +[type=checkbox], +[type=radio] { + -webkit-box-sizing: border-box; + box-sizing: border-box; /* 1 */ + padding: 0; /* 2 */ +} + +/** + * Correct the cursor style of increment and decrement buttons in Chrome. + */ +[type=number]::-webkit-inner-spin-button, +[type=number]::-webkit-outer-spin-button { + height: auto; +} + +/** + * 1. Correct the odd appearance in Chrome and Safari. + * 2. Correct the outline style in Safari. + */ +[type=search] { + -webkit-appearance: textfield; /* 1 */ + outline-offset: -2px; /* 2 */ +} + +/** + * Remove the inner padding in Chrome and Safari on macOS. + */ +[type=search]::-webkit-search-decoration { + -webkit-appearance: none; +} + +/** + * 1. Correct the inability to style clickable types in iOS and Safari. + * 2. Change font properties to `inherit` in Safari. + */ +::-webkit-file-upload-button { + -webkit-appearance: button; /* 1 */ + font: inherit; /* 2 */ +} + +/* Interactive + ========================================================================== */ +/* + * Add the correct display in Edge, IE 10+, and Firefox. + */ +details { + display: block; +} + +/* + * Add the correct display in all browsers. + */ +summary { + display: list-item; +} + +/* Misc + ========================================================================== */ +/** + * Add the correct display in IE 10+. + */ +template { + display: none; +} + +/** + * Add the correct display in IE 10. + */ +[hidden] { + display: none; +} + +@font-face { + font-family: "Manrope"; + src: url("../fonts/Manrope-ExtraLight.woff2") format("woff2"), url("../fonts/Manrope-ExtraLight.woff") format("woff"); + font-weight: 200; + font-style: normal; + font-display: swap; +} +@font-face { + font-family: "Manrope"; + src: url("../fonts/Manrope-Light.woff2") format("woff2"), url("../fonts/Manrope-Light.woff") format("woff"); + font-weight: 300; + font-style: normal; + font-display: swap; +} +@font-face { + font-family: "Manrope"; + src: url("../fonts/Manrope-Regular.woff2") format("woff2"), url("../fonts/Manrope-Regular.woff") format("woff"); + font-weight: 400; + font-style: normal; + font-display: swap; +} +@font-face { + font-family: "Manrope"; + src: url("../fonts/Manrope-Medium.woff2") format("woff2"), url("../fonts/Manrope-Medium.woff") format("woff"); + font-weight: 500; + font-style: normal; + font-display: swap; +} +@font-face { + font-family: "Manrope"; + src: url("../fonts/Manrope-SemiBold.woff2") format("woff2"), url("../fonts/Manrope-SemiBold.woff") format("woff"); + font-weight: 600; + font-style: normal; + font-display: swap; +} +@font-face { + font-family: "Manrope"; + src: url("../fonts/Manrope-Bold.woff2") format("woff2"), url("../fonts/Manrope-Bold.woff") format("woff"); + font-weight: 700; + font-style: normal; + font-display: swap; +} +@font-face { + font-family: "Manrope"; + src: url("../fonts/Manrope-ExtraBold.woff2") format("woff2"), url("../fonts/Manrope-ExtraBold.woff") format("woff"); + font-weight: 800; + font-style: normal; + font-display: swap; +} +html { + scrollbar-color: #42AAFF transparent; + scrollbar-width: thin; +} + +::-webkit-scrollbar { + width: 8px; + border-radius: 8px; + background-color: transparent; +} + +::-webkit-scrollbar-thumb { + background-color: #42aaff; + border-radius: 8px; +} +@media (min-width: 1200px) { + ::-webkit-scrollbar-thumb { + background-color: rgba(66, 170, 255, 0.5); + } +} + +@media (min-width: 1200px) { + ::-webkit-scrollbar-thumb:hover { + background-color: #42aaff; + } +} + +*, +*::before, +*::after { + -webkit-box-sizing: border-box; + box-sizing: border-box; + -webkit-tap-highlight-color: rgba(0, 0, 0, 0); +} + +a { + display: inline-block; + color: inherit; + text-decoration: none; +} + +h1, +h2, +h3, +h4, +h5, +h6, +p, +ul, +ol, +li { + margin: 0; + padding: 0; +} + +li { + list-style: none; +} + +body { + font-family: "Manrope", sans-serif; + color: #363A3F; + font-size: 16px; + font-weight: 400; + overflow-x: hidden; + padding-top: 80px; +} +@media (min-width: 1200px) { + body { + padding-top: 110px; + } +} +body::before { + content: ""; + position: fixed; + top: 0; + left: 0; + z-index: 100; + width: 100%; + height: 100%; + background-color: rgba(3, 9, 15, 0.6); + opacity: 0; + visibility: hidden; + -webkit-transition: 0.3s; + -o-transition: 0.3s; + transition: 0.3s; +} +body.overlay::before { + opacity: 1; + visibility: visible; +} + +img { + display: block; +} + +button { + padding: 0; + border: none; + color: inherit; + background-color: transparent; + cursor: pointer; +} + +.container { + max-width: 1256px; + padding: 0 20px; + margin: 0 auto; +} + +html, +body { + height: 100%; +} + +.wrapper { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -ms-flex-direction: column; + flex-direction: column; + min-height: 100%; + overflow-x: hidden; +} + +main { + -webkit-box-flex: 1; + -ms-flex: 1 1 auto; + flex: 1 1 auto; +} + +input::-webkit-input-placeholder, textarea::-webkit-input-placeholder { + -webkit-transition: 0.3s; + transition: 0.3s; +} + +input::-moz-placeholder, textarea::-moz-placeholder { + -moz-transition: 0.3s; + transition: 0.3s; +} + +input:-ms-input-placeholder, textarea:-ms-input-placeholder { + -ms-transition: 0.3s; + transition: 0.3s; +} + +input::-ms-input-placeholder, textarea::-ms-input-placeholder { + -ms-transition: 0.3s; + transition: 0.3s; +} + +input::placeholder, +textarea::placeholder { + -webkit-transition: 0.3s; + -o-transition: 0.3s; + transition: 0.3s; +} +input:focus::-webkit-input-placeholder, textarea:focus::-webkit-input-placeholder { + opacity: 0; +} +input:focus::-moz-placeholder, textarea:focus::-moz-placeholder { + opacity: 0; +} +input:focus:-ms-input-placeholder, textarea:focus:-ms-input-placeholder { + opacity: 0; +} +input:focus::-ms-input-placeholder, textarea:focus::-ms-input-placeholder { + opacity: 0; +} +input:focus::placeholder, +textarea:focus::placeholder { + opacity: 0; +} + +.visually-hidden { + position: absolute; + width: 1px; + height: 1px; + margin: -1px; + padding: 0; + overflow: hidden; + border: 0; + clip: rect(0 0 0 0); +} + +.title-main { + color: #FFFFFF; + font-size: 32px; + line-height: 36px; + font-weight: 800; +} +@media (min-width: 1200px) { + .title-main { + font-size: 48px; + line-height: 52px; + } +} +.title-main strong { + color: #42AAFF; +} + +.title { + font-size: 32px; + line-height: 36px; + font-weight: 800; +} +@media (min-width: 1200px) { + .title { + font-size: 36px; + line-height: 44px; + } +} + +.btn { + font-size: 16px; + line-height: 22px; + font-weight: 600; + text-align: center; + padding: 12px 38px; + border-radius: 10px; + -webkit-transition: 0.3s; + -o-transition: 0.3s; + transition: 0.3s; +} +.btn--main { + color: #FFFFFF; + background-color: #012060; + border: 2px solid #012060; + -webkit-box-shadow: 0px 2px 12px rgba(9, 34, 57, 0.2); + box-shadow: 0px 2px 12px rgba(9, 34, 57, 0.2); +} +@media (min-width: 1200px) { + .btn--main:hover { + background-color: #344D80; + border-color: #344D80; + } +} +@media (min-width: 1200px) { + .btn--main:active { + background-color: #011A4D; + border-color: #011A4D; + } +} +.btn--main span { + position: relative; + display: block; + padding-left: 30px; +} +.btn--main svg { + position: absolute; + top: 50%; + left: 0; + -webkit-transform: translateY(-50%); + -ms-transform: translateY(-50%); + transform: translateY(-50%); + fill: #FFFFFF; +} +.btn--white { + color: #012060; + background-color: #FFFFFF; + border: 2px solid #FFFFFF; +} +@media (min-width: 1200px) { + .btn--white:hover { + color: #FFFFFF; + background-color: #012060; + border-color: #012060; + } +} +@media (min-width: 1200px) { + .btn--white:active { + color: #FFFFFF; + background-color: #011A4D; + border-color: #011A4D; + } +} +.btn--bordered { + color: #012060; + background-color: transparent; + border: 2px solid #012060; +} +@media (min-width: 1200px) { + .btn--bordered:hover { + color: #FFFFFF; + background-color: #012060; + } +} +@media (min-width: 1200px) { + .btn--bordered:active { + color: #FFFFFF; + background-color: #011A4D; + border-color: #011A4D; + } +} +.btn:disabled { + opacity: 0.5; + cursor: auto; + pointer-events: none; +} + +.field { + display: block; +} +.field input, +.field textarea { + display: block; + width: 100%; + padding: 14px 19px; + border-radius: 10px; + border: 1px solid transparent; + outline: none; + color: #363A3F; + font-size: 14px; + line-height: 20px; + font-weight: 400; + background-color: #FFFFFF; +} +.field input::-webkit-input-placeholder, .field textarea::-webkit-input-placeholder { + color: #CDCECF; +} +.field input::-moz-placeholder, .field textarea::-moz-placeholder { + color: #CDCECF; +} +.field input:-ms-input-placeholder, .field textarea:-ms-input-placeholder { + color: #CDCECF; +} +.field input::-ms-input-placeholder, .field textarea::-ms-input-placeholder { + color: #CDCECF; +} +.field input::placeholder, +.field textarea::placeholder { + color: #CDCECF; +} +.field input:focus, .field input.no-error, +.field textarea:focus, +.field textarea.no-error { + border-color: #42AAFF; +} +.field input.error, +.field textarea.error { + border-color: #E9162F; +} +.field input { + height: 50px; +} +.field textarea { + resize: none; +} +.field span.error { + display: block; + margin-top: 4px; + font-weight: 500; + color: #E9162F; + font-size: 12px; + line-height: 18px; +} + +.spinner { + position: fixed; + top: 50%; + left: 50%; + z-index: 100; + display: block; + width: 50px; + height: 50px; + margin: -25px 0px 0px -25px; + border: 4px solid #edf7ff; + border-radius: 50%; + border-top-color: #42AAFF; + opacity: 0; + visibility: hidden; + -webkit-transition: 0.3s; + -o-transition: 0.3s; + transition: 0.3s; +} +.spinner.active { + opacity: 1; + visibility: visible; + -webkit-animation: spin 1s ease-in-out infinite; + animation: spin 1s ease-in-out infinite; +} + +@-webkit-keyframes spin { + to { + -webkit-transform: rotate(360deg); + transform: rotate(360deg); + } +} + +@keyframes spin { + to { + -webkit-transform: rotate(360deg); + transform: rotate(360deg); + } +} +.map { + height: 500px; + background-color: #ccc; +} +.map [class*=copyrights-pane], +.map [class*=ground-pane] { + -webkit-filter: grayscale(1); + filter: grayscale(1); +} +.map [class*=image-with-content-content] { + width: 100% !important; +} +.map .my-hint { + display: inline-block; + width: 240px; + padding: 20px; + background: #FFFFFF; + -webkit-box-shadow: 0px 2px 12px rgba(104, 107, 111, 0.32); + box-shadow: 0px 2px 12px rgba(104, 107, 111, 0.32); + border-radius: 10px; + color: #4B4E53; + font-size: 16px; + line-height: 20px; + font-weight: 600; + position: relative; + left: 30px; + -webkit-transform: translateY(-100%); + -ms-transform: translateY(-100%); + transform: translateY(-100%); +} + +.pages { + min-height: 100vh; + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-pack: center; + -ms-flex-pack: center; + justify-content: center; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + font-size: 16px; + line-height: 115%; + padding: 20px; + margin-top: -110px; +} +@media (min-width: 640px) { + .pages { + font-size: 20px; + } +} +.pages li { + margin: 5px; + color: #42AAFF; + position: relative; + list-style-type: decimal; + cursor: pointer; +} +.pages li:has(a) { + cursor: auto; +} +.pages a { + color: #42AAFF; +} + +.header { + position: fixed; + top: 0; + left: 0; + z-index: 50; + width: 100%; + background-color: #FFFFFF; + -webkit-box-shadow: 0px 2px 16px rgba(14, 56, 94, 0.08); + box-shadow: 0px 2px 16px rgba(14, 56, 94, 0.08); +} +@media (min-width: 1200px) { + .header.fixed .header__wrap { + min-height: 90px; + } +} +.header__wrap { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + -webkit-box-pack: justify; + -ms-flex-pack: justify; + justify-content: space-between; + min-height: 80px; + padding: 10px 0; + -webkit-transition: 0.2s; + -o-transition: 0.2s; + transition: 0.2s; +} +@media (min-width: 1200px) { + .header__wrap { + min-height: 110px; + } +} +.header__logo img { + max-width: 175px; + max-height: 50px; +} +@media (min-width: 1200px) { + .header__logo img { + max-height: 70px; + } +} +.header__nav { + margin: 0 30px; +} +.header__buttons { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; +} +.header__contacts { + display: none; +} +@media (min-width: 1200px) { + .header__contacts { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + margin-right: 30px; + } +} +.header__btn-phone { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + -webkit-box-pack: center; + -ms-flex-pack: center; + justify-content: center; + width: 40px; + height: 40px; + margin-right: 5px; +} +@media (min-width: 1200px) { + .header__btn-phone { + display: none; + } +} +.header__col { + position: relative; + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -ms-flex-direction: column; + flex-direction: column; + -webkit-box-align: start; + -ms-flex-align: start; + align-items: flex-start; + -webkit-box-pack: center; + -ms-flex-pack: center; + justify-content: center; + -ms-flex-negative: 0; + flex-shrink: 0; +} +.header__col:not(:last-child) { + margin-right: 26px; +} +.header__col:not(:last-child)::after { + content: ""; + position: absolute; + top: 0; + right: -14px; + bottom: 0; + width: 2px; + pointer-events: none; + background-color: #42AAFF; +} +.header__contact { + display: block; + font-size: 18px; + line-height: 24px; + font-weight: 500; + -webkit-transition: 0.3s; + -o-transition: 0.3s; + transition: 0.3s; +} +@media (min-width: 1200px) { + .header__contact:hover { + color: #42AAFF; + } +} +.header__btn-callback { + margin-top: 1px; + font-size: 14px; + line-height: 22px; + font-weight: 500; + border-bottom: 2px dotted #363A3F; + -webkit-transition: 0.3s; + -o-transition: 0.3s; + transition: 0.3s; +} +@media (min-width: 1200px) { + .header__btn-callback:hover { + color: #42AAFF; + border-color: #42AAFF; + } +} +.header__burger { + position: relative; + margin-right: -6px; + width: 40px; + height: 40px; + font-size: 0; + line-height: 0; + -webkit-transition: 0.3s; + -o-transition: 0.3s; + transition: 0.3s; +} +@media (min-width: 1200px) { + .header__burger { + margin-right: 0; + padding-left: 40px; + width: auto; + height: auto; + color: #363A3F; + font-size: 16px; + line-height: 40px; + font-weight: 600; + } +} +.header__burger svg { + position: absolute; + top: 50%; + left: 50%; + -webkit-transform: translate(-50%, -50%); + -ms-transform: translate(-50%, -50%); + transform: translate(-50%, -50%); + fill: #363A3F; + -webkit-transition: 0.3s; + -o-transition: 0.3s; + transition: 0.3s; +} +@media (min-width: 1200px) { + .header__burger svg { + left: 0; + -webkit-transform: translateY(-50%); + -ms-transform: translateY(-50%); + transform: translateY(-50%); + } +} +@media (min-width: 1200px) { + .header__burger:hover { + color: #42AAFF; + } +} +@media (min-width: 1200px) { + .header__burger:hover svg { + fill: #42AAFF; + } +} + +.menu { + position: fixed; + top: 0; + left: 0; + z-index: 100; + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-pack: end; + -ms-flex-pack: end; + justify-content: flex-end; + width: 100%; + height: 100%; + background-color: rgba(3, 9, 15, 0.6); + opacity: 0; + visibility: hidden; + -webkit-transition: 0.4s; + -o-transition: 0.4s; + transition: 0.4s; +} +.menu.active { + opacity: 1; + visibility: visible; +} +.menu.active .menu__wrap { + -webkit-transform: translate(0); + -ms-transform: translate(0); + transform: translate(0); +} +.menu__wrap { + position: relative; + max-width: 280px; + width: 100%; + padding: 111px 0 0 0px; + background-color: #4B4E53; + -webkit-transform: translate(100%); + -ms-transform: translate(100%); + transform: translate(100%); + -webkit-transition: 0.4s; + -o-transition: 0.4s; + transition: 0.4s; +} +@media (min-width: 1200px) { + .menu__wrap { + max-width: 530px; + padding: 126px 0 0 60px; + } +} +.menu__close { + position: absolute; + top: 44px; + right: 20px; + padding: 0 32px 0 0; + color: #FFFFFF; + font-size: 16px; + line-height: 22px; + font-weight: 600; + fill: #FFFFFF; + -webkit-transition: 0.3s; + -o-transition: 0.3s; + transition: 0.3s; +} +@media (min-width: 1200px) { + .menu__close { + left: 100px; + right: auto; + padding: 0 0 0 32px; + } +} +.menu__close svg { + position: absolute; + top: 1px; + right: 0; + -webkit-transition: 0.3s; + -o-transition: 0.3s; + transition: 0.3s; +} +@media (min-width: 1200px) { + .menu__close svg { + left: 0; + right: auto; + } +} +@media (min-width: 1200px) { + .menu__close:hover { + color: #42AAFF; + } +} +@media (min-width: 1200px) { + .menu__close:hover svg { + fill: #42AAFF; + } +} +.menu__inner { + overflow-y: auto; + height: 100%; + padding-bottom: 20px; +} +.menu__nav { + margin-bottom: 80px; +} +.menu__list { + padding-left: 40px; +} +@media (min-width: 1200px) { + .menu__list { + padding-left: 0; + } +} +.menu__item { + padding: 20px 20px 20px 40px; + border-bottom: 1px solid #A0A2A4; +} +.menu__link { + color: #FFFFFF; + font-size: 24px; + line-height: 33px; + font-weight: 600; + -webkit-transition: 0.3s; + -o-transition: 0.3s; + transition: 0.3s; +} +@media (min-width: 1200px) { + .menu__link:hover { + color: #42AAFF; + } +} +.menu__link-favorites { + position: relative; +} +.menu__link-favorites span { + position: absolute; + top: 50%; + left: -80px; + -webkit-transform: translateY(-50%); + -ms-transform: translateY(-50%); + transform: translateY(-50%); + min-width: 30px; + height: 40px; + padding: 9px 5px; + border-radius: 0px 10px 10px 0px; + font-size: 16px; + line-height: 22px; + font-weight: 600; + text-align: center; + color: #FFFFFF; + background-color: #42AAFF; + background-color: #42AAFF; +} +@media (min-width: 1200px) { + .menu__link-favorites span { + display: none; + } +} +.menu__contacts { + margin-bottom: 40px; + padding-left: 40px; +} +@media (min-width: 1200px) { + .menu__contacts { + padding-left: 0; + } +} +.menu__contact { + display: block; + width: -webkit-fit-content; + width: -moz-fit-content; + width: fit-content; + color: #FFFFFF; + font-size: 12px; + line-height: 18px; + font-weight: 700; +} +.menu__contact:not(:last-child) { + margin-bottom: 20px; +} +.menu__contact span { + display: block; + font-size: 16px; + line-height: 24px; + font-weight: 500; + -webkit-transition: 0.3s; + -o-transition: 0.3s; + transition: 0.3s; +} +@media (min-width: 1200px) { + .menu__contact:hover span { + color: #42AAFF; + } +} +.menu__social { + padding-left: 40px; +} +@media (min-width: 1200px) { + .menu__social { + padding-left: 0; + } +} + +.nav { + display: none; +} +@media (min-width: 1200px) { + .nav { + display: block; + } +} +.nav__list { + display: -webkit-box; + display: -ms-flexbox; + display: flex; +} +.nav__item { + -ms-flex-negative: 0; + flex-shrink: 0; +} +.nav__item:not(:last-child) { + margin-right: 20px; +} +.nav__link { + font-size: 16px; + line-height: 22px; + font-weight: 500; + -webkit-transition: 0.3s; + -o-transition: 0.3s; + transition: 0.3s; +} +@media (min-width: 1200px) { + .nav__link:hover { + color: #42AAFF; + } +} +.nav__link-favorites { + position: relative; + margin-right: 28px; +} +.nav__link-favorites span { + position: absolute; + top: -10px; + left: calc(100% + 4px); + min-width: 24px; + color: #FFFFFF; + font-size: 14px; + line-height: 24px; + font-weight: 600; + text-align: center; + border-radius: 15px; + padding: 0 5px; + background-color: #42AAFF; + -webkit-transition: 0.3s; + -o-transition: 0.3s; + transition: 0.3s; +} +@media (min-width: 1200px) { + .nav__link-favorites:hover span { + background-color: #3588CC; + } +} + +.social__title { + margin-bottom: 20px; + color: #363A3F; + font-size: 14px; + line-height: 20px; + font-weight: 600; +} +.social__list { + display: -webkit-box; + display: -ms-flexbox; + display: flex; +} +.social__item:not(:last-child) { + margin-right: 10px; +} +.social__link { + position: relative; + display: block; + width: 40px; + height: 40px; + border-radius: 50%; +} + +.hero { + position: relative; + overflow: hidden; +} +.hero::before { + content: ""; + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + background-color: rgba(3, 9, 15, 0.6); +} +.hero__bg { + position: absolute; + top: 0; + left: 0; + z-index: -1; + width: 100%; + height: 100%; + background-repeat: no-repeat; + background-size: cover; + background-position: center; +} +@media (min-width: 1200px) { + .hero__bg { + -webkit-animation: bg-scale 20s linear infinite alternate; + animation: bg-scale 20s linear infinite alternate; + } +} +.hero__wrap { + position: relative; + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -ms-flex-direction: column; + flex-direction: column; + -webkit-box-pack: center; + -ms-flex-pack: center; + justify-content: center; + padding: 80px 0; +} +@media (min-width: 1200px) { + .hero__wrap { + min-height: calc(100vh - 110px); + padding: 50px 0 105px; + } +} +.hero__cnt { + max-width: 830px; + margin-bottom: 40px; +} +@media (min-width: 1200px) { + .hero__cnt { + margin-bottom: 60px; + } +} +.hero__descr { + color: #FFFFFF; + font-size: 20px; + line-height: 24px; + font-weight: 500; + margin-top: 12px; +} +@media (min-width: 1200px) { + .hero__descr { + line-height: 30px; + } +} +.hero__links { + margin-bottom: 20px; + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -ms-flex-direction: column; + flex-direction: column; + -webkit-box-align: start; + -ms-flex-align: start; + align-items: flex-start; +} +@media (min-width: 1200px) { + .hero__links { + -webkit-box-orient: horizontal; + -webkit-box-direction: normal; + -ms-flex-direction: row; + flex-direction: row; + } +} +.hero__link { + position: relative; + padding-left: 12px; + color: #FFFFFF; + font-size: 14px; + line-height: 20px; + font-weight: 700; + -webkit-transition: 0.3s; + -o-transition: 0.3s; + transition: 0.3s; +} +@media (min-width: 1200px) { + .hero__link { + padding-left: 0; + } +} +.hero__link::before { + content: ""; + position: absolute; + top: 8px; + left: 0; + width: 4px; + height: 4px; + border-radius: 50%; + background-color: #FFFFFF; +} +@media (min-width: 1200px) { + .hero__link::before { + display: none; + } +} +.hero__link:not(:last-child) { + margin: 0px 0px 10px 0px; +} +@media (min-width: 1200px) { + .hero__link:not(:last-child) { + margin: 0px 41px 0px 0px; + } +} +@media (min-width: 1200px) { + .hero__link:not(:last-child)::after { + content: ""; + position: absolute; + top: 0; + right: -20px; + bottom: 0; + width: 1px; + background-color: #FFFFFF; + pointer-events: none; + } +} +@media (min-width: 1200px) { + .hero__link:hover { + color: #42AAFF; + } +} +.hero__link.active { + color: #42AAFF; +} +.hero__btn { + display: none; +} +@media (min-width: 1200px) { + .hero__btn { + display: block; + position: absolute; + bottom: 25px; + left: 50%; + -webkit-transform: translateX(-50%); + -ms-transform: translateX(-50%); + transform: translateX(-50%); + width: 20px; + height: 36px; + border: 1px solid #FFFFFF; + border-radius: 60px; + } +} +@media (min-width: 1200px) { + .hero__btn::before { + content: ""; + width: 5px; + height: 5px; + position: absolute; + top: 5px; + left: 50%; + -webkit-transform: translateX(-50%); + -ms-transform: translateX(-50%); + transform: translateX(-50%); + background-color: #FFFFFF; + border-radius: 50%; + opacity: 1; + -webkit-animation: wheel 2s infinite; + animation: wheel 2s infinite; + } +} +.hero .breadcrumbs { + display: none; +} +.hero--modified1 .breadcrumbs, .hero--modified2 .breadcrumbs { + display: block; +} +.hero--modified1 .hero__bg, .hero--modified2 .hero__bg { + -webkit-animation: none; + animation: none; +} +.hero--modified1 .hero__wrap, .hero--modified2 .hero__wrap { + min-height: 0; + display: block; + padding: 0 0 80px; +} +@media (min-width: 1200px) { + .hero--modified1 .hero__wrap, .hero--modified2 .hero__wrap { + padding: 0 0 160px; + } +} +.hero--modified1 .hero__btn, .hero--modified2 .hero__btn { + display: none; +} +.hero--modified1 .hero__cnt { + max-width: 720px; +} +.hero--modified2 .hero__descr, +.hero--modified2 .hero__links { + display: none; +} +.hero--modified2 .hero-search__btn.btn--white { + display: none; +} + +@-webkit-keyframes wheel { + 100% { + opacity: 0; + top: 24px; + } +} + +@keyframes wheel { + 100% { + opacity: 0; + top: 24px; + } +} +@-webkit-keyframes bg-scale { + 0% { + -webkit-transform: scale(1); + transform: scale(1); + } + 100% { + -webkit-transform: scale(1.2); + transform: scale(1.2); + } +} +@keyframes bg-scale { + 0% { + -webkit-transform: scale(1); + transform: scale(1); + } + 100% { + -webkit-transform: scale(1.2); + transform: scale(1.2); + } +} +.hero-search__control { + display: grid; + grid-template-columns: repeat(1, 1fr); + grid-gap: 10px; + margin-bottom: 10px; +} +@media (min-width: 640px) { + .hero-search__control { + grid-template-columns: repeat(2, 1fr); + margin-bottom: 40px; + } +} +@media (min-width: 920px) { + .hero-search__control { + grid-template-columns: repeat(3, 1fr); + } +} +@media (min-width: 1200px) { + .hero-search__control { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + grid-gap: 0; + } +} +.hero-search__bottom { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -ms-flex-wrap: wrap; + flex-wrap: wrap; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + -webkit-box-pack: justify; + -ms-flex-pack: justify; + justify-content: space-between; +} +@media (min-width: 780px) { + .hero-search__bottom { + -ms-flex-wrap: nowrap; + flex-wrap: nowrap; + } +} +.hero-search__field { + width: 100%; + position: relative; + margin: 0px 0px 40px 0px; +} +@media (min-width: 640px) { + .hero-search__field { + margin: 0px 0px 10px 0px; + } +} +@media (min-width: 780px) { + .hero-search__field { + max-width: 380px; + margin: 0px 10px 0px 0px; + } +} +.hero-search__field input { + display: block; + width: 100%; + height: 50px; + color: #363A3F; + font-size: 14px; + line-height: 20px; + font-weight: 400; + padding: 15px 64px 15px 20px; + border-radius: 10px; + border: none; + background-color: #FFFFFF; +} +.hero-search__field input::-webkit-input-placeholder { + color: #CDCECF; +} +.hero-search__field input::-moz-placeholder { + color: #CDCECF; +} +.hero-search__field input:-ms-input-placeholder { + color: #CDCECF; +} +.hero-search__field input::-ms-input-placeholder { + color: #CDCECF; +} +.hero-search__field input::placeholder { + color: #CDCECF; +} +.hero-search__field button { + position: absolute; + top: 0; + right: 0; + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + -webkit-box-pack: center; + -ms-flex-pack: center; + justify-content: center; + width: 64px; + height: 50px; +} +.hero-search__buttons { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -ms-flex-direction: column; + flex-direction: column; + width: 100%; +} +@media (min-width: 640px) { + .hero-search__buttons { + width: auto; + -webkit-box-orient: horizontal; + -webkit-box-direction: normal; + -ms-flex-direction: row; + flex-direction: row; + } +} +.hero-search__btn { + white-space: nowrap; +} +.hero-search__btn:not(:last-child) { + margin: 0px 0px 10px 0px; +} +@media (min-width: 640px) { + .hero-search__btn:not(:last-child) { + margin: 0px 10px 0px 0px; + } +} + +.hero-filter { + position: relative; +} +@media (min-width: 1200px) { + .hero-filter:not(:last-child) { + border-right: 1px solid #E6E7E7; + } +} +.hero-filter__current { + position: relative; + color: #686B6F; + font-size: 14px; + line-height: 22px; + font-weight: 400; + padding: 14px 40px 14px 20px; + background-color: #FFFFFF; + border-radius: 10px; + cursor: pointer; + -o-text-overflow: ellipsis; + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; +} +@media (min-width: 1200px) { + .hero-filter__current { + border-radius: 0; + font-size: 16px; + padding: 19px 40px 19px 20px; + } +} +.hero-filter__current::after { + content: ""; + position: absolute; + top: 50%; + right: 20px; + -webkit-transform: translateY(-50%) rotate(-90deg); + -ms-transform: translateY(-50%) rotate(-90deg); + transform: translateY(-50%) rotate(-90deg); + width: 13px; + height: 7px; + background-repeat: no-repeat; + background-image: url("data:image/svg+xml,%3Csvg width='13' height='7' viewBox='0 0 13 7' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M11.333 1L6.33301 6L1.33301 1' stroke='%2342AAFF' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E"); + -webkit-transition: 0.3s; + -o-transition: 0.3s; + transition: 0.3s; +} +.hero-filter__dropdown { + position: absolute; + top: calc(100% + 30px); + left: 0; + right: 0; + z-index: 5; + padding: 10px 12px 10px 20px; + border-radius: 10px; + background-color: #FFFFFF; + -webkit-box-shadow: 0px 0px 12px rgba(14, 56, 94, 0.4), 0px 0px 40px rgba(14, 56, 94, 0.08); + box-shadow: 0px 0px 12px rgba(14, 56, 94, 0.4), 0px 0px 40px rgba(14, 56, 94, 0.08); + opacity: 0; + visibility: hidden; + -webkit-transition: 0.3s; + -o-transition: 0.3s; + transition: 0.3s; +} +@media (min-width: 1200px) { + .hero-filter__dropdown { + right: auto; + } +} +.hero-filter__list { + max-height: 130px; + height: 100%; + overflow-y: auto; + padding: 10px 10px 10px 0; + scrollbar-color: #42AAFF transparent; + scrollbar-width: thin; +} +.hero-filter__list::-webkit-scrollbar { + background-color: #E6E7E7; +} +.hero-filter__list::-webkit-scrollbar-thumb { + background-color: #42aaff; +} +.hero-filter__item { + color: #4B4E53; + font-size: 14px; + line-height: 20px; + font-weight: 500; + cursor: pointer; +} +.hero-filter__item:not(:last-child) { + margin-bottom: 10px; +} +.hero-filter__fields { + display: -webkit-box; + display: -ms-flexbox; + display: flex; +} +.hero-filter__field { + width: 50%; +} +.hero-filter__field span { + display: block; + color: #4B4E53; + font-size: 14px; + line-height: 20px; + font-weight: 500; + margin-bottom: 8px; +} +.hero-filter__field input { + display: block; + width: 100%; + color: #363A3F; + font-size: 14px; + line-height: 20px; + font-weight: 500; + border: 1px solid #CFD1D2; + border-radius: 10px; + padding: 9px; + -webkit-transition: 0.3s; + -o-transition: 0.3s; + transition: 0.3s; +} +.hero-filter__field input::-webkit-input-placeholder { + color: #CDCECF; +} +.hero-filter__field input::-moz-placeholder { + color: #CDCECF; +} +.hero-filter__field input:-ms-input-placeholder { + color: #CDCECF; +} +.hero-filter__field input::-ms-input-placeholder { + color: #CDCECF; +} +.hero-filter__field input::placeholder { + color: #CDCECF; +} +.hero-filter__field input:focus { + border-color: #42AAFF; + background-color: #EDF7FF; +} +.hero-filter__field:not(:last-child) { + margin-right: 10px; +} +.hero-filter__reset { + position: relative; + display: none; + color: #363A3F; + font-size: 14px; + line-height: 20px; + font-weight: 600; + padding-left: 18px; + margin: 16px 0px 0px auto; +} +.hero-filter__reset::before { + content: ""; + position: absolute; + top: 4px; + left: 0; + width: 12px; + height: 12px; + background-repeat: no-repeat; + background-image: url("data:image/svg+xml,%3Csvg width='12' height='12' viewBox='0 0 12 12' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M11.2501 0.757943C10.9251 0.432943 10.4001 0.432943 10.0751 0.757943L6.0001 4.82461L1.9251 0.749609C1.6001 0.424609 1.0751 0.424609 0.750098 0.749609C0.425098 1.07461 0.425098 1.59961 0.750098 1.92461L4.8251 5.99961L0.750098 10.0746C0.425098 10.3996 0.425098 10.9246 0.750098 11.2496C1.0751 11.5746 1.6001 11.5746 1.9251 11.2496L6.0001 7.17461L10.0751 11.2496C10.4001 11.5746 10.9251 11.5746 11.2501 11.2496C11.5751 10.9246 11.5751 10.3996 11.2501 10.0746L7.1751 5.99961L11.2501 1.92461C11.5668 1.60794 11.5668 1.07461 11.2501 0.757943Z' fill='%23363A3F'/%3E%3C/svg%3E%0A"); +} +.hero-filter__reset.active { + display: block; +} +.hero-filter.active .hero-filter__current::after { + -webkit-transform: translateY(-50%) rotate(-180deg); + -ms-transform: translateY(-50%) rotate(-180deg); + transform: translateY(-50%) rotate(-180deg); +} +.hero-filter.active .hero-filter__dropdown { + top: calc(100% + 10px); + opacity: 1; + visibility: visible; +} +@media (min-width: 1200px) { + .hero-filter--modified1 { + width: 211px; + } +} +@media (min-width: 1200px) { + .hero-filter--modified1 .hero-filter__current { + border-radius: 10px 0px 0px 10px; + } +} +@media (min-width: 1200px) { + .hero-filter--modified1 .hero-filter__dropdown { + width: 269px; + } +} +@media (min-width: 1200px) { + .hero-filter--modified2 { + width: 303px; + } +} +@media (min-width: 1200px) { + .hero-filter--modified2 .hero-filter__dropdown { + width: 306px; + } +} +@media (min-width: 1200px) { + .hero-filter--modified3 { + width: 281px; + } +} +@media (min-width: 1200px) { + .hero-filter--modified3 .hero-filter__dropdown { + width: 260px; + } +} +@media (min-width: 1200px) { + .hero-filter--modified4 { + width: 202px; + } +} +.hero-filter--modified4 .hero-filter__dropdown { + padding: 20px; +} +@media (min-width: 1200px) { + .hero-filter--modified4 .hero-filter__dropdown { + width: 290px; + } +} +@media (min-width: 1200px) { + .hero-filter--modified5 { + width: 219px; + } +} +@media (min-width: 1200px) { + .hero-filter--modified5 .hero-filter__current { + border-radius: 0px 10px 10px 0px; + } +} +.hero-filter--modified5 .hero-filter__dropdown { + padding: 20px; +} +@media (min-width: 1200px) { + .hero-filter--modified5 .hero-filter__dropdown { + left: auto; + right: 0; + width: 330px; + } +} + +.slider { + padding: 60px 0; +} +@media (min-width: 1200px) { + .slider { + padding: 100px 0; + } +} +.slider__wrap { + position: relative; +} +.slider__wrap .swiper-pagination { + position: static; + bottom: 0; +} +.slider__wrap .swiper-pagination .swiper-pagination-bullet { + margin: 0 5px; +} +.slider__wrap .swiper-pagination-bullet { + width: 30px; + height: 4px; + margin: 0 5px; + border-radius: 5px; + background-color: #F2F2F3; + opacity: 1; + -webkit-transition: 0.3s; + -o-transition: 0.3s; + transition: 0.3s; +} +@media (min-width: 1200px) { + .slider__wrap .swiper-pagination-bullet { + width: 40px; + } +} +@media (min-width: 1200px) { + .slider__wrap .swiper-pagination-bullet:hover { + background-color: #42AAFF; + } +} +.slider__wrap .swiper-pagination-bullet-active { + background-color: #42AAFF; +} +.slider__top { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -ms-flex-direction: column; + flex-direction: column; +} +@media (min-width: 1200px) { + .slider__top { + -webkit-box-orient: horizontal; + -webkit-box-direction: normal; + -ms-flex-direction: row; + flex-direction: row; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + -webkit-box-pack: justify; + -ms-flex-pack: justify; + justify-content: space-between; + } +} +@media (min-width: 1200px) { + .slider__title { + margin: 0px 30px 0px 0px; + } +} +.slider__more { + margin: 16px 0 0 0; + color: #4B4E53; + font-size: 16px; + line-height: 22px; + font-weight: 500; + white-space: nowrap; + border-bottom: 1px solid #42AAFF; + -webkit-transition: 0.3s; + -o-transition: 0.3s; + transition: 0.3s; +} +@media (min-width: 1200px) { + .slider__more { + margin: 0 30px 10px auto; + } +} +@media (min-width: 1200px) { + .slider__more:hover { + color: #42AAFF; + } +} +.slider__control { + display: none; +} +@media (min-width: 1200px) { + .slider__control { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + } +} +.slider__control .swiper-button-prev, +.slider__control .swiper-button-next { + position: static; + width: 40px; + height: 40px; + border-radius: 10px; + border: 1px solid #012060; + margin: 0; + -webkit-transition: 0.3s; + -o-transition: 0.3s; + transition: 0.3s; +} +.slider__control .swiper-button-prev:after, +.slider__control .swiper-button-next:after { + display: none; +} +.slider__control .swiper-button-prev svg, +.slider__control .swiper-button-next svg { + stroke: #012060; + -webkit-transition: 0.3s; + -o-transition: 0.3s; + transition: 0.3s; +} +@media (min-width: 1200px) { + .slider__control .swiper-button-prev:hover, + .slider__control .swiper-button-next:hover { + background-color: #012060; + } +} +@media (min-width: 1200px) { + .slider__control .swiper-button-prev:hover svg, + .slider__control .swiper-button-next:hover svg { + stroke: #FFFFFF; + } +} +.slider__control .swiper-button-prev { + margin-right: 10px; +} +.slider__control .swiper-button-next svg { + -webkit-transform: rotate(180deg); + -ms-transform: rotate(180deg); + transform: rotate(180deg); +} +.slider__swiper { + padding: 40px 0 45px; +} +@media (min-width: 1200px) { + .slider__swiper { + padding: 60px 0 54px; + } +} +.slider__swiper .swiper-slide { + height: auto; +} + +.benefits { + background-color: #EDF7FF; + padding: 60px 0 80px; +} +@media (min-width: 1200px) { + .benefits { + padding: 60px 0 125px; + } +} +.benefits__title { + margin-bottom: 40px; +} +@media (min-width: 1200px) { + .benefits__title { + margin-bottom: 80px; + } +} +.benefits__items { + display: grid; + grid-template-columns: repeat(1, 1fr); + grid-gap: 60px; +} +@media (min-width: 1024px) { + .benefits__items { + grid-template-columns: repeat(3, 1fr); + grid-gap: 30px; + } +} +@media (min-width: 1200px) { + .benefits__items { + grid-gap: 50px; + } +} + +.benefits-item__top { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + margin-bottom: 20px; +} +.benefits-item__img { + -ms-flex-negative: 0; + flex-shrink: 0; + width: 50px; + margin-right: 20px; +} +@media (min-width: 1200px) { + .benefits-item__img { + margin-right: 30px; + } +} +.benefits-item__img img { + max-width: 100%; +} +.benefits-item__title { + max-width: 260px; + color: #363A3F; + font-size: 18px; + line-height: 24px; + font-weight: 600; +} +.benefits-item__descr { + padding: 20px 22px 0 0; + border-top: 1px solid #8ECCFF; + color: #686B6F; + font-size: 14px; + line-height: 20px; + font-weight: 500; +} + +.partners { + padding-top: 60px; +} +@media (min-width: 1200px) { + .partners { + padding-top: 100px; + } +} +.partners__title { + margin-bottom: 60px; +} +.partners__inner { + display: grid; + grid-template-columns: repeat(6, 1fr); + grid-gap: 20px; +} +.partners__swiper { + overflow: visible; +} +@media (min-width: 1200px) { + .partners__swiper { + padding-bottom: 0; + } +} +.partners__swiper .swiper-scrollbar { + display: none; + width: 200px; + height: 4px; + left: 0; + right: 0; + bottom: 3px; + margin: 0 auto; + background-color: #F2F2F3; +} +@media (min-width: 1200px) { + .partners__swiper .swiper-scrollbar { + display: none; + } +} +.partners__swiper .swiper-scrollbar-drag { + top: -3px; + height: 10px; + background-color: #42AAFF; + cursor: pointer; +} + +.partners-item { + background-color: #FFFFFF; + -webkit-box-shadow: 0px 2px 12px rgba(6, 15, 26, 0.04); + box-shadow: 0px 2px 12px rgba(6, 15, 26, 0.04); + border-radius: 10px; + padding: 20px; + -webkit-transition: 0.3s; + -o-transition: 0.3s; + transition: 0.3s; +} +.partners-item img { + height: 95px; + width: 100%; + -o-object-fit: contain; + object-fit: contain; + -webkit-filter: grayscale(1); + filter: grayscale(1); + -webkit-transition: 0.3s; + -o-transition: 0.3s; + transition: 0.3s; +} +.partners-item:hover { + -webkit-box-shadow: 0px 2px 20px rgba(6, 15, 26, 0.04), 0px 2px 12px rgba(6, 15, 26, 0.04); + box-shadow: 0px 2px 20px rgba(6, 15, 26, 0.04), 0px 2px 12px rgba(6, 15, 26, 0.04); +} +.partners-item:hover img { + -webkit-filter: grayscale(0); + filter: grayscale(0); +} +.partners-item:nth-child(7), .partners-item:nth-child(8), .partners-item:nth-child(9), .partners-item:nth-child(10), .partners-item:nth-child(11), .partners-item:nth-child(12) { + -webkit-transform: translateX(-50%); + -ms-transform: translateX(-50%); + transform: translateX(-50%); +} +@media (min-width: 1200px) { + .partners-item:nth-child(7), .partners-item:nth-child(8), .partners-item:nth-child(9), .partners-item:nth-child(10), .partners-item:nth-child(11), .partners-item:nth-child(12) { + -webkit-transform: translateX(0); + -ms-transform: translateX(0); + transform: translateX(0); + } +} + +.contacts-top { + position: relative; + padding-bottom: 200px; + background-repeat: no-repeat; + background-size: cover; + background-position: center; +} +.contacts-top::before { + content: ""; + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + background-color: rgba(3, 9, 15, 0.6); +} +.contacts-top__wrap { + position: relative; +} + +.contacts-middle { + padding-bottom: 60px; +} +@media (min-width: 1200px) { + .contacts-middle { + padding-bottom: 100px; + } +} +.contacts-middle__wrap { + position: relative; + min-height: 558px; + margin-top: -140px; + border-radius: 10px; + overflow: hidden; + -webkit-box-shadow: 0px 4px 36px rgba(14, 56, 94, 0.04), 0px 4px 16px rgba(14, 56, 94, 0.04); + box-shadow: 0px 4px 36px rgba(14, 56, 94, 0.04), 0px 4px 16px rgba(14, 56, 94, 0.04); + background-color: #FFFFFF; +} +@media (min-width: 780px) { + .contacts-middle__wrap { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + } +} + +.contacts__cnt { + max-width: 500px; +} +.contacts__title { + margin-bottom: 12px; +} +.contacts__descr { + max-width: 380px; + color: #FFFFFF; + font-size: 16px; + line-height: 22px; + font-weight: 500; +} +.contacts__feedback { + position: relative; + z-index: 5; +} +@media (min-width: 780px) { + .contacts__feedback { + width: 721px; + } +} +.contacts__form { + padding: 40px 20px 60px; +} +@media (min-width: 1024px) { + .contacts__form { + padding: 40px 67px 60px 60px; + } +} +.contacts__form.hidden { + opacity: 0; + visibility: hidden; +} +.contacts__caption { + margin-bottom: 30px; + font-size: 20px; + line-height: 30px; + font-weight: 700; +} +@media (min-width: 1200px) { + .contacts__caption { + margin-bottom: 40px; + } +} +.contacts__fields { + display: grid; + grid-template-columns: repeat(1, 1fr); + grid-gap: 16px; + margin-bottom: 40px; +} +@media (min-width: 1200px) { + .contacts__fields { + grid-template-columns: repeat(2, 1fr); + } +} +.contacts__field input, +.contacts__field textarea { + border-color: #CDCECF; +} +.contacts__field textarea { + height: 110px; +} +@media (min-width: 1200px) { + .contacts__field:last-child { + grid-column: span 2; + } +} +.contacts__btn { + width: 100%; + margin-bottom: 16px; + padding: 12px; +} +@media (min-width: 480px) { + .contacts__btn { + width: auto; + padding: 12px 38px; + } +} +.contacts__btn.btn-animate { + -webkit-animation: btn-animate 0.5s linear infinite; + animation: btn-animate 0.5s linear infinite; + background-size: 30px 30px; + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.3) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.3) 50%, rgba(255, 255, 255, 0.3) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.3) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.3) 50%, rgba(255, 255, 255, 0.3) 75%, transparent 75%, transparent); +} +.contacts__confirm { + max-width: 525px; + color: #9A9C9F; + font-size: 14px; + line-height: 20px; + font-weight: 500; +} +.contacts__confirm a { + text-decoration: underline; +} +.contacts__info { + padding: 40px 20px 80px; + background-color: #EDF7FF; +} +@media (min-width: 780px) { + .contacts__info { + width: 495px; + } +} +@media (min-width: 1024px) { + .contacts__info { + padding: 40px 50px; + } +} +.contacts__items { + margin-bottom: 40px; +} + +@-webkit-keyframes btn-animate { + from { + background-position: 0 0; + } + to { + background-position: 60px 30px; + } +} + +@keyframes btn-animate { + from { + background-position: 0 0; + } + to { + background-position: 60px 30px; + } +} +.contacts-success { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -ms-flex-direction: column; + flex-direction: column; + -webkit-box-pack: center; + -ms-flex-pack: center; + justify-content: center; + height: 100%; + padding: 50px; + opacity: 0; + visibility: hidden; + text-align: center; + background-color: #42AAFF; + -webkit-transition: 0.3s; + -o-transition: 0.3s; + transition: 0.3s; +} +.contacts-success.active { + opacity: 1; + visibility: visible; +} +.contacts-success__logo { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + -webkit-box-pack: center; + -ms-flex-pack: center; + justify-content: center; + width: 96px; + height: 96px; + margin: 0 auto 30px; + border-radius: 50%; + background-color: #FFFFFF; + -webkit-filter: drop-shadow(0px 4px 24px rgba(14, 51, 81, 0.12)); + filter: drop-shadow(0px 4px 24px rgba(14, 51, 81, 0.12)); +} +.contacts-success__logo svg { + stroke: #42AAFF; +} +.contacts-success__title { + color: #FFFFFF; + font-size: 36px; + line-height: 48px; + font-weight: 800; + margin-bottom: 12px; +} +.contacts-success__descr { + color: #FFFFFF; + font-size: 18px; + line-height: 24px; + font-weight: 500; + text-align: center; +} + +.contacts-item__caption { + margin-bottom: 4px; + color: #686B6F; + font-size: 12px; + line-height: 18px; + font-weight: 600; + text-transform: uppercase; +} +.contacts-item__contact { + font-size: 16px; + line-height: 22px; + font-weight: 500; + font-style: normal; +} +.contacts-item:not(:last-child) { + margin-bottom: 20px; +} + +.page-404 { + background: -o-linear-gradient(329.62deg, #D9EEFF 0%, #B3DDFF 100%); + background: linear-gradient(120.38deg, #D9EEFF 0%, #B3DDFF 100%); +} +.page-404__wrap { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -ms-flex-direction: column; + flex-direction: column; + padding: 60px 0 80px; +} +@media (min-width: 780px) { + .page-404__wrap { + -webkit-box-orient: horizontal; + -webkit-box-direction: normal; + -ms-flex-direction: row; + flex-direction: row; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + } +} +@media (min-width: 1200px) { + .page-404__wrap { + min-height: calc(100vh - 110px); + } +} +.page-404__img { + margin: 0px auto 75px; +} +@media (min-width: 480px) { + .page-404__img { + -ms-flex-negative: 0; + flex-shrink: 0; + width: 400px; + } +} +@media (min-width: 780px) { + .page-404__img { + margin: 0px 30px 0px 0px; + } +} +@media (min-width: 1200px) { + .page-404__img { + width: 600px; + margin: 0px 48px 0px 0px; + } +} +.page-404__img img { + width: 100%; + margin: 0 auto; +} +@media (min-width: 480px) { + .page-404__img img { + width: auto; + max-width: 100%; + } +} +.page-404__title { + margin-bottom: 20px; + color: #03090F; + font-size: 32px; + line-height: 36px; + font-weight: 800; +} +@media (min-width: 1200px) { + .page-404__title { + margin-bottom: 24px; + font-size: 48px; + line-height: 52px; + } +} +.page-404__descr { + max-width: 420px; + margin-bottom: 60px; + font-size: 16px; + line-height: 22px; + font-weight: 500; +} +.page-404__btn { + width: 100%; +} +@media (min-width: 480px) { + .page-404__btn { + width: auto; + } +} + +.breadcrumbs { + padding: 40px 0 30px; +} +@media (min-width: 1200px) { + .breadcrumbs { + padding: 40px 0 50px; + } +} +.breadcrumbs__list { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + overflow-x: auto; + margin: 0 -20px; + padding: 0 20px 10px; + scrollbar-width: none; +} +.breadcrumbs__list::-webkit-scrollbar { + height: 0; +} +.breadcrumbs__item { + position: relative; + -ms-flex-negative: 0; + flex-shrink: 0; +} +.breadcrumbs__item:not(:last-child) { + position: relative; + margin-right: 28px; +} +.breadcrumbs__item:not(:last-child)::after { + content: ""; + position: absolute; + top: 50%; + right: -16px; + -webkit-transform: translateY(-50%); + -ms-transform: translateY(-50%); + transform: translateY(-50%); + width: 4px; + height: 4px; + background-color: #FFFFFF; +} +.breadcrumbs__item:last-child .breadcrumbs__link { + color: #CDCECF; +} +.breadcrumbs__link { + display: block; + color: #FFFFFF; + font-size: 14px; + line-height: 20px; + font-weight: 600; +} + +.pagination { + padding: 30px 0 50px; +} +@media (min-width: 1200px) { + .pagination { + border-top: 1px solid rgba(154, 156, 159, 0.2); + padding: 30px 0 100px; + } +} +.pagination__inner { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-pack: center; + -ms-flex-pack: center; + justify-content: center; +} +.pagination__btn { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + -webkit-box-pack: center; + -ms-flex-pack: center; + justify-content: center; + width: 40px; + height: 40px; + border: 1px solid #012060; + border-radius: 10px; + -webkit-transition: 0.3s; + -o-transition: 0.3s; + transition: 0.3s; +} +.pagination__btn svg { + stroke: #012060; + -webkit-transition: 0.3s; + -o-transition: 0.3s; + transition: 0.3s; +} +.pagination__btn.disabled { + pointer-events: none; + opacity: 0.5; +} +.pagination__btn:hover { + background-color: #012060; +} +.pagination__btn:hover svg { + stroke: #FFFFFF; +} +.pagination__btn-prev { + margin-right: 20px; +} +@media (min-width: 1200px) { + .pagination__btn-prev { + margin-right: 79px; + } +} +.pagination__btn-next { + margin-left: 20px; +} +@media (min-width: 1200px) { + .pagination__btn-next { + margin-left: 79px; + } +} +.pagination__btn-next svg { + -webkit-transform: rotate(180deg); + -ms-transform: rotate(180deg); + transform: rotate(180deg); +} +.pagination__list { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; +} +.pagination__item:not(:last-child) { + margin-right: 20px; +} +.pagination__link { + color: #CDCECF; + font-size: 16px; + line-height: 20px; + font-weight: 800; + -webkit-transition: 0.3s; + -o-transition: 0.3s; + transition: 0.3s; +} +.pagination__link.active { + width: 30px; + height: 30px; + border-radius: 50%; + background-color: #D9EEFF; + color: #42AAFF; + line-height: 30px; + text-align: center; +} +.pagination__link.more { + color: #012060; +} +@media (min-width: 1200px) { + .pagination__link:hover { + color: #42AAFF; + } +} + +.news__wrap { + position: relative; + padding-bottom: 60px; + margin-bottom: 60px; + background-repeat: no-repeat; + background-size: cover; + background-position: center; +} +@media (min-width: 1200px) { + .news__wrap { + padding-bottom: 110px; + margin-bottom: 100px; + } +} +.news__wrap::before { + content: ""; + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + background-color: rgba(3, 9, 15, 0.6); +} +.news__inner { + position: relative; +} +.news__cnt { + max-width: 470px; +} +.news__title { + margin-bottom: 12px; +} +.news__descr { + color: #FFFFFF; + font-size: 16px; + line-height: 22px; + font-weight: 500; +} +@media (min-width: 1200px) { + .news__descr { + font-size: 20px; + line-height: 30px; + font-weight: 400; + } +} +.news__grid { + display: grid; + grid-template-columns: repeat(1, 1fr); + grid-gap: 20px; + margin-bottom: 20px; +} +@media (min-width: 500px) { + .news__grid { + grid-template-columns: repeat(2, 1fr); + } +} +@media (min-width: 920px) { + .news__grid { + grid-template-columns: repeat(3, 1fr); + } +} +@media (min-width: 1200px) { + .news__grid { + grid-template-columns: repeat(4, 1fr); + margin-bottom: 60px; + } +} + +.news-one-top { + position: relative; + padding-bottom: 30px; + background-repeat: no-repeat; + background-size: cover; + background-position: center; +} +@media (min-width: 1200px) { + .news-one-top { + padding-bottom: 40px; + } +} +.news-one-top::before { + content: ""; + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + background-color: rgba(3, 9, 15, 0.6); +} +.news-one-top__wrap { + position: relative; +} + +.news-one__title { + max-width: 880px; + margin-bottom: 128px; + line-height: 36px; +} +@media (min-width: 1200px) { + .news-one__title { + line-height: 58px; + margin-bottom: 84px; + } +} +.news-one__date span { + display: block; + color: #FFFFFF; +} +.news-one__date span:nth-child(1) { + font-size: 32px; + line-height: 40px; + font-weight: 800; + margin-bottom: 2px; +} +.news-one__date span:nth-child(2) { + font-size: 14px; + line-height: 20px; + font-weight: 500; +} +.news-one__inner { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -ms-flex-direction: column; + flex-direction: column; + padding: 40px 0 0; +} +@media (min-width: 780px) { + .news-one__inner { + -webkit-box-orient: horizontal; + -webkit-box-direction: normal; + -ms-flex-direction: row; + flex-direction: row; + -webkit-box-align: start; + -ms-flex-align: start; + align-items: flex-start; + padding: 40px 0; + border-bottom: 1px solid #E8E8E9; + } +} +@media (min-width: 1200px) { + .news-one__inner { + padding: 60px 0; + } +} +.news-one__social { + -webkit-box-ordinal-group: 2; + -ms-flex-order: 1; + order: 1; + margin: 40px 0px 0px 0px; +} +@media (min-width: 780px) { + .news-one__social { + -webkit-box-ordinal-group: 1; + -ms-flex-order: 0; + order: 0; + margin: 0px 30px 0px 0px; + } +} +@media (min-width: 1200px) { + .news-one__social { + margin: 0px 50px 0px 0px; + } +} +.news-one__social.social { + width: 260px; + -ms-flex-negative: 0; + flex-shrink: 0; + padding: 20px 20px 30px; + border-radius: 10px; + -webkit-box-shadow: 0px 2px 12px rgba(14, 56, 94, 0.04); + box-shadow: 0px 2px 12px rgba(14, 56, 94, 0.04); + background-color: #EDF7FF; +} +.news-one__descr { + max-width: 700px; + color: #4B4E53; + font-size: 14px; + line-height: 22px; + font-weight: 500; + padding-bottom: 40px; + border-bottom: 1px solid #E8E8E9; +} +@media (min-width: 780px) { + .news-one__descr { + padding-bottom: 0; + border: none; + } +} +@media (min-width: 1200px) { + .news-one__descr { + font-size: 16px; + } +} +.news-one__descr p { + color: #4B4E53; + font-size: 14px; + line-height: 22px; + font-weight: 500; +} +@media (min-width: 1200px) { + .news-one__descr p { + font-size: 16px; + } +} +.news-one__descr p:not(:last-child) { + margin-bottom: 16px; +} +@media (min-width: 1200px) { + .news-one__descr p:not(:last-child) { + margin-bottom: 20px; + } +} + +.card { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -ms-flex-direction: column; + flex-direction: column; + height: 100%; + background-color: White; + -webkit-box-shadow: 0px 4px 28px rgba(14, 56, 94, 0.08), 0px 4px 16px rgba(14, 56, 94, 0.04); + box-shadow: 0px 4px 28px rgba(14, 56, 94, 0.08), 0px 4px 16px rgba(14, 56, 94, 0.04); + border-radius: 10px; + overflow: hidden; +} +.card__top { + position: relative; + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -ms-flex-direction: column; + flex-direction: column; + -webkit-box-pack: end; + -ms-flex-pack: end; + justify-content: flex-end; + min-height: 160px; + padding: 20px 20px 15px; +} +.card__top::before { + content: ""; + position: absolute; + top: 0; + left: 0; + z-index: 1; + width: 100%; + height: 100%; + background: rgba(3, 9, 15, 0.4); +} +.card__top img { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + -o-object-fit: cover; + object-fit: cover; +} +.card__title { + position: relative; + z-index: 1; + color: #FFFFFF; + font-size: 24px; + line-height: 28px; + font-weight: 800; +} +.card__labels { + position: absolute; + top: 20px; + right: 20px; + z-index: 1; + display: -webkit-box; + display: -ms-flexbox; + display: flex; +} +.card__label { + position: relative; + width: 40px; + height: 40px; + border-radius: 50%; + -webkit-transition: 0.3s; + -o-transition: 0.3s; + transition: 0.3s; + cursor: pointer; +} +.card__label svg { + position: absolute; + top: 50%; + left: 50%; + -webkit-transform: translate(-50%, -50%); + -ms-transform: translate(-50%, -50%); + transform: translate(-50%, -50%); +} +.card__label:not(:last-child) { + margin-right: 8px; +} +.card__label-favorites { + background-color: rgba(255, 255, 255, 0.8); +} +.card__label-favorites svg { + -webkit-transition: 0.3s; + -o-transition: 0.3s; + transition: 0.3s; +} +.card__label-favorites svg:nth-child(1) { + stroke: #42AAFF; +} +.card__label-favorites svg:nth-child(2) { + opacity: 0; + visibility: hidden; +} +@media (min-width: 1200px) { + .card__label-favorites:hover { + background-color: #42AAFF; + } +} +@media (min-width: 1200px) { + .card__label-favorites:hover svg:nth-child(1) { + stroke: #FFFFFF; + } +} +.card__label-favorites.active { + background-color: white; +} +.card__label-favorites.active svg:nth-child(1) { + opacity: 0; + visibility: hidden; +} +.card__label-favorites.active svg:nth-child(2) { + opacity: 1; + visibility: visible; +} +.card__label-messenger { + background-color: rgba(37, 211, 102, 0.6); +} +@media (min-width: 1200px) { + .card__label-messenger:hover { + background-color: hwb(142 15% 17%); + } +} +.card__cnt { + -webkit-box-flex: 1; + -ms-flex-positive: 1; + flex-grow: 1; + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -ms-flex-direction: column; + flex-direction: column; + padding: 20px; +} +.card__info { + margin: 0 -20px 20px; +} +.card__line { + position: relative; + color: #686B6F; + font-size: 14px; + line-height: 20px; + font-weight: 500; + font-style: normal; + padding: 0 20px; + -o-text-overflow: ellipsis; + text-overflow: ellipsis; + overflow: hidden; + white-space: nowrap; +} +.card__line b { + color: #363A3F; + width: 600px; +} +.card__line:not(:last-child) { + margin-bottom: 8px; +} +.card__line span { + position: absolute; + top: 4px; + left: 0; + width: 6px; + height: 12px; + background-color: #FFC955; + border-radius: 0px 3px 3px 0px; +} +.card__line-complex { + color: #4B4E53; + font-weight: 700; +} +.card__price { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-align: end; + -ms-flex-align: end; + align-items: flex-end; + margin: auto 0 12px; +} +.card__price span { + -ms-flex-negative: 0; + flex-shrink: 0; +} +.card__price span:nth-child(1) { + color: #363A3F; + font-size: 24px; + line-height: 30px; + font-weight: 800; +} +.card__price span:nth-child(2) { + color: #9A9C9F; + font-size: 14px; + line-height: 20px; + font-weight: 500; + margin-left: 4px; +} +.card__btn { + padding: 12px; + -o-text-overflow: ellipsis; + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; +} + +.card-news { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -ms-flex-direction: column; + flex-direction: column; + height: 100%; + background-color: White; + -webkit-box-shadow: 0px 4px 28px rgba(14, 56, 94, 0.08), 0px 4px 16px rgba(14, 56, 94, 0.04); + box-shadow: 0px 4px 28px rgba(14, 56, 94, 0.08), 0px 4px 16px rgba(14, 56, 94, 0.04); + border-radius: 10px; + overflow: hidden; +} +.card-news__top { + position: relative; + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -ms-flex-direction: column; + flex-direction: column; + -webkit-box-pack: end; + -ms-flex-pack: end; + justify-content: flex-end; + padding: 20px 20px 15px; + min-height: 170px; +} +.card-news__top::before { + content: ""; + position: absolute; + top: 0; + left: 0; + z-index: 1; + width: 100%; + height: 100%; + background: rgba(3, 9, 15, 0.4); +} +.card-news__top img { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + -o-object-fit: cover; + object-fit: cover; +} +.card-news__date { + position: relative; + z-index: 1; +} +.card-news__date span { + display: block; + color: #FFFFFF; + display: -webkit-box; + -webkit-box-orient: vertical; + overflow: hidden; + -webkit-line-clamp: 1; +} +.card-news__date span:nth-child(1) { + font-size: 32px; + line-height: 36px; + font-weight: 800; + margin-bottom: 4px; +} +@media (min-width: 1200px) { + .card-news__date span:nth-child(1) { + line-height: 40px; + margin-bottom: 2px; + } +} +.card-news__date span:nth-child(2) { + font-size: 14px; + line-height: 20px; + font-weight: 600; +} +.card-news__cnt { + position: relative; + z-index: 2; + -webkit-box-flex: 1; + -ms-flex-positive: 1; + flex-grow: 1; + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -ms-flex-direction: column; + flex-direction: column; + padding: 20px 20px 20px; + background-color: #FFFFFF; +} +.card-news__descr { + font-weight: 600; + font-size: 14px; + line-height: 20px; + color: #40454A; + margin-bottom: 32px; + display: -webkit-box; + -webkit-box-orient: vertical; + overflow: hidden; + -webkit-line-clamp: 3; +} +.card-news__link { + position: relative; + -ms-flex-item-align: start; + align-self: flex-start; + color: #40454A; + font-size: 14px; + line-height: 20px; + font-weight: 600; + margin-top: auto; + padding: 0 28px 7px 0; +} +.card-news__link::before { + content: ""; + position: absolute; + left: 0; + bottom: 0; + width: 100%; + height: 2px; + border-radius: 5px; + background-color: #E6E7E7; +} +.card-news__link::after { + content: ""; + position: absolute; + left: 0; + bottom: 0; + height: 2px; + width: 0; + border-radius: 5px; + background-color: #42AAFF; + -webkit-transition: 0.3s; + -o-transition: 0.3s; + transition: 0.3s; +} +.card-news__link:hover::after { + width: 100%; +} +.card-news__link svg { + position: absolute; + top: 4px; + right: 0; +} + +.popup { + position: fixed; + top: 0; + left: 0; + z-index: 100; + width: 100%; + height: 100%; + display: -webkit-box; + display: -ms-flexbox; + display: flex; + opacity: 0; + visibility: hidden; + background-color: rgba(3, 9, 15, 0.6); + -webkit-transition: 0.3s; + -o-transition: 0.3s; + transition: 0.3s; +} +@media (min-width: 640px) { + .popup { + overflow-y: auto; + } +} +.popup.active { + opacity: 1; + visibility: visible; +} +.popup__wrap { + position: relative; + background-color: #FFFFFF; +} +@media (min-width: 640px) { + .popup__wrap { + border-radius: 10px; + -webkit-box-shadow: 0px 4px 32px rgba(14, 56, 94, 0.12); + box-shadow: 0px 4px 32px rgba(14, 56, 94, 0.12); + margin: auto; + } +} +.popup__close { + position: absolute; + top: 0; + right: 0; + width: 60px; + height: 60px; + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + -webkit-box-pack: center; + -ms-flex-pack: center; + justify-content: center; +} +.popup__close svg { + fill: #363A3F; + -webkit-transition: 0.3s; + -o-transition: 0.3s; + transition: 0.3s; +} +@media (min-width: 1200px) { + .popup__close:hover svg { + fill: #42AAFF; + } +} + +.popup-feedback .popup__wrap { + width: 100%; + padding: 60px 0 0 20px; +} +@media (min-width: 640px) { + .popup-feedback .popup__wrap { + max-width: 500px; + padding: 60px 54px 60px; + } +} +.popup-feedback__form { + overflow-y: auto; + height: 100%; + padding: 0 20px 30px 0; +} +@media (min-width: 640px) { + .popup-feedback__form { + overflow-y: visible; + height: auto; + padding: 0; + } +} +.popup-feedback__title { + font-size: 32px; + line-height: 36px; + font-weight: 700; + margin-bottom: 40px; +} +@media (min-width: 1200px) { + .popup-feedback__title { + line-height: 48px; + } +} +.popup-feedback__fields { + margin-bottom: 40px; +} +.popup-feedback__field input { + border-color: #CDCECF; +} +.popup-feedback__field:not(:last-child) { + margin-bottom: 16px; +} +.popup-feedback__btn { + width: 100%; + margin-bottom: 16px; +} +@media (min-width: 480px) { + .popup-feedback__btn { + width: auto; + padding: 12px 78px; + } +} +.popup-feedback__btn.btn-animate { + -webkit-animation: btn-animate 0.5s linear infinite; + animation: btn-animate 0.5s linear infinite; + background-size: 30px 30px; + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.3) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.3) 50%, rgba(255, 255, 255, 0.3) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.3) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.3) 50%, rgba(255, 255, 255, 0.3) 75%, transparent 75%, transparent); +} +.popup-feedback__confirm { + color: #9A9C9F; + font-size: 14px; + line-height: 20px; + font-weight: 500; +} +.popup-feedback__confirm a { + text-decoration: underline; + padding: 0; + margin: 0; +} + +@keyframes btn-animate { + from { + background-position: 0 0; + } + to { + background-position: 60px 30px; + } +} +.popup-success .popup__wrap { + width: 100%; + text-align: center; + padding: 60px 0 0 20px; +} +@media (min-width: 640px) { + .popup-success .popup__wrap { + max-width: 600px; + padding: 60px 75px 70px; + } +} +.popup-success__inner { + overflow-y: auto; + height: 100%; + padding: 0 20px 30px 0; +} +@media (min-width: 640px) { + .popup-success__inner { + overflow-y: visible; + height: auto; + padding: 0; + } +} +.popup-success__logo { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + -webkit-box-pack: center; + -ms-flex-pack: center; + justify-content: center; + width: 96px; + height: 96px; + border-radius: 50%; + margin: 0 auto 30px; + background-color: #42AAFF; +} +.popup-success__logo svg { + stroke: #FFFFFF; +} +.popup-success__title { + margin-bottom: 12px; + font-size: 36px; + line-height: 48px; + font-weight: 800; +} +.popup-success__descr { + color: #9A9C9F; + font-size: 18px; + line-height: 24px; + font-weight: 500; +} + +.contact-us { + position: fixed; + right: 0; + bottom: 0; + z-index: 50; + -webkit-transform: translateY(105%); + -ms-transform: translateY(105%); + transform: translateY(105%); + width: 100%; + border-radius: 30px 30px 0px 0px; + overflow: hidden; + -webkit-box-shadow: 0px 0px 8px rgba(14, 56, 94, 0.16), 0px 0px 32px rgba(14, 56, 94, 0.08); + box-shadow: 0px 0px 8px rgba(14, 56, 94, 0.16), 0px 0px 32px rgba(14, 56, 94, 0.08); + background-color: #FFFFFF; + -webkit-transition: 0.3s; + -o-transition: 0.3s; + transition: 0.3s; +} +@media (min-width: 480px) { + .contact-us { + max-width: 360px; + border-radius: 50px 10px 0px 0px; + } +} +@media (min-width: 1200px) { + .contact-us { + right: 100px; + } +} +.contact-us.active { + -webkit-transform: translateY(0); + -ms-transform: translateY(0); + transform: translateY(0); +} +.contact-us__top { + position: relative; + padding: 40px 40px 40px 20px; + background-color: #21ADD9; +} +.contact-us__close { + position: absolute; + top: 0; + right: 0; + width: 60px; + height: 60px; + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + -webkit-box-pack: center; + -ms-flex-pack: center; + justify-content: center; +} +.contact-us__close svg { + fill: #FFFFFF; +} +.contact-us__title { + color: #FFFFFF; + font-size: 24px; + line-height: 28px; + font-weight: 700; +} +.contact-us__body { + padding: 40px 20px; +} +.contact-us__items { + display: grid; + grid-template-columns: repeat(3, 1fr); + grid-gap: 20px; + margin-bottom: 40px; +} +.contact-us__socials { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-pack: center; + -ms-flex-pack: center; + justify-content: center; +} + +@media (min-width: 1200px) { + .contact-us-item:hover svg { + -webkit-transform: scale(1.2); + -ms-transform: scale(1.2); + transform: scale(1.2); + } +} +.contact-us-item__icon { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + -webkit-box-pack: center; + -ms-flex-pack: center; + justify-content: center; + height: 90px; + margin-bottom: 8px; + border-radius: 10px; + background-color: #EDF7FF; +} +.contact-us-item__icon svg { + -webkit-transition: 0.3s; + -o-transition: 0.3s; + transition: 0.3s; +} +.contact-us-item__name { + color: #686B6F; + font-size: 14px; + line-height: 20px; + font-weight: 500; + text-align: center; +} + +@media (min-width: 1200px) { + .contact-us-social:hover img, + .contact-us-social:hover svg { + -webkit-transform: scale(1.2); + -ms-transform: scale(1.2); + transform: scale(1.2); + } +} +.contact-us-social:not(:last-child) { + margin-right: 20px; +} +.contact-us-social__icon { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + -webkit-box-pack: center; + -ms-flex-pack: center; + justify-content: center; + width: 80px; + height: 80px; + margin-bottom: 13px; + border-radius: 10px; +} +.contact-us-social__icon img, +.contact-us-social__icon svg { + -webkit-transition: 0.3s; + -o-transition: 0.3s; + transition: 0.3s; +} +.contact-us-social__icon-tg { + background: -o-linear-gradient(246.8deg, #37AEE2 21.67%, #1E96C8 70%); + background: linear-gradient(203.2deg, #37AEE2 21.67%, #1E96C8 70%); +} +.contact-us-social__icon-wa { + background-color: #25D366; +} +.contact-us-social__name { + color: #686B6F; + font-size: 14px; + line-height: 20px; + font-weight: 500; + text-align: center; +} + +.catalog { + padding: 60px 0; +} +@media (min-width: 1200px) { + .catalog { + padding: 100px 0; + } +} +.catalog__sliders .slider { + padding-bottom: 0; +} +.catalog__sliders .slider__top { + -webkit-box-align: start; + -ms-flex-align: start; + align-items: flex-start; +} +@media (min-width: 1200px) { + .catalog__sliders .slider__top { + -webkit-box-align: end; + -ms-flex-align: end; + align-items: flex-end; + } +} +.catalog__sliders .slider__title { + position: relative; + padding: 18px 50px 18px 0; + color: #FFFFFF; + background-color: #42AAFF; + border-radius: 0 1000px 1000px 0; +} +.catalog__sliders .slider__title::before { + content: ""; + position: absolute; + top: 0; + bottom: 0; + right: calc(100% - 1px); + width: 100vw; + background-color: #42AAFF; +} + +.category { + padding: 60px 0 0; +} +@media (min-width: 1200px) { + .category { + padding: 100px 0 0; + } +} +.category__top { + margin-bottom: 60px; +} +.category__grid { + display: grid; + grid-gap: 20px; + grid-template-columns: repeat(1, 1fr); + margin-bottom: 20px; +} +@media (min-width: 540px) { + .category__grid { + grid-template-columns: repeat(2, 1fr); + } +} +@media (min-width: 920px) { + .category__grid { + grid-template-columns: repeat(3, 1fr); + } +} +@media (min-width: 1200px) { + .category__grid { + grid-template-columns: repeat(4, 1fr); + margin-bottom: 60px; + } +} + +.complex { + padding: 60px 0 0; +} +@media (min-width: 1200px) { + .complex { + padding: 100px 0 0; + } +} +.complex__sliders { + padding-bottom: 60px; +} +@media (min-width: 1200px) { + .complex__sliders { + padding-bottom: 100px; + } +} +.complex__sliders .slider { + padding-bottom: 0; +} +.complex__sliders .slider__top { + -webkit-box-align: start; + -ms-flex-align: start; + align-items: flex-start; +} +@media (min-width: 1200px) { + .complex__sliders .slider__top { + -webkit-box-align: end; + -ms-flex-align: end; + align-items: flex-end; + } +} +.complex__sliders .slider__title { + position: relative; + padding: 18px 50px 18px 0; + color: #FFFFFF; + background-color: #42AAFF; + border-radius: 0 1000px 1000px 0; +} +.complex__sliders .slider__title::before { + content: ""; + position: absolute; + top: 0; + bottom: 0; + right: calc(100% - 1px); + width: 100vw; + background-color: #42AAFF; +} + +.intro { + position: relative; + padding-bottom: 60px; + background-repeat: no-repeat; + background-position: center; + background-size: cover; +} +@media (min-width: 1200px) { + .intro { + padding-bottom: 80px; + } +} +.intro::before { + content: ""; + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + background-color: rgba(3, 9, 15, 0.5); + -webkit-backdrop-filter: blur(10px); + backdrop-filter: blur(10px); +} +.intro__wrap { + position: relative; +} +@media (min-width: 1200px) { + .intro__inner { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-pack: justify; + -ms-flex-pack: justify; + justify-content: space-between; + } +} +.intro__cnt { + margin: 0px 0px 60px 0px; +} +@media (min-width: 1200px) { + .intro__cnt { + width: 540px; + margin: 0px 30px 0px 0px; + } +} +.intro__descr { + color: #FFFFFF; + font-size: 16px; + line-height: 22px; + font-weight: 500; + margin-top: 12px; +} +@media (min-width: 1200px) { + .intro__descr { + margin-top: 20px; + } +} +.intro__link-complex { + display: block; + max-width: 432px; + padding: 15px 20px; + border-radius: 10px; + color: #4B4E53; + font-size: 14px; + line-height: 20px; + font-weight: 600; + background-color: #FFFFFF; + margin-top: 12px; +} +.intro__link-complex span { + text-decoration: underline; +} +.intro__row { + max-width: 475px; + display: grid; + grid-gap: 20px; + grid-template-columns: repeat(1, 1fr); + margin-top: 20px; +} +@media (min-width: 480px) { + .intro__row { + grid-template-columns: repeat(2, 1fr); + } +} +.intro__col:nth-child(1) .intro__link-map { + display: none; +} +@media (min-width: 480px) { + .intro__col:nth-child(1) .intro__link-map { + display: inline-block; + } +} +@media (min-width: 480px) { + .intro__col:nth-child(2) .intro__link-map { + display: none; + } +} +.intro__item { + position: relative; + color: #FFFFFF; + font-size: 16px; + line-height: 22px; + font-weight: 500; + padding-left: 16px; +} +.intro__item span { + color: #FFFFFF !important; +} +.intro__item::before { + content: ""; + position: absolute; + top: 7px; + left: 0; + width: 8px; + height: 8px; + background-color: currentColor; + border-radius: 2px; +} +.intro__item:not(:last-child) { + margin-bottom: 8px; +} +.intro__link-map { + margin-top: 16px; + color: #FFFFFF; + font-size: 14px; + line-height: 20px; + font-weight: 500; + -webkit-text-decoration-line: underline; + text-decoration-line: underline; +} +@media (min-width: 1200px) { + .intro__link-map { + margin-top: 20px; + } +} +.intro__group span { + display: block; + color: #FFFFFF; +} +.intro__group span:nth-child(1) { + font-size: 14px; + line-height: 20px; + font-weight: 700; + margin-bottom: 2px; +} +.intro__group span:nth-child(2) { + font-size: 16px; + line-height: 22px; + font-weight: 500; +} +.intro__group:not(:first-child) { + margin-top: 12px; +} +.intro__bottom { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -ms-flex-direction: column; + flex-direction: column; + -webkit-box-align: start; + -ms-flex-align: start; + align-items: flex-start; + margin-top: 40px; +} +@media (min-width: 640px) { + .intro__bottom { + -webkit-box-orient: horizontal; + -webkit-box-direction: normal; + -ms-flex-direction: row; + flex-direction: row; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + } +} +.intro__views { + -webkit-box-ordinal-group: 2; + -ms-flex-order: 1; + order: 1; + position: relative; + -webkit-box-flex: 1; + -ms-flex-positive: 1; + flex-grow: 1; + padding: 15px 36px; + border-radius: 10px; + margin-top: 10px; + background-color: #42AAFF; + color: #FFFFFF; + font-size: 14px; + line-height: 20px; + font-weight: 700; +} +@media (min-width: 480px) { + .intro__views { + margin-right: 20px; + } +} +@media (min-width: 640px) { + .intro__views { + -webkit-box-ordinal-group: 1; + -ms-flex-order: 0; + order: 0; + margin-top: 0; + } +} +.intro__views::before { + content: ""; + position: absolute; + top: 20px; + left: 20px; + width: 8px; + height: 8px; + background-color: #FFFFFF; + border-radius: 2px; +} +.intro__link-phone { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-pack: center; + -ms-flex-pack: center; + justify-content: center; + width: 100%; + padding: 12px; +} +@media (min-width: 480px) { + .intro__link-phone { + -ms-flex-negative: 0; + flex-shrink: 0; + width: auto; + padding: 12px 48px; + } +} +.intro__swiper { + margin: 0 -20px; + padding: 0 20px 34px; +} +@media (min-width: 1200px) { + .intro__swiper { + width: 598px; + margin: 0; + padding: 0 0 34px; + } +} +.intro__swiper .swiper-pagination { + bottom: 0; +} +.intro__swiper .swiper-pagination .swiper-pagination-bullet { + margin: 0 5px; +} +.intro__swiper .swiper-pagination-bullet { + width: 40px; + height: 4px; + margin: 0 5px; + border-radius: 5px; + background-color: #FFFFFF; + opacity: 1; + -webkit-transition: 0.3s; + -o-transition: 0.3s; + transition: 0.3s; +} +@media (min-width: 1200px) { + .intro__swiper .swiper-pagination-bullet:hover { + background-color: #42AAFF; + } +} +.intro__swiper .swiper-pagination-bullet-active { + background-color: #42AAFF; +} +.intro__swiper .swiper-button-prev, +.intro__swiper .swiper-button-next { + display: none; +} +@media (min-width: 1200px) { + .intro__swiper .swiper-button-prev, + .intro__swiper .swiper-button-next { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + top: calc(50% - 17px); + -webkit-transform: translateY(-50%); + -ms-transform: translateY(-50%); + transform: translateY(-50%); + width: 40px; + height: 40px; + border-radius: 10px; + border: 1px solid #FFFFFF; + margin: 0; + -webkit-transition: 0.3s; + -o-transition: 0.3s; + transition: 0.3s; + } +} +.intro__swiper .swiper-button-prev:after, +.intro__swiper .swiper-button-next:after { + display: none; +} +.intro__swiper .swiper-button-prev svg, +.intro__swiper .swiper-button-next svg { + stroke: #FFFFFF; + -webkit-transition: 0.3s; + -o-transition: 0.3s; + transition: 0.3s; +} +@media (min-width: 1200px) { + .intro__swiper .swiper-button-prev:hover, + .intro__swiper .swiper-button-next:hover { + background-color: #FFFFFF; + } +} +@media (min-width: 1200px) { + .intro__swiper .swiper-button-prev:hover svg, + .intro__swiper .swiper-button-next:hover svg { + stroke: #012060; + } +} +.intro__swiper .swiper-button-prev { + left: 20px; +} +.intro__swiper .swiper-button-next { + right: 20px; +} +.intro__swiper .swiper-button-next svg { + -webkit-transform: rotate(180deg); + -ms-transform: rotate(180deg); + transform: rotate(180deg); +} + +.intro-item { + position: relative; + border-radius: 20px; + overflow: hidden; +} +.intro-item::before { + content: ""; + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + background-color: rgba(3, 9, 15, 0.3); +} +.intro-item__img { + height: 217px; +} +@media (min-width: 1200px) { + .intro-item__img { + height: 366px; + } +} +.intro-item__img img { + width: 100%; + height: 100%; + -o-object-fit: cover; + object-fit: cover; +} +.intro-item__btn { + position: absolute; + bottom: 20px; + right: 20px; + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + -webkit-box-pack: center; + -ms-flex-pack: center; + justify-content: center; + width: 30px; + height: 30px; + background-color: #FFFFFF; + opacity: 0.8; + border-radius: 5px; + -webkit-transition: 0.3s; + -o-transition: 0.3s; + transition: 0.3s; +} +.intro-item__btn:hover { + opacity: 1; +} + +.offer__wrap { + padding: 60px 0; +} +@media (min-width: 1200px) { + .offer__wrap { + padding: 60px 0 100px; + } +} +.offer__inner { + margin-bottom: 40px; +} +@media (min-width: 780px) { + .offer__inner { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + } +} +@media (min-width: 1200px) { + .offer__inner { + margin-bottom: 100px; + } +} +.offer__line { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-align: end; + -ms-flex-align: end; + align-items: flex-end; + -webkit-box-pack: justify; + -ms-flex-pack: justify; + justify-content: space-between; + border-bottom: 1px dashed #E6E7E7; +} +.offer__line span { + font-size: 16px; + line-height: 22px; + background-color: #FFFFFF; + margin-bottom: -5px; +} +.offer__line span:nth-child(1) { + -ms-flex-negative: 0; + flex-shrink: 0; + margin-right: 30px; + color: #9A9C9F; + font-size: 14px; + font-weight: 400; +} +@media (min-width: 1200px) { + .offer__line span:nth-child(1) { + font-size: 16px; + } +} +.offer__line span:nth-child(2) { + color: #4B4E53; + font-weight: 500; +} +.offer__line:not(:last-child) { + margin-bottom: 17px; +} +.offer__cnt { + margin: 40px 0px 0px 0px; +} +@media (min-width: 780px) { + .offer__cnt { + -webkit-box-flex: 1; + -ms-flex-positive: 1; + flex-grow: 1; + margin: 0px 0px 0px 20px; + } +} +.offer__title { + font-size: 24px; + line-height: 28px; + font-weight: 800; + margin-bottom: 30px; +} +@media (min-width: 1200px) { + .offer__title { + font-size: 32px; + line-height: 40px; + } +} +.offer__additional { + margin-top: 40px; + font-weight: 500; + color: #4B4E53; + font-size: 14px; + line-height: 22px; +} +@media (min-width: 1200px) { + .offer__additional { + font-size: 16px; + margin-top: 50px; + } +} + +@media (min-width: 780px) { + .offer-side { + max-width: 495px; + width: 100%; + } +} +.offer-side__tabs { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + margin-bottom: 30px; +} +.offer-side__tab { + position: relative; + font-weight: 600; + font-size: 14px; + line-height: 20px; + color: #9A9C9F; + -webkit-transition: 0.3s; + -o-transition: 0.3s; + transition: 0.3s; +} +.offer-side__tab:not(:last-child) { + margin-right: 34px; +} +.offer-side__tab:not(:last-child)::after { + content: ""; + position: absolute; + top: 0; + bottom: 0; + right: -18px; + width: 2px; + background-color: #42AAFF; + border-radius: 5px; + pointer-events: none; +} +.offer-side__tab:hover, .offer-side__tab.active { + color: #363A3F; +} +.offer-side__cnt { + margin-bottom: 40px; +} +.offer-side__buttons { + margin-top: 40px; +} +.offer-side__btn { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-pack: center; + -ms-flex-pack: center; + justify-content: center; + width: 100%; + padding: 12px; +} +.offer-side__btn:not(:last-child) { + margin-bottom: 10px; +} +.offer-side__download { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + -webkit-box-pack: center; + -ms-flex-pack: center; + justify-content: center; + min-height: 160px; + margin-top: 40px; + padding: 20px; + border: 1px dashed #E6E7E7; + border-radius: 20px; +} +.offer-side__download span { + position: relative; + padding-left: 68px; + color: #4B4E53; + font-size: 16px; + line-height: 22px; + font-weight: 400; + -webkit-text-decoration-line: underline; + text-decoration-line: underline; +} +.offer-side__download svg { + position: absolute; + top: 50%; + left: 0; + -webkit-transform: translateY(-50%); + -ms-transform: translateY(-50%); + transform: translateY(-50%); + -webkit-transition: 0.3s; + -o-transition: 0.3s; + transition: 0.3s; +} +@media (min-width: 1200px) { + .offer-side__download:hover svg { + -webkit-transform: translateY(-50%) scale(1.2); + -ms-transform: translateY(-50%) scale(1.2); + transform: translateY(-50%) scale(1.2); + } +} + +.offer-side-item { + display: none; + position: relative; + padding: 20px 29px; + background-color: #FFFFFF; + -webkit-box-shadow: 0px 4px 28px rgba(6, 15, 26, 0.08), 0px 4px 16px rgba(6, 15, 26, 0.04); + box-shadow: 0px 4px 28px rgba(6, 15, 26, 0.08), 0px 4px 16px rgba(6, 15, 26, 0.04); + border-radius: 10px; +} +.offer-side-item__img { + height: 180px; +} +@media (min-width: 480px) { + .offer-side-item__img { + height: 300px; + } +} +.offer-side-item__img img { + width: 100%; + height: 100%; + -o-object-fit: contain; + object-fit: contain; +} +.offer-side-item__btn { + position: absolute; + bottom: 20px; + right: 20px; + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + -webkit-box-pack: center; + -ms-flex-pack: center; + justify-content: center; + width: 30px; + height: 30px; + background-color: #EDF7FF; + opacity: 0.8; + border-radius: 5px; + -webkit-transition: 0.3s; + -o-transition: 0.3s; + transition: 0.3s; +} +.offer-side-item__btn:hover { + opacity: 1; +} +.offer-side-item.active { + display: block; +} +.offer-side-item.fade { + -webkit-animation-name: fade; + animation-name: fade; + -webkit-animation-duration: 0.4s; + animation-duration: 0.4s; +} + +@-webkit-keyframes fade { + from { + opacity: 0; + } + to { + opacity: 1; + } +} + +@keyframes fade { + from { + opacity: 0; + } + to { + opacity: 1; + } +} +.offer-descr { + padding-top: 40px; + border-top: 1px solid #E6E7E7; +} +@media (min-width: 1200px) { + .offer-descr { + padding-top: 60px; + } +} +.offer-descr h3, .offer-descr__caption { + max-width: 805px; + color: #4B4E53; + font-size: 20px; + line-height: 30px; + font-weight: 500; + margin-bottom: 12px; +} +.offer-descr p, .offer-descr__text { + max-width: 805px; + color: #9A9C9F; + font-size: 14px; + line-height: 22px; + font-weight: 500; +} +@media (min-width: 1200px) { + .offer-descr p, .offer-descr__text { + font-size: 16px; + } +} +.offer-descr p:not(:last-child), .offer-descr__text:not(:last-child) { + margin-bottom: 12px; +} + +.offer-side-popup { + position: fixed; + top: 0; + left: 0; + z-index: 100; + width: 100%; + height: 100%; + display: -webkit-box; + display: -ms-flexbox; + display: flex; + padding: 0 20px; + opacity: 0; + visibility: hidden; + background-color: rgba(3, 9, 15, 0.6); + -webkit-transition: 0.3s; + -o-transition: 0.3s; + transition: 0.3s; + overflow-y: auto; +} +.offer-side-popup.active { + opacity: 1; + visibility: visible; +} +.offer-side-popup__wrap { + position: relative; + max-width: 1216px; + width: 100%; + height: 310px; + padding: 40px 20px 20px; + margin: auto; + border-radius: 10px; + -webkit-box-shadow: 0px 4px 32px rgba(14, 56, 94, 0.12); + box-shadow: 0px 4px 32px rgba(14, 56, 94, 0.12); + background-color: #FFFFFF; +} +@media (min-width: 640px) { + .offer-side-popup__wrap { + height: 80%; + } +} +@media (min-width: 1200px) { + .offer-side-popup__wrap { + padding: 70px 110px 20px; + } +} +.offer-side-popup__close { + position: absolute; + top: 0; + right: 0; + width: 60px; + height: 60px; + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + -webkit-box-pack: center; + -ms-flex-pack: center; + justify-content: center; +} +.offer-side-popup__close svg { + fill: #363A3F; + -webkit-transition: 0.3s; + -o-transition: 0.3s; + transition: 0.3s; +} +@media (min-width: 1200px) { + .offer-side-popup__close:hover svg { + fill: #42AAFF; + } +} +.offer-side-popup__cnt { + height: calc(100% - 40px); +} +@media (min-width: 1200px) { + .offer-side-popup__cnt { + height: calc(100% - 50px); + } +} +.offer-side-popup__item { + display: none; + height: 100%; +} +.offer-side-popup__item img { + width: 100%; + height: 100%; + -o-object-fit: contain; + object-fit: contain; +} +.offer-side-popup__item.active { + display: block; +} +.offer-side-popup__item.fade { + -webkit-animation-name: fade; + animation-name: fade; + -webkit-animation-duration: 0.4s; + animation-duration: 0.4s; +} +.offer-side-popup__tabs { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + margin-top: 20px; +} +@media (min-width: 640px) { + .offer-side-popup__tabs { + -webkit-box-pack: center; + -ms-flex-pack: center; + justify-content: center; + } +} +@media (min-width: 1200px) { + .offer-side-popup__tabs { + margin-top: 30px; + } +} +.offer-side-popup__tab { + position: relative; + font-weight: 600; + font-size: 14px; + line-height: 20px; + color: #9A9C9F; + -webkit-transition: 0.3s; + -o-transition: 0.3s; + transition: 0.3s; +} +.offer-side-popup__tab:not(:last-child) { + margin-right: 34px; +} +.offer-side-popup__tab:not(:last-child)::after { + content: ""; + position: absolute; + top: 0; + bottom: 0; + right: -18px; + width: 2px; + background-color: #42AAFF; + border-radius: 5px; + pointer-events: none; +} +.offer-side-popup__tab:hover, .offer-side-popup__tab.active { + color: #363A3F; +} +.offer-side-popup__sizeoff { + position: absolute; + right: 20px; + bottom: 20px; + width: 30px; + height: 30px; + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + -webkit-box-pack: center; + -ms-flex-pack: center; + justify-content: center; + background-color: #EDF7FF; + opacity: 0.8; + border-radius: 5px; + -webkit-transition: 0.3s; + -o-transition: 0.3s; + transition: 0.3s; +} +@media (min-width: 1200px) { + .offer-side-popup__sizeoff:hover { + opacity: 1; + } +} + +.img-viewer { + position: fixed; + top: 0; + left: 0; + z-index: 100; + display: -webkit-box; + display: -ms-flexbox; + display: flex; + width: 100%; + height: 100%; + padding: 0 20px; + opacity: 0; + visibility: hidden; + background: rgba(3, 9, 15, 0.6); + -webkit-backdrop-filter: blur(10px); + backdrop-filter: blur(10px); + -webkit-transition: 0.3s; + -o-transition: 0.3s; + transition: 0.3s; + overflow-y: auto; +} +@media (min-width: 1200px) { + .img-viewer { + padding: 0 100px; + } +} +.img-viewer.active { + opacity: 1; + visibility: visible; +} +.img-viewer__wrap { + position: relative; + max-width: 1010px; + width: 100%; + height: 310px; + margin: auto; + -webkit-box-shadow: 0px 4px 32px rgba(14, 56, 94, 0.12); + box-shadow: 0px 4px 32px rgba(14, 56, 94, 0.12); +} +@media (min-width: 640px) { + .img-viewer__wrap { + height: 67.5%; + } +} +.img-viewer__close { + position: absolute; + top: 0; + right: 0; + z-index: 5; + width: 60px; + height: 60px; + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + -webkit-box-pack: center; + -ms-flex-pack: center; + justify-content: center; +} +.img-viewer__close svg { + fill: #FFFFFF; + -webkit-transition: 0.3s; + -o-transition: 0.3s; + transition: 0.3s; +} +@media (min-width: 1200px) { + .img-viewer__close:hover svg { + fill: #012060; + } +} +.img-viewer__thumbs { + position: absolute; + z-index: 5; + bottom: 16px; + left: 20px; + max-width: 224px; + width: 100%; +} +@media (min-width: 640px) { + .img-viewer__thumbs { + left: 0; + right: 0; + bottom: 20px; + margin: 0 auto; + max-width: 380px; + } +} +.img-viewer__thumbs-swiper .swiper-slide { + height: 46px; + border-radius: 10px; + overflow: hidden; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + cursor: pointer; +} +@media (min-width: 640px) { + .img-viewer__thumbs-swiper .swiper-slide { + height: 80px; + } +} +.img-viewer__thumbs-swiper .swiper-slide img { + width: 100%; + height: 100%; + -o-object-fit: cover; + object-fit: cover; +} +.img-viewer__slider { + height: 100%; +} +.img-viewer__slider .swiper-button-prev, +.img-viewer__slider .swiper-button-next { + display: none; +} +@media (min-width: 1200px) { + .img-viewer__slider .swiper-button-prev, + .img-viewer__slider .swiper-button-next { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + top: 50%; + -webkit-transform: translateY(-50%); + -ms-transform: translateY(-50%); + transform: translateY(-50%); + width: 40px; + height: 40px; + border-radius: 10px; + border: 1px solid #FFFFFF; + margin: 0; + -webkit-transition: 0.3s; + -o-transition: 0.3s; + transition: 0.3s; + } +} +.img-viewer__slider .swiper-button-prev:after, +.img-viewer__slider .swiper-button-next:after { + display: none; +} +.img-viewer__slider .swiper-button-prev svg, +.img-viewer__slider .swiper-button-next svg { + stroke: #FFFFFF; + -webkit-transition: 0.3s; + -o-transition: 0.3s; + transition: 0.3s; +} +@media (min-width: 1200px) { + .img-viewer__slider .swiper-button-prev:hover, + .img-viewer__slider .swiper-button-next:hover { + background-color: #FFFFFF; + } +} +@media (min-width: 1200px) { + .img-viewer__slider .swiper-button-prev:hover svg, + .img-viewer__slider .swiper-button-next:hover svg { + stroke: #012060; + } +} +.img-viewer__slider .swiper-button-prev { + left: -70px; +} +.img-viewer__slider .swiper-button-next { + right: -70px; +} +.img-viewer__slider .swiper-button-next svg { + -webkit-transform: rotate(180deg); + -ms-transform: rotate(180deg); + transform: rotate(180deg); +} +.img-viewer__slider-swiper { + height: 100%; + border-radius: 20px; +} +.img-viewer__slider-swiper .swiper-slide { + position: relative; + border-radius: 20px; + overflow: hidden; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} +.img-viewer__slider-swiper .swiper-slide img { + width: 100%; + height: 100%; + -o-object-fit: cover; + object-fit: cover; +} +.img-viewer__slider-swiper .swiper-slide::before { + content: ""; + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + background: rgba(3, 9, 15, 0.3); +} +.img-viewer__caption { + position: absolute; + top: calc(100% + 12px); + left: 0; + right: 0; + z-index: 5; + color: #FFFFFF; + font-size: 16px; + line-height: 22px; + font-weight: 600; + text-align: center; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} +@media (min-width: 640px) { + .img-viewer__caption { + top: 102.3%; + } +} +.img-viewer__sizeoff { + position: absolute; + right: 20px; + bottom: 20px; + z-index: 1; + width: 30px; + height: 30px; + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + -webkit-box-pack: center; + -ms-flex-pack: center; + justify-content: center; + background-color: #EDF7FF; + opacity: 0.8; + border-radius: 5px; + -webkit-transition: 0.3s; + -o-transition: 0.3s; + transition: 0.3s; +} +@media (min-width: 1200px) { + .img-viewer__sizeoff:hover { + opacity: 1; + } +} + +.about { + position: relative; + background-repeat: no-repeat; + background-position: center; + background-size: cover; +} +.about::before { + content: ""; + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + background-color: rgba(3, 9, 15, 0.5); +} +.about__wrap { + position: relative; + padding-bottom: 80px; +} +@media (min-width: 1200px) { + .about__wrap { + padding-bottom: 160px; + } +} +.about__cnt { + max-width: 800px; +} +.about__title { + margin-bottom: 12px; +} +.about__descr { + max-width: 780px; + margin-bottom: 30px; + color: #FFFFFF; + font-size: 20px; + line-height: 24px; + font-weight: 500; +} +@media (min-width: 1200px) { + .about__descr { + line-height: 30px; + } +} +.about__subdescr { + max-width: 780px; + color: #FFFFFF; + font-size: 16px; + line-height: 22px; + font-weight: 500; +} + +.experience { + padding: 60px 0; +} +@media (min-width: 1200px) { + .experience { + padding: 100px 0; + } +} +.experience__title { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -ms-flex-wrap: wrap; + flex-wrap: wrap; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + max-width: 730px; + margin-bottom: 40px; + font-size: 32px; + line-height: 36px; + font-weight: 800; +} +@media (min-width: 640px) { + .experience__title { + -ms-flex-wrap: nowrap; + flex-wrap: nowrap; + } +} +@media (min-width: 1200px) { + .experience__title { + margin-bottom: 60px; + font-size: 36px; + line-height: 40px; + } +} +.experience__title span { + margin: 0px 30px 0px 0px; + font-size: 100px; + line-height: 100px; + color: #42AAFF; +} +@media (min-width: 1200px) { + .experience__title span { + font-size: 142px; + line-height: 142px; + } +} +@media (min-width: 780px) { + .experience__inner { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-pack: justify; + -ms-flex-pack: justify; + justify-content: space-between; + } +} +.experience__cnt { + margin: 0 0 40px 0; +} +@media (min-width: 780px) { + .experience__cnt { + width: 600px; + margin: 0 30px 0 0; + } +} +.experience__subtitle { + color: #40454A; + font-size: 24px; + line-height: 28px; + font-weight: 600; + margin-bottom: 16px; +} +@media (min-width: 1200px) { + .experience__subtitle { + margin-bottom: 20px; + } +} +.experience__descr, .experience__text { + color: #707477; + font-size: 16px; + line-height: 22px; + font-weight: 500; +} +.experience__text:not(:last-child) { + margin-bottom: 20px; +} +@media (min-width: 780px) { + .experience__img { + width: 568px; + } +} +@media (min-width: 1200px) { + .experience__img { + margin-top: -65px; + } +} +.experience__img img { + max-width: 100%; +} + +.sort-group { + position: relative; + width: 200px; +} +.sort-group--wide { + width: 294px; +} +.sort-group__current { + position: relative; + padding: 15px 40px 15px 20px; + border-radius: 10px; + font-weight: 600; + font-size: 14px; + line-height: 20px; + color: #4B4E53; + background-color: #EDF7FF; + cursor: pointer; + -o-text-overflow: ellipsis; + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; +} +.sort-group__current::after { + content: ""; + position: absolute; + top: 50%; + right: 20px; + -webkit-transform: translateY(-50%) rotate(0); + -ms-transform: translateY(-50%) rotate(0); + transform: translateY(-50%) rotate(0); + width: 12px; + height: 7px; + background-repeat: no-repeat; + background-image: url("data:image/svg+xml,%3Csvg width='12' height='7' viewBox='0 0 12 7' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M11 1L6 6L1 1' stroke='%2342AAFF' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E"); + -webkit-transition: 0.3s; + -o-transition: 0.3s; + transition: 0.3s; +} +.sort-group__list { + position: absolute; + top: calc(100% + 30px); + left: 0; + right: 0; + z-index: 5; + opacity: 0; + overflow: hidden; + visibility: hidden; + background-color: #FFFFFF; + -webkit-box-shadow: 0px 4px 28px rgba(14, 56, 94, 0.08), 0px 4px 16px rgba(14, 56, 94, 0.04); + box-shadow: 0px 4px 28px rgba(14, 56, 94, 0.08), 0px 4px 16px rgba(14, 56, 94, 0.04); + border-radius: 10px; + -webkit-transition: 0.3s; + -o-transition: 0.3s; + transition: 0.3s; +} +.sort-group__item { + padding: 10px 20px; + color: #4B4E53; + font-size: 14px; + line-height: 20px; + font-weight: 600; + cursor: pointer; + -webkit-transition: 0.3s; + -o-transition: 0.3s; + transition: 0.3s; +} +.sort-group__item.active { + background-color: #EDF7FF; +} +.sort-group.active .sort-group__current::after { + -webkit-transform: translateY(-50%) rotate(-180deg); + -ms-transform: translateY(-50%) rotate(-180deg); + transform: translateY(-50%) rotate(-180deg); +} +.sort-group.active .sort-group__list { + top: calc(100% + 10px); + opacity: 1; + visibility: visible; +} + +.top-catalog { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -ms-flex-wrap: wrap; + flex-wrap: wrap; + -webkit-box-align: start; + -ms-flex-align: start; + align-items: flex-start; +} +@media (min-width: 1200px) { + .top-catalog { + -ms-flex-wrap: nowrap; + flex-wrap: nowrap; + -webkit-box-pack: justify; + -ms-flex-pack: justify; + justify-content: space-between; + } +} +.top-catalog__inner { + margin: 0px 0px 40px 0px; +} +@media (min-width: 1200px) { + .top-catalog__inner { + width: 450px; + margin: 0px 30px 0px 0px; + } +} +.top-catalog__title { + margin-bottom: 20px; +} +.top-catalog__result { + color: #9A9C9F; + font-size: 16px; + line-height: 22px; + font-weight: 500; +} +.top-catalog__result span { + color: #363A3F; + font-weight: 600; +} +.top-catalog__sorts { + width: 100%; + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -ms-flex-wrap: wrap; + flex-wrap: wrap; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + margin: 0 -5px; +} +@media (min-width: 780px) { + .top-catalog__sorts { + -ms-flex-wrap: nowrap; + flex-wrap: nowrap; + margin: 0; + } +} +@media (min-width: 1200px) { + .top-catalog__sorts { + width: auto; + padding-top: 10px; + } +} +.top-catalog__sort-group { + width: calc(100% - 10px); + margin: 0 5px; +} +@media (min-width: 480px) { + .top-catalog__sort-group { + width: calc(50% - 10px); + } +} +@media (min-width: 780px) { + .top-catalog__sort-group { + width: 200px; + margin: 0; + } +} +.top-catalog__sort-group:not(:last-child) { + margin: 0px 5px 10px; +} +@media (min-width: 780px) { + .top-catalog__sort-group:not(:last-child) { + margin: 0px 10px 0px 0px; + } +} +@media (min-width: 780px) { + .top-catalog__sort-group.sort-group--wide { + width: 294px; + } +} + +.footer { + background-repeat: no-repeat; + background-size: cover; + background-position: center; +} +.footer__buttons { + position: fixed; + right: 20px; + bottom: 20px; + z-index: 10; +} +.footer__btn { + display: block; + width: 60px; + height: 60px; + border-radius: 50%; +} +.footer__btn:not(:last-child) { + margin-bottom: 10px; +} +.footer__btn-phone { + background-color: #012060; +} +.footer__btn-up { + background-color: #FFFFFF; + -webkit-box-shadow: 0px 1px 8px rgba(14, 56, 94, 0.12), 0px 0px 44px rgba(14, 56, 94, 0.12); + box-shadow: 0px 1px 8px rgba(14, 56, 94, 0.12), 0px 0px 44px rgba(14, 56, 94, 0.12); +} +@media (min-width: 1024px) { + .footer__col { + padding: 0 15px; + } +} +.footer__col:not(:first-child) { + border-top: 1px solid #FFFFFF; +} +@media (min-width: 1024px) { + .footer__col:not(:first-child) { + border-top: none; + padding-bottom: 0; + } +} +.footer__col-intro { + margin-bottom: 60px; +} +@media (min-width: 1024px) { + .footer__col-intro { + width: 350px; + margin-bottom: 0; + } +} +@media (min-width: 1024px) { + .footer__col-menu { + position: relative; + padding-bottom: 120px !important; + } +} +.footer__col-contacts .footer__caption::after { + display: none; +} +.footer__block { + display: none; +} +@media (min-width: 1024px) { + .footer__block { + display: block !important; + height: auto !important; + } +} +.footer__block .footer__list { + padding: 10px 0 30px; +} +@media (min-width: 1024px) { + .footer__block .footer__list { + padding-bottom: 0; + } +} +.footer__logo { + margin-bottom: 16px; +} +@media (min-width: 1200px) { + .footer__logo { + margin-bottom: 18px; + } +} +.footer__logo img { + max-height: 50px; +} +@media (min-width: 1200px) { + .footer__logo img { + max-height: none; + } +} +.footer__descr { + color: #E6E7E7; + font-size: 14px; + line-height: 20px; + font-weight: 500; + margin-bottom: 30px; +} +.footer__caption { + position: relative; + padding: 30px 0 30px; + color: #FFFFFF; + font-size: 18px; + line-height: 24px; + font-weight: 600; + cursor: pointer; +} +@media (min-width: 1024px) { + .footer__caption { + margin-bottom: 16px; + padding: 0; + font-size: 16px; + line-height: 20px; + cursor: auto; + } +} +.footer__caption::after { + content: ""; + position: absolute; + top: 50%; + right: 20px; + -webkit-transform: translateY(-50%); + -ms-transform: translateY(-50%); + transform: translateY(-50%); + width: 13px; + height: 7px; + background-repeat: no-repeat; + background-image: url("data:image/svg+xml,%3Csvg width='13' height='7' viewBox='0 0 13 7' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M11.3334 1L6.33337 6L1.33337 1' stroke='white' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E"); + -webkit-transition: 0.3s; + -o-transition: 0.3s; + transition: 0.3s; +} +@media (min-width: 1024px) { + .footer__caption::after { + display: none; + } +} +.footer__caption.active::after { + -webkit-transform: rotate(180deg); + -ms-transform: rotate(180deg); + transform: rotate(180deg); +} +.footer__item:not(:last-child) { + margin-bottom: 12px; +} +@media (min-width: 1024px) { + .footer__item:not(:last-child) { + margin-bottom: 8px; + } +} +.footer__link { + color: #FFFFFF; + font-size: 16px; + line-height: 22px; + font-weight: 500; + font-style: normal; + -webkit-transition: 0.3s; + -o-transition: 0.3s; + transition: 0.3s; +} +@media (min-width: 1024px) { + .footer__link { + font-size: 14px; + line-height: 20px; + } +} +@media (min-width: 1200px) { + .footer__link:hover { + color: #42AAFF; + } +} +.footer__authors { + position: absolute; + top: calc(100% + 22px); + left: 0; + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -ms-flex-direction: column; + flex-direction: column; +} +@media (min-width: 640px) { + .footer__authors { + -webkit-box-orient: horizontal; + -webkit-box-direction: normal; + -ms-flex-direction: row; + flex-direction: row; + -webkit-box-align: end; + -ms-flex-align: end; + align-items: flex-end; + } +} +@media (min-width: 1024px) { + .footer__authors { + top: auto; + bottom: 0; + } +} +.footer__author img { + max-width: 250px; + max-height: 107px; +} +.footer__author:not(:last-child) { + margin: 0px 0px 15px 0px; +} +@media (min-width: 640px) { + .footer__author:not(:last-child) { + margin: 0px 75px 0px 0px; + } +} +.footer__author-2 { + margin-bottom: 7px; +} +.footer__copy, .footer__plicy { + color: #FFFFFF; + font-size: 14px; + line-height: 20px; +} +.footer__copy { + font-weight: 400; + margin-bottom: 10px; +} +@media (min-width: 1200px) { + .footer__copy { + margin-bottom: 0; + } +} +.footer__plicy { + font-weight: 500; + -webkit-transition: 0.3s; + -o-transition: 0.3s; + transition: 0.3s; +} +@media (min-width: 1200px) { + .footer__plicy:hover { + color: #42AAFF; + } +} +.footer--mini .footer-top { + display: none; +} + +.footer-top { + background: rgba(255, 255, 255, 0.6); + -webkit-backdrop-filter: blur(6px); + backdrop-filter: blur(6px); + padding: 60px 0 80px; +} +@media (min-width: 1200px) { + .footer-top { + padding: 80px 0; + } +} +@media (min-width: 1200px) { + .footer-feedback { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-pack: justify; + -ms-flex-pack: justify; + justify-content: space-between; + } +} +.footer-feedback__cnt { + margin: 0px 0px 40px 0px; +} +@media (min-width: 1200px) { + .footer-feedback__cnt { + -ms-flex-negative: 0; + flex-shrink: 0; + width: 310px; + margin: 0px 30px 0px 0px; + } +} +.footer-feedback__title { + margin-bottom: 10px; +} +.footer-feedback__descr { + color: #4B4E53; + font-size: 18px; + line-height: 24px; + font-weight: 600; +} +@media (min-width: 1200px) { + .footer-feedback__form { + width: 804px; + } +} +.footer-feedback__row { + margin-bottom: 40px; +} +@media (min-width: 640px) { + .footer-feedback__row { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + } +} +.footer-feedback__col:nth-child(1) { + margin: 0px 0px 16px 0px; +} +@media (min-width: 640px) { + .footer-feedback__col:nth-child(1) { + width: 50%; + margin: 0px 16px 0px 0px; + } +} +@media (min-width: 1200px) { + .footer-feedback__col:nth-child(1) { + max-width: 293px; + width: 100%; + } +} +@media (min-width: 640px) { + .footer-feedback__col:nth-child(2) { + width: 50%; + } +} +@media (min-width: 1200px) { + .footer-feedback__col:nth-child(2) { + max-width: 495px; + width: 100%; + } +} +.footer-feedback__field:not(:last-child) { + margin-bottom: 16px; +} +.footer-feedback__field textarea { + height: 116px; +} +@media (min-width: 640px) { + .footer-feedback__control { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + } +} +.footer-feedback__btn { + margin: 0px 0px 30px 0px; + -webkit-box-shadow: 0px 2px 12px rgba(9, 34, 57, 0.2); + box-shadow: 0px 2px 12px rgba(9, 34, 57, 0.2); +} +@media (min-width: 640px) { + .footer-feedback__btn { + margin: 0px 30px 0px 0px; + } +} +.footer-feedback__btn.btn-animate { + -webkit-animation: btn-animate 0.5s linear infinite; + animation: btn-animate 0.5s linear infinite; + background-size: 30px 30px; + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.3) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.3) 50%, rgba(255, 255, 255, 0.3) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.3) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.3) 50%, rgba(255, 255, 255, 0.3) 75%, transparent 75%, transparent); +} +.footer-feedback__privacy { + font-size: 14px; + line-height: 20px; + font-weight: 500; +} +@media (min-width: 640px) { + .footer-feedback__privacy { + max-width: 510px; + } +} +.footer-feedback__privacy a { + font-weight: 600; + text-decoration: underline; +} + +.footer-middle, +.footer-bottom { + position: relative; +} +.footer-middle::before, +.footer-bottom::before { + content: ""; + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + background-color: rgba(3, 9, 15, 0.8); +} + +.footer-middle { + padding: 60px 0 245px; +} +@media (min-width: 640px) { + .footer-middle { + padding: 60px 0 185px; + } +} +@media (min-width: 1024px) { + .footer-middle { + padding: 60px 0; + } +} +.footer-middle__wrap { + position: relative; +} +@media (min-width: 1024px) { + .footer-middle__wrap { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-pack: justify; + -ms-flex-pack: justify; + justify-content: space-between; + margin: 0 -15px; + } +} + +@media (min-width: 1200px) { + .footer-questions { + padding-top: 30px; + border-top: 1px solid #FFFFFF; + } +} +.footer-questions__title { + color: #FFFFFF; + font-size: 16px; + line-height: 20px; + font-weight: 600; + margin-bottom: 20px; +} + +.footer__social { + margin-top: 40px; +} + +.footer-bottom { + padding: 24px 0; + border-top: 1px solid #9A9C9F; +} +@media (min-width: 1200px) { + .footer-bottom { + padding: 30px 0; + } +} +.footer-bottom__wrap { + position: relative; +} +@media (min-width: 640px) { + .footer-bottom__wrap { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-pack: justify; + -ms-flex-pack: justify; + justify-content: space-between; + } +} + +.policy-top { + background-color: #286699; + padding-bottom: 60px; +} + +.policy-cnt { + padding: 60px 0; +} +@media (min-width: 1200px) { + .policy-cnt { + padding: 100px 0; + } +} + +.policy__title { + max-width: 780px; + word-wrap: break-word; +} +.policy__inner { + max-width: 1030px; +} +.policy__inner ol { + counter-reset: my-counter; +} +.policy__inner ol li { + margin: 0; +} +.policy__inner ol li:not(:last-child) { + margin-bottom: 60px; +} +.policy__inner h2 { + position: relative; + padding-left: 42px; + margin: 0px 0px 24px 0px; + font-size: 32px; + line-height: 36px; + font-weight: 800; +} +@media (min-width: 1200px) { + .policy__inner h2 { + padding-left: 48px; + font-size: 36px; + line-height: 44px; + } +} +.policy__inner h2::before { + content: counter(my-counter) "."; + counter-increment: my-counter; + position: absolute; + top: 0; + left: 0; +} +.policy__inner p { + margin: 0; + color: #4B4E53; + font-size: 14px; + line-height: 20px; + font-weight: 500; +} +@media (min-width: 1200px) { + .policy__inner p { + font-size: 16px; + line-height: 24px; + } +} +.policy__inner p:not(:last-child) { + margin-bottom: 20px; +} + +.cookies { + position: fixed; + z-index: 150; + left: 0; + bottom: 0; + width: 100%; + background: #EDF7FF; + border-radius: 30px 30px 0px 0px; + -webkit-box-shadow: 0px -4px 28px rgba(14, 56, 94, 0.08), 0px -4px 16px rgba(14, 56, 94, 0.04); + box-shadow: 0px -4px 28px rgba(14, 56, 94, 0.08), 0px -4px 16px rgba(14, 56, 94, 0.04); + visibility: hidden; + opacity: 0; + -webkit-transition: 0.3s; + -o-transition: 0.3s; + transition: 0.3s; +} +@media (min-width: 480px) { + .cookies { + border-radius: 0px; + } +} +.cookies.active { + visibility: visible; + opacity: 1; +} +.cookies__wrap { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -ms-flex-wrap: wrap; + flex-wrap: wrap; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; +} +@media (min-width: 480px) { + .cookies__wrap { + padding: 30px 0; + } +} +@media (min-width: 780px) { + .cookies__wrap { + -ms-flex-wrap: nowrap; + flex-wrap: nowrap; + } +} +.cookies__top { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + -webkit-box-flex: 1; + -ms-flex-positive: 1; + flex-grow: 1; + margin: 0 -20px 40px; + padding: 20px; + background-color: #42AAFF; + border-radius: 30px 30px 0px 0px; +} +@media (min-width: 480px) { + .cookies__top { + -webkit-box-flex: 0; + -ms-flex-positive: 0; + flex-grow: 0; + display: block; + margin: 0; + padding: 0; + background-color: transparent; + } +} +.cookies__img { + margin-right: 20px; +} +@media (min-width: 1200px) { + .cookies__img { + margin-right: 43px; + } +} +.cookies__img img { + max-width: 40px; +} +@media (min-width: 480px) { + .cookies__img img { + max-width: 60px; + } +} +.cookies__title { + color: #FFFFFF; + font-size: 36px; + line-height: 40px; + font-weight: 800; +} +@media (min-width: 480px) { + .cookies__title { + display: none; + } +} +.cookies__descr { + -webkit-box-flex: 1; + -ms-flex-positive: 1; + flex-grow: 1; + width: 100%; +} +@media (min-width: 480px) { + .cookies__descr { + width: calc(100% - 80px); + } +} +@media (min-width: 780px) { + .cookies__descr { + width: auto; + margin-right: 30px; + } +} +.cookies__buttons { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + width: 100%; + margin: 40px 0px 0px; +} +@media (min-width: 480px) { + .cookies__buttons { + margin: 40px 0px 0px 80px; + } +} +@media (min-width: 780px) { + .cookies__buttons { + width: auto; + margin: 0; + } +} +.cookies__btn { + -webkit-box-flex: 1; + -ms-flex-positive: 1; + flex-grow: 1; + padding: 12px 48px; + margin-right: 20px; +} +@media (min-width: 480px) { + .cookies__btn { + -webkit-box-flex: 0; + -ms-flex-positive: 0; + flex-grow: 0; + } +} +.cookies__link { + color: #40454A; + font-size: 16px; + line-height: 22px; + font-weight: 700; + -webkit-text-decoration-line: underline; + text-decoration-line: underline; +} +@media (min-width: 1200px) { + .cookies__link:hover { + color: #42AAFF; + -webkit-transition: 0.3s; + -o-transition: 0.3s; + transition: 0.3s; + } +} + +.page-cookies__title { + max-width: 460px; +} +.page-cookies__inner { + max-width: 1070px; +} +.page-cookies__inner p { + margin: 0; + color: #4B4E53; + font-size: 14px; + line-height: 20px; + font-weight: 500; +} +@media (min-width: 1200px) { + .page-cookies__inner p { + font-size: 16px; + line-height: 24px; + } +} +.page-cookies__inner p:not(:last-child) { + margin-bottom: 24px; +} +.page-cookies__inner ul { + margin: 0; +} +.page-cookies__inner ul:not(:last-child) { + margin-bottom: 24px; +} +.page-cookies__inner ul li { + position: relative; + margin: 0; + padding-left: 38px; + color: #4B4E53; + font-weight: 500; + font-size: 14px; + line-height: 20px; +} +@media (min-width: 1200px) { + .page-cookies__inner ul li { + padding-left: 58px; + font-size: 16px; + line-height: 24px; + } +} +.page-cookies__inner ul li::before { + content: ""; + position: absolute; + top: 7px; + left: 20px; + width: 6px; + height: 6px; + border-radius: 50%; + background-color: #42AAFF; +} +@media (min-width: 1200px) { + .page-cookies__inner ul li::before { + top: 9px; + left: 40px; + } +} +.page-cookies__inner ul li:not(:last-child) { + margin-bottom: 8px; +} +@media (min-width: 1200px) { + .page-cookies__inner ul li:not(:last-child) { + margin-bottom: 4px; + } +} +.page-cookies__btn { + width: 100%; + margin-top: 40px; +} +@media (min-width: 480px) { + .page-cookies__btn { + width: auto; + } +} +@media (min-width: 1200px) { + .page-cookies__btn { + margin-top: 60px; + } +} + +.page-cookies-top { + padding-bottom: 60px; + background-color: #286699; +} + +.page-cookies-cnt { + padding: 60px 0 60px; +} +@media (min-width: 1200px) { + .page-cookies-cnt { + padding: 60px 0 100px; + } +} + +.favorites__descr { + max-width: 400px; + color: #FFFFFF; + font-size: 16px; + line-height: 22px; + font-weight: 500; + margin-top: 12px; +} +.favorites__sorts { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -ms-flex-wrap: wrap; + flex-wrap: wrap; + margin: 0 -5px 40px; +} +@media (min-width: 780px) { + .favorites__sorts { + -ms-flex-wrap: nowrap; + flex-wrap: nowrap; + margin: 0 0 40px; + } +} +@media (min-width: 1200px) { + .favorites__sorts { + margin: 0 0 60px; + } +} +.favorites__sort-group { + width: calc(100% - 10px); + margin: 0 5px; +} +@media (min-width: 480px) { + .favorites__sort-group { + width: calc(50% - 10px); + } +} +@media (min-width: 780px) { + .favorites__sort-group { + width: 200px; + margin: 0; + } +} +.favorites__sort-group:not(:last-child) { + margin: 0px 5px 10px; +} +@media (min-width: 780px) { + .favorites__sort-group:not(:last-child) { + margin: 0px 10px 0px 0px; + } +} +@media (min-width: 780px) { + .favorites__sort-group.sort-group--wide { + width: 294px; + } +} +.favorites__grid { + display: grid; + grid-gap: 20px; + grid-template-columns: repeat(1, 1fr); +} +@media (min-width: 540px) { + .favorites__grid { + grid-template-columns: repeat(2, 1fr); + } +} +@media (min-width: 920px) { + .favorites__grid { + grid-template-columns: repeat(3, 1fr); + } +} +@media (min-width: 1200px) { + .favorites__grid { + grid-template-columns: repeat(4, 1fr); + } +} +.favorites__items { + display: grid; + grid-gap: 20px; + grid-template-columns: repeat(1, 1fr); +} +@media (min-width: 640px) { + .favorites__items { + grid-template-columns: repeat(2, 1fr); + } +} +@media (min-width: 1024px) { + .favorites__items { + grid-template-columns: repeat(3, 1fr); + } +} + +.favorites-top { + background-color: #286699; + padding-bottom: 60px; +} +.favorites-top__link { + font-size: 32px; + line-height: 36px; + font-weight: 800; + -webkit-text-decoration-line: underline; + text-decoration-line: underline; + color: rgba(255, 255, 255, 0.6); + margin-top: 8px; +} +@media (min-width: 1200px) { + .favorites-top__link { + font-size: 48px; + line-height: 52px; + margin-top: 0; + } +} + +.favorites-cnt { + padding: 60px 0; +} +@media (min-width: 1200px) { + .favorites-cnt { + padding: 100px 0; + } +} + +.favorites-item { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + background-color: #EDF7FF; + border-radius: 10px; + padding: 25px 20px; +} +@media (min-width: 1200px) { + .favorites-item { + padding: 25px 20px; + } +} +.favorites-item__img { + -ms-flex-negative: 0; + flex-shrink: 0; + width: 80px; + margin-right: 20px; +} +.favorites-item__img img { + max-width: 100%; +} +.favorites-item__descr { + font-size: 14px; + line-height: 20px; + font-weight: 500; +} +.favorites-item__descr a { + color: #42AAFF; + font-weight: 600; +} +.favorites-item__descr img { + display: inline-block; + margin-bottom: -5px; +} + +.page-map__wrap { + overflow: hidden; +} +.page-map__map { + height: 700px; + background-color: #ccc; +} +.page-map__map [class*=copyrights-pane], +.page-map__map [class*=ground-pane] { + -webkit-filter: grayscale(1); + filter: grayscale(1); +} +.page-map__map [class*=image-with-content-content] { + width: 100% !important; +} +.page-map__inner { + position: relative; +} + +.page-map-bar { + position: absolute; + bottom: 0; + left: 0; + right: 0; + -webkit-transform: translateY(calc(100% - 70px)); + -ms-transform: translateY(calc(100% - 70px)); + transform: translateY(calc(100% - 70px)); + -webkit-box-shadow: 0px 0px 28px rgba(14, 56, 94, 0.08), 0px 0px 16px rgba(14, 56, 94, 0.08); + box-shadow: 0px 0px 28px rgba(14, 56, 94, 0.08), 0px 0px 16px rgba(14, 56, 94, 0.08); + border-radius: 10px 10px 0px 0px; + background-color: #FFFFFF; + -webkit-transition: 0.3s; + -o-transition: 0.3s; + transition: 0.3s; +} +@media (min-width: 480px) { + .page-map-bar { + left: 0; + right: auto; + width: 350px; + } +} +.page-map-bar.active { + -webkit-transform: translateY(0); + -ms-transform: translateY(0); + transform: translateY(0); +} +.page-map-bar.active .page-map-bar__close svg { + -webkit-transform: rotate(0); + -ms-transform: rotate(0); + transform: rotate(0); +} +.page-map-bar__top { + position: relative; + font-size: 20px; + line-height: 30px; + font-weight: 700; + padding: 20px 60px 20px 20px; + background-color: #EDF7FF; +} +.page-map-bar__close { + position: absolute; + top: 0; + right: 0; + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + -webkit-box-pack: center; + -ms-flex-pack: center; + justify-content: center; + width: 60px; + height: 70px; +} +.page-map-bar__close svg { + fill: #42AAFF; + -webkit-transform: rotate(45deg); + -ms-transform: rotate(45deg); + transform: rotate(45deg); + -webkit-transition: 0.3s; + -o-transition: 0.3s; + transition: 0.3s; +} +.page-map-bar__list { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -ms-flex-direction: column; + flex-direction: column; +} +.page-map-bar__item { + position: relative; + color: #4B4E53; + font-size: 14px; + line-height: 20px; + font-weight: 500; + padding: 12px 45px 12px 20px; + cursor: pointer; + -webkit-transition: 0.3s; + -o-transition: 0.3s; + transition: 0.3s; +} +.page-map-bar__item::after { + content: ""; + position: absolute; + top: 50%; + right: 23px; + -webkit-transform: translateY(-50%); + -ms-transform: translateY(-50%); + transform: translateY(-50%); + width: 12px; + height: 7px; + background-repeat: no-repeat; + background-image: url("data:image/svg+xml,%3Csvg width='12' height='7' viewBox='0 0 12 7' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M11 1L6 6L1 1' stroke='%2342AAFF' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E"); + -webkit-transition: 0.3s; + -o-transition: 0.3s; + transition: 0.3s; +} +.page-map-bar__item:not(:last-child) { + border-bottom: 1px solid #E6E7E7; +} +@media (min-width: 1200px) { + .page-map-bar__item:hover { + color: #FFFFFF; + background-color: #42AAFF; + } + .page-map-bar__item:hover::after { + background-image: url("data:image/svg+xml,%3Csvg width='12' height='7' viewBox='0 0 12 7' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M11 1L6 6L1 1' stroke='%23FFFFFF' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E"); + } +} +.page-map-bar__item.active { + -webkit-box-ordinal-group: 0; + -ms-flex-order: -1; + order: -1; + color: #FFFFFF; + background-color: #42AAFF; +} +@media (min-width: 780px) { + .page-map-bar__item.active { + -webkit-box-ordinal-group: 1; + -ms-flex-order: 0; + order: 0; + } +} +.page-map-bar__item.active::after { + background-image: url("data:image/svg+xml,%3Csvg width='12' height='7' viewBox='0 0 12 7' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M11 1L6 6L1 1' stroke='%23FFFFFF' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E"); + -webkit-transform: translateY(-50%) rotate(-90deg); + -ms-transform: translateY(-50%) rotate(-90deg); + transform: translateY(-50%) rotate(-90deg); +} +.page-map-bar .card-news { + position: absolute; + bottom: 0; + left: 20px; + right: 20px; + height: 384px; + border-radius: 10px 10px 0 0; + -webkit-transform: translateY(calc(100% + 25px)); + -ms-transform: translateY(calc(100% + 25px)); + transform: translateY(calc(100% + 25px)); + -webkit-transition: 0.3s; + -o-transition: 0.3s; + transition: 0.3s; +} +@media (min-width: 780px) { + .page-map-bar .card-news { + left: calc(100% + 10px); + right: auto; + width: 360px; + } +} +.page-map-bar .card-news.active { + -webkit-transform: translateY(0); + -ms-transform: translateY(0); + transform: translateY(0); + z-index: 1; +} +.page-map-bar .card-news__top { + min-height: 150px; +} +.page-map-bar .card-news__date span { + font-weight: 800; + font-size: 24px; + line-height: 28px; + -webkit-line-clamp: 2; +} +.page-map-bar .card-news__date span:nth-child(1) { + margin-bottom: 0; +} +.page-map-bar .card-news__date span:nth-child(n+2) { + display: none; +} +.page-map-bar .card-news__descr { + -webkit-line-clamp: 6; +} \ No newline at end of file diff --git a/public/images/NLS_logo.png b/public/images/NLS_logo.png new file mode 100644 index 0000000000000000000000000000000000000000..50bf5f568069c58bcb66bbd9693cd1455aea8d01 GIT binary patch literal 241 zcmeAS@N?(olHy`uVBq!ia0vp^dx2PkgAGWouK9fcNHG=%xjQkeJ16rJ$YDu$^mSxl z*x1kgCy^D%=PdAuEM{QfI|9OtQ?>b|fr4$GE{-7;ac?gfGBPOe9N5rUfBryYx0*k1 z$=q~>l>bg`FHaiUS}s#R{^iMxc`}zLCs!5u`1es&P}sPb(OZMXXPNs9F`$bWJYD@< J);T3K0RZedS~vgz literal 0 HcmV?d00001 diff --git a/public/images/author-nls.svg b/public/images/author-nls.svg new file mode 100644 index 0000000..dc57045 --- /dev/null +++ b/public/images/author-nls.svg @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/resources/views/admin/houses/add_img.blade.php b/resources/views/admin/houses/add_img.blade.php index 3450be0..ca02d42 100644 --- a/resources/views/admin/houses/add_img.blade.php +++ b/resources/views/admin/houses/add_img.blade.php @@ -1,4 +1,4 @@ -@extends('layout.admin', ['title' => 'Добавление картинки офиса']) +@extends('layout.admin', ['title' => 'Добавление картинки помещения']) @section('content')
@@ -7,11 +7,11 @@ -

Добавление доп.картинки офиса

+

Добавление доп.картинки помещения

diff --git a/resources/views/admin/houses/create.blade.php b/resources/views/admin/houses/create.blade.php index c85b631..3adb701 100644 --- a/resources/views/admin/houses/create.blade.php +++ b/resources/views/admin/houses/create.blade.php @@ -1,4 +1,4 @@ -@extends('layout.admin', ['title' => 'Создание офиса']) +@extends('layout.admin', ['title' => 'Создание помещения']) @section('content')
@@ -7,11 +7,11 @@ -

Создание офиса

+

Создание помещения

diff --git a/resources/views/admin/houses/edit.blade.php b/resources/views/admin/houses/edit.blade.php index deb03d5..30b033c 100644 --- a/resources/views/admin/houses/edit.blade.php +++ b/resources/views/admin/houses/edit.blade.php @@ -1,4 +1,4 @@ -@extends('layout.admin', ['title' => 'Редактирование офиса']) +@extends('layout.admin', ['title' => 'Редактирование помещения']) @section('content')
@@ -7,11 +7,11 @@ -

Редактирование офиса

+

Редактирование помещения

diff --git a/resources/views/admin/houses/form.blade.php b/resources/views/admin/houses/form.blade.php index 2ef2777..502f921 100644 --- a/resources/views/admin/houses/form.blade.php +++ b/resources/views/admin/houses/form.blade.php @@ -4,11 +4,11 @@ @method('PUT') @endisset -
+
@error('title')
{{ $message }}
@enderror -


@@ -92,7 +92,7 @@
{{ $message }}
@enderror

+ required maxlength="100" style="width: 80%" value="{{ old('description_metro') ?? $house->description_metro ?? '-' }}">


@error('address') @@ -106,7 +106,7 @@
{{ $message }}
@enderror

+ required maxlength="100" style="width: 80%" value="{{ old('okrug') ?? $house->okrug ?? '-' }}">



@@ -127,7 +127,7 @@
{{ $message }}
@enderror

+ required maxlength="100" style="width: 80%" value="{{ old('articul_area') ?? $house->articul_area ?? '-' }}">


@error('format_house') @@ -169,75 +169,75 @@
{{ $message }}
@enderror

+ required maxlength="100" style="width: 80%" value="{{ old('area') ?? $house->area ?? '0' }}">


@error('floor')
{{ $message }}
@enderror

+ required maxlength="100" style="width: 80%" value="{{ old('floor') ?? $house->floor ?? '1' }}">


@error('floor_bild')
{{ $message }}
@enderror

+ required maxlength="100" style="width: 80%" value="{{ old('floor_bild') ?? $house->floor_bild ?? '1' }}">


@error('renter')
{{ $message }}
@enderror

+ required maxlength="100" style="width: 80%" value="{{ old('renter') ?? $house->renter ?? '-' }}">


@error('price')
{{ $message }}
@enderror

+ required maxlength="100" style="width: 80%" value="{{ old('price') ?? $house->price ?? '0' }}">


@error('price_m2')
{{ $message }}
@enderror

+ required maxlength="100" style="width: 80%" value="{{ old('price_m2') ?? $house->price_m2 ?? '0' }}">


@error('rent_in_year')
{{ $message }}
@enderror

+ required maxlength="100" style="width: 80%" value="{{ old('rent_in_year') ?? $house->rent_in_year ?? '0' }}">

-
+
@error('description_house')
{{ $message }}
@enderror -

+


-@isset($house->object_plan) +object_plan)) {?>
- +
-@endisset +


-@isset($house->floor_plan) +floor_plan)) {?>
- +
-@endisset +


@@ -276,49 +276,8 @@
{{ $message }}
@enderror

- -
-@error('travel_card') -
{{ $message }}
-@enderror -

+ required maxlength="100" style="width: 80%" value="{{ old('electric_power') ?? $house->electric_power ?? '220Вт' }}">

-
-@error('passing_place') -
{{ $message }}
-@enderror -


@error('separate_input') @@ -362,34 +321,14 @@ >Нет

-
-@error('place_advertising') -
{{ $message }}
-@enderror -

- -
+
@error('hood')
{{ $message }}
@@ -411,33 +350,12 @@ >Нет

-
-@error('central_heating') -
{{ $message }}
-@enderror -

-
@error('opening_hours')
{{ $message }}
@enderror

+ required maxlength="100" style="width: 80%" value="{{ old('opening_hours') ?? $house->opening_hours ?? '-' }}">


@error('finishing') @@ -465,14 +383,14 @@
{{ $message }}
@enderror

+ required maxlength="100" style="width: 80%" value="{{ old('parking') ?? $house->parking ?? '0' }}">


@error('scheme_deal')
{{ $message }}
@enderror

+ required maxlength="100" style="width: 80%" value="{{ old('scheme_deal') ?? $house->scheme_deal ?? '-' }}">




-
-@error('sos_obj') -
{{ $message }}
-@enderror -

-
@error('type_plan')
{{ $message }}
@@ -524,12 +421,12 @@ >Закрытая

-
+
@error('description_2')
{{ $message }}
@enderror -

+


diff --git a/resources/views/admin/houses/index.blade.php b/resources/views/admin/houses/index.blade.php index 9de13e1..3978317 100644 --- a/resources/views/admin/houses/index.blade.php +++ b/resources/views/admin/houses/index.blade.php @@ -7,23 +7,23 @@ -

Офисы

+

Помещения

- Создать офис + Создать помещение

- + diff --git a/resources/views/admin/houses/view_img.blade.php b/resources/views/admin/houses/view_img.blade.php index d2672d6..72b0b0d 100644 --- a/resources/views/admin/houses/view_img.blade.php +++ b/resources/views/admin/houses/view_img.blade.php @@ -1,4 +1,4 @@ -@extends('layout.admin', ['title' => 'Дополнительные картинки офиса']) +@extends('layout.admin', ['title' => 'Дополнительные картинки помещения']) @section('content')
@@ -7,16 +7,16 @@ -

Дополнительные картинки офиса

+

Дополнительные картинки помещения

-

ID: {{$house->id}} Название офиса: {{$house->title}}



+

ID: {{$house->id}} Название помещения: {{$house->title}}



Дополнительные картинки


Добавить картинку в галерею

diff --git a/resources/views/admin/index.blade.php b/resources/views/admin/index.blade.php index ce3e5b4..e0d7694 100644 --- a/resources/views/admin/index.blade.php +++ b/resources/views/admin/index.blade.php @@ -25,7 +25,7 @@ - +
diff --git a/resources/views/errors/401.blade.php b/resources/views/errors/401.blade.php new file mode 100644 index 0000000..5c586db --- /dev/null +++ b/resources/views/errors/401.blade.php @@ -0,0 +1,5 @@ +@extends('errors::minimal') + +@section('title', __('Unauthorized')) +@section('code', '401') +@section('message', __('Unauthorized')) diff --git a/resources/views/errors/402.blade.php b/resources/views/errors/402.blade.php new file mode 100644 index 0000000..3bc23ef --- /dev/null +++ b/resources/views/errors/402.blade.php @@ -0,0 +1,5 @@ +@extends('errors::minimal') + +@section('title', __('Payment Required')) +@section('code', '402') +@section('message', __('Payment Required')) diff --git a/resources/views/errors/403.blade.php b/resources/views/errors/403.blade.php new file mode 100644 index 0000000..a5506f0 --- /dev/null +++ b/resources/views/errors/403.blade.php @@ -0,0 +1,5 @@ +@extends('errors::minimal') + +@section('title', __('Forbidden')) +@section('code', '403') +@section('message', __($exception->getMessage() ?: 'Forbidden')) diff --git a/resources/views/errors/419.blade.php b/resources/views/errors/419.blade.php new file mode 100644 index 0000000..c09216e --- /dev/null +++ b/resources/views/errors/419.blade.php @@ -0,0 +1,5 @@ +@extends('errors::minimal') + +@section('title', __('Page Expired')) +@section('code', '419') +@section('message', __('Page Expired')) diff --git a/resources/views/errors/429.blade.php b/resources/views/errors/429.blade.php new file mode 100644 index 0000000..f01b07b --- /dev/null +++ b/resources/views/errors/429.blade.php @@ -0,0 +1,5 @@ +@extends('errors::minimal') + +@section('title', __('Too Many Requests')) +@section('code', '429') +@section('message', __('Too Many Requests')) diff --git a/resources/views/errors/500.blade.php b/resources/views/errors/500.blade.php new file mode 100644 index 0000000..d9e95d9 --- /dev/null +++ b/resources/views/errors/500.blade.php @@ -0,0 +1,5 @@ +@extends('errors::minimal') + +@section('title', __('Server Error')) +@section('code', '500') +@section('message', __('Server Error')) diff --git a/resources/views/errors/503.blade.php b/resources/views/errors/503.blade.php new file mode 100644 index 0000000..c5a9dde --- /dev/null +++ b/resources/views/errors/503.blade.php @@ -0,0 +1,5 @@ +@extends('errors::minimal') + +@section('title', __('Service Unavailable')) +@section('code', '503') +@section('message', __('Service Unavailable')) diff --git a/resources/views/errors/layout.blade.php b/resources/views/errors/layout.blade.php new file mode 100644 index 0000000..019c2cd --- /dev/null +++ b/resources/views/errors/layout.blade.php @@ -0,0 +1,53 @@ + + + + + + + @yield('title') + + + + + +
+
+
+ @yield('message') +
+
+
+ + diff --git a/resources/views/errors/minimal.blade.php b/resources/views/errors/minimal.blade.php new file mode 100644 index 0000000..db69f25 --- /dev/null +++ b/resources/views/errors/minimal.blade.php @@ -0,0 +1,34 @@ + + + + + + + @yield('title') + + + + + + +
+
+
+
+ @yield('code') +
+ +
+ @yield('message') +
+
+
+
+ + diff --git a/resources/views/house/pdf.blade.php b/resources/views/house/pdf.blade.php new file mode 100644 index 0000000..5327e01 --- /dev/null +++ b/resources/views/house/pdf.blade.php @@ -0,0 +1,72 @@ + + + + + + + + {{$house[0]->title}} + + + + + + +
+ Страница помещения +
+ +

{{ $house[0]->title }} {{ $house[0]->address }}

+
+
Метро: {{ $house[0]->metro }}
+
Доступность метро: {{ $house[0]->description_metro }}
+
Округ: {{ $house[0]->okrug }}
+ format_house == "Продажа") {?> +
Цена: {{ $house[0]->price }} ₽
+ +
Аренда в год за м2: {{ $house[0]->rent_in_year }} ₽
+
Аренда в месяц: {{ $house[0]->price }} ₽
+ +
Схема сделки: {{ $house[0]->scheme_deal }}
Площадь, м2: {{ $house[0]->area }}
+
Площадь, м2: {{ $house[0]->area }}
+
Адрес: {{ $house[0]->address }}
+
Тип объекта: {{ $house[0]->typearea->name_type }}
+
Формат: {{ $house[0]->format_house }}
+
Этаж: {{ $house[0]->floor }} эт.
+
Этажность здания: {{ $house[0]->floor_bild }} эт.
+
Арендаторы: {{ $house[0]->renter }}
+ +
Тип планировки: {{ $house[0]->type_plan }}
+
Наличие зоны разгрузки: uploading_area == 1) {?>ЕстьНет
+
Электрическая мощность: {{ $house[0]->electric_power }} кВт
+ + +
Отдельный вход: separate_input == 1) {?>ЕстьНет
+
Витрины: shop_windows == 1) {?>ЕстьНет
+ + +
Вытяжка: hood == 1) {?>ЕстьНет
+ +
Возможные часы работы: {{ $house[0]->opening_hours }}
+
Отделка: finishing == 1) {?>ЕстьНет
+
Парковка: {{ $house[0]->parking }} мест
+
Описание: {{ $house[0]->description_2 }}
+
+ +
+ Описание объекта + {{ $house[0]->description_house }} +
+
+
+ + + diff --git a/resources/views/house/post.blade.php b/resources/views/house/post.blade.php index 564c884..290492d 100644 --- a/resources/views/house/post.blade.php +++ b/resources/views/house/post.blade.php @@ -1,4 +1,4 @@ -@extends('layout.site', ['title' => $house->title]) +@extends('layout.site', ['title' => $title]) @section('custom_js') @include('js.maps_js') @@ -170,7 +170,8 @@ Позвонить -
Скачать презентацию + + Скачать презентацию @@ -185,18 +186,18 @@
Этаж{{ $house->floor }} эт.
Этажность здания{{ $house->floor_bild }} эт.
Арендаторы{{ $house->renter }}
-
Состояние объекта{{ $house->sos_obj }}
+
Тип планировки{{ $house->type_plan }}
Наличие зоны разгрузкиuploading_area == 1) {?>ЕстьНет
Электрическая мощность{{ $house->electric_power }} кВт
-
Проездноеtravel_card == 1) {?>ЕстьНет
-
Проходное местоpassing_place == 1) {?>ЕстьНет
+ +
Отдельный входseparate_input == 1) {?>ЕстьНет
Витриныshop_windows == 1) {?>ЕстьНет
-
Место для рекламыplace_advertising == 1) {?>ЕстьНет
-
Окна{{ $house->windows }}
+ +
Вытяжкаhood == 1) {?>ЕстьНет
-
Центральное отоплениеcentral_hearing == 1) {?>ЕстьНет
+
Возможные часы работы{{ $house->opening_hours }}
Отделкаfinishing == 1) {?>ЕстьНет
Парковка{{ $house->parking }} мест
diff --git a/resources/views/layout/admin.blade.php b/resources/views/layout/admin.blade.php index f8bda25..6f4fca7 100644 --- a/resources/views/layout/admin.blade.php +++ b/resources/views/layout/admin.blade.php @@ -13,7 +13,7 @@ - + + + + +
Фото IDНазвание офисаНазвание помещения Жилой комплекс Адрес Дата создания
+ + + + + + diff --git a/resources/views/vendor/mail/html/message.blade.php b/resources/views/vendor/mail/html/message.blade.php new file mode 100644 index 0000000..f272460 --- /dev/null +++ b/resources/views/vendor/mail/html/message.blade.php @@ -0,0 +1,27 @@ + +{{-- Header --}} + + +{{ config('app.name') }} + + + +{{-- Body --}} +{{ $slot }} + +{{-- Subcopy --}} +@isset($subcopy) + + +{{ $subcopy }} + + +@endisset + +{{-- Footer --}} + + +© {{ date('Y') }} {{ config('app.name') }}. @lang('All rights reserved.') + + + diff --git a/resources/views/vendor/mail/html/panel.blade.php b/resources/views/vendor/mail/html/panel.blade.php new file mode 100644 index 0000000..2975a60 --- /dev/null +++ b/resources/views/vendor/mail/html/panel.blade.php @@ -0,0 +1,14 @@ + + + + + + diff --git a/resources/views/vendor/mail/html/subcopy.blade.php b/resources/views/vendor/mail/html/subcopy.blade.php new file mode 100644 index 0000000..790ce6c --- /dev/null +++ b/resources/views/vendor/mail/html/subcopy.blade.php @@ -0,0 +1,7 @@ + + + + + diff --git a/resources/views/vendor/mail/html/table.blade.php b/resources/views/vendor/mail/html/table.blade.php new file mode 100644 index 0000000..a5f3348 --- /dev/null +++ b/resources/views/vendor/mail/html/table.blade.php @@ -0,0 +1,3 @@ +
+{{ Illuminate\Mail\Markdown::parse($slot) }} +
diff --git a/resources/views/vendor/mail/html/themes/default.css b/resources/views/vendor/mail/html/themes/default.css new file mode 100644 index 0000000..2483b11 --- /dev/null +++ b/resources/views/vendor/mail/html/themes/default.css @@ -0,0 +1,290 @@ +/* Base */ + +body, +body *:not(html):not(style):not(br):not(tr):not(code) { + box-sizing: border-box; + font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif, + 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; + position: relative; +} + +body { + -webkit-text-size-adjust: none; + background-color: #ffffff; + color: #718096; + height: 100%; + line-height: 1.4; + margin: 0; + padding: 0; + width: 100% !important; +} + +p, +ul, +ol, +blockquote { + line-height: 1.4; + text-align: left; +} + +a { + color: #3869d4; +} + +a img { + border: none; +} + +/* Typography */ + +h1 { + color: #3d4852; + font-size: 18px; + font-weight: bold; + margin-top: 0; + text-align: left; +} + +h2 { + font-size: 16px; + font-weight: bold; + margin-top: 0; + text-align: left; +} + +h3 { + font-size: 14px; + font-weight: bold; + margin-top: 0; + text-align: left; +} + +p { + font-size: 16px; + line-height: 1.5em; + margin-top: 0; + text-align: left; +} + +p.sub { + font-size: 12px; +} + +img { + max-width: 100%; +} + +/* Layout */ + +.wrapper { + -premailer-cellpadding: 0; + -premailer-cellspacing: 0; + -premailer-width: 100%; + background-color: #edf2f7; + margin: 0; + padding: 0; + width: 100%; +} + +.content { + -premailer-cellpadding: 0; + -premailer-cellspacing: 0; + -premailer-width: 100%; + margin: 0; + padding: 0; + width: 100%; +} + +/* Header */ + +.header { + padding: 25px 0; + text-align: center; +} + +.header a { + color: #3d4852; + font-size: 19px; + font-weight: bold; + text-decoration: none; +} + +/* Logo */ + +.logo { + height: 75px; + max-height: 75px; + width: 75px; +} + +/* Body */ + +.body { + -premailer-cellpadding: 0; + -premailer-cellspacing: 0; + -premailer-width: 100%; + background-color: #edf2f7; + border-bottom: 1px solid #edf2f7; + border-top: 1px solid #edf2f7; + margin: 0; + padding: 0; + width: 100%; +} + +.inner-body { + -premailer-cellpadding: 0; + -premailer-cellspacing: 0; + -premailer-width: 570px; + background-color: #ffffff; + border-color: #e8e5ef; + border-radius: 2px; + border-width: 1px; + box-shadow: 0 2px 0 rgba(0, 0, 150, 0.025), 2px 4px 0 rgba(0, 0, 150, 0.015); + margin: 0 auto; + padding: 0; + width: 570px; +} + +/* Subcopy */ + +.subcopy { + border-top: 1px solid #e8e5ef; + margin-top: 25px; + padding-top: 25px; +} + +.subcopy p { + font-size: 14px; +} + +/* Footer */ + +.footer { + -premailer-cellpadding: 0; + -premailer-cellspacing: 0; + -premailer-width: 570px; + margin: 0 auto; + padding: 0; + text-align: center; + width: 570px; +} + +.footer p { + color: #b0adc5; + font-size: 12px; + text-align: center; +} + +.footer a { + color: #b0adc5; + text-decoration: underline; +} + +/* Tables */ + +.table table { + -premailer-cellpadding: 0; + -premailer-cellspacing: 0; + -premailer-width: 100%; + margin: 30px auto; + width: 100%; +} + +.table th { + border-bottom: 1px solid #edeff2; + margin: 0; + padding-bottom: 8px; +} + +.table td { + color: #74787e; + font-size: 15px; + line-height: 18px; + margin: 0; + padding: 10px 0; +} + +.content-cell { + max-width: 100vw; + padding: 32px; +} + +/* Buttons */ + +.action { + -premailer-cellpadding: 0; + -premailer-cellspacing: 0; + -premailer-width: 100%; + margin: 30px auto; + padding: 0; + text-align: center; + width: 100%; +} + +.button { + -webkit-text-size-adjust: none; + border-radius: 4px; + color: #fff; + display: inline-block; + overflow: hidden; + text-decoration: none; +} + +.button-blue, +.button-primary { + background-color: #2d3748; + border-bottom: 8px solid #2d3748; + border-left: 18px solid #2d3748; + border-right: 18px solid #2d3748; + border-top: 8px solid #2d3748; +} + +.button-green, +.button-success { + background-color: #48bb78; + border-bottom: 8px solid #48bb78; + border-left: 18px solid #48bb78; + border-right: 18px solid #48bb78; + border-top: 8px solid #48bb78; +} + +.button-red, +.button-error { + background-color: #e53e3e; + border-bottom: 8px solid #e53e3e; + border-left: 18px solid #e53e3e; + border-right: 18px solid #e53e3e; + border-top: 8px solid #e53e3e; +} + +/* Panels */ + +.panel { + border-left: #2d3748 solid 4px; + margin: 21px 0; +} + +.panel-content { + background-color: #edf2f7; + color: #718096; + padding: 16px; +} + +.panel-content p { + color: #718096; +} + +.panel-item { + padding: 0; +} + +.panel-item p:last-of-type { + margin-bottom: 0; + padding-bottom: 0; +} + +/* Utilities */ + +.break-all { + word-break: break-all; +} diff --git a/resources/views/vendor/mail/text/button.blade.php b/resources/views/vendor/mail/text/button.blade.php new file mode 100644 index 0000000..97444eb --- /dev/null +++ b/resources/views/vendor/mail/text/button.blade.php @@ -0,0 +1 @@ +{{ $slot }}: {{ $url }} diff --git a/resources/views/vendor/mail/text/footer.blade.php b/resources/views/vendor/mail/text/footer.blade.php new file mode 100644 index 0000000..3338f62 --- /dev/null +++ b/resources/views/vendor/mail/text/footer.blade.php @@ -0,0 +1 @@ +{{ $slot }} diff --git a/resources/views/vendor/mail/text/header.blade.php b/resources/views/vendor/mail/text/header.blade.php new file mode 100644 index 0000000..aaa3e57 --- /dev/null +++ b/resources/views/vendor/mail/text/header.blade.php @@ -0,0 +1 @@ +[{{ $slot }}]({{ $url }}) diff --git a/resources/views/vendor/mail/text/layout.blade.php b/resources/views/vendor/mail/text/layout.blade.php new file mode 100644 index 0000000..9378baa --- /dev/null +++ b/resources/views/vendor/mail/text/layout.blade.php @@ -0,0 +1,9 @@ +{!! strip_tags($header) !!} + +{!! strip_tags($slot) !!} +@isset($subcopy) + +{!! strip_tags($subcopy) !!} +@endisset + +{!! strip_tags($footer) !!} diff --git a/resources/views/vendor/mail/text/message.blade.php b/resources/views/vendor/mail/text/message.blade.php new file mode 100644 index 0000000..80bce21 --- /dev/null +++ b/resources/views/vendor/mail/text/message.blade.php @@ -0,0 +1,27 @@ + + {{-- Header --}} + + + {{ config('app.name') }} + + + + {{-- Body --}} + {{ $slot }} + + {{-- Subcopy --}} + @isset($subcopy) + + + {{ $subcopy }} + + + @endisset + + {{-- Footer --}} + + + © {{ date('Y') }} {{ config('app.name') }}. @lang('All rights reserved.') + + + diff --git a/resources/views/vendor/mail/text/panel.blade.php b/resources/views/vendor/mail/text/panel.blade.php new file mode 100644 index 0000000..3338f62 --- /dev/null +++ b/resources/views/vendor/mail/text/panel.blade.php @@ -0,0 +1 @@ +{{ $slot }} diff --git a/resources/views/vendor/mail/text/subcopy.blade.php b/resources/views/vendor/mail/text/subcopy.blade.php new file mode 100644 index 0000000..3338f62 --- /dev/null +++ b/resources/views/vendor/mail/text/subcopy.blade.php @@ -0,0 +1 @@ +{{ $slot }} diff --git a/resources/views/vendor/mail/text/table.blade.php b/resources/views/vendor/mail/text/table.blade.php new file mode 100644 index 0000000..3338f62 --- /dev/null +++ b/resources/views/vendor/mail/text/table.blade.php @@ -0,0 +1 @@ +{{ $slot }} diff --git a/resources/views/vendor/notifications/email.blade.php b/resources/views/vendor/notifications/email.blade.php new file mode 100644 index 0000000..678e259 --- /dev/null +++ b/resources/views/vendor/notifications/email.blade.php @@ -0,0 +1,58 @@ + +{{-- Greeting --}} +@if (! empty($greeting)) +# {{ $greeting }} +@else +@if ($level === 'error') +# @lang('Whoops!') +@else +# @lang('Hello!') +@endif +@endif + +{{-- Intro Lines --}} +@foreach ($introLines as $line) +{{ $line }} + +@endforeach + +{{-- Action Button --}} +@isset($actionText) + $level, + default => 'primary', + }; +?> + +{{ $actionText }} + +@endisset + +{{-- Outro Lines --}} +@foreach ($outroLines as $line) +{{ $line }} + +@endforeach + +{{-- Salutation --}} +@if (! empty($salutation)) +{{ $salutation }} +@else +@lang('Regards'),
+{{ config('app.name') }} +@endif + +{{-- Subcopy --}} +@isset($actionText) + +@lang( + "If you're having trouble clicking the \":actionText\" button, copy and paste the URL below\n". + 'into your web browser:', + [ + 'actionText' => $actionText, + ] +) [{{ $displayableActionUrl }}]({{ $actionUrl }}) + +@endisset +
diff --git a/resources/views/vendor/pagination/bootstrap-4.blade.php b/resources/views/vendor/pagination/bootstrap-4.blade.php new file mode 100644 index 0000000..63c6f56 --- /dev/null +++ b/resources/views/vendor/pagination/bootstrap-4.blade.php @@ -0,0 +1,46 @@ +@if ($paginator->hasPages()) + +@endif diff --git a/resources/views/vendor/pagination/bootstrap-5.blade.php b/resources/views/vendor/pagination/bootstrap-5.blade.php new file mode 100644 index 0000000..a1795a4 --- /dev/null +++ b/resources/views/vendor/pagination/bootstrap-5.blade.php @@ -0,0 +1,88 @@ +@if ($paginator->hasPages()) + +@endif diff --git a/resources/views/vendor/pagination/default.blade.php b/resources/views/vendor/pagination/default.blade.php new file mode 100644 index 0000000..0db70b5 --- /dev/null +++ b/resources/views/vendor/pagination/default.blade.php @@ -0,0 +1,46 @@ +@if ($paginator->hasPages()) + +@endif diff --git a/resources/views/vendor/pagination/semantic-ui.blade.php b/resources/views/vendor/pagination/semantic-ui.blade.php new file mode 100644 index 0000000..ef0dbb1 --- /dev/null +++ b/resources/views/vendor/pagination/semantic-ui.blade.php @@ -0,0 +1,36 @@ +@if ($paginator->hasPages()) + +@endif diff --git a/resources/views/vendor/pagination/simple-bootstrap-4.blade.php b/resources/views/vendor/pagination/simple-bootstrap-4.blade.php new file mode 100644 index 0000000..4bb4917 --- /dev/null +++ b/resources/views/vendor/pagination/simple-bootstrap-4.blade.php @@ -0,0 +1,27 @@ +@if ($paginator->hasPages()) + +@endif diff --git a/resources/views/vendor/pagination/simple-bootstrap-5.blade.php b/resources/views/vendor/pagination/simple-bootstrap-5.blade.php new file mode 100644 index 0000000..a89005e --- /dev/null +++ b/resources/views/vendor/pagination/simple-bootstrap-5.blade.php @@ -0,0 +1,29 @@ +@if ($paginator->hasPages()) + +@endif diff --git a/resources/views/vendor/pagination/simple-default.blade.php b/resources/views/vendor/pagination/simple-default.blade.php new file mode 100644 index 0000000..36bdbc1 --- /dev/null +++ b/resources/views/vendor/pagination/simple-default.blade.php @@ -0,0 +1,19 @@ +@if ($paginator->hasPages()) + +@endif diff --git a/resources/views/vendor/pagination/simple-tailwind.blade.php b/resources/views/vendor/pagination/simple-tailwind.blade.php new file mode 100644 index 0000000..6872cca --- /dev/null +++ b/resources/views/vendor/pagination/simple-tailwind.blade.php @@ -0,0 +1,25 @@ +@if ($paginator->hasPages()) + +@endif diff --git a/resources/views/vendor/pagination/tailwind.blade.php b/resources/views/vendor/pagination/tailwind.blade.php new file mode 100644 index 0000000..5bf323b --- /dev/null +++ b/resources/views/vendor/pagination/tailwind.blade.php @@ -0,0 +1,106 @@ +@if ($paginator->hasPages()) + +@endif diff --git a/routes/web.php b/routes/web.php index abcbaa2..0fc1ae4 100644 --- a/routes/web.php +++ b/routes/web.php @@ -59,6 +59,9 @@ Route::get('conf', function () { //Детальная страница предложения недвижимости Route::get('offer/{house:id}', [MainController::class, 'offer'])->name('offer'); +//pdf-страница недвижимости +Route::get('pdf/{house:id}', [MainController::class, 'generate_PDF'])->name('pdf'); + //Детальная страница новостей Route::get('detail-new/{news:id}', [MainController::class, 'DetailNew'])->name('new'); diff --git a/sail b/sail new file mode 100644 index 0000000..a01790b --- /dev/null +++ b/sail @@ -0,0 +1,516 @@ +#!/usr/bin/env bash + +UNAMEOUT="$(uname -s)" + +# Verify operating system is supported... +case "${UNAMEOUT}" in + Linux*) MACHINE=linux;; + Darwin*) MACHINE=mac;; + *) MACHINE="UNKNOWN" +esac + +if [ "$MACHINE" == "UNKNOWN" ]; then + echo "Unsupported operating system [$(uname -s)]. Laravel Sail supports macOS, Linux, and Windows (WSL2)." >&2 + + exit 1 +fi + +# Determine if stdout is a terminal... +if test -t 1; then + # Determine if colors are supported... + ncolors=$(tput colors) + + if test -n "$ncolors" && test "$ncolors" -ge 8; then + BOLD="$(tput bold)" + YELLOW="$(tput setaf 3)" + GREEN="$(tput setaf 2)" + NC="$(tput sgr0)" + fi +fi + +# Function that prints the available commands... +function display_help { + echo "Laravel Sail" + echo + echo "${YELLOW}Usage:${NC}" >&2 + echo " sail COMMAND [options] [arguments]" + echo + echo "Unknown commands are passed to the docker-compose binary." + echo + echo "${YELLOW}docker-compose Commands:${NC}" + echo " ${GREEN}sail up${NC} Start the application" + echo " ${GREEN}sail up -d${NC} Start the application in the background" + echo " ${GREEN}sail stop${NC} Stop the application" + echo " ${GREEN}sail restart${NC} Restart the application" + echo " ${GREEN}sail ps${NC} Display the status of all containers" + echo + echo "${YELLOW}Artisan Commands:${NC}" + echo " ${GREEN}sail artisan ...${NC} Run an Artisan command" + echo " ${GREEN}sail artisan queue:work${NC}" + echo + echo "${YELLOW}PHP Commands:${NC}" + echo " ${GREEN}sail php ...${NC} Run a snippet of PHP code" + echo " ${GREEN}sail php -v${NC}" + echo + echo "${YELLOW}Composer Commands:${NC}" + echo " ${GREEN}sail composer ...${NC} Run a Composer command" + echo " ${GREEN}sail composer require laravel/sanctum${NC}" + echo + echo "${YELLOW}Node Commands:${NC}" + echo " ${GREEN}sail node ...${NC} Run a Node command" + echo " ${GREEN}sail node --version${NC}" + echo + echo "${YELLOW}NPM Commands:${NC}" + echo " ${GREEN}sail npm ...${NC} Run a npm command" + echo " ${GREEN}sail npx${NC} Run a npx command" + echo " ${GREEN}sail npm run prod${NC}" + echo + echo "${YELLOW}Yarn Commands:${NC}" + echo " ${GREEN}sail yarn ...${NC} Run a Yarn command" + echo " ${GREEN}sail yarn run prod${NC}" + echo + echo "${YELLOW}Database Commands:${NC}" + echo " ${GREEN}sail mysql${NC} Start a MySQL CLI session within the 'mysql' container" + echo " ${GREEN}sail mariadb${NC} Start a MySQL CLI session within the 'mariadb' container" + echo " ${GREEN}sail psql${NC} Start a PostgreSQL CLI session within the 'pgsql' container" + echo " ${GREEN}sail redis${NC} Start a Redis CLI session within the 'redis' container" + echo + echo "${YELLOW}Debugging:${NC}" + echo " ${GREEN}sail debug ...${NC} Run an Artisan command in debug mode" + echo " ${GREEN}sail debug queue:work${NC}" + echo + echo "${YELLOW}Running Tests:${NC}" + echo " ${GREEN}sail test${NC} Run the PHPUnit tests via the Artisan test command" + echo " ${GREEN}sail phpunit ...${NC} Run PHPUnit" + echo " ${GREEN}sail pest ...${NC} Run Pest" + echo " ${GREEN}sail pint ...${NC} Run Pint" + echo " ${GREEN}sail dusk${NC} Run the Dusk tests (Requires the laravel/dusk package)" + echo " ${GREEN}sail dusk:fails${NC} Re-run previously failed Dusk tests (Requires the laravel/dusk package)" + echo + echo "${YELLOW}Container CLI:${NC}" + echo " ${GREEN}sail shell${NC} Start a shell session within the application container" + echo " ${GREEN}sail bash${NC} Alias for 'sail shell'" + echo " ${GREEN}sail root-shell${NC} Start a root shell session within the application container" + echo " ${GREEN}sail root-bash${NC} Alias for 'sail root-shell'" + echo " ${GREEN}sail tinker${NC} Start a new Laravel Tinker session" + echo + echo "${YELLOW}Sharing:${NC}" + echo " ${GREEN}sail share${NC} Share the application publicly via a temporary URL" + echo " ${GREEN}sail open${NC} Open the site in your browser" + echo + echo "${YELLOW}Binaries:${NC}" + echo " ${GREEN}sail bin ...${NC} Run Composer binary scripts from the vendor/bin directory" + echo + echo "${YELLOW}Customization:${NC}" + echo " ${GREEN}sail artisan sail:publish${NC} Publish the Sail configuration files" + echo " ${GREEN}sail build --no-cache${NC} Rebuild all of the Sail containers" + + exit 1 +} + +# Proxy the "help" command... +if [ $# -gt 0 ]; then + if [ "$1" == "help" ] || [ "$1" == "-h" ] || [ "$1" == "-help" ] || [ "$1" == "--help" ]; then + display_help + fi +else + display_help +fi + +# Source the ".env" file so Laravel's environment variables are available... +if [ ! -z "$APP_ENV" ] && [ -f ./.env.$APP_ENV ]; then + source ./.env.$APP_ENV; +elif [ -f ./.env ]; then + source ./.env; +fi + +# Define environment variables... +export APP_PORT=${APP_PORT:-80} +export APP_SERVICE=${APP_SERVICE:-"laravel.test"} +export DB_PORT=${DB_PORT:-3306} +export WWWUSER=${WWWUSER:-$UID} +export WWWGROUP=${WWWGROUP:-$(id -g)} + +export SAIL_FILES=${SAIL_FILES:-""} +export SAIL_SHARE_DASHBOARD=${SAIL_SHARE_DASHBOARD:-4040} +export SAIL_SHARE_SERVER_HOST=${SAIL_SHARE_SERVER_HOST:-"laravel-sail.site"} +export SAIL_SHARE_SERVER_PORT=${SAIL_SHARE_SERVER_PORT:-8080} +export SAIL_SHARE_SUBDOMAIN=${SAIL_SHARE_SUBDOMAIN:-""} +export SAIL_SHARE_DOMAIN=${SAIL_SHARE_DOMAIN:-"$SAIL_SHARE_SERVER_HOST"} + +# Function that outputs Sail is not running... +function sail_is_not_running { + echo "${BOLD}Sail is not running.${NC}" >&2 + echo "" >&2 + echo "${BOLD}You may Sail using the following commands:${NC} './vendor/bin/sail up' or './vendor/bin/sail up -d'" >&2 + + exit 1 +} + +# Define Docker Compose command prefix... +docker compose &> /dev/null +if [ $? == 0 ]; then + DOCKER_COMPOSE=(docker compose) +else + DOCKER_COMPOSE=(docker-compose) +fi + +if [ -n "$SAIL_FILES" ]; then + # Convert SAIL_FILES to an array... + IFS=':' read -ra SAIL_FILES <<< "$SAIL_FILES" + + for FILE in "${SAIL_FILES[@]}"; do + if [ -f "$FILE" ]; then + DOCKER_COMPOSE+=(-f "$FILE") + else + echo "${BOLD}Unable to find Docker Compose file: '${FILE}'${NC}" >&2 + + exit 1 + fi + done +fi + +EXEC="yes" + +if [ -z "$SAIL_SKIP_CHECKS" ]; then + # Ensure that Docker is running... + if ! docker info > /dev/null 2>&1; then + echo "${BOLD}Docker is not running.${NC}" >&2 + + exit 1 + fi + + # Determine if Sail is currently up... + if "${DOCKER_COMPOSE[@]}" ps "$APP_SERVICE" 2>&1 | grep 'Exit\|exited'; then + echo "${BOLD}Shutting down old Sail processes...${NC}" >&2 + + "${DOCKER_COMPOSE[@]}" down > /dev/null 2>&1 + + EXEC="no" + elif [ -z "$("${DOCKER_COMPOSE[@]}" ps -q)" ]; then + EXEC="no" + fi +fi + +ARGS=() + +# Proxy PHP commands to the "php" binary on the application container... +if [ "$1" == "php" ]; then + shift 1 + + if [ "$EXEC" == "yes" ]; then + ARGS+=(exec -u sail) + [ ! -t 0 ] && ARGS+=(-T) + ARGS+=("$APP_SERVICE" "php" "$@") + else + sail_is_not_running + fi + +# Proxy vendor binary commands on the application container... +elif [ "$1" == "bin" ]; then + shift 1 + + if [ "$EXEC" == "yes" ]; then + ARGS+=(exec -u sail) + [ ! -t 0 ] && ARGS+=(-T) + ARGS+=("$APP_SERVICE" ./vendor/bin/"$@") + else + sail_is_not_running + fi + +# Proxy docker-compose commands to the docker-compose binary on the application container... +elif [ "$1" == "docker-compose" ]; then + shift 1 + + if [ "$EXEC" == "yes" ]; then + ARGS+=(exec -u sail) + [ ! -t 0 ] && ARGS+=(-T) + ARGS+=("$APP_SERVICE" "${DOCKER_COMPOSE[@]}") + else + sail_is_not_running + fi + +# Proxy Composer commands to the "composer" binary on the application container... +elif [ "$1" == "composer" ]; then + shift 1 + + if [ "$EXEC" == "yes" ]; then + ARGS+=(exec -u sail) + [ ! -t 0 ] && ARGS+=(-T) + ARGS+=("$APP_SERVICE" "composer" "$@") + else + sail_is_not_running + fi + +# Proxy Artisan commands to the "artisan" binary on the application container... +elif [ "$1" == "artisan" ] || [ "$1" == "art" ]; then + shift 1 + + if [ "$EXEC" == "yes" ]; then + ARGS+=(exec -u sail) + [ ! -t 0 ] && ARGS+=(-T) + ARGS+=("$APP_SERVICE" php artisan "$@") + else + sail_is_not_running + fi + +# Proxy the "debug" command to the "php artisan" binary on the application container with xdebug enabled... +elif [ "$1" == "debug" ]; then + shift 1 + + if [ "$EXEC" == "yes" ]; then + ARGS+=(exec -u sail -e XDEBUG_SESSION=1) + [ ! -t 0 ] && ARGS+=(-T) + ARGS+=("$APP_SERVICE" php artisan "$@") + else + sail_is_not_running + fi + +# Proxy the "test" command to the "php artisan test" Artisan command... +elif [ "$1" == "test" ]; then + shift 1 + + if [ "$EXEC" == "yes" ]; then + ARGS+=(exec -u sail) + [ ! -t 0 ] && ARGS+=(-T) + ARGS+=("$APP_SERVICE" php artisan test "$@") + else + sail_is_not_running + fi + +# Proxy the "phpunit" command to "php vendor/bin/phpunit"... +elif [ "$1" == "phpunit" ]; then + shift 1 + + if [ "$EXEC" == "yes" ]; then + ARGS+=(exec -u sail) + [ ! -t 0 ] && ARGS+=(-T) + ARGS+=("$APP_SERVICE" php vendor/bin/phpunit "$@") + else + sail_is_not_running + fi + +# Proxy the "pest" command to "php vendor/bin/pest"... +elif [ "$1" == "pest" ]; then + shift 1 + + if [ "$EXEC" == "yes" ]; then + ARGS+=(exec -u sail) + [ ! -t 0 ] && ARGS+=(-T) + ARGS+=("$APP_SERVICE" php vendor/bin/pest "$@") + else + sail_is_not_running + fi + +# Proxy the "pint" command to "php vendor/bin/pint"... +elif [ "$1" == "pint" ]; then + shift 1 + + if [ "$EXEC" == "yes" ]; then + ARGS+=(exec -u sail) + [ ! -t 0 ] && ARGS+=(-T) + ARGS+=("$APP_SERVICE" php vendor/bin/pint "$@") + else + sail_is_not_running + fi + +# Proxy the "dusk" command to the "php artisan dusk" Artisan command... +elif [ "$1" == "dusk" ]; then + shift 1 + + if [ "$EXEC" == "yes" ]; then + ARGS+=(exec -u sail) + [ ! -t 0 ] && ARGS+=(-T) + ARGS+=(-e "APP_URL=http://${APP_SERVICE}") + ARGS+=(-e "DUSK_DRIVER_URL=http://selenium:4444/wd/hub") + ARGS+=("$APP_SERVICE" php artisan dusk "$@") + else + sail_is_not_running + fi + +# Proxy the "dusk:fails" command to the "php artisan dusk:fails" Artisan command... +elif [ "$1" == "dusk:fails" ]; then + shift 1 + + if [ "$EXEC" == "yes" ]; then + ARGS+=(exec -u sail) + [ ! -t 0 ] && ARGS+=(-T) + ARGS+=(-e "APP_URL=http://${APP_SERVICE}") + ARGS+=(-e "DUSK_DRIVER_URL=http://selenium:4444/wd/hub") + ARGS+=("$APP_SERVICE" php artisan dusk:fails "$@") + else + sail_is_not_running + fi + +# Initiate a Laravel Tinker session within the application container... +elif [ "$1" == "tinker" ] ; then + shift 1 + + if [ "$EXEC" == "yes" ]; then + ARGS+=(exec -u sail) + [ ! -t 0 ] && ARGS+=(-T) + ARGS+=("$APP_SERVICE" php artisan tinker) + else + sail_is_not_running + fi + +# Proxy Node commands to the "node" binary on the application container... +elif [ "$1" == "node" ]; then + shift 1 + + if [ "$EXEC" == "yes" ]; then + ARGS+=(exec -u sail) + [ ! -t 0 ] && ARGS+=(-T) + ARGS+=("$APP_SERVICE" node "$@") + else + sail_is_not_running + fi + +# Proxy NPM commands to the "npm" binary on the application container... +elif [ "$1" == "npm" ]; then + shift 1 + + if [ "$EXEC" == "yes" ]; then + ARGS+=(exec -u sail) + [ ! -t 0 ] && ARGS+=(-T) + ARGS+=("$APP_SERVICE" npm "$@") + else + sail_is_not_running + fi + +# Proxy NPX commands to the "npx" binary on the application container... +elif [ "$1" == "npx" ]; then + shift 1 + + if [ "$EXEC" == "yes" ]; then + ARGS+=(exec -u sail) + [ ! -t 0 ] && ARGS+=(-T) + ARGS+=("$APP_SERVICE" npx "$@") + else + sail_is_not_running + fi + +# Proxy YARN commands to the "yarn" binary on the application container... +elif [ "$1" == "yarn" ]; then + shift 1 + + if [ "$EXEC" == "yes" ]; then + ARGS+=(exec -u sail) + [ ! -t 0 ] && ARGS+=(-T) + ARGS+=("$APP_SERVICE" yarn "$@") + else + sail_is_not_running + fi + +# Initiate a MySQL CLI terminal session within the "mysql" container... +elif [ "$1" == "mysql" ]; then + shift 1 + + if [ "$EXEC" == "yes" ]; then + ARGS+=(exec) + [ ! -t 0 ] && ARGS+=(-T) + ARGS+=(mysql bash -c) + ARGS+=("MYSQL_PWD=\${MYSQL_PASSWORD} mysql -u \${MYSQL_USER} \${MYSQL_DATABASE}") + else + sail_is_not_running + fi + +# Initiate a MySQL CLI terminal session within the "mariadb" container... +elif [ "$1" == "mariadb" ]; then + shift 1 + + if [ "$EXEC" == "yes" ]; then + ARGS+=(exec) + [ ! -t 0 ] && ARGS+=(-T) + ARGS+=(mariadb bash -c) + ARGS+=("MYSQL_PWD=\${MYSQL_PASSWORD} mysql -u \${MYSQL_USER} \${MYSQL_DATABASE}") + else + sail_is_not_running + fi + +# Initiate a PostgreSQL CLI terminal session within the "pgsql" container... +elif [ "$1" == "psql" ]; then + shift 1 + + if [ "$EXEC" == "yes" ]; then + ARGS+=(exec) + [ ! -t 0 ] && ARGS+=(-T) + ARGS+=(pgsql bash -c) + ARGS+=("PGPASSWORD=\${PGPASSWORD} psql -U \${POSTGRES_USER} \${POSTGRES_DB}") + else + sail_is_not_running + fi + +# Initiate a Bash shell within the application container... +elif [ "$1" == "shell" ] || [ "$1" == "bash" ]; then + shift 1 + + if [ "$EXEC" == "yes" ]; then + ARGS+=(exec -u sail) + [ ! -t 0 ] && ARGS+=(-T) + ARGS+=("$APP_SERVICE" bash "$@") + else + sail_is_not_running + fi + +# Initiate a root user Bash shell within the application container... +elif [ "$1" == "root-shell" ] || [ "$1" == "root-bash" ]; then + shift 1 + + if [ "$EXEC" == "yes" ]; then + ARGS+=(exec) + [ ! -t 0 ] && ARGS+=(-T) + ARGS+=("$APP_SERVICE" bash "$@") + else + sail_is_not_running + fi + +# Initiate a Redis CLI terminal session within the "redis" container... +elif [ "$1" == "redis" ] ; then + shift 1 + + if [ "$EXEC" == "yes" ]; then + ARGS+=(exec) + [ ! -t 0 ] && ARGS+=(-T) + ARGS+=(redis redis-cli) + else + sail_is_not_running + fi + +# Share the site... +elif [ "$1" == "share" ]; then + shift 1 + + if [ "$EXEC" == "yes" ]; then + docker run --init --rm -p "$SAIL_SHARE_DASHBOARD":4040 -t beyondcodegmbh/expose-server:latest share http://host.docker.internal:"$APP_PORT" \ + --server-host="$SAIL_SHARE_SERVER_HOST" \ + --server-port="$SAIL_SHARE_SERVER_PORT" \ + --auth="$SAIL_SHARE_TOKEN" \ + --subdomain="$SAIL_SHARE_SUBDOMAIN" \ + --domain="$SAIL_SHARE_DOMAIN" \ + "$@" + + exit + else + sail_is_not_running + fi + +# Open the site... +elif [ "$1" == "open" ]; then + shift 1 + + if [ "$EXEC" == "yes" ]; then + open $APP_URL + + exit + else + sail_is_not_running + fi + +# Pass unknown commands to the "docker-compose" binary... +else + ARGS+=("$@") +fi + +# Run Docker Compose with the defined arguments... +"${DOCKER_COMPOSE[@]}" "${ARGS[@]}" -- 1.7.10.4