Add optional KYC flow and service-backed account limits

This commit is contained in:
Stephan D committed 2026-09-12 09:28:24 +02:00
1 parent 61ccfc1844
commit 3397f04ab7
38 files changed
+3443 -36

No files matched your search

@@ -535,6 +535,462 @@ abstract class AppLocalizations {
/// In en, this message translates to:
/// **'Prepare demo email again'**
String get demoResend;
/// No description provided for @kycTitle.
///
/// In en, this message translates to:
/// **'Verification & limits'**
String get kycTitle;
/// No description provided for @kycIntro.
///
/// In en, this message translates to:
/// **'Your account, at your pace. Verify your identity when you need higher limits.'**
String get kycIntro;
/// No description provided for @kycDemo.
///
/// In en, this message translates to:
/// **'DEMO · Use sample images only. Photos stay in memory, are never uploaded, and disappear when you leave or reload. Review decisions are simulated.'**
String get kycDemo;
/// No description provided for @kycUnverified.
///
/// In en, this message translates to:
/// **'Not verified'**
String get kycUnverified;
/// No description provided for @kycPending.
///
/// In en, this message translates to:
/// **'In review'**
String get kycPending;
/// No description provided for @kycApproved.
///
/// In en, this message translates to:
/// **'Identity verified'**
String get kycApproved;
/// No description provided for @kycChanges.
///
/// In en, this message translates to:
/// **'New photos needed'**
String get kycChanges;
/// No description provided for @kycDenied.
///
/// In en, this message translates to:
/// **'Verification declined'**
String get kycDenied;
/// No description provided for @kycUnverifiedBody.
///
/// In en, this message translates to:
/// **'You can keep using your account with basic limits. Submit a passport photo and a selfie holding it to request an upgrade.'**
String get kycUnverifiedBody;
/// No description provided for @kycPendingBody.
///
/// In en, this message translates to:
/// **'Your submission is awaiting a human review. Basic limits remain active until approval. You do not need to submit again.'**
String get kycPendingBody;
/// No description provided for @kycApprovedBody.
///
/// In en, this message translates to:
/// **'Your review is complete. Check your current limits below.'**
String get kycApprovedBody;
/// No description provided for @kycChangesBody.
///
/// In en, this message translates to:
/// **'Your account remains available with basic limits. Replace the photos and submit a new review request.'**
String get kycChangesBody;
/// No description provided for @kycDeniedBody.
///
/// In en, this message translates to:
/// **'Basic limits remain available. If you believe this decision is incorrect, contact support for a review.'**
String get kycDeniedBody;
/// No description provided for @kycPassportReason.
///
/// In en, this message translates to:
/// **'The passport details could not be read. Retake the photo in good light, with every edge visible.'**
String get kycPassportReason;
/// No description provided for @kycSelfieReason.
///
/// In en, this message translates to:
/// **'Your face or passport was not clear in the selfie. Keep both visible and in focus.'**
String get kycSelfieReason;
/// No description provided for @kycExpiredReason.
///
/// In en, this message translates to:
/// **'The passport has expired. Use a valid passport and take both photos again.'**
String get kycExpiredReason;
/// No description provided for @kycDeniedReason.
///
/// In en, this message translates to:
/// **'We could not verify your identity from this submission.'**
String get kycDeniedReason;
/// No description provided for @kycStart.
///
/// In en, this message translates to:
/// **'Verify identity'**
String get kycStart;
/// No description provided for @kycResubmit.
///
/// In en, this message translates to:
/// **'Replace photos'**
String get kycResubmit;
/// No description provided for @kycRefresh.
///
/// In en, this message translates to:
/// **'Refresh status & limits'**
String get kycRefresh;
/// No description provided for @kycSupport.
///
/// In en, this message translates to:
/// **'Contact support'**
String get kycSupport;
/// No description provided for @kycSupportBody.
///
/// In en, this message translates to:
/// **'Support is not connected in this preview. In the live app, you will be able to request a review here without submitting documents again.'**
String get kycSupportBody;
/// No description provided for @kycBasic.
///
/// In en, this message translates to:
/// **'Basic'**
String get kycBasic;
/// No description provided for @kycVerifiedTier.
///
/// In en, this message translates to:
/// **'Verified'**
String get kycVerifiedTier;
/// No description provided for @kycLimits.
///
/// In en, this message translates to:
/// **'Your limits'**
String get kycLimits;
/// No description provided for @kycLimitsDemo.
///
/// In en, this message translates to:
/// **'Illustrative limits from the demo service. These are not a live offer.'**
String get kycLimitsDemo;
/// No description provided for @kycDay.
///
/// In en, this message translates to:
/// **'Daily volume'**
String get kycDay;
/// No description provided for @kycMonth.
///
/// In en, this message translates to:
/// **'Monthly volume'**
String get kycMonth;
/// No description provided for @kycCurrent.
///
/// In en, this message translates to:
/// **'Current cap'**
String get kycCurrent;
/// No description provided for @kycRemaining.
///
/// In en, this message translates to:
/// **'Available'**
String get kycRemaining;
/// No description provided for @kycAfter.
///
/// In en, this message translates to:
/// **'After approval'**
String get kycAfter;
/// No description provided for @kycLimitsError.
///
/// In en, this message translates to:
/// **'Limits could not be refreshed. Any values below are out of date. Retry to see your current access.'**
String get kycLimitsError;
/// No description provided for @kycLimitsEmpty.
///
/// In en, this message translates to:
/// **'No limits were returned. Refresh or check with support before making a transaction.'**
String get kycLimitsEmpty;
/// No description provided for @kycLoading.
///
/// In en, this message translates to:
/// **'Loading your status…'**
String get kycLoading;
/// No description provided for @kycPassport.
///
/// In en, this message translates to:
/// **'Passport photo'**
String get kycPassport;
/// No description provided for @kycSelfie.
///
/// In en, this message translates to:
/// **'Selfie with passport'**
String get kycSelfie;
/// No description provided for @kycReview.
///
/// In en, this message translates to:
/// **'Review your photos'**
String get kycReview;
/// No description provided for @kycPassportHelp.
///
/// In en, this message translates to:
/// **'Open your valid passport to the photo page. Show all four edges and keep text sharp. Avoid glare, blur and covered details.'**
String get kycPassportHelp;
/// No description provided for @kycSelfieHelp.
///
/// In en, this message translates to:
/// **'Hold the open passport beside your face. Show your whole face and the photo page in the same image. Keep both sharp and uncovered.'**
String get kycSelfieHelp;
/// No description provided for @kycFileRules.
///
/// In en, this message translates to:
/// **'JPEG or PNG · up to 10 MB · at least 600 × 600 pixels. Take a photo with your camera, then choose it here.'**
String get kycFileRules;
/// No description provided for @kycChoose.
///
/// In en, this message translates to:
/// **'Choose photo'**
String get kycChoose;
/// No description provided for @kycReplace.
///
/// In en, this message translates to:
/// **'Choose a different photo'**
String get kycReplace;
/// No description provided for @kycRemove.
///
/// In en, this message translates to:
/// **'Remove photo'**
String get kycRemove;
/// No description provided for @kycNext.
///
/// In en, this message translates to:
/// **'Continue'**
String get kycNext;
/// No description provided for @kycBack.
///
/// In en, this message translates to:
/// **'Back'**
String get kycBack;
/// No description provided for @kycSkip.
///
/// In en, this message translates to:
/// **'Keep basic limits'**
String get kycSkip;
/// No description provided for @kycClose.
///
/// In en, this message translates to:
/// **'Back to account preview'**
String get kycClose;
/// No description provided for @kycReviewHelp.
///
/// In en, this message translates to:
/// **'Check that both photos are readable and show the same passport. A staff member will review them; submission does not immediately raise your limits.'**
String get kycReviewHelp;
/// No description provided for @kycConfirm.
///
/// In en, this message translates to:
/// **'These photos show me and my own valid passport.'**
String get kycConfirm;
/// No description provided for @kycSubmit.
///
/// In en, this message translates to:
/// **'Submit for review'**
String get kycSubmit;
/// No description provided for @kycSubmitDemo.
///
/// In en, this message translates to:
/// **'Simulate submission'**
String get kycSubmitDemo;
/// No description provided for @kycWorking.
///
/// In en, this message translates to:
/// **'Processing… Please keep this page open.'**
String get kycWorking;
/// No description provided for @kycDiscardTitle.
///
/// In en, this message translates to:
/// **'Discard these photos?'**
String get kycDiscardTitle;
/// No description provided for @kycDiscardBody.
///
/// In en, this message translates to:
/// **'Your draft is only in memory. Leaving will remove the selected photos; you can start again later.'**
String get kycDiscardBody;
/// No description provided for @kycStay.
///
/// In en, this message translates to:
/// **'Keep editing'**
String get kycStay;
/// No description provided for @kycDiscard.
///
/// In en, this message translates to:
/// **'Discard & leave'**
String get kycDiscard;
/// No description provided for @kycErrorUnavailable.
///
/// In en, this message translates to:
/// **'The service is unavailable. Your selected photos are still here. Try again.'**
String get kycErrorUnavailable;
/// No description provided for @kycErrorInternal.
///
/// In en, this message translates to:
/// **'Something went wrong. Try again; your selected photos have been kept.'**
String get kycErrorInternal;
/// No description provided for @kycErrorPermission.
///
/// In en, this message translates to:
/// **'We could not open that photo. Check file access or choose another image.'**
String get kycErrorPermission;
/// No description provided for @kycErrorFormat.
///
/// In en, this message translates to:
/// **'Choose a JPEG or PNG image. Other formats are not supported.'**
String get kycErrorFormat;
/// No description provided for @kycErrorLarge.
///
/// In en, this message translates to:
/// **'This image is too large. Choose one under 10 MB and 40 megapixels.'**
String get kycErrorLarge;
/// No description provided for @kycErrorUnreadable.
///
/// In en, this message translates to:
/// **'This image is damaged or cannot be read. Choose another photo.'**
String get kycErrorUnreadable;
/// No description provided for @kycErrorSmall.
///
/// In en, this message translates to:
/// **'The photo is too small. Use an image at least 600 pixels wide and high.'**
String get kycErrorSmall;
/// No description provided for @kycErrorIncomplete.
///
/// In en, this message translates to:
/// **'Choose both photos and confirm they belong to you before submitting.'**
String get kycErrorIncomplete;
/// No description provided for @kycErrorSession.
///
/// In en, this message translates to:
/// **'Your session has expired. Return to login, then check your verification status.'**
String get kycErrorSession;
/// No description provided for @kycErrorRate.
///
/// In en, this message translates to:
/// **'Too many requests. Wait a moment before trying again.'**
String get kycErrorRate;
/// No description provided for @kycErrorConflict.
///
/// In en, this message translates to:
/// **'Your review status has changed. Refresh it before continuing.'**
String get kycErrorConflict;
/// No description provided for @kycDemoControls.
///
/// In en, this message translates to:
/// **'Demo: simulate a backoffice decision'**
String get kycDemoControls;
/// No description provided for @kycDemoApprove.
///
/// In en, this message translates to:
/// **'Approve'**
String get kycDemoApprove;
/// No description provided for @kycDemoCorrect.
///
/// In en, this message translates to:
/// **'Request clearer passport'**
String get kycDemoCorrect;
/// No description provided for @kycDemoSelfie.
///
/// In en, this message translates to:
/// **'Request clearer selfie'**
String get kycDemoSelfie;
/// No description provided for @kycDemoExpired.
///
/// In en, this message translates to:
/// **'Passport expired'**
String get kycDemoExpired;
/// No description provided for @kycDemoDeny.
///
/// In en, this message translates to:
/// **'Decline'**
String get kycDemoDeny;
/// No description provided for @kycPreview.
///
/// In en, this message translates to:
/// **'Explore verification & limits'**
String get kycPreview;
/// No description provided for @kycChooseFirst.
///
/// In en, this message translates to:
/// **'Choose a photo to continue.'**
String get kycChooseFirst;
/// No description provided for @kycStatusStale.
///
/// In en, this message translates to:
/// **'Status could not be refreshed. The status shown is the last known result.'**
String get kycStatusStale;
}
class _AppLocalizationsDelegate
@@ -242,4 +242,264 @@ class AppLocalizationsEn extends AppLocalizations {
@override
String get demoResend => 'Prepare demo email again';
@override
String get kycTitle => 'Verification & limits';
@override
String get kycIntro =>
'Your account, at your pace. Verify your identity when you need higher limits.';
@override
String get kycDemo =>
'DEMO · Use sample images only. Photos stay in memory, are never uploaded, and disappear when you leave or reload. Review decisions are simulated.';
@override
String get kycUnverified => 'Not verified';
@override
String get kycPending => 'In review';
@override
String get kycApproved => 'Identity verified';
@override
String get kycChanges => 'New photos needed';
@override
String get kycDenied => 'Verification declined';
@override
String get kycUnverifiedBody =>
'You can keep using your account with basic limits. Submit a passport photo and a selfie holding it to request an upgrade.';
@override
String get kycPendingBody =>
'Your submission is awaiting a human review. Basic limits remain active until approval. You do not need to submit again.';
@override
String get kycApprovedBody =>
'Your review is complete. Check your current limits below.';
@override
String get kycChangesBody =>
'Your account remains available with basic limits. Replace the photos and submit a new review request.';
@override
String get kycDeniedBody =>
'Basic limits remain available. If you believe this decision is incorrect, contact support for a review.';
@override
String get kycPassportReason =>
'The passport details could not be read. Retake the photo in good light, with every edge visible.';
@override
String get kycSelfieReason =>
'Your face or passport was not clear in the selfie. Keep both visible and in focus.';
@override
String get kycExpiredReason =>
'The passport has expired. Use a valid passport and take both photos again.';
@override
String get kycDeniedReason =>
'We could not verify your identity from this submission.';
@override
String get kycStart => 'Verify identity';
@override
String get kycResubmit => 'Replace photos';
@override
String get kycRefresh => 'Refresh status & limits';
@override
String get kycSupport => 'Contact support';
@override
String get kycSupportBody =>
'Support is not connected in this preview. In the live app, you will be able to request a review here without submitting documents again.';
@override
String get kycBasic => 'Basic';
@override
String get kycVerifiedTier => 'Verified';
@override
String get kycLimits => 'Your limits';
@override
String get kycLimitsDemo =>
'Illustrative limits from the demo service. These are not a live offer.';
@override
String get kycDay => 'Daily volume';
@override
String get kycMonth => 'Monthly volume';
@override
String get kycCurrent => 'Current cap';
@override
String get kycRemaining => 'Available';
@override
String get kycAfter => 'After approval';
@override
String get kycLimitsError =>
'Limits could not be refreshed. Any values below are out of date. Retry to see your current access.';
@override
String get kycLimitsEmpty =>
'No limits were returned. Refresh or check with support before making a transaction.';
@override
String get kycLoading => 'Loading your status…';
@override
String get kycPassport => 'Passport photo';
@override
String get kycSelfie => 'Selfie with passport';
@override
String get kycReview => 'Review your photos';
@override
String get kycPassportHelp =>
'Open your valid passport to the photo page. Show all four edges and keep text sharp. Avoid glare, blur and covered details.';
@override
String get kycSelfieHelp =>
'Hold the open passport beside your face. Show your whole face and the photo page in the same image. Keep both sharp and uncovered.';
@override
String get kycFileRules =>
'JPEG or PNG · up to 10 MB · at least 600 × 600 pixels. Take a photo with your camera, then choose it here.';
@override
String get kycChoose => 'Choose photo';
@override
String get kycReplace => 'Choose a different photo';
@override
String get kycRemove => 'Remove photo';
@override
String get kycNext => 'Continue';
@override
String get kycBack => 'Back';
@override
String get kycSkip => 'Keep basic limits';
@override
String get kycClose => 'Back to account preview';
@override
String get kycReviewHelp =>
'Check that both photos are readable and show the same passport. A staff member will review them; submission does not immediately raise your limits.';
@override
String get kycConfirm => 'These photos show me and my own valid passport.';
@override
String get kycSubmit => 'Submit for review';
@override
String get kycSubmitDemo => 'Simulate submission';
@override
String get kycWorking => 'Processing… Please keep this page open.';
@override
String get kycDiscardTitle => 'Discard these photos?';
@override
String get kycDiscardBody =>
'Your draft is only in memory. Leaving will remove the selected photos; you can start again later.';
@override
String get kycStay => 'Keep editing';
@override
String get kycDiscard => 'Discard & leave';
@override
String get kycErrorUnavailable =>
'The service is unavailable. Your selected photos are still here. Try again.';
@override
String get kycErrorInternal =>
'Something went wrong. Try again; your selected photos have been kept.';
@override
String get kycErrorPermission =>
'We could not open that photo. Check file access or choose another image.';
@override
String get kycErrorFormat =>
'Choose a JPEG or PNG image. Other formats are not supported.';
@override
String get kycErrorLarge =>
'This image is too large. Choose one under 10 MB and 40 megapixels.';
@override
String get kycErrorUnreadable =>
'This image is damaged or cannot be read. Choose another photo.';
@override
String get kycErrorSmall =>
'The photo is too small. Use an image at least 600 pixels wide and high.';
@override
String get kycErrorIncomplete =>
'Choose both photos and confirm they belong to you before submitting.';
@override
String get kycErrorSession =>
'Your session has expired. Return to login, then check your verification status.';
@override
String get kycErrorRate =>
'Too many requests. Wait a moment before trying again.';
@override
String get kycErrorConflict =>
'Your review status has changed. Refresh it before continuing.';
@override
String get kycDemoControls => 'Demo: simulate a backoffice decision';
@override
String get kycDemoApprove => 'Approve';
@override
String get kycDemoCorrect => 'Request clearer passport';
@override
String get kycDemoSelfie => 'Request clearer selfie';
@override
String get kycDemoExpired => 'Passport expired';
@override
String get kycDemoDeny => 'Decline';
@override
String get kycPreview => 'Explore verification & limits';
@override
String get kycChooseFirst => 'Choose a photo to continue.';
@override
String get kycStatusStale =>
'Status could not be refreshed. The status shown is the last known result.';
}
@@ -243,4 +243,264 @@ class AppLocalizationsRu extends AppLocalizations {
@override
String get demoResend => 'Подготовить демописьмо ещё раз';
@override
String get kycTitle => 'Верификация и лимиты';
@override
String get kycIntro =>
'Ваш аккаунт — ваш темп. Подтвердите личность, когда понадобятся более высокие лимиты.';
@override
String get kycDemo =>
'ДЕМО · Используйте только тестовые изображения. Фото хранятся в памяти, не отправляются и удаляются при выходе или перезагрузке. Решения проверки имитируются.';
@override
String get kycUnverified => 'Личность не подтверждена';
@override
String get kycPending => 'На проверке';
@override
String get kycApproved => 'Личность подтверждена';
@override
String get kycChanges => 'Нужны новые фото';
@override
String get kycDenied => 'Верификация отклонена';
@override
String get kycUnverifiedBody =>
'Вы можете пользоваться аккаунтом с базовыми лимитами. Для повышения отправьте фото паспорта и селфи с ним.';
@override
String get kycPendingBody =>
'Заявка ожидает проверки сотрудником. До одобрения действуют базовые лимиты. Повторная отправка не нужна.';
@override
String get kycApprovedBody =>
'Проверка завершена. Актуальные лимиты указаны ниже.';
@override
String get kycChangesBody =>
'Аккаунт доступен с базовыми лимитами. Замените фото и отправьте новую заявку.';
@override
String get kycDeniedBody =>
'Базовые лимиты остаются доступными. Если вы не согласны с решением, обратитесь в поддержку для пересмотра.';
@override
String get kycPassportReason =>
'Данные паспорта не удалось прочитать. Переснимите при хорошем освещении, чтобы все края были видны.';
@override
String get kycSelfieReason =>
'На селфи плохо видно лицо или паспорт. Оба должны быть в кадре и в фокусе.';
@override
String get kycExpiredReason =>
'Срок действия паспорта истёк. Используйте действующий паспорт и сделайте оба фото заново.';
@override
String get kycDeniedReason =>
'По этой заявке не удалось подтвердить вашу личность.';
@override
String get kycStart => 'Подтвердить личность';
@override
String get kycResubmit => 'Заменить фото';
@override
String get kycRefresh => 'Обновить статус и лимиты';
@override
String get kycSupport => 'Обратиться в поддержку';
@override
String get kycSupportBody =>
'В демоверсии поддержка не подключена. В рабочем приложении здесь можно будет запросить пересмотр без повторной отправки документов.';
@override
String get kycBasic => 'Базовый';
@override
String get kycVerifiedTier => 'Подтверждённый';
@override
String get kycLimits => 'Ваши лимиты';
@override
String get kycLimitsDemo =>
'Пример лимитов из демосервиса. Это не действующее предложение.';
@override
String get kycDay => 'Объём за день';
@override
String get kycMonth => 'Объём за месяц';
@override
String get kycCurrent => 'Текущий лимит';
@override
String get kycRemaining => 'Доступно';
@override
String get kycAfter => 'После одобрения';
@override
String get kycLimitsError =>
'Не удалось обновить лимиты. Значения ниже могут быть устаревшими. Повторите запрос.';
@override
String get kycLimitsEmpty =>
'Сервис не вернул лимиты. Обновите данные или уточните их в поддержке перед операцией.';
@override
String get kycLoading => 'Загружаем ваш статус…';
@override
String get kycPassport => 'Фото паспорта';
@override
String get kycSelfie => 'Селфи с паспортом';
@override
String get kycReview => 'Проверьте фото';
@override
String get kycPassportHelp =>
'Откройте действующий паспорт на странице с фото. Все четыре края и текст должны быть чётко видны. Избегайте бликов и размытия, не закрывайте данные.';
@override
String get kycSelfieHelp =>
'Держите открытый паспорт рядом с лицом. Лицо целиком и страница с фото должны быть в одном кадре, чёткими и ничем не закрытыми.';
@override
String get kycFileRules =>
'JPEG или PNG · до 10 МБ · не менее 600 × 600 пикселей. Сделайте фото камерой, затем выберите его здесь.';
@override
String get kycChoose => 'Выбрать фото';
@override
String get kycReplace => 'Выбрать другое фото';
@override
String get kycRemove => 'Удалить фото';
@override
String get kycNext => 'Продолжить';
@override
String get kycBack => 'Назад';
@override
String get kycSkip => 'Оставить базовые лимиты';
@override
String get kycClose => 'К демоаккаунту';
@override
String get kycReviewHelp =>
'Убедитесь, что оба фото читаемы и на них один паспорт. Их проверит сотрудник. Отправка не повышает лимиты сразу.';
@override
String get kycConfirm => 'На фото я и мой действующий паспорт.';
@override
String get kycSubmit => 'Отправить на проверку';
@override
String get kycSubmitDemo => 'Имитировать отправку';
@override
String get kycWorking => 'Обработка… Не закрывайте страницу.';
@override
String get kycDiscardTitle => 'Удалить выбранные фото?';
@override
String get kycDiscardBody =>
'Черновик хранится только в памяти. При выходе выбранные фото будут удалены. Позже можно начать заново.';
@override
String get kycStay => 'Продолжить';
@override
String get kycDiscard => 'Удалить и выйти';
@override
String get kycErrorUnavailable =>
'Сервис недоступен. Выбранные фото сохранены в памяти. Повторите попытку.';
@override
String get kycErrorInternal =>
'Произошла ошибка. Повторите попытку; выбранные фото сохранены.';
@override
String get kycErrorPermission =>
'Не удалось открыть фото. Проверьте доступ к файлам или выберите другое изображение.';
@override
String get kycErrorFormat =>
'Выберите изображение JPEG или PNG. Другие форматы не поддерживаются.';
@override
String get kycErrorLarge =>
'Изображение слишком большое. Выберите файл до 10 МБ и 40 мегапикселей.';
@override
String get kycErrorUnreadable =>
'Изображение повреждено или не читается. Выберите другое фото.';
@override
String get kycErrorSmall =>
'Фото слишком маленькое. Ширина и высота должны быть не менее 600 пикселей.';
@override
String get kycErrorIncomplete =>
'Выберите оба фото и подтвердите, что на них вы и ваш паспорт.';
@override
String get kycErrorSession =>
'Сессия истекла. Войдите снова и проверьте статус верификации.';
@override
String get kycErrorRate =>
'Слишком много запросов. Немного подождите и повторите попытку.';
@override
String get kycErrorConflict =>
'Статус проверки изменился. Обновите его, прежде чем продолжить.';
@override
String get kycDemoControls => 'Демо: имитация решения сотрудника';
@override
String get kycDemoApprove => 'Одобрить';
@override
String get kycDemoCorrect => 'Запросить чёткое фото паспорта';
@override
String get kycDemoSelfie => 'Запросить чёткое селфи';
@override
String get kycDemoExpired => 'Паспорт просрочен';
@override
String get kycDemoDeny => 'Отклонить';
@override
String get kycPreview => 'Посмотреть верификацию и лимиты';
@override
String get kycChooseFirst => 'Выберите фото для продолжения.';
@override
String get kycStatusStale =>
'Не удалось обновить статус. Показан последний известный результат.';
}