diff --git a/backend/src/main/java/ru/micord/ervu/security/esia/service/EsiaAuthService.java b/backend/src/main/java/ru/micord/ervu/security/esia/service/EsiaAuthService.java
index f3c048b..df67409 100644
--- a/backend/src/main/java/ru/micord/ervu/security/esia/service/EsiaAuthService.java
+++ b/backend/src/main/java/ru/micord/ervu/security/esia/service/EsiaAuthService.java
@@ -162,6 +162,7 @@ public class EsiaAuthService {
String esiaAccessTokenStr = null;
String prnOid = null;
Long expiresIn = null;
+ long signSecret = 0, requestAccessToken = 0, verifySecret = 0;
try {
String clientId = esiaConfig.getClientId();
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy.MM.dd HH:mm:ss xx");
@@ -177,8 +178,9 @@ public class EsiaAuthService {
parameters.put("state", "%s");
parameters.put("redirect_uri", redirectUrl);
parameters.put("code", esiaAuthCode);
-
+ long startTime = System.currentTimeMillis();
SignResponse signResponse = signMap(parameters);
+ signSecret = System.currentTimeMillis() - startTime;
String state = signResponse.getState();
String clientSecret = signResponse.getSignature();
String authUrl = esiaConfig.getEsiaBaseUri() + esiaConfig.getEsiaTokenUrl();
@@ -194,6 +196,7 @@ public class EsiaAuthService {
.setParameter("token_type", "Bearer")
.setParameter("client_certificate_hash", esiaConfig.getClientCertHash())
.toFormUrlencodedString();
+ startTime = System.currentTimeMillis();
HttpRequest postReq = HttpRequest.newBuilder(URI.create(authUrl))
.header(HttpHeaders.CONTENT_TYPE, "application/x-www-form-urlencoded")
.POST(HttpRequest.BodyPublishers.ofString(postBody))
@@ -203,6 +206,7 @@ public class EsiaAuthService {
.connectTimeout(Duration.ofSeconds(esiaConfig.getConnectionTimeout()))
.build()
.send(postReq, HttpResponse.BodyHandlers.ofString());
+ requestAccessToken = System.currentTimeMillis() - startTime;
String responseString = postResp.body();
EsiaTokenResponse tokenResponse = objectMapper.readValue(responseString,
EsiaTokenResponse.class
@@ -214,7 +218,9 @@ public class EsiaAuthService {
throw new IllegalStateException("Esia response error. " + errMsg);
}
esiaAccessTokenStr = tokenResponse.getAccessToken();
+ startTime = System.currentTimeMillis();
String verifyResult = verifyToken(esiaAccessTokenStr);
+ verifySecret = System.currentTimeMillis() - startTime;
if (verifyResult != null) {
throw new EsiaException(verifyResult);
}
@@ -228,6 +234,10 @@ public class EsiaAuthService {
catch (Exception e) {
throw new EsiaException(e);
}
+ finally {
+ LOGGER.info("Thread {}: SignSecret: {}ms RequestAccessToken: {}ms VerifySecret: {}ms",
+ Thread.currentThread().getId(), signSecret, requestAccessToken, verifySecret);
+ }
try {
Response ervuIdResponse = getErvuIdResponse(esiaAccessTokenStr);
createTokenAndAddCookie(response, prnOid, ervuIdResponse.getErvuId(), expiresIn);
@@ -365,17 +375,26 @@ public class EsiaAuthService {
}
public Response getErvuIdResponse(String accessToken) {
+ long requestPersonData = 0, requestIdERVU = 0;
try {
+ long startTime = System.currentTimeMillis();
PersonModel personModel = personalDataService.getPersonModel(accessToken);
+ requestPersonData = System.currentTimeMillis() - startTime;
Person person = copyToPerson(personModel);
+ startTime = System.currentTimeMillis();
String kafkaResponse = replyingKafkaService.sendMessageAndGetReply(requestTopic,
requestReplyTopic, objectMapper.writeValueAsString(person)
);
+ requestIdERVU = System.currentTimeMillis() - startTime;
return objectMapper.readValue(kafkaResponse, Response.class);
}
catch (Exception e) {
throw new EsiaException(e);
}
+ finally {
+ LOGGER.info("Thread {}: RequestPersonData: {}ms RequestIdERVU: {}ms",
+ Thread.currentThread().getId(), requestPersonData, requestIdERVU);
+ }
}
private Person copyToPerson(PersonModel personModel) {
diff --git a/config/nginx.conf b/config/nginx.conf
index 85b7e6a..511895d 100644
--- a/config/nginx.conf
+++ b/config/nginx.conf
@@ -81,7 +81,7 @@ http {
index index.html;
try_files $uri @index;
- add_header Content-Security-Policy "frame-ancestors 'none'; default-src 'self'; script-src 'self'; style-src 'unsafe-inline' 'self' data:; font-src 'self' data:; img-src 'self' data:;";
+ add_header Content-Security-Policy "frame-ancestors 'none'; default-src 'self'; connect-src 'self' https://www.sberbank.ru; script-src 'self'; style-src 'unsafe-inline' 'self' data:; font-src 'self' data:; img-src 'self' data:;";
#Application config
location = /src/resources/app-config.json {
@@ -106,7 +106,7 @@ http {
location @index {
root /frontend;
add_header Cache-Control "no-cache";
- add_header Content-Security-Policy "frame-ancestors 'none'; default-src 'self'; script-src 'self'; style-src 'unsafe-inline' 'self' data:; font-src 'self' data:; img-src 'self' data:;";
+ add_header Content-Security-Policy "frame-ancestors 'none'; default-src 'self'; connect-src 'self' https://www.sberbank.ru; script-src 'self'; style-src 'unsafe-inline' 'self' data:; font-src 'self' data:; img-src 'self' data:;";
expires 0;
try_files /index.html =404;
}
diff --git a/config/tomcat/etc/tomcat/server.xml b/config/tomcat/etc/tomcat/server.xml
index ec52cfa..af21aff 100644
--- a/config/tomcat/etc/tomcat/server.xml
+++ b/config/tomcat/etc/tomcat/server.xml
@@ -162,8 +162,8 @@
Documentation at: /docs/config/valve.html
Note: The pattern used is equivalent to using pattern="common" -->
+ prefix="localhost_access_log" suffix=".log"
+ pattern="%h %l %u %t "%r" %s %b %D" />
diff --git a/frontend/browser_check.js b/frontend/browser_check.js
deleted file mode 100644
index 7c4532b..0000000
--- a/frontend/browser_check.js
+++ /dev/null
@@ -1,3 +0,0 @@
-document.addEventListener("DOMContentLoaded", function(event) {
- document.getElementById("browser-check-info").hidden = navigator.userAgent.indexOf("Chromium GOST") > -1 || navigator.userAgent.indexOf("YaBrowser") > -1;
-});
diff --git a/frontend/home.html b/frontend/home.html
deleted file mode 100644
index 65c5631..0000000
--- a/frontend/home.html
+++ /dev/null
@@ -1,139 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Для обеспечения защищённого соединения с сайтом реестра повесток необходимо установить браузер Яндекс или Chromium GOST.
-
-
-
-
-
-
-
Реестр повесток
-
Реестр повесток содержит сведения обо всех направленных повестках военкомата
-
Зачем смотреть реестр повесток?
-
-
-
Узнать, что в Реестре есть повестка на Ваше имя.
-
-
-
Уточнить дату, время
и место явки.
-
-
-
Получить выписку из Реестра повесток или Реестра воинского учёта.
-
-
-
-
-
-
-
-
Как посмотреть повестку?
-
-
-
-
Войти в Реестр с помощью своей учётной записи на Госуслугах через ЕСИА
-
Она должна быть подтверждённой
-
Если учётной записи нет, зарегистрируйтесь
-
-
-
-
-
-
-
Для чего направляется повестка?
-
-
-
-
Прохождение медосвидетельствования
-
Прохождение призывной комиссии
-
-
-
-
-
Уточнение документов воинского учёта
-
Отправка к месту прохождения военной службы.
-
-
-
-
-
-
Как вручается повестка?
-
-
-
Лично под расписку по месту жительства, работы или учёбы
-
Размещение в Реестре повесток
-
Заказным письмом по Почте России
-
-
-
-
-
-
Когда повестка считается вручённой?
-
-
-
-
После подписи, удостоверяющей получение лично
-
Через 7 дней с даты размещения в Реестре повесток
-
В день вручения заказного письма
-
В день отказа от получения лично или по почте — в случае такого отказа
-
-
-
-
-
-
- Явиться в военкомат необходимо в срок, указанный в повестке!
-
-
-
-
Временные ограничения
-
-
-
-
-
Если не прийти в военкомат в течение 20 календарных дней от даты явки, указанной в повестке, начнут действовать другие ограничения, запрещающие:
-
-
-
-
управлять транспортом
-
регистрировать транспорт и недвижимость
-
получать кредиты и займы
-
регистрироваться в качестве ИП или самозанятого
-
-
-
-
-
С даты, когда повестка размещена в Реестре повесток, гражданам, подлежащим призыву на воинскую службу, запрещается выезд из России
-
Все ограничения, включая запрет на выезд из России, временные. Их снимут в течение суток после явки в военкомат
-
-
-
-
-
-
-
-
-
-
diff --git a/frontend/index.webpack.html b/frontend/index.webpack.html
index 0a55a7e..be59390 100644
--- a/frontend/index.webpack.html
+++ b/frontend/index.webpack.html
@@ -5,7 +5,7 @@
+ content="default-src 'self'; connect-src 'self' https://www.sberbank.ru; script-src 'self'; style-src 'unsafe-inline' 'self' data:; font-src 'self' data:; img-src 'self' data:"/>
diff --git a/frontend/src/resources/app-config.json b/frontend/src/resources/app-config.json
index fce2327..3fc311d 100644
--- a/frontend/src/resources/app-config.json
+++ b/frontend/src/resources/app-config.json
@@ -16,5 +16,6 @@
"password_pattern": "^((?=(.*\\d){1,})(?=.*[a-zа-яё])(?=.*[A-ZА-ЯЁ]).{8,})$",
"password_pattern_error": "Пароль должен содержать заглавные или прописные буквы и как минимум 1 цифру",
"show.client.errors": false,
- "available_task.single_fetch": true
+ "available_task.single_fetch": true,
+ "cert_check_url": "https://lkrp-dev2.micord.ru"
}
diff --git a/frontend/src/resources/css/components-lkrp.css b/frontend/src/resources/css/components-lkrp.css
index dac0050..21fa6af 100644
--- a/frontend/src/resources/css/components-lkrp.css
+++ b/frontend/src/resources/css/components-lkrp.css
@@ -861,3 +861,494 @@
.webbpm.ervu_lkrp_fl .dialog-link {
cursor: pointer;
}
+
+
+/*---------------- HOME ----------------*/
+.webbpm .header-landing {
+ background-color: var(--color-text-primary) !important;
+ z-index: 1;
+}
+.webbpm .header-landing > div {
+ display: flex;
+ flex-direction: row;
+ align-items: center;
+ font-family: 'InterSB';
+}
+.webbpm .header-landing .header-logo {
+ width: 62px;
+ height: 40px;
+ background: url(../img/svg/mil-logo.svg) no-repeat 0 50%;
+}
+.webbpm .header-landing .header-title {
+ color: var(--white);
+ font-size: var(--size-text-secondary);
+ margin-left: var(--indent-mini);
+}
+
+.webbpm .container-inside .short-text {
+ max-width: 60%;
+}
+.webbpm .container-inside .paragraph-left .short-text {
+ max-width: 70%;
+}
+
+.webbpm .container-inside .list-group {
+ position: relative;
+ font-size: var(--size-text-secondary);
+ line-height: normal;
+ padding: 0 var(--w-screen);
+}
+.webbpm .container-inside .list-group .btn {
+ width: max-content;
+}
+.webbpm .container-inside .list-group .title {
+ font-size: var(--l-size-text-maintitle);
+ font-family: 'GolosB';
+ margin-bottom: var(--l-indent-huge);
+}
+.webbpm .container-inside .list-group .subtitle {
+ font-size: var(--l-size-text-title);
+ font-family: 'GolosDB';
+ margin-bottom: var(--l-indent-big);
+}
+.webbpm .container-inside .list-group .muted {
+ color: var(--color-light);
+}
+
+.webbpm .container-inside .list-group .paragraph {
+ display: flex;
+ flex-direction: row;
+}
+.webbpm .container-inside .list-group .paragraph .paragraph-left {
+ width: 40%;
+}
+.webbpm .container-inside .list-group .paragraph .paragraph-right {
+ width: 60%;
+}
+.webbpm .container-inside .list-group .paragraph .paragraph-half {
+ width: 50%;
+}
+.webbpm .container-inside .list-group .paragraph .paragraph-third {
+ width: 33.33%;
+}
+.webbpm .container-inside .list-group .paragraph [class*="paragraph-"] + [class*="paragraph-"] {
+ margin-left: 40px;
+}
+.webbpm .container-inside .list-group .paragraph .text {
+ font-family: 'InterSB';
+ font-size: var(--l-size-text-primary);
+ margin-bottom: var(--indent-mini);
+}
+.webbpm .container-inside .list-group .paragraph .icon-checklist,
+.webbpm .container-inside .list-group .paragraph .icon-clock,
+.webbpm .container-inside .list-group .paragraph .icon-text {
+ padding-top: 44px;
+}
+.webbpm .container-inside .list-group .paragraph .icon-checklist {
+ background: url(../img/svg/checklist-32x32.svg) no-repeat 0 0;
+}
+.webbpm .container-inside .list-group .paragraph .icon-clock {
+ background: url(../img/svg/clock-32x32.svg) no-repeat 0 0;
+}
+.webbpm .container-inside .list-group .paragraph .icon-text {
+ background: url(../img/svg/text-32x32.svg) no-repeat 0 0;
+}
+
+.webbpm .container-inside .list-group .list > div {
+ position: relative;
+ padding-left: 36px;
+}
+.webbpm .container-inside .list-group .list > div + div {
+ margin-top: var(--indent-mini);
+}
+.webbpm .container-inside .list-group .list > div::after {
+ content: "";
+ position: absolute;
+ width: 24px;
+ height: 24px;
+ top: 0;
+ left: 0;
+}
+.webbpm .container-inside .list-group .list > div.esia::after {
+ background: url(../img/svg/esia-24x24.svg) no-repeat 0 0;
+}
+.webbpm .container-inside .list-group .list > div.case::after {
+ background: url(../img/svg/case-24x24.svg) no-repeat 0 0;
+}
+.webbpm .container-inside .list-group .list > div.user::after {
+ background: url(../img/svg/user-24x24.svg) no-repeat 0 0;
+}
+.webbpm .container-inside .list-group .list > div.romb::after {
+ background: url(../img/svg/romb-24x24.svg) no-repeat 0 0;
+}
+.webbpm .container-inside .list-group .list ~ .btn-group {
+ margin-top: var(--indent-medium);
+}
+
+.webbpm .container-inside .list-group .section-group > div {
+ display: flex;
+ flex-direction: column;
+ min-height: 80px;
+ position: relative;
+ padding: 16px 16px 16px 76px;
+ margin-bottom: 16px;
+ border-radius: 4px;
+ background-color: var(--bg-form);
+}
+.webbpm .container-inside .list-group .section-group > div:last-child {
+ margin-bottom: 0;
+}
+.webbpm .container-inside .list-group .section-group > div::before {
+ content: "";
+ position: absolute;
+ left: 16px;
+ width: 48px;
+ height: 48px;
+ border-radius: 50px;
+ background-color: var(--color-bg-main);
+ background-repeat: no-repeat;
+ background-position: 50% 50%;
+}
+.webbpm .container-inside .list-group .section-group > div.icon-user::before {
+ background-image: url(../img/svg/pers-wt.svg);
+}
+.webbpm .container-inside .list-group .section-group > div.icon-case::before {
+ background-image: url(../img/svg/case-wt.svg);
+}
+.webbpm .container-inside .list-group .section-group > div.icon-shield::before {
+ background-image: url(../img/svg/shield-wt.svg);
+}
+.webbpm .container-inside .list-group .section-group > div.icon-clip::before {
+ background-image: url(../img/svg/clip-wt.svg);
+}
+.webbpm .container-inside .list-group .section-group > div.icon-pers::before {
+ background-image: url(../img/svg/pers-wt.svg);
+}
+.webbpm .container-inside .list-group .section-group > div.icon-building::before {
+ background-image: url(../img/svg/building-wt.svg);
+}
+.webbpm .container-inside .list-group .section-group > div .muted {
+ margin-top: 12px;
+}
+.webbpm .container-inside .list-group .section-group > div .muted .detailed {
+ color: var(--color-text-primary);
+ font-family: 'InterB';
+}
+
+.webbpm .container-inside .list-group .pass-list {
+ position: relative;
+ display: flex;
+ flex-direction: row;
+ padding-top: 60px;
+}
+.webbpm .container-inside .list-group .pass-list::before {
+ content: "";
+ position: absolute;
+ width: calc(80% + 40px);
+ height: 4px;
+ top: 18px;
+ left: 0;
+ background-color: var(--color-link-hover);
+}
+.webbpm .container-inside .list-group .pass-list > div {
+ position: relative;
+ width: 20%;
+}
+.webbpm .container-inside .list-group .pass-list > div::before {
+ content: "";
+ position: absolute;
+ width: 40px;
+ height: 40px;
+ top: -60px;
+ left: 0;
+ border-radius: 2px;
+ border: 4px solid var(--color-link-hover);
+ background-color: var(--bg-light);
+ transform: rotate(45deg);
+}
+.webbpm .container-inside .list-group .pass-list > div::after {
+ content: "";
+ position: absolute;
+ font-family: 'InterB';
+ top: -50px;
+ left: 15px;
+}
+.webbpm .container-inside .list-group .pass-list > div:nth-child(1)::after {
+ content: "1";
+}
+.webbpm .container-inside .list-group .pass-list > div:nth-child(2)::after {
+ content: "2";
+}
+.webbpm .container-inside .list-group .pass-list > div:nth-child(3)::after {
+ content: "3";
+}
+.webbpm .container-inside .list-group .pass-list > div:nth-child(4)::after {
+ content: "4";
+}
+.webbpm .container-inside .list-group .pass-list > div:nth-child(5)::after {
+ content: "5";
+}
+.webbpm .container-inside .list-group .pass-list > div + div {
+ margin-left: 40px;
+}
+
+.webbpm .container-inside .list-group .msg-list {
+ display: flex;
+ flex-direction: row;
+ align-items: center;
+ justify-content: center;
+ padding: 8px;
+}
+.webbpm .container-inside .list-group .msg-list span {
+ width: 32px;
+ height: 32px;
+ margin: 0 16px 0 0;
+ background: url(../img/svg/info-gr.svg) no-repeat 0 0;
+}
+
+.webbpm .container-inside .list-group .docs-list {
+ position: relative;
+ display: flex;
+ flex-direction: row;
+}
+.webbpm .container-inside .list-group .docs-list > div {
+ position: relative;
+ display: flex;
+ flex-direction: row;
+ align-items: center;
+ width: 20%;
+}
+.webbpm .container-inside .list-group .docs-list > div a {
+ width: 24px;
+ height: 24px;
+ padding-right: 8px;
+ background: url(../img/svg/download-24x24.svg) no-repeat 0 0;
+}
+.webbpm .container-inside .list-group .docs-list > div + div {
+ margin-left: 40px;
+}
+
+.webbpm .container-inside .list-group.lk-what {
+ padding-top: var(--l-indent-huge);
+ padding-bottom: var(--l-indent-huge);
+}
+.webbpm .container-inside .list-group.lk-what::after {
+ content: "";
+ position: absolute;
+ top: 0;
+ left: 0;
+ right: 0;
+ bottom: 0;
+ opacity: 0.12;
+ background: url(../img/bg-star.png) no-repeat calc(100% + 200px) 0px transparent;
+ z-index: 0;
+}
+.webbpm .container-inside .list-group.lk-what > div {
+ position: relative;
+ z-index: 1;
+}
+
+.webbpm .container-inside .list-group.lk-access {
+ color: var(--white);
+ padding-top: var(--l-indent-big);
+ padding-bottom: var(--l-indent-big);
+ background-color: var(--color-bg-main);
+}
+.webbpm .container-inside .list-group.lk-info {
+ padding-top: var(--l-indent-big);
+ padding-bottom: var(--l-indent-big);
+}
+.webbpm .container-inside .list-group.lk-pass {
+ padding-top: var(--l-indent-big);
+ padding-bottom: var(--l-indent-big);
+ background-color: var(--bg-light);
+}
+.webbpm .container-inside .list-group.lk-when {
+ color: var(--white);
+ padding-top: var(--l-indent-big);
+ padding-bottom: var(--l-indent-big);
+ background-color: var(--color-bg-main);
+}
+.webbpm .container-inside .list-group.lk-msg {
+ background-color: var(--border-light);
+}
+.webbpm .container-inside .list-group.lk-limits {
+ padding-top: var(--l-indent-big);
+ padding-bottom: var(--l-indent-big);
+}
+.webbpm .container-inside .list-group.lk-docs {
+ flex: 1;
+ color: var(--white);
+ padding-top: var(--l-indent-huge);
+ padding-bottom: var(--l-indent-huge);
+ background-color: var(--color-text-primary);
+}
+.webbpm .container-inside .list-group.lk-alert {
+ padding-top: var(--l-indent-big);
+ padding-bottom: var(--l-indent-big);
+ background-color: var(--bg-light);
+}
+.webbpm .container-inside .list-group.lk-footer {
+ padding-top: var(--indent-small);
+ padding-bottom: var(--indent-small);
+ background-color: var(--color-text-primary);
+}
+
+.webbpm.ervu_lkrp_fl .container-inside .list-group.lk-what .title {
+ color: var(--color-link);
+ padding: 0;
+ margin-bottom: var(--indent-small);
+}
+.webbpm.ervu_lkrp_fl .container-inside .list-group.lk-what .title::after {
+ content: url(../img/svg/star.svg);
+ top: 18px;
+ position: relative;
+ margin-left: var(--l-indent-big);
+}
+.webbpm.ervu_lkrp_fl .container-inside .list-group.lk-what .title + .short-text {
+ max-width: 25%;
+}
+.webbpm.ervu_lkrp_fl .container-inside .list-group.lk-what .title ~ .subtitle {
+ margin-top: var(--l-indent-big);
+}
+.webbpm.ervu_lkrp_fl .container-inside .list-group.lk-info .section-group > div {
+ justify-content: center;
+}
+.webbpm.ervu_lkrp_fl .container-inside .list-group.lk-pass .subtitle {
+ margin-bottom: 0;
+}
+.webbpm.ervu_lkrp_fl .container-inside .list-group.lk-pass .subtitle + div {
+ margin-top: var(--indent-small);
+ margin-bottom: var(--l-indent-big);
+}
+.webbpm.ervu_lkrp_fl .container-inside .list-group.lk-pass .pass-list::before {
+ display: none;
+}
+.webbpm.ervu_lkrp_fl .container-inside .list-group.lk-pass .pass-list > div {
+ position: relative;
+ width: 33.33%;
+}
+.webbpm.ervu_lkrp_fl .container-inside .list-group.lk-msg {
+ color: var(--color-link);
+ font-family: 'InterSB';
+ background-color: var(--bg-form);
+}
+.webbpm.ervu_lkrp_fl .container-inside .list-group.lk-msg span {
+ background: url(../img/svg/info.svg) no-repeat 0 4px;
+}
+.webbpm.ervu_lkrp_fl .container-inside .list-group.lk-limits .subtitle {
+ margin-bottom: 0;
+}
+.webbpm.ervu_lkrp_fl .container-inside .list-group.lk-limits .subtitle + div {
+ margin-top: var(--indent-small);
+ margin-bottom: var(--l-indent-big);
+}
+.webbpm.ervu_lkrp_fl .container-inside .list-group.lk-limits .scheme {
+ width: 100%;
+ height: 204px;
+ background: url(../img/svg/scheme.svg) no-repeat 0 0;
+}
+.webbpm.ervu_lkrp_fl .container-inside .list-group.lk-alert > .short-text {
+ margin-bottom: var(--l-indent-big);
+}
+.webbpm.ervu_lkrp_fl .container-inside .list-group.lk-alert .alert-block {
+ position: relative;
+ padding: var(--indent-small) 64px var(--indent-small) var(--indent-small);
+ border-radius: 4px;
+ border: 2px solid var(--border-light);
+}
+.webbpm.ervu_lkrp_fl .container-inside .list-group.lk-alert .alert-block::after {
+ content: url(../img/svg/info.svg);
+ position: absolute;
+ top: var(--indent-small);
+ right: var(--indent-small);
+}
+.webbpm.ervu_lkrp_fl .container-inside .list-group.lk-alert .alert-block > div + div {
+ margin-top: var(--indent-small);
+}
+.webbpm.ervu_lkrp_fl .container-inside .list-group.lk-alert .alert-block > div:last-child {
+ color: var(--color-link);
+}
+
+/*@media ((max-width: 780px) or ((orientation: landscape) and (max-device-width : 1024px))) {*/
+@media (max-width: 1024px) {
+ .container-inside .short-text {
+ max-width: 100% !important;
+ }
+
+ .webbpm .container-inside .list-group .paragraph {
+ flex-direction: column;
+ }
+ .webbpm .container-inside .list-group .paragraph [class*="paragraph-"] {
+ width: auto;
+ margin-left: 0;
+ }
+ .webbpm .container-inside .list-group .paragraph [class*="paragraph-"] + [class*="paragraph-"] {
+ margin-top: var(--indent-mini);
+ margin-left: 0;
+ }
+ .webbpm .container-inside .list-group .pass-list {
+ flex-direction: column;
+ padding-top: 0;
+ }
+ .webbpm .container-inside .list-group .pass-list::before {
+ display: none;
+ }
+ .webbpm .container-inside .list-group .pass-list > div {
+ display: flex;
+ align-items: center;
+ width: auto !important;
+ padding-left: 60px;
+ min-height: 40px;
+ }
+ .webbpm .container-inside .list-group .pass-list > div::before {
+ top: 0;
+ }
+ .webbpm .container-inside .list-group .pass-list > div::after {
+ top: 10px;
+ }
+ .webbpm .container-inside .list-group .pass-list > div + div {
+ margin-left: 0;
+ margin-top: var(--indent-mini);
+ }
+}
+
+@media (max-width: 480px) {
+ .webbpm .container-inside .list-group .docs-list {
+ flex-direction: column;
+ }
+ .webbpm .container-inside .list-group .docs-list > div {
+ width: 100%;
+ }
+ .webbpm .container-inside .list-group .docs-list > div + div {
+ margin-left: 0;
+ margin-top: var(--indent-mini);
+ }
+}
+/*------------- end - HOME -------------*/
+
+.cert-check-content {
+ font-family: 'Golos';
+ font-size: var(--size-text-secondary);
+ padding: var(--indent-mini) var(--w-screen) var(--indent-mini) calc(var(--w-screen) + 38px);
+ background-color: var(--bg-warn);
+}
+.cert-check-text {
+ position: relative;
+ padding-left: 40px;
+}
+.cert-check-text::before {
+ position: absolute;
+ content: url(../img/svg/info.svg);
+ left: 0;
+ top: calc((100% - 24px) / 2);
+}
+.text-header {
+ color: var(--color-link);
+ font-family: 'GolosB';
+ font-size: var(--size-text-primary);
+ margin-bottom: 4px;
+}
+.plain-text {
+ margin-bottom: 0;
+}
diff --git a/frontend/src/resources/css/inbox-lkrp.css b/frontend/src/resources/css/inbox-lkrp.css
index c01a8d0..091ea77 100644
--- a/frontend/src/resources/css/inbox-lkrp.css
+++ b/frontend/src/resources/css/inbox-lkrp.css
@@ -29,6 +29,25 @@
font-style: normal;
}
+@font-face {
+ font-family: 'GolosM';
+ src: url('../fonts/GolosText-Medium.ttf');
+ font-weight: 400;
+ font-style: normal;
+}
+@font-face {
+ font-family: 'GolosDB';
+ src: url('../fonts/GolosText-DemiBold.ttf');
+ font-weight: 400;
+ font-style: normal;
+}
+@font-face {
+ font-family: 'GolosB';
+ src: url('../fonts/GolosText-Bold.ttf');
+ font-weight: 400;
+ font-style: normal;
+}
+
body.webbpm.ervu_lkrp_fl {
-ms-text-size-adjust: 100%;
-moz-text-size-adjust: 100%;
@@ -64,6 +83,15 @@ body.webbpm.ervu_lkrp_fl {
--indent-small: 24px;
--indent-mini: 16px;
--indent-extra-mini: 10px;
+
+
+ --l-size-text-maintitle: 54px;
+ --l-size-text-title: 40px;
+ --l-size-text-subtitle: 32px;
+ --l-size-text-primary: 20px;
+
+ --l-indent-huge: 72px;
+ --l-indent-big: 52px;
}
.webbpm.ervu_lkrp_fl a {
@@ -210,6 +238,13 @@ body.webbpm.ervu_lkrp_fl {
--indent-big: 24px;
--indent-medium: 24px;
--indent-small: 16px;
+
+ --l-size-text-maintitle: 32px;
+ --l-size-text-title: 28px;
+ --l-size-text-subtitle: 24px;
+
+ --l-indent-huge: 32px;
+ --l-indent-big: 24px;
}
}
@@ -223,6 +258,13 @@ body.webbpm.ervu_lkrp_fl {
--indent-big: 24px;
--indent-medium: 16px;
--indent-small: 16px;
+
+ --l-size-text-maintitle: 28px;
+ --l-size-text-title: 24px;
+ --l-size-text-subtitle: 20px;
+
+ --l-indent-huge: 24px;
+ --l-indent-big: 24px;
}
.webbpm.ervu_lkrp_fl .header .header-logo .main-page {
diff --git a/frontend/src/resources/fonts/GolosText-Bold.ttf b/frontend/src/resources/fonts/GolosText-Bold.ttf
new file mode 100644
index 0000000..3a41f9b
Binary files /dev/null and b/frontend/src/resources/fonts/GolosText-Bold.ttf differ
diff --git a/frontend/src/resources/fonts/GolosText-DemiBold.ttf b/frontend/src/resources/fonts/GolosText-DemiBold.ttf
new file mode 100644
index 0000000..5514593
Binary files /dev/null and b/frontend/src/resources/fonts/GolosText-DemiBold.ttf differ
diff --git a/frontend/src/resources/fonts/GolosText-Medium.ttf b/frontend/src/resources/fonts/GolosText-Medium.ttf
new file mode 100644
index 0000000..bb2c29b
Binary files /dev/null and b/frontend/src/resources/fonts/GolosText-Medium.ttf differ
diff --git a/frontend/src/resources/fonts/GolosText-Regular.ttf b/frontend/src/resources/fonts/GolosText-Regular.ttf
new file mode 100644
index 0000000..7e0f0e5
Binary files /dev/null and b/frontend/src/resources/fonts/GolosText-Regular.ttf differ
diff --git a/frontend/src/resources/img/bg-star.png b/frontend/src/resources/img/bg-star.png
new file mode 100644
index 0000000..088b855
Binary files /dev/null and b/frontend/src/resources/img/bg-star.png differ
diff --git a/frontend/src/resources/img/svg/case-24x24.svg b/frontend/src/resources/img/svg/case-24x24.svg
new file mode 100644
index 0000000..b7d08dc
--- /dev/null
+++ b/frontend/src/resources/img/svg/case-24x24.svg
@@ -0,0 +1,3 @@
+
diff --git a/frontend/src/resources/img/svg/checklist-32x32.svg b/frontend/src/resources/img/svg/checklist-32x32.svg
new file mode 100644
index 0000000..636c87e
--- /dev/null
+++ b/frontend/src/resources/img/svg/checklist-32x32.svg
@@ -0,0 +1,4 @@
+
diff --git a/frontend/src/resources/img/svg/clock-32x32.svg b/frontend/src/resources/img/svg/clock-32x32.svg
new file mode 100644
index 0000000..aa8dc19
--- /dev/null
+++ b/frontend/src/resources/img/svg/clock-32x32.svg
@@ -0,0 +1,4 @@
+
diff --git a/frontend/src/resources/img/svg/download-24x24.svg b/frontend/src/resources/img/svg/download-24x24.svg
new file mode 100644
index 0000000..322085c
--- /dev/null
+++ b/frontend/src/resources/img/svg/download-24x24.svg
@@ -0,0 +1,3 @@
+
diff --git a/frontend/src/resources/img/svg/esia-24x24.svg b/frontend/src/resources/img/svg/esia-24x24.svg
new file mode 100644
index 0000000..d67a5b4
--- /dev/null
+++ b/frontend/src/resources/img/svg/esia-24x24.svg
@@ -0,0 +1,4 @@
+
diff --git a/frontend/src/resources/img/svg/fl.svg b/frontend/src/resources/img/svg/fl.svg
new file mode 100644
index 0000000..1ab6dfd
--- /dev/null
+++ b/frontend/src/resources/img/svg/fl.svg
@@ -0,0 +1,21 @@
+
diff --git a/frontend/src/resources/img/svg/info-gr.svg b/frontend/src/resources/img/svg/info-gr.svg
new file mode 100644
index 0000000..66d332d
--- /dev/null
+++ b/frontend/src/resources/img/svg/info-gr.svg
@@ -0,0 +1,4 @@
+
diff --git a/frontend/src/resources/img/svg/romb-24x24.svg b/frontend/src/resources/img/svg/romb-24x24.svg
new file mode 100644
index 0000000..52c562c
--- /dev/null
+++ b/frontend/src/resources/img/svg/romb-24x24.svg
@@ -0,0 +1,11 @@
+
diff --git a/frontend/src/resources/img/svg/scheme.svg b/frontend/src/resources/img/svg/scheme.svg
new file mode 100644
index 0000000..d40c6e9
--- /dev/null
+++ b/frontend/src/resources/img/svg/scheme.svg
@@ -0,0 +1,221 @@
+
diff --git a/frontend/src/resources/img/svg/star.svg b/frontend/src/resources/img/svg/star.svg
new file mode 100644
index 0000000..04339c4
--- /dev/null
+++ b/frontend/src/resources/img/svg/star.svg
@@ -0,0 +1,28 @@
+
diff --git a/frontend/src/resources/img/svg/text-32x32.svg b/frontend/src/resources/img/svg/text-32x32.svg
new file mode 100644
index 0000000..121c26a
--- /dev/null
+++ b/frontend/src/resources/img/svg/text-32x32.svg
@@ -0,0 +1,4 @@
+
diff --git a/frontend/src/resources/img/svg/ul.svg b/frontend/src/resources/img/svg/ul.svg
new file mode 100644
index 0000000..2ebaa04
--- /dev/null
+++ b/frontend/src/resources/img/svg/ul.svg
@@ -0,0 +1,10 @@
+
diff --git a/frontend/src/resources/img/svg/user-24x24.svg b/frontend/src/resources/img/svg/user-24x24.svg
new file mode 100644
index 0000000..80fe838
--- /dev/null
+++ b/frontend/src/resources/img/svg/user-24x24.svg
@@ -0,0 +1,4 @@
+
diff --git a/frontend/src/resources/landing/home.css b/frontend/src/resources/landing/home.css
index 77e21c6..dc43696 100644
--- a/frontend/src/resources/landing/home.css
+++ b/frontend/src/resources/landing/home.css
@@ -624,17 +624,17 @@ a.btn:is(:hover, :focus, :active) {
color: var(--color-link);
}
-.browser-check-content {
+.cert-check-content {
font-family: 'Golos';
font-size: var(--size-text-secondary);
padding: var(--indent-mini) var(--w-screen) var(--indent-mini) calc(var(--w-screen) + 38px);
background-color: var(--bg-warn);
}
-.browser-check-text {
+.cert-check-text {
position: relative;
padding-left: 40px;
}
-.browser-check-text::before {
+.cert-check-text::before {
position: absolute;
content: url(img/svg/info.svg);
left: 0;
diff --git a/frontend/src/resources/template/app/component/app_header.html b/frontend/src/resources/template/app/component/app_header.html
index e5cd4d7..1361200 100644
--- a/frontend/src/resources/template/app/component/app_header.html
+++ b/frontend/src/resources/template/app/component/app_header.html
@@ -1,9 +1,13 @@
-