From e3918d9609021acf8be3cbaa9f819fbd71a127a3 Mon Sep 17 00:00:00 2001 From: Richard Mohammed Date: Thu, 10 Oct 2024 13:39:31 +0100 Subject: [PATCH 01/42] Added join organisation screen. --- .../CompanyHouseNumberQuestion.cshtml.cs | 13 +- .../Registration/JoinOrganisation.cshtml | 111 ++++++++++++++++++ .../Registration/JoinOrganisation.cshtml.cs | 53 +++++++++ 3 files changed, 173 insertions(+), 4 deletions(-) create mode 100644 Frontend/CO.CDP.OrganisationApp/Pages/Registration/JoinOrganisation.cshtml create mode 100644 Frontend/CO.CDP.OrganisationApp/Pages/Registration/JoinOrganisation.cshtml.cs diff --git a/Frontend/CO.CDP.OrganisationApp/Pages/Registration/CompanyHouseNumberQuestion.cshtml.cs b/Frontend/CO.CDP.OrganisationApp/Pages/Registration/CompanyHouseNumberQuestion.cshtml.cs index a67677c8a..03382d799 100644 --- a/Frontend/CO.CDP.OrganisationApp/Pages/Registration/CompanyHouseNumberQuestion.cshtml.cs +++ b/Frontend/CO.CDP.OrganisationApp/Pages/Registration/CompanyHouseNumberQuestion.cshtml.cs @@ -32,8 +32,12 @@ public class CompanyHouseNumberQuestionModel(ISession session, [BindProperty] public string? FailedCompaniesHouseNumber { get; set; } + public static Guid? OrganisationId; + + public static string? OrganisationName; + public static string NotificationBannerCompanyNotFound { get { return "We cannot find your company number on Companies House. If it’s correct continue and enter your details manually."; } } - public static string NotificationBannerCompanyAlreadyRegistered { get { return "An organisation with this company number already exists. Change the company number or request to join the organisation."; } } + public static string NotificationBannerCompanyAlreadyRegistered { get { return "An organisation with this company number already exists. Change the company number or request to join " + OrganisationName + "."; } } public void OnGet() { @@ -56,8 +60,9 @@ public async Task OnPost() try { - await organisationClient.LookupOrganisationAsync(string.Empty, $"GB-COH:{RegistrationDetails.OrganisationIdentificationNumber}"); - + var organisation = await organisationClient.LookupOrganisationAsync(string.Empty, $"GB-COH:{RegistrationDetails.OrganisationIdentificationNumber}"); + OrganisationId = organisation.Id; + OrganisationName = organisation.Name; tempDataService.Put(FlashMessageTypes.Important, NotificationBannerCompanyAlreadyRegistered); return Page(); } @@ -66,7 +71,7 @@ public async Task OnPost() if (FailedCompaniesHouseNumber != CompaniesHouseNumber) { var chProfile = await companiesHouseApi.GetProfile(RegistrationDetails.OrganisationIdentificationNumber!); - + if (chProfile == null) { FailedCompaniesHouseNumber = CompaniesHouseNumber; diff --git a/Frontend/CO.CDP.OrganisationApp/Pages/Registration/JoinOrganisation.cshtml b/Frontend/CO.CDP.OrganisationApp/Pages/Registration/JoinOrganisation.cshtml new file mode 100644 index 000000000..164209190 --- /dev/null +++ b/Frontend/CO.CDP.OrganisationApp/Pages/Registration/JoinOrganisation.cshtml @@ -0,0 +1,111 @@ +@page "/registration/{organisationId}/join-organisation" +@using CO.CDP.OrganisationApp.Constants +@model JoinOrganisationModel + +@{ +var organisationDetails = Model.OrganisationDetails!; +var joinHasError = ((TagBuilder)Html.ValidationMessageFor(m => m.Join)).HasInnerHtml; +} + + + Back + + +
+
+
+ +
+

+ Join company: @organisationDetails.Name +

+

Organisation details

+
+
+
+ Organisation name +
+
+

@organisationDetails.Name

+
+
+
+
+

User details

+
+
+
+ Firstname +
+
+

John

+
+
+ Change +
+
+
+
+ Lastname +
+
+

Johnson

+
+
+ Change +
+
+
+
+ Email address +
+
+

john@johnson.com

+
+
+ Change +
+
+
+
+
+
+
+
+
+
+
+
+

+ Would you like to join @organisationDetails.Name? +

+ @if (joinHasError) + { +

+ Error: + @Html.ValidationMessageFor(m => m.Join) +

+ } +
+
+ + +
+
+ + +
+
+
+
+
+ + Continue + +
+
+
+
+
\ No newline at end of file diff --git a/Frontend/CO.CDP.OrganisationApp/Pages/Registration/JoinOrganisation.cshtml.cs b/Frontend/CO.CDP.OrganisationApp/Pages/Registration/JoinOrganisation.cshtml.cs new file mode 100644 index 000000000..a3caa7d62 --- /dev/null +++ b/Frontend/CO.CDP.OrganisationApp/Pages/Registration/JoinOrganisation.cshtml.cs @@ -0,0 +1,53 @@ +using System.ComponentModel.DataAnnotations; +using CO.CDP.Organisation.WebApiClient; +using Microsoft.AspNetCore.Mvc; +using OrganisationWebApiClient = CO.CDP.Organisation.WebApiClient; + +namespace CO.CDP.OrganisationApp.Pages.Registration; + +public class JoinOrganisationModel( + IOrganisationClient organisationClient, + ISession session) : LoggedInUserAwareModel(session) +{ + public OrganisationWebApiClient.Organisation? OrganisationDetails { get; set; } + + [BindProperty] + [Required(ErrorMessage = "Select an option")] + public bool Join { get; set; } + + public async Task OnGet(Guid organisationId) + { + try + { + OrganisationDetails = await organisationClient.GetOrganisationAsync(organisationId); + return Page(); + } + catch (ApiException ex) when (ex.StatusCode == 404) + { + return Redirect("/page-not-found"); + } + } + + public async Task OnPost(Guid organisationId) + { + if (!ModelState.IsValid) + { + OrganisationDetails = await organisationClient.GetOrganisationAsync(organisationId); + return Page(); + } + + if (UserDetails.PersonId != null) + { + if (Join == true) + { + // Create a person invite of type join and refactor person invite code + } + } + else + { + return Redirect("/"); + } + + return RedirectToPage("Organisations", new { type = "buyer" }); + } +} \ No newline at end of file From f5639f753921aa485fb85707f53750ef28f7c1fd Mon Sep 17 00:00:00 2001 From: Andy Mantell <134642+andymantell@users.noreply.github.com> Date: Mon, 14 Oct 2024 15:14:05 +0100 Subject: [PATCH 02/42] Initial work on localization --- .../CO.CDP.OrganisationApp.csproj | 2 +- .../Pages/ChangeLanguage.cshtml | 2 + .../Pages/ChangeLanguage.cshtml.cs | 34 +++++ .../Pages/Shared/LanguageSwitcher.cshtml | 40 ++++++ .../Pages/Shared/_Layout.cshtml | 6 +- Frontend/CO.CDP.OrganisationApp/Program.cs | 33 ++++- .../wwwroot/css/site.css | 34 +++++ GCGS-Central-Digital-Platform.sln | 10 +- .../CO.CDP.Localization.csproj | 8 ++ .../CO.CDP.Localization/StaticTextResource.cs | 6 + .../StaticTextResource.cy.resx | 123 ++++++++++++++++++ .../StaticTextResource.resx | 123 ++++++++++++++++++ 12 files changed, 414 insertions(+), 7 deletions(-) create mode 100644 Frontend/CO.CDP.OrganisationApp/Pages/ChangeLanguage.cshtml create mode 100644 Frontend/CO.CDP.OrganisationApp/Pages/ChangeLanguage.cshtml.cs create mode 100644 Frontend/CO.CDP.OrganisationApp/Pages/Shared/LanguageSwitcher.cshtml create mode 100644 Services/CO.CDP.Localization/CO.CDP.Localization.csproj create mode 100644 Services/CO.CDP.Localization/StaticTextResource.cs create mode 100644 Services/CO.CDP.Localization/StaticTextResource.cy.resx create mode 100644 Services/CO.CDP.Localization/StaticTextResource.resx diff --git a/Frontend/CO.CDP.OrganisationApp/CO.CDP.OrganisationApp.csproj b/Frontend/CO.CDP.OrganisationApp/CO.CDP.OrganisationApp.csproj index 4b11156af..dea50f136 100644 --- a/Frontend/CO.CDP.OrganisationApp/CO.CDP.OrganisationApp.csproj +++ b/Frontend/CO.CDP.OrganisationApp/CO.CDP.OrganisationApp.csproj @@ -7,7 +7,6 @@ Linux 87df2f7f-b5fc-40f8-9de8-090619a77a58 - @@ -25,6 +24,7 @@ + diff --git a/Frontend/CO.CDP.OrganisationApp/Pages/ChangeLanguage.cshtml b/Frontend/CO.CDP.OrganisationApp/Pages/ChangeLanguage.cshtml new file mode 100644 index 000000000..f4b0e2374 --- /dev/null +++ b/Frontend/CO.CDP.OrganisationApp/Pages/ChangeLanguage.cshtml @@ -0,0 +1,2 @@ +@page "/change-language/{culture}" +@model CO.CDP.OrganisationApp.Pages.ChangeLanguageModel \ No newline at end of file diff --git a/Frontend/CO.CDP.OrganisationApp/Pages/ChangeLanguage.cshtml.cs b/Frontend/CO.CDP.OrganisationApp/Pages/ChangeLanguage.cshtml.cs new file mode 100644 index 000000000..a9e1b1be0 --- /dev/null +++ b/Frontend/CO.CDP.OrganisationApp/Pages/ChangeLanguage.cshtml.cs @@ -0,0 +1,34 @@ +using Microsoft.AspNetCore.Localization; +using Microsoft.AspNetCore.Mvc; +using Microsoft.AspNetCore.Mvc.RazorPages; + +namespace CO.CDP.OrganisationApp.Pages; + +[AuthenticatedSessionNotRequired] +public class ChangeLanguageModel : PageModel +{ + public IActionResult OnGet(string culture, string? returnUrl) + { + if (!string.IsNullOrEmpty(culture)) + { + Response.Cookies.Append( + CookieRequestCultureProvider.DefaultCookieName, + CookieRequestCultureProvider.MakeCookieValue(new RequestCulture(culture)), + new CookieOptions + { + Expires = DateTimeOffset.UtcNow.AddYears(1), + IsEssential = true, + Path = "/", + Secure = Request.IsHttps, + HttpOnly = true + }); + } + + if (!string.IsNullOrEmpty(returnUrl) && Url.IsLocalUrl(returnUrl)) + { + return LocalRedirect(returnUrl); + } + + return Redirect("/"); + } +} diff --git a/Frontend/CO.CDP.OrganisationApp/Pages/Shared/LanguageSwitcher.cshtml b/Frontend/CO.CDP.OrganisationApp/Pages/Shared/LanguageSwitcher.cshtml new file mode 100644 index 000000000..cf3b56987 --- /dev/null +++ b/Frontend/CO.CDP.OrganisationApp/Pages/Shared/LanguageSwitcher.cshtml @@ -0,0 +1,40 @@ +@using System.Globalization + +@* Adapted from https://design.tax.service.gov.uk/hmrc-design-patterns/welsh-language-toggle/ *@ + +@{ + string returnUrl = Context.Request.PathBase + Context.Request.Path + Context.Request.QueryString; +} + +@if (CultureInfo.CurrentUICulture.Name == "cy") +{ + +} +else +{ + +} \ No newline at end of file diff --git a/Frontend/CO.CDP.OrganisationApp/Pages/Shared/_Layout.cshtml b/Frontend/CO.CDP.OrganisationApp/Pages/Shared/_Layout.cshtml index ad40518a7..ebd6bf127 100644 --- a/Frontend/CO.CDP.OrganisationApp/Pages/Shared/_Layout.cshtml +++ b/Frontend/CO.CDP.OrganisationApp/Pages/Shared/_Layout.cshtml @@ -1,7 +1,9 @@ @using System.Text.RegularExpressions @using CO.CDP.OrganisationApp.Constants +@using Microsoft.AspNetCore.Mvc.Localization @inject Microsoft.Extensions.Configuration.IConfiguration config @inject IUserInfoService userInfoService +@inject IHtmlLocalizer Localizer @@ -49,7 +51,7 @@ + + @* Replicates the BeforeContent region in the base govuk-frontend template *@ @* This is useful for things like back links, breadcrumbs etc which should not be rendered @* inside the
element and, crucially, should appear before the flash messages below *@ diff --git a/Frontend/CO.CDP.OrganisationApp/Program.cs b/Frontend/CO.CDP.OrganisationApp/Program.cs index 170ce5df6..10d7e4e1e 100644 --- a/Frontend/CO.CDP.OrganisationApp/Program.cs +++ b/Frontend/CO.CDP.OrganisationApp/Program.cs @@ -3,6 +3,7 @@ using CO.CDP.DataSharing.WebApiClient; using CO.CDP.EntityVerificationClient; using CO.CDP.Forms.WebApiClient; +using CO.CDP.Localization; using CO.CDP.Organisation.WebApiClient; using CO.CDP.OrganisationApp; using CO.CDP.OrganisationApp.Authorization; @@ -15,8 +16,10 @@ using Microsoft.AspNetCore.Authentication.Cookies; using Microsoft.AspNetCore.Authentication.OpenIdConnect; using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Localization; using Microsoft.AspNetCore.Mvc.ViewFeatures; using Microsoft.IdentityModel.Protocols.OpenIdConnect; +using System.Globalization; using static IdentityModel.OidcConstants; using static System.Net.Mime.MediaTypeNames; using ISession = CO.CDP.OrganisationApp.ISession; @@ -31,7 +34,28 @@ var builder = WebApplication.CreateBuilder(args); +builder.Services.AddLocalization(); + +builder.Services.Configure(options => +{ + var supportedCultures = new[] { new CultureInfo("en"), new CultureInfo("cy") }; + + options.DefaultRequestCulture = new RequestCulture("en"); + options.SupportedCultures = supportedCultures; + options.SupportedUICultures = supportedCultures; + options.RequestCultureProviders.Insert(0, new CookieRequestCultureProvider()); +}); + var mvcBuilder = builder.Services.AddRazorPages() + .AddViewLocalization() + + // TODO: Translate data coming from forms engine db + // TODO: Use this code below for translating form validation errors + //.AddDataAnnotationsLocalization(options => + //{ + // options.DataAnnotationLocalizerProvider = (type, factory) => + // factory.Create(typeof(StaticTextResource)); + //}) .AddSessionStateTempDataProvider(); if (builder.Environment.IsDevelopment()) @@ -166,7 +190,6 @@ .AddAmazonCloudWatchLogsService() .AddCloudWatchSerilog(builder.Configuration); - var app = builder.Build(); app.UseForwardedHeaders(); app.UseMiddleware(); @@ -179,6 +202,14 @@ app.UseHsts(); } +var supportedCultures = new[] { "en", "cy" }; +var localizationOptions = new RequestLocalizationOptions() + .SetDefaultCulture("en") + .AddSupportedCultures(supportedCultures) + .AddSupportedUICultures(supportedCultures); + +app.UseRequestLocalization(localizationOptions); + app.MapHealthChecks("/health").AllowAnonymous(); app.UseHttpsRedirection(); app.UseStaticFiles(); diff --git a/Frontend/CO.CDP.OrganisationApp/wwwroot/css/site.css b/Frontend/CO.CDP.OrganisationApp/wwwroot/css/site.css index ad21bb66d..c684bdf6a 100644 --- a/Frontend/CO.CDP.OrganisationApp/wwwroot/css/site.css +++ b/Frontend/CO.CDP.OrganisationApp/wwwroot/css/site.css @@ -17,3 +17,37 @@ color: #fff; text-transform: uppercase; } + +/** + * Language switcher, adapted from hmrc-frontend + * TODO: Contemplate adding proper sass build pipeline + */ +.app-language-select::after { + content: ""; + display: block; + clear: both; +} + +.app-language-select__list { + margin-top: 1em; + float: right; + text-align: right; +} + +.app-language-select__list-item { + display: inline-block; +} + + .app-language-select__list-item:first-child::after { + content: ""; + display: inline-block; + position: relative; + top: 0.1875em; + height: 1em; + border-right: 0.09375em solid #0b0c0c; + } + + .app-language-select__list-item a, + .app-language-select__list-item [aria-current] { + padding: 0.3125em; + } \ No newline at end of file diff --git a/GCGS-Central-Digital-Platform.sln b/GCGS-Central-Digital-Platform.sln index 5558c897d..723c3d1d3 100644 --- a/GCGS-Central-Digital-Platform.sln +++ b/GCGS-Central-Digital-Platform.sln @@ -130,6 +130,8 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CO.CDP.GovUKNotify", "Libra EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CO.CDP.GovUKNotify.Test", "Libraries\CO.CDP.GovUKNotify.Test\CO.CDP.GovUKNotify.Test.csproj", "{A5DDC089-23F7-4D70-8572-64E170FE1825}" EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CO.CDP.Localization", "Services\CO.CDP.Localization\CO.CDP.Localization.csproj", "{6C455199-6E22-48EE-AE00-3E2A3269F648}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -348,10 +350,10 @@ Global {A5DDC089-23F7-4D70-8572-64E170FE1825}.Debug|Any CPU.Build.0 = Debug|Any CPU {A5DDC089-23F7-4D70-8572-64E170FE1825}.Release|Any CPU.ActiveCfg = Release|Any CPU {A5DDC089-23F7-4D70-8572-64E170FE1825}.Release|Any CPU.Build.0 = Release|Any CPU - {65E8C63E-5437-4D72-ABF9-3391F8E34457}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {65E8C63E-5437-4D72-ABF9-3391F8E34457}.Debug|Any CPU.Build.0 = Debug|Any CPU - {65E8C63E-5437-4D72-ABF9-3391F8E34457}.Release|Any CPU.ActiveCfg = Release|Any CPU - {65E8C63E-5437-4D72-ABF9-3391F8E34457}.Release|Any CPU.Build.0 = Release|Any CPU + {6C455199-6E22-48EE-AE00-3E2A3269F648}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {6C455199-6E22-48EE-AE00-3E2A3269F648}.Debug|Any CPU.Build.0 = Debug|Any CPU + {6C455199-6E22-48EE-AE00-3E2A3269F648}.Release|Any CPU.ActiveCfg = Release|Any CPU + {6C455199-6E22-48EE-AE00-3E2A3269F648}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/Services/CO.CDP.Localization/CO.CDP.Localization.csproj b/Services/CO.CDP.Localization/CO.CDP.Localization.csproj new file mode 100644 index 000000000..dd40717d7 --- /dev/null +++ b/Services/CO.CDP.Localization/CO.CDP.Localization.csproj @@ -0,0 +1,8 @@ + + + + net8.0 + enable + enable + + diff --git a/Services/CO.CDP.Localization/StaticTextResource.cs b/Services/CO.CDP.Localization/StaticTextResource.cs new file mode 100644 index 000000000..c461efc3a --- /dev/null +++ b/Services/CO.CDP.Localization/StaticTextResource.cs @@ -0,0 +1,6 @@ +namespace CO.CDP.Localization; + +public class StaticTextResource +{ + +} diff --git a/Services/CO.CDP.Localization/StaticTextResource.cy.resx b/Services/CO.CDP.Localization/StaticTextResource.cy.resx new file mode 100644 index 000000000..d442bd53f --- /dev/null +++ b/Services/CO.CDP.Localization/StaticTextResource.cy.resx @@ -0,0 +1,123 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Welsh + + \ No newline at end of file diff --git a/Services/CO.CDP.Localization/StaticTextResource.resx b/Services/CO.CDP.Localization/StaticTextResource.resx new file mode 100644 index 000000000..b44bb05d7 --- /dev/null +++ b/Services/CO.CDP.Localization/StaticTextResource.resx @@ -0,0 +1,123 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + English + + \ No newline at end of file From 37d9068c1c1f50af8dd2e176fbe1e5e72a641bac Mon Sep 17 00:00:00 2001 From: Andy Mantell <134642+andymantell@users.noreply.github.com> Date: Tue, 15 Oct 2024 09:57:58 +0100 Subject: [PATCH 03/42] Initial work on validation localization --- .../Registration/OrganisationType.cshtml.cs | 3 +- .../Pages/Shared/_Layout.cshtml | 5 +- Frontend/CO.CDP.OrganisationApp/Program.cs | 13 +- .../wwwroot/css/site.css | 11 +- Services/CO.CDP.Localization/.gitignore | 1 + .../CO.CDP.Localization.csproj | 26 +++- .../CO.CDP.Localization/StaticTextResource.cs | 6 - .../StaticTextResource.cy.resx | 2 +- .../StaticTextResource.resx | 2 +- .../ValidationMessagesResource.cy.resx | 123 ++++++++++++++++++ .../ValidationMessagesResource.resx | 123 ++++++++++++++++++ 11 files changed, 289 insertions(+), 26 deletions(-) create mode 100644 Services/CO.CDP.Localization/.gitignore delete mode 100644 Services/CO.CDP.Localization/StaticTextResource.cs create mode 100644 Services/CO.CDP.Localization/ValidationMessagesResource.cy.resx create mode 100644 Services/CO.CDP.Localization/ValidationMessagesResource.resx diff --git a/Frontend/CO.CDP.OrganisationApp/Pages/Registration/OrganisationType.cshtml.cs b/Frontend/CO.CDP.OrganisationApp/Pages/Registration/OrganisationType.cshtml.cs index 03097063d..270e79c7f 100644 --- a/Frontend/CO.CDP.OrganisationApp/Pages/Registration/OrganisationType.cshtml.cs +++ b/Frontend/CO.CDP.OrganisationApp/Pages/Registration/OrganisationType.cshtml.cs @@ -1,3 +1,4 @@ +using CO.CDP.Localization; using CO.CDP.OrganisationApp.Constants; using CO.CDP.OrganisationApp.Models; using Microsoft.AspNetCore.Mvc; @@ -12,7 +13,7 @@ public class OrganisationTypeModel( public override string CurrentPage => OrganisationTypePage; [BindProperty] - [Required(ErrorMessage = "Select the organisation type")] + [Required(ErrorMessage = nameof(ValidationMessagesResource.OrganisationRegistration_SelectOrganisationType) )] public OrganisationType? OrganisationType { get; set; } [BindProperty] diff --git a/Frontend/CO.CDP.OrganisationApp/Pages/Shared/_Layout.cshtml b/Frontend/CO.CDP.OrganisationApp/Pages/Shared/_Layout.cshtml index ebd6bf127..986a7ddba 100644 --- a/Frontend/CO.CDP.OrganisationApp/Pages/Shared/_Layout.cshtml +++ b/Frontend/CO.CDP.OrganisationApp/Pages/Shared/_Layout.cshtml @@ -1,9 +1,10 @@ @using System.Text.RegularExpressions @using CO.CDP.OrganisationApp.Constants @using Microsoft.AspNetCore.Mvc.Localization +@using CO.CDP.Localization @inject Microsoft.Extensions.Configuration.IConfiguration config @inject IUserInfoService userInfoService -@inject IHtmlLocalizer Localizer +@inject IHtmlLocalizer Localizer @@ -51,7 +52,7 @@
- SIRSI @Localizer["TestKey"] + SIRSI @Localizer["TestKey"] @StaticTextResource.TestKey
- SIRSI @Localizer["TestKey"] @StaticTextResource.TestKey + SIRSI
diff --git a/Services/CO.CDP.Forms.WebApi/AutoMapper/LocalizedPropertyResolver.cs b/Services/CO.CDP.Forms.WebApi/AutoMapper/LocalizedPropertyResolver.cs index a7728747c..9dea0ba14 100644 --- a/Services/CO.CDP.Forms.WebApi/AutoMapper/LocalizedPropertyResolver.cs +++ b/Services/CO.CDP.Forms.WebApi/AutoMapper/LocalizedPropertyResolver.cs @@ -1,15 +1,14 @@ using AutoMapper; using CO.CDP.Localization; using Microsoft.AspNetCore.Mvc.Localization; -using Microsoft.Extensions.Localization; namespace CO.CDP.Forms.WebApi.AutoMapper; public class LocalizedPropertyResolver : IMemberValueResolver { - private readonly IStringLocalizer _localizer; + private readonly IHtmlLocalizer _localizer; - public LocalizedPropertyResolver(IStringLocalizer localizer) + public LocalizedPropertyResolver(IHtmlLocalizer localizer) { _localizer = localizer; } @@ -18,7 +17,7 @@ public string Resolve(TSource source, TDestination destination, string sourceMem { if (!string.IsNullOrEmpty(sourceMember)) { - return _localizer[sourceMember]; + return _localizer[sourceMember].Value; } return sourceMember; diff --git a/Services/CO.CDP.Forms.WebApi/Program.cs b/Services/CO.CDP.Forms.WebApi/Program.cs index 1a1a41f78..17397473c 100644 --- a/Services/CO.CDP.Forms.WebApi/Program.cs +++ b/Services/CO.CDP.Forms.WebApi/Program.cs @@ -9,6 +9,7 @@ using CO.CDP.Forms.WebApi.UseCase; using CO.CDP.OrganisationInformation.Persistence; using Microsoft.AspNetCore.Localization; +using Microsoft.AspNetCore.Mvc.Localization; using Microsoft.EntityFrameworkCore; using System.Globalization; using System.Reflection; @@ -23,6 +24,10 @@ builder.Services.AddLocalization(); +// Note that we have to register IHtmlLocalizer manually, since this is an API and we are not calling AddViewLocalization +builder.Services.AddSingleton(); +builder.Services.AddTransient(typeof(IHtmlLocalizer<>), typeof(HtmlLocalizer<>)); + var supportedCultures = new[] { new CultureInfo("en"), new CultureInfo("cy") }; builder.Services.Configure(options => { From 09f67e75694120113ea97aedef0c2053e3f706c6 Mon Sep 17 00:00:00 2001 From: David Baker Date: Wed, 16 Oct 2024 08:12:46 +0100 Subject: [PATCH 07/42] Companies house API error logging only occurs for non 500/404 errors. Added initial version of logging error codes. --- .../Logging/ErrorCodes.cs | 6 ++++++ .../Logging/ExceptionLogging.cs | 18 ++++++++++++++++++ .../CompaniesHouse/CompaniesHouseApi.cs | 19 +++++++++++++++++-- 3 files changed, 41 insertions(+), 2 deletions(-) create mode 100644 Frontend/CO.CDP.OrganisationApp/Logging/ErrorCodes.cs create mode 100644 Frontend/CO.CDP.OrganisationApp/Logging/ExceptionLogging.cs diff --git a/Frontend/CO.CDP.OrganisationApp/Logging/ErrorCodes.cs b/Frontend/CO.CDP.OrganisationApp/Logging/ErrorCodes.cs new file mode 100644 index 000000000..a219513af --- /dev/null +++ b/Frontend/CO.CDP.OrganisationApp/Logging/ErrorCodes.cs @@ -0,0 +1,6 @@ +namespace CO.CDP.OrganisationApp.Logging; + +public class ErrorCodes +{ + public const int CompaniesHouseApiError = 1000; +} diff --git a/Frontend/CO.CDP.OrganisationApp/Logging/ExceptionLogging.cs b/Frontend/CO.CDP.OrganisationApp/Logging/ExceptionLogging.cs new file mode 100644 index 000000000..a9c530097 --- /dev/null +++ b/Frontend/CO.CDP.OrganisationApp/Logging/ExceptionLogging.cs @@ -0,0 +1,18 @@ +namespace CO.CDP.OrganisationApp.Logging; + +public class ExceptionLogging : Exception +{ + public int ErrorCode { get; } + + public ExceptionLogging(string message, int errorCode) + : base(message) + { + ErrorCode = errorCode; + } + + public ExceptionLogging(string message, int errorCode, Exception innerException) + : base(message, innerException) + { + ErrorCode = errorCode; + } +} \ No newline at end of file diff --git a/Frontend/CO.CDP.OrganisationApp/ThirdPartyApiClients/CompaniesHouse/CompaniesHouseApi.cs b/Frontend/CO.CDP.OrganisationApp/ThirdPartyApiClients/CompaniesHouse/CompaniesHouseApi.cs index d182843db..41476fef4 100644 --- a/Frontend/CO.CDP.OrganisationApp/ThirdPartyApiClients/CompaniesHouse/CompaniesHouseApi.cs +++ b/Frontend/CO.CDP.OrganisationApp/ThirdPartyApiClients/CompaniesHouse/CompaniesHouseApi.cs @@ -1,5 +1,7 @@ +using CO.CDP.OrganisationApp.Logging; using Flurl; using Flurl.Http; +using System.Net; namespace CO.CDP.OrganisationApp.ThirdPartyApiClients.CompaniesHouse; @@ -22,9 +24,12 @@ public class CompaniesHouseApi(IConfiguration configuration, .GetAsync() .ReceiveJson(); } + catch (FlurlHttpException ex) when ((ex.StatusCode == (int)HttpStatusCode.NotFound) || (ex.StatusCode == (int)HttpStatusCode.InternalServerError)) + { + } catch (Exception exc) { - logger.LogError(exc, "Failed during call to registered office address."); + Log(exc, companyNumber); } return companyRegDetails; @@ -46,14 +51,24 @@ public class CompaniesHouseApi(IConfiguration configuration, .GetAsync() .ReceiveJson(); } + catch (FlurlHttpException ex) when ((ex.StatusCode == (int)HttpStatusCode.NotFound) || (ex.StatusCode == (int)HttpStatusCode.InternalServerError)) + { + } catch (Exception exc) { - logger.LogError(exc, "Failed during call to get company profile."); + Log(exc, companyNumber); } return profile; } + private void Log(Exception exc, string companyNumber) + { + var logException = new ExceptionLogging($"Failed to call Companies House API for company number: {companyNumber}.", ErrorCodes.CompaniesHouseApiError, exc); + + logger.LogError(logException, "Failed to call Companies House API for company number: {companyNumber}.", companyNumber); + } + private string GetCompaniesHouseUrl() { return configuration["CompaniesHouse:Url"] ?? ""; From 5c0426c5e8456764bfab670c577864483715e04d Mon Sep 17 00:00:00 2001 From: Andy Mantell <134642+andymantell@users.noreply.github.com> Date: Wed, 16 Oct 2024 08:49:34 +0100 Subject: [PATCH 08/42] Fix unnecessary use of null suppressing operator --- .../Forms/ChoiceProviderStrategies/ChoiceProviderService.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Frontend/CO.CDP.OrganisationApp/Pages/Forms/ChoiceProviderStrategies/ChoiceProviderService.cs b/Frontend/CO.CDP.OrganisationApp/Pages/Forms/ChoiceProviderStrategies/ChoiceProviderService.cs index 27cb04e1d..440c8ff58 100644 --- a/Frontend/CO.CDP.OrganisationApp/Pages/Forms/ChoiceProviderStrategies/ChoiceProviderService.cs +++ b/Frontend/CO.CDP.OrganisationApp/Pages/Forms/ChoiceProviderStrategies/ChoiceProviderService.cs @@ -4,6 +4,6 @@ public class ChoiceProviderService(IServiceProvider serviceProvider) : IChoicePr public IChoiceProviderStrategy GetStrategy(string? strategyType) { strategyType ??= "DefaultChoiceProviderStrategy"; - return serviceProvider.GetKeyedService(strategyType)!; + return serviceProvider.GetRequiredKeyedService(strategyType); } } From 530f4d8d3c4a33925d9ca982d544d42985f6882e Mon Sep 17 00:00:00 2001 From: Andy Mantell <134642+andymantell@users.noreply.github.com> Date: Wed, 16 Oct 2024 11:43:08 +0100 Subject: [PATCH 09/42] Extending forms api automapper to localize form options coming out the db --- .../AutoMapper/LocalizedPropertyResolver.cs | 21 ++++++++++-- .../AutoMapper/WebApiToPersistenceProfile.cs | 32 +++++++++++++++---- 2 files changed, 44 insertions(+), 9 deletions(-) diff --git a/Services/CO.CDP.Forms.WebApi/AutoMapper/LocalizedPropertyResolver.cs b/Services/CO.CDP.Forms.WebApi/AutoMapper/LocalizedPropertyResolver.cs index 9dea0ba14..27dfd058c 100644 --- a/Services/CO.CDP.Forms.WebApi/AutoMapper/LocalizedPropertyResolver.cs +++ b/Services/CO.CDP.Forms.WebApi/AutoMapper/LocalizedPropertyResolver.cs @@ -15,11 +15,26 @@ public LocalizedPropertyResolver(IHtmlLocalizer localizer) public string Resolve(TSource source, TDestination destination, string sourceMember, string destMember, ResolutionContext context) { - if (!string.IsNullOrEmpty(sourceMember)) + return _localizer[sourceMember].Value; + } +} + +public class NullableLocalizedPropertyResolver : IMemberValueResolver +{ + private readonly IHtmlLocalizer _localizer; + + public NullableLocalizedPropertyResolver(IHtmlLocalizer localizer) + { + _localizer = localizer; + } + + public string? Resolve(TSource? source, TDestination? destination, string? sourceMember, string? destMember, ResolutionContext context) + { + if (sourceMember == null) { - return _localizer[sourceMember].Value; + return null; } - return sourceMember; + return _localizer[sourceMember].Value; } } \ No newline at end of file diff --git a/Services/CO.CDP.Forms.WebApi/AutoMapper/WebApiToPersistenceProfile.cs b/Services/CO.CDP.Forms.WebApi/AutoMapper/WebApiToPersistenceProfile.cs index 53eae7450..69a685b1c 100644 --- a/Services/CO.CDP.Forms.WebApi/AutoMapper/WebApiToPersistenceProfile.cs +++ b/Services/CO.CDP.Forms.WebApi/AutoMapper/WebApiToPersistenceProfile.cs @@ -12,6 +12,9 @@ public WebApiToPersistenceProfile() CreateMap() .ForMember(dest => dest.Title, opt => opt.MapFrom, string>(src => src.Title)) + .ForMember(dest => dest.Description, opt => opt.MapFrom, string?>(src => src.Description)) + .ForMember(dest => dest.Caption, opt => opt.MapFrom, string?>(src => src.Caption)) + .ForMember(dest => dest.SummaryTitle, opt => opt.MapFrom, string?>(src => src.SummaryTitle)) .ForMember(dest => dest.Id, opt => opt.MapFrom(src => src.Guid)) .ForMember(dest => dest.NextQuestion, opt => opt.MapFrom(src => src.NextQuestion != null ? src.NextQuestion.Guid : (Guid?)null)) .ForMember(dest => dest.NextQuestionAlternative, opt => opt.MapFrom(src => src.NextQuestionAlternative != null ? src.NextQuestionAlternative.Guid : (Guid?)null)) @@ -20,15 +23,31 @@ public WebApiToPersistenceProfile() CreateMap(); - CreateMap(); + CreateMap() + .ForMember(dest => dest.Title, opt => opt.MapFrom, string>(src => src.Title)) + .ForMember(dest => dest.GroupName, opt => opt.MapFrom, string?>(src => src.GroupName)) + .ForMember(dest => dest.Hint, opt => opt.MapFrom(src => src.Hint)) + .ForMember(dest => dest.Id, opt => opt.MapFrom(src => src.Id)); - CreateMap(); + CreateMap() + .ForMember(dest => dest.Title, opt => opt.MapFrom, string?>(src => src.Title)) + .ForMember(dest => dest.Description, opt => opt.MapFrom, string>(src => src.Description)); - CreateMap(); + CreateMap() + .ForMember(dest => dest.Name, opt => opt.MapFrom, string>(src => src.Name)) + .ForMember(dest => dest.Hint, opt => opt.MapFrom, string>(src => src.Hint)) + .ForMember(dest => dest.Caption, opt => opt.MapFrom, string>(src => src.Caption)); - CreateMap(); + CreateMap() + .ForMember(dest => dest.Title, opt => opt.MapFrom, string?>(src => src.Title)); - CreateMap(); + CreateMap() + .ForMember(dest => dest.SingularSummaryHeading, opt => opt.MapFrom, string?>(src => src.SingularSummaryHeading)) + .ForMember(dest => dest.PluralSummaryHeadingFormat, opt => opt.MapFrom, string?>(src => src.PluralSummaryHeadingFormat)) + .ForMember(dest => dest.AddAnotherAnswerLabel, opt => opt.MapFrom, string?>(src => src.AddAnotherAnswerLabel)) + .ForMember(dest => dest.RemoveConfirmationCaption, opt => opt.MapFrom, string?>(src => src.RemoveConfirmationCaption)) + .ForMember(dest => dest.RemoveConfirmationHeading, opt => opt.MapFrom, string?>(src => src.RemoveConfirmationHeading)) + .ForMember(dest => dest.FurtherQuestionsExemptedHeading, opt => opt.MapFrom, string?>(src => src.FurtherQuestionsExemptedHeading)); CreateMap() .ForMember(dest => dest.Guid, opt => opt.MapFrom(src => src.Id)) @@ -53,7 +72,8 @@ public WebApiToPersistenceProfile() CreateMap() .ForMember(dest => dest.Id, opt => opt.MapFrom(src => src.Guid)); - CreateMap(); + CreateMap() + .ForMember(dest => dest.SectionName, opt => opt.MapFrom, string>(src => src.SectionName)); } private static DateTime? ToUtc(DateTime? dateTime) => dateTime?.ToUniversalTime(); From 6010785f86d9d36cb78e70e564ca556339a0d690 Mon Sep 17 00:00:00 2001 From: Andy Mantell <134642+andymantell@users.noreply.github.com> Date: Wed, 16 Oct 2024 13:39:31 +0100 Subject: [PATCH 10/42] text tweak from content designers --- .../Pages/Organisation/OrganisationOverview.cshtml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Frontend/CO.CDP.OrganisationApp/Pages/Organisation/OrganisationOverview.cshtml b/Frontend/CO.CDP.OrganisationApp/Pages/Organisation/OrganisationOverview.cshtml index ee8bd4052..9386f269d 100644 --- a/Frontend/CO.CDP.OrganisationApp/Pages/Organisation/OrganisationOverview.cshtml +++ b/Frontend/CO.CDP.OrganisationApp/Pages/Organisation/OrganisationOverview.cshtml @@ -143,7 +143,7 @@ @if (organisationDetails.IsBuyer()) {

- Get procurement guidance on the Procurement Pathways service (opens in new tab) + Get procurement guidance on the Procurement Pathway service (opens in new tab)

} From 8247bca18e5956130f40ca01032944f24042d735 Mon Sep 17 00:00:00 2001 From: Andy Mantell <134642+andymantell@users.noreply.github.com> Date: Wed, 16 Oct 2024 14:26:34 +0100 Subject: [PATCH 11/42] Translating static text on supplier information page --- .../Pages/Shared/_Layout.cshtml | 4 -- .../SupplierInformationSummary.cshtml | 29 +++++++------ .../StaticTextResource.cy.resx | 19 +++++++- .../StaticTextResource.resx | 43 ++++++++++++++++++- 4 files changed, 73 insertions(+), 22 deletions(-) diff --git a/Frontend/CO.CDP.OrganisationApp/Pages/Shared/_Layout.cshtml b/Frontend/CO.CDP.OrganisationApp/Pages/Shared/_Layout.cshtml index 156b2b533..d4871f4e4 100644 --- a/Frontend/CO.CDP.OrganisationApp/Pages/Shared/_Layout.cshtml +++ b/Frontend/CO.CDP.OrganisationApp/Pages/Shared/_Layout.cshtml @@ -131,10 +131,6 @@ -
- Html aware, but not typesafe: @Localizer["TestKey"]

- Not html aware, but typesafe: @StaticTextResource.TestKey - @RenderBody() diff --git a/Frontend/CO.CDP.OrganisationApp/Pages/Supplier/SupplierInformationSummary.cshtml b/Frontend/CO.CDP.OrganisationApp/Pages/Supplier/SupplierInformationSummary.cshtml index ed21198f6..b1f4b95d5 100644 --- a/Frontend/CO.CDP.OrganisationApp/Pages/Supplier/SupplierInformationSummary.cshtml +++ b/Frontend/CO.CDP.OrganisationApp/Pages/Supplier/SupplierInformationSummary.cshtml @@ -1,4 +1,5 @@ @page "/organisation/{id}/supplier-information" +@using CO.CDP.Localization @using CO.CDP.OrganisationApp.Pages.Forms @using CO.CDP.OrganisationApp.Constants @inject IUserInfoService userInfoService @@ -9,10 +10,10 @@ { return status switch { - SupplierInformationStatus.StepStatus.NotStarted => "Not started", - SupplierInformationStatus.StepStatus.InProcess => "In progress", - SupplierInformationStatus.StepStatus.Completed => "Completed", - _ => "Not started" + SupplierInformationStatus.StepStatus.NotStarted => StaticTextResource.SupplierInformationStatus_StepStatus_NotStarted, + SupplierInformationStatus.StepStatus.InProcess => StaticTextResource.SupplierInformationStatus_StepStatus_InProcess, + SupplierInformationStatus.StepStatus.Completed => StaticTextResource.SupplierInformationStatus_StepStatus_Completed, + _ => StaticTextResource.SupplierInformationStatus_StepStatus_NotStarted }; } @@ -27,15 +28,15 @@ if (count == 0) { - return Model.ConnectedPersonStepStatus == SupplierInformationStatus.StepStatus.Completed ? "No connected persons" : string.Empty; + return Model.ConnectedPersonStepStatus == SupplierInformationStatus.StepStatus.Completed ? StaticTextResource.Supplier_SupplierInformationSummary_ConnectedPersonCount_None : string.Empty; } - return $"{count} Connected person{(count > 1 ? "s" : "")}"; + return string.Format(count > 1 ? StaticTextResource.Supplier_SupplierInformationSummary_ConnectedPersonCount_Plural : StaticTextResource.Supplier_SupplierInformationSummary_ConnectedPersonCount_Singular, count); } } - Back + @StaticTextResource.Global_Back
@@ -44,11 +45,11 @@

@Model.Name

-

Supplier information

+

@StaticTextResource.Supplier_SupplierInformationSummary_Heading

- Basic information + @StaticTextResource.BasicInformation_SectionHeading
@@ -62,7 +63,7 @@
- Connected persons + @StaticTextResource.ConnectedPersons_SectionHeading
@NoOfConnectedPersonText() @@ -101,18 +102,18 @@ { if (section.AnswerSetWithFurtherQuestionExemptedExists) { - @:Not Applicable + @StaticTextResource.Supplier_SupplierInformationSummary_FormsFurtherQuestionExempt } else { - @(section.AnswerSetCount) @:records + @(section.AnswerSetCount > 1 ? StaticTextResource.Supplier_SupplierInformationSummary_FormRecordCount_Plural : StaticTextResource.Supplier_SupplierInformationSummary_FormRecordCount_Singular) } }
@if (!declarationSection) { - @(section.AnswerSetCount > 0 ? $"Completed" : "Not started") + @(section.AnswerSetCount > 0 ? StaticTextResource.SupplierInformationStatus_StepStatus_Completed: StaticTextResource.SupplierInformationStatus_StepStatus_NotStarted) }
@@ -120,7 +121,7 @@ }
diff --git a/Services/CO.CDP.Localization/StaticTextResource.cy.resx b/Services/CO.CDP.Localization/StaticTextResource.cy.resx index 59fea66e2..0621cf9a5 100644 --- a/Services/CO.CDP.Localization/StaticTextResource.cy.resx +++ b/Services/CO.CDP.Localization/StaticTextResource.cy.resx @@ -117,7 +117,22 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - Welsh value <strong>here</strong> + + Ddim wedi dechrau + + + Wedi'i gyflawni + + + Gwybodaeth am y cyflenwr + + + Yn ôl i fanylion y sefydliad + + + Unigolion cysylltiedig + + + Gwybodaeth sylfaenol \ No newline at end of file diff --git a/Services/CO.CDP.Localization/StaticTextResource.resx b/Services/CO.CDP.Localization/StaticTextResource.resx index 27debddb2..815d7a093 100644 --- a/Services/CO.CDP.Localization/StaticTextResource.resx +++ b/Services/CO.CDP.Localization/StaticTextResource.resx @@ -117,7 +117,46 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - English <strong>value</strong> here + + Not started + + + In progress + + + Completed + + + Supplier information + + + Back to organisation details + + + Connected persons + + + Basic information + + + Back + + + {0} Connected person + + + {0} Connected persons + + + No connected persons + + + Not Applicable + + + {0} record + + + {0} records \ No newline at end of file From 220bbe375770c5924901027399f2df612de645ff Mon Sep 17 00:00:00 2001 From: David Baker Date: Wed, 16 Oct 2024 14:52:08 +0100 Subject: [PATCH 12/42] Updates following PR code review. --- .../Logging/CdpErrorCodes.cs | 6 +++++ .../Logging/CdpExceptionLogging.cs | 23 +++++++++++++++++++ .../Logging/ErrorCodes.cs | 6 ----- .../Logging/ExceptionLogging.cs | 18 --------------- .../CompaniesHouse/CompaniesHouseApi.cs | 5 ++-- 5 files changed, 32 insertions(+), 26 deletions(-) create mode 100644 Frontend/CO.CDP.OrganisationApp/Logging/CdpErrorCodes.cs create mode 100644 Frontend/CO.CDP.OrganisationApp/Logging/CdpExceptionLogging.cs delete mode 100644 Frontend/CO.CDP.OrganisationApp/Logging/ErrorCodes.cs delete mode 100644 Frontend/CO.CDP.OrganisationApp/Logging/ExceptionLogging.cs diff --git a/Frontend/CO.CDP.OrganisationApp/Logging/CdpErrorCodes.cs b/Frontend/CO.CDP.OrganisationApp/Logging/CdpErrorCodes.cs new file mode 100644 index 000000000..2fc01b49c --- /dev/null +++ b/Frontend/CO.CDP.OrganisationApp/Logging/CdpErrorCodes.cs @@ -0,0 +1,6 @@ +namespace CO.CDP.OrganisationApp.Logging; + +public class CdpErrorCodes +{ + public const string CompaniesHouseApiError = "CDP_COMPANIES_HOUSE_API_ERROR"; +} diff --git a/Frontend/CO.CDP.OrganisationApp/Logging/CdpExceptionLogging.cs b/Frontend/CO.CDP.OrganisationApp/Logging/CdpExceptionLogging.cs new file mode 100644 index 000000000..64d10945d --- /dev/null +++ b/Frontend/CO.CDP.OrganisationApp/Logging/CdpExceptionLogging.cs @@ -0,0 +1,23 @@ +namespace CO.CDP.OrganisationApp.Logging; + +public class CdpExceptionLogging : Exception +{ + public string ErrorCode { get; } + + public CdpExceptionLogging(string message, string errorCode) + : base(message) + { + ErrorCode = errorCode; + } + + public CdpExceptionLogging(string message, string errorCode, Exception innerException) + : base(message, innerException) + { + ErrorCode = errorCode; + } + + public override string ToString() + { + return $"{ErrorCode}: Inner exception: {base.ToString()}"; + } +} \ No newline at end of file diff --git a/Frontend/CO.CDP.OrganisationApp/Logging/ErrorCodes.cs b/Frontend/CO.CDP.OrganisationApp/Logging/ErrorCodes.cs deleted file mode 100644 index a219513af..000000000 --- a/Frontend/CO.CDP.OrganisationApp/Logging/ErrorCodes.cs +++ /dev/null @@ -1,6 +0,0 @@ -namespace CO.CDP.OrganisationApp.Logging; - -public class ErrorCodes -{ - public const int CompaniesHouseApiError = 1000; -} diff --git a/Frontend/CO.CDP.OrganisationApp/Logging/ExceptionLogging.cs b/Frontend/CO.CDP.OrganisationApp/Logging/ExceptionLogging.cs deleted file mode 100644 index a9c530097..000000000 --- a/Frontend/CO.CDP.OrganisationApp/Logging/ExceptionLogging.cs +++ /dev/null @@ -1,18 +0,0 @@ -namespace CO.CDP.OrganisationApp.Logging; - -public class ExceptionLogging : Exception -{ - public int ErrorCode { get; } - - public ExceptionLogging(string message, int errorCode) - : base(message) - { - ErrorCode = errorCode; - } - - public ExceptionLogging(string message, int errorCode, Exception innerException) - : base(message, innerException) - { - ErrorCode = errorCode; - } -} \ No newline at end of file diff --git a/Frontend/CO.CDP.OrganisationApp/ThirdPartyApiClients/CompaniesHouse/CompaniesHouseApi.cs b/Frontend/CO.CDP.OrganisationApp/ThirdPartyApiClients/CompaniesHouse/CompaniesHouseApi.cs index 41476fef4..9e2b0281e 100644 --- a/Frontend/CO.CDP.OrganisationApp/ThirdPartyApiClients/CompaniesHouse/CompaniesHouseApi.cs +++ b/Frontend/CO.CDP.OrganisationApp/ThirdPartyApiClients/CompaniesHouse/CompaniesHouseApi.cs @@ -53,6 +53,7 @@ public class CompaniesHouseApi(IConfiguration configuration, } catch (FlurlHttpException ex) when ((ex.StatusCode == (int)HttpStatusCode.NotFound) || (ex.StatusCode == (int)HttpStatusCode.InternalServerError)) { + } catch (Exception exc) { @@ -64,9 +65,9 @@ public class CompaniesHouseApi(IConfiguration configuration, private void Log(Exception exc, string companyNumber) { - var logException = new ExceptionLogging($"Failed to call Companies House API for company number: {companyNumber}.", ErrorCodes.CompaniesHouseApiError, exc); + var logException = new CdpExceptionLogging($"Failed to call Companies House API for company number: {companyNumber}.", CdpErrorCodes.CompaniesHouseApiError, exc); - logger.LogError(logException, "Failed to call Companies House API for company number: {companyNumber}.", companyNumber); + logger.LogError(logException, "Failed to call Companies House API."); } private string GetCompaniesHouseUrl() From c43f68aa7f69d59454fa0c820287214071c6ff94 Mon Sep 17 00:00:00 2001 From: Andy Mantell <134642+andymantell@users.noreply.github.com> Date: Wed, 16 Oct 2024 15:03:01 +0100 Subject: [PATCH 13/42] Translations for the supplier information summary page --- .../Registration/OrganisationName.cshtml.cs | 5 +- .../Registration/OrganisationType.cshtml.cs | 2 +- .../SupplierInformationSummary.cshtml | 2 +- .../FormsEngineResource.cy.resx | 16 +- .../FormsEngineResource.resx | 16 +- .../ValidationMessagesResource.cy.resx | 61 +- .../ValidationMessagesResource.resx | 7 +- ...upplierInformationLocalization.Designer.cs | 1879 +++++++++++++++++ ...6134622_SupplierInformationLocalization.cs | 68 + 9 files changed, 2011 insertions(+), 45 deletions(-) create mode 100644 Services/CO.CDP.OrganisationInformation.Persistence/Migrations/20241016134622_SupplierInformationLocalization.Designer.cs create mode 100644 Services/CO.CDP.OrganisationInformation.Persistence/Migrations/20241016134622_SupplierInformationLocalization.cs diff --git a/Frontend/CO.CDP.OrganisationApp/Pages/Registration/OrganisationName.cshtml.cs b/Frontend/CO.CDP.OrganisationApp/Pages/Registration/OrganisationName.cshtml.cs index 9d9b17840..a02b2f6bf 100644 --- a/Frontend/CO.CDP.OrganisationApp/Pages/Registration/OrganisationName.cshtml.cs +++ b/Frontend/CO.CDP.OrganisationApp/Pages/Registration/OrganisationName.cshtml.cs @@ -1,3 +1,4 @@ +using CO.CDP.Localization; using CO.CDP.OrganisationApp.Models; using CO.CDP.OrganisationApp.ThirdPartyApiClients.CompaniesHouse; using Microsoft.AspNetCore.Mvc; @@ -12,8 +13,8 @@ public class OrganisationNameModel(ISession session, ICompaniesHouseApi companie public override string CurrentPage => OrganisationNamePage; [BindProperty] - [DisplayName("Enter the organisation's name")] - [Required(ErrorMessage = "Enter the organisation's name")] + [DisplayName(nameof(ValidationMessagesResource.OrganisationRegistration_EnterOrganisationName))] + [Required(ErrorMessage = nameof(ValidationMessagesResource.OrganisationRegistration_EnterOrganisationName))] public string? OrganisationName { get; set; } [BindProperty] diff --git a/Frontend/CO.CDP.OrganisationApp/Pages/Registration/OrganisationType.cshtml.cs b/Frontend/CO.CDP.OrganisationApp/Pages/Registration/OrganisationType.cshtml.cs index 270e79c7f..0bba7bf3a 100644 --- a/Frontend/CO.CDP.OrganisationApp/Pages/Registration/OrganisationType.cshtml.cs +++ b/Frontend/CO.CDP.OrganisationApp/Pages/Registration/OrganisationType.cshtml.cs @@ -13,7 +13,7 @@ public class OrganisationTypeModel( public override string CurrentPage => OrganisationTypePage; [BindProperty] - [Required(ErrorMessage = nameof(ValidationMessagesResource.OrganisationRegistration_SelectOrganisationType) )] + [Required(ErrorMessage = "Select the organisation type")] public OrganisationType? OrganisationType { get; set; } [BindProperty] diff --git a/Frontend/CO.CDP.OrganisationApp/Pages/Supplier/SupplierInformationSummary.cshtml b/Frontend/CO.CDP.OrganisationApp/Pages/Supplier/SupplierInformationSummary.cshtml index b1f4b95d5..715a60799 100644 --- a/Frontend/CO.CDP.OrganisationApp/Pages/Supplier/SupplierInformationSummary.cshtml +++ b/Frontend/CO.CDP.OrganisationApp/Pages/Supplier/SupplierInformationSummary.cshtml @@ -106,7 +106,7 @@ } else { - @(section.AnswerSetCount > 1 ? StaticTextResource.Supplier_SupplierInformationSummary_FormRecordCount_Plural : StaticTextResource.Supplier_SupplierInformationSummary_FormRecordCount_Singular) + @(string.Format(section.AnswerSetCount > 1 ? StaticTextResource.Supplier_SupplierInformationSummary_FormRecordCount_Plural : StaticTextResource.Supplier_SupplierInformationSummary_FormRecordCount_Singular, section.AnswerSetCount)) } } diff --git a/Services/CO.CDP.Localization/FormsEngineResource.cy.resx b/Services/CO.CDP.Localization/FormsEngineResource.cy.resx index cd01bdeb9..ad65c12eb 100644 --- a/Services/CO.CDP.Localization/FormsEngineResource.cy.resx +++ b/Services/CO.CDP.Localization/FormsEngineResource.cy.resx @@ -117,7 +117,19 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - Welsh title here + + Eithriadau + + + Rhannu fy ngwybodaeth + + + Cymwysterau + + + Sicrwydd masnach + + + Gwybodaeth ariannol \ No newline at end of file diff --git a/Services/CO.CDP.Localization/FormsEngineResource.resx b/Services/CO.CDP.Localization/FormsEngineResource.resx index 69d8fbfee..20c05e588 100644 --- a/Services/CO.CDP.Localization/FormsEngineResource.resx +++ b/Services/CO.CDP.Localization/FormsEngineResource.resx @@ -117,7 +117,19 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - English title here + + Exclusions + + + Share my information + + + Qualifications + + + Trade assurances + + + Financial information \ No newline at end of file diff --git a/Services/CO.CDP.Localization/ValidationMessagesResource.cy.resx b/Services/CO.CDP.Localization/ValidationMessagesResource.cy.resx index 1e328883f..df6836f5c 100644 --- a/Services/CO.CDP.Localization/ValidationMessagesResource.cy.resx +++ b/Services/CO.CDP.Localization/ValidationMessagesResource.cy.resx @@ -1,17 +1,17 @@  - @@ -117,10 +117,7 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - WELSH Select the organisation type - - - Bar + + Rhowch enw’r sefydliad \ No newline at end of file diff --git a/Services/CO.CDP.Localization/ValidationMessagesResource.resx b/Services/CO.CDP.Localization/ValidationMessagesResource.resx index abb6c32b5..c76828501 100644 --- a/Services/CO.CDP.Localization/ValidationMessagesResource.resx +++ b/Services/CO.CDP.Localization/ValidationMessagesResource.resx @@ -117,10 +117,7 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - Select the organisation type - - - Foo + + Enter the organisation's name \ No newline at end of file diff --git a/Services/CO.CDP.OrganisationInformation.Persistence/Migrations/20241016134622_SupplierInformationLocalization.Designer.cs b/Services/CO.CDP.OrganisationInformation.Persistence/Migrations/20241016134622_SupplierInformationLocalization.Designer.cs new file mode 100644 index 000000000..a85f3cab9 --- /dev/null +++ b/Services/CO.CDP.OrganisationInformation.Persistence/Migrations/20241016134622_SupplierInformationLocalization.Designer.cs @@ -0,0 +1,1879 @@ +// +using System; +using System.Collections.Generic; +using CO.CDP.OrganisationInformation.Persistence; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; + +#nullable disable + +namespace CO.CDP.OrganisationInformation.Persistence.Migrations +{ + [DbContext(typeof(OrganisationInformationContext))] + [Migration("20241016134622_SupplierInformationLocalization")] + partial class SupplierInformationLocalization + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("ProductVersion", "8.0.8") + .HasAnnotation("Relational:MaxIdentifierLength", 63); + + NpgsqlModelBuilderExtensions.HasPostgresEnum(modelBuilder, "connected_entity_type", new[] { "organisation", "individual", "trust_or_trustee" }); + NpgsqlModelBuilderExtensions.HasPostgresEnum(modelBuilder, "connected_organisation_category", new[] { "registered_company", "director_or_the_same_responsibilities", "parent_or_subsidiary_company", "a_company_your_organisation_has_taken_over", "any_other_organisation_with_significant_influence_or_control" }); + NpgsqlModelBuilderExtensions.HasPostgresEnum(modelBuilder, "connected_person_category", new[] { "person_with_significant_control", "director_or_individual_with_the_same_responsibilities", "any_other_individual_with_significant_influence_or_control" }); + NpgsqlModelBuilderExtensions.HasPostgresEnum(modelBuilder, "connected_person_type", new[] { "individual", "trust_or_trustee" }); + NpgsqlModelBuilderExtensions.HasPostgresEnum(modelBuilder, "control_condition", new[] { "none", "owns_shares", "has_voting_rights", "can_appoint_or_remove_directors", "has_other_significant_influence_or_control" }); + NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder); + + modelBuilder.Entity("CO.CDP.MQ.Outbox.OutboxMessage", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("CreatedOn") + .ValueGeneratedOnAdd() + .HasColumnType("timestamp with time zone") + .HasColumnName("created_on") + .HasDefaultValueSql("CURRENT_TIMESTAMP"); + + b.Property("Message") + .IsRequired() + .HasColumnType("text") + .HasColumnName("message"); + + b.Property("Published") + .HasColumnType("boolean") + .HasColumnName("published"); + + b.Property("Type") + .IsRequired() + .HasColumnType("text") + .HasColumnName("type"); + + b.Property("UpdatedOn") + .ValueGeneratedOnAdd() + .HasColumnType("timestamp with time zone") + .HasColumnName("updated_on") + .HasDefaultValueSql("CURRENT_TIMESTAMP"); + + b.HasKey("Id") + .HasName("pk_outbox_messages"); + + b.HasIndex("CreatedOn") + .HasDatabaseName("ix_outbox_messages_created_on"); + + b.HasIndex("Published") + .HasDatabaseName("ix_outbox_messages_published"); + + b.ToTable("outbox_messages", (string)null); + }); + + modelBuilder.Entity("CO.CDP.OrganisationInformation.Persistence.Address", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("Country") + .IsRequired() + .HasColumnType("text") + .HasColumnName("country"); + + b.Property("CountryName") + .IsRequired() + .HasColumnType("text") + .HasColumnName("country_name"); + + b.Property("CreatedOn") + .ValueGeneratedOnAdd() + .HasColumnType("timestamp with time zone") + .HasColumnName("created_on") + .HasDefaultValueSql("CURRENT_TIMESTAMP"); + + b.Property("Locality") + .IsRequired() + .HasColumnType("text") + .HasColumnName("locality"); + + b.Property("PostalCode") + .IsRequired() + .HasColumnType("text") + .HasColumnName("postal_code"); + + b.Property("Region") + .HasColumnType("text") + .HasColumnName("region"); + + b.Property("StreetAddress") + .IsRequired() + .HasColumnType("text") + .HasColumnName("street_address"); + + b.Property("UpdatedOn") + .ValueGeneratedOnAdd() + .HasColumnType("timestamp with time zone") + .HasColumnName("updated_on") + .HasDefaultValueSql("CURRENT_TIMESTAMP"); + + b.HasKey("Id") + .HasName("pk_addresses"); + + b.ToTable("addresses", (string)null); + }); + + modelBuilder.Entity("CO.CDP.OrganisationInformation.Persistence.AuthenticationKey", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("CreatedOn") + .ValueGeneratedOnAdd() + .HasColumnType("timestamp with time zone") + .HasColumnName("created_on") + .HasDefaultValueSql("CURRENT_TIMESTAMP"); + + b.Property("Key") + .IsRequired() + .HasColumnType("text") + .HasColumnName("key"); + + b.Property("Name") + .IsRequired() + .HasColumnType("text") + .HasColumnName("name"); + + b.Property("OrganisationId") + .HasColumnType("integer") + .HasColumnName("organisation_id"); + + b.Property("Revoked") + .HasColumnType("boolean") + .HasColumnName("revoked"); + + b.Property("RevokedOn") + .HasColumnType("timestamp with time zone") + .HasColumnName("revoked_on"); + + b.Property("Scopes") + .IsRequired() + .HasColumnType("jsonb") + .HasColumnName("scopes"); + + b.Property("UpdatedOn") + .ValueGeneratedOnAdd() + .HasColumnType("timestamp with time zone") + .HasColumnName("updated_on") + .HasDefaultValueSql("CURRENT_TIMESTAMP"); + + b.HasKey("Id") + .HasName("pk_authentication_keys"); + + b.HasIndex("OrganisationId") + .HasDatabaseName("ix_authentication_keys_organisation_id"); + + b.HasIndex("Name", "OrganisationId") + .IsUnique() + .HasDatabaseName("ix_authentication_keys_name_organisation_id"); + + NpgsqlIndexBuilderExtensions.AreNullsDistinct(b.HasIndex("Name", "OrganisationId"), false); + + b.ToTable("authentication_keys", (string)null); + }); + + modelBuilder.Entity("CO.CDP.OrganisationInformation.Persistence.ConnectedEntity", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("CompanyHouseNumber") + .HasColumnType("text") + .HasColumnName("company_house_number"); + + b.Property("CreatedOn") + .ValueGeneratedOnAdd() + .HasColumnType("timestamp with time zone") + .HasColumnName("created_on") + .HasDefaultValueSql("CURRENT_TIMESTAMP"); + + b.Property("EndDate") + .HasColumnType("timestamp with time zone") + .HasColumnName("end_date"); + + b.Property("EntityType") + .HasColumnType("integer") + .HasColumnName("entity_type"); + + b.Property("Guid") + .HasColumnType("uuid") + .HasColumnName("guid"); + + b.Property("HasCompnayHouseNumber") + .HasColumnType("boolean") + .HasColumnName("has_compnay_house_number"); + + b.Property("OverseasCompanyNumber") + .HasColumnType("text") + .HasColumnName("overseas_company_number"); + + b.Property("RegisterName") + .HasColumnType("text") + .HasColumnName("register_name"); + + b.Property("RegisteredDate") + .HasColumnType("timestamp with time zone") + .HasColumnName("registered_date"); + + b.Property("StartDate") + .HasColumnType("timestamp with time zone") + .HasColumnName("start_date"); + + b.Property("SupplierOrganisationId") + .HasColumnType("integer") + .HasColumnName("supplier_organisation_id"); + + b.Property("UpdatedOn") + .ValueGeneratedOnAdd() + .HasColumnType("timestamp with time zone") + .HasColumnName("updated_on") + .HasDefaultValueSql("CURRENT_TIMESTAMP"); + + b.HasKey("Id") + .HasName("pk_connected_entities"); + + b.HasIndex("Guid") + .IsUnique() + .HasDatabaseName("ix_connected_entities_guid"); + + b.HasIndex("SupplierOrganisationId") + .HasDatabaseName("ix_connected_entities_supplier_organisation_id"); + + b.ToTable("connected_entities", (string)null); + }); + + modelBuilder.Entity("CO.CDP.OrganisationInformation.Persistence.Forms.Form", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("CreatedOn") + .ValueGeneratedOnAdd() + .HasColumnType("timestamp with time zone") + .HasColumnName("created_on") + .HasDefaultValueSql("CURRENT_TIMESTAMP"); + + b.Property("Guid") + .HasColumnType("uuid") + .HasColumnName("guid"); + + b.Property("IsRequired") + .HasColumnType("boolean") + .HasColumnName("is_required"); + + b.Property("Name") + .IsRequired() + .HasColumnType("text") + .HasColumnName("name"); + + b.Property("Scope") + .HasColumnType("integer") + .HasColumnName("scope"); + + b.Property("UpdatedOn") + .ValueGeneratedOnAdd() + .HasColumnType("timestamp with time zone") + .HasColumnName("updated_on") + .HasDefaultValueSql("CURRENT_TIMESTAMP"); + + b.Property("Version") + .IsRequired() + .HasColumnType("text") + .HasColumnName("version"); + + b.HasKey("Id") + .HasName("pk_forms"); + + b.ToTable("forms", (string)null); + }); + + modelBuilder.Entity("CO.CDP.OrganisationInformation.Persistence.Forms.FormAnswer", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("AddressValue") + .HasColumnType("jsonb") + .HasColumnName("address_value"); + + b.Property("BoolValue") + .HasColumnType("boolean") + .HasColumnName("bool_value"); + + b.Property("CreatedFrom") + .HasColumnType("uuid") + .HasColumnName("created_from"); + + b.Property("CreatedOn") + .ValueGeneratedOnAdd() + .HasColumnType("timestamp with time zone") + .HasColumnName("created_on") + .HasDefaultValueSql("CURRENT_TIMESTAMP"); + + b.Property("DateValue") + .HasColumnType("timestamp with time zone") + .HasColumnName("date_value"); + + b.Property("EndValue") + .HasColumnType("timestamp with time zone") + .HasColumnName("end_value"); + + b.Property("FormAnswerSetId") + .HasColumnType("integer") + .HasColumnName("form_answer_set_id"); + + b.Property("Guid") + .HasColumnType("uuid") + .HasColumnName("guid"); + + b.Property("JsonValue") + .HasColumnType("jsonb") + .HasColumnName("json_value"); + + b.Property("NumericValue") + .HasColumnType("double precision") + .HasColumnName("numeric_value"); + + b.Property("OptionValue") + .HasColumnType("text") + .HasColumnName("option_value"); + + b.Property("QuestionId") + .HasColumnType("integer") + .HasColumnName("question_id"); + + b.Property("StartValue") + .HasColumnType("timestamp with time zone") + .HasColumnName("start_value"); + + b.Property("TextValue") + .HasColumnType("text") + .HasColumnName("text_value"); + + b.Property("UpdatedOn") + .ValueGeneratedOnAdd() + .HasColumnType("timestamp with time zone") + .HasColumnName("updated_on") + .HasDefaultValueSql("CURRENT_TIMESTAMP"); + + b.HasKey("Id") + .HasName("pk_form_answers"); + + b.HasIndex("FormAnswerSetId") + .HasDatabaseName("ix_form_answers_form_answer_set_id"); + + b.HasIndex("QuestionId") + .HasDatabaseName("ix_form_answers_question_id"); + + b.ToTable("form_answers", (string)null); + }); + + modelBuilder.Entity("CO.CDP.OrganisationInformation.Persistence.Forms.FormAnswerSet", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("CreatedFrom") + .HasColumnType("uuid") + .HasColumnName("created_from"); + + b.Property("CreatedOn") + .ValueGeneratedOnAdd() + .HasColumnType("timestamp with time zone") + .HasColumnName("created_on") + .HasDefaultValueSql("CURRENT_TIMESTAMP"); + + b.Property("Deleted") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("deleted"); + + b.Property("FurtherQuestionsExempted") + .HasColumnType("boolean") + .HasColumnName("further_questions_exempted"); + + b.Property("Guid") + .HasColumnType("uuid") + .HasColumnName("guid"); + + b.Property("SectionId") + .HasColumnType("integer") + .HasColumnName("section_id"); + + b.Property("SharedConsentId") + .HasColumnType("integer") + .HasColumnName("shared_consent_id"); + + b.Property("UpdatedOn") + .ValueGeneratedOnAdd() + .HasColumnType("timestamp with time zone") + .HasColumnName("updated_on") + .HasDefaultValueSql("CURRENT_TIMESTAMP"); + + b.HasKey("Id") + .HasName("pk_form_answer_sets"); + + b.HasIndex("SectionId") + .HasDatabaseName("ix_form_answer_sets_section_id"); + + b.HasIndex("SharedConsentId") + .HasDatabaseName("ix_form_answer_sets_shared_consent_id"); + + b.ToTable("form_answer_sets", (string)null); + }); + + modelBuilder.Entity("CO.CDP.OrganisationInformation.Persistence.Forms.FormQuestion", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("Caption") + .HasColumnType("text") + .HasColumnName("caption"); + + b.Property("CreatedOn") + .ValueGeneratedOnAdd() + .HasColumnType("timestamp with time zone") + .HasColumnName("created_on") + .HasDefaultValueSql("CURRENT_TIMESTAMP"); + + b.Property("Description") + .HasColumnType("text") + .HasColumnName("description"); + + b.Property("Guid") + .HasColumnType("uuid") + .HasColumnName("guid"); + + b.Property("IsRequired") + .HasColumnType("boolean") + .HasColumnName("is_required"); + + b.Property("Name") + .IsRequired() + .HasColumnType("text") + .HasColumnName("name"); + + b.Property("NextQuestionAlternativeId") + .HasColumnType("integer") + .HasColumnName("next_question_alternative_id"); + + b.Property("NextQuestionId") + .HasColumnType("integer") + .HasColumnName("next_question_id"); + + b.Property("Options") + .IsRequired() + .HasColumnType("jsonb") + .HasColumnName("options"); + + b.Property("SectionId") + .HasColumnType("integer") + .HasColumnName("section_id"); + + b.Property("SortOrder") + .HasColumnType("integer") + .HasColumnName("sort_order"); + + b.Property("SummaryTitle") + .HasColumnType("text") + .HasColumnName("summary_title"); + + b.Property("Title") + .IsRequired() + .HasColumnType("text") + .HasColumnName("title"); + + b.Property("Type") + .HasColumnType("integer") + .HasColumnName("type"); + + b.Property("UpdatedOn") + .ValueGeneratedOnAdd() + .HasColumnType("timestamp with time zone") + .HasColumnName("updated_on") + .HasDefaultValueSql("CURRENT_TIMESTAMP"); + + b.HasKey("Id") + .HasName("pk_form_questions"); + + b.HasIndex("Name") + .IsUnique() + .HasDatabaseName("ix_form_questions_name"); + + b.HasIndex("NextQuestionAlternativeId") + .HasDatabaseName("ix_form_questions_next_question_alternative_id"); + + b.HasIndex("NextQuestionId") + .HasDatabaseName("ix_form_questions_next_question_id"); + + b.HasIndex("SectionId") + .HasDatabaseName("ix_form_questions_section_id"); + + b.ToTable("form_questions", (string)null); + }); + + modelBuilder.Entity("CO.CDP.OrganisationInformation.Persistence.Forms.FormSection", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("AllowsMultipleAnswerSets") + .HasColumnType("boolean") + .HasColumnName("allows_multiple_answer_sets"); + + b.Property("CheckFurtherQuestionsExempted") + .HasColumnType("boolean") + .HasColumnName("check_further_questions_exempted"); + + b.Property("Configuration") + .IsRequired() + .HasColumnType("jsonb") + .HasColumnName("configuration"); + + b.Property("CreatedOn") + .ValueGeneratedOnAdd() + .HasColumnType("timestamp with time zone") + .HasColumnName("created_on") + .HasDefaultValueSql("CURRENT_TIMESTAMP"); + + b.Property("DisplayOrder") + .HasColumnType("integer") + .HasColumnName("display_order"); + + b.Property("FormId") + .HasColumnType("integer") + .HasColumnName("form_id"); + + b.Property("Guid") + .HasColumnType("uuid") + .HasColumnName("guid"); + + b.Property("Title") + .IsRequired() + .HasColumnType("text") + .HasColumnName("title"); + + b.Property("Type") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasDefaultValue(0) + .HasColumnName("type"); + + b.Property("UpdatedOn") + .ValueGeneratedOnAdd() + .HasColumnType("timestamp with time zone") + .HasColumnName("updated_on") + .HasDefaultValueSql("CURRENT_TIMESTAMP"); + + b.HasKey("Id") + .HasName("pk_form_sections"); + + b.HasIndex("FormId") + .HasDatabaseName("ix_form_sections_form_id"); + + b.ToTable("form_sections", (string)null); + }); + + modelBuilder.Entity("CO.CDP.OrganisationInformation.Persistence.Forms.SharedConsent", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("CreatedFrom") + .HasColumnType("uuid") + .HasColumnName("created_from"); + + b.Property("CreatedOn") + .ValueGeneratedOnAdd() + .HasColumnType("timestamp with time zone") + .HasColumnName("created_on") + .HasDefaultValueSql("CURRENT_TIMESTAMP"); + + b.Property("FormId") + .HasColumnType("integer") + .HasColumnName("form_id"); + + b.Property("FormVersionId") + .IsRequired() + .HasColumnType("text") + .HasColumnName("form_version_id"); + + b.Property("Guid") + .HasColumnType("uuid") + .HasColumnName("guid"); + + b.Property("OrganisationId") + .HasColumnType("integer") + .HasColumnName("organisation_id"); + + b.Property("ShareCode") + .HasColumnType("text") + .HasColumnName("share_code"); + + b.Property("SubmissionState") + .HasColumnType("integer") + .HasColumnName("submission_state"); + + b.Property("SubmittedAt") + .HasColumnType("timestamp with time zone") + .HasColumnName("submitted_at"); + + b.Property("UpdatedOn") + .ValueGeneratedOnAdd() + .HasColumnType("timestamp with time zone") + .HasColumnName("updated_on") + .HasDefaultValueSql("CURRENT_TIMESTAMP"); + + b.HasKey("Id") + .HasName("pk_shared_consents"); + + b.HasIndex("FormId") + .HasDatabaseName("ix_shared_consents_form_id"); + + b.HasIndex("OrganisationId") + .HasDatabaseName("ix_shared_consents_organisation_id"); + + b.ToTable("shared_consents", (string)null); + }); + + modelBuilder.Entity("CO.CDP.OrganisationInformation.Persistence.Organisation", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("ApprovedOn") + .HasColumnType("timestamp with time zone") + .HasColumnName("approved_on"); + + b.Property("CreatedOn") + .ValueGeneratedOnAdd() + .HasColumnType("timestamp with time zone") + .HasColumnName("created_on") + .HasDefaultValueSql("CURRENT_TIMESTAMP"); + + b.Property("Guid") + .HasColumnType("uuid") + .HasColumnName("guid"); + + b.Property("Name") + .IsRequired() + .HasColumnType("text") + .HasColumnName("name"); + + b.Property("ReviewComment") + .HasMaxLength(10000) + .HasColumnType("character varying(10000)") + .HasColumnName("review_comment"); + + b.Property("ReviewedById") + .HasColumnType("integer") + .HasColumnName("reviewed_by_id"); + + b.Property("Roles") + .IsRequired() + .HasColumnType("integer[]") + .HasColumnName("roles"); + + b.Property("TenantId") + .HasColumnType("integer") + .HasColumnName("tenant_id"); + + b.Property("UpdatedOn") + .ValueGeneratedOnAdd() + .HasColumnType("timestamp with time zone") + .HasColumnName("updated_on") + .HasDefaultValueSql("CURRENT_TIMESTAMP"); + + b.HasKey("Id") + .HasName("pk_organisations"); + + b.HasIndex("Guid") + .IsUnique() + .HasDatabaseName("ix_organisations_guid"); + + b.HasIndex("Name") + .IsUnique() + .HasDatabaseName("ix_organisations_name"); + + b.HasIndex("ReviewedById") + .HasDatabaseName("ix_organisations_reviewed_by_id"); + + b.HasIndex("TenantId") + .HasDatabaseName("ix_organisations_tenant_id"); + + b.ToTable("organisations", (string)null); + }); + + modelBuilder.Entity("CO.CDP.OrganisationInformation.Persistence.OrganisationJoinRequest", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("CreatedOn") + .ValueGeneratedOnAdd() + .HasColumnType("timestamp with time zone") + .HasColumnName("created_on") + .HasDefaultValueSql("CURRENT_TIMESTAMP"); + + b.Property("Guid") + .HasColumnType("uuid") + .HasColumnName("guid"); + + b.Property("OrganisationId") + .HasColumnType("integer") + .HasColumnName("organisation_id"); + + b.Property("PersonId") + .HasColumnType("integer") + .HasColumnName("person_id"); + + b.Property("ReviewedById") + .HasColumnType("integer") + .HasColumnName("reviewed_by_id"); + + b.Property("ReviewedOn") + .HasColumnType("timestamp with time zone") + .HasColumnName("reviewed_on"); + + b.Property("Status") + .HasColumnType("integer") + .HasColumnName("status"); + + b.Property("UpdatedOn") + .ValueGeneratedOnAdd() + .HasColumnType("timestamp with time zone") + .HasColumnName("updated_on") + .HasDefaultValueSql("CURRENT_TIMESTAMP"); + + b.HasKey("Id") + .HasName("pk_organisation_join_requests"); + + b.HasIndex("Guid") + .IsUnique() + .HasDatabaseName("ix_organisation_join_requests_guid"); + + b.HasIndex("OrganisationId") + .HasDatabaseName("ix_organisation_join_requests_organisation_id"); + + b.HasIndex("PersonId") + .HasDatabaseName("ix_organisation_join_requests_person_id"); + + b.HasIndex("ReviewedById") + .HasDatabaseName("ix_organisation_join_requests_reviewed_by_id"); + + b.ToTable("organisation_join_requests", (string)null); + }); + + modelBuilder.Entity("CO.CDP.OrganisationInformation.Persistence.OrganisationPerson", b => + { + b.Property("OrganisationId") + .HasColumnType("integer") + .HasColumnName("organisation_id"); + + b.Property("PersonId") + .HasColumnType("integer") + .HasColumnName("person_id"); + + b.Property("CreatedOn") + .ValueGeneratedOnAdd() + .HasColumnType("timestamp with time zone") + .HasColumnName("created_on") + .HasDefaultValueSql("CURRENT_TIMESTAMP"); + + b.Property("Scopes") + .IsRequired() + .HasColumnType("jsonb") + .HasColumnName("scopes"); + + b.Property("UpdatedOn") + .ValueGeneratedOnAdd() + .HasColumnType("timestamp with time zone") + .HasColumnName("updated_on") + .HasDefaultValueSql("CURRENT_TIMESTAMP"); + + b.HasKey("OrganisationId", "PersonId") + .HasName("pk_organisation_person"); + + b.HasIndex("PersonId") + .HasDatabaseName("ix_organisation_person_person_id"); + + b.ToTable("organisation_person", (string)null); + }); + + modelBuilder.Entity("CO.CDP.OrganisationInformation.Persistence.Person", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("CreatedOn") + .ValueGeneratedOnAdd() + .HasColumnType("timestamp with time zone") + .HasColumnName("created_on") + .HasDefaultValueSql("CURRENT_TIMESTAMP"); + + b.Property("Email") + .IsRequired() + .HasColumnType("text") + .HasColumnName("email"); + + b.Property("FirstName") + .IsRequired() + .HasColumnType("text") + .HasColumnName("first_name"); + + b.Property("Guid") + .HasColumnType("uuid") + .HasColumnName("guid"); + + b.Property("LastName") + .IsRequired() + .HasColumnType("text") + .HasColumnName("last_name"); + + b.Property("Phone") + .HasColumnType("text") + .HasColumnName("phone"); + + b.Property>("Scopes") + .IsRequired() + .HasColumnType("text[]") + .HasColumnName("scopes"); + + b.Property("UpdatedOn") + .ValueGeneratedOnAdd() + .HasColumnType("timestamp with time zone") + .HasColumnName("updated_on") + .HasDefaultValueSql("CURRENT_TIMESTAMP"); + + b.Property("UserUrn") + .HasColumnType("text") + .HasColumnName("user_urn"); + + b.HasKey("Id") + .HasName("pk_persons"); + + b.HasIndex("Email") + .IsUnique() + .HasDatabaseName("ix_persons_email"); + + b.HasIndex("Guid") + .IsUnique() + .HasDatabaseName("ix_persons_guid"); + + b.ToTable("persons", (string)null); + }); + + modelBuilder.Entity("CO.CDP.OrganisationInformation.Persistence.PersonInvite", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("CreatedOn") + .ValueGeneratedOnAdd() + .HasColumnType("timestamp with time zone") + .HasColumnName("created_on") + .HasDefaultValueSql("CURRENT_TIMESTAMP"); + + b.Property("Email") + .IsRequired() + .HasColumnType("text") + .HasColumnName("email"); + + b.Property("FirstName") + .IsRequired() + .HasColumnType("text") + .HasColumnName("first_name"); + + b.Property("Guid") + .HasColumnType("uuid") + .HasColumnName("guid"); + + b.Property("InviteSentOn") + .HasColumnType("timestamp with time zone") + .HasColumnName("invite_sent_on"); + + b.Property("LastName") + .IsRequired() + .HasColumnType("text") + .HasColumnName("last_name"); + + b.Property("OrganisationId") + .HasColumnType("integer") + .HasColumnName("organisation_id"); + + b.Property("PersonId") + .HasColumnType("integer") + .HasColumnName("person_id"); + + b.Property>("Scopes") + .IsRequired() + .HasColumnType("text[]") + .HasColumnName("scopes"); + + b.Property("UpdatedOn") + .ValueGeneratedOnAdd() + .HasColumnType("timestamp with time zone") + .HasColumnName("updated_on") + .HasDefaultValueSql("CURRENT_TIMESTAMP"); + + b.HasKey("Id") + .HasName("pk_person_invites"); + + b.HasIndex("Guid") + .IsUnique() + .HasDatabaseName("ix_person_invites_guid"); + + b.HasIndex("OrganisationId") + .HasDatabaseName("ix_person_invites_organisation_id"); + + b.HasIndex("PersonId") + .HasDatabaseName("ix_person_invites_person_id"); + + b.ToTable("person_invites", (string)null); + }); + + modelBuilder.Entity("CO.CDP.OrganisationInformation.Persistence.RefreshToken", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("CreatedOn") + .ValueGeneratedOnAdd() + .HasColumnType("timestamp with time zone") + .HasColumnName("created_on") + .HasDefaultValueSql("CURRENT_TIMESTAMP"); + + b.Property("ExpiryDate") + .HasColumnType("timestamp with time zone") + .HasColumnName("expiry_date"); + + b.Property("Revoked") + .HasColumnType("boolean") + .HasColumnName("revoked"); + + b.Property("TokenHash") + .IsRequired() + .HasColumnType("text") + .HasColumnName("token_hash"); + + b.Property("UpdatedOn") + .ValueGeneratedOnAdd() + .HasColumnType("timestamp with time zone") + .HasColumnName("updated_on") + .HasDefaultValueSql("CURRENT_TIMESTAMP"); + + b.HasKey("Id") + .HasName("pk_refresh_tokens"); + + b.HasIndex("TokenHash") + .IsUnique() + .HasDatabaseName("ix_refresh_tokens_token_hash"); + + b.ToTable("refresh_tokens", (string)null); + }); + + modelBuilder.Entity("CO.CDP.OrganisationInformation.Persistence.Tenant", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("CreatedOn") + .ValueGeneratedOnAdd() + .HasColumnType("timestamp with time zone") + .HasColumnName("created_on") + .HasDefaultValueSql("CURRENT_TIMESTAMP"); + + b.Property("Guid") + .HasColumnType("uuid") + .HasColumnName("guid"); + + b.Property("Name") + .IsRequired() + .HasColumnType("text") + .HasColumnName("name"); + + b.Property("UpdatedOn") + .ValueGeneratedOnAdd() + .HasColumnType("timestamp with time zone") + .HasColumnName("updated_on") + .HasDefaultValueSql("CURRENT_TIMESTAMP"); + + b.HasKey("Id") + .HasName("pk_tenants"); + + b.HasIndex("Guid") + .IsUnique() + .HasDatabaseName("ix_tenants_guid"); + + b.HasIndex("Name") + .IsUnique() + .HasDatabaseName("ix_tenants_name"); + + b.ToTable("tenants", (string)null); + }); + + modelBuilder.Entity("CO.CDP.OrganisationInformation.Persistence.TenantPerson", b => + { + b.Property("PersonId") + .HasColumnType("integer") + .HasColumnName("person_id"); + + b.Property("TenantId") + .HasColumnType("integer") + .HasColumnName("tenant_id"); + + b.HasKey("PersonId", "TenantId") + .HasName("pk_tenant_person"); + + b.HasIndex("TenantId") + .HasDatabaseName("ix_tenant_person_tenant_id"); + + b.ToTable("tenant_person", (string)null); + }); + + modelBuilder.Entity("CO.CDP.OrganisationInformation.Persistence.AuthenticationKey", b => + { + b.HasOne("CO.CDP.OrganisationInformation.Persistence.Organisation", "Organisation") + .WithMany() + .HasForeignKey("OrganisationId") + .HasConstraintName("fk_authentication_keys_organisations_organisation_id"); + + b.Navigation("Organisation"); + }); + + modelBuilder.Entity("CO.CDP.OrganisationInformation.Persistence.ConnectedEntity", b => + { + b.HasOne("CO.CDP.OrganisationInformation.Persistence.Organisation", "SupplierOrganisation") + .WithMany() + .HasForeignKey("SupplierOrganisationId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_connected_entities_organisations_supplier_organisation_id"); + + b.OwnsMany("CO.CDP.OrganisationInformation.Persistence.ConnectedEntity+ConnectedEntityAddress", "Addresses", b1 => + { + b1.Property("ConnectedEntityId") + .HasColumnType("integer") + .HasColumnName("connected_entity_id"); + + b1.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b1.Property("Id")); + + b1.Property("AddressId") + .HasColumnType("integer") + .HasColumnName("address_id"); + + b1.Property("Type") + .HasColumnType("integer") + .HasColumnName("type"); + + b1.HasKey("ConnectedEntityId", "Id") + .HasName("pk_connected_entity_address"); + + b1.HasIndex("AddressId") + .HasDatabaseName("ix_connected_entity_address_address_id"); + + b1.ToTable("connected_entity_address", (string)null); + + b1.HasOne("CO.CDP.OrganisationInformation.Persistence.Address", "Address") + .WithMany() + .HasForeignKey("AddressId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_connected_entity_address_address_address_id"); + + b1.WithOwner() + .HasForeignKey("ConnectedEntityId") + .HasConstraintName("fk_connected_entity_address_connected_entities_connected_entit"); + + b1.Navigation("Address"); + }); + + b.OwnsOne("CO.CDP.OrganisationInformation.Persistence.ConnectedEntity+ConnectedIndividualTrust", "IndividualOrTrust", b1 => + { + b1.Property("Id") + .HasColumnType("integer") + .HasColumnName("connected_individual_trust_id"); + + b1.Property("Category") + .HasColumnType("integer") + .HasColumnName("category"); + + b1.Property("ConnectedType") + .HasColumnType("integer") + .HasColumnName("connected_type"); + + b1.Property("ControlCondition") + .IsRequired() + .HasColumnType("integer[]") + .HasColumnName("control_condition"); + + b1.Property("CreatedOn") + .ValueGeneratedOnAdd() + .HasColumnType("timestamp with time zone") + .HasColumnName("created_on") + .HasDefaultValueSql("CURRENT_TIMESTAMP"); + + b1.Property("DateOfBirth") + .HasColumnType("timestamp with time zone") + .HasColumnName("date_of_birth"); + + b1.Property("FirstName") + .IsRequired() + .HasColumnType("text") + .HasColumnName("first_name"); + + b1.Property("LastName") + .IsRequired() + .HasColumnType("text") + .HasColumnName("last_name"); + + b1.Property("Nationality") + .HasColumnType("text") + .HasColumnName("nationality"); + + b1.Property("PersonId") + .HasColumnType("uuid") + .HasColumnName("person_id"); + + b1.Property("ResidentCountry") + .HasColumnType("text") + .HasColumnName("resident_country"); + + b1.Property("UpdatedOn") + .ValueGeneratedOnAdd() + .HasColumnType("timestamp with time zone") + .HasColumnName("updated_on") + .HasDefaultValueSql("CURRENT_TIMESTAMP"); + + b1.HasKey("Id") + .HasName("pk_connected_individual_trust"); + + b1.ToTable("connected_individual_trust", (string)null); + + b1.WithOwner() + .HasForeignKey("Id") + .HasConstraintName("fk_connected_individual_trust_connected_entities_connected_ind"); + }); + + b.OwnsOne("CO.CDP.OrganisationInformation.Persistence.ConnectedEntity+ConnectedOrganisation", "Organisation", b1 => + { + b1.Property("Id") + .HasColumnType("integer") + .HasColumnName("connected_organisation_id"); + + b1.Property("Category") + .HasColumnType("integer") + .HasColumnName("category"); + + b1.Property("ControlCondition") + .IsRequired() + .HasColumnType("integer[]") + .HasColumnName("control_condition"); + + b1.Property("CreatedOn") + .ValueGeneratedOnAdd() + .HasColumnType("timestamp with time zone") + .HasColumnName("created_on") + .HasDefaultValueSql("CURRENT_TIMESTAMP"); + + b1.Property("InsolvencyDate") + .HasColumnType("timestamp with time zone") + .HasColumnName("insolvency_date"); + + b1.Property("LawRegistered") + .HasColumnType("text") + .HasColumnName("law_registered"); + + b1.Property("Name") + .IsRequired() + .HasColumnType("text") + .HasColumnName("name"); + + b1.Property("OrganisationId") + .HasColumnType("uuid") + .HasColumnName("organisation_id"); + + b1.Property("RegisteredLegalForm") + .HasColumnType("text") + .HasColumnName("registered_legal_form"); + + b1.Property("UpdatedOn") + .ValueGeneratedOnAdd() + .HasColumnType("timestamp with time zone") + .HasColumnName("updated_on") + .HasDefaultValueSql("CURRENT_TIMESTAMP"); + + b1.HasKey("Id") + .HasName("pk_connected_organisation"); + + b1.ToTable("connected_organisation", (string)null); + + b1.WithOwner() + .HasForeignKey("Id") + .HasConstraintName("fk_connected_organisation_connected_entities_connected_organis"); + }); + + b.Navigation("Addresses"); + + b.Navigation("IndividualOrTrust"); + + b.Navigation("Organisation"); + + b.Navigation("SupplierOrganisation"); + }); + + modelBuilder.Entity("CO.CDP.OrganisationInformation.Persistence.Forms.FormAnswer", b => + { + b.HasOne("CO.CDP.OrganisationInformation.Persistence.Forms.FormAnswerSet", "FormAnswerSet") + .WithMany("Answers") + .HasForeignKey("FormAnswerSetId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_form_answers_form_answer_sets_form_answer_set_id"); + + b.HasOne("CO.CDP.OrganisationInformation.Persistence.Forms.FormQuestion", "Question") + .WithMany() + .HasForeignKey("QuestionId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_form_answers_form_questions_question_id"); + + b.Navigation("FormAnswerSet"); + + b.Navigation("Question"); + }); + + modelBuilder.Entity("CO.CDP.OrganisationInformation.Persistence.Forms.FormAnswerSet", b => + { + b.HasOne("CO.CDP.OrganisationInformation.Persistence.Forms.FormSection", "Section") + .WithMany() + .HasForeignKey("SectionId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_form_answer_sets_form_section_section_id"); + + b.HasOne("CO.CDP.OrganisationInformation.Persistence.Forms.SharedConsent", "SharedConsent") + .WithMany("AnswerSets") + .HasForeignKey("SharedConsentId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_form_answer_sets_shared_consents_shared_consent_id"); + + b.Navigation("Section"); + + b.Navigation("SharedConsent"); + }); + + modelBuilder.Entity("CO.CDP.OrganisationInformation.Persistence.Forms.FormQuestion", b => + { + b.HasOne("CO.CDP.OrganisationInformation.Persistence.Forms.FormQuestion", "NextQuestionAlternative") + .WithMany() + .HasForeignKey("NextQuestionAlternativeId") + .HasConstraintName("fk_form_questions_form_questions_next_question_alternative_id"); + + b.HasOne("CO.CDP.OrganisationInformation.Persistence.Forms.FormQuestion", "NextQuestion") + .WithMany() + .HasForeignKey("NextQuestionId") + .HasConstraintName("fk_form_questions_form_questions_next_question_id"); + + b.HasOne("CO.CDP.OrganisationInformation.Persistence.Forms.FormSection", "Section") + .WithMany("Questions") + .HasForeignKey("SectionId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_form_questions_form_sections_section_id"); + + b.Navigation("NextQuestion"); + + b.Navigation("NextQuestionAlternative"); + + b.Navigation("Section"); + }); + + modelBuilder.Entity("CO.CDP.OrganisationInformation.Persistence.Forms.FormSection", b => + { + b.HasOne("CO.CDP.OrganisationInformation.Persistence.Forms.Form", "Form") + .WithMany("Sections") + .HasForeignKey("FormId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_form_sections_forms_form_id"); + + b.Navigation("Form"); + }); + + modelBuilder.Entity("CO.CDP.OrganisationInformation.Persistence.Forms.SharedConsent", b => + { + b.HasOne("CO.CDP.OrganisationInformation.Persistence.Forms.Form", "Form") + .WithMany() + .HasForeignKey("FormId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_shared_consents_forms_form_id"); + + b.HasOne("CO.CDP.OrganisationInformation.Persistence.Organisation", "Organisation") + .WithMany() + .HasForeignKey("OrganisationId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_shared_consents_organisations_organisation_id"); + + b.Navigation("Form"); + + b.Navigation("Organisation"); + }); + + modelBuilder.Entity("CO.CDP.OrganisationInformation.Persistence.Organisation", b => + { + b.HasOne("CO.CDP.OrganisationInformation.Persistence.Person", "ReviewedBy") + .WithMany() + .HasForeignKey("ReviewedById") + .HasConstraintName("fk_organisations_persons_reviewed_by_id"); + + b.HasOne("CO.CDP.OrganisationInformation.Persistence.Tenant", "Tenant") + .WithMany("Organisations") + .HasForeignKey("TenantId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_organisations_tenants_tenant_id"); + + b.OwnsOne("CO.CDP.OrganisationInformation.Persistence.Organisation+BuyerInformation", "BuyerInfo", b1 => + { + b1.Property("OrganisationId") + .HasColumnType("integer") + .HasColumnName("id"); + + b1.Property("BuyerType") + .HasColumnType("text") + .HasColumnName("buyer_type"); + + b1.Property("CreatedOn") + .ValueGeneratedOnAdd() + .HasColumnType("timestamp with time zone") + .HasColumnName("created_on") + .HasDefaultValueSql("CURRENT_TIMESTAMP"); + + b1.Property("DevolvedRegulations") + .IsRequired() + .HasColumnType("integer[]") + .HasColumnName("devolved_regulations"); + + b1.Property("UpdatedOn") + .ValueGeneratedOnAdd() + .HasColumnType("timestamp with time zone") + .HasColumnName("updated_on") + .HasDefaultValueSql("CURRENT_TIMESTAMP"); + + b1.HasKey("OrganisationId") + .HasName("pk_buyer_information"); + + b1.ToTable("buyer_information", (string)null); + + b1.WithOwner() + .HasForeignKey("OrganisationId") + .HasConstraintName("fk_buyer_information_organisations_id"); + }); + + b.OwnsMany("CO.CDP.OrganisationInformation.Persistence.Organisation+ContactPoint", "ContactPoints", b1 => + { + b1.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b1.Property("Id")); + + b1.Property("CreatedOn") + .ValueGeneratedOnAdd() + .HasColumnType("timestamp with time zone") + .HasColumnName("created_on") + .HasDefaultValueSql("CURRENT_TIMESTAMP"); + + b1.Property("Email") + .HasColumnType("text") + .HasColumnName("email"); + + b1.Property("Name") + .HasColumnType("text") + .HasColumnName("name"); + + b1.Property("OrganisationId") + .HasColumnType("integer") + .HasColumnName("organisation_id"); + + b1.Property("Telephone") + .HasColumnType("text") + .HasColumnName("telephone"); + + b1.Property("UpdatedOn") + .ValueGeneratedOnAdd() + .HasColumnType("timestamp with time zone") + .HasColumnName("updated_on") + .HasDefaultValueSql("CURRENT_TIMESTAMP"); + + b1.Property("Url") + .HasColumnType("text") + .HasColumnName("url"); + + b1.HasKey("Id") + .HasName("pk_contact_points"); + + b1.HasIndex("OrganisationId") + .HasDatabaseName("ix_contact_points_organisation_id"); + + b1.ToTable("contact_points", (string)null); + + b1.WithOwner() + .HasForeignKey("OrganisationId") + .HasConstraintName("fk_contact_points_organisations_organisation_id"); + }); + + b.OwnsMany("CO.CDP.OrganisationInformation.Persistence.Organisation+Identifier", "Identifiers", b1 => + { + b1.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b1.Property("Id")); + + b1.Property("CreatedOn") + .ValueGeneratedOnAdd() + .HasColumnType("timestamp with time zone") + .HasColumnName("created_on") + .HasDefaultValueSql("CURRENT_TIMESTAMP"); + + b1.Property("IdentifierId") + .HasColumnType("text") + .HasColumnName("identifier_id"); + + b1.Property("LegalName") + .IsRequired() + .HasColumnType("text") + .HasColumnName("legal_name"); + + b1.Property("OrganisationId") + .HasColumnType("integer") + .HasColumnName("organisation_id"); + + b1.Property("Primary") + .HasColumnType("boolean") + .HasColumnName("primary"); + + b1.Property("Scheme") + .IsRequired() + .HasColumnType("text") + .HasColumnName("scheme"); + + b1.Property("UpdatedOn") + .ValueGeneratedOnAdd() + .HasColumnType("timestamp with time zone") + .HasColumnName("updated_on") + .HasDefaultValueSql("CURRENT_TIMESTAMP"); + + b1.Property("Uri") + .HasColumnType("text") + .HasColumnName("uri"); + + b1.HasKey("Id") + .HasName("pk_identifiers"); + + b1.HasIndex("OrganisationId") + .HasDatabaseName("ix_identifiers_organisation_id"); + + b1.HasIndex("IdentifierId", "Scheme") + .IsUnique() + .HasDatabaseName("ix_identifiers_identifier_id_scheme"); + + b1.ToTable("identifiers", (string)null); + + b1.WithOwner() + .HasForeignKey("OrganisationId") + .HasConstraintName("fk_identifiers_organisations_organisation_id"); + }); + + b.OwnsMany("CO.CDP.OrganisationInformation.Persistence.Organisation+OrganisationAddress", "Addresses", b1 => + { + b1.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b1.Property("Id")); + + b1.Property("AddressId") + .HasColumnType("integer") + .HasColumnName("address_id"); + + b1.Property("OrganisationId") + .HasColumnType("integer") + .HasColumnName("organisation_id"); + + b1.Property("Type") + .HasColumnType("integer") + .HasColumnName("type"); + + b1.HasKey("Id") + .HasName("pk_organisation_address"); + + b1.HasIndex("AddressId") + .HasDatabaseName("ix_organisation_address_address_id"); + + b1.HasIndex("OrganisationId") + .HasDatabaseName("ix_organisation_address_organisation_id"); + + b1.ToTable("organisation_address", (string)null); + + b1.HasOne("CO.CDP.OrganisationInformation.Persistence.Address", "Address") + .WithMany() + .HasForeignKey("AddressId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_organisation_address_address_address_id"); + + b1.WithOwner() + .HasForeignKey("OrganisationId") + .HasConstraintName("fk_organisation_address_organisations_organisation_id"); + + b1.Navigation("Address"); + }); + + b.OwnsOne("CO.CDP.OrganisationInformation.Persistence.Organisation+SupplierInformation", "SupplierInfo", b1 => + { + b1.Property("OrganisationId") + .HasColumnType("integer") + .HasColumnName("id"); + + b1.Property("CompletedConnectedPerson") + .HasColumnType("boolean") + .HasColumnName("completed_connected_person"); + + b1.Property("CompletedEmailAddress") + .HasColumnType("boolean") + .HasColumnName("completed_email_address"); + + b1.Property("CompletedLegalForm") + .HasColumnType("boolean") + .HasColumnName("completed_legal_form"); + + b1.Property("CompletedOperationType") + .HasColumnType("boolean") + .HasColumnName("completed_operation_type"); + + b1.Property("CompletedPostalAddress") + .HasColumnType("boolean") + .HasColumnName("completed_postal_address"); + + b1.Property("CompletedRegAddress") + .HasColumnType("boolean") + .HasColumnName("completed_reg_address"); + + b1.Property("CompletedVat") + .HasColumnType("boolean") + .HasColumnName("completed_vat"); + + b1.Property("CompletedWebsiteAddress") + .HasColumnType("boolean") + .HasColumnName("completed_website_address"); + + b1.Property("CreatedOn") + .ValueGeneratedOnAdd() + .HasColumnType("timestamp with time zone") + .HasColumnName("created_on") + .HasDefaultValueSql("CURRENT_TIMESTAMP"); + + b1.Property("OperationTypes") + .IsRequired() + .HasColumnType("integer[]") + .HasColumnName("operation_types"); + + b1.Property("SupplierType") + .HasColumnType("integer") + .HasColumnName("supplier_type"); + + b1.Property("UpdatedOn") + .ValueGeneratedOnAdd() + .HasColumnType("timestamp with time zone") + .HasColumnName("updated_on") + .HasDefaultValueSql("CURRENT_TIMESTAMP"); + + b1.HasKey("OrganisationId") + .HasName("pk_supplier_information"); + + b1.ToTable("supplier_information", (string)null); + + b1.WithOwner() + .HasForeignKey("OrganisationId") + .HasConstraintName("fk_supplier_information_organisations_id"); + + b1.OwnsOne("CO.CDP.OrganisationInformation.Persistence.Organisation+LegalForm", "LegalForm", b2 => + { + b2.Property("SupplierInformationOrganisationId") + .HasColumnType("integer") + .HasColumnName("id"); + + b2.Property("CreatedOn") + .ValueGeneratedOnAdd() + .HasColumnType("timestamp with time zone") + .HasColumnName("created_on") + .HasDefaultValueSql("CURRENT_TIMESTAMP"); + + b2.Property("LawRegistered") + .IsRequired() + .HasColumnType("text") + .HasColumnName("law_registered"); + + b2.Property("RegisteredLegalForm") + .IsRequired() + .HasColumnType("text") + .HasColumnName("registered_legal_form"); + + b2.Property("RegisteredUnderAct2006") + .HasColumnType("boolean") + .HasColumnName("registered_under_act2006"); + + b2.Property("RegistrationDate") + .HasColumnType("timestamp with time zone") + .HasColumnName("registration_date"); + + b2.Property("UpdatedOn") + .ValueGeneratedOnAdd() + .HasColumnType("timestamp with time zone") + .HasColumnName("updated_on") + .HasDefaultValueSql("CURRENT_TIMESTAMP"); + + b2.HasKey("SupplierInformationOrganisationId") + .HasName("pk_legal_forms"); + + b2.ToTable("legal_forms", (string)null); + + b2.WithOwner() + .HasForeignKey("SupplierInformationOrganisationId") + .HasConstraintName("fk_legal_forms_supplier_information_id"); + }); + + b1.Navigation("LegalForm"); + }); + + b.Navigation("Addresses"); + + b.Navigation("BuyerInfo"); + + b.Navigation("ContactPoints"); + + b.Navigation("Identifiers"); + + b.Navigation("ReviewedBy"); + + b.Navigation("SupplierInfo"); + + b.Navigation("Tenant"); + }); + + modelBuilder.Entity("CO.CDP.OrganisationInformation.Persistence.OrganisationJoinRequest", b => + { + b.HasOne("CO.CDP.OrganisationInformation.Persistence.Organisation", "Organisation") + .WithMany() + .HasForeignKey("OrganisationId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_organisation_join_requests_organisations_organisation_id"); + + b.HasOne("CO.CDP.OrganisationInformation.Persistence.Person", "Person") + .WithMany() + .HasForeignKey("PersonId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_organisation_join_requests_persons_person_id"); + + b.HasOne("CO.CDP.OrganisationInformation.Persistence.Person", "ReviewedBy") + .WithMany() + .HasForeignKey("ReviewedById") + .HasConstraintName("fk_organisation_join_requests_persons_reviewed_by_id"); + + b.Navigation("Organisation"); + + b.Navigation("Person"); + + b.Navigation("ReviewedBy"); + }); + + modelBuilder.Entity("CO.CDP.OrganisationInformation.Persistence.OrganisationPerson", b => + { + b.HasOne("CO.CDP.OrganisationInformation.Persistence.Organisation", "Organisation") + .WithMany("OrganisationPersons") + .HasForeignKey("OrganisationId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_organisation_person_organisations_organisation_id"); + + b.HasOne("CO.CDP.OrganisationInformation.Persistence.Person", "Person") + .WithMany("PersonOrganisations") + .HasForeignKey("PersonId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_organisation_person_persons_person_id"); + + b.Navigation("Organisation"); + + b.Navigation("Person"); + }); + + modelBuilder.Entity("CO.CDP.OrganisationInformation.Persistence.PersonInvite", b => + { + b.HasOne("CO.CDP.OrganisationInformation.Persistence.Organisation", "Organisation") + .WithMany() + .HasForeignKey("OrganisationId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_person_invites_organisations_organisation_id"); + + b.HasOne("CO.CDP.OrganisationInformation.Persistence.Person", "Person") + .WithMany() + .HasForeignKey("PersonId") + .HasConstraintName("fk_person_invites_persons_person_id"); + + b.Navigation("Organisation"); + + b.Navigation("Person"); + }); + + modelBuilder.Entity("CO.CDP.OrganisationInformation.Persistence.TenantPerson", b => + { + b.HasOne("CO.CDP.OrganisationInformation.Persistence.Person", null) + .WithMany() + .HasForeignKey("PersonId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_tenant_person_persons_person_id"); + + b.HasOne("CO.CDP.OrganisationInformation.Persistence.Tenant", null) + .WithMany() + .HasForeignKey("TenantId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_tenant_person_tenants_tenant_id"); + }); + + modelBuilder.Entity("CO.CDP.OrganisationInformation.Persistence.Forms.Form", b => + { + b.Navigation("Sections"); + }); + + modelBuilder.Entity("CO.CDP.OrganisationInformation.Persistence.Forms.FormAnswerSet", b => + { + b.Navigation("Answers"); + }); + + modelBuilder.Entity("CO.CDP.OrganisationInformation.Persistence.Forms.FormSection", b => + { + b.Navigation("Questions"); + }); + + modelBuilder.Entity("CO.CDP.OrganisationInformation.Persistence.Forms.SharedConsent", b => + { + b.Navigation("AnswerSets"); + }); + + modelBuilder.Entity("CO.CDP.OrganisationInformation.Persistence.Organisation", b => + { + b.Navigation("OrganisationPersons"); + }); + + modelBuilder.Entity("CO.CDP.OrganisationInformation.Persistence.Person", b => + { + b.Navigation("PersonOrganisations"); + }); + + modelBuilder.Entity("CO.CDP.OrganisationInformation.Persistence.Tenant", b => + { + b.Navigation("Organisations"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/Services/CO.CDP.OrganisationInformation.Persistence/Migrations/20241016134622_SupplierInformationLocalization.cs b/Services/CO.CDP.OrganisationInformation.Persistence/Migrations/20241016134622_SupplierInformationLocalization.cs new file mode 100644 index 000000000..5bf549a41 --- /dev/null +++ b/Services/CO.CDP.OrganisationInformation.Persistence/Migrations/20241016134622_SupplierInformationLocalization.cs @@ -0,0 +1,68 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace CO.CDP.OrganisationInformation.Persistence.Migrations +{ + /// + public partial class SupplierInformationLocalization : Migration + { + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.Sql($@" + DO $$ + BEGIN + UPDATE form_sections + SET title = 'ShareMyInformation_SectionTitle' + WHERE title = 'Share my information'; + + UPDATE form_sections + SET title = 'Qualifications_SectionTitle' + WHERE title = 'Qualifications'; + + UPDATE form_sections + SET title = 'TradeAssurances_SectionTitle' + WHERE title = 'Trade assurances'; + + UPDATE form_sections + SET title = 'Exclusions_SectionTitle' + WHERE title = 'Exclusions'; + + UPDATE form_sections + SET title = 'FinancialInformation_SectionTitle' + WHERE title = 'Financial Information'; + END $$; + "); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.Sql($@" + DO $$ + BEGIN + UPDATE form_sections + SET title = 'Share my information' + WHERE title = 'ShareMyInformation_SectionTitle'; + + UPDATE form_sections + SET title = 'Qualifications' + WHERE title = 'Qualifications_SectionTitle'; + + UPDATE form_sections + SET title = 'Trade assurances' + WHERE title = 'TradeAssurances_SectionTitle'; + + UPDATE form_sections + SET title = 'Exclusions' + WHERE title = 'Exclusions_SectionTitle'; + + UPDATE form_sections + SET title = 'Financial information' + WHERE title = 'FinancialInformation_SectionTitle'; + END $$; + "); + } + } +} From 36863926f72a8709667a3e795ac0ef7855803684 Mon Sep 17 00:00:00 2001 From: David Baker Date: Wed, 16 Oct 2024 15:10:18 +0100 Subject: [PATCH 14/42] Re-enabled logging of all CH API errors. --- .../CompaniesHouse/CompaniesHouseApi.cs | 7 ------- 1 file changed, 7 deletions(-) diff --git a/Frontend/CO.CDP.OrganisationApp/ThirdPartyApiClients/CompaniesHouse/CompaniesHouseApi.cs b/Frontend/CO.CDP.OrganisationApp/ThirdPartyApiClients/CompaniesHouse/CompaniesHouseApi.cs index 9e2b0281e..d7466b691 100644 --- a/Frontend/CO.CDP.OrganisationApp/ThirdPartyApiClients/CompaniesHouse/CompaniesHouseApi.cs +++ b/Frontend/CO.CDP.OrganisationApp/ThirdPartyApiClients/CompaniesHouse/CompaniesHouseApi.cs @@ -24,9 +24,6 @@ public class CompaniesHouseApi(IConfiguration configuration, .GetAsync() .ReceiveJson(); } - catch (FlurlHttpException ex) when ((ex.StatusCode == (int)HttpStatusCode.NotFound) || (ex.StatusCode == (int)HttpStatusCode.InternalServerError)) - { - } catch (Exception exc) { Log(exc, companyNumber); @@ -50,10 +47,6 @@ public class CompaniesHouseApi(IConfiguration configuration, .WithBasicAuth(userName, password) .GetAsync() .ReceiveJson(); - } - catch (FlurlHttpException ex) when ((ex.StatusCode == (int)HttpStatusCode.NotFound) || (ex.StatusCode == (int)HttpStatusCode.InternalServerError)) - { - } catch (Exception exc) { From fd2ab8dcb3cff5520e9fea6414f49b8821f88499 Mon Sep 17 00:00:00 2001 From: David Baker Date: Wed, 16 Oct 2024 15:12:52 +0100 Subject: [PATCH 15/42] Don't log 404 errors. --- .../CompaniesHouse/CompaniesHouseApi.cs | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/Frontend/CO.CDP.OrganisationApp/ThirdPartyApiClients/CompaniesHouse/CompaniesHouseApi.cs b/Frontend/CO.CDP.OrganisationApp/ThirdPartyApiClients/CompaniesHouse/CompaniesHouseApi.cs index d7466b691..4e9e6f1cf 100644 --- a/Frontend/CO.CDP.OrganisationApp/ThirdPartyApiClients/CompaniesHouse/CompaniesHouseApi.cs +++ b/Frontend/CO.CDP.OrganisationApp/ThirdPartyApiClients/CompaniesHouse/CompaniesHouseApi.cs @@ -24,6 +24,9 @@ public class CompaniesHouseApi(IConfiguration configuration, .GetAsync() .ReceiveJson(); } + catch (FlurlHttpException ex) when ((ex.StatusCode == (int)HttpStatusCode.NotFound)) + { + } catch (Exception exc) { Log(exc, companyNumber); @@ -48,6 +51,9 @@ public class CompaniesHouseApi(IConfiguration configuration, .GetAsync() .ReceiveJson(); } + catch (FlurlHttpException ex) when ((ex.StatusCode == (int)HttpStatusCode.NotFound)) + { + } catch (Exception exc) { Log(exc, companyNumber); From aab5b027854d128b6364fdfdaa99c74bdd5c7b6b Mon Sep 17 00:00:00 2001 From: Andy Mantell <134642+andymantell@users.noreply.github.com> Date: Wed, 16 Oct 2024 15:16:39 +0100 Subject: [PATCH 16/42] translating the organisation name registration page --- .../Registration/OrganisationName.cshtml | 9 +- .../Registration/OrganisationName.cshtml.cs | 4 +- Frontend/CO.CDP.OrganisationApp/Program.cs | 2 +- .../StaticTextResource.cy.resx | 13 ++ .../StaticTextResource.resx | 12 ++ .../ValidationMessagesResource.cy.resx | 123 ------------------ .../ValidationMessagesResource.resx | 123 ------------------ 7 files changed, 33 insertions(+), 253 deletions(-) delete mode 100644 Services/CO.CDP.Localization/ValidationMessagesResource.cy.resx delete mode 100644 Services/CO.CDP.Localization/ValidationMessagesResource.resx diff --git a/Frontend/CO.CDP.OrganisationApp/Pages/Registration/OrganisationName.cshtml b/Frontend/CO.CDP.OrganisationApp/Pages/Registration/OrganisationName.cshtml index 777eba6ac..c236fc52f 100644 --- a/Frontend/CO.CDP.OrganisationApp/Pages/Registration/OrganisationName.cshtml +++ b/Frontend/CO.CDP.OrganisationApp/Pages/Registration/OrganisationName.cshtml @@ -1,6 +1,7 @@ @page @attribute [RazorCompiledItemMetadata("RouteTemplate", RegistrationStepModel.OrganisationNamePage)] @model CO.CDP.OrganisationApp.Pages.Registration.OrganisationNameModel +@using CO.CDP.Localization @{ var organisationNameHasError = ((TagBuilder)Html.ValidationMessageFor(m => m.OrganisationName)).HasInnerHtml; @@ -18,7 +19,7 @@ } - Back + @StaticTextResource.Global_Back
@@ -42,13 +43,13 @@ -
As registered on Companies House if incorporated, or the trading name of the company.
+
@StaticTextResource.OrganisationRegistration_EnterOrganisationName_Hint
@if (organisationNameHasError) {

- Error: + @StaticTextResource.Global_Error: @Html.ValidationMessageFor(m => m.OrganisationName)

} @@ -61,7 +62,7 @@
- Continue + @StaticTextResource.Global_Continue diff --git a/Frontend/CO.CDP.OrganisationApp/Pages/Registration/OrganisationName.cshtml.cs b/Frontend/CO.CDP.OrganisationApp/Pages/Registration/OrganisationName.cshtml.cs index a02b2f6bf..35a4528a4 100644 --- a/Frontend/CO.CDP.OrganisationApp/Pages/Registration/OrganisationName.cshtml.cs +++ b/Frontend/CO.CDP.OrganisationApp/Pages/Registration/OrganisationName.cshtml.cs @@ -13,8 +13,8 @@ public class OrganisationNameModel(ISession session, ICompaniesHouseApi companie public override string CurrentPage => OrganisationNamePage; [BindProperty] - [DisplayName(nameof(ValidationMessagesResource.OrganisationRegistration_EnterOrganisationName))] - [Required(ErrorMessage = nameof(ValidationMessagesResource.OrganisationRegistration_EnterOrganisationName))] + [DisplayName(nameof(StaticTextResource.OrganisationRegistration_EnterOrganisationName_Heading))] + [Required(ErrorMessage = nameof(StaticTextResource.OrganisationRegistration_EnterOrganisationName_Heading))] public string? OrganisationName { get; set; } [BindProperty] diff --git a/Frontend/CO.CDP.OrganisationApp/Program.cs b/Frontend/CO.CDP.OrganisationApp/Program.cs index ddf4f87c4..eba4c8011 100644 --- a/Frontend/CO.CDP.OrganisationApp/Program.cs +++ b/Frontend/CO.CDP.OrganisationApp/Program.cs @@ -47,7 +47,7 @@ var mvcBuilder = builder.Services.AddRazorPages() .AddViewLocalization() .AddDataAnnotationsLocalization(options => { - options.DataAnnotationLocalizerProvider = (type, factory) => factory.Create(typeof(ValidationMessagesResource)); + options.DataAnnotationLocalizerProvider = (type, factory) => factory.Create(typeof(StaticTextResource)); }) .AddSessionStateTempDataProvider(); diff --git a/Services/CO.CDP.Localization/StaticTextResource.cy.resx b/Services/CO.CDP.Localization/StaticTextResource.cy.resx index 0621cf9a5..93ef002e6 100644 --- a/Services/CO.CDP.Localization/StaticTextResource.cy.resx +++ b/Services/CO.CDP.Localization/StaticTextResource.cy.resx @@ -135,4 +135,17 @@ Gwybodaeth sylfaenol + + Rhowch enw’r sefydliad + + + Fel y'i cofrestrwyd â Thŷ'r Cwmnïau os yw'n gorfforedig, neu enw masnachu'r cwmni. + + + + + + + Parhau + \ No newline at end of file diff --git a/Services/CO.CDP.Localization/StaticTextResource.resx b/Services/CO.CDP.Localization/StaticTextResource.resx index 815d7a093..f2a2a0022 100644 --- a/Services/CO.CDP.Localization/StaticTextResource.resx +++ b/Services/CO.CDP.Localization/StaticTextResource.resx @@ -159,4 +159,16 @@ {0} records + + Enter the organisation's name + + + As registered on Companies House if incorporated, or the trading name of the company. + + + Error + + + Continue + \ No newline at end of file diff --git a/Services/CO.CDP.Localization/ValidationMessagesResource.cy.resx b/Services/CO.CDP.Localization/ValidationMessagesResource.cy.resx deleted file mode 100644 index df6836f5c..000000000 --- a/Services/CO.CDP.Localization/ValidationMessagesResource.cy.resx +++ /dev/null @@ -1,123 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - Rhowch enw’r sefydliad - - \ No newline at end of file diff --git a/Services/CO.CDP.Localization/ValidationMessagesResource.resx b/Services/CO.CDP.Localization/ValidationMessagesResource.resx deleted file mode 100644 index c76828501..000000000 --- a/Services/CO.CDP.Localization/ValidationMessagesResource.resx +++ /dev/null @@ -1,123 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - Enter the organisation's name - - \ No newline at end of file From 27057145060d1e49a2afac3e200cd8b907e25abc Mon Sep 17 00:00:00 2001 From: Andy Mantell <134642+andymantell@users.noreply.github.com> Date: Wed, 16 Oct 2024 20:08:24 +0100 Subject: [PATCH 17/42] fix tests in the wake of localization --- .../Registration/OrganisationNameModelTest.cs | 2 +- .../AutoMapper/AutoMapperFixture.cs | 34 +++++++++++++++++-- .../GetFormSectionQuestionsUseCaseTest.cs | 5 ++- .../AutoMapper/WebApiToPersistenceProfile.cs | 1 + 4 files changed, 36 insertions(+), 6 deletions(-) diff --git a/Frontend/CO.CDP.OrganisationApp.Tests/Pages/Registration/OrganisationNameModelTest.cs b/Frontend/CO.CDP.OrganisationApp.Tests/Pages/Registration/OrganisationNameModelTest.cs index af68c4eb8..a057041e5 100644 --- a/Frontend/CO.CDP.OrganisationApp.Tests/Pages/Registration/OrganisationNameModelTest.cs +++ b/Frontend/CO.CDP.OrganisationApp.Tests/Pages/Registration/OrganisationNameModelTest.cs @@ -45,7 +45,7 @@ public void WhenOrganisationNameIsEmpty_ShouldRaiseOrganisationNameValidationErr results.Any(c => c.MemberNames.Contains("OrganisationName")).Should().BeTrue(); results.Where(c => c.MemberNames.Contains("OrganisationName")).First() - .ErrorMessage.Should().Be("Enter the organisation's name"); + .ErrorMessage.Should().Be("OrganisationRegistration_EnterOrganisationName_Heading"); // Not passed through localization at this point } [Fact] diff --git a/Services/CO.CDP.Forms.WebApi.Tests/AutoMapper/AutoMapperFixture.cs b/Services/CO.CDP.Forms.WebApi.Tests/AutoMapper/AutoMapperFixture.cs index e60e05aaa..dd1898f30 100644 --- a/Services/CO.CDP.Forms.WebApi.Tests/AutoMapper/AutoMapperFixture.cs +++ b/Services/CO.CDP.Forms.WebApi.Tests/AutoMapper/AutoMapperFixture.cs @@ -1,5 +1,9 @@ using AutoMapper; using CO.CDP.Forms.WebApi.AutoMapper; +using CO.CDP.Localization; +using Microsoft.AspNetCore.Mvc.Localization; +using Microsoft.Extensions.DependencyInjection; +using Moq; namespace CO.CDP.Forms.WebApi.Tests.AutoMapper; @@ -8,5 +12,31 @@ public class AutoMapperFixture public readonly MapperConfiguration Configuration = new( config => config.AddProfile() ); - public IMapper Mapper => Configuration.CreateMapper(); -} \ No newline at end of file + + public IMapper Mapper { get; } + + public AutoMapperFixture() + { + var localizerMock = new Mock>(); + + localizerMock.Setup(l => l[It.IsAny()]) + .Returns((string key) => + { + if (key == "FinancialInformation_SectionTitle") + { + return new LocalizedHtmlString("FinancialInformation_SectionTitle", "Financial Information"); + } + + return new LocalizedHtmlString(key, key); + }); + + var services = new ServiceCollection(); + services.AddSingleton>(localizerMock.Object); + services.AddTransient(typeof(NullableLocalizedPropertyResolver<,>)); + services.AddTransient(typeof(LocalizedPropertyResolver<,>)); + + var serviceProvider = services.BuildServiceProvider(); + + Mapper = Configuration.CreateMapper(type => serviceProvider.GetService(type) ?? Activator.CreateInstance(type)); + } +} diff --git a/Services/CO.CDP.Forms.WebApi.Tests/UseCase/GetFormSectionQuestionsUseCaseTest.cs b/Services/CO.CDP.Forms.WebApi.Tests/UseCase/GetFormSectionQuestionsUseCaseTest.cs index 385ee38e6..20e43910e 100644 --- a/Services/CO.CDP.Forms.WebApi.Tests/UseCase/GetFormSectionQuestionsUseCaseTest.cs +++ b/Services/CO.CDP.Forms.WebApi.Tests/UseCase/GetFormSectionQuestionsUseCaseTest.cs @@ -51,7 +51,7 @@ public async Task ItReturnsTheSectionWithQuestions() { Id = 1, Guid = sectionId, - Title = "Financial Information", + Title = "FinancialInformation_SectionTitle", FormId = form.Id, Form = form, Questions = new List(), @@ -112,7 +112,6 @@ public async Task ItReturnsTheSectionWithQuestions() var result = await UseCase.Execute((formId, sectionId, organisationId)); result?.Questions.Should().HaveCount(2); - result?.Section.Should().BeEquivalentTo(new FormSection { Id = sectionId, @@ -146,7 +145,7 @@ public async Task ItReturnsTheSectionWithQuestions() { Id = questions[1].Guid, Title = questions[1].Title, - Caption = questions[0].Caption, + Caption = questions[1].Caption, Description = questions[1].Description, Type = FormQuestionType.YesOrNo, IsRequired = questions[1].IsRequired, diff --git a/Services/CO.CDP.Forms.WebApi/AutoMapper/WebApiToPersistenceProfile.cs b/Services/CO.CDP.Forms.WebApi/AutoMapper/WebApiToPersistenceProfile.cs index 69a685b1c..95da54fde 100644 --- a/Services/CO.CDP.Forms.WebApi/AutoMapper/WebApiToPersistenceProfile.cs +++ b/Services/CO.CDP.Forms.WebApi/AutoMapper/WebApiToPersistenceProfile.cs @@ -8,6 +8,7 @@ public class WebApiToPersistenceProfile : Profile public WebApiToPersistenceProfile() { CreateMap() + .ForMember(dest => dest.Title, opt => opt.MapFrom, string>(src => src.Title)) .ForMember(dest => dest.Id, opt => opt.MapFrom(src => src.Guid)); CreateMap() From 9c931096d47f2947bf23585691e21ac4dfc94df6 Mon Sep 17 00:00:00 2001 From: Andy Mantell <134642+andymantell@users.noreply.github.com> Date: Thu, 17 Oct 2024 08:32:26 +0100 Subject: [PATCH 18/42] Add localization package reference to forms api tests --- .../CO.CDP.Forms.WebApi.Tests/CO.CDP.Forms.WebApi.Tests.csproj | 1 + 1 file changed, 1 insertion(+) diff --git a/Services/CO.CDP.Forms.WebApi.Tests/CO.CDP.Forms.WebApi.Tests.csproj b/Services/CO.CDP.Forms.WebApi.Tests/CO.CDP.Forms.WebApi.Tests.csproj index 1ded84390..3d1477960 100644 --- a/Services/CO.CDP.Forms.WebApi.Tests/CO.CDP.Forms.WebApi.Tests.csproj +++ b/Services/CO.CDP.Forms.WebApi.Tests/CO.CDP.Forms.WebApi.Tests.csproj @@ -24,6 +24,7 @@ all + From bc8663e9418b8133e4ba19d6965ad8da78fc0641 Mon Sep 17 00:00:00 2001 From: Andy Mantell <134642+andymantell@users.noreply.github.com> Date: Thu, 17 Oct 2024 08:43:12 +0100 Subject: [PATCH 19/42] remove reference to non existent resource file --- Services/CO.CDP.Localization/CO.CDP.Localization.csproj | 9 --------- 1 file changed, 9 deletions(-) diff --git a/Services/CO.CDP.Localization/CO.CDP.Localization.csproj b/Services/CO.CDP.Localization/CO.CDP.Localization.csproj index 978a711d9..875137e93 100644 --- a/Services/CO.CDP.Localization/CO.CDP.Localization.csproj +++ b/Services/CO.CDP.Localization/CO.CDP.Localization.csproj @@ -17,11 +17,6 @@ True StaticTextResource.resx - - True - True - ValidationMessagesResource.resx - @@ -33,9 +28,5 @@ PublicResXFileCodeGenerator StaticTextResource.Designer.cs - - PublicResXFileCodeGenerator - ValidationMessagesResource.Designer.cs - From 38e2344f495ae3aa8f1fb8113dd11745f4a6f26a Mon Sep 17 00:00:00 2001 From: Andy Mantell <134642+andymantell@users.noreply.github.com> Date: Thu, 17 Oct 2024 09:16:07 +0100 Subject: [PATCH 20/42] Attempt to fix build, missing localization in dockerfile --- Dockerfile | 1 + 1 file changed, 1 insertion(+) diff --git a/Dockerfile b/Dockerfile index 6bf373bb2..e68e18b04 100644 --- a/Dockerfile +++ b/Dockerfile @@ -73,6 +73,7 @@ COPY --link Services/CO.CDP.Organisation.Authority/CO.CDP.Organisation.Authority COPY --link Services/CO.CDP.Organisation.Authority.Tests/CO.CDP.Organisation.Authority.Tests.csproj Services/CO.CDP.Organisation.Authority.Tests/ COPY --link Services/CO.CDP.EntityVerification/CO.CDP.EntityVerification.csproj Services/CO.CDP.EntityVerification/ COPY --link Services/CO.CDP.EntityVerification.Tests/CO.CDP.EntityVerification.Tests.csproj Services/CO.CDP.EntityVerification.Tests/ +COPY --link Services/CO.CDP.Localization/CO.CDP.Localization.csproj Services/CO.CDP.Localization/ COPY --link GCGS-Central-Digital-Platform.sln . RUN dotnet restore "GCGS-Central-Digital-Platform.sln" From 43c200e286d0cdb1d3fe2eb774b4278372e7dfec Mon Sep 17 00:00:00 2001 From: Andy Mantell <134642+andymantell@users.noreply.github.com> Date: Thu, 17 Oct 2024 09:24:07 +0100 Subject: [PATCH 21/42] Attempt to fix build, missing localization in dockerfile --- Dockerfile | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/Dockerfile b/Dockerfile index e68e18b04..0c887dcbb 100644 --- a/Dockerfile +++ b/Dockerfile @@ -108,6 +108,11 @@ ARG BUILD_CONFIGURATION WORKDIR /src/Services/CO.CDP.Person.WebApi RUN dotnet build -c $BUILD_CONFIGURATION -o /app/build +FROM build AS build-localization +ARG BUILD_CONFIGURATION +WORKDIR /src/Services/CO.CDP.Localization +RUN dotnet build -c $BUILD_CONFIGURATION -o /app/build + FROM build AS build-forms ARG BUILD_CONFIGURATION WORKDIR /src/Services/CO.CDP.Forms.WebApi From 35899ec8cc18a2dc71f3387c987fbcc421e7d218 Mon Sep 17 00:00:00 2001 From: Andy Mantell <134642+andymantell@users.noreply.github.com> Date: Thu, 17 Oct 2024 09:30:53 +0100 Subject: [PATCH 22/42] Set DOTNET_SYSTEM_GLOBALIZATION_INVARIANT to false in docker build --- Dockerfile | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Dockerfile b/Dockerfile index 0c887dcbb..bdbb17dd6 100644 --- a/Dockerfile +++ b/Dockerfile @@ -16,6 +16,8 @@ WORKDIR /app EXPOSE 8080 EXPOSE 8081 +ENV DOTNET_SYSTEM_GLOBALIZATION_INVARIANT=false + FROM mcr.microsoft.com/dotnet/sdk:${ASPNET_VERSION} AS solution-dependencies ARG NUGET_PACKAGES ENV NUGET_PACKAGES="${NUGET_PACKAGES}" From d70db50ce2389ff129a195f896cd631393a65796 Mon Sep 17 00:00:00 2001 From: Andy Mantell <134642+andymantell@users.noreply.github.com> Date: Thu, 17 Oct 2024 09:41:51 +0100 Subject: [PATCH 23/42] set InvariantGlobalization in localization project file --- Services/CO.CDP.Localization/CO.CDP.Localization.csproj | 1 + 1 file changed, 1 insertion(+) diff --git a/Services/CO.CDP.Localization/CO.CDP.Localization.csproj b/Services/CO.CDP.Localization/CO.CDP.Localization.csproj index 875137e93..2ffa8e07b 100644 --- a/Services/CO.CDP.Localization/CO.CDP.Localization.csproj +++ b/Services/CO.CDP.Localization/CO.CDP.Localization.csproj @@ -4,6 +4,7 @@ net8.0 enable enable + false From c65785110962108b56b921bc55d857b74d935ed2 Mon Sep 17 00:00:00 2001 From: Andy Mantell <134642+andymantell@users.noreply.github.com> Date: Thu, 17 Oct 2024 11:12:28 +0100 Subject: [PATCH 24/42] Switch resource generation to MSBuild instead of relying on visual studio internals --- Services/CO.CDP.Localization/.gitignore | 1 - .../CO.CDP.Localization.csproj | 42 +++++++++---------- 2 files changed, 20 insertions(+), 23 deletions(-) delete mode 100644 Services/CO.CDP.Localization/.gitignore diff --git a/Services/CO.CDP.Localization/.gitignore b/Services/CO.CDP.Localization/.gitignore deleted file mode 100644 index 3160427f6..000000000 --- a/Services/CO.CDP.Localization/.gitignore +++ /dev/null @@ -1 +0,0 @@ -*.Designer.cs \ No newline at end of file diff --git a/Services/CO.CDP.Localization/CO.CDP.Localization.csproj b/Services/CO.CDP.Localization/CO.CDP.Localization.csproj index 2ffa8e07b..8ebc4e591 100644 --- a/Services/CO.CDP.Localization/CO.CDP.Localization.csproj +++ b/Services/CO.CDP.Localization/CO.CDP.Localization.csproj @@ -1,33 +1,31 @@ - + net8.0 enable enable - false + PrepareResources;$(CompileDependsOn) - - True - True - FormsEngineResource.resx - - - True - True - StaticTextResource.resx - - + + MSBuild:Compile + StaticTextResource.Designer.cs + $(IntermediateOutputPath)\StaticTextResource.Designer.cs + CSharp + CO.CDP.Localization + StaticTextResource + true + - - - PublicResXFileCodeGenerator - FormsEngineResource.Designer.cs - - - PublicResXFileCodeGenerator - StaticTextResource.Designer.cs - + + MSBuild:Compile + FormsEngineResource.Designer.cs + $(IntermediateOutputPath)\FormsEngineResource.Designer.cs + CSharp + CO.CDP.Localization + FormsEngineResource + true + From f55080db4b04f0a593f5452f64c4cfdb2f88dd85 Mon Sep 17 00:00:00 2001 From: Andy Mantell <134642+andymantell@users.noreply.github.com> Date: Thu, 17 Oct 2024 11:44:45 +0100 Subject: [PATCH 25/42] Remove env var from dockerfile that we shouldn't need --- Dockerfile | 2 - .../CO.CDP.Localization.csproj | 48 ++++++++++++------- 2 files changed, 30 insertions(+), 20 deletions(-) diff --git a/Dockerfile b/Dockerfile index bdbb17dd6..0c887dcbb 100644 --- a/Dockerfile +++ b/Dockerfile @@ -16,8 +16,6 @@ WORKDIR /app EXPOSE 8080 EXPOSE 8081 -ENV DOTNET_SYSTEM_GLOBALIZATION_INVARIANT=false - FROM mcr.microsoft.com/dotnet/sdk:${ASPNET_VERSION} AS solution-dependencies ARG NUGET_PACKAGES ENV NUGET_PACKAGES="${NUGET_PACKAGES}" diff --git a/Services/CO.CDP.Localization/CO.CDP.Localization.csproj b/Services/CO.CDP.Localization/CO.CDP.Localization.csproj index 8ebc4e591..87153bcc6 100644 --- a/Services/CO.CDP.Localization/CO.CDP.Localization.csproj +++ b/Services/CO.CDP.Localization/CO.CDP.Localization.csproj @@ -8,24 +8,36 @@ - - MSBuild:Compile - StaticTextResource.Designer.cs - $(IntermediateOutputPath)\StaticTextResource.Designer.cs - CSharp - CO.CDP.Localization - StaticTextResource - true - + + True + True + Resources.resx + + + + + + ResXFileCodeGenerator + Resources.Designer.cs + + + MSBuild:Compile + StaticTextResource.Designer.cs + $(IntermediateOutputPath)\StaticTextResource.Designer.cs + CSharp + CO.CDP.Localization + StaticTextResource + true + - - MSBuild:Compile - FormsEngineResource.Designer.cs - $(IntermediateOutputPath)\FormsEngineResource.Designer.cs - CSharp - CO.CDP.Localization - FormsEngineResource - true - + + MSBuild:Compile + FormsEngineResource.Designer.cs + $(IntermediateOutputPath)\FormsEngineResource.Designer.cs + CSharp + CO.CDP.Localization + FormsEngineResource + true + From ae3c49ce252d60b25c6ee46ff5bef858e0f72f69 Mon Sep 17 00:00:00 2001 From: Richard Mohammed Date: Thu, 17 Oct 2024 12:10:33 +0100 Subject: [PATCH 26/42] Join request functionality added. --- .../Registration/JoinOrganisation.cshtml | 9 ------- .../Registration/JoinOrganisation.cshtml.cs | 10 +++++--- .../JoinOrganisationSuccess.cshtml | 25 +++++++++++++++++++ .../JoinOrganisationSuccess.cshtml.cs | 25 +++++++++++++++++++ .../Api/Organisation.cs | 8 +++--- .../Model/OrganisationJoinRequest.cs | 4 +-- 6 files changed, 63 insertions(+), 18 deletions(-) create mode 100644 Frontend/CO.CDP.OrganisationApp/Pages/Registration/JoinOrganisationSuccess.cshtml create mode 100644 Frontend/CO.CDP.OrganisationApp/Pages/Registration/JoinOrganisationSuccess.cshtml.cs diff --git a/Frontend/CO.CDP.OrganisationApp/Pages/Registration/JoinOrganisation.cshtml b/Frontend/CO.CDP.OrganisationApp/Pages/Registration/JoinOrganisation.cshtml index 164209190..0dd88efb4 100644 --- a/Frontend/CO.CDP.OrganisationApp/Pages/Registration/JoinOrganisation.cshtml +++ b/Frontend/CO.CDP.OrganisationApp/Pages/Registration/JoinOrganisation.cshtml @@ -40,9 +40,6 @@ var joinHasError = ((TagBuilder)Html.ValidationMessageFor(m => m.Join)).HasInner

John

-
- Change -
@@ -51,9 +48,6 @@ var joinHasError = ((TagBuilder)Html.ValidationMessageFor(m => m.Join)).HasInner

Johnson

-
- Change -
@@ -62,9 +56,6 @@ var joinHasError = ((TagBuilder)Html.ValidationMessageFor(m => m.Join)).HasInner

john@johnson.com

-
- Change -
diff --git a/Frontend/CO.CDP.OrganisationApp/Pages/Registration/JoinOrganisation.cshtml.cs b/Frontend/CO.CDP.OrganisationApp/Pages/Registration/JoinOrganisation.cshtml.cs index a3caa7d62..3aa6b6cfd 100644 --- a/Frontend/CO.CDP.OrganisationApp/Pages/Registration/JoinOrganisation.cshtml.cs +++ b/Frontend/CO.CDP.OrganisationApp/Pages/Registration/JoinOrganisation.cshtml.cs @@ -40,14 +40,18 @@ public async Task OnPost(Guid organisationId) { if (Join == true) { - // Create a person invite of type join and refactor person invite code + await organisationClient.CreateJoinRequestAsync(organisationId, new CreateOrganisationJoinRequest( + personId: UserDetails.PersonId.Value + )); + + return Redirect("/registration/" + organisationId + "/join-organisation/success"); } + + return Redirect("/registration/has-companies-house-number"); } else { return Redirect("/"); } - - return RedirectToPage("Organisations", new { type = "buyer" }); } } \ No newline at end of file diff --git a/Frontend/CO.CDP.OrganisationApp/Pages/Registration/JoinOrganisationSuccess.cshtml b/Frontend/CO.CDP.OrganisationApp/Pages/Registration/JoinOrganisationSuccess.cshtml new file mode 100644 index 000000000..8f59c4b36 --- /dev/null +++ b/Frontend/CO.CDP.OrganisationApp/Pages/Registration/JoinOrganisationSuccess.cshtml @@ -0,0 +1,25 @@ +@page "/registration/{organisationId}/join-organisation/success" +@model JoinOrganisationSuccessModel + +@{ +var organisationDetails = Model.OrganisationDetails!; +} + + + Back + + +
+
+
+
+

+ Request to join sent +

+
+ You have successfully applied to join @organisationDetails.Name +
+
+
+
+
\ No newline at end of file diff --git a/Frontend/CO.CDP.OrganisationApp/Pages/Registration/JoinOrganisationSuccess.cshtml.cs b/Frontend/CO.CDP.OrganisationApp/Pages/Registration/JoinOrganisationSuccess.cshtml.cs new file mode 100644 index 000000000..6f223d356 --- /dev/null +++ b/Frontend/CO.CDP.OrganisationApp/Pages/Registration/JoinOrganisationSuccess.cshtml.cs @@ -0,0 +1,25 @@ +using CO.CDP.Organisation.WebApiClient; +using Microsoft.AspNetCore.Mvc; +using Microsoft.AspNetCore.Mvc.RazorPages; +using OrganisationWebApiClient = CO.CDP.Organisation.WebApiClient; + +namespace CO.CDP.OrganisationApp.Pages.Registration; + +public class JoinOrganisationSuccessModel( + IOrganisationClient organisationClient) : PageModel +{ + public OrganisationWebApiClient.Organisation? OrganisationDetails { get; set; } + + public async Task OnGet(Guid organisationId) + { + try + { + OrganisationDetails = await organisationClient.GetOrganisationAsync(organisationId); + return Page(); + } + catch (ApiException ex) when (ex.StatusCode == 404) + { + return Redirect("/page-not-found"); + } + } +} \ No newline at end of file diff --git a/Services/CO.CDP.Organisation.WebApi/Api/Organisation.cs b/Services/CO.CDP.Organisation.WebApi/Api/Organisation.cs index 336c11163..05b28f159 100644 --- a/Services/CO.CDP.Organisation.WebApi/Api/Organisation.cs +++ b/Services/CO.CDP.Organisation.WebApi/Api/Organisation.cs @@ -133,8 +133,8 @@ await useCase.Execute((organisationId, updateOrganisation)) [OrganisationAuthorize([AuthenticationChannel.OneLogin])] async (Guid organisationId, CreateOrganisationJoinRequest command, IUseCase<(Guid, CreateOrganisationJoinRequest), OrganisationJoinRequest> useCase) => await useCase.Execute((organisationId, command)) - .AndThen(_ => Results.Created())) - .Produces(StatusCodes.Status201Created, "application/json") + .AndThen(Results.Ok)) + .Produces(StatusCodes.Status200OK, "application/json") .ProducesProblem(StatusCodes.Status500InternalServerError) .ProducesProblem(StatusCodes.Status400BadRequest) .Produces(StatusCodes.Status401Unauthorized) @@ -145,7 +145,7 @@ await useCase.Execute((organisationId, command)) operation.OperationId = "CreateJoinRequest"; operation.Description = "Create a new organisation join request."; operation.Summary = "Create a new organisation join request."; - operation.Responses["201"].Description = "Organisation join request created successfully."; + operation.Responses["200"].Description = "Organisation join request created successfully."; operation.Responses["400"].Description = "Bad request."; operation.Responses["422"].Description = "Unprocessable entity."; operation.Responses["401"].Description = "Valid authentication credentials are missing in the request."; @@ -688,7 +688,7 @@ public static RouteGroupBuilder UseManageApiKeyEndpoints(this RouteGroupBuilder app.MapGet("/{organisationId}/api-keys", [OrganisationAuthorize( [AuthenticationChannel.OneLogin], - [Constants.OrganisationPersonScope.Admin, Constants.OrganisationPersonScope.Editor, Constants.OrganisationPersonScope.Viewer], + [Constants.OrganisationPersonScope.Admin, Constants.OrganisationPersonScope.Editor, Constants.OrganisationPersonScope.Viewer], OrganisationIdLocation.Path, [Constants.PersonScope.SupportAdmin])] async (Guid organisationId, IUseCase> useCase) => diff --git a/Services/CO.CDP.Organisation.WebApi/Model/OrganisationJoinRequest.cs b/Services/CO.CDP.Organisation.WebApi/Model/OrganisationJoinRequest.cs index d23250635..d30289504 100644 --- a/Services/CO.CDP.Organisation.WebApi/Model/OrganisationJoinRequest.cs +++ b/Services/CO.CDP.Organisation.WebApi/Model/OrganisationJoinRequest.cs @@ -7,7 +7,7 @@ public record OrganisationJoinRequest public required Guid Id { get; init; } public required Person Person { get; init; } public required Organisation Organisation { get; init; } - public required Person ReviewedBy { get; init; } - public required DateTimeOffset ReviewedOn { get; set; } + public Person? ReviewedBy { get; init; } + public DateTimeOffset? ReviewedOn { get; set; } public required OrganisationJoinRequestStatus Status { get; set; } } \ No newline at end of file From db715e3fb9f7d022910fccd6c7e96f07748226da Mon Sep 17 00:00:00 2001 From: Andy Mantell <134642+andymantell@users.noreply.github.com> Date: Thu, 17 Oct 2024 13:08:47 +0100 Subject: [PATCH 27/42] writing documentation for localization --- .../SupplierInformationSummary.cshtml | 4 +- .../CO.CDP.Localization.csproj | 12 -- .../StaticTextResource.resx | 4 +- .../cookbooks/02-how-to-localize-ui-text.adoc | 104 ++++++++++++++++++ docs/development/cookbooks/index.adoc | 1 + 5 files changed, 109 insertions(+), 16 deletions(-) create mode 100644 docs/development/cookbooks/02-how-to-localize-ui-text.adoc diff --git a/Frontend/CO.CDP.OrganisationApp/Pages/Supplier/SupplierInformationSummary.cshtml b/Frontend/CO.CDP.OrganisationApp/Pages/Supplier/SupplierInformationSummary.cshtml index 715a60799..fd5ae91b8 100644 --- a/Frontend/CO.CDP.OrganisationApp/Pages/Supplier/SupplierInformationSummary.cshtml +++ b/Frontend/CO.CDP.OrganisationApp/Pages/Supplier/SupplierInformationSummary.cshtml @@ -49,7 +49,7 @@
- @StaticTextResource.BasicInformation_SectionHeading + @StaticTextResource.BasicInformation_SectionTitle
@@ -63,7 +63,7 @@
- @StaticTextResource.ConnectedPersons_SectionHeading + @StaticTextResource.ConnectedPersons_SectionTitle
@NoOfConnectedPersonText() diff --git a/Services/CO.CDP.Localization/CO.CDP.Localization.csproj b/Services/CO.CDP.Localization/CO.CDP.Localization.csproj index 87153bcc6..ee19f38e5 100644 --- a/Services/CO.CDP.Localization/CO.CDP.Localization.csproj +++ b/Services/CO.CDP.Localization/CO.CDP.Localization.csproj @@ -8,18 +8,6 @@ - - True - True - Resources.resx - - - - - - ResXFileCodeGenerator - Resources.Designer.cs - MSBuild:Compile StaticTextResource.Designer.cs diff --git a/Services/CO.CDP.Localization/StaticTextResource.resx b/Services/CO.CDP.Localization/StaticTextResource.resx index f2a2a0022..deb2c344d 100644 --- a/Services/CO.CDP.Localization/StaticTextResource.resx +++ b/Services/CO.CDP.Localization/StaticTextResource.resx @@ -132,10 +132,10 @@ Back to organisation details - + Connected persons - + Basic information diff --git a/docs/development/cookbooks/02-how-to-localize-ui-text.adoc b/docs/development/cookbooks/02-how-to-localize-ui-text.adoc new file mode 100644 index 000000000..53c9b68d0 --- /dev/null +++ b/docs/development/cookbooks/02-how-to-localize-ui-text.adoc @@ -0,0 +1,104 @@ += Localizing UI text + +== Intro to solution + +Localization has been achieved using .Net "Resource files" which are held in CO.CDP.Localization. + +These are named with a pattern like `StaticTextResource.resx` and `StaticTextResource.cy.resx`, where the first file is the "neutral" language, and `.cy.` is the Welsh, and together they should load up in the resource explorer as a pair. + +The frontend application has been extended so that it negotiates the current culture based on a cookie which is set when clicking on the language switcher. In the absence of this cookie, the culture defaults to `en`. + +The form api has been localized based on the Accept-Language header, which is passed to them from the frontend via the `CultureDelegatingHandler`. + +There are two separate resource files - `StaticTextResource` which is text that is defined in code in the organisation app. The other is `FormsEngineResource` which is responsible for content that is held in the forms engine database tables. + +=== Guidance for naming keys + +Generally speaking, keys are either "global" in that they are not unique to a particular section and may appear anywhere on the service - for example `Global_Continue` represents the word `Continue` on the buttons that appear across the site. Or they can be namespaced to a specific section of the service such as `BasicInformation_SectionTitle`. + +Use Underscores_To_Separate_Words and not dots or hyphens. This ensures that the key is the same whether you are using the strongly typed `StaticTextResource` class to access keys like `StaticTextResource.Global_Back`, or if you are using `@inject IHtmlLocalizer Localizer` to access keys like `Localizer["Global_Back"]` + +This is purely a naming convention - there is no mechanism enforcing this. It requires developers to name things in an appropriate way. + +As a rule - try to name keys in the most generic way that is appropriate. For example if the exclusions section contains some text that is used repeatedly in that section, don't define multiple keys scoped to each page it's used on. + +Using the path to the view, or folder containing a set of views is a reasonable place to start with naming. + +== How to localize static pieces of text + +As mentioned above, there are two methods to access localized strings. + +=== Strongly typed classses + +*Please where possible prefer using the strongly typed classes, in order that we have compile time safety.* This means that if a key is used which doesn't exist in the resource files, we get a compiler error instead of a runtime error which you would get when using `IHtmlLocalizer`. + +There are strongly typed classes for `StaticTextResource` and `FormsEngineResource` that allow you to access strings as follows: + +``` + + @StaticTextResource.Global_Back + +``` + +If you have added a new key to the resource files, you will need to rebuild the solution for the strongly typed classes to rebuild and for your key to become available. + +If you need to access HTML inside a value, you can pass it through `Html.Raw`: + +``` +@Html.Raw(StaticTextResource.Global_Back) +``` + +=== Using IStringLocalizer or IHtmlLocalizer + +This method is mentioned for completeness, but should be avoided. Please use the strongly typed class where possible. + +``` +@inject IHtmlLocalizer Localizer + +@Localizer["Global_Back"] +``` + +== How to localize form validation errors + +Form validation errors are localized as follows: + +``` +[DisplayName(nameof(StaticTextResource.OrganisationRegistration_EnterOrganisationName_Heading))] +[Required(ErrorMessage = nameof(StaticTextResource.OrganisationRegistration_EnterOrganisationName_Heading))] +public string? OrganisationName { get; set; } +``` + +This uses the same resource, but you cannot pass the values straight into the annotations. The `nameof` syntax above is what you need. + +== How to localize Forms engine text + +Forms engine text is stored in `FormsEngineResource` and uses keys named based on the form section. These need to be inserted into the database via migration scripts to replace whatever hardcoded text was there before. + +For example, the exclusions section title is set to `Exclusions_SectionTitle` instead of just `Exclusions`. This is then replaced at runtime by the forms api which is able to localize any of the strings that come out of the database. + +=== Inside question options + +Question options are stored as JSON blobs in the database. You *should not* localize the entire JSON blob, by placing the JSON into the resource file. + +The Forms API is capable of translating specific keys within the JSON and so you can just replace individual values like `{"choices": ["Qualifications_QuestionName_ChoiceOne", "Qualifications_QuestionName_ChoiceTwo"]}` and these will be resovled at runtime by the automapper. + +== Handling plural forms + +Plural forms can be handled by defining multiple keys, for example: + +``` +Supplier_SupplierInformationSummary_ConnectedPersonCount_None = "No connected persons" +Supplier_SupplierInformationSummary_ConnectedPersonCount_Plural = "{0} Connected persons" +Supplier_SupplierInformationSummary_ConnectedPersonCount_Singular = "{0} Connected person" +``` + +This can then be used in the code to format the right output: + +``` +if (count == 0) +{ + return Model.ConnectedPersonStepStatus == SupplierInformationStatus.StepStatus.Completed ? StaticTextResource.Supplier_SupplierInformationSummary_ConnectedPersonCount_None : string.Empty; +} + +return string.Format(count > 1 ? StaticTextResource.Supplier_SupplierInformationSummary_ConnectedPersonCount_Plural : StaticTextResource.Supplier_SupplierInformationSummary_ConnectedPersonCount_Singular, count); +``` \ No newline at end of file diff --git a/docs/development/cookbooks/index.adoc b/docs/development/cookbooks/index.adoc index 5683ce4fb..d7f8764bb 100644 --- a/docs/development/cookbooks/index.adoc +++ b/docs/development/cookbooks/index.adoc @@ -5,5 +5,6 @@ This section stores recipes useful in development. :leveloffset: +1 include::01-using-docker-for-development.adoc[] +include::02-how-to-localize-ui-text.adoc[] :leveloffset: -1 From f148711a63c300729abcdd32a7f0b08c524b5b54 Mon Sep 17 00:00:00 2001 From: Richard Mohammed Date: Thu, 17 Oct 2024 14:11:00 +0100 Subject: [PATCH 28/42] Added joinOrganisation unit tests. --- .../Registration/JoinOrganisationTests.cs | 118 ++++++++++++++++++ 1 file changed, 118 insertions(+) create mode 100644 Frontend/CO.CDP.OrganisationApp.Tests/Pages/Registration/JoinOrganisationTests.cs diff --git a/Frontend/CO.CDP.OrganisationApp.Tests/Pages/Registration/JoinOrganisationTests.cs b/Frontend/CO.CDP.OrganisationApp.Tests/Pages/Registration/JoinOrganisationTests.cs new file mode 100644 index 000000000..82007ed90 --- /dev/null +++ b/Frontend/CO.CDP.OrganisationApp.Tests/Pages/Registration/JoinOrganisationTests.cs @@ -0,0 +1,118 @@ +using CO.CDP.Organisation.WebApiClient; +using CO.CDP.OrganisationApp.Models; +using CO.CDP.OrganisationApp.Pages.Registration; +using FluentAssertions; +using Microsoft.AspNetCore.Mvc; +using Microsoft.AspNetCore.Mvc.RazorPages; +using Moq; + +namespace CO.CDP.OrganisationApp.Tests.Pages.Registration; + +public class JoinOrganisationModelTests +{ + private readonly Mock _organisationClientMock; + private readonly Mock _sessionMock; + private readonly JoinOrganisationModel _joinOrganisationModel; + private readonly Guid _organisationId = Guid.NewGuid(); + private readonly Guid _personId = Guid.NewGuid(); + private readonly CDP.Organisation.WebApiClient.Organisation _organisation; + + public JoinOrganisationModelTests() + { + _organisationClientMock = new Mock(); + _sessionMock = new Mock(); + _sessionMock.Setup(s => s.Get(Session.UserDetailsKey)) + .Returns(new UserDetails() { UserUrn = "testUserUrn", PersonId = _personId}); + _joinOrganisationModel = new JoinOrganisationModel(_organisationClientMock.Object, _sessionMock.Object); + _organisation = new CO.CDP.Organisation.WebApiClient.Organisation(null, null, null, null, _organisationId, null, "Test Org", []); + } + + [Fact] + public async Task OnGet_ValidOrganisationId_ReturnsPageResult() + { + _organisationClientMock.Setup(client => client.GetOrganisationAsync(_organisationId)) + .ReturnsAsync(_organisation); + + var result = await _joinOrganisationModel.OnGet(_organisationId); + + result.Should().BeOfType(); + _joinOrganisationModel.OrganisationDetails.Should().Be(_organisation); + _organisationClientMock.Verify(client => client.GetOrganisationAsync(_organisationId), Times.Once); + } + + [Fact] + public async Task OnGet_OrganisationNotFound_ReturnsRedirectToPageNotFound() + { + _organisationClientMock.Setup(client => client.GetOrganisationAsync(_organisationId)) + .ThrowsAsync(new ApiException("Not Found", 404, "Not Found", null, null)); + + var result = await _joinOrganisationModel.OnGet(_organisationId); + + result.Should().BeOfType() + .Which.Url.Should().Be("/page-not-found"); + + _organisationClientMock.Verify(client => client.GetOrganisationAsync(_organisationId), Times.Once); + } + + [Fact] + public async Task OnPost_ModelStateInvalid_ReturnsPageResultWithOrganisationDetails() + { + _joinOrganisationModel.ModelState.AddModelError("Join", "Select an option"); + + _organisationClientMock.Setup(client => client.GetOrganisationAsync(_organisationId)) + .ReturnsAsync(_organisation); + + var result = await _joinOrganisationModel.OnPost(_organisationId); + + result.Should().BeOfType(); + _joinOrganisationModel.OrganisationDetails.Should().Be(_organisation); + _organisationClientMock.Verify(client => client.GetOrganisationAsync(_organisationId), Times.Once); + } + + [Fact] + public async Task OnPost_UserHasPersonId_JoinIsTrue_CreatesJoinRequestAndRedirectsToSuccessPage() + { + var personId = Guid.NewGuid(); + _joinOrganisationModel.Join = true; + + var result = await _joinOrganisationModel.OnPost(_organisationId); + + _organisationClientMock.Verify(client => client.CreateJoinRequestAsync( + _organisationId, + It.Is(r => r.PersonId == _joinOrganisationModel.UserDetails.PersonId)), + Times.Once); + + result.Should().BeOfType() + .Which.Url.Should().Be($"/registration/{_organisationId}/join-organisation/success"); + } + + [Fact] + public async Task OnPost_UserHasPersonId_JoinIsFalse_RedirectsToCompaniesHouseNumber() + { + var organisationId = Guid.NewGuid(); + _joinOrganisationModel.Join = false; + + var result = await _joinOrganisationModel.OnPost(organisationId); + + result.Should().BeOfType() + .Which.Url.Should().Be("/registration/has-companies-house-number"); + + _organisationClientMock.Verify(client => client.CreateJoinRequestAsync(It.IsAny(), It.IsAny()), Times.Never); + } + + [Fact] + public async Task OnPost_UserHasNoPersonId_RedirectsToHomePage() + { + var organisationId = Guid.NewGuid(); + _joinOrganisationModel.Join = true; + _sessionMock.Setup(s => s.Get(Session.UserDetailsKey)) + .Returns(new UserDetails() { UserUrn = "testUserUrn", PersonId = null}); + + var result = await _joinOrganisationModel.OnPost(organisationId); + + result.Should().BeOfType() + .Which.Url.Should().Be("/"); + + _organisationClientMock.Verify(client => client.CreateJoinRequestAsync(It.IsAny(), It.IsAny()), Times.Never); + } +} From b0a8b9b23460693b7c773e7f678e8c0c2abc4c40 Mon Sep 17 00:00:00 2001 From: Richard Mohammed Date: Thu, 17 Oct 2024 14:17:27 +0100 Subject: [PATCH 29/42] Add tests for JoinOrganisationSuccessModel. --- .../JoinOrganisationSuccessTests.cs | 53 +++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 Frontend/CO.CDP.OrganisationApp.Tests/Pages/Registration/JoinOrganisationSuccessTests.cs diff --git a/Frontend/CO.CDP.OrganisationApp.Tests/Pages/Registration/JoinOrganisationSuccessTests.cs b/Frontend/CO.CDP.OrganisationApp.Tests/Pages/Registration/JoinOrganisationSuccessTests.cs new file mode 100644 index 000000000..fb41eb716 --- /dev/null +++ b/Frontend/CO.CDP.OrganisationApp.Tests/Pages/Registration/JoinOrganisationSuccessTests.cs @@ -0,0 +1,53 @@ +using CO.CDP.Organisation.WebApiClient; +using CO.CDP.OrganisationApp.Pages.Registration; +using FluentAssertions; +using Microsoft.AspNetCore.Mvc; +using Microsoft.AspNetCore.Mvc.RazorPages; +using Moq; + +namespace CO.CDP.OrganisationApp.Tests.Pages.Registration; + +public class JoinOrganisationSuccessModelTests +{ + private readonly Mock _organisationClientMock; + private readonly JoinOrganisationSuccessModel _joinOrganisationSuccessModel; + private readonly Guid _organisationId = Guid.NewGuid(); + private readonly Guid _personId = Guid.NewGuid(); + private readonly CO.CDP.Organisation.WebApiClient.Organisation _organisation; + + public JoinOrganisationSuccessModelTests() + { + _organisationClientMock = new Mock(); + _joinOrganisationSuccessModel = new JoinOrganisationSuccessModel(_organisationClientMock.Object); + _organisation = new CO.CDP.Organisation.WebApiClient.Organisation(null, null, null, null, _organisationId, null, "Test Org", []); + } + + [Fact] + public async Task OnGet_ValidOrganisationId_ReturnsPageResult() + { + var organisationId = Guid.NewGuid(); + + _organisationClientMock.Setup(client => client.GetOrganisationAsync(organisationId)) + .ReturnsAsync(_organisation); + + var result = await _joinOrganisationSuccessModel.OnGet(organisationId); + + result.Should().BeOfType(); + _joinOrganisationSuccessModel.OrganisationDetails.Should().Be(_organisation); + _organisationClientMock.Verify(client => client.GetOrganisationAsync(organisationId), Times.Once); + } + + [Fact] + public async Task OnGet_OrganisationNotFound_ReturnsRedirectToPageNotFound() + { + _organisationClientMock.Setup(client => client.GetOrganisationAsync(_organisationId)) + .ThrowsAsync(new ApiException("Not Found", 404, "Not Found", null, null)); + + var result = await _joinOrganisationSuccessModel.OnGet(_organisationId); + + result.Should().BeOfType() + .Which.Url.Should().Be("/page-not-found"); + + _organisationClientMock.Verify(client => client.GetOrganisationAsync(_organisationId), Times.Once); + } +} From 36330ab84b285f5d81cc5128d4acd188cda6b834 Mon Sep 17 00:00:00 2001 From: Richard Mohammed Date: Thu, 17 Oct 2024 14:51:40 +0100 Subject: [PATCH 30/42] Switch from using static variables now that the messages are org specific. --- .../Registration/CompanyHouseNumberQuestionTests.cs | 10 ++++++---- .../CompanyHouseNumberQuestion.cshtml.cs | 12 ++++++------ 2 files changed, 12 insertions(+), 10 deletions(-) diff --git a/Frontend/CO.CDP.OrganisationApp.Tests/Pages/Registration/CompanyHouseNumberQuestionTests.cs b/Frontend/CO.CDP.OrganisationApp.Tests/Pages/Registration/CompanyHouseNumberQuestionTests.cs index 9b5ec2557..3d649189b 100644 --- a/Frontend/CO.CDP.OrganisationApp.Tests/Pages/Registration/CompanyHouseNumberQuestionTests.cs +++ b/Frontend/CO.CDP.OrganisationApp.Tests/Pages/Registration/CompanyHouseNumberQuestionTests.cs @@ -70,7 +70,7 @@ public async Task OnPost_WhenModelStateIsValid_And_CompaniesNumber_Provided_Shou organisationClientMock.Setup(o => o.LookupOrganisationAsync(string.Empty, It.IsAny())) .Throws(new ApiException(string.Empty, 404, string.Empty, null, null)); - + var profile = GivenProfileOnCompaniesHouse(organisationName: "Acme Ltd"); companiesHouseApiMock.Setup(ch => ch.GetProfile(model.CompaniesHouseNumber)) .ReturnsAsync(profile); @@ -88,7 +88,7 @@ public async Task OnPost_WhenModelStateIsValidAndRedirectToSummary_ShouldRedirec model.HasCompaniesHouseNumber = true; model.RedirectToSummary = true; model.CompaniesHouseNumber = "123456"; - + GivenRegistrationIsInProgress(model.HasCompaniesHouseNumber, model.CompaniesHouseNumber); organisationClientMock.Setup(o => o.LookupOrganisationAsync(string.Empty, It.IsAny())) @@ -111,6 +111,8 @@ public async Task OnPost_WhenModelStateIsValidAndOrganisationAlreadyExists_Shoul model.HasCompaniesHouseNumber = true; model.RedirectToSummary = true; model.CompaniesHouseNumber = "123456"; + model.OrganisationId = new Guid(); + model.OrganisationName = "Test company"; GivenRegistrationIsInProgress(model.HasCompaniesHouseNumber, model.CompaniesHouseNumber); @@ -118,7 +120,7 @@ public async Task OnPost_WhenModelStateIsValidAndOrganisationAlreadyExists_Shoul tempDataServiceMock.Verify(api => api.Put( FlashMessageTypes.Important, - CompanyHouseNumberQuestionModel.NotificationBannerCompanyAlreadyRegistered), Times.Once); + model.NotificationBannerCompanyAlreadyRegistered), Times.Once); result.Should().BeOfType(); } @@ -140,7 +142,7 @@ public async Task OnPost_WhenModelStateIsValidAndCompanyNotFoundAtComapniesHouse tempDataServiceMock.Verify(api => api.Put( FlashMessageTypes.Important, - CompanyHouseNumberQuestionModel.NotificationBannerCompanyNotFound), Times.Once); + model.NotificationBannerCompanyNotFound), Times.Once); result.Should().BeOfType(); } diff --git a/Frontend/CO.CDP.OrganisationApp/Pages/Registration/CompanyHouseNumberQuestion.cshtml.cs b/Frontend/CO.CDP.OrganisationApp/Pages/Registration/CompanyHouseNumberQuestion.cshtml.cs index 03382d799..576b4640c 100644 --- a/Frontend/CO.CDP.OrganisationApp/Pages/Registration/CompanyHouseNumberQuestion.cshtml.cs +++ b/Frontend/CO.CDP.OrganisationApp/Pages/Registration/CompanyHouseNumberQuestion.cshtml.cs @@ -32,12 +32,12 @@ public class CompanyHouseNumberQuestionModel(ISession session, [BindProperty] public string? FailedCompaniesHouseNumber { get; set; } - public static Guid? OrganisationId; + public Guid? OrganisationId; - public static string? OrganisationName; + public string? OrganisationName; - public static string NotificationBannerCompanyNotFound { get { return "We cannot find your company number on Companies House. If it’s correct continue and enter your details manually."; } } - public static string NotificationBannerCompanyAlreadyRegistered { get { return "An organisation with this company number already exists. Change the company number or request to join " + OrganisationName + "."; } } + public string NotificationBannerCompanyNotFound { get { return "We cannot find your company number on Companies House. If it’s correct continue and enter your details manually."; } } + public string NotificationBannerCompanyAlreadyRegistered { get { return "An organisation with this company number already exists. Change the company number or request to join " + OrganisationName + "."; } } public void OnGet() { @@ -61,8 +61,8 @@ public async Task OnPost() try { var organisation = await organisationClient.LookupOrganisationAsync(string.Empty, $"GB-COH:{RegistrationDetails.OrganisationIdentificationNumber}"); - OrganisationId = organisation.Id; - OrganisationName = organisation.Name; + OrganisationId = organisation?.Id; + OrganisationName = organisation?.Name; tempDataService.Put(FlashMessageTypes.Important, NotificationBannerCompanyAlreadyRegistered); return Page(); } From c96007ee1d86958dbcc5d7ac1e50f0541faceb92 Mon Sep 17 00:00:00 2001 From: Andy Mantell <134642+andymantell@users.noreply.github.com> Date: Thu, 17 Oct 2024 15:13:57 +0100 Subject: [PATCH 31/42] Integration and unit tests for localization work --- .../LocalizationTests.cs | 173 ++++++++++++++++++ .../Pages/ChangeLanguageTests.cs | 93 ++++++++++ .../Registration/OrganisationNameModelTest.cs | 4 +- ...6134622_SupplierInformationLocalization.cs | 2 +- 4 files changed, 269 insertions(+), 3 deletions(-) create mode 100644 Frontend/CO.CDP.OrganisationApp.Tests/LocalizationTests.cs create mode 100644 Frontend/CO.CDP.OrganisationApp.Tests/Pages/ChangeLanguageTests.cs diff --git a/Frontend/CO.CDP.OrganisationApp.Tests/LocalizationTests.cs b/Frontend/CO.CDP.OrganisationApp.Tests/LocalizationTests.cs new file mode 100644 index 000000000..f29731b9c --- /dev/null +++ b/Frontend/CO.CDP.OrganisationApp.Tests/LocalizationTests.cs @@ -0,0 +1,173 @@ +using CO.CDP.Organisation.WebApiClient; +using CO.CDP.OrganisationApp.Constants; +using CO.CDP.OrganisationApp.Models; +using CO.CDP.OrganisationApp.ThirdPartyApiClients.CompaniesHouse; +using CO.CDP.Person.WebApiClient; +using CO.CDP.Tenant.WebApiClient; +using FluentAssertions; +using Microsoft.AspNetCore.Antiforgery; +using Microsoft.AspNetCore.Authentication; +using Microsoft.AspNetCore.Authentication.Cookies; +using Microsoft.AspNetCore.Authentication.OpenIdConnect; +using Microsoft.AspNetCore.Http; +using Microsoft.AspNetCore.Localization; +using Microsoft.Extensions.DependencyInjection; +using Moq; +using System.Net; +using System.Text.RegularExpressions; + +namespace CO.CDP.OrganisationApp.Tests; +public class LocalizationTests +{ + private static readonly Mock organisationClient = new Mock("https://whatever", new HttpClient()); + private static readonly Mock _mockSession = new Mock(); + private static Guid personId = new Guid("5b0d3aa8-94cd-4ede-ba03-546937035690"); + private static readonly Mock companiesHouseApiMock = new Mock(); + + public HttpClient BuildHttpClient() + { + var services = new ServiceCollection(); + + var person = new Person.WebApiClient.Person("a@b.com", "First name", personId, "Last name", null); + + _mockSession + .Setup(s => s.Get(Session.UserDetailsKey)) + .Returns(new Models.UserDetails() { Email = "a@b.com", UserUrn = "urn", PersonId = person.Id }); + + _mockSession + .Setup(s => s.Get(Session.RegistrationDetailsKey)) + .Returns(new Models.RegistrationDetails() { OrganisationType = OrganisationType.Supplier, OrganisationScheme = "Whatever" }); + + services.AddSingleton(_mockSession.Object); + + var antiforgeryMock = new Mock(); + + antiforgeryMock.Setup(a => a.ValidateRequestAsync(It.IsAny())) + .Returns(Task.CompletedTask); + + antiforgeryMock.Setup(a => a.GetAndStoreTokens(It.IsAny())) + .Returns(new AntiforgeryTokenSet( + "fakeRequestToken", + "fakeCookieToken", + "fakeFormFieldName", + "fakeHeaderName")); + + services.AddSingleton(antiforgeryMock.Object); + + services.AddAuthentication(options => + { + options.DefaultScheme = CookieAuthenticationDefaults.AuthenticationScheme; + options.DefaultChallengeScheme = OpenIdConnectDefaults.AuthenticationScheme; + }) + .AddScheme(CookieAuthenticationDefaults.AuthenticationScheme, options => { }); + + services.Configure(OpenIdConnectDefaults.AuthenticationScheme, options => { + options.ClientId = "123"; + options.Authority = "https://whatever"; + }); + + var factory = new CustomisableWebApplicationFactory(services); + + return factory.CreateClient(); + } + + [Fact] + public async Task OrganisationNamePage_DisplaysCorrectly_WhenLanguageIsDefaulted() + { + var _httpClient = BuildHttpClient(); + + var request = new HttpRequestMessage(HttpMethod.Get, "/registration/organisation-name"); + + var response = await _httpClient.SendAsync(request); + + var responseBody = await response.Content.ReadAsStringAsync(); + + responseBody.Should().NotBeNull(); + response.StatusCode.Should().Be(HttpStatusCode.OK); + + responseBody.Should().Contain("Enter the organisation's name"); + } + + [Fact] + public async Task OrganisationNamePage_DisplaysCorrectly_WhenLanguageIsEnglish() + { + var _httpClient = BuildHttpClient(); + + var request = new HttpRequestMessage(HttpMethod.Get, "/registration/organisation-name"); + + var cultureCookieValue = CookieRequestCultureProvider.MakeCookieValue(new RequestCulture("en")); + request.Headers.Add("Cookie", $"{CookieRequestCultureProvider.DefaultCookieName}={cultureCookieValue}"); + + var response = await _httpClient.SendAsync(request); + + var responseBody = await response.Content.ReadAsStringAsync(); + + responseBody.Should().NotBeNull(); + response.StatusCode.Should().Be(HttpStatusCode.OK); + + responseBody.Should().Contain("Enter the organisation's name"); + } + + [Fact] + public async Task OrganisationNamePage_DisplaysCorrectly_WhenLanguageIsWelsh() + { + var _httpClient = BuildHttpClient(); + + var request = new HttpRequestMessage(HttpMethod.Get, "/registration/organisation-name"); + + var cultureCookieValue = CookieRequestCultureProvider.MakeCookieValue(new RequestCulture("cy")); + request.Headers.Add("Cookie", $"{CookieRequestCultureProvider.DefaultCookieName}={cultureCookieValue}"); + + var response = await _httpClient.SendAsync(request); + + var responseBody = await response.Content.ReadAsStringAsync(); + + responseBody.Should().NotBeNull(); + response.StatusCode.Should().Be(HttpStatusCode.OK); + + responseBody.Should().Contain("Rhowch enw’r sefydliad"); + } + + [Fact] + public async Task OrganisationNamePage_DisplaysErrorMessageCorrectly_WhenLanguageIsEnglish() + { + var _httpClient = BuildHttpClient(); + + var request = new HttpRequestMessage(HttpMethod.Post, "/registration/organisation-name") + { + Content = new FormUrlEncodedContent(new Dictionary { { "OrganisationName", "" } }) + }; + + var response = await _httpClient.SendAsync(request); + + var responseBody = await response.Content.ReadAsStringAsync(); + + responseBody.Should().NotBeNull(); + response.StatusCode.Should().Be(HttpStatusCode.OK); + + responseBody.Should().Contain("Enter the organisation's name"); + } + + [Fact] + public async Task OrganisationNamePage_DisplaysErrorMessageCorrectly_WhenLanguageIsWelsh() + { + var _httpClient = BuildHttpClient(); + + var request = new HttpRequestMessage(HttpMethod.Post, "/registration/organisation-name") + { + Content = new FormUrlEncodedContent(new Dictionary { { "OrganisationName", "" } }) + }; + + var cultureCookieValue = CookieRequestCultureProvider.MakeCookieValue(new RequestCulture("cy")); + request.Headers.Add("Cookie", $"{CookieRequestCultureProvider.DefaultCookieName}={cultureCookieValue}"); + + var response = await _httpClient.SendAsync(request); + + var responseBody = await response.Content.ReadAsStringAsync(); + + responseBody.Should().NotBeNull(); + response.StatusCode.Should().Be(HttpStatusCode.OK); + + responseBody.Should().Contain("Rhowch enw’r sefydliad"); + } +} diff --git a/Frontend/CO.CDP.OrganisationApp.Tests/Pages/ChangeLanguageTests.cs b/Frontend/CO.CDP.OrganisationApp.Tests/Pages/ChangeLanguageTests.cs new file mode 100644 index 000000000..0495f182c --- /dev/null +++ b/Frontend/CO.CDP.OrganisationApp.Tests/Pages/ChangeLanguageTests.cs @@ -0,0 +1,93 @@ +using CO.CDP.OrganisationApp.Pages; +using FluentAssertions; +using Microsoft.AspNetCore.Http; +using Microsoft.AspNetCore.Localization; +using Microsoft.AspNetCore.Mvc; +using Moq; + +namespace CO.CDP.OrganisationApp.Tests.Pages; + +public class ChangeLanguageTests +{ + private readonly ChangeLanguageModel _model; + private readonly Mock _mockTempDataService; + private readonly Mock _mockHttpContext; + private readonly Mock _mockResponse; + private readonly Mock _mockRequest; + private readonly Mock _mockCookies; + private readonly Mock _mockUrlHelper; + + public ChangeLanguageTests() + { + _mockTempDataService = new Mock(); + _model = new ChangeLanguageModel(_mockTempDataService.Object); + _mockHttpContext = new Mock(); + _mockResponse = new Mock(); + _mockRequest = new Mock(); + _mockCookies = new Mock(); + _mockUrlHelper = new Mock(); + + _mockResponse.Setup(r => r.Cookies).Returns(_mockCookies.Object); + _mockHttpContext.Setup(c => c.Response).Returns(_mockResponse.Object); + _mockHttpContext.Setup(c => c.Request).Returns(_mockRequest.Object); + _model.PageContext.HttpContext = _mockHttpContext.Object; + _model.Url = _mockUrlHelper.Object; + } + + [Fact] + public void OnGet_ClearsFormSectionTempData() + { + _mockTempDataService.Setup(c => c.Keys).Returns(["Form_Whatever_Questions"]); + _model.OnGet("en", "/foo"); + + _mockTempDataService.Verify(c => c.Remove("Form_Whatever_Questions"), Times.Once); + } + + [Fact] + public void OnGet_SetsCookie_WhenLanguageIsEnglish() + { + var cookieValue = CookieRequestCultureProvider.MakeCookieValue(new RequestCulture("en")); + + _model.OnGet("en", "/foo"); + + _mockCookies.Verify(c => c.Append(It.IsAny(), cookieValue, It.IsAny()), Times.Once); + } + + [Fact] + public void OnGet_SetsCookie_WhenLanguageIsWelsh() + { + var cookieValue = CookieRequestCultureProvider.MakeCookieValue(new RequestCulture("cy")); + + _model.OnGet("cy", "/foo"); + + _mockCookies.Verify(c => c.Append(It.IsAny(), cookieValue, It.IsAny()), Times.Once); + } + + [Fact] + public void OnGet_Redirects_WhenRedirectUrlIsLocal() + { + var cookieValue = CookieRequestCultureProvider.MakeCookieValue(new RequestCulture("cy")); + + _mockUrlHelper.Setup(u => u.IsLocalUrl(It.IsAny())).Returns(true); + + var response = _model.OnGet("cy", "/foo"); + + response.Should().BeOfType(); + + var localRedirectResult = response as LocalRedirectResult; + localRedirectResult!.Url.Should().Be("/foo"); + } + + [Fact] + public void OnGet_Redirects_WhenRedirectUrlIsRemote() + { + var cookieValue = CookieRequestCultureProvider.MakeCookieValue(new RequestCulture("cy")); + + var response = _model.OnGet("cy", "http://whatever.com"); + + response.Should().BeOfType(); + + var redirectResult = response as RedirectResult; + redirectResult!.Url.Should().Be("/"); + } +} \ No newline at end of file diff --git a/Frontend/CO.CDP.OrganisationApp.Tests/Pages/Registration/OrganisationNameModelTest.cs b/Frontend/CO.CDP.OrganisationApp.Tests/Pages/Registration/OrganisationNameModelTest.cs index a057041e5..5e9415ea3 100644 --- a/Frontend/CO.CDP.OrganisationApp.Tests/Pages/Registration/OrganisationNameModelTest.cs +++ b/Frontend/CO.CDP.OrganisationApp.Tests/Pages/Registration/OrganisationNameModelTest.cs @@ -94,14 +94,14 @@ public void OnPost_WhenValidModel_ShouldSetRegistrationDetailsInSession() } [Fact] - public void OnGet_ValidSession_ReturnsRegistrationDetails() + public async Task OnGet_ValidSession_ReturnsRegistrationDetails() { RegistrationDetails registrationDetails = DummyRegistrationDetails(); sessionMock.Setup(s => s.Get(Session.RegistrationDetailsKey)).Returns(registrationDetails); var model = GivenOrganisationNameModel(); - model.OnGet(); + await model.OnGet(); model.OrganisationName.Should().Be(registrationDetails.OrganisationName); } diff --git a/Services/CO.CDP.OrganisationInformation.Persistence/Migrations/20241016134622_SupplierInformationLocalization.cs b/Services/CO.CDP.OrganisationInformation.Persistence/Migrations/20241016134622_SupplierInformationLocalization.cs index 5bf549a41..2cc36fa8e 100644 --- a/Services/CO.CDP.OrganisationInformation.Persistence/Migrations/20241016134622_SupplierInformationLocalization.cs +++ b/Services/CO.CDP.OrganisationInformation.Persistence/Migrations/20241016134622_SupplierInformationLocalization.cs @@ -59,7 +59,7 @@ UPDATE form_sections WHERE title = 'Exclusions_SectionTitle'; UPDATE form_sections - SET title = 'Financial information' + SET title = 'Financial Information' WHERE title = 'FinancialInformation_SectionTitle'; END $$; "); From 7b5322a5e97a2270fdc38195cc28904165f76823 Mon Sep 17 00:00:00 2001 From: Andy Mantell <134642+andymantell@users.noreply.github.com> Date: Thu, 17 Oct 2024 15:22:32 +0100 Subject: [PATCH 32/42] fix type mismatch in welsh language file --- .../StaticTextResource.cy.resx | 64 ++++++++++--------- 1 file changed, 33 insertions(+), 31 deletions(-) diff --git a/Services/CO.CDP.Localization/StaticTextResource.cy.resx b/Services/CO.CDP.Localization/StaticTextResource.cy.resx index 93ef002e6..536b17ab4 100644 --- a/Services/CO.CDP.Localization/StaticTextResource.cy.resx +++ b/Services/CO.CDP.Localization/StaticTextResource.cy.resx @@ -1,17 +1,17 @@  - @@ -129,20 +129,22 @@ Yn ôl i fanylion y sefydliad - + Unigolion cysylltiedig - + Gwybodaeth sylfaenol + + + Rhowch enw’r sefydliad Fel y'i cofrestrwyd â Thŷ'r Cwmnïau os yw'n gorfforedig, neu enw masnachu'r cwmni. - - + From 68ca491647d459b5d39a1041541efc685a74416c Mon Sep 17 00:00:00 2001 From: Andy Mantell <134642+andymantell@users.noreply.github.com> Date: Thu, 17 Oct 2024 15:27:40 +0100 Subject: [PATCH 33/42] Remove blank value accidentally included in welsh resource file --- .../StaticTextResource.cy.resx | 6 --- .../StaticTextResource.resx | 54 +++++++++---------- 2 files changed, 27 insertions(+), 33 deletions(-) diff --git a/Services/CO.CDP.Localization/StaticTextResource.cy.resx b/Services/CO.CDP.Localization/StaticTextResource.cy.resx index 536b17ab4..535cb7dad 100644 --- a/Services/CO.CDP.Localization/StaticTextResource.cy.resx +++ b/Services/CO.CDP.Localization/StaticTextResource.cy.resx @@ -135,18 +135,12 @@ Gwybodaeth sylfaenol - - - Rhowch enw’r sefydliad Fel y'i cofrestrwyd â Thŷ'r Cwmnïau os yw'n gorfforedig, neu enw masnachu'r cwmni. - - - Parhau diff --git a/Services/CO.CDP.Localization/StaticTextResource.resx b/Services/CO.CDP.Localization/StaticTextResource.resx index deb2c344d..b3d56dd72 100644 --- a/Services/CO.CDP.Localization/StaticTextResource.resx +++ b/Services/CO.CDP.Localization/StaticTextResource.resx @@ -1,17 +1,17 @@  - From 5029cc993bd3b8a48753d72aea38a74905a0ae31 Mon Sep 17 00:00:00 2001 From: Richard Mohammed Date: Thu, 17 Oct 2024 17:59:20 +0100 Subject: [PATCH 34/42] Applied PR feedback changes. --- .../Registration/JoinOrganisation.cshtml | 32 +++++++++---------- 1 file changed, 15 insertions(+), 17 deletions(-) diff --git a/Frontend/CO.CDP.OrganisationApp/Pages/Registration/JoinOrganisation.cshtml b/Frontend/CO.CDP.OrganisationApp/Pages/Registration/JoinOrganisation.cshtml index 0dd88efb4..767194bdb 100644 --- a/Frontend/CO.CDP.OrganisationApp/Pages/Registration/JoinOrganisation.cshtml +++ b/Frontend/CO.CDP.OrganisationApp/Pages/Registration/JoinOrganisation.cshtml @@ -1,9 +1,9 @@ @page "/registration/{organisationId}/join-organisation" -@using CO.CDP.OrganisationApp.Constants @model JoinOrganisationModel @{ var organisationDetails = Model.OrganisationDetails!; +var userDetails = Model.UserDetails; var joinHasError = ((TagBuilder)Html.ValidationMessageFor(m => m.Join)).HasInnerHtml; } @@ -38,7 +38,7 @@ var joinHasError = ((TagBuilder)Html.ValidationMessageFor(m => m.Join)).HasInner Firstname
-

John

+

@userDetails.FirstName

@@ -46,7 +46,7 @@ var joinHasError = ((TagBuilder)Html.ValidationMessageFor(m => m.Join)).HasInner Lastname
-

Johnson

+

@userDetails.LastName

@@ -54,7 +54,7 @@ var joinHasError = ((TagBuilder)Html.ValidationMessageFor(m => m.Join)).HasInner Email address
-

john@johnson.com

+

@userDetails.Email

@@ -65,9 +65,9 @@ var joinHasError = ((TagBuilder)Html.ValidationMessageFor(m => m.Join)).HasInner
-
-
-

+
+ +

Would you like to join @organisationDetails.Name?

@if (joinHasError) @@ -79,23 +79,21 @@ var joinHasError = ((TagBuilder)Html.ValidationMessageFor(m => m.Join)).HasInner }
- - +
- - +
-

+
-
- - Continue - -
+ + Continue +
From 10c846916b44d8be76b10c2d94b593f36c2b850e Mon Sep 17 00:00:00 2001 From: rmohammed-goaco Date: Thu, 17 Oct 2024 18:16:05 +0100 Subject: [PATCH 35/42] Update Frontend/CO.CDP.OrganisationApp/Pages/Registration/JoinOrganisation.cshtml Co-authored-by: Andy Mantell <134642+andymantell@users.noreply.github.com> --- .../Pages/Registration/JoinOrganisation.cshtml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Frontend/CO.CDP.OrganisationApp/Pages/Registration/JoinOrganisation.cshtml b/Frontend/CO.CDP.OrganisationApp/Pages/Registration/JoinOrganisation.cshtml index 767194bdb..fbefb6498 100644 --- a/Frontend/CO.CDP.OrganisationApp/Pages/Registration/JoinOrganisation.cshtml +++ b/Frontend/CO.CDP.OrganisationApp/Pages/Registration/JoinOrganisation.cshtml @@ -67,8 +67,8 @@ var joinHasError = ((TagBuilder)Html.ValidationMessageFor(m => m.Join)).HasInner
-

- Would you like to join @organisationDetails.Name? +

+ Would you like to join @organisationDetails.Name?

@if (joinHasError) { From 86d335ccaacedd68c3c179565047476723cb7d56 Mon Sep 17 00:00:00 2001 From: rmohammed-goaco Date: Thu, 17 Oct 2024 18:30:00 +0100 Subject: [PATCH 36/42] Apply suggestions from code review Co-authored-by: Andy Mantell <134642+andymantell@users.noreply.github.com> --- .../Pages/Registration/JoinOrganisation.cshtml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Frontend/CO.CDP.OrganisationApp/Pages/Registration/JoinOrganisation.cshtml b/Frontend/CO.CDP.OrganisationApp/Pages/Registration/JoinOrganisation.cshtml index fbefb6498..e203582d6 100644 --- a/Frontend/CO.CDP.OrganisationApp/Pages/Registration/JoinOrganisation.cshtml +++ b/Frontend/CO.CDP.OrganisationApp/Pages/Registration/JoinOrganisation.cshtml @@ -65,7 +65,7 @@ var joinHasError = ((TagBuilder)Html.ValidationMessageFor(m => m.Join)).HasInner
-
+

Would you like to join @organisationDetails.Name? @@ -79,9 +79,9 @@ var joinHasError = ((TagBuilder)Html.ValidationMessageFor(m => m.Join)).HasInner }
- - +
Date: Fri, 18 Oct 2024 09:15:51 +0100 Subject: [PATCH 37/42] Move localization test class mocks into vars in the build http client method --- Frontend/CO.CDP.OrganisationApp.Tests/LocalizationTests.cs | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/Frontend/CO.CDP.OrganisationApp.Tests/LocalizationTests.cs b/Frontend/CO.CDP.OrganisationApp.Tests/LocalizationTests.cs index f29731b9c..182bbb8ab 100644 --- a/Frontend/CO.CDP.OrganisationApp.Tests/LocalizationTests.cs +++ b/Frontend/CO.CDP.OrganisationApp.Tests/LocalizationTests.cs @@ -19,13 +19,10 @@ namespace CO.CDP.OrganisationApp.Tests; public class LocalizationTests { - private static readonly Mock organisationClient = new Mock("https://whatever", new HttpClient()); - private static readonly Mock _mockSession = new Mock(); - private static Guid personId = new Guid("5b0d3aa8-94cd-4ede-ba03-546937035690"); - private static readonly Mock companiesHouseApiMock = new Mock(); - public HttpClient BuildHttpClient() { + Mock _mockSession = new Mock(); + Guid personId = new Guid("5b0d3aa8-94cd-4ede-ba03-546937035690"); var services = new ServiceCollection(); var person = new Person.WebApiClient.Person("a@b.com", "First name", personId, "Last name", null); From 4f7ad212d8c398bf1d7ad0a580c46b15a5116515 Mon Sep 17 00:00:00 2001 From: maciej-goaco Date: Fri, 18 Oct 2024 09:23:49 +0100 Subject: [PATCH 38/42] DP-578 - User Management - New User Validation Check (#774) * DP-578 - Basic implementation * DP-578 - Tests added --- .../Constants/ApiExceptionMapper.cs | 1 + .../Constants/ErrorCodes.cs | 1 + .../Constants/ErrorMessagesList.cs | 1 + .../Pages/Users/UserCheckAnswers.cshtml | 2 +- .../Pages/Users/UserCheckAnswers.cshtml.cs | 5 +- .../InvitePersonToOrganisationUseCaseTest.cs | 37 ++++++++++++++- .../Extensions/ServiceCollectionExtensions.cs | 1 + .../Model/Exceptions.cs | 3 +- .../InvitePersonToOrganisationUseCase.cs | 6 +++ .../DatabaseOrganisationRepositoryTest.cs | 47 +++++++++++++++++++ .../DatabaseOrganisationRepository.cs | 7 +++ .../IOrganisationRepository.cs | 2 + .../Organisation.cs | 2 +- .../OrganisationPerson.cs | 2 +- 14 files changed, 110 insertions(+), 7 deletions(-) diff --git a/Frontend/CO.CDP.OrganisationApp/Constants/ApiExceptionMapper.cs b/Frontend/CO.CDP.OrganisationApp/Constants/ApiExceptionMapper.cs index 53d61b86f..f97853b97 100644 --- a/Frontend/CO.CDP.OrganisationApp/Constants/ApiExceptionMapper.cs +++ b/Frontend/CO.CDP.OrganisationApp/Constants/ApiExceptionMapper.cs @@ -35,6 +35,7 @@ private static string GetErrorMessageByCode(string errorCode) return errorCode switch { ErrorCodes.ORGANISATION_ALREADY_EXISTS => ErrorMessagesList.DuplicateOgranisationName, + ErrorCodes.EMAIL_ALREADY_EXISTS_WITHIN_ORGANISATION => ErrorMessagesList.DuplicatePersonEmail, ErrorCodes.ARGUMENT_NULL => ErrorMessagesList.PayLoadIssueOrNullAurgument, ErrorCodes.INVALID_OPERATION => ErrorMessagesList.OrganisationCreationFailed, ErrorCodes.PERSON_DOES_NOT_EXIST => ErrorMessagesList.PersonNotFound, diff --git a/Frontend/CO.CDP.OrganisationApp/Constants/ErrorCodes.cs b/Frontend/CO.CDP.OrganisationApp/Constants/ErrorCodes.cs index 87578aa3f..019e696c7 100644 --- a/Frontend/CO.CDP.OrganisationApp/Constants/ErrorCodes.cs +++ b/Frontend/CO.CDP.OrganisationApp/Constants/ErrorCodes.cs @@ -19,4 +19,5 @@ public static class ErrorCodes public const string UNKNOWN_BUYER_INFORMATION_UPDATE_TYPE = "UNKNOWN_BUYER_INFORMATION_UPDATE_TYPE"; public const string PERSON_INVITE_ALREADY_CLAIMED = "PERSON_INVITE_ALREADY_CLAIMED"; public const string APIKEY_NAME_ALREADY_EXISTS = "APIKEY_NAME_ALREADY_EXISTS"; + public const string EMAIL_ALREADY_EXISTS_WITHIN_ORGANISATION = "EMAIL_ALREADY_EXISTS_WITHIN_ORGANISATION"; } \ No newline at end of file diff --git a/Frontend/CO.CDP.OrganisationApp/Constants/ErrorMessagesList.cs b/Frontend/CO.CDP.OrganisationApp/Constants/ErrorMessagesList.cs index c06ac2d2c..cf9b13eee 100644 --- a/Frontend/CO.CDP.OrganisationApp/Constants/ErrorMessagesList.cs +++ b/Frontend/CO.CDP.OrganisationApp/Constants/ErrorMessagesList.cs @@ -3,6 +3,7 @@ namespace CO.CDP.OrganisationApp.Constants; public static class ErrorMessagesList { public const string DuplicatePersonName = "A person with this name already exists. Please try again."; + public const string DuplicatePersonEmail = "A user with this email address already exists for your organisation."; public const string PersonNotFound = "The requested person was not found."; public const string PersonCreationFailed = "Adding a person failed, have you provided the correct person details."; diff --git a/Frontend/CO.CDP.OrganisationApp/Pages/Users/UserCheckAnswers.cshtml b/Frontend/CO.CDP.OrganisationApp/Pages/Users/UserCheckAnswers.cshtml index 445b64d6b..27e7cb25d 100644 --- a/Frontend/CO.CDP.OrganisationApp/Pages/Users/UserCheckAnswers.cshtml +++ b/Frontend/CO.CDP.OrganisationApp/Pages/Users/UserCheckAnswers.cshtml @@ -14,7 +14,7 @@
- +

Check your answers

diff --git a/Frontend/CO.CDP.OrganisationApp/Pages/Users/UserCheckAnswers.cshtml.cs b/Frontend/CO.CDP.OrganisationApp/Pages/Users/UserCheckAnswers.cshtml.cs index 4d785de54..fe9bfde70 100644 --- a/Frontend/CO.CDP.OrganisationApp/Pages/Users/UserCheckAnswers.cshtml.cs +++ b/Frontend/CO.CDP.OrganisationApp/Pages/Users/UserCheckAnswers.cshtml.cs @@ -55,9 +55,10 @@ public async Task OnPost() return RedirectToPage("UserSummary", new { Id }); } - catch + catch (ApiException exc) { - throw; + ApiExceptionMapper.MapApiExceptions(exc, ModelState); + return Page(); } finally { diff --git a/Services/CO.CDP.Organisation.WebApi.Tests/UseCase/InvitePersonToOrganisationUseCaseTest.cs b/Services/CO.CDP.Organisation.WebApi.Tests/UseCase/InvitePersonToOrganisationUseCaseTest.cs index 60cafd9ea..3b6589f61 100644 --- a/Services/CO.CDP.Organisation.WebApi.Tests/UseCase/InvitePersonToOrganisationUseCaseTest.cs +++ b/Services/CO.CDP.Organisation.WebApi.Tests/UseCase/InvitePersonToOrganisationUseCaseTest.cs @@ -53,10 +53,12 @@ public async Task Execute_ValidOrganisationAndInvite_SuccessfullySendsInvite() var command = (organisationId, invitePersonData); - _organisationRepository.Setup(repo => repo.Find(organisationId)) .ReturnsAsync(organisation); + _organisationRepository.Setup(repo => repo.IsEmailUniqueWithinOrganisation(organisationId, invitePersonData.Email)) + .ReturnsAsync(true); + _mockGovUKNotifyApiClient.Setup(client => client.SendEmail(It.IsAny())); var result = await _useCase.Execute(command); @@ -72,6 +74,39 @@ public async Task Execute_ValidOrganisationAndInvite_SuccessfullySendsInvite() _mockGovUKNotifyApiClient.Verify(client => client.SendEmail(It.IsAny()), Times.Once); } + [Fact] + public async Task Execute_ValidOrganisationInviteWithDuplicateEmail_ThrowsException() + { + var organisationId = Guid.NewGuid(); + InvitePersonToOrganisation invitePersonData = CreateDummyInviteToPerson(); + + var organisation = new Persistence.Organisation + { + Guid = organisationId, + Name = "Test Organisation", + Tenant = It.IsAny() + }; + + var command = (organisationId, invitePersonData); + + _organisationRepository.Setup(repo => repo.Find(organisationId)) + .ReturnsAsync(organisation); + + _organisationRepository.Setup(repo => repo.IsEmailUniqueWithinOrganisation(organisationId, invitePersonData.Email)) + .ReturnsAsync(false); + + _mockGovUKNotifyApiClient.Setup(client => client.SendEmail(It.IsAny())); + + var result = async () => await _useCase.Execute(command); + + await result.Should().ThrowAsync(); + + _organisationRepository.Verify(repo => repo.Find(organisationId), Times.Once); + _organisationRepository.Verify(repo => repo.IsEmailUniqueWithinOrganisation(organisationId, invitePersonData.Email), Times.Once); + _personsInviteRepository.Verify(repo => repo.Save(It.IsAny()), Times.Never); + _mockGovUKNotifyApiClient.Verify(client => client.SendEmail(It.IsAny()), Times.Never); + } + [Fact] public async Task Execute_UnknownOrganisation_ThrowsUnknownOrganisationException() { diff --git a/Services/CO.CDP.Organisation.WebApi/Extensions/ServiceCollectionExtensions.cs b/Services/CO.CDP.Organisation.WebApi/Extensions/ServiceCollectionExtensions.cs index b91a82638..3ed48a701 100644 --- a/Services/CO.CDP.Organisation.WebApi/Extensions/ServiceCollectionExtensions.cs +++ b/Services/CO.CDP.Organisation.WebApi/Extensions/ServiceCollectionExtensions.cs @@ -21,6 +21,7 @@ public static class ServiceCollectionExtensions { typeof(InvalidUpdateSupplierInformationCommand), (StatusCodes.Status400BadRequest, "INVALID_SUPPLIER_INFORMATION_UPDATE_ENTITY") }, { typeof(InvalidQueryException), (StatusCodes.Status400BadRequest, "ISSUE_WITH_QUERY_PARAMETERS") }, { typeof(DuplicateAuthenticationKeyNameException), (StatusCodes.Status400BadRequest, "APIKEY_NAME_ALREADY_EXISTS") }, + { typeof(DuplicateEmailWithinOrganisationException), (StatusCodes.Status400BadRequest, "EMAIL_ALREADY_EXISTS_WITHIN_ORGANISATION") } }; public static IServiceCollection AddOrganisationProblemDetails(this IServiceCollection services) diff --git a/Services/CO.CDP.Organisation.WebApi/Model/Exceptions.cs b/Services/CO.CDP.Organisation.WebApi/Model/Exceptions.cs index 773ebb5cd..d216cb0b0 100644 --- a/Services/CO.CDP.Organisation.WebApi/Model/Exceptions.cs +++ b/Services/CO.CDP.Organisation.WebApi/Model/Exceptions.cs @@ -18,4 +18,5 @@ public class MissingOrganisationIdException(string message, Exception? cause = n public class EmptyAuthenticationKeyNameException(string message, Exception? cause = null) : Exception(message, cause); public class UnknownAuthenticationKeyException(string message, Exception? cause = null) : Exception(message, cause); -public class InvalidSupportUpdateOrganisationCommand(string message, Exception? cause = null) : Exception(message, cause); \ No newline at end of file +public class InvalidSupportUpdateOrganisationCommand(string message, Exception? cause = null) : Exception(message, cause); +public class DuplicateEmailWithinOrganisationException(string message, Exception? cause = null) : Exception(message, cause); \ No newline at end of file diff --git a/Services/CO.CDP.Organisation.WebApi/UseCase/InvitePersonToOrganisationUseCase.cs b/Services/CO.CDP.Organisation.WebApi/UseCase/InvitePersonToOrganisationUseCase.cs index cd0226f91..4cb4bb26b 100644 --- a/Services/CO.CDP.Organisation.WebApi/UseCase/InvitePersonToOrganisationUseCase.cs +++ b/Services/CO.CDP.Organisation.WebApi/UseCase/InvitePersonToOrganisationUseCase.cs @@ -27,6 +27,12 @@ public async Task Execute((Guid organisationId, InvitePersonToOrga var organisation = await organisationRepository.Find(command.organisationId) ?? throw new UnknownOrganisationException($"Unknown organisation {command.organisationId}."); + var isEmailUnique = await organisationRepository.IsEmailUniqueWithinOrganisation(command.organisationId, command.invitePersonData.Email); + if (!isEmailUnique) + { + throw new DuplicateEmailWithinOrganisationException($"A user with this email address already exists for your organisation."); + } + var personInvite = CreatePersonInvite(command.invitePersonData, organisation); personInviteRepository.Save(personInvite); diff --git a/Services/CO.CDP.OrganisationInformation.Persistence.Tests/DatabaseOrganisationRepositoryTest.cs b/Services/CO.CDP.OrganisationInformation.Persistence.Tests/DatabaseOrganisationRepositoryTest.cs index e6c2d3968..0a67480d1 100644 --- a/Services/CO.CDP.OrganisationInformation.Persistence.Tests/DatabaseOrganisationRepositoryTest.cs +++ b/Services/CO.CDP.OrganisationInformation.Persistence.Tests/DatabaseOrganisationRepositoryTest.cs @@ -540,6 +540,53 @@ public async Task GetOperationTypes_WhenOperationTypeExists_ReturnsEmptyList() result.Should().Contain(OperationType.SmallOrMediumSized); } + [Fact] + public async Task IsEmailUniqueWithinOrganisation_WhenDoesNotExist_ReturnsTrue() + { + using var repository = OrganisationRepository(); + + var organisation = GivenOrganisation(); + organisation.OrganisationPersons = []; + var personEmail = "john.doe@example.com"; + + await using var context = postgreSql.OrganisationInformationContext(); + await context.Organisations.AddAsync(organisation); + await context.SaveChangesAsync(); + + var result = await repository.IsEmailUniqueWithinOrganisation(organisation.Guid, personEmail); + + result.Should().Be(true); + } + + [Fact] + public async Task IsEmailUniqueWithinOrganisation_WhenDoesExist_ReturnsFalse() + { + using var repository = OrganisationRepository(); + + var organisation = GivenOrganisation(); + + var organisationPerson = new OrganisationPerson() + { + Organisation = organisation, + Person = new Person + { + FirstName = "John", + LastName = "Doe", + Email = "john.doe@example.com", + Guid = Guid.NewGuid() + } + }; + organisation.OrganisationPersons.Add(organisationPerson); + + await using var context = postgreSql.OrganisationInformationContext(); + await context.Organisations.AddAsync(organisation); + await context.SaveChangesAsync(); + + var result = await repository.IsEmailUniqueWithinOrganisation(organisation.Guid, organisationPerson.Person.Email); + + result.Should().Be(false); + } + private IOrganisationRepository OrganisationRepository(OrganisationInformationContext? context = null) { return new DatabaseOrganisationRepository(context ?? postgreSql.OrganisationInformationContext()); diff --git a/Services/CO.CDP.OrganisationInformation.Persistence/DatabaseOrganisationRepository.cs b/Services/CO.CDP.OrganisationInformation.Persistence/DatabaseOrganisationRepository.cs index b5085ea65..5765dec18 100644 --- a/Services/CO.CDP.OrganisationInformation.Persistence/DatabaseOrganisationRepository.cs +++ b/Services/CO.CDP.OrganisationInformation.Persistence/DatabaseOrganisationRepository.cs @@ -139,6 +139,13 @@ public async Task> GetOperationTypes(int organisationId) return organisation?.SupplierInfo?.OperationTypes ?? []; } + public async Task IsEmailUniqueWithinOrganisation(Guid organisationId, string email) + { + return await context.Organisations + .Where(x => x.Guid == organisationId) + .AnyAsync(x => !x.Persons.Any(y => y.Email == email)); + } + public void Save(Organisation organisation) { try diff --git a/Services/CO.CDP.OrganisationInformation.Persistence/IOrganisationRepository.cs b/Services/CO.CDP.OrganisationInformation.Persistence/IOrganisationRepository.cs index b830327f2..2ac23d0dd 100644 --- a/Services/CO.CDP.OrganisationInformation.Persistence/IOrganisationRepository.cs +++ b/Services/CO.CDP.OrganisationInformation.Persistence/IOrganisationRepository.cs @@ -36,4 +36,6 @@ public class DuplicateOrganisationException(string message, Exception? cause = n public Task GetLegalForm(int organisationId); public Task> GetOperationTypes(int organisationId); + + public Task IsEmailUniqueWithinOrganisation(Guid organisationId, string email); } \ No newline at end of file diff --git a/Services/CO.CDP.OrganisationInformation.Persistence/Organisation.cs b/Services/CO.CDP.OrganisationInformation.Persistence/Organisation.cs index 40d3fcc89..ac51ff71f 100644 --- a/Services/CO.CDP.OrganisationInformation.Persistence/Organisation.cs +++ b/Services/CO.CDP.OrganisationInformation.Persistence/Organisation.cs @@ -17,7 +17,7 @@ public class Organisation : IEntityDate public ICollection ContactPoints { get; set; } = []; public List Roles { get; set; } = []; public List Persons => OrganisationPersons.Select(p => p.Person).ToList(); - public List OrganisationPersons { get; init; } = []; + public List OrganisationPersons { get; set; } = []; public SupplierInformation? SupplierInfo { get; set; } public BuyerInformation? BuyerInfo { get; set; } public DateTimeOffset CreatedOn { get; set; } diff --git a/Services/CO.CDP.OrganisationInformation.Persistence/OrganisationPerson.cs b/Services/CO.CDP.OrganisationInformation.Persistence/OrganisationPerson.cs index 90f20003c..2d852a98e 100644 --- a/Services/CO.CDP.OrganisationInformation.Persistence/OrganisationPerson.cs +++ b/Services/CO.CDP.OrganisationInformation.Persistence/OrganisationPerson.cs @@ -5,7 +5,7 @@ namespace CO.CDP.OrganisationInformation.Persistence; public class OrganisationPerson : IEntityDate { public int PersonId { get; set; } - public required Person Person { get; init; } + public required Person Person { get; set; } public int OrganisationId { get; set; } public required Organisation Organisation { get; init; } public List Scopes { get; set; } = []; From 3fc275a469e0dd6b1507fc1737dc6e73c63ddc3d Mon Sep 17 00:00:00 2001 From: Dharmendra Verma <64859911+dharmverma@users.noreply.github.com> Date: Fri, 18 Oct 2024 10:17:00 +0100 Subject: [PATCH 39/42] Common Header - Integration related (#777) --- .../Pages/Shared/_Layout.cshtml | 59 +++++++++++-------- 1 file changed, 34 insertions(+), 25 deletions(-) diff --git a/Frontend/CO.CDP.OrganisationApp/Pages/Shared/_Layout.cshtml b/Frontend/CO.CDP.OrganisationApp/Pages/Shared/_Layout.cshtml index ad40518a7..c4bc9281f 100644 --- a/Frontend/CO.CDP.OrganisationApp/Pages/Shared/_Layout.cshtml +++ b/Frontend/CO.CDP.OrganisationApp/Pages/Shared/_Layout.cshtml @@ -25,6 +25,12 @@ Central Digital Platform - GOV.UK + +@{ + var ftsService = config["FtsService"] ?? ""; + ftsService = ftsService.EndsWith("/") ? ftsService.TrimEnd(new Char[] { '/' }) : ftsService; +} + @@ -48,8 +54,8 @@
- - SIRSI + + Find a Tender
From 89b55f8b7f596d4135da9c853c51645569111e1f Mon Sep 17 00:00:00 2001 From: Andy Mantell <134642+andymantell@users.noreply.github.com> Date: Fri, 18 Oct 2024 11:55:12 +0100 Subject: [PATCH 40/42] Make language switcher match FTS --- .../Pages/Shared/LanguageSwitcher.cshtml | 12 +- .../Pages/Shared/_Layout.cshtml | 111 +++++++++--------- .../wwwroot/css/site.css | 32 +++-- 3 files changed, 86 insertions(+), 69 deletions(-) diff --git a/Frontend/CO.CDP.OrganisationApp/Pages/Shared/LanguageSwitcher.cshtml b/Frontend/CO.CDP.OrganisationApp/Pages/Shared/LanguageSwitcher.cshtml index cf3b56987..1672ccfb0 100644 --- a/Frontend/CO.CDP.OrganisationApp/Pages/Shared/LanguageSwitcher.cshtml +++ b/Frontend/CO.CDP.OrganisationApp/Pages/Shared/LanguageSwitcher.cshtml @@ -10,13 +10,13 @@ {
- - Find a Tender - - +
+

@@ -131,8 +138,6 @@

- - @* Replicates the BeforeContent region in the base govuk-frontend template *@ @* This is useful for things like back links, breadcrumbs etc which should not be rendered @* inside the
element and, crucially, should appear before the flash messages below *@ diff --git a/Frontend/CO.CDP.OrganisationApp/wwwroot/css/site.css b/Frontend/CO.CDP.OrganisationApp/wwwroot/css/site.css index 98f3ec65e..fceaee771 100644 --- a/Frontend/CO.CDP.OrganisationApp/wwwroot/css/site.css +++ b/Frontend/CO.CDP.OrganisationApp/wwwroot/css/site.css @@ -19,26 +19,33 @@ } /** - * Language switcher, adapted from hmrc-frontend + * Custom header layout to allow for language switcher +*/ +@media screen and (min-width: 768px) { + .app-header-layout { + display: flex; + justify-content: space-between; + flex-direction: row-reverse; + } +} + +/** + * Language switcher, adapted from hmrc-frontend to roughly match FTS */ .app-language-select { margin: 0; -} - -.app-language-select::after { - /* content: ""; - display: block; - clear: both;*/ + float: right; } .app-language-select__list { - margin-top: 10px; float: right; - text-align: right; + margin: 0; } .app-language-select__list-item { display: inline-block; + margin-right: 0; + border-bottom: 0; } .app-language-select__list-item:first-child::after { @@ -47,10 +54,15 @@ position: relative; top: 0.1875em; height: 1em; - border-right: 0.09375em solid #0b0c0c; + border-right: 0.09375em solid #b1b4b6; } .app-language-select__list-item a, .app-language-select__list-item [aria-current] { padding: 0.3125em; + } + + .app-language-select__list-item [aria-current] { + color: #b1b4b6; + font-weight: 700; } \ No newline at end of file From e5e8165de7433ed1100b184fc601e474006459b8 Mon Sep 17 00:00:00 2001 From: Andy Mantell <134642+andymantell@users.noreply.github.com> Date: Fri, 18 Oct 2024 14:21:11 +0100 Subject: [PATCH 41/42] Update govuk-frontend to version 5.7.1 --- .../wwwroot/assets/images/govuk-crest-2x.png | Bin 8884 -> 0 bytes .../wwwroot/assets/images/govuk-crest.png | Bin 3584 -> 0 bytes .../wwwroot/assets/images/govuk-crest.svg | 1 + .../wwwroot/css/govuk-frontend-5.4.1.min.css | 3 --- .../wwwroot/css/govuk-frontend-5.4.1.min.css.map | 1 - .../wwwroot/css/govuk-frontend-5.7.1.min.css | 3 +++ .../wwwroot/css/govuk-frontend-5.7.1.min.css.map | 1 + .../wwwroot/js/govuk-frontend-5.4.1.min.js | 1 - .../wwwroot/js/govuk-frontend-5.4.1.min.js.map | 1 - .../wwwroot/js/govuk-frontend-5.7.1.min.js | 1 + .../wwwroot/js/govuk-frontend-5.7.1.min.js.map | 1 + 11 files changed, 7 insertions(+), 6 deletions(-) delete mode 100644 Frontend/CO.CDP.OrganisationApp/wwwroot/assets/images/govuk-crest-2x.png delete mode 100644 Frontend/CO.CDP.OrganisationApp/wwwroot/assets/images/govuk-crest.png create mode 100644 Frontend/CO.CDP.OrganisationApp/wwwroot/assets/images/govuk-crest.svg delete mode 100644 Frontend/CO.CDP.OrganisationApp/wwwroot/css/govuk-frontend-5.4.1.min.css delete mode 100644 Frontend/CO.CDP.OrganisationApp/wwwroot/css/govuk-frontend-5.4.1.min.css.map create mode 100644 Frontend/CO.CDP.OrganisationApp/wwwroot/css/govuk-frontend-5.7.1.min.css create mode 100644 Frontend/CO.CDP.OrganisationApp/wwwroot/css/govuk-frontend-5.7.1.min.css.map delete mode 100644 Frontend/CO.CDP.OrganisationApp/wwwroot/js/govuk-frontend-5.4.1.min.js delete mode 100644 Frontend/CO.CDP.OrganisationApp/wwwroot/js/govuk-frontend-5.4.1.min.js.map create mode 100644 Frontend/CO.CDP.OrganisationApp/wwwroot/js/govuk-frontend-5.7.1.min.js create mode 100644 Frontend/CO.CDP.OrganisationApp/wwwroot/js/govuk-frontend-5.7.1.min.js.map diff --git a/Frontend/CO.CDP.OrganisationApp/wwwroot/assets/images/govuk-crest-2x.png b/Frontend/CO.CDP.OrganisationApp/wwwroot/assets/images/govuk-crest-2x.png deleted file mode 100644 index 78e751cc20fa7da9b2f13f3dda9a40299817fb2c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8884 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 diff --git a/Frontend/CO.CDP.OrganisationApp/wwwroot/assets/images/govuk-crest.png b/Frontend/CO.CDP.OrganisationApp/wwwroot/assets/images/govuk-crest.png deleted file mode 100644 index bed4efe418aa66b19004c048d4ee232004ee802f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3584 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 diff --git a/Frontend/CO.CDP.OrganisationApp/wwwroot/assets/images/govuk-crest.svg b/Frontend/CO.CDP.OrganisationApp/wwwroot/assets/images/govuk-crest.svg new file mode 100644 index 000000000..db3e20ab9 --- /dev/null +++ b/Frontend/CO.CDP.OrganisationApp/wwwroot/assets/images/govuk-crest.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/Frontend/CO.CDP.OrganisationApp/wwwroot/css/govuk-frontend-5.4.1.min.css b/Frontend/CO.CDP.OrganisationApp/wwwroot/css/govuk-frontend-5.4.1.min.css deleted file mode 100644 index 86666b7cb..000000000 --- a/Frontend/CO.CDP.OrganisationApp/wwwroot/css/govuk-frontend-5.4.1.min.css +++ /dev/null @@ -1,3 +0,0 @@ -@charset "UTF-8";:root{--govuk-frontend-version:"5.4.1";--govuk-frontend-breakpoint-mobile:20rem;--govuk-frontend-breakpoint-tablet:40.0625rem;--govuk-frontend-breakpoint-desktop:48.0625rem}.govuk-link{font-family:GDS Transport,arial,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-decoration:underline;text-decoration-thickness:max(1px,.0625rem);text-underline-offset:.1578em} -/*! Copyright (c) 2011 by Margaret Calvert & Henrik Kubel. All rights reserved. The font has been customised for exclusive use on gov.uk. This cut is not commercially available. */@font-face{font-family:GDS Transport;font-style:normal;font-weight:400;src:url(/assets/fonts/light-94a07e06a1-v2.woff2) format("woff2"),url(/assets/fonts/light-f591b13f7d-v2.woff) format("woff");font-display:fallback}@font-face{font-family:GDS Transport;font-style:normal;font-weight:700;src:url(/assets/fonts/bold-b542beb274-v2.woff2) format("woff2"),url(/assets/fonts/bold-affa96571d-v2.woff) format("woff");font-display:fallback}@media print{.govuk-link{font-family:sans-serif}}.govuk-link:hover{text-decoration-thickness:max(3px,.1875rem,.12em);-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none;-webkit-text-decoration-skip:none;text-decoration-skip:none}.govuk-link:focus{outline:3px solid transparent;background-color:#fd0;box-shadow:0 -2px #fd0,0 4px #0b0c0c;text-decoration:none;-webkit-box-decoration-break:clone;box-decoration-break:clone}.govuk-link:link{color:#1d70b8}.govuk-link:visited{color:#4c2c92}.govuk-link:hover{color:#003078}.govuk-link:active,.govuk-link:focus{color:#0b0c0c}@media print{[href^="/"].govuk-link:after,[href^="http://"].govuk-link:after,[href^="https://"].govuk-link:after{content:" (" attr(href) ")";font-size:90%;word-wrap:break-word}}.govuk-link--muted:link,.govuk-link--muted:visited{color:#505a5f}.govuk-link--muted:active,.govuk-link--muted:focus,.govuk-link--muted:hover,.govuk-link--text-colour:link,.govuk-link--text-colour:visited{color:#0b0c0c}@media print{.govuk-link--text-colour:link,.govuk-link--text-colour:visited{color:#000}}.govuk-link--text-colour:hover{color:rgba(11,12,12,.99)}.govuk-link--text-colour:active,.govuk-link--text-colour:focus{color:#0b0c0c}@media print{.govuk-link--text-colour:active,.govuk-link--text-colour:focus{color:#000}}.govuk-link--inverse:link,.govuk-link--inverse:visited{color:#fff}.govuk-link--inverse:active,.govuk-link--inverse:hover{color:hsla(0,0%,100%,.99)}.govuk-link--inverse:focus{color:#0b0c0c}.govuk-link--no-underline:not(:hover):not(:active){text-decoration:none}.govuk-link--no-visited-state:link,.govuk-link--no-visited-state:visited{color:#1d70b8}.govuk-link--no-visited-state:hover{color:#003078}.govuk-link--no-visited-state:active,.govuk-link--no-visited-state:focus{color:#0b0c0c}.govuk-link-image{display:inline-block;line-height:0;text-decoration:none}.govuk-link-image:focus{outline:3px solid transparent;box-shadow:0 0 0 4px #fd0,0 0 0 8px #0b0c0c}.govuk-list{font-family:GDS Transport,arial,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-weight:400;font-size:1rem;line-height:1.25;color:#0b0c0c;margin-top:0;margin-bottom:15px;padding-left:0;list-style-type:none}@media print{.govuk-list{font-family:sans-serif}}@media (min-width:40.0625em){.govuk-list{font-size:1.1875rem;line-height:1.3157894737}}@media print{.govuk-list{font-size:14pt;line-height:1.15;color:#000}}@media (min-width:40.0625em){.govuk-list{margin-bottom:20px}}.govuk-list .govuk-list{margin-top:10px}.govuk-list>li{margin-bottom:5px}.govuk-list--bullet{padding-left:20px;list-style-type:disc}.govuk-list--number{padding-left:20px;list-style-type:decimal}.govuk-list--bullet>li,.govuk-list--number>li{margin-bottom:0}@media (min-width:40.0625em){.govuk-list--bullet>li,.govuk-list--number>li{margin-bottom:5px}}.govuk-list--spaced>li{margin-bottom:10px}@media (min-width:40.0625em){.govuk-list--spaced>li{margin-bottom:15px}}.govuk-heading-xl{color:#0b0c0c;font-family:GDS Transport,arial,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-weight:700;font-size:2rem;line-height:1.09375;display:block;margin-top:0;margin-bottom:30px}@media print{.govuk-heading-xl{color:#000;font-family:sans-serif}}@media (min-width:40.0625em){.govuk-heading-xl{font-size:3rem;line-height:1.0416666667}}@media print{.govuk-heading-xl{font-size:32pt;line-height:1.15}}@media (min-width:40.0625em){.govuk-heading-xl{margin-bottom:50px}}.govuk-heading-l{color:#0b0c0c;font-family:GDS Transport,arial,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-weight:700;font-size:1.5rem;line-height:1.0416666667;display:block;margin-top:0;margin-bottom:20px}@media print{.govuk-heading-l{color:#000;font-family:sans-serif}}@media (min-width:40.0625em){.govuk-heading-l{font-size:2.25rem;line-height:1.1111111111}}@media print{.govuk-heading-l{font-size:24pt;line-height:1.05}}@media (min-width:40.0625em){.govuk-heading-l{margin-bottom:30px}}.govuk-heading-m{color:#0b0c0c;font-family:GDS Transport,arial,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-weight:700;font-size:1.125rem;line-height:1.1111111111;display:block;margin-top:0;margin-bottom:15px}@media print{.govuk-heading-m{color:#000;font-family:sans-serif}}@media (min-width:40.0625em){.govuk-heading-m{font-size:1.5rem;line-height:1.25}}@media print{.govuk-heading-m{font-size:18pt;line-height:1.15}}@media (min-width:40.0625em){.govuk-heading-m{margin-bottom:20px}}.govuk-heading-s{color:#0b0c0c;font-family:GDS Transport,arial,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-weight:700;font-size:1rem;line-height:1.25;display:block;margin-top:0;margin-bottom:15px}@media print{.govuk-heading-s{color:#000;font-family:sans-serif}}@media (min-width:40.0625em){.govuk-heading-s{font-size:1.1875rem;line-height:1.3157894737}}@media print{.govuk-heading-s{font-size:14pt;line-height:1.15}}@media (min-width:40.0625em){.govuk-heading-s{margin-bottom:20px}}.govuk-caption-xl{font-family:GDS Transport,arial,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-weight:400;font-size:1.125rem;line-height:1.1111111111;display:block;margin-bottom:5px;color:#505a5f}@media print{.govuk-caption-xl{font-family:sans-serif}}@media (min-width:40.0625em){.govuk-caption-xl{font-size:1.6875rem;line-height:1.1111111111}}@media print{.govuk-caption-xl{font-size:18pt;line-height:1.15}}.govuk-caption-l{font-family:GDS Transport,arial,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-weight:400;font-size:1.125rem;line-height:1.1111111111;display:block;margin-bottom:5px;color:#505a5f}@media print{.govuk-caption-l{font-family:sans-serif}}@media (min-width:40.0625em){.govuk-caption-l{font-size:1.5rem;line-height:1.25}}@media print{.govuk-caption-l{font-size:18pt;line-height:1.15}}@media (min-width:40.0625em){.govuk-caption-l{margin-bottom:0}}.govuk-caption-m{font-family:GDS Transport,arial,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-weight:400;font-size:1rem;line-height:1.25;display:block;color:#505a5f}@media print{.govuk-caption-m{font-family:sans-serif}}@media (min-width:40.0625em){.govuk-caption-m{font-size:1.1875rem;line-height:1.3157894737}}@media print{.govuk-caption-m{font-size:14pt;line-height:1.15}}.govuk-body-l,.govuk-body-lead{color:#0b0c0c;font-family:GDS Transport,arial,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-weight:400;font-size:1.125rem;line-height:1.1111111111;margin-top:0;margin-bottom:20px}@media print{.govuk-body-l,.govuk-body-lead{color:#000;font-family:sans-serif}}@media (min-width:40.0625em){.govuk-body-l,.govuk-body-lead{font-size:1.5rem;line-height:1.25}}@media print{.govuk-body-l,.govuk-body-lead{font-size:18pt;line-height:1.15}}@media (min-width:40.0625em){.govuk-body-l,.govuk-body-lead{margin-bottom:30px}}.govuk-body,.govuk-body-m{color:#0b0c0c;font-family:GDS Transport,arial,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-weight:400;font-size:1rem;line-height:1.25;margin-top:0;margin-bottom:15px}@media print{.govuk-body,.govuk-body-m{color:#000;font-family:sans-serif}}@media (min-width:40.0625em){.govuk-body,.govuk-body-m{font-size:1.1875rem;line-height:1.3157894737}}@media print{.govuk-body,.govuk-body-m{font-size:14pt;line-height:1.15}}@media (min-width:40.0625em){.govuk-body,.govuk-body-m{margin-bottom:20px}}.govuk-body-s{color:#0b0c0c;font-family:GDS Transport,arial,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-weight:400;font-size:.875rem;line-height:1.1428571429;margin-top:0;margin-bottom:15px}@media print{.govuk-body-s{color:#000;font-family:sans-serif}}@media (min-width:40.0625em){.govuk-body-s{font-size:1rem;line-height:1.25}}@media print{.govuk-body-s{font-size:14pt;line-height:1.2}}@media (min-width:40.0625em){.govuk-body-s{margin-bottom:20px}}.govuk-body-xs{color:#0b0c0c;font-family:GDS Transport,arial,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-weight:400;font-size:.75rem;line-height:1.25;margin-top:0;margin-bottom:15px}@media print{.govuk-body-xs{color:#000;font-family:sans-serif}}@media (min-width:40.0625em){.govuk-body-xs{font-size:.875rem;line-height:1.4285714286}}@media print{.govuk-body-xs{font-size:12pt;line-height:1.2}}@media (min-width:40.0625em){.govuk-body-xs{margin-bottom:20px}}.govuk-body-l+.govuk-heading-l,.govuk-body-lead+.govuk-heading-l{padding-top:5px}@media (min-width:40.0625em){.govuk-body-l+.govuk-heading-l,.govuk-body-lead+.govuk-heading-l{padding-top:10px}}.govuk-body+.govuk-heading-l,.govuk-body-m+.govuk-heading-l,.govuk-body-s+.govuk-heading-l,.govuk-list+.govuk-heading-l{padding-top:15px}@media (min-width:40.0625em){.govuk-body+.govuk-heading-l,.govuk-body-m+.govuk-heading-l,.govuk-body-s+.govuk-heading-l,.govuk-list+.govuk-heading-l{padding-top:20px}}.govuk-body+.govuk-heading-m,.govuk-body+.govuk-heading-s,.govuk-body-m+.govuk-heading-m,.govuk-body-m+.govuk-heading-s,.govuk-body-s+.govuk-heading-m,.govuk-body-s+.govuk-heading-s,.govuk-list+.govuk-heading-m,.govuk-list+.govuk-heading-s{padding-top:5px}@media (min-width:40.0625em){.govuk-body+.govuk-heading-m,.govuk-body+.govuk-heading-s,.govuk-body-m+.govuk-heading-m,.govuk-body-m+.govuk-heading-s,.govuk-body-s+.govuk-heading-m,.govuk-body-s+.govuk-heading-s,.govuk-list+.govuk-heading-m,.govuk-list+.govuk-heading-s{padding-top:10px}}.govuk-section-break{margin:0;border:0}.govuk-section-break--xl{margin-top:30px;margin-bottom:30px}@media (min-width:40.0625em){.govuk-section-break--xl{margin-top:50px;margin-bottom:50px}}.govuk-section-break--l{margin-top:20px;margin-bottom:20px}@media (min-width:40.0625em){.govuk-section-break--l{margin-top:30px;margin-bottom:30px}}.govuk-section-break--m{margin-top:15px;margin-bottom:15px}@media (min-width:40.0625em){.govuk-section-break--m{margin-top:20px;margin-bottom:20px}}.govuk-section-break--visible{border-bottom:1px solid #b1b4b6}.govuk-button-group{margin-bottom:5px;display:flex;flex-direction:column;align-items:center}@media (min-width:40.0625em){.govuk-button-group{margin-bottom:15px}}.govuk-button-group .govuk-link{font-family:GDS Transport,arial,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-weight:400;font-size:1rem;line-height:1.1875;display:inline-block;max-width:100%;margin-top:5px;margin-bottom:20px;text-align:center}@media print{.govuk-button-group .govuk-link{font-family:sans-serif}}@media (min-width:40.0625em){.govuk-button-group .govuk-link{font-size:1.1875rem;line-height:1}}@media print{.govuk-button-group .govuk-link{font-size:14pt;line-height:19px}}.govuk-button-group .govuk-button{margin-bottom:17px}@media (min-width:40.0625em){.govuk-button-group{margin-right:-15px;flex-direction:row;flex-wrap:wrap;align-items:baseline}.govuk-button-group .govuk-button,.govuk-button-group .govuk-link{margin-right:15px}.govuk-button-group .govuk-link{text-align:left}}.govuk-form-group{margin-bottom:20px}.govuk-form-group:after{content:"";display:block;clear:both}@media (min-width:40.0625em){.govuk-form-group{margin-bottom:30px}}.govuk-form-group .govuk-form-group:last-of-type{margin-bottom:0}.govuk-form-group--error{padding-left:15px;border-left:5px solid #d4351c}.govuk-form-group--error .govuk-form-group{padding:0;border:0}.govuk-grid-row{margin-right:-15px;margin-left:-15px}.govuk-grid-row:after{content:"";display:block;clear:both}.govuk-grid-column-one-quarter{box-sizing:border-box;width:100%;padding:0 15px}@media (min-width:40.0625em){.govuk-grid-column-one-quarter{width:25%;float:left}}.govuk-grid-column-one-third{box-sizing:border-box;width:100%;padding:0 15px}@media (min-width:40.0625em){.govuk-grid-column-one-third{width:33.3333333333%;float:left}}.govuk-grid-column-one-half{box-sizing:border-box;width:100%;padding:0 15px}@media (min-width:40.0625em){.govuk-grid-column-one-half{width:50%;float:left}}.govuk-grid-column-two-thirds{box-sizing:border-box;width:100%;padding:0 15px}@media (min-width:40.0625em){.govuk-grid-column-two-thirds{width:66.6666666667%;float:left}}.govuk-grid-column-three-quarters{box-sizing:border-box;width:100%;padding:0 15px}@media (min-width:40.0625em){.govuk-grid-column-three-quarters{width:75%;float:left}}.govuk-grid-column-full{box-sizing:border-box;width:100%;padding:0 15px}@media (min-width:40.0625em){.govuk-grid-column-full{width:100%;float:left}}.govuk-grid-column-one-quarter-from-desktop{box-sizing:border-box;padding:0 15px}@media (min-width:48.0625em){.govuk-grid-column-one-quarter-from-desktop{width:25%;float:left}}.govuk-grid-column-one-third-from-desktop{box-sizing:border-box;padding:0 15px}@media (min-width:48.0625em){.govuk-grid-column-one-third-from-desktop{width:33.3333333333%;float:left}}.govuk-grid-column-one-half-from-desktop{box-sizing:border-box;padding:0 15px}@media (min-width:48.0625em){.govuk-grid-column-one-half-from-desktop{width:50%;float:left}}.govuk-grid-column-two-thirds-from-desktop{box-sizing:border-box;padding:0 15px}@media (min-width:48.0625em){.govuk-grid-column-two-thirds-from-desktop{width:66.6666666667%;float:left}}.govuk-grid-column-three-quarters-from-desktop{box-sizing:border-box;padding:0 15px}@media (min-width:48.0625em){.govuk-grid-column-three-quarters-from-desktop{width:75%;float:left}}.govuk-grid-column-full-from-desktop{box-sizing:border-box;padding:0 15px}@media (min-width:48.0625em){.govuk-grid-column-full-from-desktop{width:100%;float:left}}.govuk-main-wrapper{display:block;padding-top:20px;padding-bottom:20px}@media (min-width:40.0625em){.govuk-main-wrapper{padding-top:40px;padding-bottom:40px}}.govuk-main-wrapper--auto-spacing:first-child,.govuk-main-wrapper--l{padding-top:30px}@media (min-width:40.0625em){.govuk-main-wrapper--auto-spacing:first-child,.govuk-main-wrapper--l{padding-top:50px}}.govuk-template{background-color:#f3f2f1;-webkit-text-size-adjust:100%;-moz-text-size-adjust:100%;text-size-adjust:100%}@supports ((position:-webkit-sticky) or (position:sticky)){.govuk-template{scroll-padding-top:60px}.govuk-template:not(:has(.govuk-exit-this-page)){scroll-padding-top:0}}@media screen{.govuk-template{overflow-y:scroll}}.govuk-template__body{margin:0;background-color:#fff}.govuk-width-container{max-width:960px;margin-right:15px;margin-left:15px}@supports (margin:max(calc(0px))){.govuk-width-container{margin-right:max(15px,calc(15px + env(safe-area-inset-right)));margin-left:max(15px,calc(15px + env(safe-area-inset-left)))}}@media (min-width:40.0625em){.govuk-width-container{margin-right:30px;margin-left:30px}@supports (margin:max(calc(0px))){.govuk-width-container{margin-right:max(30px,calc(15px + env(safe-area-inset-right)));margin-left:max(30px,calc(15px + env(safe-area-inset-left)))}}}@media (min-width:1020px){.govuk-width-container{margin-right:auto;margin-left:auto}@supports (margin:max(calc(0px))){.govuk-width-container{margin-right:auto;margin-left:auto}}}.govuk-accordion{margin-bottom:20px}@media (min-width:40.0625em){.govuk-accordion{margin-bottom:30px}}.govuk-accordion__section{padding-top:15px}.govuk-accordion__section-heading{margin-top:0;margin-bottom:0;padding-top:15px;padding-bottom:15px}.govuk-accordion__section-button{font-family:GDS Transport,arial,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-weight:700;font-size:1.125rem;line-height:1.1111111111;color:#0b0c0c;display:block;margin-bottom:0;padding-top:15px}@media print{.govuk-accordion__section-button{font-family:sans-serif}}@media (min-width:40.0625em){.govuk-accordion__section-button{font-size:1.5rem;line-height:1.25}}@media print{.govuk-accordion__section-button{font-size:18pt;line-height:1.15;color:#000}}.govuk-accordion__section-content>:last-child{margin-bottom:0}.govuk-frontend-supported .govuk-accordion{border-bottom:1px solid #b1b4b6}.govuk-frontend-supported .govuk-accordion__section{padding-top:0}.govuk-frontend-supported .govuk-accordion__section-content{display:none;padding-top:15px;padding-bottom:30px}@media (min-width:40.0625em){.govuk-frontend-supported .govuk-accordion__section-content{padding-bottom:50px}}.govuk-frontend-supported .govuk-accordion__section-content[hidden]{padding-top:0;padding-bottom:0}@supports (content-visibility:hidden){.govuk-frontend-supported .govuk-accordion__section-content[hidden]{content-visibility:hidden;display:inherit}}.govuk-frontend-supported .govuk-accordion__section--expanded .govuk-accordion__section-content{display:block}.govuk-frontend-supported .govuk-accordion__show-all{font-family:GDS Transport,arial,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-weight:400;font-size:1rem;line-height:1.25;position:relative;z-index:1;margin-bottom:9px;padding:5px 2px 5px 0;border-width:0;color:#1d70b8;background:none;cursor:pointer;-webkit-appearance:none}@media print{.govuk-frontend-supported .govuk-accordion__show-all{font-family:sans-serif}}@media (min-width:40.0625em){.govuk-frontend-supported .govuk-accordion__show-all{font-size:1.1875rem;line-height:1.3157894737}}@media print{.govuk-frontend-supported .govuk-accordion__show-all{font-size:14pt;line-height:1.15}}@media (min-width:40.0625em){.govuk-frontend-supported .govuk-accordion__show-all{margin-bottom:14px}}.govuk-frontend-supported .govuk-accordion__show-all::-moz-focus-inner{padding:0;border:0}.govuk-frontend-supported .govuk-accordion__show-all:hover{color:#0b0c0c;background:#f3f2f1;box-shadow:0 -2px #f3f2f1,0 4px #f3f2f1}.govuk-frontend-supported .govuk-accordion__show-all:hover .govuk-accordion__section-toggle-text{color:#0b0c0c}.govuk-frontend-supported .govuk-accordion__show-all:hover .govuk-accordion-nav__chevron{color:#0b0c0c;background:#0b0c0c}.govuk-frontend-supported .govuk-accordion__show-all:hover .govuk-accordion-nav__chevron:after{color:#f3f2f1}.govuk-frontend-supported .govuk-accordion__show-all:focus{outline:3px solid transparent;color:#0b0c0c;background-color:#fd0;box-shadow:0 -2px #fd0,0 4px #0b0c0c;text-decoration:none;-webkit-box-decoration-break:clone;box-decoration-break:clone}.govuk-frontend-supported .govuk-accordion__show-all:focus .govuk-accordion-nav__chevron{background:#0b0c0c}.govuk-frontend-supported .govuk-accordion__show-all:focus .govuk-accordion-nav__chevron:after{color:#fd0}.govuk-frontend-supported .govuk-accordion__section-heading{padding:0}.govuk-frontend-supported .govuk-accordion-nav__chevron{box-sizing:border-box;display:inline-block;position:relative;width:1.25rem;height:1.25rem;border:.0625rem solid;border-radius:50%;vertical-align:middle}.govuk-frontend-supported .govuk-accordion-nav__chevron:after{content:"";box-sizing:border-box;display:block;position:absolute;bottom:.3125rem;left:.375rem;width:.375rem;height:.375rem;transform:rotate(-45deg);border-top:.125rem solid;border-right:.125rem solid}.govuk-frontend-supported .govuk-accordion-nav__chevron--down{transform:rotate(180deg)}.govuk-frontend-supported .govuk-accordion__section-button{width:100%;padding:10px 0 0;border:0;border-top:1px solid #b1b4b6;border-bottom:10px solid transparent;color:#0b0c0c;background:none;text-align:left;cursor:pointer;-webkit-appearance:none}@media (min-width:40.0625em){.govuk-frontend-supported .govuk-accordion__section-button{padding-bottom:10px}}.govuk-frontend-supported .govuk-accordion__section-button:active{color:#0b0c0c;background:none}.govuk-frontend-supported .govuk-accordion__section-button:hover{color:#0b0c0c;background:#f3f2f1}.govuk-frontend-supported .govuk-accordion__section-button:hover .govuk-accordion__section-toggle-text{color:#0b0c0c}.govuk-frontend-supported .govuk-accordion__section-button:hover .govuk-accordion-nav__chevron{color:#0b0c0c;background:#0b0c0c}.govuk-frontend-supported .govuk-accordion__section-button:hover .govuk-accordion-nav__chevron:after{color:#f3f2f1}.govuk-frontend-supported .govuk-accordion__section-button:focus{outline:0}.govuk-frontend-supported .govuk-accordion__section-button:focus .govuk-accordion__section-heading-text-focus,.govuk-frontend-supported .govuk-accordion__section-button:focus .govuk-accordion__section-summary-focus,.govuk-frontend-supported .govuk-accordion__section-button:focus .govuk-accordion__section-toggle-focus{outline:3px solid transparent;color:#0b0c0c;background-color:#fd0;box-shadow:0 -2px #fd0,0 4px #0b0c0c;text-decoration:none;-webkit-box-decoration-break:clone;box-decoration-break:clone}.govuk-frontend-supported .govuk-accordion__section-button:focus .govuk-accordion-nav__chevron{color:#0b0c0c;background:#0b0c0c}.govuk-frontend-supported .govuk-accordion__section-button:focus .govuk-accordion-nav__chevron:after{color:#fd0}.govuk-frontend-supported .govuk-accordion__section-button::-moz-focus-inner{padding:0;border:0}.govuk-frontend-supported .govuk-accordion__section--expanded .govuk-accordion__section-button{padding-bottom:15px;border-bottom:0}@media (min-width:40.0625em){.govuk-frontend-supported .govuk-accordion__section--expanded .govuk-accordion__section-button{padding-bottom:20px}}.govuk-frontend-supported .govuk-accordion__section-button:focus .govuk-accordion__section-toggle-focus{padding-bottom:3px}@media (min-width:48.0625em){.govuk-frontend-supported .govuk-accordion__section-button:focus .govuk-accordion__section-toggle-focus{padding-bottom:2px}}.govuk-frontend-supported .govuk-accordion__section-heading-text,.govuk-frontend-supported .govuk-accordion__section-summary,.govuk-frontend-supported .govuk-accordion__section-toggle{display:block;margin-bottom:13px}.govuk-frontend-supported .govuk-accordion__section-heading-text .govuk-accordion__section-heading-text-focus,.govuk-frontend-supported .govuk-accordion__section-heading-text .govuk-accordion__section-summary-focus,.govuk-frontend-supported .govuk-accordion__section-heading-text .govuk-accordion__section-toggle-focus,.govuk-frontend-supported .govuk-accordion__section-summary .govuk-accordion__section-heading-text-focus,.govuk-frontend-supported .govuk-accordion__section-summary .govuk-accordion__section-summary-focus,.govuk-frontend-supported .govuk-accordion__section-summary .govuk-accordion__section-toggle-focus,.govuk-frontend-supported .govuk-accordion__section-toggle .govuk-accordion__section-heading-text-focus,.govuk-frontend-supported .govuk-accordion__section-toggle .govuk-accordion__section-summary-focus,.govuk-frontend-supported .govuk-accordion__section-toggle .govuk-accordion__section-toggle-focus{display:inline}.govuk-frontend-supported .govuk-accordion__section-toggle{font-size:1rem;line-height:1.25;font-weight:400;color:#1d70b8}@media (min-width:40.0625em){.govuk-frontend-supported .govuk-accordion__section-toggle{font-size:1.1875rem;line-height:1.3157894737}}@media print{.govuk-frontend-supported .govuk-accordion__section-toggle{font-size:14pt;line-height:1.15}}.govuk-frontend-supported .govuk-accordion__section-toggle-text,.govuk-frontend-supported .govuk-accordion__show-all-text{margin-left:5px;vertical-align:middle}@media screen and (forced-colors:active){.govuk-frontend-supported .govuk-accordion__section-button:hover .govuk-accordion-nav__chevron,.govuk-frontend-supported .govuk-accordion__show-all:hover .govuk-accordion-nav__chevron{background-color:transparent}.govuk-frontend-supported .govuk-accordion__section-button:focus .govuk-accordion-nav__chevron,.govuk-frontend-supported .govuk-accordion__section-button:focus .govuk-accordion__section-heading-text-focus,.govuk-frontend-supported .govuk-accordion__section-button:focus .govuk-accordion__section-summary-focus,.govuk-frontend-supported .govuk-accordion__section-button:focus .govuk-accordion__section-toggle-focus,.govuk-frontend-supported .govuk-accordion__show-all:focus .govuk-accordion-nav__chevron,.govuk-frontend-supported .govuk-accordion__show-all:focus .govuk-accordion__section-heading-text-focus,.govuk-frontend-supported .govuk-accordion__show-all:focus .govuk-accordion__section-summary-focus,.govuk-frontend-supported .govuk-accordion__show-all:focus .govuk-accordion__section-toggle-focus{background:transparent;background-color:transparent}}@media (hover:none){.govuk-frontend-supported .govuk-accordion__section-header:hover{border-top-color:#b1b4b6;box-shadow:inset 0 3px 0 0 #1d70b8}.govuk-frontend-supported .govuk-accordion__section-header:hover .govuk-accordion__section-button{border-top-color:#b1b4b6}}.govuk-back-link{font-size:.875rem;line-height:1.1428571429;font-family:GDS Transport,arial,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-decoration:underline;text-decoration-thickness:max(1px,.0625rem);text-underline-offset:.1578em;display:inline-block;position:relative;margin-top:15px;margin-bottom:15px;padding-left:.875em}@media (min-width:40.0625em){.govuk-back-link{font-size:1rem;line-height:1.25}}@media print{.govuk-back-link{font-size:14pt;line-height:1.2;font-family:sans-serif}}.govuk-back-link:hover{text-decoration-thickness:max(3px,.1875rem,.12em);-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none;-webkit-text-decoration-skip:none;text-decoration-skip:none}.govuk-back-link:focus{outline:3px solid transparent;color:#0b0c0c;background-color:#fd0;box-shadow:0 -2px #fd0,0 4px #0b0c0c;text-decoration:none;-webkit-box-decoration-break:clone;box-decoration-break:clone}.govuk-back-link:link,.govuk-back-link:visited{color:#0b0c0c}@media print{.govuk-back-link:link,.govuk-back-link:visited{color:#000}}.govuk-back-link:hover{color:rgba(11,12,12,.99)}.govuk-back-link:active,.govuk-back-link:focus{color:#0b0c0c}@media print{.govuk-back-link:active,.govuk-back-link:focus{color:#000}}.govuk-back-link:before{content:"";display:block;position:absolute;top:0;bottom:0;left:.1875em;width:.4375em;height:.4375em;margin:auto 0;transform:rotate(225deg);border:solid;border-width:1px 1px 0 0;border-color:#505a5f}@supports (border-width:max(0px)){.govuk-back-link:before{border-width:max(1px,.0625em) max(1px,.0625em) 0 0;font-size:max(16px,1em)}}.govuk-back-link:focus:before{border-color:#0b0c0c}.govuk-back-link:after{content:"";position:absolute;top:-14px;right:0;bottom:-14px;left:0}.govuk-back-link--inverse:link,.govuk-back-link--inverse:visited{color:#fff}.govuk-back-link--inverse:active,.govuk-back-link--inverse:hover{color:hsla(0,0%,100%,.99)}.govuk-back-link--inverse:focus{color:#0b0c0c}.govuk-back-link--inverse:before{border-color:currentcolor}.govuk-breadcrumbs{font-family:GDS Transport,arial,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-weight:400;font-size:.875rem;line-height:1.1428571429;color:#0b0c0c;margin-top:15px;margin-bottom:10px}@media print{.govuk-breadcrumbs{font-family:sans-serif}}@media (min-width:40.0625em){.govuk-breadcrumbs{font-size:1rem;line-height:1.25}}@media print{.govuk-breadcrumbs{font-size:14pt;line-height:1.2;color:#000}}.govuk-breadcrumbs__list{margin:0;padding:0;list-style-type:none}.govuk-breadcrumbs__list:after{content:"";display:block;clear:both}.govuk-breadcrumbs__list-item{display:inline-block;position:relative;margin-bottom:5px;margin-left:.625em;padding-left:.9784375em;float:left}.govuk-breadcrumbs__list-item:before{content:"";display:block;position:absolute;top:0;bottom:0;left:-.206875em;width:.4375em;height:.4375em;margin:auto 0;transform:rotate(45deg);border:solid;border-width:1px 1px 0 0;border-color:#505a5f}@supports (border-width:max(0px)){.govuk-breadcrumbs__list-item:before{border-width:max(1px,.0625em) max(1px,.0625em) 0 0;font-size:max(16px,1em)}}.govuk-breadcrumbs__list-item:first-child{margin-left:0;padding-left:0}.govuk-breadcrumbs__list-item:first-child:before{content:none;display:none}.govuk-breadcrumbs__link{font-family:GDS Transport,arial,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-decoration:underline;text-decoration-thickness:max(1px,.0625rem);text-underline-offset:.1578em}@media print{.govuk-breadcrumbs__link{font-family:sans-serif}}.govuk-breadcrumbs__link:hover{text-decoration-thickness:max(3px,.1875rem,.12em);-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none;-webkit-text-decoration-skip:none;text-decoration-skip:none}.govuk-breadcrumbs__link:focus{outline:3px solid transparent;color:#0b0c0c;background-color:#fd0;box-shadow:0 -2px #fd0,0 4px #0b0c0c;text-decoration:none;-webkit-box-decoration-break:clone;box-decoration-break:clone}.govuk-breadcrumbs__link:link,.govuk-breadcrumbs__link:visited{color:#0b0c0c}@media print{.govuk-breadcrumbs__link:link,.govuk-breadcrumbs__link:visited{color:#000}}.govuk-breadcrumbs__link:hover{color:rgba(11,12,12,.99)}.govuk-breadcrumbs__link:active,.govuk-breadcrumbs__link:focus{color:#0b0c0c}@media print{.govuk-breadcrumbs__link:active,.govuk-breadcrumbs__link:focus{color:#000}}@media (max-width:40.0525em){.govuk-breadcrumbs--collapse-on-mobile .govuk-breadcrumbs__list-item{display:none}.govuk-breadcrumbs--collapse-on-mobile .govuk-breadcrumbs__list-item:first-child,.govuk-breadcrumbs--collapse-on-mobile .govuk-breadcrumbs__list-item:last-child{display:inline-block}.govuk-breadcrumbs--collapse-on-mobile .govuk-breadcrumbs__list-item:before{top:.375em;margin:0}.govuk-breadcrumbs--collapse-on-mobile .govuk-breadcrumbs__list{display:flex}}.govuk-breadcrumbs--inverse,.govuk-breadcrumbs--inverse .govuk-breadcrumbs__link:link,.govuk-breadcrumbs--inverse .govuk-breadcrumbs__link:visited{color:#fff}.govuk-breadcrumbs--inverse .govuk-breadcrumbs__link:active,.govuk-breadcrumbs--inverse .govuk-breadcrumbs__link:hover{color:hsla(0,0%,100%,.99)}.govuk-breadcrumbs--inverse .govuk-breadcrumbs__link:focus{color:#0b0c0c}.govuk-breadcrumbs--inverse .govuk-breadcrumbs__list-item:before{border-color:currentcolor}.govuk-button{font-family:GDS Transport,arial,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-weight:400;font-size:1rem;line-height:1.1875;box-sizing:border-box;display:inline-block;position:relative;width:100%;margin:0 0 22px;padding:8px 10px 7px;border:2px solid transparent;border-radius:0;color:#fff;background-color:#00703c;box-shadow:0 2px 0 #002d18;text-align:center;vertical-align:top;cursor:pointer;-webkit-appearance:none}@media print{.govuk-button{font-family:sans-serif}}@media (min-width:40.0625em){.govuk-button{font-size:1.1875rem;line-height:1}}@media print{.govuk-button{font-size:14pt;line-height:19px}}@media (min-width:40.0625em){.govuk-button{margin-bottom:32px;width:auto}}.govuk-button:active,.govuk-button:hover,.govuk-button:link,.govuk-button:visited{color:#fff;text-decoration:none}.govuk-button::-moz-focus-inner{padding:0;border:0}.govuk-button:hover{background-color:#005a30}.govuk-button:active{top:2px}.govuk-button:focus{border-color:#fd0;outline:3px solid transparent;box-shadow:inset 0 0 0 1px #fd0}.govuk-button:focus:not(:active):not(:hover){border-color:#fd0;color:#0b0c0c;background-color:#fd0;box-shadow:0 2px 0 #0b0c0c}.govuk-button:before{content:"";display:block;position:absolute;top:-2px;right:-2px;bottom:-4px;left:-2px;background:transparent}.govuk-button:active:before{top:-4px}.govuk-button[disabled]{opacity:.5}.govuk-button[disabled]:hover{background-color:#00703c;cursor:not-allowed}.govuk-button[disabled]:active{top:0;box-shadow:0 2px 0 #002d18}.govuk-button--secondary{background-color:#f3f2f1;box-shadow:0 2px 0 #929191}.govuk-button--secondary,.govuk-button--secondary:active,.govuk-button--secondary:hover,.govuk-button--secondary:link,.govuk-button--secondary:visited{color:#0b0c0c}.govuk-button--secondary:hover{background-color:#dbdad9}.govuk-button--secondary:hover[disabled]{background-color:#f3f2f1}.govuk-button--warning{background-color:#d4351c;box-shadow:0 2px 0 #55150b}.govuk-button--warning,.govuk-button--warning:active,.govuk-button--warning:hover,.govuk-button--warning:link,.govuk-button--warning:visited{color:#fff}.govuk-button--warning:hover{background-color:#aa2a16}.govuk-button--warning:hover[disabled]{background-color:#d4351c}.govuk-button--inverse{background-color:#fff;box-shadow:0 2px 0 #144e81}.govuk-button--inverse,.govuk-button--inverse:active,.govuk-button--inverse:hover,.govuk-button--inverse:link,.govuk-button--inverse:visited{color:#1d70b8}.govuk-button--inverse:hover{background-color:#e8f1f8}.govuk-button--inverse:hover[disabled]{background-color:#fff}.govuk-button--start{font-weight:700;font-size:1.125rem;line-height:1;display:inline-flex;min-height:auto;justify-content:center}@media (min-width:40.0625em){.govuk-button--start{font-size:1.5rem;line-height:1}}@media print{.govuk-button--start{font-size:18pt;line-height:1}}.govuk-button__start-icon{margin-left:5px;vertical-align:middle;flex-shrink:0;align-self:center;forced-color-adjust:auto}@media (min-width:48.0625em){.govuk-button__start-icon{margin-left:10px}}.govuk-error-message{font-family:GDS Transport,arial,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-weight:700;font-size:1rem;line-height:1.25;display:block;margin-top:0;margin-bottom:15px;clear:both;color:#d4351c}@media print{.govuk-error-message{font-family:sans-serif}}@media (min-width:40.0625em){.govuk-error-message{font-size:1.1875rem;line-height:1.3157894737}}@media print{.govuk-error-message{font-size:14pt;line-height:1.15}}.govuk-hint{font-family:GDS Transport,arial,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-weight:400;font-size:1rem;line-height:1.25;margin-bottom:15px;color:#505a5f}@media print{.govuk-hint{font-family:sans-serif}}@media (min-width:40.0625em){.govuk-hint{font-size:1.1875rem;line-height:1.3157894737}}@media print{.govuk-hint{font-size:14pt;line-height:1.15}}.govuk-fieldset__legend:not(.govuk-fieldset__legend--m):not(.govuk-fieldset__legend--l):not(.govuk-fieldset__legend--xl)+.govuk-hint,.govuk-label:not(.govuk-label--m):not(.govuk-label--l):not(.govuk-label--xl)+.govuk-hint{margin-bottom:10px}.govuk-fieldset__legend+.govuk-hint{margin-top:-5px}.govuk-label{font-family:GDS Transport,arial,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-weight:400;font-size:1rem;line-height:1.25;color:#0b0c0c;display:block;margin-bottom:5px}@media print{.govuk-label{font-family:sans-serif}}@media (min-width:40.0625em){.govuk-label{font-size:1.1875rem;line-height:1.3157894737}}@media print{.govuk-label{font-size:14pt;line-height:1.15;color:#000}}.govuk-label--l,.govuk-label--m,.govuk-label--xl{font-weight:700;margin-bottom:15px}.govuk-label--xl{font-size:2rem;line-height:1.09375}@media (min-width:40.0625em){.govuk-label--xl{font-size:3rem;line-height:1.0416666667}}@media print{.govuk-label--xl{font-size:32pt;line-height:1.15}}.govuk-label--l{font-size:1.5rem;line-height:1.0416666667}@media (min-width:40.0625em){.govuk-label--l{font-size:2.25rem;line-height:1.1111111111}}@media print{.govuk-label--l{font-size:24pt;line-height:1.05}}.govuk-label--m{font-size:1.125rem;line-height:1.1111111111}@media (min-width:40.0625em){.govuk-label--m{font-size:1.5rem;line-height:1.25}}@media print{.govuk-label--m{font-size:18pt;line-height:1.15}}.govuk-label--s{font-weight:700}.govuk-label-wrapper{margin:0}.govuk-textarea{font-family:GDS Transport,arial,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-weight:400;font-size:1rem;line-height:1.25;box-sizing:border-box;display:block;width:100%;min-height:40px;margin-bottom:20px;padding:5px;resize:vertical;border:2px solid #0b0c0c;border-radius:0;-webkit-appearance:none}@media print{.govuk-textarea{font-family:sans-serif}}@media (min-width:40.0625em){.govuk-textarea{font-size:1.1875rem;line-height:1.25}}@media print{.govuk-textarea{font-size:14pt;line-height:1.25}}@media (min-width:40.0625em){.govuk-textarea{margin-bottom:30px}}.govuk-textarea:focus{outline:3px solid #fd0;outline-offset:0;box-shadow:inset 0 0 0 2px}.govuk-textarea:disabled{opacity:.5;color:inherit;background-color:transparent;cursor:not-allowed}.govuk-textarea--error{border-color:#d4351c}.govuk-textarea--error:focus{border-color:#0b0c0c}.govuk-character-count{margin-bottom:20px}@media (min-width:40.0625em){.govuk-character-count{margin-bottom:30px}}.govuk-character-count .govuk-form-group,.govuk-character-count .govuk-textarea{margin-bottom:5px}.govuk-character-count__message{font-variant-numeric:tabular-nums;margin-top:0;margin-bottom:0}.govuk-character-count__message:after{content:"​"}.govuk-character-count__message--disabled{visibility:hidden}.govuk-fieldset{min-width:0;margin:0;padding:0;border:0}.govuk-fieldset:after{content:"";display:block;clear:both}@supports not (caret-color:auto){.govuk-fieldset,x:-moz-any-link{display:table-cell}}.govuk-fieldset__legend{font-family:GDS Transport,arial,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-weight:400;font-size:1rem;line-height:1.25;color:#0b0c0c;box-sizing:border-box;display:table;max-width:100%;margin-bottom:10px;padding:0;white-space:normal}@media print{.govuk-fieldset__legend{font-family:sans-serif}}@media (min-width:40.0625em){.govuk-fieldset__legend{font-size:1.1875rem;line-height:1.3157894737}}@media print{.govuk-fieldset__legend{font-size:14pt;line-height:1.15;color:#000}}.govuk-fieldset__legend--l,.govuk-fieldset__legend--m,.govuk-fieldset__legend--xl{font-weight:700;margin-bottom:15px}.govuk-fieldset__legend--xl{font-size:2rem;line-height:1.09375}@media (min-width:40.0625em){.govuk-fieldset__legend--xl{font-size:3rem;line-height:1.0416666667}}@media print{.govuk-fieldset__legend--xl{font-size:32pt;line-height:1.15}}.govuk-fieldset__legend--l{font-size:1.5rem;line-height:1.0416666667}@media (min-width:40.0625em){.govuk-fieldset__legend--l{font-size:2.25rem;line-height:1.1111111111}}@media print{.govuk-fieldset__legend--l{font-size:24pt;line-height:1.05}}.govuk-fieldset__legend--m{font-size:1.125rem;line-height:1.1111111111}@media (min-width:40.0625em){.govuk-fieldset__legend--m{font-size:1.5rem;line-height:1.25}}@media print{.govuk-fieldset__legend--m{font-size:18pt;line-height:1.15}}.govuk-fieldset__legend--s{font-weight:700}.govuk-fieldset__heading{margin:0;font-size:inherit;font-weight:inherit}.govuk-checkboxes__item{display:flex;flex-wrap:wrap;position:relative;margin-bottom:10px}.govuk-checkboxes__item:last-child,.govuk-checkboxes__item:last-of-type{margin-bottom:0}.govuk-checkboxes__input{z-index:1;width:44px;height:44px;margin:0;opacity:0;cursor:pointer}.govuk-checkboxes__label{align-self:center;max-width:calc(100% - 74px);margin-bottom:0;padding:7px 15px;cursor:pointer;touch-action:manipulation}.govuk-checkboxes__label:before{top:2px;left:2px;width:40px;height:40px;border:2px solid}.govuk-checkboxes__label:after,.govuk-checkboxes__label:before{content:"";box-sizing:border-box;position:absolute;background:transparent}.govuk-checkboxes__label:after{top:13px;left:10px;width:23px;height:12px;transform:rotate(-45deg);border:solid;border-width:0 0 5px 5px;border-top-color:transparent;opacity:0}.govuk-checkboxes__hint{display:block;width:100%;margin-top:-5px;padding-right:15px;padding-left:59px}.govuk-label:not(.govuk-label--m):not(.govuk-label--l):not(.govuk-label--xl)+.govuk-checkboxes__hint{margin-bottom:0}.govuk-checkboxes__input:focus+.govuk-checkboxes__label:before{border-width:4px;outline:3px solid transparent;outline-offset:1px;box-shadow:0 0 0 3px #fd0}@media (-ms-high-contrast:active),screen and (forced-colors:active){.govuk-checkboxes__input:focus+.govuk-checkboxes__label:before{outline-color:Highlight}}.govuk-checkboxes__input:checked+.govuk-checkboxes__label:after{opacity:1}.govuk-checkboxes__input:disabled,.govuk-checkboxes__input:disabled+.govuk-checkboxes__label{cursor:not-allowed}.govuk-checkboxes__input:disabled+.govuk-checkboxes__label,.govuk-checkboxes__input:disabled~.govuk-hint{opacity:.5}.govuk-checkboxes__divider{font-family:GDS Transport,arial,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-weight:400;font-size:1rem;line-height:1.25;color:#0b0c0c;width:40px;margin-bottom:10px;text-align:center}@media print{.govuk-checkboxes__divider{font-family:sans-serif}}@media (min-width:40.0625em){.govuk-checkboxes__divider{font-size:1.1875rem;line-height:1.3157894737}}@media print{.govuk-checkboxes__divider{font-size:14pt;line-height:1.15;color:#000}}.govuk-checkboxes__conditional{margin-bottom:15px;margin-left:20px;padding-left:35px;border-left:4px solid #b1b4b6}@media (min-width:40.0625em){.govuk-checkboxes__conditional{margin-bottom:20px}}.govuk-frontend-supported .govuk-checkboxes__conditional--hidden{display:none}.govuk-checkboxes--small .govuk-checkboxes__item,.govuk-checkboxes__conditional>:last-child{margin-bottom:0}.govuk-checkboxes--small .govuk-checkboxes__input{margin-left:-10px}.govuk-checkboxes--small .govuk-checkboxes__label{padding-left:1px}.govuk-checkboxes--small .govuk-checkboxes__label:before{top:10px;left:0;width:24px;height:24px}.govuk-checkboxes--small .govuk-checkboxes__label:after{top:17px;left:6px;width:12px;height:6.5px;border-width:0 0 3px 3px}.govuk-checkboxes--small .govuk-checkboxes__hint{padding-left:34px}.govuk-checkboxes--small .govuk-checkboxes__conditional{margin-left:10px;padding-left:20px}.govuk-checkboxes--small .govuk-checkboxes__divider{width:24px;margin-bottom:5px}.govuk-checkboxes--small .govuk-checkboxes__item:hover .govuk-checkboxes__input:not(:disabled)+.govuk-checkboxes__label:before{outline:3px dashed transparent;outline-offset:1px;box-shadow:0 0 0 10px #b1b4b6}.govuk-checkboxes--small .govuk-checkboxes__item:hover .govuk-checkboxes__input:focus+.govuk-checkboxes__label:before{box-shadow:0 0 0 3px #fd0,0 0 0 10px #b1b4b6}@media (-ms-high-contrast:active),screen and (forced-colors:active){.govuk-checkboxes--small .govuk-checkboxes__item:hover .govuk-checkboxes__input:focus+.govuk-checkboxes__label:before{outline-color:Highlight}}@media (hover:none),(pointer:coarse){.govuk-checkboxes--small .govuk-checkboxes__item:hover .govuk-checkboxes__input:not(:disabled)+.govuk-checkboxes__label:before{box-shadow:none}.govuk-checkboxes--small .govuk-checkboxes__item:hover .govuk-checkboxes__input:focus+.govuk-checkboxes__label:before{box-shadow:0 0 0 3px #fd0}}.govuk-cookie-banner{padding-top:20px;border-bottom:10px solid transparent;background-color:#f3f2f1}.govuk-cookie-banner[hidden]{display:none}.govuk-cookie-banner__message{margin-bottom:-10px}.govuk-cookie-banner__message[hidden]{display:none}.govuk-cookie-banner__message:focus{outline:none}.govuk-input{font-family:GDS Transport,arial,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-weight:400;font-size:1rem;line-height:1.25;box-sizing:border-box;width:100%;height:2.5rem;margin-top:0;padding:5px;border:2px solid #0b0c0c;border-radius:0;-webkit-appearance:none;appearance:none}@media print{.govuk-input{font-family:sans-serif}}@media (min-width:40.0625em){.govuk-input{font-size:1.1875rem;line-height:1.3157894737}}@media print{.govuk-input{font-size:14pt;line-height:1.15}}.govuk-input:focus{outline:3px solid #fd0;outline-offset:0;box-shadow:inset 0 0 0 2px}.govuk-input:disabled{opacity:.5;color:inherit;background-color:transparent;cursor:not-allowed}.govuk-input::-webkit-inner-spin-button,.govuk-input::-webkit-outer-spin-button{margin:0;-webkit-appearance:none}.govuk-input[type=number]{-moz-appearance:textfield}.govuk-input--error{border-color:#d4351c}.govuk-input--error:focus{border-color:#0b0c0c}.govuk-input--extra-letter-spacing{font-variant-numeric:tabular-nums;letter-spacing:.05em}.govuk-input--width-30{max-width:29.5em}.govuk-input--width-20{max-width:20.5em}.govuk-input--width-10{max-width:11.5em}.govuk-input--width-5{max-width:5.5em}.govuk-input--width-4{max-width:4.5em}.govuk-input--width-3{max-width:3.75em}.govuk-input--width-2{max-width:2.75em}.govuk-input__wrapper{display:flex}.govuk-input__wrapper .govuk-input{flex:0 1 auto}.govuk-input__wrapper .govuk-input:focus{z-index:1}@media (max-width:19.99em){.govuk-input__wrapper{display:block}.govuk-input__wrapper .govuk-input{max-width:100%}}.govuk-input__prefix,.govuk-input__suffix{font-family:GDS Transport,arial,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-weight:400;font-size:1rem;line-height:1.25;box-sizing:border-box;display:flex;align-items:center;justify-content:center;min-width:2.5rem;height:2.5rem;padding:5px;border:2px solid #0b0c0c;background-color:#f3f2f1;text-align:center;white-space:nowrap;cursor:default;flex:0 0 auto}@media print{.govuk-input__prefix,.govuk-input__suffix{font-family:sans-serif}}@media (min-width:40.0625em){.govuk-input__prefix,.govuk-input__suffix{font-size:1.1875rem;line-height:1.3157894737}}@media print{.govuk-input__prefix,.govuk-input__suffix{font-size:14pt;line-height:1.15}}@media (max-width:19.99em){.govuk-input__prefix,.govuk-input__suffix{display:block;height:100%;white-space:normal}.govuk-input__prefix{border-bottom:0}}@media (min-width:20em){.govuk-input__prefix{border-right:0}}@media (max-width:19.99em){.govuk-input__suffix{border-top:0}}@media (min-width:20em){.govuk-input__suffix{border-left:0}}.govuk-date-input{font-size:0}.govuk-date-input:after{content:"";display:block;clear:both}.govuk-date-input__item{display:inline-block;margin-right:20px;margin-bottom:0}.govuk-date-input__label{display:block}.govuk-date-input__input{margin-bottom:0}.govuk-details{font-family:GDS Transport,arial,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-weight:400;font-size:1rem;line-height:1.25;color:#0b0c0c;margin-bottom:20px;display:block}@media print{.govuk-details{font-family:sans-serif}}@media (min-width:40.0625em){.govuk-details{font-size:1.1875rem;line-height:1.3157894737}}@media print{.govuk-details{font-size:14pt;line-height:1.15;color:#000}}@media (min-width:40.0625em){.govuk-details{margin-bottom:30px}}.govuk-details__summary{display:inline-block;margin-bottom:5px}.govuk-details__summary-text>:first-child{margin-top:0}.govuk-details__summary-text>:last-child,.govuk-details__summary-text>:only-child{margin-bottom:0}.govuk-details__text{padding-top:15px;padding-bottom:15px;padding-left:20px}.govuk-details__text p{margin-top:0;margin-bottom:20px}.govuk-details__text>:last-child{margin-bottom:0}@media screen\0 {.govuk-details{border-left:10px solid #b1b4b6}.govuk-details__summary{margin-top:15px}.govuk-details__summary-text{font-weight:700;margin-bottom:15px;padding-left:20px}}@media screen\0 and (min-width:40.0625em){.govuk-details__summary-text{margin-bottom:20px}}@supports not (-ms-ime-align:auto){.govuk-details__summary{position:relative;padding-left:25px;color:#1d70b8;cursor:pointer}.govuk-details__summary:hover{color:#003078}.govuk-details__summary:focus{outline:3px solid transparent;color:#0b0c0c;background-color:#fd0;box-shadow:0 -2px #fd0,0 4px #0b0c0c;text-decoration:none;-webkit-box-decoration-break:clone;box-decoration-break:clone}.govuk-details__summary-text{text-decoration:underline;text-decoration-thickness:max(1px,.0625rem);text-underline-offset:.1578em}.govuk-details__summary:hover .govuk-details__summary-text{text-decoration-thickness:max(3px,.1875rem,.12em);-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none;-webkit-text-decoration-skip:none;text-decoration-skip:none}.govuk-details__summary:focus .govuk-details__summary-text{text-decoration:none}.govuk-details__summary::-webkit-details-marker{display:none}.govuk-details__summary:before{content:"";position:absolute;top:-1px;bottom:0;left:0;margin:auto;display:block;width:0;height:0;-webkit-clip-path:polygon(0 0,100% 50%,0 100%);clip-path:polygon(0 0,100% 50%,0 100%);border-color:transparent;border-style:solid;border-width:7px 0 7px 12.124px;border-left-color:inherit}.govuk-details[open]>.govuk-details__summary:before{display:block;width:0;height:0;-webkit-clip-path:polygon(0 0,50% 100%,100% 0);clip-path:polygon(0 0,50% 100%,100% 0);border-color:transparent;border-style:solid;border-width:12.124px 7px 0;border-top-color:inherit}.govuk-details__text{border-left:5px solid #b1b4b6}}.govuk-error-summary{font-family:GDS Transport,arial,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-weight:400;font-size:1rem;line-height:1.25;color:#0b0c0c;padding:15px;margin-bottom:30px;border:5px solid #d4351c}@media print{.govuk-error-summary{font-family:sans-serif}}@media (min-width:40.0625em){.govuk-error-summary{font-size:1.1875rem;line-height:1.3157894737}}@media print{.govuk-error-summary{font-size:14pt;line-height:1.15;color:#000}}@media (min-width:40.0625em){.govuk-error-summary{padding:20px;margin-bottom:50px}}.govuk-error-summary:focus{outline:3px solid #fd0}.govuk-error-summary__title{font-size:1.125rem;line-height:1.1111111111;font-weight:700;margin-top:0;margin-bottom:15px}@media (min-width:40.0625em){.govuk-error-summary__title{font-size:1.5rem;line-height:1.25}}@media print{.govuk-error-summary__title{font-size:18pt;line-height:1.15}}@media (min-width:40.0625em){.govuk-error-summary__title{margin-bottom:20px}}.govuk-error-summary__body p{margin-bottom:0}.govuk-error-summary__body>*+*{margin-top:15px}@media (min-width:40.0625em){.govuk-error-summary__body>*+*{margin-top:20px}}.govuk-error-summary__body>:last-child{margin-bottom:5px}.govuk-error-summary__list,.govuk-error-summary__list li:last-child{margin-bottom:0}.govuk-error-summary__list a{font-weight:700;font-family:GDS Transport,arial,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-decoration:underline;text-decoration-thickness:max(1px,.0625rem);text-underline-offset:.1578em}@media print{.govuk-error-summary__list a{font-family:sans-serif}}.govuk-error-summary__list a:hover{text-decoration-thickness:max(3px,.1875rem,.12em);-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none;-webkit-text-decoration-skip:none;text-decoration-skip:none}.govuk-error-summary__list a:focus{outline:3px solid transparent;background-color:#fd0;box-shadow:0 -2px #fd0,0 4px #0b0c0c;text-decoration:none;-webkit-box-decoration-break:clone;box-decoration-break:clone}.govuk-error-summary__list a:link,.govuk-error-summary__list a:visited{color:#d4351c}.govuk-error-summary__list a:hover{color:#942514}.govuk-error-summary__list a:active{color:#d4351c}.govuk-error-summary__list a:focus{color:#0b0c0c}.govuk-exit-this-page{margin-bottom:30px;position:-webkit-sticky;position:sticky;z-index:1000;top:0;left:0;width:100%}@media (min-width:40.0625em){.govuk-exit-this-page{margin-bottom:50px;display:inline-block;right:0;left:auto;width:auto;float:right}}.govuk-exit-this-page__button{margin-bottom:0}.govuk-exit-this-page__indicator{display:none;padding:10px 10px 0;color:inherit;line-height:0;text-align:center;pointer-events:none}.govuk-exit-this-page__indicator--visible{display:block}.govuk-exit-this-page__indicator-light{box-sizing:border-box;display:inline-block;width:.75em;height:.75em;margin:0 .125em;border-radius:50%;border:2px solid}.govuk-exit-this-page__indicator-light--on{border-width:.375em}@media only print{.govuk-exit-this-page{display:none}}.govuk-exit-this-page-overlay{position:fixed;z-index:9999;top:0;right:0;bottom:0;left:0;background-color:#fff}.govuk-exit-this-page-hide-content *{display:none!important}.govuk-exit-this-page-hide-content .govuk-exit-this-page-overlay{display:block!important}.govuk-file-upload{font-family:GDS Transport,arial,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-weight:400;font-size:1rem;line-height:1.25;color:#0b0c0c;max-width:100%;margin-left:-5px;padding:5px}@media print{.govuk-file-upload{font-family:sans-serif}}@media (min-width:40.0625em){.govuk-file-upload{font-size:1.1875rem;line-height:1.3157894737}}@media print{.govuk-file-upload{font-size:14pt;line-height:1.15;color:#000}}.govuk-file-upload::-webkit-file-upload-button{-webkit-appearance:button;color:inherit;font:inherit}.govuk-file-upload:focus{outline:3px solid #fd0;box-shadow:inset 0 0 0 4px #0b0c0c}.govuk-file-upload:focus-within{outline:3px solid #fd0;box-shadow:inset 0 0 0 4px #0b0c0c}.govuk-file-upload:disabled{opacity:.5;cursor:not-allowed}.govuk-footer{font-family:GDS Transport,arial,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-weight:400;font-size:.875rem;line-height:1.1428571429;padding-top:25px;padding-bottom:15px;border-top:1px solid #b1b4b6;color:#0b0c0c;background:#f3f2f1}@media print{.govuk-footer{font-family:sans-serif}}@media (min-width:40.0625em){.govuk-footer{font-size:1rem;line-height:1.25}}@media print{.govuk-footer{font-size:14pt;line-height:1.2}}@media (min-width:40.0625em){.govuk-footer{padding-top:40px;padding-bottom:25px}}.govuk-footer__link{font-family:GDS Transport,arial,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-decoration:underline;text-decoration-thickness:max(1px,.0625rem);text-underline-offset:.1578em}@media print{.govuk-footer__link{font-family:sans-serif}}.govuk-footer__link:hover{text-decoration-thickness:max(3px,.1875rem,.12em);-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none;-webkit-text-decoration-skip:none;text-decoration-skip:none}.govuk-footer__link:focus{outline:3px solid transparent;color:#0b0c0c;background-color:#fd0;box-shadow:0 -2px #fd0,0 4px #0b0c0c;text-decoration:none;-webkit-box-decoration-break:clone;box-decoration-break:clone}.govuk-footer__link:link,.govuk-footer__link:visited{color:#0b0c0c}@media print{.govuk-footer__link:link,.govuk-footer__link:visited{color:#000}}.govuk-footer__link:hover{color:rgba(11,12,12,.99)}.govuk-footer__link:active,.govuk-footer__link:focus{color:#0b0c0c}@media print{.govuk-footer__link:active,.govuk-footer__link:focus{color:#000}}.govuk-footer__section-break{margin:0 0 30px;border:0;border-bottom:1px solid #b1b4b6}@media (min-width:40.0625em){.govuk-footer__section-break{margin-bottom:50px}}.govuk-footer__meta{display:flex;margin-right:-15px;margin-left:-15px;flex-wrap:wrap;align-items:flex-end;justify-content:center}.govuk-footer__meta-item{margin-right:15px;margin-bottom:25px;margin-left:15px}.govuk-footer__meta-item--grow{flex:1}@media (max-width:40.0525em){.govuk-footer__meta-item--grow{flex-basis:320px}}.govuk-footer__licence-logo{display:inline-block;margin-right:10px;vertical-align:top;forced-color-adjust:auto}@media (max-width:48.0525em){.govuk-footer__licence-logo{margin-bottom:15px}}.govuk-footer__licence-description{display:inline-block}.govuk-footer__copyright-logo{display:inline-block;min-width:125px;padding-top:112px;background-image:url(/assets/images/govuk-crest.png);background-repeat:no-repeat;background-position:50% 0;background-size:125px 102px;text-align:center;white-space:nowrap}@media only screen and (-webkit-min-device-pixel-ratio:2),only screen and (min-resolution:192dpi),only screen and (min-resolution:2dppx){.govuk-footer__copyright-logo{background-image:url(/assets/images/govuk-crest-2x.png)}}.govuk-footer__inline-list{margin-top:0;margin-bottom:15px;padding:0}.govuk-footer__meta-custom{margin-bottom:20px}.govuk-footer__inline-list-item{display:inline-block;margin-right:15px;margin-bottom:5px}.govuk-footer__heading{margin-bottom:30px;padding-bottom:20px;border-bottom:1px solid #b1b4b6}@media (max-width:40.0525em){.govuk-footer__heading{padding-bottom:10px}}.govuk-footer__navigation{margin-right:-15px;margin-left:-15px}.govuk-footer__navigation:after{content:"";display:block;clear:both}.govuk-footer__section{display:inline-block;margin-bottom:30px;vertical-align:top}.govuk-footer__list{margin:0;padding:0;list-style:none;column-gap:30px}@media (min-width:48.0625em){.govuk-footer__list--columns-2{column-count:2}.govuk-footer__list--columns-3{column-count:3}}.govuk-footer__list-item{margin-bottom:15px}@media (min-width:40.0625em){.govuk-footer__list-item{margin-bottom:20px}}.govuk-footer__list-item:last-child{margin-bottom:0}.govuk-header{font-family:GDS Transport,arial,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-weight:400;font-size:.875rem;line-height:1;border-bottom:10px solid #fff;color:#fff;background:#0b0c0c}@media print{.govuk-header{font-family:sans-serif}}@media (min-width:40.0625em){.govuk-header{font-size:1rem;line-height:1}}@media print{.govuk-header{font-size:14pt;line-height:1}}.govuk-header__container--full-width{padding:0 15px;border-color:#1d70b8}.govuk-header__container--full-width .govuk-header__menu-button{right:15px}.govuk-header__container{position:relative;margin-bottom:-10px;padding-top:10px;border-bottom:10px solid #1d70b8}.govuk-header__container:after{content:"";display:block;clear:both}.govuk-header__logotype{display:inline-block;position:relative;top:-3px;margin-right:5px;fill:currentcolor;vertical-align:top}@media (forced-colors:active){.govuk-header__logotype{forced-color-adjust:none;color:linktext}}.govuk-header__logotype:last-child{margin-right:0}.govuk-header__product-name{font-size:1.125rem;line-height:1;font-weight:400;display:inline-table;margin-top:10px;vertical-align:top}@media (min-width:40.0625em){.govuk-header__product-name{font-size:1.5rem;line-height:1}}@media print{.govuk-header__product-name{font-size:18pt;line-height:1}}@-moz-document url-prefix(){.govuk-header__product-name{margin-top:9.5px}}@media (min-width:40.0625em){.govuk-header__product-name{margin-top:5px}@-moz-document url-prefix(){.govuk-header__product-name{margin-top:4.5px}}}.govuk-header__link{text-decoration:none}.govuk-header__link:link,.govuk-header__link:visited{color:#fff}.govuk-header__link:active,.govuk-header__link:hover{color:hsla(0,0%,100%,.99)}.govuk-header__link:hover{text-decoration:underline;text-decoration-thickness:3px;text-underline-offset:.1578em}.govuk-header__link:focus{outline:3px solid transparent;color:#0b0c0c;background-color:#fd0;box-shadow:0 -2px #fd0,0 4px #0b0c0c;text-decoration:none;-webkit-box-decoration-break:clone;box-decoration-break:clone}.govuk-header__link--homepage{display:inline-block;margin-right:10px;font-size:30px}@media (min-width:48.0625em){.govuk-header__link--homepage{display:inline}.govuk-header__link--homepage:focus{box-shadow:0 0 #fd0}}.govuk-header__link--homepage:link,.govuk-header__link--homepage:visited{text-decoration:none}.govuk-header__link--homepage:active,.govuk-header__link--homepage:hover{margin-bottom:-3px;border-bottom:3px solid}.govuk-header__link--homepage:focus{margin-bottom:0;border-bottom:0}.govuk-header__service-name{display:inline-block;margin-bottom:10px;font-size:1.125rem;line-height:1.1111111111;font-weight:700}@media (min-width:40.0625em){.govuk-header__service-name{font-size:1.5rem;line-height:1.25}}@media print{.govuk-header__service-name{font-size:18pt;line-height:1.15}}.govuk-header__content,.govuk-header__logo{box-sizing:border-box}.govuk-header__logo{margin-bottom:10px;padding-right:80px}@media (min-width:48.0625em){.govuk-header__logo{width:33.33%;padding-right:15px;float:left;vertical-align:top}.govuk-header__logo:last-child{width:auto;padding-right:0;float:none}.govuk-header__content{width:66.66%;padding-left:15px;float:left}}.govuk-header__menu-button{font-family:GDS Transport,arial,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-weight:400;font-size:.875rem;line-height:1.1428571429;position:absolute;top:13px;right:0;max-width:80px;min-height:24px;margin:0;padding:0;border:0;color:#fff;background:none;word-break:break-all;cursor:pointer}@media print{.govuk-header__menu-button{font-family:sans-serif}}@media (min-width:40.0625em){.govuk-header__menu-button{font-size:1rem;line-height:1.25}}@media print{.govuk-header__menu-button{font-size:14pt;line-height:1.2}}.govuk-header__menu-button:hover{-webkit-text-decoration:solid underline 3px;text-decoration:solid underline 3px;text-underline-offset:.1578em}.govuk-header__menu-button:focus{outline:3px solid transparent;color:#0b0c0c;background-color:#fd0;box-shadow:0 -2px #fd0,0 4px #0b0c0c;text-decoration:none;-webkit-box-decoration-break:clone;box-decoration-break:clone}.govuk-header__menu-button:after{display:inline-block;width:0;height:0;-webkit-clip-path:polygon(0 0,50% 100%,100% 0);clip-path:polygon(0 0,50% 100%,100% 0);border-color:transparent;border-style:solid;border-width:8.66px 5px 0;border-top-color:inherit;content:"";margin-left:5px}.govuk-header__menu-button[aria-expanded=true]:after{display:inline-block;width:0;height:0;-webkit-clip-path:polygon(50% 0,0 100%,100% 100%);clip-path:polygon(50% 0,0 100%,100% 100%);border-color:transparent;border-style:solid;border-width:0 5px 8.66px;border-bottom-color:inherit}@media (min-width:40.0625em){.govuk-header__menu-button{top:15px}}.govuk-frontend-supported .govuk-header__menu-button{display:block}.govuk-frontend-supported .govuk-header__menu-button[hidden],.govuk-header__menu-button[hidden]{display:none}@media (min-width:48.0625em){.govuk-header__navigation{margin-bottom:10px}}.govuk-header__navigation-list{margin:0;padding:0;list-style:none}.govuk-header__navigation-list[hidden]{display:none}@media (min-width:48.0625em){.govuk-header__navigation--end{margin:0;padding:5px 0;text-align:right}}.govuk-header__navigation-item{padding:10px 0;border-bottom:1px solid #2e3133}@media (min-width:48.0625em){.govuk-header__navigation-item{display:inline-block;margin-right:15px;padding:5px 0;border:0}}.govuk-header__navigation-item a{font-size:.875rem;line-height:1.1428571429;font-weight:700;white-space:nowrap}@media (min-width:40.0625em){.govuk-header__navigation-item a{font-size:1rem;line-height:1.25}}@media print{.govuk-header__navigation-item a{font-size:14pt;line-height:1.2}}.govuk-header__navigation-item--active a:hover,.govuk-header__navigation-item--active a:link,.govuk-header__navigation-item--active a:visited{color:#1d8feb}@media print{.govuk-header__navigation-item--active a{color:#1d70b8}}.govuk-header__navigation-item--active a:focus{color:#0b0c0c}.govuk-header__navigation-item:last-child{margin-right:0;border-bottom:0}@media print{.govuk-header{border-bottom-width:0;color:#0b0c0c;background:transparent}.govuk-header__link:link,.govuk-header__link:visited{color:#0b0c0c}.govuk-header__link:after{display:none}}.govuk-inset-text{font-family:GDS Transport,arial,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-weight:400;font-size:1rem;line-height:1.25;color:#0b0c0c;padding:15px;margin-top:20px;margin-bottom:20px;clear:both;border-left:10px solid #b1b4b6}@media print{.govuk-inset-text{font-family:sans-serif}}@media (min-width:40.0625em){.govuk-inset-text{font-size:1.1875rem;line-height:1.3157894737}}@media print{.govuk-inset-text{font-size:14pt;line-height:1.15;color:#000}}@media (min-width:40.0625em){.govuk-inset-text{margin-top:30px;margin-bottom:30px}}.govuk-inset-text>:first-child{margin-top:0}.govuk-inset-text>:last-child,.govuk-inset-text>:only-child{margin-bottom:0}.govuk-notification-banner{font-family:GDS Transport,arial,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-weight:400;font-size:1rem;line-height:1.25;margin-bottom:30px;border:5px solid #1d70b8;background-color:#1d70b8}@media print{.govuk-notification-banner{font-family:sans-serif}}@media (min-width:40.0625em){.govuk-notification-banner{font-size:1.1875rem;line-height:1.3157894737}}@media print{.govuk-notification-banner{font-size:14pt;line-height:1.15}}@media (min-width:40.0625em){.govuk-notification-banner{margin-bottom:50px}}.govuk-notification-banner:focus{outline:3px solid #fd0}.govuk-notification-banner__header{padding:2px 15px 5px;border-bottom:1px solid transparent}@media (min-width:40.0625em){.govuk-notification-banner__header{padding:2px 20px 5px}}.govuk-notification-banner__title{font-size:1rem;line-height:1.25;font-weight:700;margin:0;padding:0;color:#fff}@media (min-width:40.0625em){.govuk-notification-banner__title{font-size:1.1875rem;line-height:1.3157894737}}@media print{.govuk-notification-banner__title{font-size:14pt;line-height:1.15}}.govuk-notification-banner__content{color:#0b0c0c;padding:15px;background-color:#fff}@media print{.govuk-notification-banner__content{color:#000}}@media (min-width:40.0625em){.govuk-notification-banner__content{padding:20px}}.govuk-notification-banner__content>*{box-sizing:border-box;max-width:605px}.govuk-notification-banner__content>:last-child{margin-bottom:0}.govuk-notification-banner__heading{font-size:1.125rem;line-height:1.1111111111;font-weight:700;margin:0 0 15px;padding:0}@media (min-width:40.0625em){.govuk-notification-banner__heading{font-size:1.5rem;line-height:1.25}}@media print{.govuk-notification-banner__heading{font-size:18pt;line-height:1.15}}.govuk-notification-banner__link{font-family:GDS Transport,arial,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-decoration:underline;text-decoration-thickness:max(1px,.0625rem);text-underline-offset:.1578em}@media print{.govuk-notification-banner__link{font-family:sans-serif}}.govuk-notification-banner__link:hover{text-decoration-thickness:max(3px,.1875rem,.12em);-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none;-webkit-text-decoration-skip:none;text-decoration-skip:none}.govuk-notification-banner__link:focus{outline:3px solid transparent;background-color:#fd0;box-shadow:0 -2px #fd0,0 4px #0b0c0c;text-decoration:none;-webkit-box-decoration-break:clone;box-decoration-break:clone}.govuk-notification-banner__link:link,.govuk-notification-banner__link:visited{color:#1d70b8}.govuk-notification-banner__link:hover{color:#003078}.govuk-notification-banner__link:active,.govuk-notification-banner__link:focus{color:#0b0c0c}.govuk-notification-banner--success{border-color:#00703c;background-color:#00703c}.govuk-notification-banner--success .govuk-notification-banner__link:link,.govuk-notification-banner--success .govuk-notification-banner__link:visited{color:#00703c}.govuk-notification-banner--success .govuk-notification-banner__link:hover{color:#004e2a}.govuk-notification-banner--success .govuk-notification-banner__link:active{color:#00703c}.govuk-notification-banner--success .govuk-notification-banner__link:focus{color:#0b0c0c}.govuk-pagination{margin-bottom:20px;display:flex;flex-direction:column;align-items:center;flex-wrap:wrap}@media (min-width:40.0625em){.govuk-pagination{margin-bottom:30px;flex-direction:row;align-items:flex-start}}.govuk-pagination__list{margin:0;padding:0;list-style:none}.govuk-pagination__item,.govuk-pagination__next,.govuk-pagination__prev{font-family:GDS Transport,arial,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-weight:400;font-size:1rem;line-height:1.25;box-sizing:border-box;position:relative;min-width:45px;min-height:45px;padding:10px 15px;float:left}@media print{.govuk-pagination__item,.govuk-pagination__next,.govuk-pagination__prev{font-family:sans-serif}}@media (min-width:40.0625em){.govuk-pagination__item,.govuk-pagination__next,.govuk-pagination__prev{font-size:1.1875rem;line-height:1.3157894737}}@media print{.govuk-pagination__item,.govuk-pagination__next,.govuk-pagination__prev{font-size:14pt;line-height:1.15}}.govuk-pagination__item:hover,.govuk-pagination__next:hover,.govuk-pagination__prev:hover{background-color:#f3f2f1}.govuk-pagination__item{display:none;text-align:center}@media (min-width:40.0625em){.govuk-pagination__item{display:block}}.govuk-pagination__next,.govuk-pagination__prev{font-weight:700}.govuk-pagination__next .govuk-pagination__link,.govuk-pagination__prev .govuk-pagination__link{display:flex;align-items:center}.govuk-pagination__prev{padding-left:0}.govuk-pagination__next{padding-right:0}.govuk-pagination__item--current,.govuk-pagination__item--ellipses,.govuk-pagination__item:first-child,.govuk-pagination__item:last-child{display:block}.govuk-pagination__item--current{font-weight:700;outline:1px solid transparent;background-color:#1d70b8}.govuk-pagination__item--current:hover{background-color:#1d70b8}.govuk-pagination__item--current .govuk-pagination__link:link,.govuk-pagination__item--current .govuk-pagination__link:visited{color:#fff}.govuk-pagination__item--current .govuk-pagination__link:active,.govuk-pagination__item--current .govuk-pagination__link:hover{color:hsla(0,0%,100%,.99)}.govuk-pagination__item--current .govuk-pagination__link:focus{color:#0b0c0c}.govuk-pagination__item--ellipses{font-weight:700;color:#505a5f}.govuk-pagination__item--ellipses:hover{background-color:transparent}.govuk-pagination__link{display:block;min-width:15px}@media screen{.govuk-pagination__link:after{content:"";position:absolute;top:0;right:0;bottom:0;left:0}}.govuk-pagination__link:active .govuk-pagination__link-title--decorated,.govuk-pagination__link:hover .govuk-pagination__link-title--decorated{text-decoration:underline;text-decoration-thickness:max(1px,.0625rem);text-underline-offset:.1578em}.govuk-pagination__link:active .govuk-pagination__link-label,.govuk-pagination__link:active .govuk-pagination__link-title--decorated,.govuk-pagination__link:hover .govuk-pagination__link-label,.govuk-pagination__link:hover .govuk-pagination__link-title--decorated{text-decoration-thickness:max(3px,.1875rem,.12em);-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none;-webkit-text-decoration-skip:none;text-decoration-skip:none}.govuk-pagination__link:focus .govuk-pagination__icon{color:#0b0c0c}.govuk-pagination__link:focus .govuk-pagination__link-label,.govuk-pagination__link:focus .govuk-pagination__link-title--decorated{text-decoration:none}.govuk-pagination__link-label{font-weight:400;text-decoration:underline;text-decoration-thickness:max(1px,.0625rem);text-underline-offset:.1578em;display:inline-block;padding-left:30px}.govuk-pagination__icon{width:.9375rem;height:.8125rem;color:#505a5f;fill:currentcolor;forced-color-adjust:auto}.govuk-pagination__icon--prev{margin-right:15px}.govuk-pagination__icon--next{margin-left:15px}.govuk-pagination--block{display:block}.govuk-pagination--block .govuk-pagination__item{padding:15px;float:none}.govuk-pagination--block .govuk-pagination__next,.govuk-pagination--block .govuk-pagination__prev{padding-left:0;float:none}.govuk-pagination--block .govuk-pagination__next{padding-right:15px}.govuk-pagination--block .govuk-pagination__next .govuk-pagination__icon{margin-left:0}.govuk-pagination--block .govuk-pagination__prev+.govuk-pagination__next{border-top:1px solid #b1b4b6}.govuk-pagination--block .govuk-pagination__link,.govuk-pagination--block .govuk-pagination__link-title{display:inline}.govuk-pagination--block .govuk-pagination__link-title:after{content:"";display:block}.govuk-pagination--block .govuk-pagination__link{text-align:left}.govuk-pagination--block .govuk-pagination__link:focus .govuk-pagination__link-label{outline:3px solid transparent;color:#0b0c0c;background-color:#fd0;box-shadow:0 -2px #fd0,0 4px #0b0c0c;text-decoration:none;-webkit-box-decoration-break:clone;box-decoration-break:clone}.govuk-pagination--block .govuk-pagination__link:not(:focus){text-decoration:none}.govuk-pagination--block .govuk-pagination__icon{margin-right:10px}.govuk-panel{font-family:GDS Transport,arial,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-weight:400;font-size:1.5rem;line-height:1.0416666667;box-sizing:border-box;margin-bottom:15px;padding:35px;border:5px solid transparent;text-align:center}@media print{.govuk-panel{font-family:sans-serif}}@media (min-width:40.0625em){.govuk-panel{font-size:2.25rem;line-height:1.1111111111}}@media print{.govuk-panel{font-size:24pt;line-height:1.05}}@media (max-width:40.0525em){.govuk-panel{padding:10px;overflow-wrap:break-word;word-wrap:break-word}}.govuk-panel--confirmation{color:#fff;background:#00703c}@media print{.govuk-panel--confirmation{border-color:currentcolor;color:#000;background:none}}.govuk-panel__title{font-size:2rem;line-height:1.09375;font-weight:700;margin-top:0;margin-bottom:30px}@media (min-width:40.0625em){.govuk-panel__title{font-size:3rem;line-height:1.0416666667}}@media print{.govuk-panel__title{font-size:32pt;line-height:1.15}}.govuk-panel__title:last-child{margin-bottom:0}@media (min-width:20em){.govuk-password-input__wrapper{flex-direction:row;align-items:flex-start}}.govuk-password-input__input::-ms-reveal{display:none}.govuk-password-input__toggle{margin-top:5px;margin-bottom:0}.govuk-password-input__toggle[hidden]{display:none}@media (min-width:20em){.govuk-password-input__toggle{width:auto;flex-shrink:0;flex-basis:5em;margin-top:0;margin-left:5px}}.govuk-tag{font-family:GDS Transport,arial,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-weight:400;font-size:1rem;line-height:1.25;display:inline-block;max-width:160px;margin-top:-2px;margin-bottom:-3px;padding:2px 8px 3px;color:#0c2d4a;background-color:#bbd4ea;text-decoration:none;overflow-wrap:break-word}@media print{.govuk-tag{font-family:sans-serif}}@media (min-width:40.0625em){.govuk-tag{font-size:1.1875rem;line-height:1.3157894737}}@media print{.govuk-tag{font-size:14pt;line-height:1.15}}@media screen and (forced-colors:active){.govuk-tag{font-weight:700}}.govuk-tag--grey{color:#282d30;background-color:#e5e6e7}.govuk-tag--purple{color:#491644;background-color:#efdfed}.govuk-tag--turquoise{color:#10403c;background-color:#d4ecea}.govuk-tag--blue{color:#0c2d4a;background-color:#bbd4ea}.govuk-tag--light-blue{color:#0c2d4a;background-color:#e8f1f8}.govuk-tag--yellow{color:#594d00;background-color:#fff7bf}.govuk-tag--orange{color:#6e3619;background-color:#fcd6c3}.govuk-tag--red{color:#2a0b06;background-color:#f4cdc6}.govuk-tag--pink{color:#6b1c40;background-color:#f9e1ec}.govuk-tag--green{color:#005a30;background-color:#cce2d8}.govuk-phase-banner{padding-top:10px;padding-bottom:10px;border-bottom:1px solid #b1b4b6}.govuk-phase-banner__content{font-family:GDS Transport,arial,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-weight:400;font-size:.875rem;line-height:1.1428571429;color:#0b0c0c;display:table;margin:0}@media print{.govuk-phase-banner__content{font-family:sans-serif}}@media (min-width:40.0625em){.govuk-phase-banner__content{font-size:1rem;line-height:1.25}}@media print{.govuk-phase-banner__content{font-size:14pt;line-height:1.2;color:#000}}.govuk-phase-banner__content__tag{font-size:.875rem;line-height:1.1428571429;margin-right:10px}@media (min-width:40.0625em){.govuk-phase-banner__content__tag{font-size:1rem;line-height:1.25}}@media print{.govuk-phase-banner__content__tag{font-size:14pt;line-height:1.2}}.govuk-phase-banner__text{display:table-cell;vertical-align:middle}.govuk-radios__item{display:flex;flex-wrap:wrap;position:relative;margin-bottom:10px}.govuk-radios__item:last-child,.govuk-radios__item:last-of-type{margin-bottom:0}.govuk-radios__input{z-index:1;width:44px;height:44px;margin:0;opacity:0;cursor:pointer}.govuk-radios__label{align-self:center;max-width:calc(100% - 74px);margin-bottom:0;padding:7px 15px;cursor:pointer;touch-action:manipulation}.govuk-radios__label:before{content:"";box-sizing:border-box;position:absolute;top:2px;left:2px;width:40px;height:40px;border:2px solid;border-radius:50%;background:transparent}.govuk-radios__label:after{content:"";position:absolute;top:12px;left:12px;width:0;height:0;border:10px solid;border-radius:50%;opacity:0;background:currentcolor}.govuk-radios__hint{display:block;width:100%;margin-top:-5px;padding-right:15px;padding-left:59px}.govuk-label:not(.govuk-label--m):not(.govuk-label--l):not(.govuk-label--xl)+.govuk-radios__hint{margin-bottom:0}.govuk-radios__input:focus+.govuk-radios__label:before{border-width:4px;outline:3px solid transparent;outline-offset:1px;box-shadow:0 0 0 4px #fd0}@media (-ms-high-contrast:active),screen and (forced-colors:active){.govuk-radios__input:focus+.govuk-radios__label:before{outline-color:Highlight}}.govuk-radios__input:checked+.govuk-radios__label:after{opacity:1}.govuk-radios__input:disabled,.govuk-radios__input:disabled+.govuk-radios__label{cursor:not-allowed}.govuk-radios__input:disabled+.govuk-radios__label,.govuk-radios__input:disabled~.govuk-hint{opacity:.5}@media (min-width:40.0625em){.govuk-radios--inline{display:flex;flex-wrap:wrap;align-items:flex-start}.govuk-radios--inline .govuk-radios__item{margin-right:20px}}.govuk-radios__divider{font-family:GDS Transport,arial,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-weight:400;font-size:1rem;line-height:1.25;color:#0b0c0c;width:40px;margin-bottom:10px;text-align:center}@media print{.govuk-radios__divider{font-family:sans-serif}}@media (min-width:40.0625em){.govuk-radios__divider{font-size:1.1875rem;line-height:1.3157894737}}@media print{.govuk-radios__divider{font-size:14pt;line-height:1.15;color:#000}}.govuk-radios__conditional{margin-bottom:15px;margin-left:20px;padding-left:35px;border-left:4px solid #b1b4b6}@media (min-width:40.0625em){.govuk-radios__conditional{margin-bottom:20px}}.govuk-frontend-supported .govuk-radios__conditional--hidden{display:none}.govuk-radios--small .govuk-radios__item,.govuk-radios__conditional>:last-child{margin-bottom:0}.govuk-radios--small .govuk-radios__input{margin-left:-10px}.govuk-radios--small .govuk-radios__label{padding-left:1px}.govuk-radios--small .govuk-radios__label:before{top:10px;left:0;width:24px;height:24px}.govuk-radios--small .govuk-radios__label:after{top:17px;left:7px;border-width:5px}.govuk-radios--small .govuk-radios__hint{padding-left:34px}.govuk-radios--small .govuk-radios__conditional{margin-left:10px;padding-left:20px}.govuk-radios--small .govuk-radios__divider{width:24px;margin-bottom:5px}.govuk-radios--small .govuk-radios__item:hover .govuk-radios__input:not(:disabled)+.govuk-radios__label:before{outline:4px dashed transparent;outline-offset:1px;box-shadow:0 0 0 10px #b1b4b6}.govuk-radios--small .govuk-radios__item:hover .govuk-radios__input:focus+.govuk-radios__label:before{box-shadow:0 0 0 4px 0 0 0 10px #fd0 #b1b4b6}@media (-ms-high-contrast:active),screen and (forced-colors:active){.govuk-radios--small .govuk-radios__item:hover .govuk-radios__input:focus+.govuk-radios__label:before{outline-color:Highlight}}@media (hover:none),(pointer:coarse){.govuk-radios--small .govuk-radios__item:hover .govuk-radios__input:not(:disabled)+.govuk-radios__label:before{box-shadow:none}.govuk-radios--small .govuk-radios__item:hover .govuk-radios__input:focus+.govuk-radios__label:before{box-shadow:0 0 0 4px #fd0}}.govuk-select{font-family:GDS Transport,arial,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-weight:400;font-size:1rem;line-height:1.25;box-sizing:border-box;min-width:11.5em;max-width:100%;height:2.5rem;padding:5px;border:2px solid #0b0c0c;color:#0b0c0c;background-color:#fff}@media print{.govuk-select{font-family:sans-serif}}@media (min-width:40.0625em){.govuk-select{font-size:1.1875rem;line-height:1.25}}@media print{.govuk-select{font-size:14pt;line-height:1.25}}.govuk-select:focus{outline:3px solid #fd0;outline-offset:0;box-shadow:inset 0 0 0 2px}.govuk-select:disabled{opacity:.5;color:inherit;cursor:not-allowed}.govuk-select option:active,.govuk-select option:checked,.govuk-select:focus::-ms-value{color:#fff;background-color:#1d70b8}.govuk-select--error{border-color:#d4351c}.govuk-select--error:focus{border-color:#0b0c0c}.govuk-skip-link{font-family:GDS Transport,arial,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-decoration:underline;text-decoration-thickness:max(1px,.0625rem);text-underline-offset:.1578em;font-size:.875rem;line-height:1.1428571429;display:block;padding:10px 15px}.govuk-skip-link:not(:active):not(:focus){position:absolute!important;width:1px!important;height:1px!important;margin:0!important;padding:0!important;overflow:hidden!important;clip:rect(0 0 0 0)!important;-webkit-clip-path:inset(50%)!important;clip-path:inset(50%)!important;border:0!important;white-space:nowrap!important;-webkit-user-select:none;-ms-user-select:none;user-select:none}@media print{.govuk-skip-link{font-family:sans-serif}}.govuk-skip-link:link,.govuk-skip-link:visited{color:#0b0c0c}@media print{.govuk-skip-link:link,.govuk-skip-link:visited{color:#000}}.govuk-skip-link:hover{color:rgba(11,12,12,.99)}.govuk-skip-link:active,.govuk-skip-link:focus{color:#0b0c0c}@media print{.govuk-skip-link:active,.govuk-skip-link:focus{color:#000}}@media (min-width:40.0625em){.govuk-skip-link{font-size:1rem;line-height:1.25}}@media print{.govuk-skip-link{font-size:14pt;line-height:1.2}}@supports (padding:max(calc(0px))){.govuk-skip-link{padding-right:max(15px,calc(15px + env(safe-area-inset-right)));padding-left:max(15px,calc(15px + env(safe-area-inset-left)))}}.govuk-skip-link:focus{outline:3px solid #fd0;outline-offset:0;background-color:#fd0}.govuk-skip-link-focused-element:focus{outline:none}.govuk-summary-list{font-family:GDS Transport,arial,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-weight:400;font-size:1rem;line-height:1.25;color:#0b0c0c;margin:0 0 20px}@media print{.govuk-summary-list{font-family:sans-serif}}@media (min-width:40.0625em){.govuk-summary-list{font-size:1.1875rem;line-height:1.3157894737}}@media print{.govuk-summary-list{font-size:14pt;line-height:1.15;color:#000}}@media (min-width:40.0625em){.govuk-summary-list{display:table;width:100%;table-layout:fixed;border-collapse:collapse;margin-bottom:30px}}.govuk-summary-list__row{border-bottom:1px solid #b1b4b6}@media (max-width:40.0525em){.govuk-summary-list__row{margin-bottom:15px}}@media (min-width:40.0625em){.govuk-summary-list__row{display:table-row}}.govuk-summary-list__row:not(.govuk-summary-list__row--no-actions)>:last-child{padding-right:0}@media (min-width:40.0625em){.govuk-summary-list__row--no-actions:after{content:"";display:table-cell;width:20%}}.govuk-summary-list__actions,.govuk-summary-list__key,.govuk-summary-list__value{margin:0}@media (min-width:40.0625em){.govuk-summary-list__actions,.govuk-summary-list__key,.govuk-summary-list__value{display:table-cell;padding-top:10px;padding-right:20px;padding-bottom:10px}}.govuk-summary-list__actions{margin-bottom:15px}@media (min-width:40.0625em){.govuk-summary-list__actions{width:20%;text-align:right}}.govuk-summary-list__key,.govuk-summary-list__value{word-wrap:break-word;overflow-wrap:break-word}.govuk-summary-list__key{margin-bottom:5px;font-weight:700}@media (min-width:40.0625em){.govuk-summary-list__key{width:30%}}@media (max-width:40.0525em){.govuk-summary-list__value{margin-bottom:15px}}.govuk-summary-list__value>p{margin-bottom:10px}.govuk-summary-list__value>:last-child{margin-bottom:0}.govuk-summary-list__actions-list{width:100%;margin:0;padding:0}.govuk-summary-list__actions-list-item{display:inline-block}@media (max-width:40.0525em){.govuk-summary-list__actions-list-item{margin-right:10px;padding-right:10px;border-right:1px solid #b1b4b6}.govuk-summary-list__actions-list-item:last-child{margin-right:0;padding-right:0;border:0}}@media (min-width:40.0625em){.govuk-summary-list__actions-list-item{margin-left:10px;padding-left:10px}.govuk-summary-list__actions-list-item:not(:first-child){border-left:1px solid #b1b4b6}.govuk-summary-list__actions-list-item:first-child{margin-left:0;padding-left:0;border:0}}.govuk-summary-list__actions-list-item .govuk-link:focus{isolation:isolate}.govuk-summary-list--no-border .govuk-summary-list__row{border:0}@media (min-width:40.0625em){.govuk-summary-list--no-border .govuk-summary-list__actions,.govuk-summary-list--no-border .govuk-summary-list__key,.govuk-summary-list--no-border .govuk-summary-list__value{padding-bottom:11px}}.govuk-summary-list__row--no-border{border:0}@media (min-width:40.0625em){.govuk-summary-list__row--no-border .govuk-summary-list__actions,.govuk-summary-list__row--no-border .govuk-summary-list__key,.govuk-summary-list__row--no-border .govuk-summary-list__value{padding-bottom:11px}}.govuk-summary-card{margin-bottom:20px;border:1px solid #b1b4b6}@media (min-width:40.0625em){.govuk-summary-card{margin-bottom:30px}}.govuk-summary-card__title-wrapper{padding:15px;border-bottom:1px solid transparent;background-color:#f3f2f1}@media (min-width:40.0625em){.govuk-summary-card__title-wrapper{display:flex;justify-content:space-between;flex-wrap:nowrap;padding:15px 20px}}.govuk-summary-card__title{font-family:GDS Transport,arial,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-weight:700;font-size:1rem;line-height:1.25;color:#0b0c0c;margin:5px 20px 10px 0}@media print{.govuk-summary-card__title{font-family:sans-serif}}@media (min-width:40.0625em){.govuk-summary-card__title{font-size:1.1875rem;line-height:1.3157894737}}@media print{.govuk-summary-card__title{font-size:14pt;line-height:1.15;color:#000}}@media (min-width:40.0625em){.govuk-summary-card__title{margin-bottom:5px}}.govuk-summary-card__actions{font-size:1rem;line-height:1.25;font-weight:700;display:flex;flex-wrap:wrap;row-gap:10px;margin:5px 0;padding:0;list-style:none}@media (min-width:40.0625em){.govuk-summary-card__actions{font-size:1.1875rem;line-height:1.3157894737}}@media print{.govuk-summary-card__actions{font-size:14pt;line-height:1.15}}@media (min-width:40.0625em){.govuk-summary-card__actions{justify-content:right;text-align:right}}.govuk-summary-card__action{display:inline;margin:0 10px 0 0;padding-right:10px;border-right:1px solid #b1b4b6}@media (min-width:40.0625em){.govuk-summary-card__action{margin-right:0}}@media (-ms-high-contrast:none),screen and (-ms-high-contrast:active){.govuk-summary-card__action{margin-bottom:5px}}.govuk-summary-card__action:last-child{margin:0;padding-right:0;border-right:none}@media (min-width:40.0625em){.govuk-summary-card__action:last-child{padding-left:10px}}@media (-ms-high-contrast:none),screen and (-ms-high-contrast:active){.govuk-summary-card__action:last-child{margin-bottom:0}}.govuk-summary-card__content{padding:15px 15px 0}@media (min-width:40.0625em){.govuk-summary-card__content{padding:15px 20px}}.govuk-summary-card__content .govuk-summary-list{margin-bottom:0}.govuk-summary-card__content .govuk-summary-list__row:last-of-type{margin-bottom:0;border-bottom:none}.govuk-table{font-family:GDS Transport,arial,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-weight:400;font-size:1rem;line-height:1.25;color:#0b0c0c;width:100%;margin-bottom:20px;border-spacing:0;border-collapse:collapse}@media print{.govuk-table{font-family:sans-serif}}@media (min-width:40.0625em){.govuk-table{font-size:1.1875rem;line-height:1.3157894737}}@media print{.govuk-table{font-size:14pt;line-height:1.15;color:#000}}@media (min-width:40.0625em){.govuk-table{margin-bottom:30px}}.govuk-table__header{font-weight:700}.govuk-table__cell,.govuk-table__header{padding:10px 20px 10px 0;border-bottom:1px solid #b1b4b6;text-align:left;vertical-align:top}.govuk-table__cell--numeric{font-variant-numeric:tabular-nums}.govuk-table__cell--numeric,.govuk-table__header--numeric{text-align:right}.govuk-table__cell:last-child,.govuk-table__header:last-child{padding-right:0}.govuk-table__caption{font-weight:700;display:table-caption;text-align:left}.govuk-table__caption--l,.govuk-table__caption--m,.govuk-table__caption--xl{margin-bottom:15px}.govuk-table__caption--xl{font-size:2rem;line-height:1.09375}@media (min-width:40.0625em){.govuk-table__caption--xl{font-size:3rem;line-height:1.0416666667}}@media print{.govuk-table__caption--xl{font-size:32pt;line-height:1.15}}.govuk-table__caption--l{font-size:1.5rem;line-height:1.0416666667}@media (min-width:40.0625em){.govuk-table__caption--l{font-size:2.25rem;line-height:1.1111111111}}@media print{.govuk-table__caption--l{font-size:24pt;line-height:1.05}}.govuk-table__caption--m{font-size:1.125rem;line-height:1.1111111111}@media (min-width:40.0625em){.govuk-table__caption--m{font-size:1.5rem;line-height:1.25}}@media print{.govuk-table__caption--m{font-size:18pt;line-height:1.15}}.govuk-tabs{margin-top:5px;margin-bottom:20px;font-family:GDS Transport,arial,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-weight:400;font-size:1rem;line-height:1.25}@media (min-width:40.0625em){.govuk-tabs{margin-bottom:30px}}@media print{.govuk-tabs{font-family:sans-serif}}@media (min-width:40.0625em){.govuk-tabs{font-size:1.1875rem;line-height:1.3157894737}}@media print{.govuk-tabs{font-size:14pt;line-height:1.15}}.govuk-tabs__title{font-size:1rem;line-height:1.25;font-weight:400;color:#0b0c0c;margin-bottom:10px}@media (min-width:40.0625em){.govuk-tabs__title{font-size:1.1875rem;line-height:1.3157894737}}@media print{.govuk-tabs__title{font-size:14pt;line-height:1.15;color:#000}}.govuk-tabs__list{padding:0;list-style:none;margin:0 0 20px}@media (min-width:40.0625em){.govuk-tabs__list{margin-bottom:30px}}.govuk-tabs__list-item{margin-left:25px}.govuk-tabs__list-item:before{color:#0b0c0c;content:"—";margin-left:-25px;padding-right:5px}@media print{.govuk-tabs__list-item:before{color:#000}}.govuk-tabs__tab{font-family:GDS Transport,arial,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-decoration:underline;text-decoration-thickness:max(1px,.0625rem);text-underline-offset:.1578em;display:inline-block;margin-bottom:10px}@media print{.govuk-tabs__tab{font-family:sans-serif}}.govuk-tabs__tab:hover{text-decoration-thickness:max(3px,.1875rem,.12em);-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none;-webkit-text-decoration-skip:none;text-decoration-skip:none}.govuk-tabs__tab:focus{outline:3px solid transparent;background-color:#fd0;box-shadow:0 -2px #fd0,0 4px #0b0c0c;text-decoration:none;-webkit-box-decoration-break:clone;box-decoration-break:clone}.govuk-tabs__tab:link{color:#1d70b8}.govuk-tabs__tab:visited{color:#4c2c92}.govuk-tabs__tab:hover{color:#003078}.govuk-tabs__tab:active,.govuk-tabs__tab:focus{color:#0b0c0c}.govuk-tabs__panel{margin-bottom:30px}@media (min-width:40.0625em){.govuk-tabs__panel{margin-bottom:50px}.govuk-frontend-supported .govuk-tabs__list{margin-bottom:0;border-bottom:1px solid #b1b4b6}.govuk-frontend-supported .govuk-tabs__list:after{content:"";display:block;clear:both}.govuk-frontend-supported .govuk-tabs__title{display:none}.govuk-frontend-supported .govuk-tabs__list-item{position:relative;margin-right:5px;margin-bottom:0;margin-left:0;padding:10px 20px;float:left;background-color:#f3f2f1;text-align:center}.govuk-frontend-supported .govuk-tabs__list-item:before{content:none}.govuk-frontend-supported .govuk-tabs__list-item--selected{position:relative;margin-top:-5px;margin-bottom:-1px;padding:14px 19px 16px;border:1px solid #b1b4b6;border-bottom:0;background-color:#fff}.govuk-frontend-supported .govuk-tabs__list-item--selected .govuk-tabs__tab{text-decoration:none}.govuk-frontend-supported .govuk-tabs__tab{margin-bottom:0}.govuk-frontend-supported .govuk-tabs__tab:link,.govuk-frontend-supported .govuk-tabs__tab:visited{color:#0b0c0c}}@media print and (min-width:40.0625em){.govuk-frontend-supported .govuk-tabs__tab:link,.govuk-frontend-supported .govuk-tabs__tab:visited{color:#000}}@media (min-width:40.0625em){.govuk-frontend-supported .govuk-tabs__tab:hover{color:rgba(11,12,12,.99)}.govuk-frontend-supported .govuk-tabs__tab:active,.govuk-frontend-supported .govuk-tabs__tab:focus{color:#0b0c0c}}@media print and (min-width:40.0625em){.govuk-frontend-supported .govuk-tabs__tab:active,.govuk-frontend-supported .govuk-tabs__tab:focus{color:#000}}@media (min-width:40.0625em){.govuk-frontend-supported .govuk-tabs__tab:after{content:"";position:absolute;top:0;right:0;bottom:0;left:0}.govuk-frontend-supported .govuk-tabs__panel{margin-bottom:0;padding:30px 20px;border:1px solid #b1b4b6;border-top:0}.govuk-frontend-supported .govuk-tabs__panel>:last-child{margin-bottom:0}.govuk-frontend-supported .govuk-tabs__panel--hidden{display:none}}.govuk-task-list{font-family:GDS Transport,arial,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-weight:400;font-size:1rem;line-height:1.25;margin-top:0;margin-bottom:20px;padding:0;list-style-type:none}@media print{.govuk-task-list{font-family:sans-serif}}@media (min-width:40.0625em){.govuk-task-list{font-size:1.1875rem;line-height:1.3157894737}}@media print{.govuk-task-list{font-size:14pt;line-height:1.15}}@media (min-width:40.0625em){.govuk-task-list{margin-bottom:30px}}.govuk-task-list__item{display:table;position:relative;width:100%;margin-bottom:0;padding-top:10px;padding-bottom:10px;border-bottom:1px solid #b1b4b6}.govuk-task-list__item:first-child{border-top:1px solid #b1b4b6}.govuk-task-list__item--with-link:hover{background:#f3f2f1}.govuk-task-list__name-and-hint{display:table-cell;vertical-align:top;color:#0b0c0c}@media print{.govuk-task-list__name-and-hint{color:#000}}.govuk-task-list__status{display:table-cell;padding-left:10px;text-align:right;vertical-align:top;color:#0b0c0c}@media print{.govuk-task-list__status{color:#000}}.govuk-task-list__status--cannot-start-yet{color:#505a5f}.govuk-task-list__link:after{content:"";display:block;position:absolute;top:0;right:0;bottom:0;left:0}.govuk-task-list__hint{margin-top:5px;color:#505a5f}.govuk-warning-text{font-family:GDS Transport,arial,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-weight:400;font-size:1rem;line-height:1.25;margin-bottom:20px;position:relative;padding:10px 0}@media print{.govuk-warning-text{font-family:sans-serif}}@media (min-width:40.0625em){.govuk-warning-text{font-size:1.1875rem;line-height:1.3157894737}}@media print{.govuk-warning-text{font-size:14pt;line-height:1.15}}@media (min-width:40.0625em){.govuk-warning-text{margin-bottom:30px}}.govuk-warning-text__icon{font-weight:700;box-sizing:border-box;display:inline-block;position:absolute;left:0;min-width:35px;min-height:35px;margin-top:-7px;border:3px solid #0b0c0c;border-radius:50%;color:#fff;background:#0b0c0c;font-size:30px;line-height:29px;text-align:center;-webkit-user-select:none;-ms-user-select:none;user-select:none;forced-color-adjust:none}@media (min-width:40.0625em){.govuk-warning-text__icon{margin-top:-5px}}@media screen and (forced-colors:active){.govuk-warning-text__icon{border-color:windowText;color:windowText;background:transparent}}.govuk-warning-text__text{color:#0b0c0c;display:block;padding-left:45px}@media print{.govuk-warning-text__text{color:#000}}.govuk-clearfix:after{content:"";display:block;clear:both}.govuk-visually-hidden{position:absolute!important;width:1px!important;height:1px!important;margin:0!important;padding:0!important;overflow:hidden!important;clip:rect(0 0 0 0)!important;-webkit-clip-path:inset(50%)!important;clip-path:inset(50%)!important;border:0!important;white-space:nowrap!important;-webkit-user-select:none;-ms-user-select:none;user-select:none}.govuk-visually-hidden:after,.govuk-visually-hidden:before{content:" "}.govuk-visually-hidden-focusable:not(:active):not(:focus){position:absolute!important;width:1px!important;height:1px!important;margin:0!important;padding:0!important;overflow:hidden!important;clip:rect(0 0 0 0)!important;-webkit-clip-path:inset(50%)!important;clip-path:inset(50%)!important;border:0!important;white-space:nowrap!important;-webkit-user-select:none;-ms-user-select:none;user-select:none}.govuk-\!-display-inline{display:inline!important}.govuk-\!-display-inline-block{display:inline-block!important}.govuk-\!-display-block{display:block!important}.govuk-\!-display-none{display:none!important}@media print{.govuk-\!-display-none-print{display:none!important}}.govuk-\!-margin-0{margin:0!important}.govuk-\!-margin-top-0{margin-top:0!important}.govuk-\!-margin-right-0{margin-right:0!important}.govuk-\!-margin-bottom-0{margin-bottom:0!important}.govuk-\!-margin-left-0{margin-left:0!important}.govuk-\!-margin-1{margin:5px!important}.govuk-\!-margin-top-1{margin-top:5px!important}.govuk-\!-margin-right-1{margin-right:5px!important}.govuk-\!-margin-bottom-1{margin-bottom:5px!important}.govuk-\!-margin-left-1{margin-left:5px!important}.govuk-\!-margin-2{margin:10px!important}.govuk-\!-margin-top-2{margin-top:10px!important}.govuk-\!-margin-right-2{margin-right:10px!important}.govuk-\!-margin-bottom-2{margin-bottom:10px!important}.govuk-\!-margin-left-2{margin-left:10px!important}.govuk-\!-margin-3{margin:15px!important}.govuk-\!-margin-top-3{margin-top:15px!important}.govuk-\!-margin-right-3{margin-right:15px!important}.govuk-\!-margin-bottom-3{margin-bottom:15px!important}.govuk-\!-margin-left-3{margin-left:15px!important}.govuk-\!-margin-4{margin:15px!important}@media (min-width:40.0625em){.govuk-\!-margin-4{margin:20px!important}}.govuk-\!-margin-top-4{margin-top:15px!important}@media (min-width:40.0625em){.govuk-\!-margin-top-4{margin-top:20px!important}}.govuk-\!-margin-right-4{margin-right:15px!important}@media (min-width:40.0625em){.govuk-\!-margin-right-4{margin-right:20px!important}}.govuk-\!-margin-bottom-4{margin-bottom:15px!important}@media (min-width:40.0625em){.govuk-\!-margin-bottom-4{margin-bottom:20px!important}}.govuk-\!-margin-left-4{margin-left:15px!important}@media (min-width:40.0625em){.govuk-\!-margin-left-4{margin-left:20px!important}}.govuk-\!-margin-5{margin:15px!important}@media (min-width:40.0625em){.govuk-\!-margin-5{margin:25px!important}}.govuk-\!-margin-top-5{margin-top:15px!important}@media (min-width:40.0625em){.govuk-\!-margin-top-5{margin-top:25px!important}}.govuk-\!-margin-right-5{margin-right:15px!important}@media (min-width:40.0625em){.govuk-\!-margin-right-5{margin-right:25px!important}}.govuk-\!-margin-bottom-5{margin-bottom:15px!important}@media (min-width:40.0625em){.govuk-\!-margin-bottom-5{margin-bottom:25px!important}}.govuk-\!-margin-left-5{margin-left:15px!important}@media (min-width:40.0625em){.govuk-\!-margin-left-5{margin-left:25px!important}}.govuk-\!-margin-6{margin:20px!important}@media (min-width:40.0625em){.govuk-\!-margin-6{margin:30px!important}}.govuk-\!-margin-top-6{margin-top:20px!important}@media (min-width:40.0625em){.govuk-\!-margin-top-6{margin-top:30px!important}}.govuk-\!-margin-right-6{margin-right:20px!important}@media (min-width:40.0625em){.govuk-\!-margin-right-6{margin-right:30px!important}}.govuk-\!-margin-bottom-6{margin-bottom:20px!important}@media (min-width:40.0625em){.govuk-\!-margin-bottom-6{margin-bottom:30px!important}}.govuk-\!-margin-left-6{margin-left:20px!important}@media (min-width:40.0625em){.govuk-\!-margin-left-6{margin-left:30px!important}}.govuk-\!-margin-7{margin:25px!important}@media (min-width:40.0625em){.govuk-\!-margin-7{margin:40px!important}}.govuk-\!-margin-top-7{margin-top:25px!important}@media (min-width:40.0625em){.govuk-\!-margin-top-7{margin-top:40px!important}}.govuk-\!-margin-right-7{margin-right:25px!important}@media (min-width:40.0625em){.govuk-\!-margin-right-7{margin-right:40px!important}}.govuk-\!-margin-bottom-7{margin-bottom:25px!important}@media (min-width:40.0625em){.govuk-\!-margin-bottom-7{margin-bottom:40px!important}}.govuk-\!-margin-left-7{margin-left:25px!important}@media (min-width:40.0625em){.govuk-\!-margin-left-7{margin-left:40px!important}}.govuk-\!-margin-8{margin:30px!important}@media (min-width:40.0625em){.govuk-\!-margin-8{margin:50px!important}}.govuk-\!-margin-top-8{margin-top:30px!important}@media (min-width:40.0625em){.govuk-\!-margin-top-8{margin-top:50px!important}}.govuk-\!-margin-right-8{margin-right:30px!important}@media (min-width:40.0625em){.govuk-\!-margin-right-8{margin-right:50px!important}}.govuk-\!-margin-bottom-8{margin-bottom:30px!important}@media (min-width:40.0625em){.govuk-\!-margin-bottom-8{margin-bottom:50px!important}}.govuk-\!-margin-left-8{margin-left:30px!important}@media (min-width:40.0625em){.govuk-\!-margin-left-8{margin-left:50px!important}}.govuk-\!-margin-9{margin:40px!important}@media (min-width:40.0625em){.govuk-\!-margin-9{margin:60px!important}}.govuk-\!-margin-top-9{margin-top:40px!important}@media (min-width:40.0625em){.govuk-\!-margin-top-9{margin-top:60px!important}}.govuk-\!-margin-right-9{margin-right:40px!important}@media (min-width:40.0625em){.govuk-\!-margin-right-9{margin-right:60px!important}}.govuk-\!-margin-bottom-9{margin-bottom:40px!important}@media (min-width:40.0625em){.govuk-\!-margin-bottom-9{margin-bottom:60px!important}}.govuk-\!-margin-left-9{margin-left:40px!important}@media (min-width:40.0625em){.govuk-\!-margin-left-9{margin-left:60px!important}}.govuk-\!-padding-0{padding:0!important}.govuk-\!-padding-top-0{padding-top:0!important}.govuk-\!-padding-right-0{padding-right:0!important}.govuk-\!-padding-bottom-0{padding-bottom:0!important}.govuk-\!-padding-left-0{padding-left:0!important}.govuk-\!-padding-1{padding:5px!important}.govuk-\!-padding-top-1{padding-top:5px!important}.govuk-\!-padding-right-1{padding-right:5px!important}.govuk-\!-padding-bottom-1{padding-bottom:5px!important}.govuk-\!-padding-left-1{padding-left:5px!important}.govuk-\!-padding-2{padding:10px!important}.govuk-\!-padding-top-2{padding-top:10px!important}.govuk-\!-padding-right-2{padding-right:10px!important}.govuk-\!-padding-bottom-2{padding-bottom:10px!important}.govuk-\!-padding-left-2{padding-left:10px!important}.govuk-\!-padding-3{padding:15px!important}.govuk-\!-padding-top-3{padding-top:15px!important}.govuk-\!-padding-right-3{padding-right:15px!important}.govuk-\!-padding-bottom-3{padding-bottom:15px!important}.govuk-\!-padding-left-3{padding-left:15px!important}.govuk-\!-padding-4{padding:15px!important}@media (min-width:40.0625em){.govuk-\!-padding-4{padding:20px!important}}.govuk-\!-padding-top-4{padding-top:15px!important}@media (min-width:40.0625em){.govuk-\!-padding-top-4{padding-top:20px!important}}.govuk-\!-padding-right-4{padding-right:15px!important}@media (min-width:40.0625em){.govuk-\!-padding-right-4{padding-right:20px!important}}.govuk-\!-padding-bottom-4{padding-bottom:15px!important}@media (min-width:40.0625em){.govuk-\!-padding-bottom-4{padding-bottom:20px!important}}.govuk-\!-padding-left-4{padding-left:15px!important}@media (min-width:40.0625em){.govuk-\!-padding-left-4{padding-left:20px!important}}.govuk-\!-padding-5{padding:15px!important}@media (min-width:40.0625em){.govuk-\!-padding-5{padding:25px!important}}.govuk-\!-padding-top-5{padding-top:15px!important}@media (min-width:40.0625em){.govuk-\!-padding-top-5{padding-top:25px!important}}.govuk-\!-padding-right-5{padding-right:15px!important}@media (min-width:40.0625em){.govuk-\!-padding-right-5{padding-right:25px!important}}.govuk-\!-padding-bottom-5{padding-bottom:15px!important}@media (min-width:40.0625em){.govuk-\!-padding-bottom-5{padding-bottom:25px!important}}.govuk-\!-padding-left-5{padding-left:15px!important}@media (min-width:40.0625em){.govuk-\!-padding-left-5{padding-left:25px!important}}.govuk-\!-padding-6{padding:20px!important}@media (min-width:40.0625em){.govuk-\!-padding-6{padding:30px!important}}.govuk-\!-padding-top-6{padding-top:20px!important}@media (min-width:40.0625em){.govuk-\!-padding-top-6{padding-top:30px!important}}.govuk-\!-padding-right-6{padding-right:20px!important}@media (min-width:40.0625em){.govuk-\!-padding-right-6{padding-right:30px!important}}.govuk-\!-padding-bottom-6{padding-bottom:20px!important}@media (min-width:40.0625em){.govuk-\!-padding-bottom-6{padding-bottom:30px!important}}.govuk-\!-padding-left-6{padding-left:20px!important}@media (min-width:40.0625em){.govuk-\!-padding-left-6{padding-left:30px!important}}.govuk-\!-padding-7{padding:25px!important}@media (min-width:40.0625em){.govuk-\!-padding-7{padding:40px!important}}.govuk-\!-padding-top-7{padding-top:25px!important}@media (min-width:40.0625em){.govuk-\!-padding-top-7{padding-top:40px!important}}.govuk-\!-padding-right-7{padding-right:25px!important}@media (min-width:40.0625em){.govuk-\!-padding-right-7{padding-right:40px!important}}.govuk-\!-padding-bottom-7{padding-bottom:25px!important}@media (min-width:40.0625em){.govuk-\!-padding-bottom-7{padding-bottom:40px!important}}.govuk-\!-padding-left-7{padding-left:25px!important}@media (min-width:40.0625em){.govuk-\!-padding-left-7{padding-left:40px!important}}.govuk-\!-padding-8{padding:30px!important}@media (min-width:40.0625em){.govuk-\!-padding-8{padding:50px!important}}.govuk-\!-padding-top-8{padding-top:30px!important}@media (min-width:40.0625em){.govuk-\!-padding-top-8{padding-top:50px!important}}.govuk-\!-padding-right-8{padding-right:30px!important}@media (min-width:40.0625em){.govuk-\!-padding-right-8{padding-right:50px!important}}.govuk-\!-padding-bottom-8{padding-bottom:30px!important}@media (min-width:40.0625em){.govuk-\!-padding-bottom-8{padding-bottom:50px!important}}.govuk-\!-padding-left-8{padding-left:30px!important}@media (min-width:40.0625em){.govuk-\!-padding-left-8{padding-left:50px!important}}.govuk-\!-padding-9{padding:40px!important}@media (min-width:40.0625em){.govuk-\!-padding-9{padding:60px!important}}.govuk-\!-padding-top-9{padding-top:40px!important}@media (min-width:40.0625em){.govuk-\!-padding-top-9{padding-top:60px!important}}.govuk-\!-padding-right-9{padding-right:40px!important}@media (min-width:40.0625em){.govuk-\!-padding-right-9{padding-right:60px!important}}.govuk-\!-padding-bottom-9{padding-bottom:40px!important}@media (min-width:40.0625em){.govuk-\!-padding-bottom-9{padding-bottom:60px!important}}.govuk-\!-padding-left-9{padding-left:40px!important}@media (min-width:40.0625em){.govuk-\!-padding-left-9{padding-left:60px!important}}.govuk-\!-static-margin-0{margin:0!important}.govuk-\!-static-margin-top-0{margin-top:0!important}.govuk-\!-static-margin-right-0{margin-right:0!important}.govuk-\!-static-margin-bottom-0{margin-bottom:0!important}.govuk-\!-static-margin-left-0{margin-left:0!important}.govuk-\!-static-margin-1{margin:5px!important}.govuk-\!-static-margin-top-1{margin-top:5px!important}.govuk-\!-static-margin-right-1{margin-right:5px!important}.govuk-\!-static-margin-bottom-1{margin-bottom:5px!important}.govuk-\!-static-margin-left-1{margin-left:5px!important}.govuk-\!-static-margin-2{margin:10px!important}.govuk-\!-static-margin-top-2{margin-top:10px!important}.govuk-\!-static-margin-right-2{margin-right:10px!important}.govuk-\!-static-margin-bottom-2{margin-bottom:10px!important}.govuk-\!-static-margin-left-2{margin-left:10px!important}.govuk-\!-static-margin-3{margin:15px!important}.govuk-\!-static-margin-top-3{margin-top:15px!important}.govuk-\!-static-margin-right-3{margin-right:15px!important}.govuk-\!-static-margin-bottom-3{margin-bottom:15px!important}.govuk-\!-static-margin-left-3{margin-left:15px!important}.govuk-\!-static-margin-4{margin:20px!important}.govuk-\!-static-margin-top-4{margin-top:20px!important}.govuk-\!-static-margin-right-4{margin-right:20px!important}.govuk-\!-static-margin-bottom-4{margin-bottom:20px!important}.govuk-\!-static-margin-left-4{margin-left:20px!important}.govuk-\!-static-margin-5{margin:25px!important}.govuk-\!-static-margin-top-5{margin-top:25px!important}.govuk-\!-static-margin-right-5{margin-right:25px!important}.govuk-\!-static-margin-bottom-5{margin-bottom:25px!important}.govuk-\!-static-margin-left-5{margin-left:25px!important}.govuk-\!-static-margin-6{margin:30px!important}.govuk-\!-static-margin-top-6{margin-top:30px!important}.govuk-\!-static-margin-right-6{margin-right:30px!important}.govuk-\!-static-margin-bottom-6{margin-bottom:30px!important}.govuk-\!-static-margin-left-6{margin-left:30px!important}.govuk-\!-static-margin-7{margin:40px!important}.govuk-\!-static-margin-top-7{margin-top:40px!important}.govuk-\!-static-margin-right-7{margin-right:40px!important}.govuk-\!-static-margin-bottom-7{margin-bottom:40px!important}.govuk-\!-static-margin-left-7{margin-left:40px!important}.govuk-\!-static-margin-8{margin:50px!important}.govuk-\!-static-margin-top-8{margin-top:50px!important}.govuk-\!-static-margin-right-8{margin-right:50px!important}.govuk-\!-static-margin-bottom-8{margin-bottom:50px!important}.govuk-\!-static-margin-left-8{margin-left:50px!important}.govuk-\!-static-margin-9{margin:60px!important}.govuk-\!-static-margin-top-9{margin-top:60px!important}.govuk-\!-static-margin-right-9{margin-right:60px!important}.govuk-\!-static-margin-bottom-9{margin-bottom:60px!important}.govuk-\!-static-margin-left-9{margin-left:60px!important}.govuk-\!-static-padding-0{padding:0!important}.govuk-\!-static-padding-top-0{padding-top:0!important}.govuk-\!-static-padding-right-0{padding-right:0!important}.govuk-\!-static-padding-bottom-0{padding-bottom:0!important}.govuk-\!-static-padding-left-0{padding-left:0!important}.govuk-\!-static-padding-1{padding:5px!important}.govuk-\!-static-padding-top-1{padding-top:5px!important}.govuk-\!-static-padding-right-1{padding-right:5px!important}.govuk-\!-static-padding-bottom-1{padding-bottom:5px!important}.govuk-\!-static-padding-left-1{padding-left:5px!important}.govuk-\!-static-padding-2{padding:10px!important}.govuk-\!-static-padding-top-2{padding-top:10px!important}.govuk-\!-static-padding-right-2{padding-right:10px!important}.govuk-\!-static-padding-bottom-2{padding-bottom:10px!important}.govuk-\!-static-padding-left-2{padding-left:10px!important}.govuk-\!-static-padding-3{padding:15px!important}.govuk-\!-static-padding-top-3{padding-top:15px!important}.govuk-\!-static-padding-right-3{padding-right:15px!important}.govuk-\!-static-padding-bottom-3{padding-bottom:15px!important}.govuk-\!-static-padding-left-3{padding-left:15px!important}.govuk-\!-static-padding-4{padding:20px!important}.govuk-\!-static-padding-top-4{padding-top:20px!important}.govuk-\!-static-padding-right-4{padding-right:20px!important}.govuk-\!-static-padding-bottom-4{padding-bottom:20px!important}.govuk-\!-static-padding-left-4{padding-left:20px!important}.govuk-\!-static-padding-5{padding:25px!important}.govuk-\!-static-padding-top-5{padding-top:25px!important}.govuk-\!-static-padding-right-5{padding-right:25px!important}.govuk-\!-static-padding-bottom-5{padding-bottom:25px!important}.govuk-\!-static-padding-left-5{padding-left:25px!important}.govuk-\!-static-padding-6{padding:30px!important}.govuk-\!-static-padding-top-6{padding-top:30px!important}.govuk-\!-static-padding-right-6{padding-right:30px!important}.govuk-\!-static-padding-bottom-6{padding-bottom:30px!important}.govuk-\!-static-padding-left-6{padding-left:30px!important}.govuk-\!-static-padding-7{padding:40px!important}.govuk-\!-static-padding-top-7{padding-top:40px!important}.govuk-\!-static-padding-right-7{padding-right:40px!important}.govuk-\!-static-padding-bottom-7{padding-bottom:40px!important}.govuk-\!-static-padding-left-7{padding-left:40px!important}.govuk-\!-static-padding-8{padding:50px!important}.govuk-\!-static-padding-top-8{padding-top:50px!important}.govuk-\!-static-padding-right-8{padding-right:50px!important}.govuk-\!-static-padding-bottom-8{padding-bottom:50px!important}.govuk-\!-static-padding-left-8{padding-left:50px!important}.govuk-\!-static-padding-9{padding:60px!important}.govuk-\!-static-padding-top-9{padding-top:60px!important}.govuk-\!-static-padding-right-9{padding-right:60px!important}.govuk-\!-static-padding-bottom-9{padding-bottom:60px!important}.govuk-\!-static-padding-left-9{padding-left:60px!important}.govuk-\!-text-align-left{text-align:left!important}.govuk-\!-text-align-centre{text-align:center!important}.govuk-\!-text-align-right{text-align:right!important}.govuk-\!-font-size-80{font-size:3.3125rem!important;line-height:1.0377358491!important}@media (min-width:40.0625em){.govuk-\!-font-size-80{font-size:5rem!important;line-height:1!important}}@media print{.govuk-\!-font-size-80{font-size:53pt!important;line-height:1.1!important}}.govuk-\!-font-size-48{font-size:2rem!important;line-height:1.09375!important}@media (min-width:40.0625em){.govuk-\!-font-size-48{font-size:3rem!important;line-height:1.0416666667!important}}@media print{.govuk-\!-font-size-48{font-size:32pt!important;line-height:1.15!important}}.govuk-\!-font-size-36{font-size:1.5rem!important;line-height:1.0416666667!important}@media (min-width:40.0625em){.govuk-\!-font-size-36{font-size:2.25rem!important;line-height:1.1111111111!important}}@media print{.govuk-\!-font-size-36{font-size:24pt!important;line-height:1.05!important}}.govuk-\!-font-size-27{font-size:1.125rem!important;line-height:1.1111111111!important}@media (min-width:40.0625em){.govuk-\!-font-size-27{font-size:1.6875rem!important;line-height:1.1111111111!important}}@media print{.govuk-\!-font-size-27{font-size:18pt!important;line-height:1.15!important}}.govuk-\!-font-size-24{font-size:1.125rem!important;line-height:1.1111111111!important}@media (min-width:40.0625em){.govuk-\!-font-size-24{font-size:1.5rem!important;line-height:1.25!important}}@media print{.govuk-\!-font-size-24{font-size:18pt!important;line-height:1.15!important}}.govuk-\!-font-size-19{font-size:1rem!important;line-height:1.25!important}@media (min-width:40.0625em){.govuk-\!-font-size-19{font-size:1.1875rem!important;line-height:1.3157894737!important}}@media print{.govuk-\!-font-size-19{font-size:14pt!important;line-height:1.15!important}}.govuk-\!-font-size-16{font-size:.875rem!important;line-height:1.1428571429!important}@media (min-width:40.0625em){.govuk-\!-font-size-16{font-size:1rem!important;line-height:1.25!important}}@media print{.govuk-\!-font-size-16{font-size:14pt!important;line-height:1.2!important}}.govuk-\!-font-size-14{font-size:.75rem!important;line-height:1.25!important}@media (min-width:40.0625em){.govuk-\!-font-size-14{font-size:.875rem!important;line-height:1.4285714286!important}}@media print{.govuk-\!-font-size-14{font-size:12pt!important;line-height:1.2!important}}.govuk-\!-font-weight-regular{font-weight:400!important}.govuk-\!-font-weight-bold{font-weight:700!important}.govuk-\!-font-tabular-numbers{font-variant-numeric:tabular-nums!important}.govuk-\!-width-full,.govuk-\!-width-three-quarters{width:100%!important}@media (min-width:40.0625em){.govuk-\!-width-three-quarters{width:75%!important}}.govuk-\!-width-two-thirds{width:100%!important}@media (min-width:40.0625em){.govuk-\!-width-two-thirds{width:66.66%!important}}.govuk-\!-width-one-half{width:100%!important}@media (min-width:40.0625em){.govuk-\!-width-one-half{width:50%!important}}.govuk-\!-width-one-third{width:100%!important}@media (min-width:40.0625em){.govuk-\!-width-one-third{width:33.33%!important}}.govuk-\!-width-one-quarter{width:100%!important}@media (min-width:40.0625em){.govuk-\!-width-one-quarter{width:25%!important}} -/*# sourceMappingURL=govuk-frontend-5.4.1.min.css.map */ diff --git a/Frontend/CO.CDP.OrganisationApp/wwwroot/css/govuk-frontend-5.4.1.min.css.map b/Frontend/CO.CDP.OrganisationApp/wwwroot/css/govuk-frontend-5.4.1.min.css.map deleted file mode 100644 index e4618d38d..000000000 --- a/Frontend/CO.CDP.OrganisationApp/wwwroot/css/govuk-frontend-5.4.1.min.css.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["../packages/govuk-frontend/src/govuk/components/character-count/_index.scss","../packages/govuk-frontend/src/govuk/all.scss","../packages/govuk-frontend/src/govuk/core/_govuk-frontend-properties.scss","../packages/govuk-frontend/src/govuk/core/_links.scss","../packages/govuk-frontend/src/govuk/helpers/_typography.scss","../packages/govuk-frontend/src/govuk/settings/_typography-font.scss","../packages/govuk-frontend/src/govuk/helpers/_links.scss","../packages/govuk-frontend/src/govuk/settings/_links.scss","../packages/govuk-frontend/src/govuk/helpers/_font-faces.scss","../packages/govuk-frontend/src/govuk/vendor/_sass-mq.scss","../packages/govuk-frontend/src/govuk/helpers/_focused.scss","../packages/govuk-frontend/src/govuk/settings/_colours-applied.scss","../packages/govuk-frontend/src/govuk/core/_lists.scss","../packages/govuk-frontend/src/govuk/helpers/_spacing.scss","../packages/govuk-frontend/src/govuk/core/_typography.scss","../packages/govuk-frontend/src/govuk/core/_section-break.scss","../packages/govuk-frontend/src/govuk/objects/_button-group.scss","../packages/govuk-frontend/src/govuk/objects/_form-group.scss","../packages/govuk-frontend/src/govuk/helpers/_clearfix.scss","../packages/govuk-frontend/src/govuk/objects/_grid.scss","../packages/govuk-frontend/src/govuk/helpers/_grid.scss","../packages/govuk-frontend/src/govuk/objects/_main-wrapper.scss","../packages/govuk-frontend/src/govuk/objects/_template.scss","../packages/govuk-frontend/src/govuk/objects/_width-container.scss","../packages/govuk-frontend/src/govuk/settings/_measurements.scss","../packages/govuk-frontend/src/govuk/components/accordion/_index.scss","../packages/govuk-frontend/src/govuk/components/back-link/_index.scss","../packages/govuk-frontend/src/govuk/components/breadcrumbs/_index.scss","../packages/govuk-frontend/src/govuk/components/button/_index.scss","../packages/govuk-frontend/src/govuk/components/error-message/_index.scss","../packages/govuk-frontend/src/govuk/components/hint/_index.scss","../packages/govuk-frontend/src/govuk/components/label/_index.scss","../packages/govuk-frontend/src/govuk/components/textarea/_index.scss","../packages/govuk-frontend/src/govuk/components/fieldset/_index.scss","../packages/govuk-frontend/src/govuk/components/checkboxes/_index.scss","../packages/govuk-frontend/src/govuk/components/cookie-banner/_index.scss","../packages/govuk-frontend/src/govuk/components/input/_index.scss","../packages/govuk-frontend/src/govuk/components/date-input/_index.scss","../packages/govuk-frontend/src/govuk/components/details/_index.scss","../packages/govuk-frontend/src/govuk/helpers/_shape-arrow.scss","../packages/govuk-frontend/src/govuk/components/error-summary/_index.scss","../packages/govuk-frontend/src/govuk/components/exit-this-page/_index.scss","../packages/govuk-frontend/src/govuk/components/file-upload/_index.scss","../packages/govuk-frontend/src/govuk/components/footer/_index.scss","../packages/govuk-frontend/src/govuk/helpers/_device-pixels.scss","../packages/govuk-frontend/src/govuk/components/header/_index.scss","../packages/govuk-frontend/src/govuk/components/inset-text/_index.scss","../packages/govuk-frontend/src/govuk/components/notification-banner/_index.scss","../packages/govuk-frontend/src/govuk/components/pagination/_index.scss","../packages/govuk-frontend/src/govuk/components/panel/_index.scss","../packages/govuk-frontend/src/govuk/components/password-input/_index.scss","../packages/govuk-frontend/src/govuk/components/tag/_index.scss","../packages/govuk-frontend/src/govuk/components/phase-banner/_index.scss","../packages/govuk-frontend/src/govuk/components/radios/_index.scss","../packages/govuk-frontend/src/govuk/components/select/_index.scss","../packages/govuk-frontend/src/govuk/components/skip-link/_index.scss","../packages/govuk-frontend/src/govuk/helpers/_visually-hidden.scss","../packages/govuk-frontend/src/govuk/components/summary-list/_index.scss","../packages/govuk-frontend/src/govuk/components/table/_index.scss","../packages/govuk-frontend/src/govuk/components/tabs/_index.scss","../packages/govuk-frontend/src/govuk/components/task-list/_index.scss","../packages/govuk-frontend/src/govuk/components/warning-text/_index.scss","../packages/govuk-frontend/src/govuk/utilities/_visually-hidden.scss","../packages/govuk-frontend/src/govuk/overrides/_display.scss","../packages/govuk-frontend/src/govuk/overrides/_spacing.scss","../packages/govuk-frontend/src/govuk/overrides/_text-align.scss","../packages/govuk-frontend/src/govuk/overrides/_typography.scss","../packages/govuk-frontend/src/govuk/overrides/_width.scss"],"names":[],"mappings":"AAoBI,gBCwgEJ,CC5hEA,MAGE,gCAAA,CAIE,wCAAA,CAAA,6CAAA,CAAA,8CDDJ,CELE,YCcA,0CCFkB,CDGlB,kCAAA,CACA,iCAAA,CEaA,yBAAA,CAGE,2CChB6B,CDoB7B,6BLtBJ;AOCM,mLAAA,CACA,WACE,yBAAA,CACA,iBAAA,CACA,eAAA,CACA,2HACE,CAEF,qBPDR,COIM,WACE,yBAAA,CACA,iBAAA,CACA,eAAA,CACA,yHACE,CAEF,qBPJR,CQsMQ,aNnON,YCyBE,sBHQF,CACF,CKrBE,kBAqCE,iDCLmC,CDQnC,qCAAA,CAAA,6BAAA,CACA,iCAAA,CAAA,yBLfJ,CKtBE,kBIFA,6BAAA,CAEA,qBCiDmB,CDhDnB,oCACE,CAIF,oBAAA,CAIA,kCAAA,CAAA,0BToBF,CK2BE,iBACE,aLzBJ,CK4BE,oBACE,aL1BJ,CK6BE,kBACE,aL3BJ,CKoCE,qCACE,aL/BJ,CQqKQ,aH6HF,oGACE,2BAAA,CACA,aAAA,CAKA,oBLnSN,CACF,CKuHE,mDAEE,aLrHJ,CKqJE,2IF1LA,aH+CF,CQgJQ,aHLN,+DFvLE,UHgDF,CACF,CK6IE,+BAEI,wBL5IN,CKgJE,+DFvMA,aH0DF,CQqIQ,aHQN,+DFpME,UH2DF,CACF,CK+JE,uDAEE,UL7JJ,CKkKE,uDAEE,yBLjKJ,CKoKE,2BACE,aLlKJ,CKiOE,mDACE,oBL9NJ,CK2LE,yEACE,aLrLJ,CKwLE,oCACE,aLtLJ,CK+LE,yEACE,aL1LJ,CE9FE,kBGmVA,oBAAA,CAGA,aAAA,CAGA,oBLrPF,CKuPE,wBItVA,6BAAA,CACA,2CTkGF,CW3IE,YRcA,0CCFkB,CDGlB,kCAAA,CACA,iCAAA,CAkCA,eAAA,CA2KI,cAJc,CAKd,gBAJuB,CAtL3B,aOfkB,CClBhB,YAAA,CCsGI,kBAAA,CDpGJ,cAAA,CACA,oBXmJJ,CQ0EQ,aGnON,YRyBE,sBHoIF,CACF,CQqEQ,6BGnON,YRsOM,mBAbY,CAcZ,wBHpEN,CACF,CQ+DQ,aGnON,YRiOM,cATQ,CAUR,gBARqB,CAnLzB,UHkIF,CACF,CQyDQ,6BGnON,YCgHQ,kBZmER,CACF,CW3KI,wBACE,eX6KN,CWzKE,eAIE,iBXyKJ,CWlKE,oBACE,iBAAA,CACA,oBXqKJ,CWlKE,oBACE,iBAAA,CACA,uBXqKJ,CWlKE,8CAEE,eXqKJ,CQyBQ,6BGhMN,8CAKI,iBXuKJ,CACF,CWpKE,uBACE,kBXuKJ,CQeQ,6BGvLN,uBAII,kBXwKJ,CACF,CavNE,kBVkCA,aOfkB,CPPlB,0CCFkB,CDGlB,kCAAA,CACA,iCAAA,CA4CA,eAAA,CAiKI,cAJc,CAKd,mBAJuB,CUpNzB,aAAA,CAEA,YAAA,CDiGI,kBZ6HR,CQHQ,aKjON,kBVqCE,UOQsB,CPtBtB,sBHiNF,CACF,CQRQ,6BKjON,kBVoOM,cAbY,CAcZ,wBHcN,CACF,CQnBQ,aKjON,kBV+NM,cATQ,CAUR,gBHyBN,CACF,CQzBQ,6BKjON,kBD8GQ,kBZgJR,CACF,CajPE,iBVoBA,aOfkB,CPPlB,0CCFkB,CDGlB,kCAAA,CACA,iCAAA,CA4CA,eAAA,CAiKI,gBAJc,CAKd,wBAJuB,CUtMzB,aAAA,CAEA,YAAA,CDmFI,kBZqKR,CQ3CQ,aKnNN,iBVuBE,UOQsB,CPtBtB,sBHyPF,CACF,CQhDQ,6BKnNN,iBVsNM,iBAbY,CAcZ,wBHsDN,CACF,CQ3DQ,aKnNN,iBViNM,cATQ,CAUR,gBHiEN,CACF,CQjEQ,6BKnNN,iBDgGQ,kBZwLR,CACF,Ca3QE,iBVMA,aOfkB,CPPlB,0CCFkB,CDGlB,kCAAA,CACA,iCAAA,CA4CA,eAAA,CAiKI,kBAJc,CAKd,wBAJuB,CUxLzB,aAAA,CAEA,YAAA,CDqEI,kBZ6MR,CQnFQ,aKrMN,iBVSE,UOQsB,CPtBtB,sBHiSF,CACF,CQxFQ,6BKrMN,iBVwMM,gBAbY,CAcZ,gBH8FN,CACF,CQnGQ,aKrMN,iBVmMM,cATQ,CAUR,gBHyGN,CACF,CQzGQ,6BKrMN,iBDkFQ,kBZgOR,CACF,CarSE,iBVRA,aOfkB,CPPlB,0CCFkB,CDGlB,kCAAA,CACA,iCAAA,CA4CA,eAAA,CAiKI,cAJc,CAKd,gBAJuB,CU1KzB,aAAA,CAEA,YAAA,CDuDI,kBZqPR,CQ3HQ,aKvLN,iBVLE,UOQsB,CPtBtB,sBHyUF,CACF,CQhIQ,6BKvLN,iBV0LM,mBAbY,CAcZ,wBHsIN,CACF,CQ3IQ,aKvLN,iBVqLM,cATQ,CAUR,gBHiJN,CACF,CQjJQ,6BKvLN,iBDoEQ,kBZwQR,CACF,Ca7TE,kBV9CA,0CCFkB,CDGlB,kCAAA,CACA,iCAAA,CAkCA,eAAA,CA2KI,kBAJc,CAKd,wBAJuB,CU3JzB,aAAA,CAEA,iBAAA,CAEA,abkUJ,CQlKQ,aKvKN,kBVnCE,sBHgXF,CACF,CQvKQ,6BKvKN,kBV0KM,mBAbY,CAcZ,wBHwKN,CACF,CQ7KQ,aKvKN,kBVqKM,cATQ,CAUR,gBHmLN,CACF,CahVE,iBVxDA,0CCFkB,CDGlB,kCAAA,CACA,iCAAA,CAkCA,eAAA,CA2KI,kBAJc,CAKd,wBAJuB,CUjJzB,aAAA,CAEA,iBAAA,CACA,absVJ,CQ/LQ,aK7JN,iBV7CE,sBH6YF,CACF,CQpMQ,6BK7JN,iBVgKM,gBAbY,CAcZ,gBHqMN,CACF,CQ1MQ,aK7JN,iBV2JM,cATQ,CAUR,gBHgNN,CACF,CQhNQ,6BK7JN,iBASI,ebwWJ,CACF,CarWE,iBVrEA,0CCFkB,CDGlB,kCAAA,CACA,iCAAA,CAkCA,eAAA,CA2KI,cAJc,CAKd,gBAJuB,CUpIzB,aAAA,CAEA,ab2WJ,CQhOQ,aKhJN,iBV1DE,sBH8aF,CACF,CQrOQ,6BKhJN,iBVmJM,mBAbY,CAcZ,wBHsON,CACF,CQ3OQ,aKhJN,iBV8IM,cATQ,CAUR,gBHiPN,CACF,CavXE,+BVzDA,aOfkB,CPPlB,0CCFkB,CDGlB,kCAAA,CACA,iCAAA,CAkCA,eAAA,CA2KI,kBAJc,CAKd,wBAJuB,CUzHzB,YAAA,CDQI,kBZuXR,CQ7PQ,aKtIN,+BVtDE,UOQsB,CPtBtB,sBH2cF,CACF,CQlQQ,6BKtIN,+BVyIM,gBAbY,CAcZ,gBHwQN,CACF,CQ7QQ,aKtIN,+BVoIM,cATQ,CAUR,gBHmRN,CACF,CQnRQ,6BKtIN,+BDmBQ,kBZ0YR,CACF,CalZE,0BVrEA,aOfkB,CPPlB,0CCFkB,CDGlB,kCAAA,CACA,iCAAA,CAkCA,eAAA,CA2KI,cAJc,CAKd,gBAJuB,CU7GzB,YAAA,CDJI,kBZ8ZR,CQpSQ,aK1HN,0BVlEE,UOQsB,CPtBtB,sBHkfF,CACF,CQzSQ,6BK1HN,0BV6HM,mBAbY,CAcZ,wBH+SN,CACF,CQpTQ,aK1HN,0BVwHM,cATQ,CAUR,gBH0TN,CACF,CQ1TQ,6BK1HN,0BDOQ,kBZibR,CACF,Ca7aE,cVjFA,aOfkB,CPPlB,0CCFkB,CDGlB,kCAAA,CACA,iCAAA,CAkCA,eAAA,CA2KI,iBAJc,CAKd,wBAJuB,CUjGzB,YAAA,CDhBI,kBZqcR,CQ3UQ,aK9GN,cV9EE,UOQsB,CPtBtB,sBHyhBF,CACF,CQhVQ,6BK9GN,cViHM,cAbY,CAcZ,gBHsVN,CACF,CQ3VQ,aK9GN,cV4GM,cATQ,CAUR,eHiWN,CACF,CQjWQ,6BK9GN,cDLQ,kBZwdR,CACF,CavcE,eV9FA,aOfkB,CPPlB,0CCFkB,CDGlB,kCAAA,CACA,iCAAA,CAkCA,eAAA,CA2KI,gBAJc,CAKd,gBAJuB,CUpFzB,YAAA,CD7BI,kBZ4eR,CQlXQ,aKjGN,eV3FE,UOQsB,CPtBtB,sBHgkBF,CACF,CQvXQ,6BKjGN,eVoGM,iBAbY,CAcZ,wBH6XN,CACF,CQlYQ,aKjGN,eV+FM,cATQ,CAUR,eHwYN,CACF,CQxYQ,6BKjGN,eDlBQ,kBZ+fR,CACF,CajdE,iEACE,ebodJ,CQjZQ,6BKpEN,iEAII,gBbqdJ,CACF,CaldE,wHD9DM,gBZshBR,CQ5ZQ,6BK5DN,wHDvDQ,gBZqhBR,CACF,CazdE,gPAME,eb6dJ,CQ7aQ,6BKtDN,gPASI,gBboeJ,CACF,Cc3pBE,qBACE,QAAA,CACA,Qd8pBJ,CcrpBE,yBF8FM,eAAA,CAAA,kBZ4jBR,CQlcQ,6BMxNN,yBFqGQ,eAAA,CAAA,kBZyjBR,CACF,CctpBE,wBFqFM,eAAA,CAAA,kBZ2kBR,CQjdQ,6BM/MN,wBF4FQ,eAAA,CAAA,kBZwkBR,CACF,Cc5pBE,wBF4EM,eAAA,CAAA,kBZ0lBR,CQheQ,6BMtMN,wBFmFQ,eAAA,CAAA,kBZulBR,CACF,CchqBE,8BACE,+BdwqBJ,CevsBE,oBH+FM,iBAAA,CG3EJ,YAAA,CACA,qBAAA,CACA,kBfwrBJ,CQrfQ,6BOzNN,oBHsGQ,kBZ4mBR,CACF,CetrBI,gCZzBF,0CCFkB,CDGlB,kCAAA,CACA,iCAAA,CAkCA,eAAA,CA2KI,cAJc,CAKd,kBAJuB,CYjLvB,oBAAA,CAGA,cAAA,CACA,cA3Ba,CA4Bb,kBAAA,CACA,iBf2rBN,CQvgBQ,aO5LJ,gCZdA,sBHqtBF,CACF,CQ5gBQ,6BO5LJ,gCZ+LI,mBAbY,CAcZ,aH6gBN,CACF,CQlhBQ,aO5LJ,gCZ0LI,cATQ,CAUR,gBHwhBN,CACF,CevsBI,kCACE,kBfysBN,CQ3hBQ,6BOzNN,oBAkDI,kBAAA,CAEA,kBAAA,CACA,cAAA,CACA,oBfqsBJ,CensBI,kEAEE,iBfqsBN,CelsBI,gCACE,efosBN,CACF,CgB3wBE,kBJuGM,kBZwqBR,CiBzwBE,wBACE,UAAA,CACA,aAAA,CACA,UjB2wBJ,CQnjBQ,6BQjON,kBJ8GQ,kBZ0qBR,CACF,CgBrxBI,iDACE,ehBuxBN,CgBnxBE,yBACE,iBAAA,CACA,6BhBsxBJ,CgBpxBI,2CAEE,SAAA,CACA,QhBqxBN,CkBryBE,gBAEE,kBAAA,CACA,iBlBuyBJ,CiBpyBE,sBACE,UAAA,CACA,aAAA,CACA,UjBsyBJ,CkBxyBI,+BCyCF,qBAAA,CAEE,UAAA,CAEF,cnBiwBF,CQplBQ,6BU1NJ,+BC+CA,SAAA,CACA,UnBmwBF,CACF,CkBpzBI,6BCyCF,qBAAA,CAEE,UAAA,CAEF,cnB6wBF,CQhmBQ,6BU1NJ,6BC+CA,oBAAA,CACA,UnB+wBF,CACF,CkBh0BI,4BCyCF,qBAAA,CAEE,UAAA,CAEF,cnByxBF,CQ5mBQ,6BU1NJ,4BC+CA,SAAA,CACA,UnB2xBF,CACF,CkB50BI,8BCyCF,qBAAA,CAEE,UAAA,CAEF,cnBqyBF,CQxnBQ,6BU1NJ,8BC+CA,oBAAA,CACA,UnBuyBF,CACF,CkBx1BI,kCCyCF,qBAAA,CAEE,UAAA,CAEF,cnBizBF,CQpoBQ,6BU1NJ,kCC+CA,SAAA,CACA,UnBmzBF,CACF,CkBp2BI,wBCyCF,qBAAA,CAEE,UAAA,CAEF,cnB6zBF,CQhpBQ,6BU1NJ,wBC+CA,UAAA,CACA,UnB+zBF,CACF,CkBv2BI,4CCgCF,qBAAA,CAIA,cnBw0BF,CQ3pBQ,6BUjNJ,4CCsCA,SAAA,CACA,UnB00BF,CACF,CkBl3BI,0CCgCF,qBAAA,CAIA,cnBm1BF,CQtqBQ,6BUjNJ,0CCsCA,oBAAA,CACA,UnBq1BF,CACF,CkB73BI,yCCgCF,qBAAA,CAIA,cnB81BF,CQjrBQ,6BUjNJ,yCCsCA,SAAA,CACA,UnBg2BF,CACF,CkBx4BI,2CCgCF,qBAAA,CAIA,cnBy2BF,CQ5rBQ,6BUjNJ,2CCsCA,oBAAA,CACA,UnB22BF,CACF,CkBn5BI,+CCgCF,qBAAA,CAIA,cnBo3BF,CQvsBQ,6BUjNJ,+CCsCA,SAAA,CACA,UnBs3BF,CACF,CkB95BI,qCCgCF,qBAAA,CAIA,cnB+3BF,CQltBQ,6BUjNJ,qCCsCA,UAAA,CACA,UnBi4BF,CACF,CoBp6BE,oBAIE,aAAA,CACA,gBAAA,CACA,mBpBo6BJ,CQ9tBQ,6BY5MN,oBAYI,gBAAA,CACA,mBpBk6BJ,CACF,CoBx5BE,qER0DM,gBZm2BR,CQzuBQ,6BYpLN,qERiEQ,gBZi2BR,CACF,CqB/8BE,gBAGE,wBXyB6B,CWrB7B,6BAAA,CAAA,0BAAA,CAAA,qBrB68BJ,CqB/7BI,2DArBF,gBAsBI,uBrBk8BJ,CqBh8BI,iDACE,oBrBk8BN,CACF,CQ5vBQ,cahON,gBAgCI,iBrBg8BJ,CACF,CqB57BE,sBAGE,QAAA,CAEA,qBrB47BJ,CsBn6BE,uBAlDA,eCRiB,CDWjB,iBC2BkB,CD1BlB,gBtBu9BF,CsBp9BE,kCA2CA,uBArCE,8DAAA,CACA,4DtBk9BF,CACF,CQlxBQ,6Bc7JN,uBA/BE,iBCIW,CDHX,gBtBk9BF,CsB/8BE,kCA2BF,uBArBI,8DAAA,CACA,4DtB68BF,CACF,CACF,CQ9xBQ,0Bc7JN,uBAbE,iBAAA,CACA,gBtB48BF,CsBx8BE,kCAQF,uBAPI,iBAAA,CACA,gBtB28BF,CACF,CACF,CwBxgCE,iBZoGM,kBZw6BR,CQ9yBQ,6BgB9NN,iBZ2GQ,kBZq6BR,CACF,CwB7gCE,0BACE,gBxBghCJ,CwB7gCE,kCAEE,YAAA,CACA,eAAA,CAEA,gBAAA,CACA,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1CsOM,mBAbY,CAcZ,wBHq3GN,CACF,CQ13GQ,aqCnON,kB1CiOM,cATQ,CAUR,gBARqB,CAnLzB,UH2jHF,CACF,CQh4GQ,6BqCnON,kBjCgHQ,eAAA,CAAA,kBZ4/GR,CACF,C6ChmHI,+BACE,Y7CumHN,C6CpmHI,4DAEE,e7CsmHN,C8CznHE,2B3CcA,0CCFkB,CDGlB,kCAAA,CACA,iCAAA,CAkCA,eAAA,CA2KI,cAJc,CAKd,gBAJuB,CSjHrB,kBAAA,CkCrGJ,wBAAA,CAEA,wB9C+nHJ,CQl6GQ,asCnON,2B3CyBE,sBHgnHF,CACF,CQv6GQ,6BsCnON,2B3CsOM,mBAbY,CAcZ,wBHw6GN,CACF,CQ76GQ,asCnON,2B3CiOM,cATQ,CAUR,gBHm7GN,CACF,CQn7GQ,6BsCnON,2BlCgHQ,kBZ0iHR,CACF,C8CnpHI,iCACE,sB9CqpHN,C8CjpHE,mCACE,oBAAA,CAIA,mC9CipHJ,CQh8GQ,6BsCtNN,mCAQI,oB9CkpHJ,CACF,C8C/oHE,kC3CoMI,cAJc,CAKd,gBAJuB,CA9J3B,eAAA,C2C9BE,QAAA,CACA,SAAA,CACA,U9CipHJ,CQ98GQ,6BsC1MN,kC3C6MM,mBAbY,CAcZ,wBH+8GN,CACF,CQp9GQ,asC1MN,kC3CwMM,cATQ,CAUR,gBH09GN,CACF,C8C1pHE,oC3CCA,aOfkB,CoCiBhB,YAAA,CAEA,qB9C2pHJ,CQh+GQ,asChMN,oC3CIE,UHgqHF,CACF,CQr+GQ,6BsChMN,oCAQI,Y9CiqHJ,CACF,C8C7pHI,sCAGE,qBAAA,CAOA,e9CupHN,C8CppHI,gDACE,e9CspHN,C8ClpHE,oC3C2JI,kBAJc,CAKd,wBAJuB,CA9J3B,eAAA,C2CUE,eAAA,CAEA,S9CopHJ,CQz/GQ,6BsCjKN,oC3CoKM,gBAbY,CAcZ,gBH0/GN,CACF,CQ//GQ,asCjKN,oC3C+JM,cATQ,CAUR,gBHqgHN,CACF,C8C7pHE,iC3C7DA,0CCFkB,CDGlB,kCAAA,CACA,iCAAA,CEaA,yBAAA,CAGE,2CChB6B,CDoB7B,6BL6sHJ,CQ9gHQ,asCxJN,iC3ClDE,sBH4tHF,CACF,CKzuHE,uCAqCE,iDCLmC,CDQnC,qCAAA,CAAA,6BAAA,CACA,iCAAA,CAAA,yBLqsHJ,CK1uHE,uCIFA,6BAAA,CAEA,qBCiDmB,CDhDnB,oCACE,CAIF,oBAAA,CAIA,kCAAA,CAAA,0BTwuHF,CKv9GE,+EACE,aL49GJ,CKz9GE,uCACE,aL29GJ,CKl9GE,+EACE,aLu9GJ,C8ClsHE,oCACE,oBpCamB,CoCXnB,wB9CosHJ,CKhoHE,uJAEE,aLioHJ,CK9nHE,2EACE,aLgoHJ,CK7nHE,4EACE,aL+nHJ,CK1nHE,2EACE,aL4nHJ,C+CjyHE,kBnCuGM,kBAAA,CmCrGJ,YAAA,CACA,qBAAA,CACA,kBAAA,CACA,c/CoyHJ,CQxkHQ,6BuCjON,kBnC8GQ,kBAAA,CmCtGJ,kBAAA,CACA,sB/CoyHJ,CACF,C+CjyHE,wBACE,QAAA,CACA,SAAA,CACA,e/C0yHJ,C+CvyHE,wE5CPA,0CCFkB,CDGlB,kCAAA,CACA,iCAAA,CAkCA,eAAA,CA2KI,cAJc,CAKd,gBAJuB,C4CjMzB,qBAAA,CACA,iBAAA,CACA,cAAA,CACA,eAAA,CACA,iBAAA,CACA,U/C+yHJ,CQ1mHQ,auC9MN,wE5CIE,sBH0zHF,CACF,CQjnHQ,6BuC9MN,wE5CiNM,mBAbY,CAcZ,wBHonHN,CACF,CQznHQ,auC9MN,wE5C4MM,cATQ,CAUR,gBHioHN,CACF,C+Cp0HI,0FACE,wB/Cw0HN,C+Cp0HE,wBAGE,YAAA,CAIA,iB/Ck0HJ,CQ3oHQ,6BuC9LN,wBAUI,a/Cm0HJ,CACF,C+Ch0HE,gD5CSA,eH4zHF,C+C/zHI,gGACE,YAAA,CACA,kB/Ck0HN,C+C9zHE,wBACE,c/Ci0HJ,C+C9zHE,wBACE,e/Ci0HJ,C+C7zHE,0IAIE,a/Cg0HJ,C+C7zHE,iC5CnBA,eAAA,C4CqBE,6BAAA,CACA,wB/Cg0HJ,C+C9zHI,uCACE,wB/Cg0HN,CKnpHE,+HAEE,ULopHJ,CK/oHE,+HAEE,yBLgpHJ,CK7oHE,+DACE,aL+oHJ,C+Cj0HE,kC5CjCA,eAAA,C4CmCE,a/Co0HJ,C+Cj0HI,wCACE,4B/Cm0HN,C+C/zHE,wBACE,aAAA,CACA,c/Ck0HJ,C+C/zHI,cACE,8BACE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CF,CQjzJQ,aiDvKN,0BtDqKM,cATQ,CAUR,gBHuzJN,CACF,CyD19JE,yBtD6JI,gBAJc,CAKd,wBHi0JN,CQ5zJQ,6BiDnKN,yBtDsKM,iBAbY,CAcZ,wBH6zJN,CACF,CQl0JQ,aiDnKN,yBtDiKM,cATQ,CAUR,gBHw0JN,CACF,CyDv+JE,yBtDyJI,kBAJc,CAKd,wBHk1JN,CQ70JQ,6BiD/JN,yBtDkKM,gBAbY,CAcZ,gBH80JN,CACF,CQn1JQ,aiD/JN,yBtD6JM,cATQ,CAUR,gBHy1JN,CACF,C0D5jKE,Y9CyGM,cAAA,CAAA,kBAAA,CT3FN,0CCFkB,CDGlB,kCAAA,CACA,iCAAA,CAkCA,eAAA,CA2KI,cAJc,CAKd,gBHy2JN,CQp2JQ,6BkDnON,Y9CgHQ,kBZ29JR,CACF,CQz2JQ,akDnON,YvDyBE,sBHujKF,CACF,CQ92JQ,6BkDnON,YvDsOM,mBAbY,CAcZ,wBH+2JN,CACF,CQp3JQ,akDnON,YvDiOM,cATQ,CAUR,gBH03JN,CACF,C0DvlKE,mBvDuNI,cAJc,CAKd,gBAJuB,CAxK3B,eAAA,CAdA,aOfkB,CgDThB,kB1DylKJ,CQl4JQ,6BkD7NN,mBvDgOM,mBAbY,CAcZ,wBHm4JN,CACF,CQx4JQ,akD7NN,mBvD2NM,cATQ,CAUR,gBARqB,CAnLzB,UHykKF,CACF,C0DlmKE,kBAEE,SAAA,CACA,eAAA,C9CuFI,eZohKR,CQ15JQ,6BkDpNN,kB9CiGQ,kBZihKR,CACF,C0D5mKE,uBACE,gB1D+mKJ,C0D7mKI,8BvDWF,aOfkB,CgDMd,WAAA,CACA,iBAAA,CACA,iB1D+mKN,CQz6JQ,akD1MJ,8BvDcA,UHymKF,CACF,C0DhnKE,iBvDnBA,0CCFkB,CDGlB,kCAAA,CACA,iCAAA,CEaA,yBAAA,CAGE,2CChB6B,CDoB7B,6BCP0B,CoDQ1B,oBAAA,CACA,kB1DsnKJ,CQz7JQ,akDlMN,iBvDRE,sBHuoKF,CACF,CKppKE,uBAqCE,iDCLmC,CDQnC,qCAAA,CAAA,6BAAA,CACA,iCAAA,CAAA,yBLgnKJ,CKrpKE,uBIFA,6BAAA,CAEA,qBCiDmB,CDhDnB,oCACE,CAIF,oBAAA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A,8BAAA,CAEA,kBAAA,CAKA,4BAAA,CAKA,wBAAA,CAAA,oBAAA,CAAA,gBvDw7KF,CuDp6KE,2DACE,WvDy6KJ,CuD35KE,0DA5DA,2BAAA,CAEA,mBAAA,CACA,oBAAA,CAGA,kBAAA,CACA,mBAAA,CAEA,yBAAA,CAGA,4BAAA,CACA,sCAAA,CAAA,8BAAA,CAEA,kBAAA,CAKA,4BAAA,CAKA,wBAAA,CAAA,oBAAA,CAAA,gBvD48KF,C8Dn/KE,yBACE,wB9Ds/KJ,C8Dn/KE,+BACE,8B9Ds/KJ,C8Dn/KE,wBACE,uB9Ds/KJ,C8Dn/KE,uBACE,sB9Ds/KJ,CQjyKQ,asDjNJ,6BACE,sB9Ds/KJ,CACF,C+Dt+KI,mBnDmEI,kBZs6KR,C+Dn+KM,uBnD+DE,sBZw6KR,C+Dv+KM,yBnD+DE,wBZ46KR,C+D3+KM,0BnD+DE,yBZg7KR,C+D/+KM,wBnD+DE,uBZo7KR,C+Dz/KI,mBnDmEI,oBZ07KR,C+Dv/KM,uBnD+DE,wBZ47KR,C+D3/KM,yBnD+DE,0BZg8KR,C+D//KM,0BnD+DE,2BZo8KR,C+DngLM,wBnD+DE,yBZw8KR,C+D7gLI,mBnDmEI,qBZ88KR,C+D3gLM,uBnD+DE,yBZg9KR,C+D/gLM,yBnD+DE,2BZo9KR,C+DnhLM,0BnD+DE,4BZw9KR,C+DvhLM,wBnD+DE,0BZ49KR,C+DjiLI,mBnDmEI,qBZk+KR,C+D/hLM,uBnD+DE,yBZo+KR,C+DniLM,yBnD+DE,2BZw+KR,C+DviLM,0BnD+DE,4BZ4+KR,C+D3iLM,wBnD+DE,0BZg/KR,C+DrjLI,mBnDmEI,qBZs/KR,CQ13KQ,6BuD/LJ,mBnD0EM,qBZm/KR,CACF,C+DxjLM,uBnD+DE,yBZ6/KR,CQn4KQ,6BuDzLF,uBnDsEI,yBZ0/KR,CACF,C+DjkLM,yBnD+DE,2BZsgLR,CQ54KQ,6BuDzLF,yBnDsEI,2BZmgLR,CACF,C+D1kLM,0BnD+DE,4BZ+gLR,CQr5KQ,6BuDzLF,0BnDsEI,4BZ4gLR,CACF,C+DnlLM,wBnD+DE,0BZwhLR,CQ95KQ,6BuDzLF,wBnDsEI,0BZqhLR,CACF,C+DlmLI,mBnDmEI,qBZmiLR,CQv6KQ,6BuD/LJ,mBnD0EM,qBZgiLR,CACF,C+DrmLM,uBnD+DE,yBZ0iLR,CQh7KQ,6BuDzLF,uBnDsEI,yBZuiLR,CACF,C+D9mLM,yBnD+DE,2BZmjLR,CQz7KQ,6BuDzLF,yBnDsEI,2BZgjLR,CACF,C+DvnLM,0BnD+DE,4BZ4jLR,CQl8KQ,6BuDzLF,0BnDsEI,4BZyjLR,CACF,C+DhoLM,wBnD+DE,0BZqkLR,CQ38KQ,6BuDzLF,wBnDsEI,0BZkkLR,CACF,C+D/oLI,mBnDmEI,qBZglLR,CQp9KQ,6BuD/LJ,mBnD0EM,qBZ6kLR,CACF,C+DlpLM,uBnD+DE,yBZulLR,CQ79KQ,6BuDzLF,uBnDsEI,yBZolLR,CACF,C+D3pLM,yBnD+DE,2BZgmLR,CQt+KQ,6BuDzLF,yBnDsEI,2BZ6lLR,CACF,C+DpqLM,0BnD+DE,4BZymLR,CQ/+KQ,6BuDzLF,0BnDsEI,4BZsmLR,CACF,C+D7qLM,wBnD+DE,0BZknLR,CQx/KQ,6BuDzLF,wBnDsEI,0BZ+mLR,CACF,C+D5rLI,mBnDmEI,qBZ6nLR,CQjgLQ,6BuD/LJ,mBnD0EM,qBZ0nLR,CACF,C+D/rLM,uBnD+DE,yBZooLR,CQ1gLQ,6BuDzLF,uBnDsEI,yBZioLR,CACF,C+DxsLM,yBnD+DE,2BZ6oLR,CQnhLQ,6BuDzLF,yBnDsEI,2BZ0oLR,CACF,C+DjtLM,0BnD+DE,4BZspLR,CQ5hLQ,6BuDzLF,0BnDsEI,4BZmpLR,CACF,C+D1tLM,wBnD+DE,0BZ+pLR,CQriLQ,6BuDzLF,wBnDsEI,0BZ4pLR,CACF,C+DzuLI,mBnDmEI,qBZ0qLR,CQ9iLQ,6BuD/LJ,mBnD0EM,qBZuqLR,CACF,C+D5uLM,uBnD+DE,yBZirLR,CQvjLQ,6BuDzLF,uBnDsEI,yBZ8qLR,CACF,C+DrvLM,yBnD+DE,2BZ0rLR,CQhkLQ,6BuDzLF,yBnDsEI,2BZurLR,CACF,C+D9vLM,0BnD+DE,4BZmsLR,CQzkLQ,6BuDzLF,0BnDsEI,4BZgsLR,CACF,C+DvwLM,wBnD+DE,0BZ4sLR,CQllLQ,6BuDzLF,wBnDsEI,0BZysLR,CACF,C+DtxLI,mBnDmEI,qBZutLR,CQ3lLQ,6BuD/LJ,mBnD0EM,qBZotLR,CACF,C+DzxLM,uBnD+DE,yBZ8tLR,CQpmLQ,6BuDzLF,uBnDsEI,yBZ2tLR,CACF,C+DlyLM,yBnD+DE,2BZuuLR,CQ7mLQ,6BuDzLF,yBnDsEI,2BZouLR,CACF,C+D3yLM,0BnD+DE,4BZgvLR,CQtnLQ,6BuDzLF,0BnDsEI,4BZ6uLR,CACF,C+DpzLM,wBnD+DE,0BZyvLR,CQ/nLQ,6BuDzLF,wBnDsEI,0BZsvLR,CACF,C+Dn0LI,oBnDmEI,mBZowLR,C+Dj0LM,wBnD+DE,uBZswLR,C+Dr0LM,0BnD+DE,yBZ0wLR,C+Dz0LM,2BnD+DE,0BZ8wLR,C+D70LM,yBnD+DE,wBZkxLR,C+Dv1LI,oBnDmEI,qBZwxLR,C+Dr1LM,wBnD+DE,yBZ0xLR,C+Dz1LM,0BnD+DE,2BZ8xLR,C+D71LM,2BnD+DE,4BZkyLR,C+Dj2LM,yBnD+DE,0BZsyLR,C+D32LI,oBnDmEI,sBZ4yLR,C+Dz2LM,wBnD+DE,0BZ8yLR,C+D72LM,0BnD+DE,4BZkzLR,C+Dj3LM,2BnD+DE,6BZszLR,C+Dr3LM,yBnD+DE,2BZ0zLR,C+D/3LI,oBnDmEI,sBZg0LR,C+D73LM,wBnD+DE,0BZk0LR,C+Dj4LM,0BnD+DE,4BZs0LR,C+Dr4LM,2BnD+DE,6BZ00LR,C+Dz4LM,yBnD+DE,2BZ80LR,C+Dn5LI,oBnDmEI,sBZo1LR,CQxtLQ,6BuD/LJ,oBnD0EM,sBZi1LR,CACF,C+Dt5LM,wBnD+DE,0BZ21LR,CQjuLQ,6BuDzLF,wBnDsEI,0BZw1LR,CACF,C+D/5LM,0BnD+DE,4BZo2LR,CQ1uLQ,6BuDzLF,0BnDsEI,4BZi2LR,CACF,C+Dx6LM,2BnD+DE,6BZ62LR,CQnvLQ,6BuDzLF,2BnDsEI,6BZ02LR,CACF,C+Dj7LM,yBnD+DE,2BZs3LR,CQ5vLQ,6BuDzLF,yBnDsEI,2BZm3LR,CACF,C+Dh8LI,oBnDmEI,sBZi4LR,CQrwLQ,6BuD/LJ,oBnD0EM,sBZ83LR,CACF,C+Dn8LM,wBnD+DE,0BZw4LR,CQ9wLQ,6BuDzLF,wBnDsEI,0BZq4LR,CACF,C+D58LM,0BnD+DE,4BZi5LR,CQvxLQ,6BuDzLF,0BnDsEI,4BZ84LR,CACF,C+Dr9LM,2BnD+DE,6BZ05LR,CQhyLQ,6BuDzLF,2BnDsEI,6BZu5LR,CACF,C+D99LM,yBnD+DE,2BZm6LR,CQzyLQ,6BuDzLF,yBnDsEI,2BZg6LR,CACF,C+D7+LI,oBnDmEI,sBZ86LR,CQlzLQ,6BuD/LJ,oBnD0EM,sBZ26LR,CACF,C+Dh/LM,wBnD+DE,0BZq7LR,CQ3zLQ,6BuDzLF,wBnDsEI,0BZk7LR,CACF,C+Dz/LM,0BnD+DE,4BZ87LR,CQp0LQ,6BuDzLF,0BnDsEI,4BZ27LR,CACF,C+DlgMM,2BnD+DE,6BZu8LR,CQ70LQ,6BuDzLF,2BnDsEI,6BZo8LR,CACF,C+D3gMM,yBnD+DE,2BZg9LR,CQt1LQ,6BuDzLF,yBnDsEI,2BZ68LR,CACF,C+D1hMI,oBnDmEI,sBZ29LR,CQ/1LQ,6BuD/LJ,oBnD0EM,sBZw9LR,CACF,C+D7hMM,wBnD+DE,0BZk+LR,CQx2LQ,6BuDzLF,wBnDsEI,0BZ+9LR,CACF,C+DtiMM,0BnD+DE,4BZ2+LR,CQj3LQ,6BuDzLF,0BnDsEI,4BZw+LR,CACF,C+D/iMM,2BnD+DE,6BZo/LR,CQ13LQ,6BuDzLF,2BnDsEI,6BZi/LR,CACF,C+DxjMM,yBnD+DE,2BZ6/LR,CQn4LQ,6BuDzLF,yBnDsEI,2BZ0/LR,CACF,C+DvkMI,oBnDmEI,sBZwgMR,CQ54LQ,6BuD/LJ,oBnD0EM,sBZqgMR,CACF,C+D1kMM,wBnD+DE,0BZ+gMR,CQr5LQ,6BuDzLF,wBnDsEI,0BZ4gMR,CACF,C+DnlMM,0BnD+DE,4BZwhMR,CQ95LQ,6BuDzLF,0BnDsEI,4BZqhMR,CACF,C+D5lMM,2BnD+DE,6BZiiMR,CQv6LQ,6BuDzLF,2BnDsEI,6BZ8hMR,CACF,C+DrmMM,yBnD+DE,2BZ0iMR,CQh7LQ,6BuDzLF,yBnDsEI,2BZuiMR,CACF,C+DpnMI,oBnDmEI,sBZqjMR,CQz7LQ,6BuD/LJ,oBnD0EM,sBZkjMR,CACF,C+DvnMM,wBnD+DE,0BZ4jMR,CQl8LQ,6BuDzLF,wBnDsEI,0BZyjMR,CACF,C+DhoMM,0BnD+DE,4BZqkMR,CQ38LQ,6BuDzLF,0BnDsEI,4BZkkMR,CACF,C+DzoMM,2BnD+DE,6BZ8kMR,CQp9LQ,6BuDzLF,2BnDsEI,6BZ2kMR,CACF,C+DlpMM,yBnD+DE,2BZulMR,CQ79LQ,6BuDzLF,yBnDsEI,2BZolMR,CACF,C+DroMI,0BACE,kB/DwoMN,C+DpoMM,8BACE,sB/DuoMR,C+DxoMM,gCACE,wB/D2oMR,C+D5oMM,iCACE,yB/D+oMR,C+DhpMM,+BACE,uB/DmpMR,C+DzpMI,0BACE,oB/D4pMN,C+DxpMM,8BACE,wB/D2pMR,C+D5pMM,gCACE,0B/D+pMR,C+DhqMM,iCACE,2B/DmqMR,C+DpqMM,+BACE,yB/DuqMR,C+D7qMI,0BACE,qB/DgrMN,C+D5qMM,8BACE,yB/D+qMR,C+DhrMM,gCACE,2B/DmrMR,C+DprMM,iCACE,4B/DurMR,C+DxrMM,+BACE,0B/D2rMR,C+DjsMI,0BACE,qB/DosMN,C+DhsMM,8BACE,yB/DmsMR,C+DpsMM,gCACE,2B/DusMR,C+DxsMM,iCACE,4B/D2sMR,C+D5sMM,+BACE,0B/D+sMR,C+DrtMI,0BACE,qB/DwtMN,C+DptMM,8BACE,yB/DutMR,C+DxtMM,gCACE,2B/D2tMR,C+D5tMM,iCACE,4B/D+tMR,C+DhuMM,+BACE,0B/DmuMR,C+DzuMI,0BACE,qB/D4uMN,C+DxuMM,8BACE,yB/D2uMR,C+D5uMM,gCACE,2B/D+uMR,C+DhvMM,iCACE,4B/DmvMR,C+DpvMM,+BACE,0B/DuvMR,C+D7vMI,0BACE,qB/DgwMN,C+D5vMM,8BACE,yB/D+vMR,C+DhwMM,gCACE,2B/DmwMR,C+DpwMM,iCACE,4B/DuwMR,C+DxwMM,+BACE,0B/D2wMR,C+DjxMI,0BACE,qB/DoxMN,C+DhxMM,8BACE,yB/DmxMR,C+DpxMM,gCACE,2B/DuxMR,C+DxxMM,iCACE,4B/D2xMR,C+D5xMM,+BACE,0B/D+xMR,C+DryMI,0BACE,qB/DwyMN,C+DpyMM,8BACE,yB/DuyMR,C+DxyMM,gCACE,2B/D2yMR,C+D5yMM,iCACE,4B/D+yMR,C+DhzMM,+BACE,0B/DmzMR,C+DzzMI,0BACE,qB/D4zMN,C+DxzMM,8BACE,yB/D2zMR,C+D5zMM,gCACE,2B/D+zMR,C+Dh0MM,iCACE,4B/Dm0MR,C+Dp0MM,+BACE,0B/Du0MR,C+D70MI,2BACE,mB/Dg1MN,C+D50MM,+BACE,uB/D+0MR,C+Dh1MM,iCACE,yB/Dm1MR,C+Dp1MM,kCACE,0B/Du1MR,C+Dx1MM,gCACE,wB/D21MR,C+Dj2MI,2BACE,qB/Do2MN,C+Dh2MM,+BACE,yB/Dm2MR,C+Dp2MM,iCACE,2B/Du2MR,C+Dx2MM,kCACE,4B/D22MR,C+D52MM,gCACE,0B/D+2MR,C+Dr3MI,2BACE,sB/Dw3MN,C+Dp3MM,+BACE,0B/Du3MR,C+Dx3MM,iCACE,4B/D23MR,C+D53MM,kCACE,6B/D+3MR,C+Dh4MM,gCACE,2B/Dm4MR,C+Dz4MI,2BACE,sB/D44MN,C+Dx4MM,+BACE,0B/D24MR,C+D54MM,iCACE,4B/D+4MR,C+Dh5MM,kCACE,6B/Dm5MR,C+Dp5MM,gCACE,2B/Du5MR,C+D75MI,2BACE,sB/Dg6MN,C+D55MM,+BACE,0B/D+5MR,C+Dh6MM,iCACE,4B/Dm6MR,C+Dp6MM,kCACE,6B/Du6MR,C+Dx6MM,gCACE,2B/D26MR,C+Dj7MI,2BACE,sB/Do7MN,C+Dh7MM,+BACE,0B/Dm7MR,C+Dp7MM,iCACE,4B/Du7MR,C+Dx7MM,kCACE,6B/D27MR,C+D57MM,gCACE,2B/D+7MR,C+Dr8MI,2BACE,sB/Dw8MN,C+Dp8MM,+BACE,0B/Du8MR,C+Dx8MM,iCACE,4B/D28MR,C+D58MM,kCACE,6B/D+8MR,C+Dh9MM,gCACE,2B/Dm9MR,C+Dz9MI,2BACE,sB/D49MN,C+Dx9MM,+BACE,0B/D29MR,C+D59MM,iCACE,4B/D+9MR,C+Dh+MM,kCACE,6B/Dm+MR,C+Dp+MM,gCACE,2B/Du+MR,C+D7+MI,2BACE,sB/Dg/MN,C+D5+MM,+BACE,0B/D++MR,C+Dh/MM,iCACE,4B/Dm/MR,C+Dp/MM,kCACE,6B/Du/MR,C+Dx/MM,gCACE,2B/D2/MR,C+DjgNI,2BACE,sB/DogNN,C+DhgNM,+BACE,0B/DmgNR,C+DpgNM,iCACE,4B/DugNR,C+DxgNM,kCACE,6B/D2gNR,C+D5gNM,gCACE,2B/D+gNR,CgEplNE,0BACE,yBhEulNJ,CgEplNE,4BACE,2BhEulNJ,CgEplNE,2BACE,0BhEulNJ,CiE1lNI,uB9DsNE,6BAJc,CAKd,kCHw4MN,CQn4MQ,6ByD5NJ,uB9D+NI,wBAbY,CAcZ,uBHo4MN,CACF,CQz4MQ,ayD5NJ,uB9D0NI,wBATQ,CAUR,yBH+4MN,CACF,CiE3mNI,uB9DsNE,wBAJc,CAKd,6BHy5MN,CQp5MQ,6ByD5NJ,uB9D+NI,wBAbY,CAcZ,kCHq5MN,CACF,CQ15MQ,ayD5NJ,uB9D0NI,wBATQ,CAUR,0BHg6MN,CACF,CiE5nNI,uB9DsNE,0BAJc,CAKd,kCH06MN,CQr6MQ,6ByD5NJ,uB9D+NI,2BAbY,CAcZ,kCHs6MN,CACF,CQ36MQ,ayD5NJ,uB9D0NI,wBATQ,CAUR,0BHi7MN,CACF,CiE7oNI,uB9DsNE,4BAJc,CAKd,kCH27MN,CQt7MQ,6ByD5NJ,uB9D+NI,6BAbY,CAcZ,kCHu7MN,CACF,CQ57MQ,ayD5NJ,uB9D0NI,wBATQ,CAUR,0BHk8MN,CACF,CiE9pNI,uB9DsNE,4BAJc,CAKd,kCH48MN,CQv8MQ,6ByD5NJ,uB9D+NI,0BAbY,CAcZ,0BHw8MN,CACF,CQ78MQ,ayD5NJ,uB9D0NI,wBATQ,CAUR,0BHm9MN,CACF,CiE/qNI,uB9DsNE,wBAJc,CAKd,0BH69MN,CQx9MQ,6ByD5NJ,uB9D+NI,6BAbY,CAcZ,kCHy9MN,CACF,CQ99MQ,ayD5NJ,uB9D0NI,wBATQ,CAUR,0BHo+MN,CACF,CiEhsNI,uB9DsNE,2BAJc,CAKd,kCH8+MN,CQz+MQ,6ByD5NJ,uB9D+NI,wBAbY,CAcZ,0BH0+MN,CACF,CQ/+MQ,ayD5NJ,uB9D0NI,wBATQ,CAUR,yBHq/MN,CACF,CiEjtNI,uB9DsNE,0BAJc,CAKd,0BH+/MN,CQ1/MQ,6ByD5NJ,uB9D+NI,2BAbY,CAcZ,kCH2/MN,CACF,CQhgNQ,ayD5NJ,uB9D0NI,wBATQ,CAUR,yBHsgNN,CACF,CiEptNE,8B9D6BA,yBH2rNF,CiEptNE,2B9DmCA,yBHqrNF,CiEltNE,+B9D8CA,2CHwqNF,CkEhvNE,oDACE,oBlEuvNJ,CQ1hNQ,6B0D9NN,+BAII,mBlEwvNJ,CACF,CkErvNE,2BACE,oBlEwvNJ,CQniNQ,6B0DtNN,2BAII,sBlEyvNJ,CACF,CkEtvNE,yBACE,oBlEyvNJ,CQ5iNQ,6B0D9MN,yBAII,mBlE0vNJ,CACF,CkEvvNE,0BACE,oBlE0vNJ,CQrjNQ,6B0DtMN,0BAII,sBlE2vNJ,CACF,CkExvNE,4BACE,oBlE2vNJ,CQ9jNQ,6B0D9LN,4BAII,mBlE4vNJ,CACF","file":"govuk-frontend-5.4.1.min.css","sourcesContent":["@import \"../error-message/index\";\n@import \"../hint/index\";\n@import \"../label/index\";\n@import \"../textarea/index\";\n\n@include govuk-exports(\"govuk/component/character-count\") {\n .govuk-character-count {\n @include govuk-responsive-margin(6, \"bottom\");\n\n .govuk-form-group,\n .govuk-textarea {\n margin-bottom: govuk-spacing(1);\n }\n }\n\n .govuk-character-count__message {\n @include govuk-font-tabular-numbers;\n margin-top: 0;\n margin-bottom: 0;\n\n &::after {\n // Zero-width space that will reserve vertical space when no hint is\n // provided as:\n // - setting a min-height is not possible without a magic number because\n // the line-height is set by the `govuk-font` call above\n // - using `:empty` is not possible as the hint macro outputs line breaks\n content: \"\\200B\";\n }\n }\n\n .govuk-character-count__message--disabled {\n visibility: hidden;\n }\n}\n","@charset \"UTF-8\";\n:root {\n --govuk-frontend-version: \"development\";\n --govuk-frontend-breakpoint-mobile: 20rem;\n --govuk-frontend-breakpoint-tablet: 40.0625rem;\n --govuk-frontend-breakpoint-desktop: 48.0625rem;\n}\n\n.govuk-link {\n font-family: \"GDS Transport\", arial, sans-serif;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n text-decoration: underline;\n text-decoration-thickness: max(1px, .0625rem);\n text-underline-offset: 0.1578em;\n}\n/*! Copyright (c) 2011 by Margaret Calvert & Henrik Kubel. All rights reserved. The font has been customised for exclusive use on gov.uk. This cut is not commercially available. */ /* stylelint-disable-line scss/comment-no-loud */\n@font-face {\n font-family: \"GDS Transport\";\n font-style: normal;\n font-weight: normal;\n src: url(\"/assets/fonts/light-94a07e06a1-v2.woff2\") format(\"woff2\"), url(\"/assets/fonts/light-f591b13f7d-v2.woff\") format(\"woff\");\n font-display: fallback;\n}\n@font-face {\n font-family: \"GDS Transport\";\n font-style: normal;\n font-weight: bold;\n src: url(\"/assets/fonts/bold-b542beb274-v2.woff2\") format(\"woff2\"), url(\"/assets/fonts/bold-affa96571d-v2.woff\") format(\"woff\");\n font-display: fallback;\n}\n@media print {\n .govuk-link {\n font-family: sans-serif;\n }\n}\n.govuk-link:hover {\n text-decoration-thickness: max(3px, .1875rem, .12em);\n text-decoration-skip-ink: none;\n text-decoration-skip: none;\n}\n.govuk-link:focus {\n outline: 3px solid transparent;\n color: #0b0c0c;\n background-color: #ffdd00;\n box-shadow: 0 -2px #ffdd00, 0 4px #0b0c0c;\n text-decoration: none;\n box-decoration-break: clone;\n}\n.govuk-link:link {\n color: #1d70b8;\n}\n.govuk-link:visited {\n color: #4c2c92;\n}\n.govuk-link:hover {\n color: #003078;\n}\n.govuk-link:active {\n color: #0b0c0c;\n}\n.govuk-link:focus {\n color: #0b0c0c;\n}\n@media print {\n [href^=\"/\"].govuk-link::after, [href^=\"http://\"].govuk-link::after, [href^=\"https://\"].govuk-link::after {\n content: \" (\" attr(href) \")\";\n font-size: 90%;\n word-wrap: break-word;\n }\n}\n\n.govuk-link--muted:link, .govuk-link--muted:visited {\n color: #505a5f;\n}\n.govuk-link--muted:hover, .govuk-link--muted:active {\n color: #0b0c0c;\n}\n.govuk-link--muted:focus {\n color: #0b0c0c;\n}\n\n.govuk-link--text-colour:link, .govuk-link--text-colour:visited {\n color: #0b0c0c;\n}\n@media print {\n .govuk-link--text-colour:link, .govuk-link--text-colour:visited {\n color: #000000;\n }\n}\n.govuk-link--text-colour:hover {\n color: rgba(11, 12, 12, 0.99);\n}\n.govuk-link--text-colour:active, .govuk-link--text-colour:focus {\n color: #0b0c0c;\n}\n@media print {\n .govuk-link--text-colour:active, .govuk-link--text-colour:focus {\n color: #000000;\n }\n}\n\n.govuk-link--inverse:link, .govuk-link--inverse:visited {\n color: #ffffff;\n}\n.govuk-link--inverse:hover, .govuk-link--inverse:active {\n color: rgba(255, 255, 255, 0.99);\n}\n.govuk-link--inverse:focus {\n color: #0b0c0c;\n}\n\n.govuk-link--no-underline:not(:hover):not(:active) {\n text-decoration: none;\n}\n\n.govuk-link--no-visited-state:link {\n color: #1d70b8;\n}\n.govuk-link--no-visited-state:visited {\n color: #1d70b8;\n}\n.govuk-link--no-visited-state:hover {\n color: #003078;\n}\n.govuk-link--no-visited-state:active {\n color: #0b0c0c;\n}\n.govuk-link--no-visited-state:focus {\n color: #0b0c0c;\n}\n\n.govuk-link-image {\n display: inline-block;\n line-height: 0;\n text-decoration: none;\n}\n.govuk-link-image:focus {\n outline: 3px solid transparent;\n box-shadow: 0 0 0 4px #ffdd00, 0 0 0 8px #0b0c0c;\n}\n\n.govuk-list {\n font-family: \"GDS Transport\", arial, sans-serif;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n font-weight: 400;\n font-size: 1rem;\n line-height: 1.25;\n color: #0b0c0c;\n margin-top: 0;\n margin-bottom: 15px;\n padding-left: 0;\n list-style-type: none;\n}\n@media print {\n .govuk-list {\n font-family: sans-serif;\n }\n}\n@media (min-width: 40.0625em) {\n .govuk-list {\n font-size: 1.1875rem;\n line-height: 1.3157894737;\n }\n}\n@media print {\n .govuk-list {\n font-size: 14pt;\n line-height: 1.15;\n }\n}\n@media print {\n .govuk-list {\n color: #000000;\n }\n}\n@media (min-width: 40.0625em) {\n .govuk-list {\n margin-bottom: 20px;\n }\n}\n.govuk-list .govuk-list {\n margin-top: 10px;\n}\n\n.govuk-list > li {\n margin-bottom: 5px;\n}\n\n.govuk-list--bullet {\n padding-left: 20px;\n list-style-type: disc;\n}\n\n.govuk-list--number {\n padding-left: 20px;\n list-style-type: decimal;\n}\n\n.govuk-list--bullet > li,\n.govuk-list--number > li {\n margin-bottom: 0;\n}\n@media (min-width: 40.0625em) {\n .govuk-list--bullet > li,\n .govuk-list--number > li {\n margin-bottom: 5px;\n }\n}\n\n.govuk-list--spaced > li {\n margin-bottom: 10px;\n}\n@media (min-width: 40.0625em) {\n .govuk-list--spaced > li {\n margin-bottom: 15px;\n }\n}\n\n.govuk-heading-xl {\n color: #0b0c0c;\n font-family: \"GDS Transport\", arial, sans-serif;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n font-weight: 700;\n font-size: 2rem;\n line-height: 1.09375;\n display: block;\n margin-top: 0;\n margin-bottom: 30px;\n}\n@media print {\n .govuk-heading-xl {\n color: #000000;\n }\n}\n@media print {\n .govuk-heading-xl {\n font-family: sans-serif;\n }\n}\n@media (min-width: 40.0625em) {\n .govuk-heading-xl {\n font-size: 3rem;\n line-height: 1.0416666667;\n }\n}\n@media print {\n .govuk-heading-xl {\n font-size: 32pt;\n line-height: 1.15;\n }\n}\n@media (min-width: 40.0625em) {\n .govuk-heading-xl {\n margin-bottom: 50px;\n }\n}\n\n.govuk-heading-l {\n color: #0b0c0c;\n font-family: \"GDS Transport\", arial, sans-serif;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n font-weight: 700;\n font-size: 1.5rem;\n line-height: 1.0416666667;\n display: block;\n margin-top: 0;\n margin-bottom: 20px;\n}\n@media print {\n .govuk-heading-l {\n color: #000000;\n }\n}\n@media print {\n .govuk-heading-l {\n font-family: sans-serif;\n }\n}\n@media (min-width: 40.0625em) {\n .govuk-heading-l {\n font-size: 2.25rem;\n line-height: 1.1111111111;\n }\n}\n@media print {\n .govuk-heading-l {\n font-size: 24pt;\n line-height: 1.05;\n }\n}\n@media (min-width: 40.0625em) {\n .govuk-heading-l {\n margin-bottom: 30px;\n }\n}\n\n.govuk-heading-m {\n color: #0b0c0c;\n font-family: \"GDS Transport\", arial, sans-serif;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n font-weight: 700;\n font-size: 1.125rem;\n line-height: 1.1111111111;\n display: block;\n margin-top: 0;\n margin-bottom: 15px;\n}\n@media print {\n .govuk-heading-m {\n color: #000000;\n }\n}\n@media print {\n .govuk-heading-m {\n font-family: sans-serif;\n }\n}\n@media (min-width: 40.0625em) {\n .govuk-heading-m {\n font-size: 1.5rem;\n line-height: 1.25;\n }\n}\n@media print {\n .govuk-heading-m {\n font-size: 18pt;\n line-height: 1.15;\n }\n}\n@media (min-width: 40.0625em) {\n .govuk-heading-m {\n margin-bottom: 20px;\n }\n}\n\n.govuk-heading-s {\n color: #0b0c0c;\n font-family: \"GDS Transport\", arial, sans-serif;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n font-weight: 700;\n font-size: 1rem;\n line-height: 1.25;\n display: block;\n margin-top: 0;\n margin-bottom: 15px;\n}\n@media print {\n .govuk-heading-s {\n color: #000000;\n }\n}\n@media print {\n .govuk-heading-s {\n font-family: sans-serif;\n }\n}\n@media (min-width: 40.0625em) {\n .govuk-heading-s {\n font-size: 1.1875rem;\n line-height: 1.3157894737;\n }\n}\n@media print {\n .govuk-heading-s {\n font-size: 14pt;\n line-height: 1.15;\n }\n}\n@media (min-width: 40.0625em) {\n .govuk-heading-s {\n margin-bottom: 20px;\n }\n}\n\n.govuk-caption-xl {\n font-family: \"GDS Transport\", arial, sans-serif;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n font-weight: 400;\n font-size: 1.125rem;\n line-height: 1.1111111111;\n display: block;\n margin-bottom: 5px;\n color: #505a5f;\n}\n@media print {\n .govuk-caption-xl {\n font-family: sans-serif;\n }\n}\n@media (min-width: 40.0625em) {\n .govuk-caption-xl {\n font-size: 1.6875rem;\n line-height: 1.1111111111;\n }\n}\n@media print {\n .govuk-caption-xl {\n font-size: 18pt;\n line-height: 1.15;\n }\n}\n\n.govuk-caption-l {\n font-family: \"GDS Transport\", arial, sans-serif;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n font-weight: 400;\n font-size: 1.125rem;\n line-height: 1.1111111111;\n display: block;\n margin-bottom: 5px;\n color: #505a5f;\n}\n@media print {\n .govuk-caption-l {\n font-family: sans-serif;\n }\n}\n@media (min-width: 40.0625em) {\n .govuk-caption-l {\n font-size: 1.5rem;\n line-height: 1.25;\n }\n}\n@media print {\n .govuk-caption-l {\n font-size: 18pt;\n line-height: 1.15;\n }\n}\n@media (min-width: 40.0625em) {\n .govuk-caption-l {\n margin-bottom: 0;\n }\n}\n\n.govuk-caption-m {\n font-family: \"GDS Transport\", arial, sans-serif;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n font-weight: 400;\n font-size: 1rem;\n line-height: 1.25;\n display: block;\n color: #505a5f;\n}\n@media print {\n .govuk-caption-m {\n font-family: sans-serif;\n }\n}\n@media (min-width: 40.0625em) {\n .govuk-caption-m {\n font-size: 1.1875rem;\n line-height: 1.3157894737;\n }\n}\n@media print {\n .govuk-caption-m {\n font-size: 14pt;\n line-height: 1.15;\n }\n}\n\n.govuk-body-lead, .govuk-body-l {\n color: #0b0c0c;\n font-family: \"GDS Transport\", arial, sans-serif;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n font-weight: 400;\n font-size: 1.125rem;\n line-height: 1.1111111111;\n margin-top: 0;\n margin-bottom: 20px;\n}\n@media print {\n .govuk-body-lead, .govuk-body-l {\n color: #000000;\n }\n}\n@media print {\n .govuk-body-lead, .govuk-body-l {\n font-family: sans-serif;\n }\n}\n@media (min-width: 40.0625em) {\n .govuk-body-lead, .govuk-body-l {\n font-size: 1.5rem;\n line-height: 1.25;\n }\n}\n@media print {\n .govuk-body-lead, .govuk-body-l {\n font-size: 18pt;\n line-height: 1.15;\n }\n}\n@media (min-width: 40.0625em) {\n .govuk-body-lead, .govuk-body-l {\n margin-bottom: 30px;\n }\n}\n\n.govuk-body, .govuk-body-m {\n color: #0b0c0c;\n font-family: \"GDS Transport\", arial, sans-serif;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n font-weight: 400;\n font-size: 1rem;\n line-height: 1.25;\n margin-top: 0;\n margin-bottom: 15px;\n}\n@media print {\n .govuk-body, .govuk-body-m {\n color: #000000;\n }\n}\n@media print {\n .govuk-body, .govuk-body-m {\n font-family: sans-serif;\n }\n}\n@media (min-width: 40.0625em) {\n .govuk-body, .govuk-body-m {\n font-size: 1.1875rem;\n line-height: 1.3157894737;\n }\n}\n@media print {\n .govuk-body, .govuk-body-m {\n font-size: 14pt;\n line-height: 1.15;\n }\n}\n@media (min-width: 40.0625em) {\n .govuk-body, .govuk-body-m {\n margin-bottom: 20px;\n }\n}\n\n.govuk-body-s {\n color: #0b0c0c;\n font-family: \"GDS Transport\", arial, sans-serif;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n font-weight: 400;\n font-size: 0.875rem;\n line-height: 1.1428571429;\n margin-top: 0;\n margin-bottom: 15px;\n}\n@media print {\n .govuk-body-s {\n color: #000000;\n }\n}\n@media print {\n .govuk-body-s {\n font-family: sans-serif;\n }\n}\n@media (min-width: 40.0625em) {\n .govuk-body-s {\n font-size: 1rem;\n line-height: 1.25;\n }\n}\n@media print {\n .govuk-body-s {\n font-size: 14pt;\n line-height: 1.2;\n }\n}\n@media (min-width: 40.0625em) {\n .govuk-body-s {\n margin-bottom: 20px;\n }\n}\n\n.govuk-body-xs {\n color: #0b0c0c;\n font-family: \"GDS Transport\", arial, sans-serif;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n font-weight: 400;\n font-size: 0.75rem;\n line-height: 1.25;\n margin-top: 0;\n margin-bottom: 15px;\n}\n@media print {\n .govuk-body-xs {\n color: #000000;\n }\n}\n@media print {\n .govuk-body-xs {\n font-family: sans-serif;\n }\n}\n@media (min-width: 40.0625em) {\n .govuk-body-xs {\n font-size: 0.875rem;\n line-height: 1.4285714286;\n }\n}\n@media print {\n .govuk-body-xs {\n font-size: 12pt;\n line-height: 1.2;\n }\n}\n@media (min-width: 40.0625em) {\n .govuk-body-xs {\n margin-bottom: 20px;\n }\n}\n\n.govuk-body-l + .govuk-heading-l, .govuk-body-lead + .govuk-heading-l {\n padding-top: 5px;\n}\n@media (min-width: 40.0625em) {\n .govuk-body-l + .govuk-heading-l, .govuk-body-lead + .govuk-heading-l {\n padding-top: 10px;\n }\n}\n\n.govuk-body-m + .govuk-heading-l, .govuk-body + .govuk-heading-l,\n.govuk-body-s + .govuk-heading-l,\n.govuk-list + .govuk-heading-l {\n padding-top: 15px;\n}\n@media (min-width: 40.0625em) {\n .govuk-body-m + .govuk-heading-l, .govuk-body + .govuk-heading-l,\n .govuk-body-s + .govuk-heading-l,\n .govuk-list + .govuk-heading-l {\n padding-top: 20px;\n }\n}\n\n.govuk-body-m + .govuk-heading-m, .govuk-body + .govuk-heading-m,\n.govuk-body-s + .govuk-heading-m,\n.govuk-list + .govuk-heading-m,\n.govuk-body-m + .govuk-heading-s,\n.govuk-body + .govuk-heading-s,\n.govuk-body-s + .govuk-heading-s,\n.govuk-list + .govuk-heading-s {\n padding-top: 5px;\n}\n@media (min-width: 40.0625em) {\n .govuk-body-m + .govuk-heading-m, .govuk-body + .govuk-heading-m,\n .govuk-body-s + .govuk-heading-m,\n .govuk-list + .govuk-heading-m,\n .govuk-body-m + .govuk-heading-s,\n .govuk-body + .govuk-heading-s,\n .govuk-body-s + .govuk-heading-s,\n .govuk-list + .govuk-heading-s {\n padding-top: 10px;\n }\n}\n\n.govuk-section-break {\n margin: 0;\n border: 0;\n}\n\n.govuk-section-break--xl {\n margin-top: 30px;\n margin-bottom: 30px;\n}\n@media (min-width: 40.0625em) {\n .govuk-section-break--xl {\n margin-top: 50px;\n }\n}\n@media (min-width: 40.0625em) {\n .govuk-section-break--xl {\n margin-bottom: 50px;\n }\n}\n\n.govuk-section-break--l {\n margin-top: 20px;\n margin-bottom: 20px;\n}\n@media (min-width: 40.0625em) {\n .govuk-section-break--l {\n margin-top: 30px;\n }\n}\n@media (min-width: 40.0625em) {\n .govuk-section-break--l {\n margin-bottom: 30px;\n }\n}\n\n.govuk-section-break--m {\n margin-top: 15px;\n margin-bottom: 15px;\n}\n@media (min-width: 40.0625em) {\n .govuk-section-break--m {\n margin-top: 20px;\n }\n}\n@media (min-width: 40.0625em) {\n .govuk-section-break--m {\n margin-bottom: 20px;\n }\n}\n\n.govuk-section-break--visible {\n border-bottom: 1px solid #b1b4b6;\n}\n\n.govuk-button-group {\n margin-bottom: 5px;\n display: flex;\n flex-direction: column;\n align-items: center;\n}\n@media (min-width: 40.0625em) {\n .govuk-button-group {\n margin-bottom: 15px;\n }\n}\n.govuk-button-group .govuk-link {\n font-family: \"GDS Transport\", arial, sans-serif;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n font-weight: 400;\n font-size: 1rem;\n line-height: 1.1875;\n display: inline-block;\n max-width: 100%;\n margin-top: 5px;\n margin-bottom: 20px;\n text-align: center;\n}\n@media print {\n .govuk-button-group .govuk-link {\n font-family: sans-serif;\n }\n}\n@media (min-width: 40.0625em) {\n .govuk-button-group .govuk-link {\n font-size: 1.1875rem;\n line-height: 1;\n }\n}\n@media print {\n .govuk-button-group .govuk-link {\n font-size: 14pt;\n line-height: 19px;\n }\n}\n.govuk-button-group .govuk-button {\n margin-bottom: 17px;\n}\n@media (min-width: 40.0625em) {\n .govuk-button-group {\n margin-right: -15px;\n flex-direction: row;\n flex-wrap: wrap;\n align-items: baseline;\n }\n .govuk-button-group .govuk-button,\n .govuk-button-group .govuk-link {\n margin-right: 15px;\n }\n .govuk-button-group .govuk-link {\n text-align: left;\n }\n}\n\n.govuk-form-group {\n margin-bottom: 20px;\n}\n.govuk-form-group::after {\n content: \"\";\n display: block;\n clear: both;\n}\n@media (min-width: 40.0625em) {\n .govuk-form-group {\n margin-bottom: 30px;\n }\n}\n.govuk-form-group .govuk-form-group:last-of-type {\n margin-bottom: 0;\n}\n\n.govuk-form-group--error {\n padding-left: 15px;\n border-left: 5px solid #d4351c;\n}\n.govuk-form-group--error .govuk-form-group {\n padding: 0;\n border: 0;\n}\n\n.govuk-grid-row {\n margin-right: -15px;\n margin-left: -15px;\n}\n.govuk-grid-row::after {\n content: \"\";\n display: block;\n clear: both;\n}\n\n.govuk-grid-column-one-quarter {\n box-sizing: border-box;\n width: 100%;\n padding: 0 15px;\n}\n@media (min-width: 40.0625em) {\n .govuk-grid-column-one-quarter {\n width: 25%;\n float: left;\n }\n}\n\n.govuk-grid-column-one-third {\n box-sizing: border-box;\n width: 100%;\n padding: 0 15px;\n}\n@media (min-width: 40.0625em) {\n .govuk-grid-column-one-third {\n width: 33.3333333333%;\n float: left;\n }\n}\n\n.govuk-grid-column-one-half {\n box-sizing: border-box;\n width: 100%;\n padding: 0 15px;\n}\n@media (min-width: 40.0625em) {\n .govuk-grid-column-one-half {\n width: 50%;\n float: left;\n }\n}\n\n.govuk-grid-column-two-thirds {\n box-sizing: border-box;\n width: 100%;\n padding: 0 15px;\n}\n@media (min-width: 40.0625em) {\n .govuk-grid-column-two-thirds {\n width: 66.6666666667%;\n float: left;\n }\n}\n\n.govuk-grid-column-three-quarters {\n box-sizing: border-box;\n width: 100%;\n padding: 0 15px;\n}\n@media (min-width: 40.0625em) {\n .govuk-grid-column-three-quarters {\n width: 75%;\n float: left;\n }\n}\n\n.govuk-grid-column-full {\n box-sizing: border-box;\n width: 100%;\n padding: 0 15px;\n}\n@media (min-width: 40.0625em) {\n .govuk-grid-column-full {\n width: 100%;\n float: left;\n }\n}\n\n.govuk-grid-column-one-quarter-from-desktop {\n box-sizing: border-box;\n padding: 0 15px;\n}\n@media (min-width: 48.0625em) {\n .govuk-grid-column-one-quarter-from-desktop {\n width: 25%;\n float: left;\n }\n}\n\n.govuk-grid-column-one-third-from-desktop {\n box-sizing: border-box;\n padding: 0 15px;\n}\n@media (min-width: 48.0625em) {\n .govuk-grid-column-one-third-from-desktop {\n width: 33.3333333333%;\n float: left;\n }\n}\n\n.govuk-grid-column-one-half-from-desktop {\n box-sizing: border-box;\n padding: 0 15px;\n}\n@media (min-width: 48.0625em) {\n .govuk-grid-column-one-half-from-desktop {\n width: 50%;\n float: left;\n }\n}\n\n.govuk-grid-column-two-thirds-from-desktop {\n box-sizing: border-box;\n padding: 0 15px;\n}\n@media (min-width: 48.0625em) {\n .govuk-grid-column-two-thirds-from-desktop {\n width: 66.6666666667%;\n float: left;\n }\n}\n\n.govuk-grid-column-three-quarters-from-desktop {\n box-sizing: border-box;\n padding: 0 15px;\n}\n@media (min-width: 48.0625em) {\n .govuk-grid-column-three-quarters-from-desktop {\n width: 75%;\n float: left;\n }\n}\n\n.govuk-grid-column-full-from-desktop {\n box-sizing: border-box;\n padding: 0 15px;\n}\n@media (min-width: 48.0625em) {\n .govuk-grid-column-full-from-desktop {\n width: 100%;\n float: left;\n }\n}\n\n.govuk-main-wrapper {\n display: block;\n padding-top: 20px;\n padding-bottom: 20px;\n}\n@media (min-width: 40.0625em) {\n .govuk-main-wrapper {\n padding-top: 40px;\n padding-bottom: 40px;\n }\n}\n\n.govuk-main-wrapper--auto-spacing:first-child,\n.govuk-main-wrapper--l {\n padding-top: 30px;\n}\n@media (min-width: 40.0625em) {\n .govuk-main-wrapper--auto-spacing:first-child,\n .govuk-main-wrapper--l {\n padding-top: 50px;\n }\n}\n\n.govuk-template {\n background-color: #f3f2f1;\n text-size-adjust: 100%;\n}\n@supports (position: sticky) {\n .govuk-template {\n scroll-padding-top: 60px;\n }\n .govuk-template:not(:has(.govuk-exit-this-page)) {\n scroll-padding-top: 0;\n }\n}\n@media screen {\n .govuk-template {\n overflow-y: scroll;\n }\n}\n\n.govuk-template__body {\n margin: 0;\n background-color: #ffffff;\n}\n\n.govuk-width-container {\n max-width: 960px;\n margin-right: 15px;\n margin-left: 15px;\n}\n@supports (margin: max(calc(0px))) {\n .govuk-width-container {\n margin-right: max(15px, calc(15px + env(safe-area-inset-right)));\n margin-left: max(15px, calc(15px + env(safe-area-inset-left)));\n }\n}\n@media (min-width: 40.0625em) {\n .govuk-width-container {\n margin-right: 30px;\n margin-left: 30px;\n }\n @supports (margin: max(calc(0px))) {\n .govuk-width-container {\n margin-right: max(30px, calc(15px + env(safe-area-inset-right)));\n margin-left: max(30px, calc(15px + env(safe-area-inset-left)));\n }\n }\n}\n@media (min-width: 1020px) {\n .govuk-width-container {\n margin-right: auto;\n margin-left: auto;\n }\n @supports (margin: max(calc(0px))) {\n .govuk-width-container {\n margin-right: auto;\n margin-left: auto;\n }\n }\n}\n\n.govuk-accordion {\n margin-bottom: 20px;\n}\n@media (min-width: 40.0625em) {\n .govuk-accordion {\n margin-bottom: 30px;\n }\n}\n\n.govuk-accordion__section {\n padding-top: 15px;\n}\n\n.govuk-accordion__section-heading {\n margin-top: 0;\n margin-bottom: 0;\n padding-top: 15px;\n padding-bottom: 15px;\n}\n\n.govuk-accordion__section-button {\n font-family: \"GDS Transport\", arial, sans-serif;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n font-weight: 700;\n font-size: 1.125rem;\n line-height: 1.1111111111;\n color: #0b0c0c;\n display: block;\n margin-bottom: 0;\n padding-top: 15px;\n}\n@media print {\n .govuk-accordion__section-button {\n font-family: sans-serif;\n }\n}\n@media (min-width: 40.0625em) {\n .govuk-accordion__section-button {\n font-size: 1.5rem;\n line-height: 1.25;\n }\n}\n@media print {\n .govuk-accordion__section-button {\n font-size: 18pt;\n line-height: 1.15;\n }\n}\n@media print {\n .govuk-accordion__section-button {\n color: #000000;\n }\n}\n\n.govuk-accordion__section-content > :last-child {\n margin-bottom: 0;\n}\n\n.govuk-frontend-supported .govuk-accordion {\n border-bottom: 1px solid #b1b4b6;\n}\n.govuk-frontend-supported .govuk-accordion__section {\n padding-top: 0;\n}\n.govuk-frontend-supported .govuk-accordion__section-content {\n display: none;\n padding-top: 15px;\n padding-bottom: 30px;\n}\n@media (min-width: 40.0625em) {\n .govuk-frontend-supported .govuk-accordion__section-content {\n padding-bottom: 50px;\n }\n}\n.govuk-frontend-supported .govuk-accordion__section-content[hidden] {\n padding-top: 0;\n padding-bottom: 0;\n}\n@supports (content-visibility: hidden) {\n .govuk-frontend-supported .govuk-accordion__section-content[hidden] {\n content-visibility: hidden;\n display: inherit;\n }\n}\n.govuk-frontend-supported .govuk-accordion__section--expanded .govuk-accordion__section-content {\n display: block;\n}\n.govuk-frontend-supported .govuk-accordion__show-all {\n font-family: \"GDS Transport\", arial, sans-serif;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n font-weight: 400;\n font-size: 1rem;\n line-height: 1.25;\n position: relative;\n z-index: 1;\n margin-bottom: 9px;\n padding: 5px 2px 5px 0;\n border-width: 0;\n color: #1d70b8;\n background: none;\n cursor: pointer;\n -webkit-appearance: none;\n}\n@media print {\n .govuk-frontend-supported .govuk-accordion__show-all {\n font-family: sans-serif;\n }\n}\n@media (min-width: 40.0625em) {\n .govuk-frontend-supported .govuk-accordion__show-all {\n font-size: 1.1875rem;\n line-height: 1.3157894737;\n }\n}\n@media print {\n .govuk-frontend-supported .govuk-accordion__show-all {\n font-size: 14pt;\n line-height: 1.15;\n }\n}\n@media (min-width: 40.0625em) {\n .govuk-frontend-supported .govuk-accordion__show-all {\n margin-bottom: 14px;\n }\n}\n.govuk-frontend-supported .govuk-accordion__show-all::-moz-focus-inner {\n padding: 0;\n border: 0;\n}\n.govuk-frontend-supported .govuk-accordion__show-all:hover {\n color: #0b0c0c;\n background: #f3f2f1;\n box-shadow: 0 -2px #f3f2f1, 0 4px #f3f2f1;\n}\n.govuk-frontend-supported .govuk-accordion__show-all:hover .govuk-accordion__section-toggle-text {\n color: #0b0c0c;\n}\n.govuk-frontend-supported .govuk-accordion__show-all:hover .govuk-accordion-nav__chevron {\n color: #0b0c0c;\n background: #0b0c0c;\n}\n.govuk-frontend-supported .govuk-accordion__show-all:hover .govuk-accordion-nav__chevron::after {\n color: #f3f2f1;\n}\n.govuk-frontend-supported .govuk-accordion__show-all:focus {\n outline: 3px solid transparent;\n color: #0b0c0c;\n background-color: #ffdd00;\n box-shadow: 0 -2px #ffdd00, 0 4px #0b0c0c;\n text-decoration: none;\n box-decoration-break: clone;\n}\n.govuk-frontend-supported .govuk-accordion__show-all:focus .govuk-accordion-nav__chevron {\n background: #0b0c0c;\n}\n.govuk-frontend-supported .govuk-accordion__show-all:focus .govuk-accordion-nav__chevron::after {\n color: #ffdd00;\n}\n.govuk-frontend-supported .govuk-accordion__section-heading {\n padding: 0;\n}\n.govuk-frontend-supported .govuk-accordion-nav__chevron {\n box-sizing: border-box;\n display: inline-block;\n position: relative;\n width: 1.25rem;\n height: 1.25rem;\n border: 0.0625rem solid;\n border-radius: 50%;\n vertical-align: middle;\n}\n.govuk-frontend-supported .govuk-accordion-nav__chevron::after {\n content: \"\";\n box-sizing: border-box;\n display: block;\n position: absolute;\n bottom: 0.3125rem;\n left: 0.375rem;\n width: 0.375rem;\n height: 0.375rem;\n transform: rotate(-45deg);\n border-top: 0.125rem solid;\n border-right: 0.125rem solid;\n}\n.govuk-frontend-supported .govuk-accordion-nav__chevron--down {\n transform: rotate(180deg);\n}\n.govuk-frontend-supported .govuk-accordion__section-button {\n width: 100%;\n padding: 10px 0 0;\n border: 0;\n border-top: 1px solid #b1b4b6;\n border-bottom: 10px solid transparent;\n color: #0b0c0c;\n background: none;\n text-align: left;\n cursor: pointer;\n -webkit-appearance: none;\n}\n@media (min-width: 40.0625em) {\n .govuk-frontend-supported .govuk-accordion__section-button {\n padding-bottom: 10px;\n }\n}\n.govuk-frontend-supported .govuk-accordion__section-button:active {\n color: #0b0c0c;\n background: none;\n}\n.govuk-frontend-supported .govuk-accordion__section-button:hover {\n color: #0b0c0c;\n background: #f3f2f1;\n}\n.govuk-frontend-supported .govuk-accordion__section-button:hover .govuk-accordion__section-toggle-text {\n color: #0b0c0c;\n}\n.govuk-frontend-supported .govuk-accordion__section-button:hover .govuk-accordion-nav__chevron {\n color: #0b0c0c;\n background: #0b0c0c;\n}\n.govuk-frontend-supported .govuk-accordion__section-button:hover .govuk-accordion-nav__chevron::after {\n color: #f3f2f1;\n}\n.govuk-frontend-supported .govuk-accordion__section-button:focus {\n outline: 0;\n}\n.govuk-frontend-supported .govuk-accordion__section-button:focus .govuk-accordion__section-heading-text-focus,\n.govuk-frontend-supported .govuk-accordion__section-button:focus .govuk-accordion__section-summary-focus,\n.govuk-frontend-supported .govuk-accordion__section-button:focus .govuk-accordion__section-toggle-focus {\n outline: 3px solid transparent;\n color: #0b0c0c;\n background-color: #ffdd00;\n box-shadow: 0 -2px #ffdd00, 0 4px #0b0c0c;\n text-decoration: none;\n box-decoration-break: clone;\n}\n.govuk-frontend-supported .govuk-accordion__section-button:focus .govuk-accordion-nav__chevron {\n color: #0b0c0c;\n background: #0b0c0c;\n}\n.govuk-frontend-supported .govuk-accordion__section-button:focus .govuk-accordion-nav__chevron::after {\n color: #ffdd00;\n}\n.govuk-frontend-supported .govuk-accordion__section-button::-moz-focus-inner {\n padding: 0;\n border: 0;\n}\n.govuk-frontend-supported .govuk-accordion__section--expanded .govuk-accordion__section-button {\n padding-bottom: 15px;\n border-bottom: 0;\n}\n@media (min-width: 40.0625em) {\n .govuk-frontend-supported .govuk-accordion__section--expanded .govuk-accordion__section-button {\n padding-bottom: 20px;\n }\n}\n.govuk-frontend-supported .govuk-accordion__section-button:focus .govuk-accordion__section-toggle-focus {\n padding-bottom: 3px;\n}\n@media (min-width: 48.0625em) {\n .govuk-frontend-supported .govuk-accordion__section-button:focus .govuk-accordion__section-toggle-focus {\n padding-bottom: 2px;\n }\n}\n.govuk-frontend-supported .govuk-accordion__section-toggle,\n.govuk-frontend-supported .govuk-accordion__section-heading-text,\n.govuk-frontend-supported .govuk-accordion__section-summary {\n display: block;\n margin-bottom: 13px;\n}\n.govuk-frontend-supported .govuk-accordion__section-toggle .govuk-accordion__section-heading-text-focus,\n.govuk-frontend-supported .govuk-accordion__section-toggle .govuk-accordion__section-summary-focus,\n.govuk-frontend-supported .govuk-accordion__section-toggle .govuk-accordion__section-toggle-focus,\n.govuk-frontend-supported .govuk-accordion__section-heading-text .govuk-accordion__section-heading-text-focus,\n.govuk-frontend-supported .govuk-accordion__section-heading-text .govuk-accordion__section-summary-focus,\n.govuk-frontend-supported .govuk-accordion__section-heading-text .govuk-accordion__section-toggle-focus,\n.govuk-frontend-supported .govuk-accordion__section-summary .govuk-accordion__section-heading-text-focus,\n.govuk-frontend-supported .govuk-accordion__section-summary .govuk-accordion__section-summary-focus,\n.govuk-frontend-supported .govuk-accordion__section-summary .govuk-accordion__section-toggle-focus {\n display: inline;\n}\n.govuk-frontend-supported .govuk-accordion__section-toggle {\n font-size: 1rem;\n line-height: 1.25;\n font-weight: 400;\n color: #1d70b8;\n}\n@media (min-width: 40.0625em) {\n .govuk-frontend-supported .govuk-accordion__section-toggle {\n font-size: 1.1875rem;\n line-height: 1.3157894737;\n }\n}\n@media print {\n .govuk-frontend-supported .govuk-accordion__section-toggle {\n font-size: 14pt;\n line-height: 1.15;\n }\n}\n.govuk-frontend-supported .govuk-accordion__show-all-text,\n.govuk-frontend-supported .govuk-accordion__section-toggle-text {\n margin-left: 5px;\n vertical-align: middle;\n}\n@media screen and (forced-colors: active) {\n .govuk-frontend-supported .govuk-accordion__show-all:hover .govuk-accordion-nav__chevron,\n .govuk-frontend-supported .govuk-accordion__section-button:hover .govuk-accordion-nav__chevron {\n background-color: transparent;\n }\n .govuk-frontend-supported .govuk-accordion__show-all:focus .govuk-accordion__section-heading-text-focus,\n .govuk-frontend-supported .govuk-accordion__show-all:focus .govuk-accordion__section-summary-focus,\n .govuk-frontend-supported .govuk-accordion__show-all:focus .govuk-accordion__section-toggle-focus,\n .govuk-frontend-supported .govuk-accordion__show-all:focus .govuk-accordion-nav__chevron,\n .govuk-frontend-supported .govuk-accordion__section-button:focus .govuk-accordion__section-heading-text-focus,\n .govuk-frontend-supported .govuk-accordion__section-button:focus .govuk-accordion__section-summary-focus,\n .govuk-frontend-supported .govuk-accordion__section-button:focus .govuk-accordion__section-toggle-focus,\n .govuk-frontend-supported .govuk-accordion__section-button:focus .govuk-accordion-nav__chevron {\n background: transparent;\n background-color: transparent;\n }\n}\n@media (hover: none) {\n .govuk-frontend-supported .govuk-accordion__section-header:hover {\n border-top-color: #b1b4b6;\n box-shadow: inset 0 3px 0 0 #1d70b8;\n }\n .govuk-frontend-supported .govuk-accordion__section-header:hover .govuk-accordion__section-button {\n border-top-color: #b1b4b6;\n }\n}\n\n.govuk-back-link {\n font-size: 0.875rem;\n line-height: 1.1428571429;\n font-family: \"GDS Transport\", arial, sans-serif;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n text-decoration: underline;\n text-decoration-thickness: max(1px, .0625rem);\n text-underline-offset: 0.1578em;\n display: inline-block;\n position: relative;\n margin-top: 15px;\n margin-bottom: 15px;\n padding-left: 0.875em;\n}\n@media (min-width: 40.0625em) {\n .govuk-back-link {\n font-size: 1rem;\n line-height: 1.25;\n }\n}\n@media print {\n .govuk-back-link {\n font-size: 14pt;\n line-height: 1.2;\n }\n}\n@media print {\n .govuk-back-link {\n font-family: sans-serif;\n }\n}\n.govuk-back-link:hover {\n text-decoration-thickness: max(3px, .1875rem, .12em);\n text-decoration-skip-ink: none;\n text-decoration-skip: none;\n}\n.govuk-back-link:focus {\n outline: 3px solid transparent;\n color: #0b0c0c;\n background-color: #ffdd00;\n box-shadow: 0 -2px #ffdd00, 0 4px #0b0c0c;\n text-decoration: none;\n box-decoration-break: clone;\n}\n.govuk-back-link:link, .govuk-back-link:visited {\n color: #0b0c0c;\n}\n@media print {\n .govuk-back-link:link, .govuk-back-link:visited {\n color: #000000;\n }\n}\n.govuk-back-link:hover {\n color: rgba(11, 12, 12, 0.99);\n}\n.govuk-back-link:active, .govuk-back-link:focus {\n color: #0b0c0c;\n}\n@media print {\n .govuk-back-link:active, .govuk-back-link:focus {\n color: #000000;\n }\n}\n\n.govuk-back-link::before {\n content: \"\";\n display: block;\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0.1875em;\n width: 0.4375em;\n height: 0.4375em;\n margin: auto 0;\n transform: rotate(225deg);\n border: solid;\n border-width: 1px 1px 0 0;\n border-color: #505a5f;\n}\n@supports (border-width: max(0px)) {\n .govuk-back-link::before {\n border-width: max(1px, 0.0625em) max(1px, 0.0625em) 0 0;\n font-size: max(16px, 1em);\n }\n}\n\n.govuk-back-link:focus::before {\n border-color: #0b0c0c;\n}\n\n.govuk-back-link::after {\n content: \"\";\n position: absolute;\n top: -14px;\n right: 0;\n bottom: -14px;\n left: 0;\n}\n\n.govuk-back-link--inverse:link, .govuk-back-link--inverse:visited {\n color: #ffffff;\n}\n.govuk-back-link--inverse:hover, .govuk-back-link--inverse:active {\n color: rgba(255, 255, 255, 0.99);\n}\n.govuk-back-link--inverse:focus {\n color: #0b0c0c;\n}\n.govuk-back-link--inverse::before {\n border-color: currentcolor;\n}\n\n.govuk-breadcrumbs {\n font-family: \"GDS Transport\", arial, sans-serif;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n font-weight: 400;\n font-size: 0.875rem;\n line-height: 1.1428571429;\n color: #0b0c0c;\n margin-top: 15px;\n margin-bottom: 10px;\n}\n@media print {\n .govuk-breadcrumbs {\n font-family: sans-serif;\n }\n}\n@media (min-width: 40.0625em) {\n .govuk-breadcrumbs {\n font-size: 1rem;\n line-height: 1.25;\n }\n}\n@media print {\n .govuk-breadcrumbs {\n font-size: 14pt;\n line-height: 1.2;\n }\n}\n@media print {\n .govuk-breadcrumbs {\n color: #000000;\n }\n}\n\n.govuk-breadcrumbs__list {\n margin: 0;\n padding: 0;\n list-style-type: none;\n}\n.govuk-breadcrumbs__list::after {\n content: \"\";\n display: block;\n clear: both;\n}\n\n.govuk-breadcrumbs__list-item {\n display: inline-block;\n position: relative;\n margin-bottom: 5px;\n margin-left: 0.625em;\n padding-left: 0.9784375em;\n float: left;\n}\n.govuk-breadcrumbs__list-item::before {\n content: \"\";\n display: block;\n position: absolute;\n top: 0;\n bottom: 0;\n left: -0.206875em;\n width: 0.4375em;\n height: 0.4375em;\n margin: auto 0;\n transform: rotate(45deg);\n border: solid;\n border-width: 1px 1px 0 0;\n border-color: #505a5f;\n}\n@supports (border-width: max(0px)) {\n .govuk-breadcrumbs__list-item::before {\n border-width: max(1px, 0.0625em) max(1px, 0.0625em) 0 0;\n font-size: max(16px, 1em);\n }\n}\n.govuk-breadcrumbs__list-item:first-child {\n margin-left: 0;\n padding-left: 0;\n}\n.govuk-breadcrumbs__list-item:first-child::before {\n content: none;\n display: none;\n}\n\n.govuk-breadcrumbs__link {\n font-family: \"GDS Transport\", arial, sans-serif;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n text-decoration: underline;\n text-decoration-thickness: max(1px, .0625rem);\n text-underline-offset: 0.1578em;\n}\n@media print {\n .govuk-breadcrumbs__link {\n font-family: sans-serif;\n }\n}\n.govuk-breadcrumbs__link:hover {\n text-decoration-thickness: max(3px, .1875rem, .12em);\n text-decoration-skip-ink: none;\n text-decoration-skip: none;\n}\n.govuk-breadcrumbs__link:focus {\n outline: 3px solid transparent;\n color: #0b0c0c;\n background-color: #ffdd00;\n box-shadow: 0 -2px #ffdd00, 0 4px #0b0c0c;\n text-decoration: none;\n box-decoration-break: clone;\n}\n.govuk-breadcrumbs__link:link, .govuk-breadcrumbs__link:visited {\n color: #0b0c0c;\n}\n@media print {\n .govuk-breadcrumbs__link:link, .govuk-breadcrumbs__link:visited {\n color: #000000;\n }\n}\n.govuk-breadcrumbs__link:hover {\n color: rgba(11, 12, 12, 0.99);\n}\n.govuk-breadcrumbs__link:active, .govuk-breadcrumbs__link:focus {\n color: #0b0c0c;\n}\n@media print {\n .govuk-breadcrumbs__link:active, .govuk-breadcrumbs__link:focus {\n color: #000000;\n }\n}\n\n@media (max-width: 40.0525em) {\n .govuk-breadcrumbs--collapse-on-mobile .govuk-breadcrumbs__list-item {\n display: none;\n }\n .govuk-breadcrumbs--collapse-on-mobile .govuk-breadcrumbs__list-item:first-child, .govuk-breadcrumbs--collapse-on-mobile .govuk-breadcrumbs__list-item:last-child {\n display: inline-block;\n }\n .govuk-breadcrumbs--collapse-on-mobile .govuk-breadcrumbs__list-item::before {\n top: 0.375em;\n margin: 0;\n }\n .govuk-breadcrumbs--collapse-on-mobile .govuk-breadcrumbs__list {\n display: flex;\n }\n}\n\n.govuk-breadcrumbs--inverse {\n color: #ffffff;\n}\n.govuk-breadcrumbs--inverse .govuk-breadcrumbs__link:link, .govuk-breadcrumbs--inverse .govuk-breadcrumbs__link:visited {\n color: #ffffff;\n}\n.govuk-breadcrumbs--inverse .govuk-breadcrumbs__link:hover, .govuk-breadcrumbs--inverse .govuk-breadcrumbs__link:active {\n color: rgba(255, 255, 255, 0.99);\n}\n.govuk-breadcrumbs--inverse .govuk-breadcrumbs__link:focus {\n color: #0b0c0c;\n}\n.govuk-breadcrumbs--inverse .govuk-breadcrumbs__list-item::before {\n border-color: currentcolor;\n}\n\n.govuk-button {\n font-family: \"GDS Transport\", arial, sans-serif;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n font-weight: 400;\n font-size: 1rem;\n line-height: 1.1875;\n box-sizing: border-box;\n display: inline-block;\n position: relative;\n width: 100%;\n margin-top: 0;\n margin-right: 0;\n margin-left: 0;\n margin-bottom: 22px;\n padding: 8px 10px 7px;\n border: 2px solid transparent;\n border-radius: 0;\n color: #ffffff;\n background-color: #00703c;\n box-shadow: 0 2px 0 #002d18;\n text-align: center;\n vertical-align: top;\n cursor: pointer;\n -webkit-appearance: none;\n}\n@media print {\n .govuk-button {\n font-family: sans-serif;\n }\n}\n@media (min-width: 40.0625em) {\n .govuk-button {\n font-size: 1.1875rem;\n line-height: 1;\n }\n}\n@media print {\n .govuk-button {\n font-size: 14pt;\n line-height: 19px;\n }\n}\n@media (min-width: 40.0625em) {\n .govuk-button {\n margin-bottom: 32px;\n }\n}\n@media (min-width: 40.0625em) {\n .govuk-button {\n width: auto;\n }\n}\n.govuk-button:link, .govuk-button:visited, .govuk-button:active, .govuk-button:hover {\n color: #ffffff;\n text-decoration: none;\n}\n.govuk-button::-moz-focus-inner {\n padding: 0;\n border: 0;\n}\n.govuk-button:hover {\n background-color: #005a30;\n}\n.govuk-button:active {\n top: 2px;\n}\n.govuk-button:focus {\n border-color: #ffdd00;\n outline: 3px solid transparent;\n box-shadow: inset 0 0 0 1px #ffdd00;\n}\n.govuk-button:focus:not(:active):not(:hover) {\n border-color: #ffdd00;\n color: #0b0c0c;\n background-color: #ffdd00;\n box-shadow: 0 2px 0 #0b0c0c;\n}\n.govuk-button::before {\n content: \"\";\n display: block;\n position: absolute;\n top: -2px;\n right: -2px;\n bottom: -4px;\n left: -2px;\n background: transparent;\n}\n.govuk-button:active::before {\n top: -4px;\n}\n\n.govuk-button[disabled] {\n opacity: 0.5;\n}\n.govuk-button[disabled]:hover {\n background-color: #00703c;\n cursor: not-allowed;\n}\n.govuk-button[disabled]:active {\n top: 0;\n box-shadow: 0 2px 0 #002d18;\n}\n\n.govuk-button--secondary {\n background-color: #f3f2f1;\n box-shadow: 0 2px 0 #929191;\n}\n.govuk-button--secondary, .govuk-button--secondary:link, .govuk-button--secondary:visited, .govuk-button--secondary:active, .govuk-button--secondary:hover {\n color: #0b0c0c;\n}\n.govuk-button--secondary:hover {\n background-color: #dbdad9;\n}\n.govuk-button--secondary:hover[disabled] {\n background-color: #f3f2f1;\n}\n\n.govuk-button--warning {\n background-color: #d4351c;\n box-shadow: 0 2px 0 #55150b;\n}\n.govuk-button--warning, .govuk-button--warning:link, .govuk-button--warning:visited, .govuk-button--warning:active, .govuk-button--warning:hover {\n color: #ffffff;\n}\n.govuk-button--warning:hover {\n background-color: #aa2a16;\n}\n.govuk-button--warning:hover[disabled] {\n background-color: #d4351c;\n}\n\n.govuk-button--inverse {\n background-color: #ffffff;\n box-shadow: 0 2px 0 #144e81;\n}\n.govuk-button--inverse, .govuk-button--inverse:link, .govuk-button--inverse:visited, .govuk-button--inverse:active, .govuk-button--inverse:hover {\n color: #1d70b8;\n}\n.govuk-button--inverse:hover {\n background-color: #e8f1f8;\n}\n.govuk-button--inverse:hover[disabled] {\n background-color: #ffffff;\n}\n\n.govuk-button--start {\n font-weight: 700;\n font-size: 1.125rem;\n line-height: 1;\n display: inline-flex;\n min-height: auto;\n justify-content: center;\n}\n@media (min-width: 40.0625em) {\n .govuk-button--start {\n font-size: 1.5rem;\n line-height: 1;\n }\n}\n@media print {\n .govuk-button--start {\n font-size: 18pt;\n line-height: 1;\n }\n}\n\n.govuk-button__start-icon {\n margin-left: 5px;\n vertical-align: middle;\n flex-shrink: 0;\n align-self: center;\n forced-color-adjust: auto;\n}\n@media (min-width: 48.0625em) {\n .govuk-button__start-icon {\n margin-left: 10px;\n }\n}\n\n.govuk-error-message {\n font-family: \"GDS Transport\", arial, sans-serif;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n font-weight: 700;\n font-size: 1rem;\n line-height: 1.25;\n display: block;\n margin-top: 0;\n margin-bottom: 15px;\n clear: both;\n color: #d4351c;\n}\n@media print {\n .govuk-error-message {\n font-family: sans-serif;\n }\n}\n@media (min-width: 40.0625em) {\n .govuk-error-message {\n font-size: 1.1875rem;\n line-height: 1.3157894737;\n }\n}\n@media print {\n .govuk-error-message {\n font-size: 14pt;\n line-height: 1.15;\n }\n}\n\n.govuk-hint {\n font-family: \"GDS Transport\", arial, sans-serif;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n font-weight: 400;\n font-size: 1rem;\n line-height: 1.25;\n margin-bottom: 15px;\n color: #505a5f;\n}\n@media print {\n .govuk-hint {\n font-family: sans-serif;\n }\n}\n@media (min-width: 40.0625em) {\n .govuk-hint {\n font-size: 1.1875rem;\n line-height: 1.3157894737;\n }\n}\n@media print {\n .govuk-hint {\n font-size: 14pt;\n line-height: 1.15;\n }\n}\n\n.govuk-label:not(.govuk-label--m):not(.govuk-label--l):not(.govuk-label--xl) + .govuk-hint {\n margin-bottom: 10px;\n}\n\n.govuk-fieldset__legend:not(.govuk-fieldset__legend--m):not(.govuk-fieldset__legend--l):not(.govuk-fieldset__legend--xl) + .govuk-hint {\n margin-bottom: 10px;\n}\n\n.govuk-fieldset__legend + .govuk-hint {\n margin-top: -5px;\n}\n\n.govuk-label {\n font-family: \"GDS Transport\", arial, sans-serif;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n font-weight: 400;\n font-size: 1rem;\n line-height: 1.25;\n color: #0b0c0c;\n display: block;\n margin-bottom: 5px;\n}\n@media print {\n .govuk-label {\n font-family: sans-serif;\n }\n}\n@media (min-width: 40.0625em) {\n .govuk-label {\n font-size: 1.1875rem;\n line-height: 1.3157894737;\n }\n}\n@media print {\n .govuk-label {\n font-size: 14pt;\n line-height: 1.15;\n }\n}\n@media print {\n .govuk-label {\n color: #000000;\n }\n}\n\n.govuk-label--xl,\n.govuk-label--l,\n.govuk-label--m {\n font-weight: 700;\n margin-bottom: 15px;\n}\n\n.govuk-label--xl {\n font-size: 2rem;\n line-height: 1.09375;\n}\n@media (min-width: 40.0625em) {\n .govuk-label--xl {\n font-size: 3rem;\n line-height: 1.0416666667;\n }\n}\n@media print {\n .govuk-label--xl {\n font-size: 32pt;\n line-height: 1.15;\n }\n}\n\n.govuk-label--l {\n font-size: 1.5rem;\n line-height: 1.0416666667;\n}\n@media (min-width: 40.0625em) {\n .govuk-label--l {\n font-size: 2.25rem;\n line-height: 1.1111111111;\n }\n}\n@media print {\n .govuk-label--l {\n font-size: 24pt;\n line-height: 1.05;\n }\n}\n\n.govuk-label--m {\n font-size: 1.125rem;\n line-height: 1.1111111111;\n}\n@media (min-width: 40.0625em) {\n .govuk-label--m {\n font-size: 1.5rem;\n line-height: 1.25;\n }\n}\n@media print {\n .govuk-label--m {\n font-size: 18pt;\n line-height: 1.15;\n }\n}\n\n.govuk-label--s {\n font-weight: 700;\n}\n\n.govuk-label-wrapper {\n margin: 0;\n}\n\n.govuk-textarea {\n font-family: \"GDS Transport\", arial, sans-serif;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n font-weight: 400;\n font-size: 1rem;\n line-height: 1.25;\n box-sizing: border-box;\n display: block;\n width: 100%;\n min-height: 40px;\n margin-bottom: 20px;\n padding: 5px;\n resize: vertical;\n border: 2px solid #0b0c0c;\n border-radius: 0;\n -webkit-appearance: none;\n}\n@media print {\n .govuk-textarea {\n font-family: sans-serif;\n }\n}\n@media (min-width: 40.0625em) {\n .govuk-textarea {\n font-size: 1.1875rem;\n line-height: 1.25;\n }\n}\n@media print {\n .govuk-textarea {\n font-size: 14pt;\n line-height: 1.25;\n }\n}\n@media (min-width: 40.0625em) {\n .govuk-textarea {\n margin-bottom: 30px;\n }\n}\n.govuk-textarea:focus {\n outline: 3px solid #ffdd00;\n outline-offset: 0;\n box-shadow: inset 0 0 0 2px;\n}\n.govuk-textarea:disabled {\n opacity: 0.5;\n color: inherit;\n background-color: transparent;\n cursor: not-allowed;\n}\n\n.govuk-textarea--error {\n border-color: #d4351c;\n}\n.govuk-textarea--error:focus {\n border-color: #0b0c0c;\n}\n\n.govuk-character-count {\n margin-bottom: 20px;\n}\n@media (min-width: 40.0625em) {\n .govuk-character-count {\n margin-bottom: 30px;\n }\n}\n.govuk-character-count .govuk-form-group,\n.govuk-character-count .govuk-textarea {\n margin-bottom: 5px;\n}\n\n.govuk-character-count__message {\n font-variant-numeric: tabular-nums;\n margin-top: 0;\n margin-bottom: 0;\n}\n.govuk-character-count__message::after {\n content: \"​\";\n}\n\n.govuk-character-count__message--disabled {\n visibility: hidden;\n}\n\n.govuk-fieldset {\n min-width: 0;\n margin: 0;\n padding: 0;\n border: 0;\n}\n.govuk-fieldset::after {\n content: \"\";\n display: block;\n clear: both;\n}\n\n@supports not (caret-color: auto) {\n .govuk-fieldset,\n x:-moz-any-link {\n display: table-cell;\n }\n}\n.govuk-fieldset__legend {\n font-family: \"GDS Transport\", arial, sans-serif;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n font-weight: 400;\n font-size: 1rem;\n line-height: 1.25;\n color: #0b0c0c;\n box-sizing: border-box;\n display: table;\n max-width: 100%;\n margin-bottom: 10px;\n padding: 0;\n white-space: normal;\n}\n@media print {\n .govuk-fieldset__legend {\n font-family: sans-serif;\n }\n}\n@media (min-width: 40.0625em) {\n .govuk-fieldset__legend {\n font-size: 1.1875rem;\n line-height: 1.3157894737;\n }\n}\n@media print {\n .govuk-fieldset__legend {\n font-size: 14pt;\n line-height: 1.15;\n }\n}\n@media print {\n .govuk-fieldset__legend {\n color: #000000;\n }\n}\n\n.govuk-fieldset__legend--xl,\n.govuk-fieldset__legend--l,\n.govuk-fieldset__legend--m {\n font-weight: 700;\n margin-bottom: 15px;\n}\n\n.govuk-fieldset__legend--xl {\n font-size: 2rem;\n line-height: 1.09375;\n}\n@media (min-width: 40.0625em) {\n .govuk-fieldset__legend--xl {\n font-size: 3rem;\n line-height: 1.0416666667;\n }\n}\n@media print {\n .govuk-fieldset__legend--xl {\n font-size: 32pt;\n line-height: 1.15;\n }\n}\n\n.govuk-fieldset__legend--l {\n font-size: 1.5rem;\n line-height: 1.0416666667;\n}\n@media (min-width: 40.0625em) {\n .govuk-fieldset__legend--l {\n font-size: 2.25rem;\n line-height: 1.1111111111;\n }\n}\n@media print {\n .govuk-fieldset__legend--l {\n font-size: 24pt;\n line-height: 1.05;\n }\n}\n\n.govuk-fieldset__legend--m {\n font-size: 1.125rem;\n line-height: 1.1111111111;\n}\n@media (min-width: 40.0625em) {\n .govuk-fieldset__legend--m {\n font-size: 1.5rem;\n line-height: 1.25;\n }\n}\n@media print {\n .govuk-fieldset__legend--m {\n font-size: 18pt;\n line-height: 1.15;\n }\n}\n\n.govuk-fieldset__legend--s {\n font-weight: 700;\n}\n\n.govuk-fieldset__heading {\n margin: 0;\n font-size: inherit;\n font-weight: inherit;\n}\n\n.govuk-checkboxes__item {\n display: flex;\n flex-wrap: wrap;\n position: relative;\n margin-bottom: 10px;\n}\n\n.govuk-checkboxes__item:last-child,\n.govuk-checkboxes__item:last-of-type {\n margin-bottom: 0;\n}\n\n.govuk-checkboxes__input {\n z-index: 1;\n width: 44px;\n height: 44px;\n margin: 0;\n opacity: 0;\n cursor: pointer;\n}\n\n.govuk-checkboxes__label {\n align-self: center;\n max-width: calc(100% - 74px);\n margin-bottom: 0;\n padding: 7px 15px;\n cursor: pointer;\n touch-action: manipulation;\n}\n\n.govuk-checkboxes__label::before {\n content: \"\";\n box-sizing: border-box;\n position: absolute;\n top: 2px;\n left: 2px;\n width: 40px;\n height: 40px;\n border: 2px solid currentcolor;\n background: transparent;\n}\n\n.govuk-checkboxes__label::after {\n content: \"\";\n box-sizing: border-box;\n position: absolute;\n top: 13px;\n left: 10px;\n width: 23px;\n height: 12px;\n transform: rotate(-45deg);\n border: solid;\n border-width: 0 0 5px 5px;\n border-top-color: transparent;\n opacity: 0;\n background: transparent;\n}\n\n.govuk-checkboxes__hint {\n display: block;\n width: 100%;\n margin-top: -5px;\n padding-right: 15px;\n padding-left: 59px;\n}\n\n.govuk-label:not(.govuk-label--m):not(.govuk-label--l):not(.govuk-label--xl) + .govuk-checkboxes__hint {\n margin-bottom: 0;\n}\n\n.govuk-checkboxes__input:focus + .govuk-checkboxes__label::before {\n border-width: 4px;\n outline: 3px solid transparent;\n outline-offset: 1px;\n box-shadow: 0 0 0 3px #ffdd00;\n}\n@media screen and (forced-colors: active), (-ms-high-contrast: active) {\n .govuk-checkboxes__input:focus + .govuk-checkboxes__label::before {\n outline-color: Highlight;\n }\n}\n\n.govuk-checkboxes__input:checked + .govuk-checkboxes__label::after {\n opacity: 1;\n}\n\n.govuk-checkboxes__input:disabled,\n.govuk-checkboxes__input:disabled + .govuk-checkboxes__label {\n cursor: not-allowed;\n}\n\n.govuk-checkboxes__input:disabled + .govuk-checkboxes__label,\n.govuk-checkboxes__input:disabled ~ .govuk-hint {\n opacity: 0.5;\n}\n\n.govuk-checkboxes__divider {\n font-family: \"GDS Transport\", arial, sans-serif;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n font-weight: 400;\n font-size: 1rem;\n line-height: 1.25;\n color: #0b0c0c;\n width: 40px;\n margin-bottom: 10px;\n text-align: center;\n}\n@media print {\n .govuk-checkboxes__divider {\n font-family: sans-serif;\n }\n}\n@media (min-width: 40.0625em) {\n .govuk-checkboxes__divider {\n font-size: 1.1875rem;\n line-height: 1.3157894737;\n }\n}\n@media print {\n .govuk-checkboxes__divider {\n font-size: 14pt;\n line-height: 1.15;\n }\n}\n@media print {\n .govuk-checkboxes__divider {\n color: #000000;\n }\n}\n\n.govuk-checkboxes__conditional {\n margin-bottom: 15px;\n margin-left: 20px;\n padding-left: 35px;\n border-left: 4px solid #b1b4b6;\n}\n@media (min-width: 40.0625em) {\n .govuk-checkboxes__conditional {\n margin-bottom: 20px;\n }\n}\n.govuk-frontend-supported .govuk-checkboxes__conditional--hidden {\n display: none;\n}\n.govuk-checkboxes__conditional > :last-child {\n margin-bottom: 0;\n}\n\n.govuk-checkboxes--small .govuk-checkboxes__item {\n margin-bottom: 0;\n}\n.govuk-checkboxes--small .govuk-checkboxes__input {\n margin-left: -10px;\n}\n.govuk-checkboxes--small .govuk-checkboxes__label {\n padding-left: 1px;\n}\n.govuk-checkboxes--small .govuk-checkboxes__label::before {\n top: 10px;\n left: 0;\n width: 24px;\n height: 24px;\n}\n.govuk-checkboxes--small .govuk-checkboxes__label::after {\n top: 17px;\n left: 6px;\n width: 12px;\n height: 6.5px;\n border-width: 0 0 3px 3px;\n}\n.govuk-checkboxes--small .govuk-checkboxes__hint {\n padding-left: 34px;\n}\n.govuk-checkboxes--small .govuk-checkboxes__conditional {\n margin-left: 10px;\n padding-left: 20px;\n}\n.govuk-checkboxes--small .govuk-checkboxes__divider {\n width: 24px;\n margin-bottom: 5px;\n}\n.govuk-checkboxes--small .govuk-checkboxes__item:hover .govuk-checkboxes__input:not(:disabled) + .govuk-checkboxes__label::before {\n outline: 3px dashed transparent;\n outline-offset: 1px;\n box-shadow: 0 0 0 10px #b1b4b6;\n}\n.govuk-checkboxes--small .govuk-checkboxes__item:hover .govuk-checkboxes__input:focus + .govuk-checkboxes__label::before {\n box-shadow: 0 0 0 3px #ffdd00, 0 0 0 10px #b1b4b6;\n}\n@media screen and (forced-colors: active), (-ms-high-contrast: active) {\n .govuk-checkboxes--small .govuk-checkboxes__item:hover .govuk-checkboxes__input:focus + .govuk-checkboxes__label::before {\n outline-color: Highlight;\n }\n}\n@media (hover: none), (pointer: coarse) {\n .govuk-checkboxes--small .govuk-checkboxes__item:hover .govuk-checkboxes__input:not(:disabled) + .govuk-checkboxes__label::before {\n box-shadow: initial;\n }\n .govuk-checkboxes--small .govuk-checkboxes__item:hover .govuk-checkboxes__input:focus + .govuk-checkboxes__label::before {\n box-shadow: 0 0 0 3px #ffdd00;\n }\n}\n\n.govuk-cookie-banner {\n padding-top: 20px;\n border-bottom: 10px solid transparent;\n background-color: #f3f2f1;\n}\n\n.govuk-cookie-banner[hidden] {\n display: none;\n}\n\n.govuk-cookie-banner__message {\n margin-bottom: -10px;\n}\n.govuk-cookie-banner__message[hidden] {\n display: none;\n}\n.govuk-cookie-banner__message:focus {\n outline: none;\n}\n\n.govuk-input {\n font-family: \"GDS Transport\", arial, sans-serif;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n font-weight: 400;\n font-size: 1rem;\n line-height: 1.25;\n box-sizing: border-box;\n width: 100%;\n height: 2.5rem;\n margin-top: 0;\n padding: 5px;\n border: 2px solid #0b0c0c;\n border-radius: 0;\n appearance: none;\n}\n@media print {\n .govuk-input {\n font-family: sans-serif;\n }\n}\n@media (min-width: 40.0625em) {\n .govuk-input {\n font-size: 1.1875rem;\n line-height: 1.3157894737;\n }\n}\n@media print {\n .govuk-input {\n font-size: 14pt;\n line-height: 1.15;\n }\n}\n.govuk-input:focus {\n outline: 3px solid #ffdd00;\n outline-offset: 0;\n box-shadow: inset 0 0 0 2px;\n}\n.govuk-input:disabled {\n opacity: 0.5;\n color: inherit;\n background-color: transparent;\n cursor: not-allowed;\n}\n\n.govuk-input::-webkit-outer-spin-button,\n.govuk-input::-webkit-inner-spin-button {\n margin: 0;\n -webkit-appearance: none;\n}\n\n.govuk-input[type=number] {\n -moz-appearance: textfield;\n}\n\n.govuk-input--error {\n border-color: #d4351c;\n}\n.govuk-input--error:focus {\n border-color: #0b0c0c;\n}\n\n.govuk-input--extra-letter-spacing {\n font-variant-numeric: tabular-nums;\n letter-spacing: 0.05em;\n}\n\n.govuk-input--width-30 {\n max-width: 29.5em;\n}\n\n.govuk-input--width-20 {\n max-width: 20.5em;\n}\n\n.govuk-input--width-10 {\n max-width: 11.5em;\n}\n\n.govuk-input--width-5 {\n max-width: 5.5em;\n}\n\n.govuk-input--width-4 {\n max-width: 4.5em;\n}\n\n.govuk-input--width-3 {\n max-width: 3.75em;\n}\n\n.govuk-input--width-2 {\n max-width: 2.75em;\n}\n\n.govuk-input__wrapper {\n display: flex;\n}\n.govuk-input__wrapper .govuk-input {\n flex: 0 1 auto;\n}\n.govuk-input__wrapper .govuk-input:focus {\n z-index: 1;\n}\n@media (max-width: 19.99em) {\n .govuk-input__wrapper {\n display: block;\n }\n .govuk-input__wrapper .govuk-input {\n max-width: 100%;\n }\n}\n\n.govuk-input__prefix,\n.govuk-input__suffix {\n font-family: \"GDS Transport\", arial, sans-serif;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n font-weight: 400;\n font-size: 1rem;\n line-height: 1.25;\n box-sizing: border-box;\n display: flex;\n align-items: center;\n justify-content: center;\n min-width: 2.5rem;\n height: 2.5rem;\n padding: 5px;\n border: 2px solid #0b0c0c;\n background-color: #f3f2f1;\n text-align: center;\n white-space: nowrap;\n cursor: default;\n flex: 0 0 auto;\n}\n@media print {\n .govuk-input__prefix,\n .govuk-input__suffix {\n font-family: sans-serif;\n }\n}\n@media (min-width: 40.0625em) {\n .govuk-input__prefix,\n .govuk-input__suffix {\n font-size: 1.1875rem;\n line-height: 1.3157894737;\n }\n}\n@media print {\n .govuk-input__prefix,\n .govuk-input__suffix {\n font-size: 14pt;\n line-height: 1.15;\n }\n}\n@media (max-width: 19.99em) {\n .govuk-input__prefix,\n .govuk-input__suffix {\n display: block;\n height: 100%;\n white-space: normal;\n }\n}\n\n@media (max-width: 19.99em) {\n .govuk-input__prefix {\n border-bottom: 0;\n }\n}\n@media (min-width: 20em) {\n .govuk-input__prefix {\n border-right: 0;\n }\n}\n\n@media (max-width: 19.99em) {\n .govuk-input__suffix {\n border-top: 0;\n }\n}\n@media (min-width: 20em) {\n .govuk-input__suffix {\n border-left: 0;\n }\n}\n\n.govuk-date-input {\n font-size: 0;\n}\n.govuk-date-input::after {\n content: \"\";\n display: block;\n clear: both;\n}\n\n.govuk-date-input__item {\n display: inline-block;\n margin-right: 20px;\n margin-bottom: 0;\n}\n\n.govuk-date-input__label {\n display: block;\n}\n\n.govuk-date-input__input {\n margin-bottom: 0;\n}\n\n.govuk-details {\n font-family: \"GDS Transport\", arial, sans-serif;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n font-weight: 400;\n font-size: 1rem;\n line-height: 1.25;\n color: #0b0c0c;\n margin-bottom: 20px;\n display: block;\n}\n@media print {\n .govuk-details {\n font-family: sans-serif;\n }\n}\n@media (min-width: 40.0625em) {\n .govuk-details {\n font-size: 1.1875rem;\n line-height: 1.3157894737;\n }\n}\n@media print {\n .govuk-details {\n font-size: 14pt;\n line-height: 1.15;\n }\n}\n@media print {\n .govuk-details {\n color: #000000;\n }\n}\n@media (min-width: 40.0625em) {\n .govuk-details {\n margin-bottom: 30px;\n }\n}\n\n.govuk-details__summary {\n display: inline-block;\n margin-bottom: 5px;\n}\n\n.govuk-details__summary-text > :first-child {\n margin-top: 0;\n}\n.govuk-details__summary-text > :only-child,\n.govuk-details__summary-text > :last-child {\n margin-bottom: 0;\n}\n\n.govuk-details__text {\n padding-top: 15px;\n padding-bottom: 15px;\n padding-left: 20px;\n}\n\n.govuk-details__text p {\n margin-top: 0;\n margin-bottom: 20px;\n}\n\n.govuk-details__text > :last-child {\n margin-bottom: 0;\n}\n\n@media screen\\0 {\n .govuk-details {\n border-left: 10px solid #b1b4b6;\n }\n .govuk-details__summary {\n margin-top: 15px;\n }\n .govuk-details__summary-text {\n font-weight: 700;\n margin-bottom: 15px;\n padding-left: 20px;\n }\n}\n@media screen\\0 and (min-width: 40.0625em) {\n .govuk-details__summary-text {\n margin-bottom: 20px;\n }\n}\n@supports not (-ms-ime-align: auto) {\n .govuk-details__summary {\n position: relative;\n padding-left: 25px;\n color: #1d70b8;\n cursor: pointer;\n }\n .govuk-details__summary:hover {\n color: #003078;\n }\n .govuk-details__summary:focus {\n outline: 3px solid transparent;\n color: #0b0c0c;\n background-color: #ffdd00;\n box-shadow: 0 -2px #ffdd00, 0 4px #0b0c0c;\n text-decoration: none;\n box-decoration-break: clone;\n }\n .govuk-details__summary-text {\n text-decoration: underline;\n text-decoration-thickness: max(1px, .0625rem);\n text-underline-offset: 0.1578em;\n }\n .govuk-details__summary:hover .govuk-details__summary-text {\n text-decoration-thickness: max(3px, .1875rem, .12em);\n text-decoration-skip-ink: none;\n text-decoration-skip: none;\n }\n .govuk-details__summary:focus .govuk-details__summary-text {\n text-decoration: none;\n }\n .govuk-details__summary::-webkit-details-marker {\n display: none;\n }\n .govuk-details__summary::before {\n content: \"\";\n position: absolute;\n top: -1px;\n bottom: 0;\n left: 0;\n margin: auto;\n display: block;\n width: 0;\n height: 0;\n border-style: solid;\n border-color: transparent;\n clip-path: polygon(0% 0%, 100% 50%, 0% 100%);\n border-width: 7px 0 7px 12.124px;\n border-left-color: inherit;\n }\n .govuk-details[open] > .govuk-details__summary::before {\n display: block;\n width: 0;\n height: 0;\n border-style: solid;\n border-color: transparent;\n clip-path: polygon(0% 0%, 50% 100%, 100% 0%);\n border-width: 12.124px 7px 0 7px;\n border-top-color: inherit;\n }\n .govuk-details__text {\n border-left: 5px solid #b1b4b6;\n }\n}\n.govuk-error-summary {\n font-family: \"GDS Transport\", arial, sans-serif;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n font-weight: 400;\n font-size: 1rem;\n line-height: 1.25;\n color: #0b0c0c;\n padding: 15px;\n margin-bottom: 30px;\n border: 5px solid #d4351c;\n}\n@media print {\n .govuk-error-summary {\n font-family: sans-serif;\n }\n}\n@media (min-width: 40.0625em) {\n .govuk-error-summary {\n font-size: 1.1875rem;\n line-height: 1.3157894737;\n }\n}\n@media print {\n .govuk-error-summary {\n font-size: 14pt;\n line-height: 1.15;\n }\n}\n@media print {\n .govuk-error-summary {\n color: #000000;\n }\n}\n@media (min-width: 40.0625em) {\n .govuk-error-summary {\n padding: 20px;\n }\n}\n@media (min-width: 40.0625em) {\n .govuk-error-summary {\n margin-bottom: 50px;\n }\n}\n.govuk-error-summary:focus {\n outline: 3px solid #ffdd00;\n}\n\n.govuk-error-summary__title {\n font-size: 1.125rem;\n line-height: 1.1111111111;\n font-weight: 700;\n margin-top: 0;\n margin-bottom: 15px;\n}\n@media (min-width: 40.0625em) {\n .govuk-error-summary__title {\n font-size: 1.5rem;\n line-height: 1.25;\n }\n}\n@media print {\n .govuk-error-summary__title {\n font-size: 18pt;\n line-height: 1.15;\n }\n}\n@media (min-width: 40.0625em) {\n .govuk-error-summary__title {\n margin-bottom: 20px;\n }\n}\n\n.govuk-error-summary__body p {\n margin-bottom: 0;\n}\n.govuk-error-summary__body > * + * {\n margin-top: 15px;\n}\n@media (min-width: 40.0625em) {\n .govuk-error-summary__body > * + * {\n margin-top: 20px;\n }\n}\n.govuk-error-summary__body > :last-child {\n margin-bottom: 5px;\n}\n\n.govuk-error-summary__list {\n margin-bottom: 0;\n}\n\n.govuk-error-summary__list li:last-child {\n margin-bottom: 0;\n}\n\n.govuk-error-summary__list a {\n font-weight: 700;\n font-family: \"GDS Transport\", arial, sans-serif;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n text-decoration: underline;\n text-decoration-thickness: max(1px, .0625rem);\n text-underline-offset: 0.1578em;\n}\n@media print {\n .govuk-error-summary__list a {\n font-family: sans-serif;\n }\n}\n.govuk-error-summary__list a:hover {\n text-decoration-thickness: max(3px, .1875rem, .12em);\n text-decoration-skip-ink: none;\n text-decoration-skip: none;\n}\n.govuk-error-summary__list a:focus {\n outline: 3px solid transparent;\n color: #0b0c0c;\n background-color: #ffdd00;\n box-shadow: 0 -2px #ffdd00, 0 4px #0b0c0c;\n text-decoration: none;\n box-decoration-break: clone;\n}\n.govuk-error-summary__list a:link, .govuk-error-summary__list a:visited {\n color: #d4351c;\n}\n.govuk-error-summary__list a:hover {\n color: #942514;\n}\n.govuk-error-summary__list a:active {\n color: #d4351c;\n}\n.govuk-error-summary__list a:focus {\n color: #0b0c0c;\n}\n\n.govuk-exit-this-page {\n margin-bottom: 30px;\n position: sticky;\n z-index: 1000;\n top: 0;\n left: 0;\n width: 100%;\n}\n@media (min-width: 40.0625em) {\n .govuk-exit-this-page {\n margin-bottom: 50px;\n }\n}\n@media (min-width: 40.0625em) {\n .govuk-exit-this-page {\n display: inline-block;\n right: 0;\n left: auto;\n width: auto;\n float: right;\n }\n}\n\n.govuk-exit-this-page__button {\n margin-bottom: 0;\n}\n\n.govuk-exit-this-page__indicator {\n padding: 10px;\n display: none;\n padding-bottom: 0;\n color: inherit;\n line-height: 0;\n text-align: center;\n pointer-events: none;\n}\n\n.govuk-exit-this-page__indicator--visible {\n display: block;\n}\n\n.govuk-exit-this-page__indicator-light {\n box-sizing: border-box;\n display: inline-block;\n width: 0.75em;\n height: 0.75em;\n margin: 0 0.125em;\n border-width: 2px;\n border-style: solid;\n border-radius: 50%;\n border-color: currentcolor;\n}\n\n.govuk-exit-this-page__indicator-light--on {\n border-width: 0.375em;\n}\n\n@media only print {\n .govuk-exit-this-page {\n display: none;\n }\n}\n.govuk-exit-this-page-overlay {\n position: fixed;\n z-index: 9999;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background-color: #ffffff;\n}\n\n.govuk-exit-this-page-hide-content * {\n display: none !important;\n}\n.govuk-exit-this-page-hide-content .govuk-exit-this-page-overlay {\n display: block !important;\n}\n\n.govuk-file-upload {\n font-family: \"GDS Transport\", arial, sans-serif;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n font-weight: 400;\n font-size: 1rem;\n line-height: 1.25;\n color: #0b0c0c;\n max-width: 100%;\n margin-left: -5px;\n padding: 5px;\n}\n@media print {\n .govuk-file-upload {\n font-family: sans-serif;\n }\n}\n@media (min-width: 40.0625em) {\n .govuk-file-upload {\n font-size: 1.1875rem;\n line-height: 1.3157894737;\n }\n}\n@media print {\n .govuk-file-upload {\n font-size: 14pt;\n line-height: 1.15;\n }\n}\n@media print {\n .govuk-file-upload {\n color: #000000;\n }\n}\n.govuk-file-upload::-webkit-file-upload-button {\n -webkit-appearance: button;\n color: inherit;\n font: inherit;\n}\n.govuk-file-upload:focus {\n outline: 3px solid #ffdd00;\n box-shadow: inset 0 0 0 4px #0b0c0c;\n}\n.govuk-file-upload:focus-within {\n outline: 3px solid #ffdd00;\n box-shadow: inset 0 0 0 4px #0b0c0c;\n}\n.govuk-file-upload:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n.govuk-footer {\n font-family: \"GDS Transport\", arial, sans-serif;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n font-weight: 400;\n font-size: 0.875rem;\n line-height: 1.1428571429;\n padding-top: 25px;\n padding-bottom: 15px;\n border-top: 1px solid #b1b4b6;\n color: #0b0c0c;\n background: #f3f2f1;\n}\n@media print {\n .govuk-footer {\n font-family: sans-serif;\n }\n}\n@media (min-width: 40.0625em) {\n .govuk-footer {\n font-size: 1rem;\n line-height: 1.25;\n }\n}\n@media print {\n .govuk-footer {\n font-size: 14pt;\n line-height: 1.2;\n }\n}\n@media (min-width: 40.0625em) {\n .govuk-footer {\n padding-top: 40px;\n }\n}\n@media (min-width: 40.0625em) {\n .govuk-footer {\n padding-bottom: 25px;\n }\n}\n\n.govuk-footer__link {\n font-family: \"GDS Transport\", arial, sans-serif;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n text-decoration: underline;\n text-decoration-thickness: max(1px, .0625rem);\n text-underline-offset: 0.1578em;\n}\n@media print {\n .govuk-footer__link {\n font-family: sans-serif;\n }\n}\n.govuk-footer__link:hover {\n text-decoration-thickness: max(3px, .1875rem, .12em);\n text-decoration-skip-ink: none;\n text-decoration-skip: none;\n}\n.govuk-footer__link:focus {\n outline: 3px solid transparent;\n color: #0b0c0c;\n background-color: #ffdd00;\n box-shadow: 0 -2px #ffdd00, 0 4px #0b0c0c;\n text-decoration: none;\n box-decoration-break: clone;\n}\n.govuk-footer__link:link, .govuk-footer__link:visited {\n color: #0b0c0c;\n}\n@media print {\n .govuk-footer__link:link, .govuk-footer__link:visited {\n color: #000000;\n }\n}\n.govuk-footer__link:hover {\n color: rgba(11, 12, 12, 0.99);\n}\n.govuk-footer__link:active, .govuk-footer__link:focus {\n color: #0b0c0c;\n}\n@media print {\n .govuk-footer__link:active, .govuk-footer__link:focus {\n color: #000000;\n }\n}\n\n.govuk-footer__section-break {\n margin: 0;\n margin-bottom: 30px;\n border: 0;\n border-bottom: 1px solid #b1b4b6;\n}\n@media (min-width: 40.0625em) {\n .govuk-footer__section-break {\n margin-bottom: 50px;\n }\n}\n\n.govuk-footer__meta {\n display: flex;\n margin-right: -15px;\n margin-left: -15px;\n flex-wrap: wrap;\n align-items: flex-end;\n justify-content: center;\n}\n\n.govuk-footer__meta-item {\n margin-right: 15px;\n margin-bottom: 25px;\n margin-left: 15px;\n}\n\n.govuk-footer__meta-item--grow {\n flex: 1;\n}\n@media (max-width: 40.0525em) {\n .govuk-footer__meta-item--grow {\n flex-basis: 320px;\n }\n}\n\n.govuk-footer__licence-logo {\n display: inline-block;\n margin-right: 10px;\n vertical-align: top;\n forced-color-adjust: auto;\n}\n@media (max-width: 48.0525em) {\n .govuk-footer__licence-logo {\n margin-bottom: 15px;\n }\n}\n\n.govuk-footer__licence-description {\n display: inline-block;\n}\n\n.govuk-footer__copyright-logo {\n display: inline-block;\n min-width: 125px;\n padding-top: 112px;\n background-image: url(\"/assets/images/govuk-crest.png\");\n background-repeat: no-repeat;\n background-position: 50% 0%;\n background-size: 125px 102px;\n text-align: center;\n white-space: nowrap;\n}\n@media only screen and (-webkit-min-device-pixel-ratio: 2), only screen and (-o-min-device-pixel-ratio: 20/10), only screen and (min-resolution: 192dpi), only screen and (min-resolution: 2dppx) {\n .govuk-footer__copyright-logo {\n background-image: url(\"/assets/images/govuk-crest-2x.png\");\n }\n}\n\n.govuk-footer__inline-list {\n margin-top: 0;\n margin-bottom: 15px;\n padding: 0;\n}\n\n.govuk-footer__meta-custom {\n margin-bottom: 20px;\n}\n\n.govuk-footer__inline-list-item {\n display: inline-block;\n margin-right: 15px;\n margin-bottom: 5px;\n}\n\n.govuk-footer__heading {\n margin-bottom: 30px;\n padding-bottom: 20px;\n border-bottom: 1px solid #b1b4b6;\n}\n@media (max-width: 40.0525em) {\n .govuk-footer__heading {\n padding-bottom: 10px;\n }\n}\n\n.govuk-footer__navigation {\n margin-right: -15px;\n margin-left: -15px;\n}\n.govuk-footer__navigation::after {\n content: \"\";\n display: block;\n clear: both;\n}\n\n.govuk-footer__section {\n display: inline-block;\n margin-bottom: 30px;\n vertical-align: top;\n}\n\n.govuk-footer__list {\n margin: 0;\n padding: 0;\n list-style: none;\n column-gap: 30px;\n}\n\n@media (min-width: 48.0625em) {\n .govuk-footer__list--columns-2 {\n column-count: 2;\n }\n .govuk-footer__list--columns-3 {\n column-count: 3;\n }\n}\n.govuk-footer__list-item {\n margin-bottom: 15px;\n}\n@media (min-width: 40.0625em) {\n .govuk-footer__list-item {\n margin-bottom: 20px;\n }\n}\n\n.govuk-footer__list-item:last-child {\n margin-bottom: 0;\n}\n\n.govuk-header {\n font-family: \"GDS Transport\", arial, sans-serif;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n font-weight: 400;\n font-size: 0.875rem;\n line-height: 1;\n border-bottom: 10px solid #ffffff;\n color: #ffffff;\n background: #0b0c0c;\n}\n@media print {\n .govuk-header {\n font-family: sans-serif;\n }\n}\n@media (min-width: 40.0625em) {\n .govuk-header {\n font-size: 1rem;\n line-height: 1;\n }\n}\n@media print {\n .govuk-header {\n font-size: 14pt;\n line-height: 1;\n }\n}\n\n.govuk-header__container--full-width {\n padding: 0 15px;\n border-color: #1d70b8;\n}\n.govuk-header__container--full-width .govuk-header__menu-button {\n right: 15px;\n}\n\n.govuk-header__container {\n position: relative;\n margin-bottom: -10px;\n padding-top: 10px;\n border-bottom: 10px solid #1d70b8;\n}\n.govuk-header__container::after {\n content: \"\";\n display: block;\n clear: both;\n}\n\n.govuk-header__logotype {\n display: inline-block;\n position: relative;\n top: -3px;\n margin-right: 5px;\n fill: currentcolor;\n vertical-align: top;\n}\n@media (forced-colors: active) {\n .govuk-header__logotype {\n forced-color-adjust: none;\n color: linktext;\n }\n}\n.govuk-header__logotype:last-child {\n margin-right: 0;\n}\n\n.govuk-header__product-name {\n font-size: 1.125rem;\n line-height: 1;\n font-weight: 400;\n display: inline-table;\n margin-top: 10px;\n vertical-align: top;\n}\n@media (min-width: 40.0625em) {\n .govuk-header__product-name {\n font-size: 1.5rem;\n line-height: 1;\n }\n}\n@media print {\n .govuk-header__product-name {\n font-size: 18pt;\n line-height: 1;\n }\n}\n@-moz-document url-prefix() {\n .govuk-header__product-name {\n margin-top: 9.5px;\n }\n}\n@media (min-width: 40.0625em) {\n .govuk-header__product-name {\n margin-top: 5px;\n }\n @-moz-document url-prefix() {\n .govuk-header__product-name {\n margin-top: 4.5px;\n }\n }\n}\n\n.govuk-header__link {\n text-decoration: none;\n}\n.govuk-header__link:link, .govuk-header__link:visited {\n color: #ffffff;\n}\n.govuk-header__link:hover, .govuk-header__link:active {\n color: rgba(255, 255, 255, 0.99);\n}\n.govuk-header__link:focus {\n color: #0b0c0c;\n}\n.govuk-header__link:hover {\n text-decoration: underline;\n text-decoration-thickness: 3px;\n text-underline-offset: 0.1578em;\n}\n.govuk-header__link:focus {\n outline: 3px solid transparent;\n color: #0b0c0c;\n background-color: #ffdd00;\n box-shadow: 0 -2px #ffdd00, 0 4px #0b0c0c;\n text-decoration: none;\n box-decoration-break: clone;\n}\n\n.govuk-header__link--homepage {\n display: inline-block;\n margin-right: 10px;\n font-size: 30px;\n}\n@media (min-width: 48.0625em) {\n .govuk-header__link--homepage {\n display: inline;\n }\n .govuk-header__link--homepage:focus {\n box-shadow: 0 0 #ffdd00;\n }\n}\n.govuk-header__link--homepage:link, .govuk-header__link--homepage:visited {\n text-decoration: none;\n}\n.govuk-header__link--homepage:hover, .govuk-header__link--homepage:active {\n margin-bottom: -3px;\n border-bottom: 3px solid;\n}\n.govuk-header__link--homepage:focus {\n margin-bottom: 0;\n border-bottom: 0;\n}\n\n.govuk-header__service-name {\n display: inline-block;\n margin-bottom: 10px;\n font-size: 1.125rem;\n line-height: 1.1111111111;\n font-weight: 700;\n}\n@media (min-width: 40.0625em) {\n .govuk-header__service-name {\n font-size: 1.5rem;\n line-height: 1.25;\n }\n}\n@media print {\n .govuk-header__service-name {\n font-size: 18pt;\n line-height: 1.15;\n }\n}\n\n.govuk-header__logo,\n.govuk-header__content {\n box-sizing: border-box;\n}\n\n.govuk-header__logo {\n margin-bottom: 10px;\n padding-right: 80px;\n}\n@media (min-width: 48.0625em) {\n .govuk-header__logo {\n width: 33.33%;\n padding-right: 15px;\n float: left;\n vertical-align: top;\n }\n .govuk-header__logo:last-child {\n width: auto;\n padding-right: 0;\n float: none;\n }\n}\n\n@media (min-width: 48.0625em) {\n .govuk-header__content {\n width: 66.66%;\n padding-left: 15px;\n float: left;\n }\n}\n\n.govuk-header__menu-button {\n font-family: \"GDS Transport\", arial, sans-serif;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n font-weight: 400;\n font-size: 0.875rem;\n line-height: 1.1428571429;\n position: absolute;\n top: 13px;\n right: 0;\n max-width: 80px;\n min-height: 24px;\n margin: 0;\n padding: 0;\n border: 0;\n color: #ffffff;\n background: none;\n word-break: break-all;\n cursor: pointer;\n}\n@media print {\n .govuk-header__menu-button {\n font-family: sans-serif;\n }\n}\n@media (min-width: 40.0625em) {\n .govuk-header__menu-button {\n font-size: 1rem;\n line-height: 1.25;\n }\n}\n@media print {\n .govuk-header__menu-button {\n font-size: 14pt;\n line-height: 1.2;\n }\n}\n.govuk-header__menu-button:hover {\n text-decoration: solid underline 3px;\n text-underline-offset: 0.1578em;\n}\n.govuk-header__menu-button:focus {\n outline: 3px solid transparent;\n color: #0b0c0c;\n background-color: #ffdd00;\n box-shadow: 0 -2px #ffdd00, 0 4px #0b0c0c;\n text-decoration: none;\n box-decoration-break: clone;\n}\n.govuk-header__menu-button::after {\n display: inline-block;\n width: 0;\n height: 0;\n border-style: solid;\n border-color: transparent;\n clip-path: polygon(0% 0%, 50% 100%, 100% 0%);\n border-width: 8.66px 5px 0 5px;\n border-top-color: inherit;\n content: \"\";\n margin-left: 5px;\n}\n.govuk-header__menu-button[aria-expanded=true]::after {\n display: inline-block;\n width: 0;\n height: 0;\n border-style: solid;\n border-color: transparent;\n clip-path: polygon(50% 0%, 0% 100%, 100% 100%);\n border-width: 0 5px 8.66px;\n border-bottom-color: inherit;\n}\n@media (min-width: 40.0625em) {\n .govuk-header__menu-button {\n top: 15px;\n }\n}\n.govuk-frontend-supported .govuk-header__menu-button {\n display: block;\n}\n.govuk-header__menu-button[hidden], .govuk-frontend-supported .govuk-header__menu-button[hidden] {\n display: none;\n}\n\n@media (min-width: 48.0625em) {\n .govuk-header__navigation {\n margin-bottom: 10px;\n }\n}\n\n.govuk-header__navigation-list {\n margin: 0;\n padding: 0;\n list-style: none;\n}\n.govuk-header__navigation-list[hidden] {\n display: none;\n}\n\n@media (min-width: 48.0625em) {\n .govuk-header__navigation--end {\n margin: 0;\n padding: 5px 0;\n text-align: right;\n }\n}\n\n.govuk-header__navigation-item {\n padding: 10px 0;\n border-bottom: 1px solid #2e3133;\n}\n@media (min-width: 48.0625em) {\n .govuk-header__navigation-item {\n display: inline-block;\n margin-right: 15px;\n padding: 5px 0;\n border: 0;\n }\n}\n.govuk-header__navigation-item a {\n font-size: 0.875rem;\n line-height: 1.1428571429;\n font-weight: 700;\n white-space: nowrap;\n}\n@media (min-width: 40.0625em) {\n .govuk-header__navigation-item a {\n font-size: 1rem;\n line-height: 1.25;\n }\n}\n@media print {\n .govuk-header__navigation-item a {\n font-size: 14pt;\n line-height: 1.2;\n }\n}\n\n.govuk-header__navigation-item--active a:link, .govuk-header__navigation-item--active a:hover, .govuk-header__navigation-item--active a:visited {\n color: #1d8feb;\n}\n@media print {\n .govuk-header__navigation-item--active a {\n color: #1d70b8;\n }\n}\n.govuk-header__navigation-item--active a:focus {\n color: #0b0c0c;\n}\n\n.govuk-header__navigation-item:last-child {\n margin-right: 0;\n border-bottom: 0;\n}\n\n@media print {\n .govuk-header {\n border-bottom-width: 0;\n color: #0b0c0c;\n background: transparent;\n }\n .govuk-header__link:link, .govuk-header__link:visited {\n color: #0b0c0c;\n }\n .govuk-header__link::after {\n display: none;\n }\n}\n.govuk-inset-text {\n font-family: \"GDS Transport\", arial, sans-serif;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n font-weight: 400;\n font-size: 1rem;\n line-height: 1.25;\n color: #0b0c0c;\n padding: 15px;\n margin-top: 20px;\n margin-bottom: 20px;\n clear: both;\n border-left: 10px solid #b1b4b6;\n}\n@media print {\n .govuk-inset-text {\n font-family: sans-serif;\n }\n}\n@media (min-width: 40.0625em) {\n .govuk-inset-text {\n font-size: 1.1875rem;\n line-height: 1.3157894737;\n }\n}\n@media print {\n .govuk-inset-text {\n font-size: 14pt;\n line-height: 1.15;\n }\n}\n@media print {\n .govuk-inset-text {\n color: #000000;\n }\n}\n@media (min-width: 40.0625em) {\n .govuk-inset-text {\n margin-top: 30px;\n }\n}\n@media (min-width: 40.0625em) {\n .govuk-inset-text {\n margin-bottom: 30px;\n }\n}\n.govuk-inset-text > :first-child {\n margin-top: 0;\n}\n.govuk-inset-text > :only-child,\n.govuk-inset-text > :last-child {\n margin-bottom: 0;\n}\n\n.govuk-notification-banner {\n font-family: \"GDS Transport\", arial, sans-serif;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n font-weight: 400;\n font-size: 1rem;\n line-height: 1.25;\n margin-bottom: 30px;\n border: 5px solid #1d70b8;\n background-color: #1d70b8;\n}\n@media print {\n .govuk-notification-banner {\n font-family: sans-serif;\n }\n}\n@media (min-width: 40.0625em) {\n .govuk-notification-banner {\n font-size: 1.1875rem;\n line-height: 1.3157894737;\n }\n}\n@media print {\n .govuk-notification-banner {\n font-size: 14pt;\n line-height: 1.15;\n }\n}\n@media (min-width: 40.0625em) {\n .govuk-notification-banner {\n margin-bottom: 50px;\n }\n}\n.govuk-notification-banner:focus {\n outline: 3px solid #ffdd00;\n}\n\n.govuk-notification-banner__header {\n padding: 2px 15px 5px;\n border-bottom: 1px solid transparent;\n}\n@media (min-width: 40.0625em) {\n .govuk-notification-banner__header {\n padding: 2px 20px 5px;\n }\n}\n\n.govuk-notification-banner__title {\n font-size: 1rem;\n line-height: 1.25;\n font-weight: 700;\n margin: 0;\n padding: 0;\n color: #ffffff;\n}\n@media (min-width: 40.0625em) {\n .govuk-notification-banner__title {\n font-size: 1.1875rem;\n line-height: 1.3157894737;\n }\n}\n@media print {\n .govuk-notification-banner__title {\n font-size: 14pt;\n line-height: 1.15;\n }\n}\n\n.govuk-notification-banner__content {\n color: #0b0c0c;\n padding: 15px;\n background-color: #ffffff;\n}\n@media print {\n .govuk-notification-banner__content {\n color: #000000;\n }\n}\n@media (min-width: 40.0625em) {\n .govuk-notification-banner__content {\n padding: 20px;\n }\n}\n.govuk-notification-banner__content > * {\n box-sizing: border-box;\n max-width: 605px;\n}\n.govuk-notification-banner__content > :last-child {\n margin-bottom: 0;\n}\n\n.govuk-notification-banner__heading {\n font-size: 1.125rem;\n line-height: 1.1111111111;\n font-weight: 700;\n margin: 0 0 15px;\n padding: 0;\n}\n@media (min-width: 40.0625em) {\n .govuk-notification-banner__heading {\n font-size: 1.5rem;\n line-height: 1.25;\n }\n}\n@media print {\n .govuk-notification-banner__heading {\n font-size: 18pt;\n line-height: 1.15;\n }\n}\n\n.govuk-notification-banner__link {\n font-family: \"GDS Transport\", arial, sans-serif;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n text-decoration: underline;\n text-decoration-thickness: max(1px, .0625rem);\n text-underline-offset: 0.1578em;\n}\n@media print {\n .govuk-notification-banner__link {\n font-family: sans-serif;\n }\n}\n.govuk-notification-banner__link:hover {\n text-decoration-thickness: max(3px, .1875rem, .12em);\n text-decoration-skip-ink: none;\n text-decoration-skip: none;\n}\n.govuk-notification-banner__link:focus {\n outline: 3px solid transparent;\n color: #0b0c0c;\n background-color: #ffdd00;\n box-shadow: 0 -2px #ffdd00, 0 4px #0b0c0c;\n text-decoration: none;\n box-decoration-break: clone;\n}\n.govuk-notification-banner__link:link {\n color: #1d70b8;\n}\n.govuk-notification-banner__link:visited {\n color: #1d70b8;\n}\n.govuk-notification-banner__link:hover {\n color: #003078;\n}\n.govuk-notification-banner__link:active {\n color: #0b0c0c;\n}\n.govuk-notification-banner__link:focus {\n color: #0b0c0c;\n}\n\n.govuk-notification-banner--success {\n border-color: #00703c;\n background-color: #00703c;\n}\n.govuk-notification-banner--success .govuk-notification-banner__link:link, .govuk-notification-banner--success .govuk-notification-banner__link:visited {\n color: #00703c;\n}\n.govuk-notification-banner--success .govuk-notification-banner__link:hover {\n color: #004e2a;\n}\n.govuk-notification-banner--success .govuk-notification-banner__link:active {\n color: #00703c;\n}\n.govuk-notification-banner--success .govuk-notification-banner__link:focus {\n color: #0b0c0c;\n}\n\n.govuk-pagination {\n margin-bottom: 20px;\n display: flex;\n flex-direction: column;\n align-items: center;\n flex-wrap: wrap;\n}\n@media (min-width: 40.0625em) {\n .govuk-pagination {\n margin-bottom: 30px;\n }\n}\n@media (min-width: 40.0625em) {\n .govuk-pagination {\n flex-direction: row;\n align-items: flex-start;\n }\n}\n\n.govuk-pagination__list {\n margin: 0;\n padding: 0;\n list-style: none;\n}\n\n.govuk-pagination__item,\n.govuk-pagination__next,\n.govuk-pagination__prev {\n font-family: \"GDS Transport\", arial, sans-serif;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n font-weight: 400;\n font-size: 1rem;\n line-height: 1.25;\n box-sizing: border-box;\n position: relative;\n min-width: 45px;\n min-height: 45px;\n padding: 10px 15px;\n float: left;\n}\n@media print {\n .govuk-pagination__item,\n .govuk-pagination__next,\n .govuk-pagination__prev {\n font-family: sans-serif;\n }\n}\n@media (min-width: 40.0625em) {\n .govuk-pagination__item,\n .govuk-pagination__next,\n .govuk-pagination__prev {\n font-size: 1.1875rem;\n line-height: 1.3157894737;\n }\n}\n@media print {\n .govuk-pagination__item,\n .govuk-pagination__next,\n .govuk-pagination__prev {\n font-size: 14pt;\n line-height: 1.15;\n }\n}\n.govuk-pagination__item:hover,\n.govuk-pagination__next:hover,\n.govuk-pagination__prev:hover {\n background-color: #f3f2f1;\n}\n\n.govuk-pagination__item {\n display: none;\n text-align: center;\n}\n@media (min-width: 40.0625em) {\n .govuk-pagination__item {\n display: block;\n }\n}\n\n.govuk-pagination__prev,\n.govuk-pagination__next {\n font-weight: 700;\n}\n.govuk-pagination__prev .govuk-pagination__link,\n.govuk-pagination__next .govuk-pagination__link {\n display: flex;\n align-items: center;\n}\n\n.govuk-pagination__prev {\n padding-left: 0;\n}\n\n.govuk-pagination__next {\n padding-right: 0;\n}\n\n.govuk-pagination__item--current,\n.govuk-pagination__item--ellipses,\n.govuk-pagination__item:first-child,\n.govuk-pagination__item:last-child {\n display: block;\n}\n\n.govuk-pagination__item--current {\n font-weight: 700;\n outline: 1px solid transparent;\n background-color: #1d70b8;\n}\n.govuk-pagination__item--current:hover {\n background-color: #1d70b8;\n}\n.govuk-pagination__item--current .govuk-pagination__link:link, .govuk-pagination__item--current .govuk-pagination__link:visited {\n color: #ffffff;\n}\n.govuk-pagination__item--current .govuk-pagination__link:hover, .govuk-pagination__item--current .govuk-pagination__link:active {\n color: rgba(255, 255, 255, 0.99);\n}\n.govuk-pagination__item--current .govuk-pagination__link:focus {\n color: #0b0c0c;\n}\n\n.govuk-pagination__item--ellipses {\n font-weight: 700;\n color: #505a5f;\n}\n.govuk-pagination__item--ellipses:hover {\n background-color: transparent;\n}\n\n.govuk-pagination__link {\n display: block;\n min-width: 15px;\n}\n@media screen {\n .govuk-pagination__link::after {\n content: \"\";\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n }\n}\n.govuk-pagination__link:hover .govuk-pagination__link-title--decorated, .govuk-pagination__link:active .govuk-pagination__link-title--decorated {\n text-decoration: underline;\n text-decoration-thickness: max(1px, .0625rem);\n text-underline-offset: 0.1578em;\n}\n.govuk-pagination__link:hover .govuk-pagination__link-label,\n.govuk-pagination__link:hover .govuk-pagination__link-title--decorated, .govuk-pagination__link:active .govuk-pagination__link-label,\n.govuk-pagination__link:active .govuk-pagination__link-title--decorated {\n text-decoration-thickness: max(3px, .1875rem, .12em);\n text-decoration-skip-ink: none;\n text-decoration-skip: none;\n}\n.govuk-pagination__link:focus .govuk-pagination__icon {\n color: #0b0c0c;\n}\n.govuk-pagination__link:focus .govuk-pagination__link-label {\n text-decoration: none;\n}\n.govuk-pagination__link:focus .govuk-pagination__link-title--decorated {\n text-decoration: none;\n}\n\n.govuk-pagination__link-label {\n font-weight: 400;\n text-decoration: underline;\n text-decoration-thickness: max(1px, .0625rem);\n text-underline-offset: 0.1578em;\n display: inline-block;\n padding-left: 30px;\n}\n\n.govuk-pagination__icon {\n width: 0.9375rem;\n height: 0.8125rem;\n color: #505a5f;\n fill: currentcolor;\n forced-color-adjust: auto;\n}\n\n.govuk-pagination__icon--prev {\n margin-right: 15px;\n}\n\n.govuk-pagination__icon--next {\n margin-left: 15px;\n}\n\n.govuk-pagination--block {\n display: block;\n}\n.govuk-pagination--block .govuk-pagination__item {\n padding: 15px;\n float: none;\n}\n.govuk-pagination--block .govuk-pagination__next,\n.govuk-pagination--block .govuk-pagination__prev {\n padding-left: 0;\n float: none;\n}\n.govuk-pagination--block .govuk-pagination__next {\n padding-right: 15px;\n}\n.govuk-pagination--block .govuk-pagination__next .govuk-pagination__icon {\n margin-left: 0;\n}\n.govuk-pagination--block .govuk-pagination__prev + .govuk-pagination__next {\n border-top: 1px solid #b1b4b6;\n}\n.govuk-pagination--block .govuk-pagination__link,\n.govuk-pagination--block .govuk-pagination__link-title {\n display: inline;\n}\n.govuk-pagination--block .govuk-pagination__link-title::after {\n content: \"\";\n display: block;\n}\n.govuk-pagination--block .govuk-pagination__link {\n text-align: left;\n}\n.govuk-pagination--block .govuk-pagination__link:focus .govuk-pagination__link-label {\n outline: 3px solid transparent;\n color: #0b0c0c;\n background-color: #ffdd00;\n box-shadow: 0 -2px #ffdd00, 0 4px #0b0c0c;\n text-decoration: none;\n box-decoration-break: clone;\n}\n.govuk-pagination--block .govuk-pagination__link:not(:focus) {\n text-decoration: none;\n}\n.govuk-pagination--block .govuk-pagination__icon {\n margin-right: 10px;\n}\n\n.govuk-panel {\n font-family: \"GDS Transport\", arial, sans-serif;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n font-weight: 400;\n font-size: 1.5rem;\n line-height: 1.0416666667;\n box-sizing: border-box;\n margin-bottom: 15px;\n padding: 35px;\n border: 5px solid transparent;\n text-align: center;\n}\n@media print {\n .govuk-panel {\n font-family: sans-serif;\n }\n}\n@media (min-width: 40.0625em) {\n .govuk-panel {\n font-size: 2.25rem;\n line-height: 1.1111111111;\n }\n}\n@media print {\n .govuk-panel {\n font-size: 24pt;\n line-height: 1.05;\n }\n}\n@media (max-width: 40.0525em) {\n .govuk-panel {\n padding: 10px;\n overflow-wrap: break-word;\n word-wrap: break-word;\n }\n}\n\n.govuk-panel--confirmation {\n color: #ffffff;\n background: #00703c;\n}\n@media print {\n .govuk-panel--confirmation {\n border-color: currentcolor;\n color: #000000;\n background: none;\n }\n}\n\n.govuk-panel__title {\n font-size: 2rem;\n line-height: 1.09375;\n font-weight: 700;\n margin-top: 0;\n margin-bottom: 30px;\n}\n@media (min-width: 40.0625em) {\n .govuk-panel__title {\n font-size: 3rem;\n line-height: 1.0416666667;\n }\n}\n@media print {\n .govuk-panel__title {\n font-size: 32pt;\n line-height: 1.15;\n }\n}\n\n.govuk-panel__title:last-child {\n margin-bottom: 0;\n}\n\n@media (min-width: 20em) {\n .govuk-password-input__wrapper {\n flex-direction: row;\n align-items: flex-start;\n }\n}\n\n.govuk-password-input__input::-ms-reveal {\n display: none;\n}\n\n.govuk-password-input__toggle {\n margin-top: 5px;\n margin-bottom: 0;\n}\n.govuk-password-input__toggle[hidden] {\n display: none;\n}\n@media (min-width: 20em) {\n .govuk-password-input__toggle {\n width: auto;\n flex-shrink: 0;\n flex-basis: 5em;\n margin-top: 0;\n margin-left: 5px;\n }\n}\n\n.govuk-tag {\n font-family: \"GDS Transport\", arial, sans-serif;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n font-weight: 400;\n font-size: 1rem;\n line-height: 1.25;\n display: inline-block;\n max-width: 160px;\n margin-top: -2px;\n margin-bottom: -3px;\n padding-top: 2px;\n padding-right: 8px;\n padding-bottom: 3px;\n padding-left: 8px;\n color: #0c2d4a;\n background-color: #bbd4ea;\n text-decoration: none;\n overflow-wrap: break-word;\n}\n@media print {\n .govuk-tag {\n font-family: sans-serif;\n }\n}\n@media (min-width: 40.0625em) {\n .govuk-tag {\n font-size: 1.1875rem;\n line-height: 1.3157894737;\n }\n}\n@media print {\n .govuk-tag {\n font-size: 14pt;\n line-height: 1.15;\n }\n}\n@media screen and (forced-colors: active) {\n .govuk-tag {\n font-weight: bold;\n }\n}\n\n.govuk-tag--grey {\n color: #282d30;\n background-color: #e5e6e7;\n}\n\n.govuk-tag--purple {\n color: #491644;\n background-color: #efdfed;\n}\n\n.govuk-tag--turquoise {\n color: #10403c;\n background-color: #d4ecea;\n}\n\n.govuk-tag--blue {\n color: #0c2d4a;\n background-color: #bbd4ea;\n}\n\n.govuk-tag--light-blue {\n color: #0c2d4a;\n background-color: #e8f1f8;\n}\n\n.govuk-tag--yellow {\n color: #594d00;\n background-color: #fff7bf;\n}\n\n.govuk-tag--orange {\n color: #6e3619;\n background-color: #fcd6c3;\n}\n\n.govuk-tag--red {\n color: #2a0b06;\n background-color: #f4cdc6;\n}\n\n.govuk-tag--pink {\n color: #6b1c40;\n background-color: #f9e1ec;\n}\n\n.govuk-tag--green {\n color: #005a30;\n background-color: #cce2d8;\n}\n\n.govuk-phase-banner {\n padding-top: 10px;\n padding-bottom: 10px;\n border-bottom: 1px solid #b1b4b6;\n}\n\n.govuk-phase-banner__content {\n font-family: \"GDS Transport\", arial, sans-serif;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n font-weight: 400;\n font-size: 0.875rem;\n line-height: 1.1428571429;\n color: #0b0c0c;\n display: table;\n margin: 0;\n}\n@media print {\n .govuk-phase-banner__content {\n font-family: sans-serif;\n }\n}\n@media (min-width: 40.0625em) {\n .govuk-phase-banner__content {\n font-size: 1rem;\n line-height: 1.25;\n }\n}\n@media print {\n .govuk-phase-banner__content {\n font-size: 14pt;\n line-height: 1.2;\n }\n}\n@media print {\n .govuk-phase-banner__content {\n color: #000000;\n }\n}\n\n.govuk-phase-banner__content__tag {\n font-size: 0.875rem;\n line-height: 1.1428571429;\n margin-right: 10px;\n}\n@media (min-width: 40.0625em) {\n .govuk-phase-banner__content__tag {\n font-size: 1rem;\n line-height: 1.25;\n }\n}\n@media print {\n .govuk-phase-banner__content__tag {\n font-size: 14pt;\n line-height: 1.2;\n }\n}\n\n.govuk-phase-banner__text {\n display: table-cell;\n vertical-align: middle;\n}\n\n.govuk-radios__item {\n display: flex;\n flex-wrap: wrap;\n position: relative;\n margin-bottom: 10px;\n}\n\n.govuk-radios__item:last-child,\n.govuk-radios__item:last-of-type {\n margin-bottom: 0;\n}\n\n.govuk-radios__input {\n z-index: 1;\n width: 44px;\n height: 44px;\n margin: 0;\n opacity: 0;\n cursor: pointer;\n}\n\n.govuk-radios__label {\n align-self: center;\n max-width: calc(100% - 74px);\n margin-bottom: 0;\n padding: 7px 15px;\n cursor: pointer;\n touch-action: manipulation;\n}\n\n.govuk-radios__label::before {\n content: \"\";\n box-sizing: border-box;\n position: absolute;\n top: 2px;\n left: 2px;\n width: 40px;\n height: 40px;\n border: 2px solid currentcolor;\n border-radius: 50%;\n background: transparent;\n}\n\n.govuk-radios__label::after {\n content: \"\";\n position: absolute;\n top: 12px;\n left: 12px;\n width: 0;\n height: 0;\n border: 10px solid currentcolor;\n border-radius: 50%;\n opacity: 0;\n background: currentcolor;\n}\n\n.govuk-radios__hint {\n display: block;\n width: 100%;\n margin-top: -5px;\n padding-right: 15px;\n padding-left: 59px;\n}\n\n.govuk-label:not(.govuk-label--m):not(.govuk-label--l):not(.govuk-label--xl) + .govuk-radios__hint {\n margin-bottom: 0;\n}\n\n.govuk-radios__input:focus + .govuk-radios__label::before {\n border-width: 4px;\n outline: 3px solid transparent;\n outline-offset: 1px;\n box-shadow: 0 0 0 4px #ffdd00;\n}\n@media screen and (forced-colors: active), (-ms-high-contrast: active) {\n .govuk-radios__input:focus + .govuk-radios__label::before {\n outline-color: Highlight;\n }\n}\n\n.govuk-radios__input:checked + .govuk-radios__label::after {\n opacity: 1;\n}\n\n.govuk-radios__input:disabled,\n.govuk-radios__input:disabled + .govuk-radios__label {\n cursor: not-allowed;\n}\n\n.govuk-radios__input:disabled + .govuk-radios__label,\n.govuk-radios__input:disabled ~ .govuk-hint {\n opacity: 0.5;\n}\n\n@media (min-width: 40.0625em) {\n .govuk-radios--inline {\n display: flex;\n flex-wrap: wrap;\n align-items: flex-start;\n }\n .govuk-radios--inline .govuk-radios__item {\n margin-right: 20px;\n }\n}\n\n.govuk-radios__divider {\n font-family: \"GDS Transport\", arial, sans-serif;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n font-weight: 400;\n font-size: 1rem;\n line-height: 1.25;\n color: #0b0c0c;\n width: 40px;\n margin-bottom: 10px;\n text-align: center;\n}\n@media print {\n .govuk-radios__divider {\n font-family: sans-serif;\n }\n}\n@media (min-width: 40.0625em) {\n .govuk-radios__divider {\n font-size: 1.1875rem;\n line-height: 1.3157894737;\n }\n}\n@media print {\n .govuk-radios__divider {\n font-size: 14pt;\n line-height: 1.15;\n }\n}\n@media print {\n .govuk-radios__divider {\n color: #000000;\n }\n}\n\n.govuk-radios__conditional {\n margin-bottom: 15px;\n margin-left: 20px;\n padding-left: 35px;\n border-left: 4px solid #b1b4b6;\n}\n@media (min-width: 40.0625em) {\n .govuk-radios__conditional {\n margin-bottom: 20px;\n }\n}\n.govuk-frontend-supported .govuk-radios__conditional--hidden {\n display: none;\n}\n.govuk-radios__conditional > :last-child {\n margin-bottom: 0;\n}\n\n.govuk-radios--small .govuk-radios__item {\n margin-bottom: 0;\n}\n.govuk-radios--small .govuk-radios__input {\n margin-left: -10px;\n}\n.govuk-radios--small .govuk-radios__label {\n padding-left: 1px;\n}\n.govuk-radios--small .govuk-radios__label::before {\n top: 10px;\n left: 0;\n width: 24px;\n height: 24px;\n}\n.govuk-radios--small .govuk-radios__label::after {\n top: 17px;\n left: 7px;\n border-width: 5px;\n}\n.govuk-radios--small .govuk-radios__hint {\n padding-left: 34px;\n}\n.govuk-radios--small .govuk-radios__conditional {\n margin-left: 10px;\n padding-left: 20px;\n}\n.govuk-radios--small .govuk-radios__divider {\n width: 24px;\n margin-bottom: 5px;\n}\n.govuk-radios--small .govuk-radios__item:hover .govuk-radios__input:not(:disabled) + .govuk-radios__label::before {\n outline: 4px dashed transparent;\n outline-offset: 1px;\n box-shadow: 0 0 0 10px #b1b4b6;\n}\n.govuk-radios--small .govuk-radios__item:hover .govuk-radios__input:focus + .govuk-radios__label::before {\n box-shadow: 0 0 0 4px #ffdd00 0 0 0 10px #b1b4b6;\n}\n@media screen and (forced-colors: active), (-ms-high-contrast: active) {\n .govuk-radios--small .govuk-radios__item:hover .govuk-radios__input:focus + .govuk-radios__label::before {\n outline-color: Highlight;\n }\n}\n@media (hover: none), (pointer: coarse) {\n .govuk-radios--small .govuk-radios__item:hover .govuk-radios__input:not(:disabled) + .govuk-radios__label::before {\n box-shadow: initial;\n }\n .govuk-radios--small .govuk-radios__item:hover .govuk-radios__input:focus + .govuk-radios__label::before {\n box-shadow: 0 0 0 4px #ffdd00;\n }\n}\n\n.govuk-select {\n font-family: \"GDS Transport\", arial, sans-serif;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n font-weight: 400;\n font-size: 1rem;\n line-height: 1.25;\n box-sizing: border-box;\n min-width: 11.5em;\n max-width: 100%;\n height: 2.5rem;\n padding: 5px;\n border: 2px solid #0b0c0c;\n color: #0b0c0c;\n background-color: #ffffff;\n}\n@media print {\n .govuk-select {\n font-family: sans-serif;\n }\n}\n@media (min-width: 40.0625em) {\n .govuk-select {\n font-size: 1.1875rem;\n line-height: 1.25;\n }\n}\n@media print {\n .govuk-select {\n font-size: 14pt;\n line-height: 1.25;\n }\n}\n.govuk-select:focus {\n outline: 3px solid #ffdd00;\n outline-offset: 0;\n box-shadow: inset 0 0 0 2px;\n}\n.govuk-select:disabled {\n opacity: 0.5;\n color: inherit;\n cursor: not-allowed;\n}\n\n.govuk-select option:active,\n.govuk-select option:checked,\n.govuk-select:focus::-ms-value {\n color: #ffffff;\n background-color: #1d70b8;\n}\n\n.govuk-select--error {\n border-color: #d4351c;\n}\n.govuk-select--error:focus {\n border-color: #0b0c0c;\n}\n\n.govuk-skip-link {\n font-family: \"GDS Transport\", arial, sans-serif;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n text-decoration: underline;\n text-decoration-thickness: max(1px, .0625rem);\n text-underline-offset: 0.1578em;\n font-size: 0.875rem;\n line-height: 1.1428571429;\n display: block;\n padding: 10px 15px;\n}\n.govuk-skip-link:not(:active):not(:focus) {\n position: absolute !important;\n width: 1px !important;\n height: 1px !important;\n margin: 0 !important;\n padding: 0 !important;\n overflow: hidden !important;\n clip: rect(0 0 0 0) !important;\n clip-path: inset(50%) !important;\n border: 0 !important;\n white-space: nowrap !important;\n user-select: none;\n}\n@media print {\n .govuk-skip-link {\n font-family: sans-serif;\n }\n}\n.govuk-skip-link:link, .govuk-skip-link:visited {\n color: #0b0c0c;\n}\n@media print {\n .govuk-skip-link:link, .govuk-skip-link:visited {\n color: #000000;\n }\n}\n.govuk-skip-link:hover {\n color: rgba(11, 12, 12, 0.99);\n}\n.govuk-skip-link:active, .govuk-skip-link:focus {\n color: #0b0c0c;\n}\n@media print {\n .govuk-skip-link:active, .govuk-skip-link:focus {\n color: #000000;\n }\n}\n@media (min-width: 40.0625em) {\n .govuk-skip-link {\n font-size: 1rem;\n line-height: 1.25;\n }\n}\n@media print {\n .govuk-skip-link {\n font-size: 14pt;\n line-height: 1.2;\n }\n}\n@supports (padding: max(calc(0px))) {\n .govuk-skip-link {\n padding-right: max(15px, calc(15px + env(safe-area-inset-right)));\n padding-left: max(15px, calc(15px + env(safe-area-inset-left)));\n }\n}\n.govuk-skip-link:focus {\n outline: 3px solid #ffdd00;\n outline-offset: 0;\n background-color: #ffdd00;\n}\n\n.govuk-skip-link-focused-element:focus {\n outline: none;\n}\n\n.govuk-summary-list {\n font-family: \"GDS Transport\", arial, sans-serif;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n font-weight: 400;\n font-size: 1rem;\n line-height: 1.25;\n color: #0b0c0c;\n margin: 0;\n margin-bottom: 20px;\n}\n@media print {\n .govuk-summary-list {\n font-family: sans-serif;\n }\n}\n@media (min-width: 40.0625em) {\n .govuk-summary-list {\n font-size: 1.1875rem;\n line-height: 1.3157894737;\n }\n}\n@media print {\n .govuk-summary-list {\n font-size: 14pt;\n line-height: 1.15;\n }\n}\n@media print {\n .govuk-summary-list {\n color: #000000;\n }\n}\n@media (min-width: 40.0625em) {\n .govuk-summary-list {\n display: table;\n width: 100%;\n table-layout: fixed;\n border-collapse: collapse;\n }\n}\n@media (min-width: 40.0625em) {\n .govuk-summary-list {\n margin-bottom: 30px;\n }\n}\n\n.govuk-summary-list__row {\n border-bottom: 1px solid #b1b4b6;\n}\n@media (max-width: 40.0525em) {\n .govuk-summary-list__row {\n margin-bottom: 15px;\n }\n}\n@media (min-width: 40.0625em) {\n .govuk-summary-list__row {\n display: table-row;\n }\n}\n\n.govuk-summary-list__row:not(.govuk-summary-list__row--no-actions) > :last-child {\n padding-right: 0;\n}\n\n@media (min-width: 40.0625em) {\n .govuk-summary-list__row--no-actions::after {\n content: \"\";\n display: table-cell;\n width: 20%;\n }\n}\n\n.govuk-summary-list__key,\n.govuk-summary-list__value,\n.govuk-summary-list__actions {\n margin: 0;\n}\n@media (min-width: 40.0625em) {\n .govuk-summary-list__key,\n .govuk-summary-list__value,\n .govuk-summary-list__actions {\n display: table-cell;\n padding-top: 10px;\n padding-right: 20px;\n padding-bottom: 10px;\n }\n}\n\n.govuk-summary-list__actions {\n margin-bottom: 15px;\n}\n@media (min-width: 40.0625em) {\n .govuk-summary-list__actions {\n width: 20%;\n text-align: right;\n }\n}\n\n.govuk-summary-list__key,\n.govuk-summary-list__value {\n word-wrap: break-word;\n overflow-wrap: break-word;\n}\n\n.govuk-summary-list__key {\n margin-bottom: 5px;\n font-weight: 700;\n}\n@media (min-width: 40.0625em) {\n .govuk-summary-list__key {\n width: 30%;\n }\n}\n\n@media (max-width: 40.0525em) {\n .govuk-summary-list__value {\n margin-bottom: 15px;\n }\n}\n\n.govuk-summary-list__value > p {\n margin-bottom: 10px;\n}\n\n.govuk-summary-list__value > :last-child {\n margin-bottom: 0;\n}\n\n.govuk-summary-list__actions-list {\n width: 100%;\n margin: 0;\n padding: 0;\n}\n\n.govuk-summary-list__actions-list-item {\n display: inline-block;\n}\n\n@media (max-width: 40.0525em) {\n .govuk-summary-list__actions-list-item {\n margin-right: 10px;\n padding-right: 10px;\n border-right: 1px solid #b1b4b6;\n }\n .govuk-summary-list__actions-list-item:last-child {\n margin-right: 0;\n padding-right: 0;\n border: 0;\n }\n}\n@media (min-width: 40.0625em) {\n .govuk-summary-list__actions-list-item {\n margin-left: 10px;\n padding-left: 10px;\n }\n .govuk-summary-list__actions-list-item:not(:first-child) {\n border-left: 1px solid #b1b4b6;\n }\n .govuk-summary-list__actions-list-item:first-child {\n margin-left: 0;\n padding-left: 0;\n border: 0;\n }\n}\n.govuk-summary-list__actions-list-item .govuk-link:focus {\n isolation: isolate;\n}\n\n.govuk-summary-list--no-border .govuk-summary-list__row {\n border: 0;\n}\n@media (min-width: 40.0625em) {\n .govuk-summary-list--no-border .govuk-summary-list__key,\n .govuk-summary-list--no-border .govuk-summary-list__value,\n .govuk-summary-list--no-border .govuk-summary-list__actions {\n padding-bottom: 11px;\n }\n}\n\n.govuk-summary-list__row--no-border {\n border: 0;\n}\n@media (min-width: 40.0625em) {\n .govuk-summary-list__row--no-border .govuk-summary-list__key,\n .govuk-summary-list__row--no-border .govuk-summary-list__value,\n .govuk-summary-list__row--no-border .govuk-summary-list__actions {\n padding-bottom: 11px;\n }\n}\n\n.govuk-summary-card {\n margin-bottom: 20px;\n border: 1px solid #b1b4b6;\n}\n@media (min-width: 40.0625em) {\n .govuk-summary-card {\n margin-bottom: 30px;\n }\n}\n\n.govuk-summary-card__title-wrapper {\n padding: 15px;\n border-bottom: 1px solid transparent;\n background-color: #f3f2f1;\n}\n@media (min-width: 40.0625em) {\n .govuk-summary-card__title-wrapper {\n display: flex;\n justify-content: space-between;\n flex-wrap: nowrap;\n padding: 15px 20px;\n }\n}\n\n.govuk-summary-card__title {\n font-family: \"GDS Transport\", arial, sans-serif;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n font-weight: 700;\n font-size: 1rem;\n line-height: 1.25;\n color: #0b0c0c;\n margin: 5px 20px 10px 0;\n}\n@media print {\n .govuk-summary-card__title {\n font-family: sans-serif;\n }\n}\n@media (min-width: 40.0625em) {\n .govuk-summary-card__title {\n font-size: 1.1875rem;\n line-height: 1.3157894737;\n }\n}\n@media print {\n .govuk-summary-card__title {\n font-size: 14pt;\n line-height: 1.15;\n }\n}\n@media print {\n .govuk-summary-card__title {\n color: #000000;\n }\n}\n@media (min-width: 40.0625em) {\n .govuk-summary-card__title {\n margin-bottom: 5px;\n }\n}\n\n.govuk-summary-card__actions {\n font-size: 1rem;\n line-height: 1.25;\n font-weight: 700;\n display: flex;\n flex-wrap: wrap;\n row-gap: 10px;\n margin: 5px 0;\n padding: 0;\n list-style: none;\n}\n@media (min-width: 40.0625em) {\n .govuk-summary-card__actions {\n font-size: 1.1875rem;\n line-height: 1.3157894737;\n }\n}\n@media print {\n .govuk-summary-card__actions {\n font-size: 14pt;\n line-height: 1.15;\n }\n}\n@media (min-width: 40.0625em) {\n .govuk-summary-card__actions {\n justify-content: right;\n text-align: right;\n }\n}\n\n.govuk-summary-card__action {\n display: inline;\n margin: 0 10px 0 0;\n padding-right: 10px;\n border-right: 1px solid #b1b4b6;\n}\n@media (min-width: 40.0625em) {\n .govuk-summary-card__action {\n margin-right: 0;\n }\n}\n@media screen and (-ms-high-contrast: active), (-ms-high-contrast: none) {\n .govuk-summary-card__action {\n margin-bottom: 5px;\n }\n}\n\n.govuk-summary-card__action:last-child {\n margin: 0;\n padding-right: 0;\n border-right: none;\n}\n@media (min-width: 40.0625em) {\n .govuk-summary-card__action:last-child {\n padding-left: 10px;\n }\n}\n@media screen and (-ms-high-contrast: active), (-ms-high-contrast: none) {\n .govuk-summary-card__action:last-child {\n margin-bottom: 0;\n }\n}\n\n.govuk-summary-card__content {\n padding: 15px 15px 0;\n}\n@media (min-width: 40.0625em) {\n .govuk-summary-card__content {\n padding: 15px 20px;\n }\n}\n.govuk-summary-card__content .govuk-summary-list {\n margin-bottom: 0;\n}\n.govuk-summary-card__content .govuk-summary-list__row:last-of-type {\n margin-bottom: 0;\n border-bottom: none;\n}\n\n.govuk-table {\n font-family: \"GDS Transport\", arial, sans-serif;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n font-weight: 400;\n font-size: 1rem;\n line-height: 1.25;\n color: #0b0c0c;\n width: 100%;\n margin-bottom: 20px;\n border-spacing: 0;\n border-collapse: collapse;\n}\n@media print {\n .govuk-table {\n font-family: sans-serif;\n }\n}\n@media (min-width: 40.0625em) {\n .govuk-table {\n font-size: 1.1875rem;\n line-height: 1.3157894737;\n }\n}\n@media print {\n .govuk-table {\n font-size: 14pt;\n line-height: 1.15;\n }\n}\n@media print {\n .govuk-table {\n color: #000000;\n }\n}\n@media (min-width: 40.0625em) {\n .govuk-table {\n margin-bottom: 30px;\n }\n}\n\n.govuk-table__header {\n font-weight: 700;\n}\n\n.govuk-table__header,\n.govuk-table__cell {\n padding: 10px 20px 10px 0;\n border-bottom: 1px solid #b1b4b6;\n text-align: left;\n vertical-align: top;\n}\n\n.govuk-table__cell--numeric {\n font-variant-numeric: tabular-nums;\n}\n\n.govuk-table__header--numeric,\n.govuk-table__cell--numeric {\n text-align: right;\n}\n\n.govuk-table__header:last-child,\n.govuk-table__cell:last-child {\n padding-right: 0;\n}\n\n.govuk-table__caption {\n font-weight: 700;\n display: table-caption;\n text-align: left;\n}\n\n.govuk-table__caption--xl,\n.govuk-table__caption--l,\n.govuk-table__caption--m {\n margin-bottom: 15px;\n}\n\n.govuk-table__caption--xl {\n font-size: 2rem;\n line-height: 1.09375;\n}\n@media (min-width: 40.0625em) {\n .govuk-table__caption--xl {\n font-size: 3rem;\n line-height: 1.0416666667;\n }\n}\n@media print {\n .govuk-table__caption--xl {\n font-size: 32pt;\n line-height: 1.15;\n }\n}\n\n.govuk-table__caption--l {\n font-size: 1.5rem;\n line-height: 1.0416666667;\n}\n@media (min-width: 40.0625em) {\n .govuk-table__caption--l {\n font-size: 2.25rem;\n line-height: 1.1111111111;\n }\n}\n@media print {\n .govuk-table__caption--l {\n font-size: 24pt;\n line-height: 1.05;\n }\n}\n\n.govuk-table__caption--m {\n font-size: 1.125rem;\n line-height: 1.1111111111;\n}\n@media (min-width: 40.0625em) {\n .govuk-table__caption--m {\n font-size: 1.5rem;\n line-height: 1.25;\n }\n}\n@media print {\n .govuk-table__caption--m {\n font-size: 18pt;\n line-height: 1.15;\n }\n}\n\n.govuk-tabs {\n margin-top: 5px;\n margin-bottom: 20px;\n font-family: \"GDS Transport\", arial, sans-serif;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n font-weight: 400;\n font-size: 1rem;\n line-height: 1.25;\n}\n@media (min-width: 40.0625em) {\n .govuk-tabs {\n margin-bottom: 30px;\n }\n}\n@media print {\n .govuk-tabs {\n font-family: sans-serif;\n }\n}\n@media (min-width: 40.0625em) {\n .govuk-tabs {\n font-size: 1.1875rem;\n line-height: 1.3157894737;\n }\n}\n@media print {\n .govuk-tabs {\n font-size: 14pt;\n line-height: 1.15;\n }\n}\n\n.govuk-tabs__title {\n font-size: 1rem;\n line-height: 1.25;\n font-weight: 400;\n color: #0b0c0c;\n margin-bottom: 10px;\n}\n@media (min-width: 40.0625em) {\n .govuk-tabs__title {\n font-size: 1.1875rem;\n line-height: 1.3157894737;\n }\n}\n@media print {\n .govuk-tabs__title {\n font-size: 14pt;\n line-height: 1.15;\n }\n}\n@media print {\n .govuk-tabs__title {\n color: #000000;\n }\n}\n\n.govuk-tabs__list {\n margin: 0;\n padding: 0;\n list-style: none;\n margin-bottom: 20px;\n}\n@media (min-width: 40.0625em) {\n .govuk-tabs__list {\n margin-bottom: 30px;\n }\n}\n\n.govuk-tabs__list-item {\n margin-left: 25px;\n}\n.govuk-tabs__list-item::before {\n color: #0b0c0c;\n content: \"—\";\n margin-left: -25px;\n padding-right: 5px;\n}\n@media print {\n .govuk-tabs__list-item::before {\n color: #000000;\n }\n}\n\n.govuk-tabs__tab {\n font-family: \"GDS Transport\", arial, sans-serif;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n text-decoration: underline;\n text-decoration-thickness: max(1px, .0625rem);\n text-underline-offset: 0.1578em;\n display: inline-block;\n margin-bottom: 10px;\n}\n@media print {\n .govuk-tabs__tab {\n font-family: sans-serif;\n }\n}\n.govuk-tabs__tab:hover {\n text-decoration-thickness: max(3px, .1875rem, .12em);\n text-decoration-skip-ink: none;\n text-decoration-skip: none;\n}\n.govuk-tabs__tab:focus {\n outline: 3px solid transparent;\n color: #0b0c0c;\n background-color: #ffdd00;\n box-shadow: 0 -2px #ffdd00, 0 4px #0b0c0c;\n text-decoration: none;\n box-decoration-break: clone;\n}\n.govuk-tabs__tab:link {\n color: #1d70b8;\n}\n.govuk-tabs__tab:visited {\n color: #4c2c92;\n}\n.govuk-tabs__tab:hover {\n color: #003078;\n}\n.govuk-tabs__tab:active {\n color: #0b0c0c;\n}\n.govuk-tabs__tab:focus {\n color: #0b0c0c;\n}\n\n.govuk-tabs__panel {\n margin-bottom: 30px;\n}\n@media (min-width: 40.0625em) {\n .govuk-tabs__panel {\n margin-bottom: 50px;\n }\n}\n\n@media (min-width: 40.0625em) {\n .govuk-frontend-supported .govuk-tabs__list {\n margin-bottom: 0;\n border-bottom: 1px solid #b1b4b6;\n }\n .govuk-frontend-supported .govuk-tabs__list::after {\n content: \"\";\n display: block;\n clear: both;\n }\n .govuk-frontend-supported .govuk-tabs__title {\n display: none;\n }\n .govuk-frontend-supported .govuk-tabs__list-item {\n position: relative;\n margin-right: 5px;\n margin-bottom: 0;\n margin-left: 0;\n padding: 10px 20px;\n float: left;\n background-color: #f3f2f1;\n text-align: center;\n }\n .govuk-frontend-supported .govuk-tabs__list-item::before {\n content: none;\n }\n .govuk-frontend-supported .govuk-tabs__list-item--selected {\n position: relative;\n margin-top: -5px;\n margin-bottom: -1px;\n padding-top: 14px;\n padding-right: 19px;\n padding-bottom: 16px;\n padding-left: 19px;\n border: 1px solid #b1b4b6;\n border-bottom: 0;\n background-color: #ffffff;\n }\n .govuk-frontend-supported .govuk-tabs__list-item--selected .govuk-tabs__tab {\n text-decoration: none;\n }\n .govuk-frontend-supported .govuk-tabs__tab {\n margin-bottom: 0;\n }\n .govuk-frontend-supported .govuk-tabs__tab:link, .govuk-frontend-supported .govuk-tabs__tab:visited {\n color: #0b0c0c;\n }\n}\n@media print and (min-width: 40.0625em) {\n .govuk-frontend-supported .govuk-tabs__tab:link, .govuk-frontend-supported .govuk-tabs__tab:visited {\n color: #000000;\n }\n}\n@media (min-width: 40.0625em) {\n .govuk-frontend-supported .govuk-tabs__tab:hover {\n color: rgba(11, 12, 12, 0.99);\n }\n .govuk-frontend-supported .govuk-tabs__tab:active, .govuk-frontend-supported .govuk-tabs__tab:focus {\n color: #0b0c0c;\n }\n}\n@media print and (min-width: 40.0625em) {\n .govuk-frontend-supported .govuk-tabs__tab:active, .govuk-frontend-supported .govuk-tabs__tab:focus {\n color: #000000;\n }\n}\n@media (min-width: 40.0625em) {\n .govuk-frontend-supported .govuk-tabs__tab::after {\n content: \"\";\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n }\n .govuk-frontend-supported .govuk-tabs__panel {\n margin-bottom: 0;\n padding: 30px 20px;\n border: 1px solid #b1b4b6;\n border-top: 0;\n }\n .govuk-frontend-supported .govuk-tabs__panel > :last-child {\n margin-bottom: 0;\n }\n .govuk-frontend-supported .govuk-tabs__panel--hidden {\n display: none;\n }\n}\n\n.govuk-task-list {\n font-family: \"GDS Transport\", arial, sans-serif;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n font-weight: 400;\n font-size: 1rem;\n line-height: 1.25;\n margin-top: 0;\n margin-bottom: 20px;\n padding: 0;\n list-style-type: none;\n}\n@media print {\n .govuk-task-list {\n font-family: sans-serif;\n }\n}\n@media (min-width: 40.0625em) {\n .govuk-task-list {\n font-size: 1.1875rem;\n line-height: 1.3157894737;\n }\n}\n@media print {\n .govuk-task-list {\n font-size: 14pt;\n line-height: 1.15;\n }\n}\n@media (min-width: 40.0625em) {\n .govuk-task-list {\n margin-bottom: 30px;\n }\n}\n\n.govuk-task-list__item {\n display: table;\n position: relative;\n width: 100%;\n margin-bottom: 0;\n padding-top: 10px;\n padding-bottom: 10px;\n border-bottom: 1px solid #b1b4b6;\n}\n\n.govuk-task-list__item:first-child {\n border-top: 1px solid #b1b4b6;\n}\n\n.govuk-task-list__item--with-link:hover {\n background: #f3f2f1;\n}\n\n.govuk-task-list__name-and-hint {\n display: table-cell;\n vertical-align: top;\n color: #0b0c0c;\n}\n@media print {\n .govuk-task-list__name-and-hint {\n color: #000000;\n }\n}\n\n.govuk-task-list__status {\n display: table-cell;\n padding-left: 10px;\n text-align: right;\n vertical-align: top;\n color: #0b0c0c;\n}\n@media print {\n .govuk-task-list__status {\n color: #000000;\n }\n}\n\n.govuk-task-list__status--cannot-start-yet {\n color: #505a5f;\n}\n\n.govuk-task-list__link::after {\n content: \"\";\n display: block;\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n}\n\n.govuk-task-list__hint {\n margin-top: 5px;\n color: #505a5f;\n}\n\n.govuk-warning-text {\n font-family: \"GDS Transport\", arial, sans-serif;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n font-weight: 400;\n font-size: 1rem;\n line-height: 1.25;\n margin-bottom: 20px;\n position: relative;\n padding: 10px 0;\n}\n@media print {\n .govuk-warning-text {\n font-family: sans-serif;\n }\n}\n@media (min-width: 40.0625em) {\n .govuk-warning-text {\n font-size: 1.1875rem;\n line-height: 1.3157894737;\n }\n}\n@media print {\n .govuk-warning-text {\n font-size: 14pt;\n line-height: 1.15;\n }\n}\n@media (min-width: 40.0625em) {\n .govuk-warning-text {\n margin-bottom: 30px;\n }\n}\n\n.govuk-warning-text__icon {\n font-weight: 700;\n box-sizing: border-box;\n display: inline-block;\n position: absolute;\n left: 0;\n min-width: 35px;\n min-height: 35px;\n margin-top: -7px;\n border: 3px solid #0b0c0c;\n border-radius: 50%;\n color: #ffffff;\n background: #0b0c0c;\n font-size: 30px;\n line-height: 29px;\n text-align: center;\n user-select: none;\n forced-color-adjust: none;\n}\n@media (min-width: 40.0625em) {\n .govuk-warning-text__icon {\n margin-top: -5px;\n }\n}\n@media screen and (forced-colors: active) {\n .govuk-warning-text__icon {\n border-color: windowText;\n color: windowText;\n background: transparent;\n }\n}\n\n.govuk-warning-text__text {\n color: #0b0c0c;\n display: block;\n padding-left: 45px;\n}\n@media print {\n .govuk-warning-text__text {\n color: #000000;\n }\n}\n\n.govuk-clearfix::after {\n content: \"\";\n display: block;\n clear: both;\n}\n\n.govuk-visually-hidden {\n position: absolute !important;\n width: 1px !important;\n height: 1px !important;\n margin: 0 !important;\n padding: 0 !important;\n overflow: hidden !important;\n clip: rect(0 0 0 0) !important;\n clip-path: inset(50%) !important;\n border: 0 !important;\n white-space: nowrap !important;\n user-select: none;\n}\n.govuk-visually-hidden::before {\n content: \" \";\n}\n.govuk-visually-hidden::after {\n content: \" \";\n}\n\n.govuk-visually-hidden-focusable:not(:active):not(:focus) {\n position: absolute !important;\n width: 1px !important;\n height: 1px !important;\n margin: 0 !important;\n padding: 0 !important;\n overflow: hidden !important;\n clip: rect(0 0 0 0) !important;\n clip-path: inset(50%) !important;\n border: 0 !important;\n white-space: nowrap !important;\n user-select: none;\n}\n\n.govuk-\\!-display-inline {\n display: inline !important;\n}\n\n.govuk-\\!-display-inline-block {\n display: inline-block !important;\n}\n\n.govuk-\\!-display-block {\n display: block !important;\n}\n\n.govuk-\\!-display-none {\n display: none !important;\n}\n\n@media print {\n .govuk-\\!-display-none-print {\n display: none !important;\n }\n}\n.govuk-\\!-margin-0 {\n margin: 0 !important;\n}\n\n.govuk-\\!-margin-top-0 {\n margin-top: 0 !important;\n}\n\n.govuk-\\!-margin-right-0 {\n margin-right: 0 !important;\n}\n\n.govuk-\\!-margin-bottom-0 {\n margin-bottom: 0 !important;\n}\n\n.govuk-\\!-margin-left-0 {\n margin-left: 0 !important;\n}\n\n.govuk-\\!-margin-1 {\n margin: 5px !important;\n}\n\n.govuk-\\!-margin-top-1 {\n margin-top: 5px !important;\n}\n\n.govuk-\\!-margin-right-1 {\n margin-right: 5px !important;\n}\n\n.govuk-\\!-margin-bottom-1 {\n margin-bottom: 5px !important;\n}\n\n.govuk-\\!-margin-left-1 {\n margin-left: 5px !important;\n}\n\n.govuk-\\!-margin-2 {\n margin: 10px !important;\n}\n\n.govuk-\\!-margin-top-2 {\n margin-top: 10px !important;\n}\n\n.govuk-\\!-margin-right-2 {\n margin-right: 10px !important;\n}\n\n.govuk-\\!-margin-bottom-2 {\n margin-bottom: 10px !important;\n}\n\n.govuk-\\!-margin-left-2 {\n margin-left: 10px !important;\n}\n\n.govuk-\\!-margin-3 {\n margin: 15px !important;\n}\n\n.govuk-\\!-margin-top-3 {\n margin-top: 15px !important;\n}\n\n.govuk-\\!-margin-right-3 {\n margin-right: 15px !important;\n}\n\n.govuk-\\!-margin-bottom-3 {\n margin-bottom: 15px !important;\n}\n\n.govuk-\\!-margin-left-3 {\n margin-left: 15px !important;\n}\n\n.govuk-\\!-margin-4 {\n margin: 15px !important;\n}\n@media (min-width: 40.0625em) {\n .govuk-\\!-margin-4 {\n margin: 20px !important;\n }\n}\n\n.govuk-\\!-margin-top-4 {\n margin-top: 15px !important;\n}\n@media (min-width: 40.0625em) {\n .govuk-\\!-margin-top-4 {\n margin-top: 20px !important;\n }\n}\n\n.govuk-\\!-margin-right-4 {\n margin-right: 15px !important;\n}\n@media (min-width: 40.0625em) {\n .govuk-\\!-margin-right-4 {\n margin-right: 20px !important;\n }\n}\n\n.govuk-\\!-margin-bottom-4 {\n margin-bottom: 15px !important;\n}\n@media (min-width: 40.0625em) {\n .govuk-\\!-margin-bottom-4 {\n margin-bottom: 20px !important;\n }\n}\n\n.govuk-\\!-margin-left-4 {\n margin-left: 15px !important;\n}\n@media (min-width: 40.0625em) {\n .govuk-\\!-margin-left-4 {\n margin-left: 20px !important;\n }\n}\n\n.govuk-\\!-margin-5 {\n margin: 15px !important;\n}\n@media (min-width: 40.0625em) {\n .govuk-\\!-margin-5 {\n margin: 25px !important;\n }\n}\n\n.govuk-\\!-margin-top-5 {\n margin-top: 15px !important;\n}\n@media (min-width: 40.0625em) {\n .govuk-\\!-margin-top-5 {\n margin-top: 25px !important;\n }\n}\n\n.govuk-\\!-margin-right-5 {\n margin-right: 15px !important;\n}\n@media (min-width: 40.0625em) {\n .govuk-\\!-margin-right-5 {\n margin-right: 25px !important;\n }\n}\n\n.govuk-\\!-margin-bottom-5 {\n margin-bottom: 15px !important;\n}\n@media (min-width: 40.0625em) {\n .govuk-\\!-margin-bottom-5 {\n margin-bottom: 25px !important;\n }\n}\n\n.govuk-\\!-margin-left-5 {\n margin-left: 15px !important;\n}\n@media (min-width: 40.0625em) {\n .govuk-\\!-margin-left-5 {\n margin-left: 25px !important;\n }\n}\n\n.govuk-\\!-margin-6 {\n margin: 20px !important;\n}\n@media (min-width: 40.0625em) {\n .govuk-\\!-margin-6 {\n margin: 30px !important;\n }\n}\n\n.govuk-\\!-margin-top-6 {\n margin-top: 20px !important;\n}\n@media (min-width: 40.0625em) {\n .govuk-\\!-margin-top-6 {\n margin-top: 30px !important;\n }\n}\n\n.govuk-\\!-margin-right-6 {\n margin-right: 20px !important;\n}\n@media (min-width: 40.0625em) {\n .govuk-\\!-margin-right-6 {\n margin-right: 30px !important;\n }\n}\n\n.govuk-\\!-margin-bottom-6 {\n margin-bottom: 20px !important;\n}\n@media (min-width: 40.0625em) {\n .govuk-\\!-margin-bottom-6 {\n margin-bottom: 30px !important;\n }\n}\n\n.govuk-\\!-margin-left-6 {\n margin-left: 20px !important;\n}\n@media (min-width: 40.0625em) {\n .govuk-\\!-margin-left-6 {\n margin-left: 30px !important;\n }\n}\n\n.govuk-\\!-margin-7 {\n margin: 25px !important;\n}\n@media (min-width: 40.0625em) {\n .govuk-\\!-margin-7 {\n margin: 40px !important;\n }\n}\n\n.govuk-\\!-margin-top-7 {\n margin-top: 25px !important;\n}\n@media (min-width: 40.0625em) {\n .govuk-\\!-margin-top-7 {\n margin-top: 40px !important;\n }\n}\n\n.govuk-\\!-margin-right-7 {\n margin-right: 25px !important;\n}\n@media (min-width: 40.0625em) {\n .govuk-\\!-margin-right-7 {\n margin-right: 40px !important;\n }\n}\n\n.govuk-\\!-margin-bottom-7 {\n margin-bottom: 25px !important;\n}\n@media (min-width: 40.0625em) {\n .govuk-\\!-margin-bottom-7 {\n margin-bottom: 40px !important;\n }\n}\n\n.govuk-\\!-margin-left-7 {\n margin-left: 25px !important;\n}\n@media (min-width: 40.0625em) {\n .govuk-\\!-margin-left-7 {\n margin-left: 40px !important;\n }\n}\n\n.govuk-\\!-margin-8 {\n margin: 30px !important;\n}\n@media (min-width: 40.0625em) {\n .govuk-\\!-margin-8 {\n margin: 50px !important;\n }\n}\n\n.govuk-\\!-margin-top-8 {\n margin-top: 30px !important;\n}\n@media (min-width: 40.0625em) {\n .govuk-\\!-margin-top-8 {\n margin-top: 50px !important;\n }\n}\n\n.govuk-\\!-margin-right-8 {\n margin-right: 30px !important;\n}\n@media (min-width: 40.0625em) {\n .govuk-\\!-margin-right-8 {\n margin-right: 50px !important;\n }\n}\n\n.govuk-\\!-margin-bottom-8 {\n margin-bottom: 30px !important;\n}\n@media (min-width: 40.0625em) {\n .govuk-\\!-margin-bottom-8 {\n margin-bottom: 50px !important;\n }\n}\n\n.govuk-\\!-margin-left-8 {\n margin-left: 30px !important;\n}\n@media (min-width: 40.0625em) {\n .govuk-\\!-margin-left-8 {\n margin-left: 50px !important;\n }\n}\n\n.govuk-\\!-margin-9 {\n margin: 40px !important;\n}\n@media (min-width: 40.0625em) {\n .govuk-\\!-margin-9 {\n margin: 60px !important;\n }\n}\n\n.govuk-\\!-margin-top-9 {\n margin-top: 40px !important;\n}\n@media (min-width: 40.0625em) {\n .govuk-\\!-margin-top-9 {\n margin-top: 60px !important;\n }\n}\n\n.govuk-\\!-margin-right-9 {\n margin-right: 40px !important;\n}\n@media (min-width: 40.0625em) {\n .govuk-\\!-margin-right-9 {\n margin-right: 60px !important;\n }\n}\n\n.govuk-\\!-margin-bottom-9 {\n margin-bottom: 40px !important;\n}\n@media (min-width: 40.0625em) {\n .govuk-\\!-margin-bottom-9 {\n margin-bottom: 60px !important;\n }\n}\n\n.govuk-\\!-margin-left-9 {\n margin-left: 40px !important;\n}\n@media (min-width: 40.0625em) {\n .govuk-\\!-margin-left-9 {\n margin-left: 60px !important;\n }\n}\n\n.govuk-\\!-padding-0 {\n padding: 0 !important;\n}\n\n.govuk-\\!-padding-top-0 {\n padding-top: 0 !important;\n}\n\n.govuk-\\!-padding-right-0 {\n padding-right: 0 !important;\n}\n\n.govuk-\\!-padding-bottom-0 {\n padding-bottom: 0 !important;\n}\n\n.govuk-\\!-padding-left-0 {\n padding-left: 0 !important;\n}\n\n.govuk-\\!-padding-1 {\n padding: 5px !important;\n}\n\n.govuk-\\!-padding-top-1 {\n padding-top: 5px !important;\n}\n\n.govuk-\\!-padding-right-1 {\n padding-right: 5px !important;\n}\n\n.govuk-\\!-padding-bottom-1 {\n padding-bottom: 5px !important;\n}\n\n.govuk-\\!-padding-left-1 {\n padding-left: 5px !important;\n}\n\n.govuk-\\!-padding-2 {\n padding: 10px !important;\n}\n\n.govuk-\\!-padding-top-2 {\n padding-top: 10px !important;\n}\n\n.govuk-\\!-padding-right-2 {\n padding-right: 10px !important;\n}\n\n.govuk-\\!-padding-bottom-2 {\n padding-bottom: 10px !important;\n}\n\n.govuk-\\!-padding-left-2 {\n padding-left: 10px !important;\n}\n\n.govuk-\\!-padding-3 {\n padding: 15px !important;\n}\n\n.govuk-\\!-padding-top-3 {\n padding-top: 15px !important;\n}\n\n.govuk-\\!-padding-right-3 {\n padding-right: 15px !important;\n}\n\n.govuk-\\!-padding-bottom-3 {\n padding-bottom: 15px !important;\n}\n\n.govuk-\\!-padding-left-3 {\n padding-left: 15px !important;\n}\n\n.govuk-\\!-padding-4 {\n padding: 15px !important;\n}\n@media (min-width: 40.0625em) {\n .govuk-\\!-padding-4 {\n padding: 20px !important;\n }\n}\n\n.govuk-\\!-padding-top-4 {\n padding-top: 15px !important;\n}\n@media (min-width: 40.0625em) {\n .govuk-\\!-padding-top-4 {\n padding-top: 20px !important;\n }\n}\n\n.govuk-\\!-padding-right-4 {\n padding-right: 15px !important;\n}\n@media (min-width: 40.0625em) {\n .govuk-\\!-padding-right-4 {\n padding-right: 20px !important;\n }\n}\n\n.govuk-\\!-padding-bottom-4 {\n padding-bottom: 15px !important;\n}\n@media (min-width: 40.0625em) {\n .govuk-\\!-padding-bottom-4 {\n padding-bottom: 20px !important;\n }\n}\n\n.govuk-\\!-padding-left-4 {\n padding-left: 15px !important;\n}\n@media (min-width: 40.0625em) {\n .govuk-\\!-padding-left-4 {\n padding-left: 20px !important;\n }\n}\n\n.govuk-\\!-padding-5 {\n padding: 15px !important;\n}\n@media (min-width: 40.0625em) {\n .govuk-\\!-padding-5 {\n padding: 25px !important;\n }\n}\n\n.govuk-\\!-padding-top-5 {\n padding-top: 15px !important;\n}\n@media (min-width: 40.0625em) {\n .govuk-\\!-padding-top-5 {\n padding-top: 25px !important;\n }\n}\n\n.govuk-\\!-padding-right-5 {\n padding-right: 15px !important;\n}\n@media (min-width: 40.0625em) {\n .govuk-\\!-padding-right-5 {\n padding-right: 25px !important;\n }\n}\n\n.govuk-\\!-padding-bottom-5 {\n padding-bottom: 15px !important;\n}\n@media (min-width: 40.0625em) {\n .govuk-\\!-padding-bottom-5 {\n padding-bottom: 25px !important;\n }\n}\n\n.govuk-\\!-padding-left-5 {\n padding-left: 15px !important;\n}\n@media (min-width: 40.0625em) {\n .govuk-\\!-padding-left-5 {\n padding-left: 25px !important;\n }\n}\n\n.govuk-\\!-padding-6 {\n padding: 20px !important;\n}\n@media (min-width: 40.0625em) {\n .govuk-\\!-padding-6 {\n padding: 30px !important;\n }\n}\n\n.govuk-\\!-padding-top-6 {\n padding-top: 20px !important;\n}\n@media (min-width: 40.0625em) {\n .govuk-\\!-padding-top-6 {\n padding-top: 30px !important;\n }\n}\n\n.govuk-\\!-padding-right-6 {\n padding-right: 20px !important;\n}\n@media (min-width: 40.0625em) {\n .govuk-\\!-padding-right-6 {\n padding-right: 30px !important;\n }\n}\n\n.govuk-\\!-padding-bottom-6 {\n padding-bottom: 20px !important;\n}\n@media (min-width: 40.0625em) {\n .govuk-\\!-padding-bottom-6 {\n padding-bottom: 30px !important;\n }\n}\n\n.govuk-\\!-padding-left-6 {\n padding-left: 20px !important;\n}\n@media (min-width: 40.0625em) {\n .govuk-\\!-padding-left-6 {\n padding-left: 30px !important;\n }\n}\n\n.govuk-\\!-padding-7 {\n padding: 25px !important;\n}\n@media (min-width: 40.0625em) {\n .govuk-\\!-padding-7 {\n padding: 40px !important;\n }\n}\n\n.govuk-\\!-padding-top-7 {\n padding-top: 25px !important;\n}\n@media (min-width: 40.0625em) {\n .govuk-\\!-padding-top-7 {\n padding-top: 40px !important;\n }\n}\n\n.govuk-\\!-padding-right-7 {\n padding-right: 25px !important;\n}\n@media (min-width: 40.0625em) {\n .govuk-\\!-padding-right-7 {\n padding-right: 40px !important;\n }\n}\n\n.govuk-\\!-padding-bottom-7 {\n padding-bottom: 25px !important;\n}\n@media (min-width: 40.0625em) {\n .govuk-\\!-padding-bottom-7 {\n padding-bottom: 40px !important;\n }\n}\n\n.govuk-\\!-padding-left-7 {\n padding-left: 25px !important;\n}\n@media (min-width: 40.0625em) {\n .govuk-\\!-padding-left-7 {\n padding-left: 40px !important;\n }\n}\n\n.govuk-\\!-padding-8 {\n padding: 30px !important;\n}\n@media (min-width: 40.0625em) {\n .govuk-\\!-padding-8 {\n padding: 50px !important;\n }\n}\n\n.govuk-\\!-padding-top-8 {\n padding-top: 30px !important;\n}\n@media (min-width: 40.0625em) {\n .govuk-\\!-padding-top-8 {\n padding-top: 50px !important;\n }\n}\n\n.govuk-\\!-padding-right-8 {\n padding-right: 30px !important;\n}\n@media (min-width: 40.0625em) {\n .govuk-\\!-padding-right-8 {\n padding-right: 50px !important;\n }\n}\n\n.govuk-\\!-padding-bottom-8 {\n padding-bottom: 30px !important;\n}\n@media (min-width: 40.0625em) {\n .govuk-\\!-padding-bottom-8 {\n padding-bottom: 50px !important;\n }\n}\n\n.govuk-\\!-padding-left-8 {\n padding-left: 30px !important;\n}\n@media (min-width: 40.0625em) {\n .govuk-\\!-padding-left-8 {\n padding-left: 50px !important;\n }\n}\n\n.govuk-\\!-padding-9 {\n padding: 40px !important;\n}\n@media (min-width: 40.0625em) {\n .govuk-\\!-padding-9 {\n padding: 60px !important;\n }\n}\n\n.govuk-\\!-padding-top-9 {\n padding-top: 40px !important;\n}\n@media (min-width: 40.0625em) {\n .govuk-\\!-padding-top-9 {\n padding-top: 60px !important;\n }\n}\n\n.govuk-\\!-padding-right-9 {\n padding-right: 40px !important;\n}\n@media (min-width: 40.0625em) {\n .govuk-\\!-padding-right-9 {\n padding-right: 60px !important;\n }\n}\n\n.govuk-\\!-padding-bottom-9 {\n padding-bottom: 40px !important;\n}\n@media (min-width: 40.0625em) {\n .govuk-\\!-padding-bottom-9 {\n padding-bottom: 60px !important;\n }\n}\n\n.govuk-\\!-padding-left-9 {\n padding-left: 40px !important;\n}\n@media (min-width: 40.0625em) {\n .govuk-\\!-padding-left-9 {\n padding-left: 60px !important;\n }\n}\n\n.govuk-\\!-static-margin-0 {\n margin: 0 !important;\n}\n\n.govuk-\\!-static-margin-top-0 {\n margin-top: 0 !important;\n}\n\n.govuk-\\!-static-margin-right-0 {\n margin-right: 0 !important;\n}\n\n.govuk-\\!-static-margin-bottom-0 {\n margin-bottom: 0 !important;\n}\n\n.govuk-\\!-static-margin-left-0 {\n margin-left: 0 !important;\n}\n\n.govuk-\\!-static-margin-1 {\n margin: 5px !important;\n}\n\n.govuk-\\!-static-margin-top-1 {\n margin-top: 5px !important;\n}\n\n.govuk-\\!-static-margin-right-1 {\n margin-right: 5px !important;\n}\n\n.govuk-\\!-static-margin-bottom-1 {\n margin-bottom: 5px !important;\n}\n\n.govuk-\\!-static-margin-left-1 {\n margin-left: 5px !important;\n}\n\n.govuk-\\!-static-margin-2 {\n margin: 10px !important;\n}\n\n.govuk-\\!-static-margin-top-2 {\n margin-top: 10px !important;\n}\n\n.govuk-\\!-static-margin-right-2 {\n margin-right: 10px !important;\n}\n\n.govuk-\\!-static-margin-bottom-2 {\n margin-bottom: 10px !important;\n}\n\n.govuk-\\!-static-margin-left-2 {\n margin-left: 10px !important;\n}\n\n.govuk-\\!-static-margin-3 {\n margin: 15px !important;\n}\n\n.govuk-\\!-static-margin-top-3 {\n margin-top: 15px !important;\n}\n\n.govuk-\\!-static-margin-right-3 {\n margin-right: 15px !important;\n}\n\n.govuk-\\!-static-margin-bottom-3 {\n margin-bottom: 15px !important;\n}\n\n.govuk-\\!-static-margin-left-3 {\n margin-left: 15px !important;\n}\n\n.govuk-\\!-static-margin-4 {\n margin: 20px !important;\n}\n\n.govuk-\\!-static-margin-top-4 {\n margin-top: 20px !important;\n}\n\n.govuk-\\!-static-margin-right-4 {\n margin-right: 20px !important;\n}\n\n.govuk-\\!-static-margin-bottom-4 {\n margin-bottom: 20px !important;\n}\n\n.govuk-\\!-static-margin-left-4 {\n margin-left: 20px !important;\n}\n\n.govuk-\\!-static-margin-5 {\n margin: 25px !important;\n}\n\n.govuk-\\!-static-margin-top-5 {\n margin-top: 25px !important;\n}\n\n.govuk-\\!-static-margin-right-5 {\n margin-right: 25px !important;\n}\n\n.govuk-\\!-static-margin-bottom-5 {\n margin-bottom: 25px !important;\n}\n\n.govuk-\\!-static-margin-left-5 {\n margin-left: 25px !important;\n}\n\n.govuk-\\!-static-margin-6 {\n margin: 30px !important;\n}\n\n.govuk-\\!-static-margin-top-6 {\n margin-top: 30px !important;\n}\n\n.govuk-\\!-static-margin-right-6 {\n margin-right: 30px !important;\n}\n\n.govuk-\\!-static-margin-bottom-6 {\n margin-bottom: 30px !important;\n}\n\n.govuk-\\!-static-margin-left-6 {\n margin-left: 30px !important;\n}\n\n.govuk-\\!-static-margin-7 {\n margin: 40px !important;\n}\n\n.govuk-\\!-static-margin-top-7 {\n margin-top: 40px !important;\n}\n\n.govuk-\\!-static-margin-right-7 {\n margin-right: 40px !important;\n}\n\n.govuk-\\!-static-margin-bottom-7 {\n margin-bottom: 40px !important;\n}\n\n.govuk-\\!-static-margin-left-7 {\n margin-left: 40px !important;\n}\n\n.govuk-\\!-static-margin-8 {\n margin: 50px !important;\n}\n\n.govuk-\\!-static-margin-top-8 {\n margin-top: 50px !important;\n}\n\n.govuk-\\!-static-margin-right-8 {\n margin-right: 50px !important;\n}\n\n.govuk-\\!-static-margin-bottom-8 {\n margin-bottom: 50px !important;\n}\n\n.govuk-\\!-static-margin-left-8 {\n margin-left: 50px !important;\n}\n\n.govuk-\\!-static-margin-9 {\n margin: 60px !important;\n}\n\n.govuk-\\!-static-margin-top-9 {\n margin-top: 60px !important;\n}\n\n.govuk-\\!-static-margin-right-9 {\n margin-right: 60px !important;\n}\n\n.govuk-\\!-static-margin-bottom-9 {\n margin-bottom: 60px !important;\n}\n\n.govuk-\\!-static-margin-left-9 {\n margin-left: 60px !important;\n}\n\n.govuk-\\!-static-padding-0 {\n padding: 0 !important;\n}\n\n.govuk-\\!-static-padding-top-0 {\n padding-top: 0 !important;\n}\n\n.govuk-\\!-static-padding-right-0 {\n padding-right: 0 !important;\n}\n\n.govuk-\\!-static-padding-bottom-0 {\n padding-bottom: 0 !important;\n}\n\n.govuk-\\!-static-padding-left-0 {\n padding-left: 0 !important;\n}\n\n.govuk-\\!-static-padding-1 {\n padding: 5px !important;\n}\n\n.govuk-\\!-static-padding-top-1 {\n padding-top: 5px !important;\n}\n\n.govuk-\\!-static-padding-right-1 {\n padding-right: 5px !important;\n}\n\n.govuk-\\!-static-padding-bottom-1 {\n padding-bottom: 5px !important;\n}\n\n.govuk-\\!-static-padding-left-1 {\n padding-left: 5px !important;\n}\n\n.govuk-\\!-static-padding-2 {\n padding: 10px !important;\n}\n\n.govuk-\\!-static-padding-top-2 {\n padding-top: 10px !important;\n}\n\n.govuk-\\!-static-padding-right-2 {\n padding-right: 10px !important;\n}\n\n.govuk-\\!-static-padding-bottom-2 {\n padding-bottom: 10px !important;\n}\n\n.govuk-\\!-static-padding-left-2 {\n padding-left: 10px !important;\n}\n\n.govuk-\\!-static-padding-3 {\n padding: 15px !important;\n}\n\n.govuk-\\!-static-padding-top-3 {\n padding-top: 15px !important;\n}\n\n.govuk-\\!-static-padding-right-3 {\n padding-right: 15px !important;\n}\n\n.govuk-\\!-static-padding-bottom-3 {\n padding-bottom: 15px !important;\n}\n\n.govuk-\\!-static-padding-left-3 {\n padding-left: 15px !important;\n}\n\n.govuk-\\!-static-padding-4 {\n padding: 20px !important;\n}\n\n.govuk-\\!-static-padding-top-4 {\n padding-top: 20px !important;\n}\n\n.govuk-\\!-static-padding-right-4 {\n padding-right: 20px !important;\n}\n\n.govuk-\\!-static-padding-bottom-4 {\n padding-bottom: 20px !important;\n}\n\n.govuk-\\!-static-padding-left-4 {\n padding-left: 20px !important;\n}\n\n.govuk-\\!-static-padding-5 {\n padding: 25px !important;\n}\n\n.govuk-\\!-static-padding-top-5 {\n padding-top: 25px !important;\n}\n\n.govuk-\\!-static-padding-right-5 {\n padding-right: 25px !important;\n}\n\n.govuk-\\!-static-padding-bottom-5 {\n padding-bottom: 25px !important;\n}\n\n.govuk-\\!-static-padding-left-5 {\n padding-left: 25px !important;\n}\n\n.govuk-\\!-static-padding-6 {\n padding: 30px !important;\n}\n\n.govuk-\\!-static-padding-top-6 {\n padding-top: 30px !important;\n}\n\n.govuk-\\!-static-padding-right-6 {\n padding-right: 30px !important;\n}\n\n.govuk-\\!-static-padding-bottom-6 {\n padding-bottom: 30px !important;\n}\n\n.govuk-\\!-static-padding-left-6 {\n padding-left: 30px !important;\n}\n\n.govuk-\\!-static-padding-7 {\n padding: 40px !important;\n}\n\n.govuk-\\!-static-padding-top-7 {\n padding-top: 40px !important;\n}\n\n.govuk-\\!-static-padding-right-7 {\n padding-right: 40px !important;\n}\n\n.govuk-\\!-static-padding-bottom-7 {\n padding-bottom: 40px !important;\n}\n\n.govuk-\\!-static-padding-left-7 {\n padding-left: 40px !important;\n}\n\n.govuk-\\!-static-padding-8 {\n padding: 50px !important;\n}\n\n.govuk-\\!-static-padding-top-8 {\n padding-top: 50px !important;\n}\n\n.govuk-\\!-static-padding-right-8 {\n padding-right: 50px !important;\n}\n\n.govuk-\\!-static-padding-bottom-8 {\n padding-bottom: 50px !important;\n}\n\n.govuk-\\!-static-padding-left-8 {\n padding-left: 50px !important;\n}\n\n.govuk-\\!-static-padding-9 {\n padding: 60px !important;\n}\n\n.govuk-\\!-static-padding-top-9 {\n padding-top: 60px !important;\n}\n\n.govuk-\\!-static-padding-right-9 {\n padding-right: 60px !important;\n}\n\n.govuk-\\!-static-padding-bottom-9 {\n padding-bottom: 60px !important;\n}\n\n.govuk-\\!-static-padding-left-9 {\n padding-left: 60px !important;\n}\n\n.govuk-\\!-text-align-left {\n text-align: left !important;\n}\n\n.govuk-\\!-text-align-centre {\n text-align: center !important;\n}\n\n.govuk-\\!-text-align-right {\n text-align: right !important;\n}\n\n.govuk-\\!-font-size-80 {\n font-size: 3.3125rem !important;\n line-height: 1.0377358491 !important;\n}\n@media (min-width: 40.0625em) {\n .govuk-\\!-font-size-80 {\n font-size: 5rem !important;\n line-height: 1 !important;\n }\n}\n@media print {\n .govuk-\\!-font-size-80 {\n font-size: 53pt !important;\n line-height: 1.1 !important;\n }\n}\n\n.govuk-\\!-font-size-48 {\n font-size: 2rem !important;\n line-height: 1.09375 !important;\n}\n@media (min-width: 40.0625em) {\n .govuk-\\!-font-size-48 {\n font-size: 3rem !important;\n line-height: 1.0416666667 !important;\n }\n}\n@media print {\n .govuk-\\!-font-size-48 {\n font-size: 32pt !important;\n line-height: 1.15 !important;\n }\n}\n\n.govuk-\\!-font-size-36 {\n font-size: 1.5rem !important;\n line-height: 1.0416666667 !important;\n}\n@media (min-width: 40.0625em) {\n .govuk-\\!-font-size-36 {\n font-size: 2.25rem !important;\n line-height: 1.1111111111 !important;\n }\n}\n@media print {\n .govuk-\\!-font-size-36 {\n font-size: 24pt !important;\n line-height: 1.05 !important;\n }\n}\n\n.govuk-\\!-font-size-27 {\n font-size: 1.125rem !important;\n line-height: 1.1111111111 !important;\n}\n@media (min-width: 40.0625em) {\n .govuk-\\!-font-size-27 {\n font-size: 1.6875rem !important;\n line-height: 1.1111111111 !important;\n }\n}\n@media print {\n .govuk-\\!-font-size-27 {\n font-size: 18pt !important;\n line-height: 1.15 !important;\n }\n}\n\n.govuk-\\!-font-size-24 {\n font-size: 1.125rem !important;\n line-height: 1.1111111111 !important;\n}\n@media (min-width: 40.0625em) {\n .govuk-\\!-font-size-24 {\n font-size: 1.5rem !important;\n line-height: 1.25 !important;\n }\n}\n@media print {\n .govuk-\\!-font-size-24 {\n font-size: 18pt !important;\n line-height: 1.15 !important;\n }\n}\n\n.govuk-\\!-font-size-19 {\n font-size: 1rem !important;\n line-height: 1.25 !important;\n}\n@media (min-width: 40.0625em) {\n .govuk-\\!-font-size-19 {\n font-size: 1.1875rem !important;\n line-height: 1.3157894737 !important;\n }\n}\n@media print {\n .govuk-\\!-font-size-19 {\n font-size: 14pt !important;\n line-height: 1.15 !important;\n }\n}\n\n.govuk-\\!-font-size-16 {\n font-size: 0.875rem !important;\n line-height: 1.1428571429 !important;\n}\n@media (min-width: 40.0625em) {\n .govuk-\\!-font-size-16 {\n font-size: 1rem !important;\n line-height: 1.25 !important;\n }\n}\n@media print {\n .govuk-\\!-font-size-16 {\n font-size: 14pt !important;\n line-height: 1.2 !important;\n }\n}\n\n.govuk-\\!-font-size-14 {\n font-size: 0.75rem !important;\n line-height: 1.25 !important;\n}\n@media (min-width: 40.0625em) {\n .govuk-\\!-font-size-14 {\n font-size: 0.875rem !important;\n line-height: 1.4285714286 !important;\n }\n}\n@media print {\n .govuk-\\!-font-size-14 {\n font-size: 12pt !important;\n line-height: 1.2 !important;\n }\n}\n\n.govuk-\\!-font-weight-regular {\n font-weight: 400 !important;\n}\n\n.govuk-\\!-font-weight-bold {\n font-weight: 700 !important;\n}\n\n.govuk-\\!-font-tabular-numbers {\n font-variant-numeric: tabular-nums !important;\n}\n\n.govuk-\\!-width-full {\n width: 100% !important;\n}\n\n.govuk-\\!-width-three-quarters {\n width: 100% !important;\n}\n@media (min-width: 40.0625em) {\n .govuk-\\!-width-three-quarters {\n width: 75% !important;\n }\n}\n\n.govuk-\\!-width-two-thirds {\n width: 100% !important;\n}\n@media (min-width: 40.0625em) {\n .govuk-\\!-width-two-thirds {\n width: 66.66% !important;\n }\n}\n\n.govuk-\\!-width-one-half {\n width: 100% !important;\n}\n@media (min-width: 40.0625em) {\n .govuk-\\!-width-one-half {\n width: 50% !important;\n }\n}\n\n.govuk-\\!-width-one-third {\n width: 100% !important;\n}\n@media (min-width: 40.0625em) {\n .govuk-\\!-width-one-third {\n width: 33.33% !important;\n }\n}\n\n.govuk-\\!-width-one-quarter {\n width: 100% !important;\n}\n@media (min-width: 40.0625em) {\n .govuk-\\!-width-one-quarter {\n width: 25% !important;\n }\n}",":root {\n // This variable is automatically overwritten during builds and releases.\n // It doesn't need to be updated manually.\n --govuk-frontend-version: \"development\";\n\n // CSS custom property for each breakpoint\n @each $name, $value in $govuk-breakpoints {\n --govuk-frontend-breakpoint-#{$name}: #{govuk-px-to-rem($value)};\n }\n}\n","@include govuk-exports(\"govuk/core/links\") {\n %govuk-link {\n @include govuk-link-common;\n @include govuk-link-style-default;\n @include govuk-link-print-friendly;\n }\n\n .govuk-link {\n @extend %govuk-link;\n }\n\n // Variant classes should always be used in conjunction with the .govuk-link\n // class, so we do not need the common link styles as they will be inherited.\n\n .govuk-link--muted {\n @include govuk-link-style-muted;\n }\n\n .govuk-link--text-colour {\n @include govuk-link-style-text;\n }\n\n .govuk-link--inverse {\n @include govuk-link-style-inverse;\n }\n\n .govuk-link--no-underline {\n @include govuk-link-style-no-underline;\n }\n\n .govuk-link--no-visited-state {\n @include govuk-link-style-no-visited-state;\n }\n\n // Links that only contain images\n\n .govuk-link-image {\n @include govuk-link-image;\n }\n}\n","////\n/// @group helpers/typography\n////\n\n@import \"../tools/px-to-rem\";\n\n/// 'Common typography' helper\n///\n/// Sets the font family and associated properties, such as font smoothing. Also\n/// overrides the font for print.\n///\n/// @param {List} $font-family [$govuk-font-family] Font family to use\n/// @access public\n\n@mixin govuk-typography-common($font-family: $govuk-font-family) {\n font-family: $font-family;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n\n // If the user is using the default GDS Transport font we need to include\n // the font-face declarations.\n @if $govuk-include-default-font-face {\n @include _govuk-font-face-gds-transport;\n }\n\n @include govuk-media-query($media-type: print) {\n font-family: $govuk-font-family-print;\n }\n}\n\n/// Text colour helper\n///\n/// Sets the text colour, including a suitable override for print.\n///\n/// @access public\n\n@mixin govuk-text-colour {\n color: $govuk-text-colour;\n\n @include govuk-media-query($media-type: print) {\n color: $govuk-print-text-colour;\n }\n}\n\n/// Regular font weight helper\n///\n/// @param {Boolean} $important [false] - Whether to mark declarations as\n/// `!important`. Generally Used to create override classes.\n/// @access public\n\n@mixin govuk-typography-weight-regular($important: false) {\n font-weight: $govuk-font-weight-regular if($important, !important, null);\n}\n\n/// Bold font weight helper\n///\n/// @param {Boolean} $important [false] - Whether to mark declarations as\n/// `!important`. Generally Used to create override classes.\n/// @access public\n\n@mixin govuk-typography-weight-bold($important: false) {\n font-weight: $govuk-font-weight-bold if($important, !important, null);\n}\n\n/// Tabular number helper\n///\n/// Switches numerical glyphs (0–9) to use alternative forms with a\n/// monospaced bounding box. This ensures that columns of numbers, such\n/// as those in tables, remain horizontally aligned with one another.\n/// This also has the useful side effect of making numbers more legible\n/// in some situations, such as reference codes, as the numbers are more\n/// distinct and visually separated from one another.\n///\n/// @param {Boolean} $important [false] - Whether to mark declarations as\n/// `!important`. Generally Used to create override classes.\n/// @access public\n\n@mixin govuk-font-tabular-numbers($important: false) {\n font-variant-numeric: tabular-nums if($important, !important, null);\n}\n\n/// Convert line-heights specified in pixels into a relative value, unless\n/// they are already unit-less (and thus already treated as relative values)\n/// or the units do not match the units used for the font size.\n///\n/// @param {Number} $line-height Line height\n/// @param {Number} $font-size Font size\n/// @return {Number} The line height as either a relative value or unmodified\n///\n/// @access private\n\n@function _govuk-line-height($line-height, $font-size) {\n @if not unitless($line-height) and unit($line-height) == unit($font-size) {\n $line-height: $line-height / $font-size;\n }\n\n @return $line-height;\n}\n\n/// Font size and line height helper\n///\n/// @param {Number} $size - Point from the type scale (the size as it would\n/// appear on tablet and above)\n/// @param {Number} $override-line-height [false] - Non responsive custom line\n/// height. Omit to use the line height from the font map.\n/// @param {Boolean} $important [false] - Whether to mark declarations as\n/// `!important`.\n///\n/// @throw if `$size` is not a valid point from the type scale\n///\n/// @access public\n///\n/// @alias govuk-font-size\n/// @deprecated Use `govuk-font-size` instead\n\n@mixin govuk-typography-responsive($size, $override-line-height: false, $important: false) {\n @include _warning(\n \"govuk-typography-responsive\",\n \"govuk-typography-responsive is deprecated. Use govuk-font-size instead.\"\n );\n @include govuk-font-size($size, $override-line-height, $important);\n}\n\n/// Font size and line height helper\n///\n/// Takes a point from the responsive 'font map' as an argument (the size as it\n/// would appear on tablet and above), and uses it to create font-size and\n/// line-height declarations for different breakpoints, and print.\n///\n/// Example font map:\n///\n/// ```scss\n/// 19: (\n/// null: (\n/// font-size: 16px,\n/// line-height: 20px\n/// ),\n/// tablet: (\n/// font-size: 19px,\n/// line-height: 25px\n/// ),\n/// print: (\n/// font-size: 14pt,\n/// line-height: 1.15\n/// )\n/// );\n/// ```\n///\n/// @param {Number | String} $size - Point from the type scale (the size as\n/// it would appear on tablet and above)\n/// @param {Number} $line-height [false] - Non responsive custom line\n/// height. Omit to use the line height from the font map.\n/// @param {Boolean} $important [false] - Whether to mark declarations as\n/// `!important`.\n///\n/// @throw if `$size` is not a valid point from the type scale\n///\n/// @access public\n\n@mixin govuk-font-size($size, $line-height: false, $important: false) {\n // Flag font sizes that start with underscores so we can suppress warnings on\n // deprecated sizes used internally, for example `govuk-font($size: \"_14\")`\n $size-internal-use-only: str-slice(#{$size}, 1, 1) == \"_\";\n\n // Remove underscore from font sizes flagged for internal use\n @if $size-internal-use-only {\n $size: str-slice(#{$size}, 2);\n }\n\n // Check for a font map exactly matching the given size\n $font-map: map-get($govuk-typography-scale, $size);\n\n // No match? Try with string type (e.g. $size: \"16\" not 16)\n @if not $font-map {\n @each $font-size in map-keys($govuk-typography-scale) {\n @if not $font-map and #{$font-size} == #{$size} {\n $font-map: map-get($govuk-typography-scale, $font-size);\n }\n }\n }\n\n // Still no match? Throw error\n @if not $font-map {\n @error \"Unknown font size `#{$size}` - expected a point from the type scale.\";\n }\n\n // Check for a deprecation within the type scale\n $deprecation: map-get($font-map, \"deprecation\");\n\n @if $deprecation {\n // Warn on deprecated font sizes unless flagged for internal use\n @if not $size-internal-use-only {\n @include _warning(map-get($deprecation, \"key\"), map-get($deprecation, \"message\"));\n }\n\n // remove the deprecation map keys so they do not break the breakpoint loop\n $font-map: map-remove($font-map, \"deprecation\");\n }\n\n @each $breakpoint, $breakpoint-map in $font-map {\n $font-size: map-get($breakpoint-map, \"font-size\");\n $font-size-rem: govuk-px-to-rem($font-size);\n\n // $calculated-line-height is a separate variable from $line-height,\n // as otherwise the value would get redefined with each loop and\n // eventually break _govuk-line-height.\n //\n // We continue to call the param $line-height to stay consistent with the\n // naming with govuk-font.\n $calculated-line-height: _govuk-line-height(\n $line-height: if($line-height, $line-height, map-get($breakpoint-map, \"line-height\")),\n $font-size: $font-size\n );\n\n // Mark rules as !important if $important is true - this will result in\n // these variables becoming strings, so this needs to happen *after* they\n // are used in calculations\n $font-size: $font-size if($important, !important, null);\n $font-size-rem: $font-size-rem if($important, !important, null);\n $calculated-line-height: $calculated-line-height if($important, !important, null);\n\n @if not $breakpoint {\n font-size: $font-size-rem;\n line-height: $calculated-line-height;\n } @else if $breakpoint == \"print\" {\n @include govuk-media-query($media-type: print) {\n font-size: $font-size;\n line-height: $calculated-line-height;\n }\n } @else {\n @include govuk-media-query($from: $breakpoint) {\n font-size: $font-size-rem;\n line-height: $calculated-line-height;\n }\n }\n }\n}\n\n/// Font helper\n///\n/// @param {Number | Boolean | String} $size Point from the type scale (the\n/// size as it would appear on tablet and above). Use `false` to avoid setting\n/// a size.\n/// @param {String} $weight [regular] - Weight: `bold` or `regular`\n/// @param {Boolean} $tabular [false] - Whether to use tabular numbers or not\n/// @param {Number} $line-height [false] - Line-height, if overriding the\n/// default\n///\n/// @throw if `$size` is not a valid point from the type scale (or false)\n///\n/// @access public\n\n@mixin govuk-font($size, $weight: regular, $tabular: false, $line-height: false) {\n @include govuk-typography-common;\n\n @if $tabular {\n @include govuk-font-tabular-numbers;\n }\n\n @if $weight == regular {\n @include govuk-typography-weight-regular;\n } @else if $weight == bold {\n @include govuk-typography-weight-bold;\n }\n\n @if $size {\n @include govuk-font-size($size, $line-height);\n }\n}\n","////\n/// @group settings/typography\n////\n\n// =========================================================\n// Font families\n// =========================================================\n\n/// Font families to use for all typography on screen media\n///\n/// @type List\n/// @access public\n\n$govuk-font-family: \"GDS Transport\", arial, sans-serif !default;\n\n/// Font families to use for print media\n///\n/// We recommend that you use system fonts when printing. This will avoid issues\n/// with some printer drivers and operating systems.\n///\n/// @type List\n/// @access public\n\n$govuk-font-family-print: sans-serif !default;\n\n/// Include the default @font-face declarations\n///\n/// Defaults to true if \"GDS Transport\" appears in the $govuk-font-family\n/// setting.\n///\n/// @type Boolean\n/// @access public\n\n$govuk-include-default-font-face: if(index($govuk-font-family, \"GDS Transport\"), true, false) !default;\n\n// =========================================================\n// Font weights\n// =========================================================\n\n/// Font weight for regular typography\n///\n/// @type Number\n/// @access public\n$govuk-font-weight-regular: 400 !default;\n\n/// Font weight for bold typography\n///\n/// @type Number\n/// @access public\n$govuk-font-weight-bold: 700 !default;\n","////\n/// @group helpers/links\n////\n\n/// Common link styles\n///\n/// Provides the typography and focus state, regardless of link style.\n///\n/// @access public\n\n@mixin govuk-link-common {\n @include govuk-typography-common;\n @include govuk-link-decoration;\n\n &:hover {\n @include govuk-link-hover-decoration;\n }\n\n &:focus {\n @include govuk-focused-text;\n }\n}\n\n/// Link decoration\n///\n/// Provides the text decoration for links, including thickness and underline\n/// offset. Use this mixin only if you cannot use the `govuk-link-common` mixin.\n///\n/// @access public\n@mixin govuk-link-decoration {\n text-decoration: underline;\n\n @if $govuk-link-underline-thickness {\n text-decoration-thickness: $govuk-link-underline-thickness;\n }\n\n @if $govuk-link-underline-offset {\n text-underline-offset: $govuk-link-underline-offset;\n }\n}\n\n/// Link hover decoration\n///\n/// Provides the text decoration for links in their hover state, for you to use\n/// within a `:hover` pseudo-selector. Use this mixin only if you cannot use the\n/// `govuk-link-common` mixin.\n///\n/// @access public\n\n@mixin govuk-link-hover-decoration {\n @if $govuk-link-hover-underline-thickness {\n text-decoration-thickness: $govuk-link-hover-underline-thickness;\n // Disable ink skipping on underlines on hover. Browsers haven't\n // standardised on this part of the spec yet, so set both properties\n text-decoration-skip-ink: none; // Chromium, Firefox\n text-decoration-skip: none; // Safari\n }\n}\n\n/// Default link styles\n///\n/// Makes links use the default unvisited, visited, hover and active colours.\n///\n/// If you use this mixin in a component, you must also include the\n/// `govuk-link-common` mixin to get the correct focus and hover states.\n///\n/// @example scss\n/// .govuk-component__link {\n/// @include govuk-link-common;\n/// @include govuk-link-style-default;\n/// }\n///\n/// @access public\n\n@mixin govuk-link-style-default {\n &:link {\n color: $govuk-link-colour;\n }\n\n &:visited {\n color: $govuk-link-visited-colour;\n }\n\n &:hover {\n color: $govuk-link-hover-colour;\n }\n\n &:active {\n color: $govuk-link-active-colour;\n }\n\n // When focussed, the text colour needs to be darker to ensure that colour\n // contrast is still acceptable\n &:focus {\n color: $govuk-focus-text-colour;\n }\n}\n\n/// Error link styles\n///\n/// Makes links use the error colour. The link will darken if it's active or a\n/// user hovers their cursor over it.\n///\n/// If you use this mixin in a component, you must also include the\n/// `govuk-link-common` mixin to get the correct focus and hover states.\n///\n/// @example scss\n/// .govuk-component__link {\n/// @include govuk-link-common;\n/// @include govuk-link-style-error;\n/// }\n///\n/// @access public\n\n@mixin govuk-link-style-error {\n &:link,\n &:visited {\n color: $govuk-error-colour;\n }\n\n &:hover {\n color: scale-color($govuk-error-colour, $lightness: -30%);\n }\n\n &:active {\n color: $govuk-error-colour;\n }\n\n // When focussed, the text colour needs to be darker to ensure that colour\n // contrast is still acceptable\n &:focus {\n color: $govuk-focus-text-colour;\n }\n}\n\n/// Success link styles\n///\n/// Makes links use the success colour. The link will darken if it's active or a\n/// user hovers their cursor over it.\n///\n/// If you use this mixin in a component, you must also include the\n/// `govuk-link-common` mixin to get the correct focus and hover states.\n///\n/// @example scss\n/// .govuk-component__link {\n/// @include govuk-link-common;\n/// @include govuk-link-style-success;\n/// }\n///\n/// @access public\n\n@mixin govuk-link-style-success {\n &:link,\n &:visited {\n color: $govuk-success-colour;\n }\n\n &:hover {\n color: scale-color($govuk-success-colour, $lightness: -30%);\n }\n\n &:active {\n color: $govuk-success-colour;\n }\n\n // When focussed, the text colour needs to be darker to ensure that colour\n // contrast is still acceptable\n &:focus {\n color: $govuk-focus-text-colour;\n }\n}\n\n/// Muted link styles\n///\n/// Makes links use the secondary text colour. The link will darken if it's\n/// active or a user hovers their cursor over it.\n///\n/// If you use this mixin in a component, you must also include the\n/// `govuk-link-common` mixin to get the correct focus and hover states.\n///\n/// @example scss\n/// .govuk-component__link {\n/// @include govuk-link-common;\n/// @include govuk-link-style-muted;\n/// }\n///\n/// @access public\n\n@mixin govuk-link-style-muted {\n &:link,\n &:visited {\n color: $govuk-secondary-text-colour;\n }\n\n &:hover,\n &:active {\n color: $govuk-text-colour;\n }\n\n // When focussed, the text colour needs to be darker to ensure that colour\n // contrast is still acceptable\n &:focus {\n color: $govuk-focus-text-colour;\n }\n}\n\n/// Text link styles\n///\n/// Makes links use the primary text colour, in all states. Use this mixin for\n/// navigation components, such as breadcrumbs or the back link.\n///\n/// If you use this mixin in a component, you must also include the\n/// `govuk-link-common` mixin to get the correct focus and hover states.\n///\n/// @example scss\n/// .govuk-component__link {\n/// @include govuk-link-common;\n/// @include govuk-link-style-text;\n/// }\n///\n/// @access public\n\n@mixin govuk-link-style-text {\n &:link,\n &:visited {\n @include govuk-text-colour;\n }\n\n // Force a colour change on hover to work around a bug in Safari\n // https://webkit.org/b/224483\n &:hover {\n @if type-of($govuk-text-colour) == color {\n color: rgba($govuk-text-colour, 0.99);\n }\n }\n\n &:active,\n &:focus {\n @include govuk-text-colour;\n }\n}\n\n/// Inverse link styles\n///\n/// Makes links white, in all states. Use this mixin if you're displaying links\n/// against a dark background.\n///\n/// If you use this mixin in a component, you must also include the\n/// `govuk-link-common` mixin to get the correct focus and hover states.\n///\n/// @example scss\n/// .govuk-component__link {\n/// @include govuk-link-common;\n/// @include govuk-link-style-inverse;\n/// }\n///\n/// @access public\n\n@mixin govuk-link-style-inverse {\n &:link,\n &:visited {\n color: govuk-colour(\"white\");\n }\n\n // Force a colour change on hover to work around a bug in Safari\n // https://webkit.org/b/224483\n &:hover,\n &:active {\n color: rgba(govuk-colour(\"white\"), 0.99);\n }\n\n &:focus {\n color: $govuk-focus-text-colour;\n }\n}\n\n/// Default link styles, without a visited state\n///\n/// Makes links use the default unvisited, hover and active colours, with no\n/// distinct visited state.\n///\n/// Use this mixin when it's not helpful to distinguish between visited and\n/// non-visited links. For example, when you link to pages with\n/// frequently-changing content, such as the dashboard for an admin interface.\n///\n/// If you use this mixin in a component, you must also include the\n/// `govuk-link-common` mixin to get the correct focus and hover states.\n///\n/// @example scss\n/// .govuk-component__link {\n/// @include govuk-link-common;\n/// @include govuk-link-style-no-visited-state;\n/// }\n///\n/// @access public\n\n@mixin govuk-link-style-no-visited-state {\n &:link {\n color: $govuk-link-colour;\n }\n\n &:visited {\n color: $govuk-link-colour;\n }\n\n &:hover {\n color: $govuk-link-hover-colour;\n }\n\n &:active {\n color: $govuk-link-active-colour;\n }\n\n // When focussed, the text colour needs to be darker to ensure that colour\n // contrast is still acceptable\n &:focus {\n color: $govuk-focus-text-colour;\n }\n}\n\n/// Remove underline from links\n///\n/// Remove underlines from links unless the link is active or a user hovers\n/// their cursor over it.\n///\n/// @example scss\n/// .govuk-component__link {\n/// @include govuk-link-common;\n/// @include govuk-link-style-default;\n/// @include govuk-link-style-no-underline;\n/// }\n///\n/// @access public\n\n@mixin govuk-link-style-no-underline {\n &:not(:hover):not(:active) {\n text-decoration: none;\n }\n}\n\n/// Include link destination when printing the page\n///\n/// If the user prints the page, add the destination URL after the link text, if\n/// the URL starts with `/`, `http://` or `https://`.\n///\n/// @access public\n\n@mixin govuk-link-print-friendly {\n @include govuk-media-query($media-type: print) {\n &[href^=\"/\"],\n &[href^=\"http://\"],\n &[href^=\"https://\"]\n {\n &::after {\n content: \" (\" attr(href) \")\";\n font-size: 90%;\n\n // Because the URLs may be very long, ensure that they may be broken\n // at arbitrary points if there are no otherwise acceptable break\n // points in the line\n word-wrap: break-word;\n }\n }\n }\n}\n\n/// Image link styles\n///\n/// Prepares and provides the focus state for links that only contain images\n/// with no accompanying text.\n///\n/// @access public\n\n@mixin govuk-link-image {\n // Needed to draw the focus around the entire image\n display: inline-block;\n\n // Remove extra space at the bottom of the image that's added by line-height\n line-height: 0;\n\n // Don't render an underline\n text-decoration: none;\n\n &:focus {\n @include govuk-focused-box;\n }\n}\n","////\n/// @group settings/links\n////\n\n/// Thickness of link underlines\n///\n/// The default will be either:\n///\n/// - 1px\n/// - 0.0625rem, if it's thicker than 1px because the user has changed the text\n/// size in their browser\n///\n/// Set this variable to `false` to avoid setting a thickness.\n///\n/// @type Number\n/// @access public\n\n$govuk-link-underline-thickness: unquote(\"max(1px, .0625rem)\") !default;\n\n/// Offset of link underlines from text baseline\n///\n/// The default is 3px expressed as ems, as calculated against the default body\n/// font size (on desktop) of 19px.\n/// 3 ÷ 19 = 0.1578\n///\n/// Set this variable to `false` to avoid setting an offset.\n///\n/// @type Number\n/// @access public\n\n$govuk-link-underline-offset: 0.1578em !default;\n\n/// Thickness of link underlines in hover state\n///\n/// The default for each link will be the thickest of the following:\n///\n/// - 3px\n/// - 0.1875rem, if it's thicker than 3px because the user has changed the text\n/// size in their browser\n/// - 0.12em (relative to the link's text size)\n///\n/// Set this variable to `false` to avoid setting a thickness.\n///\n/// @type Number\n/// @access public\n\n$govuk-link-hover-underline-thickness: unquote(\"max(3px, .1875rem, .12em)\") !default;\n","////\n/// @group helpers\n////\n\n@import \"../tools/exports\";\n\n/// Font Face - GDS Transport\n///\n/// Outputs the font-face declaration for GDS Transport at the root of the CSS document\n/// the first time it is called.\n///\n/// @access private\n\n@mixin _govuk-font-face-gds-transport {\n @include govuk-exports(\"govuk/helpers/font-faces\") {\n @at-root {\n /*! Copyright (c) 2011 by Margaret Calvert & Henrik Kubel. All rights reserved. The font has been customised for exclusive use on gov.uk. This cut is not commercially available. */ /* stylelint-disable-line scss/comment-no-loud */\n @font-face {\n font-family: \"GDS Transport\";\n font-style: normal;\n font-weight: normal;\n src:\n govuk-font-url(\"light-94a07e06a1-v2.woff2\") format(\"woff2\"),\n govuk-font-url(\"light-f591b13f7d-v2.woff\") format(\"woff\");\n font-display: fallback;\n }\n\n @font-face {\n font-family: \"GDS Transport\";\n font-style: normal;\n font-weight: bold;\n src:\n govuk-font-url(\"bold-b542beb274-v2.woff2\") format(\"woff2\"),\n govuk-font-url(\"bold-affa96571d-v2.woff\") format(\"woff\");\n font-display: fallback;\n }\n }\n }\n}\n","// mq() v4.0.2\n// sass-mq/sass-mq\n\n@charset \"UTF-8\"; // Fixes an issue where Ruby locale is not set properly\n // See https://github.com/sass-mq/sass-mq/pull/10\n\n/// Base font size on the `` element\n/// @type Number (unit)\n$mq-base-font-size: 16px !default;\n\n/// Responsive mode\n///\n/// Set to `false` to enable support for browsers that do not support @media queries,\n/// (IE <= 8, Firefox <= 3, Opera <= 9)\n///\n/// You could create a stylesheet served exclusively to older browsers,\n/// where @media queries are rasterized\n///\n/// @example scss\n/// // old-ie.scss\n/// $mq-responsive: false;\n/// @import 'main'; // @media queries in this file will be rasterized up to $mq-static-breakpoint\n/// // larger breakpoints will be ignored\n///\n/// @type Boolean\n/// @link https://github.com/sass-mq/sass-mq#responsive-mode-off Disabled responsive mode documentation\n$mq-responsive: true !default;\n\n/// Breakpoint list\n///\n/// Name your breakpoints in a way that creates a ubiquitous language\n/// across team members. It will improve communication between\n/// stakeholders, designers, developers, and testers.\n///\n/// @type Map\n/// @link https://github.com/sass-mq/sass-mq#seeing-the-currently-active-breakpoint Full documentation and examples\n$mq-breakpoints: (\n mobile: 320px,\n tablet: 740px,\n desktop: 980px,\n wide: 1300px\n) !default;\n\n/// Static breakpoint (for fixed-width layouts)\n///\n/// Define the breakpoint from $mq-breakpoints that should\n/// be used as the target width for the fixed-width layout\n/// (i.e. when $mq-responsive is set to 'false') in a old-ie.scss\n///\n/// @example scss\n/// // tablet-only.scss\n/// //\n/// // Ignore all styles above tablet breakpoint,\n/// // and fix the styles (e.g. layout) at tablet width\n/// $mq-responsive: false;\n/// $mq-static-breakpoint: tablet;\n/// @import 'main'; // @media queries in this file will be rasterized up to tablet\n/// // larger breakpoints will be ignored\n///\n/// @type String\n/// @link https://github.com/sass-mq/sass-mq#adding-custom-breakpoints Full documentation and examples\n$mq-static-breakpoint: desktop !default;\n\n/// Show breakpoints in the top right corner\n///\n/// If you want to display the currently active breakpoint in the top\n/// right corner of your site during development, add the breakpoints\n/// to this list, ordered by width, e.g. (mobile, tablet, desktop).\n///\n/// @type map\n$mq-show-breakpoints: () !default;\n\n/// Customize the media type (e.g. `@media screen` or `@media print`)\n/// By default sass-mq uses an \"all\" media type (`@media all and …`)\n///\n/// @type String\n/// @link https://github.com/sass-mq/sass-mq#changing-media-type Full documentation and examples\n$mq-media-type: all !default;\n\n/// Convert pixels to ems\n///\n/// @param {Number} $px - value to convert\n/// @param {Number} $base-font-size ($mq-base-font-size) - `` font size\n///\n/// @example scss\n/// $font-size-in-ems: mq-px2em(16px);\n/// p { font-size: mq-px2em(16px); }\n///\n/// @requires $mq-base-font-size\n/// @returns {Number}\n@function mq-px2em($px, $base-font-size: $mq-base-font-size) {\n @if unitless($px) {\n @warn \"Assuming #{$px} to be in pixels, attempting to convert it into pixels.\";\n @return mq-px2em($px * 1px, $base-font-size);\n } @else if unit($px) == em {\n @return $px;\n }\n @return ($px / $base-font-size) * 1em;\n}\n\n/// Get a breakpoint's width\n///\n/// @param {String} $name - Name of the breakpoint. One of $mq-breakpoints\n///\n/// @example scss\n/// $tablet-width: mq-get-breakpoint-width(tablet);\n/// @media (min-width: mq-get-breakpoint-width(desktop)) {}\n///\n/// @requires {Variable} $mq-breakpoints\n///\n/// @returns {Number} Value in pixels\n@function mq-get-breakpoint-width($name, $breakpoints: $mq-breakpoints) {\n @if map-has-key($breakpoints, $name) {\n @return map-get($breakpoints, $name);\n } @else {\n @warn \"Breakpoint #{$name} wasn't found in $breakpoints.\";\n }\n}\n\n/// Media Query mixin\n///\n/// @param {String | Boolean} $from (false) - One of $mq-breakpoints\n/// @param {String | Boolean} $until (false) - One of $mq-breakpoints\n/// @param {String | Boolean} $and (false) - Additional media query parameters\n/// @param {String} $media-type ($mq-media-type) - Media type: screen, print…\n///\n/// @ignore Undocumented API, for advanced use only:\n/// @ignore @param {Map} $breakpoints ($mq-breakpoints)\n/// @ignore @param {String} $static-breakpoint ($mq-static-breakpoint)\n///\n/// @content styling rules, wrapped into a @media query when $responsive is true\n///\n/// @requires {Variable} $mq-media-type\n/// @requires {Variable} $mq-breakpoints\n/// @requires {Variable} $mq-static-breakpoint\n/// @requires {function} mq-px2em\n/// @requires {function} mq-get-breakpoint-width\n///\n/// @link https://github.com/sass-mq/sass-mq#responsive-mode-on-default Full documentation and examples\n///\n/// @example scss\n/// .element {\n/// @include mq($from: mobile) {\n/// color: red;\n/// }\n/// @include mq($until: tablet) {\n/// color: blue;\n/// }\n/// @include mq(mobile, tablet) {\n/// color: green;\n/// }\n/// @include mq($from: tablet, $and: '(orientation: landscape)') {\n/// color: teal;\n/// }\n/// @include mq(950px) {\n/// color: hotpink;\n/// }\n/// @include mq(tablet, $media-type: screen) {\n/// color: hotpink;\n/// }\n/// // Advanced use:\n/// $my-breakpoints: (L: 900px, XL: 1200px);\n/// @include mq(L, $breakpoints: $my-breakpoints, $static-breakpoint: L) {\n/// color: hotpink;\n/// }\n/// }\n@mixin mq(\n $from: false,\n $until: false,\n $and: false,\n $media-type: $mq-media-type,\n $breakpoints: $mq-breakpoints,\n $responsive: $mq-responsive,\n $static-breakpoint: $mq-static-breakpoint\n) {\n $min-width: 0;\n $max-width: 0;\n $media-query: '';\n\n // From: this breakpoint (inclusive)\n @if $from {\n @if type-of($from) == number {\n $min-width: mq-px2em($from);\n } @else {\n $min-width: mq-px2em(mq-get-breakpoint-width($from, $breakpoints));\n }\n }\n\n // Until: that breakpoint (exclusive)\n @if $until {\n @if type-of($until) == number {\n $max-width: mq-px2em($until);\n } @else {\n $max-width: mq-px2em(mq-get-breakpoint-width($until, $breakpoints)) - .01em;\n }\n }\n\n // Responsive support is disabled, rasterize the output outside @media blocks\n // The browser will rely on the cascade itself.\n @if $responsive == false {\n $static-breakpoint-width: mq-get-breakpoint-width($static-breakpoint, $breakpoints);\n $target-width: mq-px2em($static-breakpoint-width);\n\n // Output only rules that start at or span our target width\n @if (\n $and == false\n and $min-width <= $target-width\n and (\n $until == false or $max-width >= $target-width\n )\n and $media-type != 'print'\n ) {\n @content;\n }\n }\n\n // Responsive support is enabled, output rules inside @media queries\n @else {\n @if $min-width != 0 { $media-query: '#{$media-query} and (min-width: #{$min-width})'; }\n @if $max-width != 0 { $media-query: '#{$media-query} and (max-width: #{$max-width})'; }\n @if $and { $media-query: '#{$media-query} and #{$and}'; }\n\n // Remove unnecessary media query prefix 'all and '\n @if ($media-type == 'all' and $media-query != '') {\n $media-type: '';\n $media-query: str-slice(unquote($media-query), 6);\n }\n\n @media #{$media-type + $media-query} {\n @content;\n }\n }\n}\n\n/// Quick sort\n///\n/// @author Sam Richards\n/// @access private\n/// @param {List} $list - List to sort\n/// @returns {List} Sorted List\n@function _mq-quick-sort($list) {\n $less: ();\n $equal: ();\n $large: ();\n\n @if length($list) > 1 {\n $seed: nth($list, ceil(length($list) / 2));\n\n @each $item in $list {\n @if ($item == $seed) {\n $equal: append($equal, $item);\n } @else if ($item < $seed) {\n $less: append($less, $item);\n } @else if ($item > $seed) {\n $large: append($large, $item);\n }\n }\n\n @return join(join(_mq-quick-sort($less), $equal), _mq-quick-sort($large));\n }\n\n @return $list;\n}\n\n/// Sort a map by values (works with numbers only)\n///\n/// @access private\n/// @param {Map} $map - Map to sort\n/// @returns {Map} Map sorted by value\n@function _mq-map-sort-by-value($map) {\n $map-sorted: ();\n $map-keys: map-keys($map);\n $map-values: map-values($map);\n $map-values-sorted: _mq-quick-sort($map-values);\n\n // Reorder key/value pairs based on key values\n @each $value in $map-values-sorted {\n $index: index($map-values, $value);\n $key: nth($map-keys, $index);\n $map-sorted: map-merge($map-sorted, ($key: $value));\n\n // Unset the value in $map-values to prevent the loop\n // from finding the same index twice\n $map-values: set-nth($map-values, $index, 0);\n }\n\n @return $map-sorted;\n}\n\n/// Add a breakpoint\n///\n/// @param {String} $name - Name of the breakpoint\n/// @param {Number} $width - Width of the breakpoint\n///\n/// @requires {Variable} $mq-breakpoints\n///\n/// @example scss\n/// @include mq-add-breakpoint(tvscreen, 1920px);\n/// @include mq(tvscreen) {}\n@mixin mq-add-breakpoint($name, $width) {\n $new-breakpoint: ($name: $width);\n $mq-breakpoints: map-merge($mq-breakpoints, $new-breakpoint) !global;\n $mq-breakpoints: _mq-map-sort-by-value($mq-breakpoints) !global;\n}\n\n/// Show the active breakpoint in the top right corner of the viewport\n/// @link https://github.com/sass-mq/sass-mq#seeing-the-currently-active-breakpoint\n///\n/// @param {List} $show-breakpoints ($mq-show-breakpoints) - List of breakpoints to show in the top right corner\n/// @param {Map} $breakpoints ($mq-breakpoints) - Breakpoint names and sizes\n///\n/// @requires {Variable} $mq-breakpoints\n/// @requires {Variable} $mq-show-breakpoints\n///\n/// @example scss\n/// // Show breakpoints using global settings\n/// @include mq-show-breakpoints;\n///\n/// // Show breakpoints using custom settings\n/// @include mq-show-breakpoints((L, XL), (S: 300px, L: 800px, XL: 1200px));\n@mixin mq-show-breakpoints($show-breakpoints: $mq-show-breakpoints, $breakpoints: $mq-breakpoints) {\n body::before {\n background-color: #FCF8E3;\n border-bottom: 1px solid #FBEED5;\n border-left: 1px solid #FBEED5;\n color: #C09853;\n font: small-caption;\n padding: 3px 6px;\n pointer-events: none;\n position: fixed;\n right: 0;\n top: 0;\n z-index: 100;\n\n // Loop through the breakpoints that should be shown\n @each $show-breakpoint in $show-breakpoints {\n $width: mq-get-breakpoint-width($show-breakpoint, $breakpoints);\n @include mq($show-breakpoint, $breakpoints: $breakpoints) {\n content: \"#{$show-breakpoint} ≥ #{$width} (#{mq-px2em($width)})\";\n }\n }\n }\n}\n\n@if length($mq-show-breakpoints) > 0 {\n @include mq-show-breakpoints;\n}\n","////\n/// @group helpers/accessibility\n////\n\n/// Focused text\n///\n/// Provides an outline to clearly indicate when the target element is focused.\n/// Used for interactive text-based elements.\n///\n/// @access public\n\n@mixin govuk-focused-text {\n // When colours are overridden, for example when users have a dark mode,\n // backgrounds and box-shadows disappear, so we need to ensure there's a\n // transparent outline which will be set to a visible colour.\n\n outline: $govuk-focus-width solid transparent;\n color: $govuk-focus-text-colour;\n background-color: $govuk-focus-colour;\n box-shadow:\n 0 -2px $govuk-focus-colour,\n 0 4px $govuk-focus-text-colour;\n // When link is focussed, hide the default underline since the\n // box shadow adds the \"underline\"\n text-decoration: none;\n\n // When a focused box is broken by e.g. a line break, ensure that the\n // box-shadow is applied to each fragment independently.\n box-decoration-break: clone;\n}\n\n/// Focused box\n///\n/// Provides an outline to clearly indicate when the target element is focused.\n/// Unlike govuk-focused-text, which only draws an underline below the element,\n/// govuk-focused-box draws an outline around all sides of the element.\n/// Best used for non-text content contained within links.\n///\n/// @access public\n\n@mixin govuk-focused-box {\n outline: $govuk-focus-width solid transparent;\n box-shadow:\n 0 0 0 4px $govuk-focus-colour,\n 0 0 0 8px $govuk-focus-text-colour;\n}\n","////\n/// @group settings/colours\n////\n\n@import \"../helpers/colour\";\n\n// =========================================================\n// Generic\n// =========================================================\n\n/// Brand colour\n///\n/// @type Colour\n/// @access public\n\n$govuk-brand-colour: govuk-colour(\"blue\") !default;\n\n/// Text colour\n///\n/// @type Colour\n/// @access public\n\n$govuk-text-colour: govuk-colour(\"black\") !default;\n\n/// Canvas background colour\n///\n/// Used by the footer component and template to give the illusion of a long\n/// footer.\n///\n/// @type Colour\n/// @access public\n\n$govuk-canvas-background-colour: govuk-colour(\"light-grey\") !default;\n\n/// Body background colour\n///\n/// @type Colour\n/// @access public\n\n$govuk-body-background-colour: govuk-colour(\"white\") !default;\n\n/// Text colour for print media\n///\n/// Use 'true black' to avoid printers using colour ink to print body text\n///\n/// @type Colour\n/// @access public\n\n$govuk-print-text-colour: #000000 !default;\n\n/// Secondary text colour\n///\n/// Used in for example 'muted' text and help text.\n///\n/// @type Colour\n/// @access public\n\n$govuk-secondary-text-colour: govuk-colour(\"dark-grey\") !default;\n\n/// Focus colour\n///\n/// Used for outline (and background, where appropriate) when interactive\n/// elements (links, form controls) have keyboard focus.\n///\n/// @type Colour\n/// @access public\n\n$govuk-focus-colour: govuk-colour(\"yellow\") !default;\n\n/// Focused text colour\n///\n/// Ensure that the contrast between the text and background colour passes\n/// WCAG Level AA contrast requirements.\n///\n/// @type Colour\n/// @access public\n\n$govuk-focus-text-colour: govuk-colour(\"black\") !default;\n\n/// Error colour\n///\n/// Used to highlight error messages and form controls in an error state\n///\n/// @type Colour\n/// @access public\n\n$govuk-error-colour: govuk-colour(\"red\") !default;\n\n/// Success colour\n///\n/// Used to highlight success messages and banners\n///\n/// @type Colour\n/// @access public\n\n$govuk-success-colour: govuk-colour(\"green\") !default;\n\n/// Border colour\n///\n/// Used in for example borders, separators, rules and keylines.\n///\n/// @type Colour\n/// @access public\n\n$govuk-border-colour: govuk-colour(\"mid-grey\") !default;\n\n/// Input border colour\n///\n/// Used for form inputs and controls\n///\n/// @type Colour\n/// @access public\n\n$govuk-input-border-colour: govuk-colour(\"black\") !default;\n\n/// Input hover colour\n///\n/// Used for hover states on form controls\n///\n/// @type Colour\n/// @access public\n\n$govuk-hover-colour: govuk-colour(\"mid-grey\") !default;\n\n// =============================================================================\n// Links\n// =============================================================================\n\n/// Link colour\n///\n/// @type Colour\n/// @access public\n\n$govuk-link-colour: govuk-colour(\"blue\") !default;\n\n/// Visited link colour\n///\n/// @type Colour\n/// @access public\n\n$govuk-link-visited-colour: govuk-colour(\"purple\") !default;\n\n/// Link hover colour\n///\n/// @type Colour\n/// @access public\n\n$govuk-link-hover-colour: govuk-colour(\"dark-blue\") !default;\n\n/// Active link colour\n///\n/// @type Colour\n/// @access public\n\n$govuk-link-active-colour: govuk-colour(\"black\") !default;\n","@include govuk-exports(\"govuk/core/lists\") {\n %govuk-list {\n @include govuk-font($size: 19);\n @include govuk-text-colour;\n margin-top: 0;\n @include govuk-responsive-margin(4, \"bottom\");\n padding-left: 0;\n list-style-type: none;\n\n // Add a top margin for nested lists\n %govuk-list {\n margin-top: govuk-spacing(2);\n }\n }\n\n %govuk-list > li {\n // Lists without numbers or bullets should always have extra space between\n // list items. Lists with numbers or bullets only have this extra space on\n // tablet and above\n margin-bottom: govuk-spacing(1);\n }\n\n .govuk-list {\n @extend %govuk-list;\n }\n\n %govuk-list--bullet {\n padding-left: govuk-spacing(4);\n list-style-type: disc;\n }\n\n %govuk-list--number {\n padding-left: govuk-spacing(4);\n list-style-type: decimal;\n }\n\n %govuk-list--bullet > li,\n %govuk-list--number > li {\n margin-bottom: 0;\n\n @include govuk-media-query($from: tablet) {\n margin-bottom: govuk-spacing(1);\n }\n }\n\n %govuk-list--spaced > li {\n margin-bottom: govuk-spacing(2);\n\n @include govuk-media-query($from: tablet) {\n margin-bottom: govuk-spacing(3);\n }\n }\n\n .govuk-list--bullet {\n @extend %govuk-list--bullet;\n }\n\n .govuk-list--number {\n @extend %govuk-list--number;\n }\n\n .govuk-list--spaced {\n @extend %govuk-list--spaced;\n }\n}\n","////\n/// @group helpers/spacing\n////\n\n/// Single point spacing\n///\n/// Returns measurement corresponding to the spacing point requested.\n///\n/// @param {Number} $spacing-point - Point on the spacing scale\n/// (set in `settings/_spacing.scss`)\n///\n/// @returns {String} Spacing measurement eg. 10px\n///\n/// @example scss\n/// .element {\n/// padding: govuk-spacing(5);\n/// }\n///\n/// @example scss Using negative spacing\n/// .element {\n/// margin-top: govuk-spacing(-1);\n/// }\n///\n/// @example scss Marking spacing declarations as important\n/// .element {\n/// margin-top: govuk-spacing(1) !important;\n/// }\n///\n/// @access public\n\n@function govuk-spacing($spacing-point) {\n $actual-input-type: type-of($spacing-point);\n @if $actual-input-type != \"number\" {\n @error \"Expected a number (integer), but got a \"\n + \"#{$actual-input-type}.\";\n }\n\n $is-negative: false;\n @if $spacing-point < 0 {\n $is-negative: true;\n $spacing-point: abs($spacing-point);\n }\n\n @if not map-has-key($govuk-spacing-points, $spacing-point) {\n @error \"Unknown spacing variable `#{$spacing-point}`. Make sure you are using a point from the spacing scale in `_settings/spacing.scss`.\";\n }\n\n $value: map-get($govuk-spacing-points, $spacing-point);\n @return if($is-negative, $value * -1, $value);\n}\n\n/// Responsive spacing\n///\n/// Adds responsive spacing (either padding or margin, depending on `$property`)\n/// by fetching a 'spacing map' from the responsive spacing scale, which defines\n/// different spacing values at different breakpoints.\n///\n/// To generate responsive spacing, use 'govuk-responsive-margin' or\n/// 'govuk-responsive-padding' mixins\n///\n/// @param {Number} $responsive-spacing-point - Point on the responsive spacing\n/// scale, corresponds to a map of breakpoints and spacing values\n/// @param {String} $property - Property to add spacing to (e.g. 'margin')\n/// @param {String} $direction [all] - Direction to add spacing to\n/// (`top`, `right`, `bottom`, `left`, `all`)\n/// @param {Boolean} $important [false] - Whether to mark as `!important`\n/// @param {Number} $adjustment [false] - Offset to adjust spacing by\n///\n/// @access private\n\n@mixin _govuk-responsive-spacing(\n $responsive-spacing-point,\n $property,\n $direction: \"all\",\n $important: false,\n $adjustment: false\n) {\n $actual-input-type: type-of($responsive-spacing-point);\n @if $actual-input-type != \"number\" {\n @error \"Expected a number (integer), but got a \" + \"#{$actual-input-type}.\";\n }\n\n @if not map-has-key($govuk-spacing-responsive-scale, $responsive-spacing-point) {\n @error \"Unknown spacing point `#{$responsive-spacing-point}`. Make sure you are using a point from the \"\n + \"responsive spacing scale in `_settings/spacing.scss`.\";\n }\n\n // Make sure that the return value from `_settings/spacing.scss` is a map.\n $scale-map: map-get($govuk-spacing-responsive-scale, $responsive-spacing-point);\n $actual-map-type: type-of($scale-map);\n @if $actual-map-type != \"map\" {\n @error \"Expected a number (integer), but got a \"\n + \"#{$actual-map-type}. Make sure you are using a map to set the responsive spacing in `_settings/spacing.scss`)\";\n }\n\n // Loop through each breakpoint in the map\n @each $breakpoint, $breakpoint-value in $scale-map {\n @if $adjustment {\n $breakpoint-value: $breakpoint-value + $adjustment;\n }\n\n // The 'null' breakpoint is for mobile.\n @if not $breakpoint {\n @if $direction == all {\n #{$property}: $breakpoint-value if($important, !important, null);\n } @else {\n #{$property}-#{$direction}: $breakpoint-value if($important, !important, null);\n }\n } @else {\n @include govuk-media-query($from: $breakpoint) {\n @if $direction == all {\n #{$property}: $breakpoint-value if($important, !important, null);\n } @else {\n #{$property}-#{$direction}: $breakpoint-value if($important, !important, null);\n }\n }\n }\n }\n}\n\n/// Responsive margin\n///\n/// Adds responsive margin by fetching a 'spacing map' from the responsive\n/// spacing scale, which defines different spacing values at different\n/// breakpoints. Wrapper for the `_govuk-responsive-spacing` mixin.\n///\n/// @see {mixin} _govuk-responsive-spacing\n///\n/// @param {Number} $responsive-spacing-point - Point on the responsive spacing\n/// scale, corresponds to a map of breakpoints and spacing values\n/// @param {String} $direction [all] - Direction to add spacing to\n/// (`top`, `right`, `bottom`, `left`, `all`)\n/// @param {Boolean} $important [false] - Whether to mark as `!important`\n/// @param {Number} $adjustment [false] - Offset to adjust spacing by\n///\n/// @example scss\n/// .element {\n/// @include govuk-responsive-margin(6, \"left\", $adjustment: 1px);\n/// }\n///\n/// @access public\n\n@mixin govuk-responsive-margin($responsive-spacing-point, $direction: \"all\", $important: false, $adjustment: false) {\n @include _govuk-responsive-spacing($responsive-spacing-point, \"margin\", $direction, $important, $adjustment);\n}\n\n/// Responsive padding\n///\n/// Adds responsive padding by fetching a 'spacing map' from the responsive\n/// spacing scale, which defines different spacing values at different\n/// breakpoints. Wrapper for the `_govuk-responsive-spacing` mixin.\n///\n/// @see {mixin} _govuk-responsive-spacing\n///\n/// @param {Number} $responsive-spacing-point - Point on the responsive spacing\n/// scale, corresponds to a map of breakpoints and spacing values\n/// @param {String} $direction [all] - Direction to add spacing to\n/// (`top`, `right`, `bottom`, `left`, `all`)\n/// @param {Boolean} $important [false] - Whether to mark as `!important`\n/// @param {Number} $adjustment [false] - Offset to adjust spacing\n///\n/// @example scss\n/// .element {\n/// @include govuk-responsive-padding(6, \"left\", $adjustment: 1px);\n/// }\n///\n/// @access public\n\n@mixin govuk-responsive-padding($responsive-spacing-point, $direction: \"all\", $important: false, $adjustment: false) {\n @include _govuk-responsive-spacing($responsive-spacing-point, \"padding\", $direction, $important, $adjustment);\n}\n","@include govuk-exports(\"govuk/core/typography\") {\n // Headings\n\n %govuk-heading-xl {\n @include govuk-text-colour;\n @include govuk-font($size: 48, $weight: bold);\n\n display: block;\n\n margin-top: 0;\n @include govuk-responsive-margin(8, \"bottom\");\n }\n\n .govuk-heading-xl {\n @extend %govuk-heading-xl;\n }\n\n %govuk-heading-l {\n @include govuk-text-colour;\n @include govuk-font($size: 36, $weight: bold);\n\n display: block;\n\n margin-top: 0;\n @include govuk-responsive-margin(6, \"bottom\");\n }\n\n .govuk-heading-l {\n @extend %govuk-heading-l;\n }\n\n %govuk-heading-m {\n @include govuk-text-colour;\n @include govuk-font($size: 24, $weight: bold);\n\n display: block;\n\n margin-top: 0;\n @include govuk-responsive-margin(4, \"bottom\");\n }\n\n .govuk-heading-m {\n @extend %govuk-heading-m;\n }\n\n %govuk-heading-s {\n @include govuk-text-colour;\n @include govuk-font($size: 19, $weight: bold);\n\n display: block;\n\n margin-top: 0;\n @include govuk-responsive-margin(4, \"bottom\");\n }\n\n .govuk-heading-s {\n @extend %govuk-heading-s;\n }\n\n // Captions to be used inside headings\n\n .govuk-caption-xl {\n @include govuk-font($size: 27);\n\n display: block;\n\n margin-bottom: govuk-spacing(1);\n\n color: $govuk-secondary-text-colour;\n }\n\n .govuk-caption-l {\n @include govuk-font($size: 24);\n\n display: block;\n\n margin-bottom: govuk-spacing(1);\n color: $govuk-secondary-text-colour;\n\n @include govuk-media-query($from: tablet) {\n margin-bottom: 0;\n }\n }\n\n .govuk-caption-m {\n @include govuk-font($size: 19);\n\n display: block;\n\n color: $govuk-secondary-text-colour;\n }\n\n // Body (paragraphs)\n\n %govuk-body-l {\n @include govuk-text-colour;\n @include govuk-font($size: 24);\n\n margin-top: 0;\n @include govuk-responsive-margin(6, \"bottom\");\n }\n\n .govuk-body-l {\n @extend %govuk-body-l;\n }\n\n %govuk-body-m {\n @include govuk-text-colour;\n @include govuk-font($size: 19);\n\n margin-top: 0;\n @include govuk-responsive-margin(4, \"bottom\");\n }\n\n .govuk-body-m {\n @extend %govuk-body-m;\n }\n\n %govuk-body-s {\n @include govuk-text-colour;\n @include govuk-font($size: 16);\n\n margin-top: 0;\n @include govuk-responsive-margin(4, \"bottom\");\n }\n\n .govuk-body-s {\n @extend %govuk-body-s;\n }\n\n // @deprecated\n %govuk-body-xs {\n @include govuk-text-colour;\n @include govuk-font($size: _14);\n\n margin-top: 0;\n @include govuk-responsive-margin(4, \"bottom\");\n }\n\n // @deprecated\n .govuk-body-xs {\n @extend %govuk-body-xs;\n }\n\n // Usage aliases\n\n // Using extend to alias means we also inherit any contextual adjustments that\n // refer to the 'original' class name\n\n .govuk-body-lead {\n @extend %govuk-body-l;\n }\n\n .govuk-body {\n @extend %govuk-body-m;\n }\n\n // Contextual adjustments\n // Add top padding to headings that appear directly after paragraphs.\n\n %govuk-body-l + %govuk-heading-l {\n padding-top: govuk-spacing(1);\n\n @include govuk-media-query($from: tablet) {\n padding-top: govuk-spacing(2);\n }\n }\n\n %govuk-body-m + %govuk-heading-l,\n %govuk-body-s + %govuk-heading-l,\n %govuk-list + %govuk-heading-l {\n @include govuk-responsive-padding(4, \"top\");\n }\n\n %govuk-body-m + %govuk-heading-m,\n %govuk-body-s + %govuk-heading-m,\n %govuk-list + %govuk-heading-m,\n %govuk-body-m + %govuk-heading-s,\n %govuk-body-s + %govuk-heading-s,\n %govuk-list + %govuk-heading-s {\n padding-top: govuk-spacing(1);\n\n @include govuk-media-query($from: tablet) {\n padding-top: govuk-spacing(2);\n }\n }\n}\n","@include govuk-exports(\"govuk/core/section-break\") {\n %govuk-section-break {\n margin: 0;\n border: 0;\n }\n\n .govuk-section-break {\n @extend %govuk-section-break;\n }\n\n // Sizes\n\n %govuk-section-break--xl {\n @include govuk-responsive-margin(8, \"top\");\n @include govuk-responsive-margin(8, \"bottom\");\n }\n\n .govuk-section-break--xl {\n @extend %govuk-section-break--xl;\n }\n\n %govuk-section-break--l {\n @include govuk-responsive-margin(6, \"top\");\n @include govuk-responsive-margin(6, \"bottom\");\n }\n\n .govuk-section-break--l {\n @extend %govuk-section-break--l;\n }\n\n %govuk-section-break--m {\n @include govuk-responsive-margin(4, \"top\");\n @include govuk-responsive-margin(4, \"bottom\");\n }\n\n .govuk-section-break--m {\n @extend %govuk-section-break--m;\n }\n\n // Visible variant\n\n %govuk-section-break--visible {\n border-bottom: 1px solid $govuk-border-colour;\n }\n\n .govuk-section-break--visible {\n @extend %govuk-section-break--visible;\n }\n}\n","@import \"../base\";\n\n@include govuk-exports(\"govuk/objects/button-group\") {\n // Button groups can be used to group buttons and links together as a group.\n //\n // Within a button group:\n //\n // - links are styled to line up visually with the buttons, including being\n // centre-aligned on mobile\n // - spacing between the buttons and links is handled automatically, including\n // when they wrap across multiple lines\n .govuk-button-group {\n $horizontal-gap: govuk-spacing(3);\n $vertical-gap: govuk-spacing(3);\n\n // These need to be kept in sync with the button component's styles\n $button-padding: govuk-spacing(2);\n $button-shadow-size: $govuk-border-width-form-element;\n\n $link-spacing: govuk-spacing(1);\n\n @include govuk-responsive-margin(6, \"bottom\", $adjustment: $vertical-gap * -1);\n\n // Flexbox is used to center-align links on mobile, align everything along\n // the baseline on tablet and above, and to removes extra whitespace that\n // we'd get between the buttons and links because they're inline-blocks.\n //\n // Ideally we'd use `gap` with flexbox rather than having to do it all with\n // margins, but unfortunately the support isn't there (yet) and @supports\n // doesn't play nicely with it\n // (https://github.com/w3c/csswg-drafts/issues/3559)\n display: flex;\n flex-direction: column;\n align-items: center;\n\n // Give links within the button group the same font-size and line-height\n // as buttons.\n //\n // Because we want the focus state to be tight around the link text, we use\n // margins where the buttons would use padding.\n .govuk-link {\n @include govuk-font($size: 19, $line-height: 19px);\n display: inline-block;\n // Prevent links overflowing their container in IE10/11 because of bug\n // with align-items: center\n max-width: 100%;\n margin-top: $link-spacing;\n margin-bottom: $link-spacing + $vertical-gap;\n text-align: center;\n }\n\n // Reduce the bottom margin to the size of the vertical gap (accommodating\n // the button shadow) – the 'lost' margin is moved to the button-group.\n .govuk-button {\n margin-bottom: $vertical-gap + $button-shadow-size;\n }\n\n // On tablet and above, we also introduce a 'column gap' between the\n // buttons and links in each row and left align links\n @include govuk-media-query($from: tablet) {\n // Cancel out the column gap for the last item in each row\n margin-right: ($horizontal-gap * -1);\n\n flex-direction: row;\n flex-wrap: wrap;\n align-items: baseline;\n\n .govuk-button,\n .govuk-link {\n margin-right: $horizontal-gap;\n }\n\n .govuk-link {\n text-align: left;\n }\n }\n }\n}\n","@import \"../base\";\n\n@include govuk-exports(\"govuk/objects/form-group\") {\n .govuk-form-group {\n @include govuk-clearfix;\n @include govuk-responsive-margin(6, \"bottom\");\n\n .govuk-form-group:last-of-type {\n margin-bottom: 0; // Remove margin from last item in nested groups\n }\n }\n\n .govuk-form-group--error {\n padding-left: govuk-spacing(3);\n border-left: $govuk-border-width-form-group-error solid $govuk-error-colour;\n\n .govuk-form-group {\n // Reset error styles in nested form groups that might have error class\n padding: 0;\n border: 0;\n }\n }\n}\n","////\n/// @group helpers/layout\n////\n\n/// Clear floated content within a container using a pseudo element\n///\n/// @access public\n\n@mixin govuk-clearfix {\n &::after {\n content: \"\";\n display: block;\n clear: both;\n }\n}\n","@import \"../base\";\n\n@include govuk-exports(\"govuk/objects/grid\") {\n .govuk-grid-row {\n @include govuk-clearfix;\n margin-right: -($govuk-gutter-half);\n margin-left: -($govuk-gutter-half);\n }\n\n @each $width in map-keys($govuk-grid-widths) {\n .govuk-grid-column-#{$width} {\n @include govuk-grid-column($width);\n }\n }\n\n // These *must* be defined in a separate loop as they have the same\n // specificity as the non-breakpoint specific classes, so need to appear after\n // them in the outputted CSS\n @each $width in map-keys($govuk-grid-widths) {\n .govuk-grid-column-#{$width}-from-desktop {\n @include govuk-grid-column($width, $at: desktop);\n }\n }\n}\n","////\n/// @group helpers/layout\n////\n\n/// Grid width percentage\n///\n/// @param {String} $key - Name of grid width (e.g. two-thirds)\n/// @return {Number} Percentage width\n/// @throw if `$key` is not a valid grid width\n/// @access public\n\n@function govuk-grid-width($key) {\n @if map-has-key($govuk-grid-widths, $key) {\n @return map-get($govuk-grid-widths, $key);\n }\n\n @error \"Unknown grid width `#{$key}`\";\n}\n\n/// Generate grid column styles\n///\n/// Creates a grid column with standard gutter between the columns.\n///\n/// Grid widths are defined in the `$govuk-grid-widths` map.\n///\n/// By default the column width changes from 100% to specified width at the\n/// 'tablet' breakpoint, but other breakpoints can be specified using the `$at`\n/// parameter.\n///\n/// @param {String} $width [full] name of a grid width from $govuk-grid-widths\n/// @param {String} $float [left] left | right\n/// @param {String} $at [tablet] - mobile | tablet | desktop | any custom breakpoint\n///\n/// @example scss - Default\n/// .govuk-grid-column-two-thirds {\n/// @include govuk-grid-column(two-thirds)\n/// }\n///\n/// @example scss - Customising the breakpoint where width percentage is applied\n/// .govuk-grid-column-one-half-from-desktop {\n/// @include govuk-grid-column(one-half, $at: desktop);\n/// }\n///\n/// @example scss - Customising the float direction\n/// .govuk-grid-column-one-half-right {\n/// @include govuk-grid-column(two-thirds, $float: right);\n/// }\n///\n/// @access public\n\n@mixin govuk-grid-column($width: full, $float: left, $at: tablet) {\n box-sizing: border-box;\n @if $at != desktop {\n width: 100%;\n }\n padding: 0 $govuk-gutter-half;\n @include govuk-media-query($from: $at) {\n width: govuk-grid-width($width);\n float: $float;\n }\n}\n","@import \"../base\";\n\n////\n/// @group objects/layout\n////\n\n// Example usage with Breadcrumbs, phase banners, back links:\n//
\n// \n//
\n// \n//
\n//
\n//\n// Example usage without Breadcrumbs, phase banners, back links:\n//
\n//
\n// \n//
\n//
\n\n@include govuk-exports(\"govuk/objects/main-wrapper\") {\n .govuk-main-wrapper {\n // In IE11 the `main` element can be used, but is not recognized –\n // meaning it's not defined in IE's default style sheet,\n // so it uses CSS initial value, which is inline.\n display: block;\n padding-top: govuk-spacing(4);\n padding-bottom: govuk-spacing(4);\n\n @include govuk-media-query($from: tablet) {\n // This spacing is manually adjusted to replicate the margin of\n // govuk-heading-xl (50px) minus the spacing of back link and\n // breadcrumbs (10px)\n padding-top: govuk-spacing(7);\n padding-bottom: govuk-spacing(7);\n }\n }\n\n // Using the `.govuk-main-wrapper--auto-spacing` modifier should apply the\n // correct spacing depending on whether there are any elements\n // (such the back link, breadcrumbs or phase banner components) before the\n // `.govuk-main-wrapper` in the `govuk-width-container`.\n //\n // If you need to control the spacing manually, use the\n // `govuk-main-wrapper--l` modifier instead.\n .govuk-main-wrapper--auto-spacing:first-child,\n .govuk-main-wrapper--l {\n @include govuk-responsive-padding(8, \"top\");\n }\n}\n","@import \"../base\";\n\n@include govuk-exports(\"govuk/objects/template\") {\n // Applied to the element\n .govuk-template {\n // Set the overall page background colour to the same colour as used by the\n // footer to give the illusion of a long footer.\n background-color: $govuk-canvas-background-colour;\n\n // Prevent automatic text sizing, as we already cater for small devices and\n // would like the browser to stay on 100% text zoom by default.\n text-size-adjust: 100%;\n\n // Add scroll padding to the top of govuk-template but remove it if the\n // exit this page component is present.\n //\n // This is a solution to exit this page potentially failing WCAG SC 2.4.12:\n // Focus Not Obscured (https://www.w3.org/WAI/WCAG22/Understanding/focus-not-obscured-minimum.html)\n // due to it's sticky positioning.\n //\n // This will apply scroll-padding-top in any browsers that don't support :has\n // (https://caniuse.com/css-has). This is part of the reason we do this in\n // a \"wrong way round\" way as we hypothesise that the risks of having\n // scroll-padding unnecessarily is better than risking not having scroll-padding\n // and needing it to account for exit this page.\n @supports (position: sticky) {\n scroll-padding-top: govuk-spacing(9);\n\n &:not(:has(.govuk-exit-this-page)) {\n scroll-padding-top: 0;\n }\n }\n\n // Force the scrollbar to always display in IE, to prevent horizontal page\n // jumps as content height changes (e.g. autocomplete results open).\n @include govuk-media-query($media-type: screen) {\n overflow-y: scroll;\n }\n }\n\n // Applied to the element\n .govuk-template__body {\n // The default margins set by user-agents are not required since we have our\n // own containers.\n margin: 0;\n // Set the overall body of the page back to the typical background colour.\n background-color: $govuk-body-background-colour;\n }\n}\n","@import \"../base\";\n\n////\n/// @group objects/layout\n////\n\n/// Width container mixin\n///\n/// Used to create page width and custom width container classes.\n///\n/// @param {String} $width [$govuk-page-width] - Width in pixels\n///\n/// @example scss - Creating a 1200px wide container class\n/// .app-width-container--wide {\n/// @include govuk-width-container(1200px);\n/// }\n///\n/// @access public\n\n@mixin govuk-width-container($width: $govuk-page-width) {\n // By default, limit the width of the container to the page width\n max-width: $width;\n\n // On mobile, add half width gutters\n margin-right: $govuk-gutter-half;\n margin-left: $govuk-gutter-half;\n\n // Respect 'display cutout' safe area (avoids notches and rounded corners)\n @supports (margin: unquote(\"max(calc(0px))\")) {\n $gutter-safe-area-right: calc(#{$govuk-gutter-half} + env(safe-area-inset-right));\n $gutter-safe-area-left: calc(#{$govuk-gutter-half} + env(safe-area-inset-left));\n\n // Use max() to pick largest margin, default or with safe area\n // Escaped due to Sass max() vs. CSS native max()\n margin-right: unquote(\"max(#{$govuk-gutter-half}, #{$gutter-safe-area-right})\");\n margin-left: unquote(\"max(#{$govuk-gutter-half}, #{$gutter-safe-area-left})\");\n }\n\n // On tablet, add full width gutters\n @include govuk-media-query($from: tablet) {\n margin-right: $govuk-gutter;\n margin-left: $govuk-gutter;\n\n // Respect 'display cutout' safe area (avoids notches and rounded corners)\n @supports (margin: unquote(\"max(calc(0px))\")) {\n $gutter-safe-area-right: calc(#{$govuk-gutter-half} + env(safe-area-inset-right));\n $gutter-safe-area-left: calc(#{$govuk-gutter-half} + env(safe-area-inset-left));\n\n // Use max() to pick largest margin, default or with safe area\n // Escaped due to Sass max() vs. CSS native max()\n margin-right: unquote(\"max(#{$govuk-gutter}, #{$gutter-safe-area-right})\");\n margin-left: unquote(\"max(#{$govuk-gutter}, #{$gutter-safe-area-left})\");\n }\n }\n\n // As soon as the viewport is greater than the width of the page plus the\n // gutters, just centre the content instead of adding gutters.\n @include govuk-media-query($and: \"(min-width: #{($width + $govuk-gutter * 2)})\") {\n margin-right: auto;\n margin-left: auto;\n\n // Since a safe area may have previously been set above,\n // we need to duplicate this margin that centers the page.\n @supports (margin: unquote(\"max(calc(0px))\")) {\n margin-right: auto;\n margin-left: auto;\n }\n }\n}\n\n@include govuk-exports(\"govuk/objects/width-container\") {\n .govuk-width-container {\n @include govuk-width-container;\n }\n}\n","////\n/// @group settings/layout\n////\n\n// =========================================================\n// Page layout\n// =========================================================\n\n/// Width of main container\n///\n/// @type Number\n/// @access public\n\n$govuk-page-width: 960px !default;\n\n/// Map of grid column widths\n///\n/// @type Map\n/// @access public\n\n$govuk-grid-widths: (\n one-quarter: (\n 100% / 4\n ),\n one-third: (\n 100% / 3\n ),\n one-half: (\n 100% / 2\n ),\n two-thirds: (\n 200% / 3\n ),\n three-quarters: (\n 300% / 4\n ),\n full: 100%\n) !default;\n\n/// Width of gutter between grid columns\n///\n/// @type Number\n/// @access public\n\n$govuk-gutter: 30px !default;\n\n/// Width of half the gutter between grid columns\n///\n/// @type Number\n/// @access public\n\n$govuk-gutter-half: $govuk-gutter / 2;\n\n// =========================================================\n// Borders\n// =========================================================\n\n/// Standard border width\n///\n/// @type Number\n/// @access public\n\n$govuk-border-width: 5px !default;\n\n/// Wide border width\n///\n/// @type Number\n/// @access public\n\n$govuk-border-width-wide: 10px !default;\n\n/// Narrow border width\n///\n/// @type Number\n/// @access public\n\n$govuk-border-width-narrow: 4px !default;\n\n/// Form control border width\n///\n/// @type Number\n/// @access public\n\n$govuk-border-width-form-element: 2px !default;\n\n/// Form group border width when in error state\n///\n/// @type Number\n/// @access public\n\n$govuk-border-width-form-group-error: $govuk-border-width !default;\n\n/// Border width of focus outline\n///\n/// @type Number\n/// @access public\n\n$govuk-focus-width: 3px !default;\n\n/// Hover width for form controls with a hover state\n///\n/// @type Number\n/// @access public\n\n$govuk-hover-width: 10px !default;\n","@include govuk-exports(\"govuk/component/accordion\") {\n $govuk-accordion-base-colour: govuk-colour(\"black\");\n $govuk-accordion-hover-colour: govuk-colour(\"light-grey\");\n $govuk-accordion-icon-focus-colour: $govuk-focus-colour;\n $govuk-accordion-bottom-border-width: 1px;\n\n .govuk-accordion {\n @include govuk-responsive-margin(6, \"bottom\");\n }\n\n .govuk-accordion__section {\n padding-top: govuk-spacing(3);\n }\n\n .govuk-accordion__section-heading {\n // Override browser defaults to ensure consistent element height\n margin-top: 0;\n margin-bottom: 0;\n\n padding-top: govuk-spacing(3);\n padding-bottom: govuk-spacing(3);\n }\n\n .govuk-accordion__section-button {\n @include govuk-font($size: 24, $weight: bold);\n @include govuk-text-colour;\n\n display: block;\n margin-bottom: 0;\n padding-top: govuk-spacing(3);\n }\n\n // Remove the bottom margin from the last item inside the content\n .govuk-accordion__section-content > :last-child {\n margin-bottom: 0;\n }\n\n // GOV.UK Frontend JavaScript enabled\n .govuk-frontend-supported {\n .govuk-accordion {\n // Border at the bottom of the whole accordion\n border-bottom: $govuk-accordion-bottom-border-width solid $govuk-border-colour;\n }\n\n .govuk-accordion__section {\n padding-top: 0;\n }\n\n // Hide the body of collapsed sections by default for browsers that lack\n // support for `content-visibility` paired with [hidden=until-found]\n .govuk-accordion__section-content {\n display: none;\n\n @include govuk-responsive-padding(3, \"top\");\n @include govuk-responsive-padding(8, \"bottom\");\n }\n\n // Hide the body of collapsed sections using `content-visibility` to enable\n // page search within [hidden=until-found] regions where browser supported\n .govuk-accordion__section-content[hidden] {\n @supports (content-visibility: hidden) {\n content-visibility: hidden;\n display: inherit;\n }\n\n // Hide the padding of collapsed sections\n padding-top: 0;\n padding-bottom: 0;\n }\n\n // Show the body of expanded sections\n .govuk-accordion__section--expanded .govuk-accordion__section-content {\n display: block;\n }\n\n .govuk-accordion__show-all {\n @include govuk-font($size: 19);\n position: relative;\n z-index: 1;\n\n margin-bottom: 9px;\n padding: govuk-spacing(1) 2px govuk-spacing(1) 0;\n\n border-width: 0;\n\n color: $govuk-link-colour;\n background: none;\n\n cursor: pointer;\n -webkit-appearance: none;\n\n @include govuk-media-query($from: tablet) {\n margin-bottom: 14px;\n }\n\n // Remove default button focus outline in Firefox\n &::-moz-focus-inner {\n padding: 0;\n border: 0;\n }\n\n &:hover {\n color: $govuk-accordion-base-colour;\n background: $govuk-accordion-hover-colour;\n // The focus state adds a box-shadow to the top and bottom of the\n // button. We add a grey box-shadow on hover too, to make the height of\n // the hover state match the height of the focus state.\n box-shadow:\n 0 -2px $govuk-accordion-hover-colour,\n 0 4px $govuk-accordion-hover-colour;\n\n .govuk-accordion__section-toggle-text {\n color: $govuk-accordion-base-colour;\n }\n\n .govuk-accordion-nav__chevron {\n color: $govuk-accordion-base-colour;\n background: $govuk-accordion-base-colour;\n }\n\n .govuk-accordion-nav__chevron::after {\n color: $govuk-accordion-hover-colour;\n }\n }\n\n &:focus {\n @include govuk-focused-text;\n\n .govuk-accordion-nav__chevron {\n background: $govuk-accordion-base-colour;\n }\n\n .govuk-accordion-nav__chevron::after {\n color: $govuk-accordion-icon-focus-colour;\n }\n }\n }\n\n .govuk-accordion__section-heading {\n padding: 0;\n }\n\n // Create Chevron icon aligned with text\n .govuk-accordion-nav__chevron {\n box-sizing: border-box;\n display: inline-block;\n\n position: relative;\n\n // Set size using rems so icon scales with text\n width: govuk-px-to-rem(20px);\n height: govuk-px-to-rem(20px);\n\n border: govuk-px-to-rem(1px) solid;\n border-radius: 50%;\n\n vertical-align: middle;\n\n // Create inner chevron arrow\n &::after {\n content: \"\";\n box-sizing: border-box;\n display: block;\n\n position: absolute;\n bottom: govuk-px-to-rem(5px);\n left: govuk-px-to-rem(6px);\n\n width: govuk-px-to-rem(6px);\n height: govuk-px-to-rem(6px);\n\n transform: rotate(-45deg);\n\n border-top: govuk-px-to-rem(2px) solid;\n border-right: govuk-px-to-rem(2px) solid;\n }\n }\n\n // Rotate icon to create \"Down\" version\n .govuk-accordion-nav__chevron--down {\n transform: rotate(180deg);\n }\n\n .govuk-accordion__section-button {\n width: 100%;\n\n padding: govuk-spacing(2) 0 0;\n\n border: 0;\n\n border-top: $govuk-accordion-bottom-border-width solid $govuk-border-colour;\n\n // Visually separate the section from the one underneath when user changes\n // colours in their browser. See\n // https://github.com/alphagov/govuk-frontend/issues/2321#issuecomment-924201488\n border-bottom: govuk-spacing(2) solid transparent;\n\n color: $govuk-text-colour;\n background: none;\n\n text-align: left;\n // Section headers have a pointer cursor as an additional affordance\n cursor: pointer;\n -webkit-appearance: none;\n\n @include govuk-media-query($from: tablet) {\n padding-bottom: govuk-spacing(2);\n }\n\n &:active {\n color: $govuk-link-active-colour;\n background: none;\n }\n\n &:hover {\n color: $govuk-accordion-base-colour;\n background: $govuk-accordion-hover-colour;\n\n .govuk-accordion__section-toggle-text {\n color: $govuk-accordion-base-colour;\n }\n\n .govuk-accordion-nav__chevron {\n color: $govuk-accordion-base-colour;\n background: $govuk-accordion-base-colour;\n }\n\n .govuk-accordion-nav__chevron::after {\n color: $govuk-accordion-hover-colour;\n }\n }\n\n &:focus {\n // Remove default focus border around button as styling is being applied\n // to inner text elements that receive focus\n outline: 0;\n\n .govuk-accordion__section-heading-text-focus,\n .govuk-accordion__section-summary-focus,\n .govuk-accordion__section-toggle-focus {\n @include govuk-focused-text;\n }\n\n .govuk-accordion-nav__chevron {\n color: $govuk-accordion-base-colour;\n background: $govuk-accordion-base-colour;\n }\n\n .govuk-accordion-nav__chevron::after {\n color: $govuk-accordion-icon-focus-colour;\n }\n }\n\n // Remove default button focus outline in Firefox\n &::-moz-focus-inner {\n padding: 0;\n border: 0;\n }\n }\n\n // Remove the transparent border when the section is expanded to make it\n // clear that the heading relates to the content below. Adjust padding to\n // maintain the height of the element. See\n // https://github.com/alphagov/govuk-frontend/pull/2257#issuecomment-951920798\n .govuk-accordion__section--expanded .govuk-accordion__section-button {\n padding-bottom: govuk-spacing(3);\n border-bottom: 0;\n\n @include govuk-media-query($from: tablet) {\n padding-bottom: govuk-spacing(4);\n }\n }\n\n // As Chevron icon is vertically aligned it overlaps with the focus state\n // bottom border – this adds some spacing\n .govuk-accordion__section-button:focus .govuk-accordion__section-toggle-focus {\n padding-bottom: 3px;\n\n @include govuk-media-query($from: desktop) {\n padding-bottom: 2px;\n }\n }\n\n .govuk-accordion__section-toggle,\n .govuk-accordion__section-heading-text,\n .govuk-accordion__section-summary {\n display: block;\n margin-bottom: 13px;\n\n .govuk-accordion__section-heading-text-focus,\n .govuk-accordion__section-summary-focus,\n .govuk-accordion__section-toggle-focus {\n display: inline;\n }\n }\n\n // Add toggle link with Chevron icon on left.\n .govuk-accordion__section-toggle {\n @include govuk-font-size($size: 19);\n @include govuk-typography-weight-regular;\n color: $govuk-link-colour;\n }\n\n // Add space between the icon and text. Avoid applying spacing directly to\n // the icon as the use of `transform` will change the placement of any\n // margins.\n .govuk-accordion__show-all-text,\n .govuk-accordion__section-toggle-text {\n margin-left: govuk-spacing(1);\n vertical-align: middle;\n }\n\n // Background colour adjustment when user changes colours in Firefox\n //\n // When user changes colours in Firefox, text colour inside