diff --git a/EnvelopeGenerator.ReceiverUI/App.razor b/EnvelopeGenerator.ReceiverUI/App.razor deleted file mode 100644 index 3a56f120..00000000 --- a/EnvelopeGenerator.ReceiverUI/App.razor +++ /dev/null @@ -1,12 +0,0 @@ -@using System.Globalization - - - - - - - -

Sorry, there's nothing at this address.

-
-
-
diff --git a/EnvelopeGenerator.ReceiverUI/Data/Adjustment.cs b/EnvelopeGenerator.ReceiverUI/Data/Adjustment.cs deleted file mode 100644 index 6fbe9266..00000000 --- a/EnvelopeGenerator.ReceiverUI/Data/Adjustment.cs +++ /dev/null @@ -1,44 +0,0 @@ -namespace EnvelopeGenerator.ReceiverUI.Data { - public class Adjustment - { - public static Adjustment CreateBalanceForward(DateTime dt, int random) - { - var rnd = new DeterministicRandom(random); - Adjustment res = new Adjustment(); - res.currentDateTime = dt; - res.currentDescription = "Balance Forward"; - res.currentAmount = rnd.Random(10, 300) * 10; - return res; - } - public static Adjustment CreatePayment(DateTime dt, int random) - { - var rnd = new DeterministicRandom(random); - Adjustment res = new Adjustment(); - res.currentDateTime = dt; - res.currentDescription = "Payment"; - res.currentAmount = -rnd.Random(1, 40) * 10; - return res; - } - public static Adjustment CreateCharge(DateTime dt, int random) - { - var rnd = new DeterministicRandom(random); - Adjustment res = new Adjustment(); - res.currentDateTime = dt; - res.currentDescription = rnd.GetRandomItem(bills); - res.currentAmount = rnd.Random(10, 50) * 10; - return res; - } - - DateTime currentDateTime; - string currentDescription = ""; - double currentAmount = 0; - static readonly string[] bills = new string[] { "Bill - Insurance", "Bill - Electricity", "Bill - Rent", "Bill - Phone", "Bill - Office Supplies" }; - public DateTime Date { get { return currentDateTime; } } - public string Description { get { return currentDescription; } } - public double Amount { get { return currentAmount; } } - - public Adjustment() - { - } - } -} \ No newline at end of file diff --git a/EnvelopeGenerator.ReceiverUI/Data/Customer.cs b/EnvelopeGenerator.ReceiverUI/Data/Customer.cs deleted file mode 100644 index 433bb792..00000000 --- a/EnvelopeGenerator.ReceiverUI/Data/Customer.cs +++ /dev/null @@ -1,64 +0,0 @@ -using DevExpress.DataAccess.Sql; -using DevExpress.DataAccess.Sql.DataApi; - -namespace EnvelopeGenerator.ReceiverUI.Data { - public class Customer { - static List currentCustomers = new List(); - - public static List Customers { get { return currentCustomers; } } - static Customer() { - try { - SqlDataSource ds = new SqlDataSource("NWindConnectionString"); - SelectQuery query = SelectQueryFluentBuilder - .AddTable("Customers") - .SelectAllColumns() - .Build("Customers"); - ds.Queries.Add(query); - ds.RebuildResultSchema(); - ds.Fill(); - ITable src = ds.Result["Customers"]; - foreach(var row in src) { - currentCustomers.Add(new Customer() { - CustomerID = row.GetValue("CustomerID"), - Address = row.GetValue("Address"), - CompanyName = row.GetValue("CompanyName"), - ContactName = row.GetValue("ContactName"), - ContactTitle = row.GetValue("ContactTitle"), - Country = row.GetValue("Country"), - City = row.GetValue("City"), - Fax = row.GetValue("Fax"), - Phone = row.GetValue("Phone"), - PostalCode = row.GetValue("PostalCode"), - Region = row.GetValue("Region") - }); - } - } catch { - currentCustomers.Add(new Customer() { - Address = "Obere Str. 57", - City = "Berlin", - CompanyName = "Alfreds Futterkiste", - ContactName = "Maria Anders", - ContactTitle = "Sales Representative", - Country = "Germany", - CustomerID = "ALFKI", - Fax = "030-0076545", - Phone = "030-0074321", - PostalCode = "12209" - }); - } - } - - public string CustomerID { get; set; } - public string CompanyName { get; set; } - public string ContactName { get; set; } - public string ContactTitle { get; set; } - public string Address { get; set; } - public string City { get; set; } - public string PostalCode { get; set; } - public string Region { get; set; } - public string Country { get; set; } - public string Phone { get; set; } - public string Fax { get; set; } - - } -} \ No newline at end of file diff --git a/EnvelopeGenerator.ReceiverUI/Data/DataItem.cs b/EnvelopeGenerator.ReceiverUI/Data/DataItem.cs deleted file mode 100644 index 583bb142..00000000 --- a/EnvelopeGenerator.ReceiverUI/Data/DataItem.cs +++ /dev/null @@ -1,71 +0,0 @@ -namespace EnvelopeGenerator.ReceiverUI.Data { - public class DataItem { - static readonly string[] accountType = new string[] { "Energy", "Manufacturing", "Estate", "Food", "Services" }; - public string CustomerID { get; set; } - public string CompanyName { get; set; } - public string ContactName { get; set; } - public string ContactTitle { get; set; } - public string Address { get; set; } - public string City { get; set; } - public string PostalCode { get; set; } - public string Region { get; set; } - public string Country { get; set; } - public string Phone { get; set; } - public string Fax { get; set; } - public string Email { get; set; } - public string Invoice { get; set; } - public string CustomerAccount { get; set; } - public string CustomerIdentifiers { get; set; } - public DateTime BillingDate { get; set; } - public DateTime BillingPeriodStart { get; set; } - public DateTime BillingPeriodEnd { get; set; } - public string Terms { get; set; } - public string TermsID { get; set; } - public Adjustment[] Adjustments { get; set; } - - public DataItem(int i) { - var rnd = new DeterministicRandom(i); - Customer c = rnd.GetRandomItem(Customer.Customers); - CustomerID = c.CustomerID; - CompanyName = c.CompanyName; - ContactName = c.ContactName; - ContactTitle = c.ContactTitle; - Address = c.Address; - City = c.City; - PostalCode = c.PostalCode; - Region = c.Region; - Country = c.Country; - Phone = c.Phone; - Fax = c.Fax; - Email = ContactName.Split(' ')[0].Replace(' ', '.').ToLower() + "@" + CompanyName.Split(' ')[0].ToLower() + ".com"; - Invoice = string.Format("{0}{1}-{2}", rnd.RandomChar, rnd.Random(100, 1000), rnd.Random(100, 1000)); - CustomerAccount = rnd.GetRandomItem(accountType); - CustomerIdentifiers = string.Format("{0}-{1}", rnd.Random(1000, 10000), rnd.Random(10, 100)); - BillingPeriodStart = rnd.RandomTime(); - BillingPeriodEnd = rnd.RandomTime(BillingPeriodStart, 7 * 24, 30 * 24); - BillingDate = rnd.RandomTime(BillingPeriodEnd, 7 * 24, 30 * 24); - Term currentTerm = rnd.GetRandomItem(Term.Terms); - Terms = currentTerm.Name; - - int adjustmentsCount = rnd.Random(6) + 4; - Adjustments = new Adjustment[adjustmentsCount]; - int h = (int)((BillingPeriodEnd - BillingPeriodStart).TotalHours / adjustmentsCount); - - Adjustments[0] = Adjustment.CreateBalanceForward(rnd.RandomTime(BillingPeriodStart, 0, h), rnd.Random(10000)); - - int[] items = rnd.RandomList(adjustmentsCount - 1, 2); - - for(int j = 1; j < Adjustments.Length; j++) { - DateTime nextDate = rnd.RandomTime(BillingPeriodStart.AddHours(h * j), 0, h); - switch(items[j - 1]) { - case 0: - Adjustments[j] = Adjustment.CreateCharge(nextDate, rnd.Random(10000)); - break; - case 1: - Adjustments[j] = Adjustment.CreatePayment(nextDate, rnd.Random(10000)); - break; - } - } - } - } -} \ No newline at end of file diff --git a/EnvelopeGenerator.ReceiverUI/Data/DataItemList.cs b/EnvelopeGenerator.ReceiverUI/Data/DataItemList.cs deleted file mode 100644 index 029fb7bd..00000000 --- a/EnvelopeGenerator.ReceiverUI/Data/DataItemList.cs +++ /dev/null @@ -1,70 +0,0 @@ -using System.Collections; - -namespace EnvelopeGenerator.ReceiverUI.Data { - public class DataItemList : IList, IList { - readonly int rowCount; - - public DataItem this[int index] { get { return new DataItem(index); } set { } } - public int Count { get { return rowCount; } } - public bool IsReadOnly { get { return false; } } - public bool IsFixedSize { get { return false; } } - public object SyncRoot { get { return true; } } - public bool IsSynchronized { get { return true; } } - object IList.this[int index] { get { return new DataItem(index); } set { } } - - public DataItemList(int rowCount) { - this.rowCount = rowCount; - } - public IEnumerator GetEnumerator() { - throw new NotImplementedException(); - } - public int Add(object value) { - throw new NotImplementedException(); - } - public bool Contains(object value) { - throw new NotImplementedException(); - } - public void Clear() { - throw new NotImplementedException(); - } - public int IndexOf(object value) { - throw new NotImplementedException(); - } - public void Insert(int index, object value) { - throw new NotImplementedException(); - } - public void Remove(object value) { - throw new NotImplementedException(); - } - public void RemoveAt(int index) { - throw new NotImplementedException(); - } - public void CopyTo(Array array, int index) { - throw new NotImplementedException(); - } - IEnumerator IEnumerable.GetEnumerator() { - throw new NotImplementedException(); - } - public int IndexOf(DataItem item) { - throw new NotImplementedException(); - } - public void Insert(int index, DataItem item) { - throw new NotImplementedException(); - } - public void Add(DataItem item) { - throw new NotImplementedException(); - } - public bool Contains(DataItem item) { - throw new NotImplementedException(); - } - public void CopyTo(DataItem[] array, int arrayIndex) { - throw new NotImplementedException(); - } - public bool Remove(DataItem item) { - throw new NotImplementedException(); - } - void ICollection.CopyTo(DataItem[] array, int arrayIndex) { - CopyTo(array, arrayIndex); - } - } -} \ No newline at end of file diff --git a/EnvelopeGenerator.ReceiverUI/Data/DeterministicRandom.cs b/EnvelopeGenerator.ReceiverUI/Data/DeterministicRandom.cs deleted file mode 100644 index b7afd03a..00000000 --- a/EnvelopeGenerator.ReceiverUI/Data/DeterministicRandom.cs +++ /dev/null @@ -1,60 +0,0 @@ -namespace EnvelopeGenerator.ReceiverUI.Data { - class DeterministicRandom { - const int randomCount = 10000; - static readonly int[] deterministicRandomNumbers; - static readonly DateTime time; - int rnd; - int Next { - get { - rnd = deterministicRandomNumbers[rnd % randomCount]; - return rnd; - } - } - public char RandomChar { - get { - return (char)((int)'A' + Random(0, 26)); - } - } - public int[] RandomList(int count, int to) { - int[] res = new int[count]; - for(int i = 0; i < Math.Min(count, to); i++) - res[i] = i; - for(int i = to; i < count; i++) - res[i] = Random(to); - - for(int i = 0; i < count; i++) { - int ind = Random(count); - int temp = res[ind]; - res[ind] = res[i]; - res[i] = temp; - } - return res; - } - public int Random(int to) { - return Random(0, to); - } - public int Random(int from, int to) { - return Next % Math.Max(1, to - from) + from; - } - public T GetRandomItem(IList list) { - return list[Next % list.Count]; - } - public DateTime RandomTime() { - return RandomTime(time, 0, 30 * 24); - } - public DateTime RandomTime(DateTime from, int fromHours, int toHours) { - return from.AddHours(Next % (toHours - fromHours) + fromHours); - } - - static DeterministicRandom() { - time = DateTime.Now.AddDays(-62); - Random currentRandom = new Random(randomCount); - deterministicRandomNumbers = new int[randomCount]; - for(int i = 0; i < randomCount; i++) - deterministicRandomNumbers[i] = currentRandom.Next(randomCount); - } - public DeterministicRandom(int i) { - this.rnd = i + (i >> 10) + (i >> 20); - } - } -} \ No newline at end of file diff --git a/EnvelopeGenerator.ReceiverUI/Data/Term.cs b/EnvelopeGenerator.ReceiverUI/Data/Term.cs deleted file mode 100644 index dde9a01e..00000000 --- a/EnvelopeGenerator.ReceiverUI/Data/Term.cs +++ /dev/null @@ -1,15 +0,0 @@ -namespace EnvelopeGenerator.ReceiverUI.Data { - public struct Term { - public static readonly Term[] Terms = new Term[] { - new Term("Payment seven days after invoice date" ), - new Term("Payment ten days after invoice date" ), - new Term("End of month" ), - new Term("21st of the month following invoice date" ), - }; - readonly string currentName; - public string Name { get { return currentName; } } - public Term(string currentName) { - this.currentName = currentName; - } - } -} \ No newline at end of file diff --git a/EnvelopeGenerator.ReceiverUI/EnvelopeGenerator.ReceiverUI.csproj b/EnvelopeGenerator.ReceiverUI/EnvelopeGenerator.ReceiverUI.csproj deleted file mode 100644 index c367f14c..00000000 --- a/EnvelopeGenerator.ReceiverUI/EnvelopeGenerator.ReceiverUI.csproj +++ /dev/null @@ -1,56 +0,0 @@ - - - net8.0 - enable - true - false - true - - enable - EnvelopeGenerator.ReceiverUI - Digital Data GmbH - Digital Data GmbH - EnvelopeGenerator.ReceiverUI - Assets\icon.ico - digital data envelope generator web - EnvelopeGenerator.ReceiverUI is a Blazor WebAssembly application developed to manage signing processes. It uses Entity Framework Core (EF Core) for database operations. The user interface for signing processes is developed with Razor View Engine (.cshtml files) and JavaScript under wwwroot, integrated with PSPDFKit. This integration allows users to view and sign documents seamlessly. - 1.4.2 - - 1.4.2.0 - - 1.4.2.0 - - Copyright © 2026 Digital Data GmbH. All rights reserved. - - - - - - - - - - - - - - - - - - - - - - - - - - - Always - - - Always - - - \ No newline at end of file diff --git a/EnvelopeGenerator.ReceiverUI/Models/Constants/SenderAppType.cs b/EnvelopeGenerator.ReceiverUI/Models/Constants/SenderAppType.cs deleted file mode 100644 index f280c70a..00000000 --- a/EnvelopeGenerator.ReceiverUI/Models/Constants/SenderAppType.cs +++ /dev/null @@ -1,8 +0,0 @@ -namespace EnvelopeGenerator.ReceiverUI.Models.Constants -{ - public enum SenderAppType - { - LegacyFormApp = 0, - ReceiverUIBlazorApp = 1 - } -} diff --git a/EnvelopeGenerator.ReceiverUI/Models/Constants/UnitOfLength.cs b/EnvelopeGenerator.ReceiverUI/Models/Constants/UnitOfLength.cs deleted file mode 100644 index 944d88bf..00000000 --- a/EnvelopeGenerator.ReceiverUI/Models/Constants/UnitOfLength.cs +++ /dev/null @@ -1,65 +0,0 @@ -namespace EnvelopeGenerator.ReceiverUI.Models.Constants; - -/// -/// Represents the unit of measurement for coordinate values in signature positioning. -/// Used for converting coordinates between different systems (GdPicture14, PDF.js, iText7). -/// -public enum UnitOfLength -{ - /// - /// Inch unit (1 inch = 25.4 mm). - /// This is the native unit used by GdPicture14 (EnvelopeGenerator.Form - Legacy VB.NET app). - /// Database stores all coordinates (X, Y, Width, Height) in INCHES. - /// - /// - /// Source: GdPicture14.Annotations.AnnotationStickyNote uses INCHES natively. - ///
- /// Evidence: VB.NET code directly assigns database values to annotation properties without conversion: - /// - /// oAnnotation.Left = CSng(pElement.X) ' Direct assignment → INCHES - /// oAnnotation.Top = CSng(pElement.Y) - /// - /// Standard Page Dimensions: - /// - /// A4: 8.27" × 11.69" (210mm × 297mm) - /// Letter: 8.5" × 11" - /// - ///
- Inch = 0, - - /// - /// PDF Point unit (1 point = 1/72 inch). - /// This is the standard unit used by PDF specification and PDF.js viewer. - /// - /// - /// Definition: According to PDF specification and Microsoft documentation: - ///
- /// "PDF pages are sized in point units. 1 pt == 1/72 inch" - ///

- /// Conversion Formula: - /// - /// points = inches * 72.0 - /// inches = points / 72.0 - /// - /// Important: Point ≠ Pixel! - /// - /// Point (pt): Device-independent unit (always 1/72 inch) - /// Pixel (px): Device-dependent unit (varies with screen DPI) - /// At 72 DPI: 1 point = 1 pixel (coincidence) - /// At 96 DPI: 1 point ≈ 1.33 pixels - /// At 300 DPI: 1 point ≈ 4.17 pixels - /// - /// Standard Page Dimensions (in points): - /// - /// A4: 595 × 842 points (8.27" × 11.69" × 72) - /// Letter: 612 × 792 points (8.5" × 11" × 72) - /// - /// Usage in EnvelopeGenerator: - /// - /// PDF.js viewer expects coordinates in points - /// iText7 library uses points for PDF manipulation - /// PSPDFKit (Web) uses points for annotation placement - /// - ///
- Point -} diff --git a/EnvelopeGenerator.ReceiverUI/Models/EnvelopeDto.cs b/EnvelopeGenerator.ReceiverUI/Models/EnvelopeDto.cs deleted file mode 100644 index eb6fb910..00000000 --- a/EnvelopeGenerator.ReceiverUI/Models/EnvelopeDto.cs +++ /dev/null @@ -1,39 +0,0 @@ -using System.Text.Json.Serialization; - -namespace EnvelopeGenerator.ReceiverUI.Models; - -public class EnvelopeDto -{ - [JsonPropertyName("id")] - public int Id { get; set; } - - [JsonPropertyName("uuid")] - public string? Uuid { get; set; } - - [JsonPropertyName("title")] - public string? Title { get; set; } - - [JsonPropertyName("status")] - public int Status { get; set; } - - [JsonPropertyName("docResult")] - public byte[]? DocResult { get; set; } - - [JsonPropertyName("envelopeReceivers")] - public List EnvelopeReceivers { get; set; } = new(); -} - -/// -/// Simplified receiver model for envelope list display -/// -public class EnvelopeReceiverSimpleDto -{ - [JsonPropertyName("name")] - public string? Name { get; set; } - - [JsonPropertyName("email")] - public string? Email { get; set; } - - [JsonPropertyName("signed")] - public bool Signed { get; set; } -} diff --git a/EnvelopeGenerator.ReceiverUI/Models/EnvelopeReceiverDto.cs b/EnvelopeGenerator.ReceiverUI/Models/EnvelopeReceiverDto.cs deleted file mode 100644 index a646bfb3..00000000 --- a/EnvelopeGenerator.ReceiverUI/Models/EnvelopeReceiverDto.cs +++ /dev/null @@ -1,106 +0,0 @@ -namespace EnvelopeGenerator.ReceiverUI.Models; - -/// -/// Client-side model for the envelope receiver returned by -/// GET api/EnvelopeReceiver/{envelopeKey}. -/// -public record EnvelopeReceiverDto -{ - public int EnvelopeId { get; init; } - public int ReceiverId { get; init; } - public int Sequence { get; init; } - - public string? Name { get; init; } - public string? JobTitle { get; init; } - public string? CompanyName { get; init; } - public string? PrivateMessage { get; init; } - - public DateTime AddedWhen { get; init; } - public DateTime? ChangedWhen { get; init; } - public bool HasPhoneNumber { get; init; } - - public EnvelopeClientDto? Envelope { get; init; } - public ReceiverClientDto? Receiver { get; init; } -} - -/// -/// Client-side model for the envelope data embedded in . -/// -public record EnvelopeClientDto -{ - public int Id { get; init; } - public int UserId { get; init; } - public int Status { get; init; } - public string StatusName { get; init; } = string.Empty; - public string Uuid { get; init; } = string.Empty; - public string Title { get; init; } = string.Empty; - public string Message { get; init; } = string.Empty; - public DateTime AddedWhen { get; init; } - public DateTime? ChangedWhen { get; init; } - public string Language { get; init; } = "de-DE"; - public int? EnvelopeTypeId { get; init; } - public string? EnvelopeTypeTitle { get; init; } - public int? ContractType { get; init; } - public int? CertificationType { get; init; } - public bool UseAccessCode { get; init; } - public bool TFAEnabled { get; init; } - public IEnumerable? Documents { get; init; } - public EnvelopeSenderDto? User { get; init; } -} - -/// -/// Sender (user) information embedded in . -/// -public record EnvelopeSenderDto -{ - public int Id { get; init; } - public string? Username { get; init; } - public string? FullName { get; init; } - public string? Email { get; init; } -} - -/// -/// Client-side model for a document embedded in . -/// -public record DocumentClientDto -{ - public int Id { get; init; } - public int EnvelopeId { get; init; } - public DateTime AddedWhen { get; init; } - public IEnumerable? Elements { get; init; } -} - -/// -/// Client-side model for a signature/annotation element embedded in . -/// -public record SignatureClientDto -{ - public int Id { get; init; } - public int DocumentId { get; init; } - public int ReceiverId { get; init; } - public int ElementType { get; init; } - public double X { get; init; } - public double Y { get; init; } - public double Width { get; init; } - public double Height { get; init; } - public int Page { get; init; } - public bool Required { get; init; } - public string? Tooltip { get; init; } - public bool ReadOnly { get; init; } - public int AnnotationIndex { get; init; } - public DateTime AddedWhen { get; init; } - public DateTime? ChangedWhen { get; init; } -} - -/// -/// Client-side model for the receiver data embedded in . -/// -public record ReceiverClientDto -{ - public int Id { get; init; } - public string? EmailAddress { get; init; } - public string? Signature { get; init; } - public DateTime AddedWhen { get; init; } - public DateTime? TfaRegDeadline { get; init; } -} - diff --git a/EnvelopeGenerator.ReceiverUI/Models/SignatureCaptureDto.cs b/EnvelopeGenerator.ReceiverUI/Models/SignatureCaptureDto.cs deleted file mode 100644 index 5c137cac..00000000 --- a/EnvelopeGenerator.ReceiverUI/Models/SignatureCaptureDto.cs +++ /dev/null @@ -1,62 +0,0 @@ -namespace EnvelopeGenerator.ReceiverUI.Models; - -/// -/// Represents a captured signature with metadata created by the receiver in the signature popup. -/// This model holds the signature image (as base64 data URL) along with signer information -/// used for rendering applied signatures on the PDF canvas. -/// -/// -/// Used in: EnvelopeViewer.razor signature popup workflow -///
-/// Creation: User draws/types/uploads signature and fills required fields -///
-/// Storage: Session-only (Blazor component state, lost on page refresh) -///
-/// Rendering: Applied signatures display: Image + Separator + Name/Position/Place/Date -///
-public sealed record SignatureCaptureDto -{ - /// - /// Base64-encoded data URL of the signature image. - ///
- /// Format: data:image/png;base64,iVBORw0KG... - ///
- /// Source: Canvas.toDataURL() from signature pad (draw/text/image tabs) - ///
- /// Usage: Set as img.src in applied signature overlay - ///
- public required string DataUrl { get; init; } - - /// - /// Full name of the signer (first and last name). - ///
- /// Required: Yes (validated in popup) - ///
- /// Display: Bold text in applied signature block - ///
- /// Example: "Max Mustermann" - ///
- public required string FullName { get; init; } - - /// - /// Job title or position of the signer. - ///
- /// Required: No (optional field) - ///
- /// Display: Normal weight text between name and place/date - ///
- /// Example: "Geschäftsführer" or empty string - ///
- public string Position { get; init; } = string.Empty; - - /// - /// Location/place where the signature was created. - ///
- /// Required: Yes (validated in popup) - ///
- /// Display: Shown with current date in German format (dd.MM.yyyy) - ///
- /// Example: "Berlin" ? rendered as "Berlin, 26.01.2025" - ///
- public required string Place { get; init; } -} diff --git a/EnvelopeGenerator.ReceiverUI/Models/SignatureDto.cs b/EnvelopeGenerator.ReceiverUI/Models/SignatureDto.cs deleted file mode 100644 index c54ff873..00000000 --- a/EnvelopeGenerator.ReceiverUI/Models/SignatureDto.cs +++ /dev/null @@ -1,101 +0,0 @@ -using EnvelopeGenerator.ReceiverUI.Models.Constants; - -namespace EnvelopeGenerator.ReceiverUI.Models; - -/// -/// Represents a signature position on a PDF page. -/// Coordinates stored in INCHES (GdPicture14 native unit). -/// Origin: Top-left corner, X increases right, Y increases down. -/// -public class SignatureDto -{ - /// Unique identifier. - public int Id { get; init; } - - private double _x; - private double _y; - - /// Horizontal position in INCHES from left edge. - public double X - { - get => _x * Factor; - init => _x = value; - } - - /// Vertical position in INCHES from top edge. - public double Y - { - get => _y * Factor; - init => _y = value; - } - - /// 1-based page number. - public int Page { get; init; } - - /// Sender application type that created this signature. - public SenderAppType SenderAppType { get; init; } - - private UnitOfLength _unitOfLength; - - public SignatureDto Convert(UnitOfLength unitOfLength) - { - _unitOfLength = unitOfLength; - return this; - } - - public double Factor - { - get - { - if (SenderAppType != SenderAppType.LegacyFormApp) - { - throw new NotImplementedException( - $"SenderAppType '{SenderAppType}' is not yet implemented. " + - $"Currently, only '{nameof(SenderAppType.LegacyFormApp)}' is supported. " + - $"Future implementations will handle '{nameof(SenderAppType.ReceiverUIBlazorApp)}' and other types."); - } - - // LegacyFormApp uses GdPicture14 with INCHES - return _unitOfLength switch - { - UnitOfLength.Inch => 1.0, // No conversion needed: INCHES → INCHES - UnitOfLength.Point => 72.0, // INCHES → PDF Points: 1 inch = 72 points (PDF standard, NOT pixels!) - _ => throw new InvalidOperationException( - $"Unknown UnitOfLength: {_unitOfLength}. Expected '{nameof(UnitOfLength.Inch)}' or '{nameof(UnitOfLength.Point)}'.") - }; - } - } -} - -public static class SignatureDtoExtensions -{ - /// - /// Converts all signatures in the collection to the specified unit of length. - /// - /// Type of the collection (IEnumerable, List, etc.) - /// Collection of SignatureDto objects to convert. - /// Target unit of measurement (Inch or Point). - /// The same collection with all signatures converted to the specified unit. - /// Thrown when signatures collection is null. - /// - /// Usage: - /// - /// var signatures = await SignatureService.GetAsync(envelopeKey); - /// var convertedSignatures = signatures.ConvertAll(UnitOfLength.Point); - /// - /// Note: This method modifies each SignatureDto object in place and returns the same collection. - /// - public static T Convert(this T signatures, UnitOfLength unitOfLength) - where T : IEnumerable - { - if (signatures == null) - throw new ArgumentNullException(nameof(signatures)); - - foreach (var signature in signatures) - { - signature.Convert(unitOfLength); - } - - return signatures; - } -} \ No newline at end of file diff --git a/EnvelopeGenerator.ReceiverUI/NOTICE.txt b/EnvelopeGenerator.ReceiverUI/NOTICE.txt deleted file mode 100644 index f0858d6c..00000000 --- a/EnvelopeGenerator.ReceiverUI/NOTICE.txt +++ /dev/null @@ -1,12 +0,0 @@ -The following open source libraries are used and included within thеse sample/demonstration projects: - -Bootstrap (Open Source – MIT License) -Copyright (c) 2011-2021 Twitter, Inc. / Copyright (c) 2011-2021 The Bootstrap Authors -https://github.com/twbs/bootstrap/blob/main/LICENSE - -open-iconic (Open Source – MIT License and SIL Open Font License) -Copyright (c) 2014 Waybury -https://github.com/iconic/open-iconic/blob/master/ICON-LICENSE -https://github.com/iconic/open-iconic/blob/master/FONT-LICENSE - -The open source libraries included in these sample/demonstration projects are done so pursuant to each individual open source library license and subject to the disclaimers and limitations on liability set forth in each open source library license. \ No newline at end of file diff --git a/EnvelopeGenerator.ReceiverUI/Options/ApiOptions.cs b/EnvelopeGenerator.ReceiverUI/Options/ApiOptions.cs deleted file mode 100644 index d8e1d42f..00000000 --- a/EnvelopeGenerator.ReceiverUI/Options/ApiOptions.cs +++ /dev/null @@ -1,10 +0,0 @@ -namespace EnvelopeGenerator.ReceiverUI.Options; - -public class ApiOptions -{ - public const string SectionName = "Api"; - - public string BaseUrl { get; set; } = string.Empty; - - public bool UsePredefinedReports { get; set; } = false; -} diff --git a/EnvelopeGenerator.ReceiverUI/Options/PdfViewerOptions.cs b/EnvelopeGenerator.ReceiverUI/Options/PdfViewerOptions.cs deleted file mode 100644 index 3a0aec82..00000000 --- a/EnvelopeGenerator.ReceiverUI/Options/PdfViewerOptions.cs +++ /dev/null @@ -1,71 +0,0 @@ -namespace EnvelopeGenerator.ReceiverUI.Options; - -public class PdfViewerOptions -{ - public const string SectionName = "PdfViewer"; - - /// - /// Base scale for thumbnail rendering (0.2 - 1.5 recommended) - /// Higher values = better quality but slower rendering - /// Default: 0.75 - /// - public double ThumbnailBaseScale { get; set; } = 0.75; - - /// - /// Enable HiDPI/Retina support for thumbnails - /// Default: true - /// - public bool ThumbnailEnableHiDPI { get; set; } = true; - - /// - /// Maximum device pixel ratio multiplier for thumbnails (1.0 - 3.0) - /// Caps DPR to avoid excessive memory usage on 4K+ displays - /// Default: 2.0 - /// - public double ThumbnailMaxDPR { get; set; } = 2.0; - - /// - /// Enable HiDPI/Retina support for main PDF canvas - /// Default: true - /// - public bool MainCanvasEnableHiDPI { get; set; } = true; - - /// - /// Maximum device pixel ratio multiplier for main canvas (1.0 - 3.0) - /// Default: 2.0 - /// - public double MainCanvasMaxDPR { get; set; } = 2.0; - - /// - /// Enable smooth zoom transition (fade effect) - /// Default: true - /// - public bool EnableSmoothZoom { get; set; } = true; - - /// - /// Zoom transition duration in milliseconds (50 - 500) - /// Default: 150 - /// - public int ZoomTransitionDuration { get; set; } = 150; - - /// - /// Opacity during rendering (0.0 - 1.0) - /// Lower values = more visible fade effect - /// Default: 0.85 - /// - public double RenderingOpacity { get; set; } = 0.85; - - /// - /// Delay between thumbnail renders in milliseconds (10 - 200) - /// Higher values = less browser stress, slower initial load - /// Default: 50 - /// - public int ThumbnailRenderDelay { get; set; } = 50; - - /// - /// Zoom step percentage (1 - 50) - /// Controls how much zoom changes per click or scroll - /// Default: 5 (5% per step) - /// - public int ZoomStepPercentage { get; set; } = 5; -} diff --git a/EnvelopeGenerator.ReceiverUI/Pages/EnvelopeReceiverPage.razor b/EnvelopeGenerator.ReceiverUI/Pages/EnvelopeReceiverPage.razor deleted file mode 100644 index b58ac15b..00000000 --- a/EnvelopeGenerator.ReceiverUI/Pages/EnvelopeReceiverPage.razor +++ /dev/null @@ -1,1069 +0,0 @@ -@page "/envelope/{EnvelopeKey}" -@using EnvelopeGenerator.ReceiverUI.Models -@using EnvelopeGenerator.ReceiverUI.Models.Constants -@using EnvelopeGenerator.ReceiverUI.Services -@using Microsoft.Extensions.Options -@using EnvelopeGenerator.ReceiverUI.Options -@using Microsoft.JSInterop -@using DevExpress.Blazor -@inject DocumentService DocumentService -@inject NavigationManager Navigation -@inject IOptions AppOptions -@inject IOptions PdfViewerOptions -@inject IJSRuntime JSRuntime -@inject DocReceiverElementService SignatureService -@inject SignatureCacheService SignatureCacheService -@inject EnvelopeGenerator.ReceiverUI.Services.AuthService AuthService -@inject EnvelopeGenerator.ReceiverUI.Services.EnvelopeReceiverService EnvelopeReceiverService -@inject AppVersionService AppVersion -@inject ILogger logger -@implements IAsyncDisposable - - - - - - - - -
-
-
- @* Row 1: Title + Sender + Badges + Logout *@ -
- @* Left: Title + Sender *@ -
- @if (_envelopeReceiver is not null) { -
- @(_envelopeReceiver.Envelope?.Title ?? "Dokument") -
- @if (!string.IsNullOrWhiteSpace(_envelopeReceiver.Envelope?.User?.FullName) || !string.IsNullOrWhiteSpace(_envelopeReceiver.Envelope?.User?.Email)) { - - Von - @if (!string.IsNullOrWhiteSpace(_envelopeReceiver.Envelope?.User?.FullName)) { - @_envelopeReceiver.Envelope.User.FullName - } - @if (!string.IsNullOrWhiteSpace(_envelopeReceiver.Envelope?.User?.Email)) { - <@_envelopeReceiver.Envelope.User.Email> - } - @if (_envelopeReceiver.Envelope?.AddedWhen != null) { -  · @_envelopeReceiver.Envelope.AddedWhen.ToString("dd.MM.yyyy") - } - - } - } else { -
Dokumentenansicht
- } -
- - @* Right: Badges + Logout *@ -
- @if (_envelopeReceiver is not null) { -
- @if (!string.IsNullOrWhiteSpace(_envelopeReceiver.Name)) { - - - - - @_envelopeReceiver.Name - - } - @if (!string.IsNullOrWhiteSpace(_envelopeReceiver.Envelope?.User?.FullName)) { - - Von @_envelopeReceiver.Envelope.User.FullName - - } - @{ - int sigCount = _signatures.Count; - } - @if (sigCount > 0) { - - - - - @sigCount - - } - @if (_envelopeReceiver.Envelope?.UseAccessCode == true) { - - - - - Code - - } - @if (_envelopeReceiver.Envelope?.TFAEnabled == true) { - - - - - - 2FA - - } -
- - } - - @* Logout button *@ - @if (!string.IsNullOrWhiteSpace(EnvelopeKey)) { - - } -
-
- - @* Row 2: Messages (visible text) *@ - @if (_envelopeReceiver is not null && (!string.IsNullOrWhiteSpace(_envelopeReceiver.Envelope?.Message) || !string.IsNullOrWhiteSpace(_envelopeReceiver.PrivateMessage))) { -
- @if (!string.IsNullOrWhiteSpace(_envelopeReceiver.Envelope?.Message)) { -
- 📧 - @_envelopeReceiver.Envelope.Message -
- } - @if (!string.IsNullOrWhiteSpace(_envelopeReceiver.PrivateMessage)) { -
- 🔒 - @_envelopeReceiver.PrivateMessage -
- } -
- } -
-
- -
- @if (_isLoading) { -
-
-
- L�dt... -
-

Dokument wird geladen...

-
-
- } else if (_errorMessage is not null) { -
-
-
- - - - -
-
Fehler beim Laden des Dokuments
-

@_errorMessage

-
-
-
-
- } else if (!string.IsNullOrWhiteSpace(_pdfDataUrl)) { -
- @if (_pdfLoaded) { -
-
- -
- -
- -
- -
- - / @_totalPages -
- -
- -
- -
- -
- -
@(_currentZoom)%
-
- -
- -
- - @if (_totalSignatures > 0) { -
- -
- -
- -
- - -
- - - - - @if (_currentSignatureIndex > 0) { - #@_currentSignatureIndex - | - } - @_signedSignatures -  /  - @_totalSignatures - - @if (_unsignedSignatures > 0) { - @_unsignedSignatures offen - } else { - ✓ Komplett - } -
- - -
- -
- - @* Reset button - only show when signatures are signed *@ - @if (_signedSignatures > 0) { -
- -
- } - } -
- } -
- @if (_pdfLoaded && _showThumbnails) { - -
-
- @for (int i = 1; i <= _totalPages; i++) { - var pageNum = i; -
-
- -
-
@pageNum
-
- } -
-
- -
-
- } -
-
- -
-
-
-
-
-
- } else { -
-
-
- - - - Dokument konnte nicht geladen werden. -
-
-
- } -
-
- - - - - - @if(_activeSignatureTab == SignatureTabDraw) { -

Bitte unterschreiben Sie im folgenden Feld.

- - } else if(_activeSignatureTab == SignatureTabText) { -

Geben Sie Ihre Unterschrift als Text ein und wählen Sie eine Schriftart.

-
-
- -
-
- -
-
- - } else { -

Laden Sie ein Bild Ihrer Unterschrift hoch.

- - - } - -
-
-
- - -
-
- - -
-
- - -
-
-
- - @if(!string.IsNullOrWhiteSpace(_popupValidationMessage)) { -
- @_popupValidationMessage -
- } -
- -
- - -
-
-
- -@code { -// Signature tab constants -const string SignatureTabDraw = "draw"; -const string SignatureTabText = "text"; -const string SignatureTabImage = "image"; -const string DrawCanvasId = "envelope-signature-pad"; -const string TypedCanvasId = "envelope-typed-signature-pad"; -const string ImageInputId = "envelope-signature-image-input"; -const string ImageCanvasId = "envelope-image-signature-pad"; - -readonly (string Text, string Value)[] TypedSignatureFonts = { - ("Brush Script", "'Brush Script MT', cursive"), - ("Segoe Script", "'Segoe Script', cursive"), - ("Lucida Handwriting", "'Lucida Handwriting', cursive"), - ("Comic Sans", "'Comic Sans MS', cursive"), - ("Cursive", "cursive") -}; - -[Parameter] public string? EnvelopeKey { get; set; } - -bool _isLoading = true; -string? _errorMessage; -string? _pdfDataUrl; -bool _pdfLoaded = false; -int _currentPage = 1; -int _totalPages = 0; -int _currentZoom = 150; -bool _showThumbnails = true; -bool _isLoggingOut = false; -DotNetObjectReference? _dotNetRef; -IReadOnlyList _signatures = []; -EnvelopeReceiverDto? _envelopeReceiver; - -// Signature navigation state -int _totalSignatures = 0; -int _signedSignatures = 0; -int _unsignedSignatures = 0; -int _currentSignatureIndex = 0; // Current signature index (1-based) - -// Signature state -SignatureCaptureDto? _capturedSignature; -bool _signaturePopupVisible = false; -string? _popupValidationMessage; -string _activeSignatureTab = SignatureTabDraw; -string _typedSignatureText = string.Empty; -string _typedSignatureFont = "'Brush Script MT', cursive"; -string _signerFullName = string.Empty; -string _signerPosition = string.Empty; -string _signaturePlace = string.Empty; - -// Resizable splitter state -int _thumbnailWidth = 260; -bool _isResizing = false; -int _resizeStartX = 0; -int _resizeStartWidth = 0; -const int MinThumbnailWidth = 150; -const int MaxThumbnailWidth = 400; - - async Task LogoutAsync() { - if (string.IsNullOrWhiteSpace(EnvelopeKey) || _isLoggingOut) return; - _isLoggingOut = true; - await InvokeAsync(StateHasChanged); - await AuthService.LogoutEnvelopeReceiverAsync(EnvelopeKey); - Navigation.NavigateTo($"/envelope/login/{Uri.EscapeDataString(EnvelopeKey)}", forceLoad: true); - } - - protected override async Task OnInitializedAsync() { - if (string.IsNullOrWhiteSpace(EnvelopeKey)) { - _errorMessage = "Envelope-Schlüssel fehlt."; - _isLoading = false; - return; - } - - // Check authentication - var hasAccess = await AuthService.CheckEnvelopeAccessAsync(EnvelopeKey); - if (!hasAccess) { - Navigation.NavigateTo($"/envelope/login/{Uri.EscapeDataString(EnvelopeKey)}"); - return; - } - - try { - var pdfBytes = await DocumentService.GetDocumentAsync(EnvelopeKey); - - if (pdfBytes is { Length: > 0 }) { - var base64 = Convert.ToBase64String(pdfBytes); - _pdfDataUrl = $"data:application/pdf;base64,{base64}"; - } else { - _errorMessage = "Dokument konnte nicht geladen werden: Keine Daten empfangen."; - } - - var signatures = await SignatureService.GetAsync(EnvelopeKey); - _signatures = signatures.Convert(UnitOfLength.Point); - - _envelopeReceiver = await EnvelopeReceiverService.GetAsync(EnvelopeKey); - if (_envelopeReceiver is null) - { - logger.LogWarning("Envelope receiver data is null for envelope {EnvelopeKey}", EnvelopeKey); - } - - await JSRuntime.InvokeVoidAsync("console.log", "Loaded signatures:", _signatures); - - // Try to load cached signature first - try - { - var cachedSignature = await SignatureCacheService.GetSignatureAsync(EnvelopeKey); - if (cachedSignature is not null) - { - _capturedSignature = cachedSignature; - _signerFullName = cachedSignature.FullName; - _signerPosition = cachedSignature.Position; - _signaturePlace = cachedSignature.Place; - _signaturePopupVisible = false; - - logger.LogInformation("Cached signature loaded for envelope {EnvelopeKey}", EnvelopeKey); - } - else - { - _activeSignatureTab = SignatureTabDraw; - _signaturePopupVisible = true; - _popupValidationMessage = null; - } - } - catch (Exception ex) - { - logger.LogWarning(ex, "Failed to load cached signature, showing popup"); - _activeSignatureTab = SignatureTabDraw; - _signaturePopupVisible = true; - _popupValidationMessage = null; - } - - } catch (HttpRequestException ex) { - _errorMessage = $"Dokument konnte nicht geladen werden: {ex.Message}"; - logger.LogError(ex, "Failed to load document for envelope {EnvelopeKey}", EnvelopeKey); - } catch (Exception ex) { - _errorMessage = $"Fehler: {ex.Message}"; - logger.LogError(ex, "Unexpected error during initialization for envelope {EnvelopeKey}", EnvelopeKey); - } - - _isLoading = false; - await InvokeAsync(StateHasChanged); - } - - protected override async Task OnAfterRenderAsync(bool firstRender) { - if (firstRender) { - // Load saved thumbnail width from localStorage - try { - var savedWidth = await JSRuntime.InvokeAsync("localStorage.getItem", "envelopeViewer_thumbnailWidth"); - if (!string.IsNullOrEmpty(savedWidth) && int.TryParse(savedWidth, out var width)) { - _thumbnailWidth = Math.Clamp(width, MinThumbnailWidth, MaxThumbnailWidth); - await InvokeAsync(StateHasChanged); - } - } catch { - // Ignore localStorage errors - } - } - - if (!_pdfLoaded && !string.IsNullOrWhiteSpace(_pdfDataUrl)) { - await Task.Delay(500); - - try { - _dotNetRef = DotNetObjectReference.Create(this); - - // Send quality options to JavaScript - var options = PdfViewerOptions.Value; - await JSRuntime.InvokeVoidAsync("pdfViewer.setQualityOptions", new - { - options.ThumbnailBaseScale, - options.ThumbnailEnableHiDPI, - options.ThumbnailMaxDPR, - options.MainCanvasEnableHiDPI, - options.MainCanvasMaxDPR, - options.EnableSmoothZoom, - options.ZoomTransitionDuration, - options.RenderingOpacity, - options.ZoomStepPercentage - }); - - var success = await JSRuntime.InvokeAsync("pdfViewer.initialize", "pdf-canvas", _pdfDataUrl, _dotNetRef); - - if (success) { - _pdfLoaded = true; - _totalPages = await JSRuntime.InvokeAsync("pdfViewer.getTotalPages"); - _currentPage = await JSRuntime.InvokeAsync("pdfViewer.getCurrentPage"); - - // Attach resize listeners - await JSRuntime.InvokeVoidAsync("pdfViewer.attachResizeListeners", _dotNetRef); - - - await InvokeAsync(StateHasChanged); - - // Wait for DOM to be ready, then render thumbnails - await Task.Delay(100); - await RenderThumbnailsAsync(); - - // Render signature buttons - await RenderSignatureButtonsAsync(); - } - } catch (Exception ex) { - _errorMessage = $"PDF.js Fehler: {ex.Message}"; - await InvokeAsync(StateHasChanged); - } - } - } - - [JSInvokable] - public async Task OnZoomChanged(double scale) - { - _currentZoom = (int)(scale * 100); - await InvokeAsync(StateHasChanged); - - // Small delay for canvas render to complete (reduced from 100ms to 10ms) - await Task.Delay(10); - await RenderSignatureButtonsAsync(); - } - - async Task NextPage() { - if (await JSRuntime.InvokeAsync("pdfViewer.nextPage")) { - _currentPage = await JSRuntime.InvokeAsync("pdfViewer.getCurrentPage"); - await RenderSignatureButtonsAsync(); - } - } - - async Task PreviousPage() { - if (await JSRuntime.InvokeAsync("pdfViewer.previousPage")) { - _currentPage = await JSRuntime.InvokeAsync("pdfViewer.getCurrentPage"); - await RenderSignatureButtonsAsync(); - } - } - - async Task ZoomIn() { - if (_currentZoom >= 300) return; - await JSRuntime.InvokeVoidAsync("pdfViewer.zoomIn"); - var scale = await JSRuntime.InvokeAsync("pdfViewer.getScale"); - _currentZoom = (int)(scale * 100); - - // Update signature overlay positions after zoom - await RenderSignatureButtonsAsync(); - } - - async Task ZoomOut() { - if (_currentZoom <= 50) return; - await JSRuntime.InvokeVoidAsync("pdfViewer.zoomOut"); - var scale = await JSRuntime.InvokeAsync("pdfViewer.getScale"); - _currentZoom = (int)(scale * 100); - - // Update signature overlay positions after zoom - await RenderSignatureButtonsAsync(); - } - - async Task SetZoom(int percentage) { - var scale = percentage / 100.0; - await JSRuntime.InvokeVoidAsync("pdfViewer.setScale", scale); - _currentZoom = percentage; - } - - async Task OnZoomSliderChanged(ChangeEventArgs e) { - if (int.TryParse(e.Value?.ToString(), out var zoom)) { - await SetZoom(zoom); - - // Update signature overlay positions after zoom - await RenderSignatureButtonsAsync(); - } - } - - async Task OnPageInputChanged(ChangeEventArgs e) { - if (int.TryParse(e.Value?.ToString(), out var pageNum) && pageNum >= 1 && pageNum <= _totalPages) { - if (await JSRuntime.InvokeAsync("pdfViewer.goToPage", pageNum)) { - _currentPage = pageNum; - } - } - } - - async Task FitToWidth() { - await JSRuntime.InvokeVoidAsync("pdfViewer.fitToWidth"); - var scale = await JSRuntime.InvokeAsync("pdfViewer.getScale"); - _currentZoom = (int)(scale * 100); - } - - async Task ToggleThumbnails() { - _showThumbnails = !_showThumbnails; - - // Re-render thumbnails when showing them - if (_showThumbnails && _pdfLoaded) { - await InvokeAsync(StateHasChanged); // Force UI update first - await Task.Delay(150); // Wait for DOM to render canvas elements - await RenderThumbnailsAsync(); - } - } - - async Task GoToPageFromThumbnail(int pageNum) { - if (await JSRuntime.InvokeAsync("pdfViewer.goToPage", pageNum)) { - _currentPage = pageNum; - await RenderSignatureButtonsAsync(); - } - } - - async Task RenderSignatureButtonsAsync() { - if (_signatures.Count == 0 || !_pdfLoaded) return; - - try { - await JSRuntime.InvokeVoidAsync("pdfViewer.renderSignatureButtons", _signatures, _currentPage, _dotNetRef); - await UpdateSignatureCounterAsync(); - } catch (Exception ex) { - System.Diagnostics.Debug.WriteLine($"Signature button rendering error: {ex.Message}"); - } - } - - [JSInvokable] - public async Task OnSignatureButtonClick(int signatureId) { - if (_capturedSignature == null) { - // No signature captured yet - should not happen as popup is shown on page load - return; - } - - // Apply signature to PDF canvas - await JSRuntime.InvokeVoidAsync("pdfViewer.applySignature", - signatureId, - _capturedSignature.DataUrl, - _capturedSignature.FullName, - _capturedSignature.Position, - _capturedSignature.Place); - - // Update counter - await UpdateSignatureCounterAsync(); - } - - [JSInvokable] - public async Task OnSignatureNavChanged() { - await UpdateSignatureCounterAsync(); - } - - [JSInvokable] - public async Task OnPageChangedBySignatureNav(int newPage) { - _currentPage = newPage; - await RenderSignatureButtonsAsync(); - } - - async Task UpdateSignatureCounterAsync() { - try { - var state = await JSRuntime.InvokeAsync("pdfViewer.getSignatureNavState"); - _totalSignatures = state.Total; - _signedSignatures = state.Signed; - _unsignedSignatures = state.Unsigned; - _currentSignatureIndex = state.CurrentIndex; // Current signature - await InvokeAsync(StateHasChanged); - } catch { - // Ignore errors during counter update - } - } - - async Task GoToPreviousSignature() { - await JSRuntime.InvokeVoidAsync("pdfViewer.goToPreviousSignature", _dotNetRef); - } - - async Task GoToNextSignature() { - await JSRuntime.InvokeVoidAsync("pdfViewer.goToNextSignature", _dotNetRef); - } - - void RestartSigning() { - // Force page reload to reset all signatures and state - Navigation.NavigateTo(Navigation.Uri, forceLoad: true); - } - - record SignatureNavState(int Total, int Signed, int Unsigned, int CurrentIndex, bool CanGoPrev, bool CanGoNext); - - string GetSignatureButtonTitle() - { - if (_signedSignatures > 0) - return "Unterschrift ist gesperrt – bitte Seite neu laden, um zu ändern"; - - return _capturedSignature is not null - ? "Unterschrift ändern" - : "Unterschrift erstellen"; - } - - void HandleSignatureChangeClick() - { - // If any signature is applied, button is disabled - this won't be called - // But just in case, do nothing - if (_signedSignatures > 0) - return; - - // No signatures applied - open popup normally - OpenSignaturePopup(); - } - - // Signature popup methods - void OpenSignaturePopup() { - // Open popup with current signature (edit mode) - _activeSignatureTab = SignatureTabDraw; - _signaturePopupVisible = true; - _popupValidationMessage = null; - - // Load current signature info into form fields - if (_capturedSignature is not null) - { - _signerFullName = _capturedSignature.FullName; - _signerPosition = _capturedSignature.Position; - _signaturePlace = _capturedSignature.Place; - } - } - - async Task OnPopupShownAsync() { - await InitializeActiveSignatureTabAsync(); - - // If there's an existing signature and we're on draw tab, load it to canvas - if (_capturedSignature is not null && _activeSignatureTab == SignatureTabDraw) - { - await Task.Delay(100); // Wait for canvas to be ready - await JSRuntime.InvokeVoidAsync("receiverSignature.loadExistingSignature", DrawCanvasId, _capturedSignature.DataUrl); - } - } - - async Task SetSignatureTabAsync(string tab) { - _activeSignatureTab = tab; - _popupValidationMessage = null; - await InvokeAsync(StateHasChanged); - await Task.Delay(50); - await InitializeActiveSignatureTabAsync(); - } - - async Task InitializeActiveSignatureTabAsync() { - if(_activeSignatureTab == SignatureTabDraw) { - await JSRuntime.InvokeVoidAsync("receiverSignature.initialize", DrawCanvasId); - } else if(_activeSignatureTab == SignatureTabText) { - await JSRuntime.InvokeVoidAsync("receiverSignature.initializeTyped", TypedCanvasId); - await RenderTypedSignatureAsync(); - } else { - await JSRuntime.InvokeVoidAsync("receiverSignature.initializeImage", ImageInputId, ImageCanvasId); - } - } - - async Task RenewSignatureAsync() { - _popupValidationMessage = null; - - if(_activeSignatureTab == SignatureTabDraw) { - await JSRuntime.InvokeVoidAsync("receiverSignature.clear", DrawCanvasId); - } else if(_activeSignatureTab == SignatureTabText) { - _typedSignatureText = string.Empty; - await JSRuntime.InvokeVoidAsync("receiverSignature.clearTyped", TypedCanvasId); - } else { - await JSRuntime.InvokeVoidAsync("receiverSignature.clearImage", ImageInputId, ImageCanvasId); - } - } - - async Task OnTypedSignatureChanged(Microsoft.AspNetCore.Components.ChangeEventArgs args) { - _typedSignatureText = args.Value?.ToString() ?? string.Empty; - await RenderTypedSignatureAsync(); - } - - async Task OnTypedSignatureFontChanged(Microsoft.AspNetCore.Components.ChangeEventArgs args) { - _typedSignatureFont = args.Value?.ToString() ?? _typedSignatureFont; - await RenderTypedSignatureAsync(); - } - - async Task RenderTypedSignatureAsync() { - await JSRuntime.InvokeVoidAsync("receiverSignature.renderTypedSignature", TypedCanvasId, _typedSignatureText, _typedSignatureFont); - } - - async Task SaveSignatureAsync() { - if (string.IsNullOrWhiteSpace(_signerFullName)) { - _popupValidationMessage = "Bitte geben Sie Vor- und Nachname ein."; - return; - } - if (string.IsNullOrWhiteSpace(_signaturePlace)) { - _popupValidationMessage = "Bitte geben Sie den Ort ein."; - return; - } - var signatureDataUrl = await GetActiveSignatureDataUrlAsync(); - if (string.IsNullOrWhiteSpace(signatureDataUrl)) { - _popupValidationMessage = "Die Unterschrift ist erforderlich."; - return; - } - - _popupValidationMessage = null; - _capturedSignature = new SignatureCaptureDto - { - DataUrl = signatureDataUrl, - FullName = _signerFullName.Trim(), - Position = _signerPosition.Trim(), - Place = _signaturePlace.Trim() - }; - _signaturePopupVisible = false; - - // Save to cache (fire-and-forget, ignore errors) - if (!string.IsNullOrWhiteSpace(EnvelopeKey)) - { - _ = Task.Run(async () => - { - try - { - await SignatureCacheService.SaveSignatureAsync(EnvelopeKey, _capturedSignature); - } - catch - { - // Ignore cache errors - } - }); - } - - await InvokeAsync(StateHasChanged); - Console.WriteLine($"Signature saved: {_signerFullName}, {_signaturePlace}"); - } - - async Task GetActiveSignatureDataUrlAsync() { - if(_activeSignatureTab == SignatureTabDraw) - return await JSRuntime.InvokeAsync("receiverSignature.getDataUrl", DrawCanvasId); - - if(_activeSignatureTab == SignatureTabText) { - await RenderTypedSignatureAsync(); - return await JSRuntime.InvokeAsync("receiverSignature.getTypedDataUrl", TypedCanvasId); - } - - return await JSRuntime.InvokeAsync("receiverSignature.getImageDataUrl", ImageCanvasId); - } - - async Task RenderThumbnailsAsync() { - try { - var delay = PdfViewerOptions.Value.ThumbnailRenderDelay; - - // Sequential rendering to avoid overwhelming the browser - for (int i = 1; i <= _totalPages; i++) { - await JSRuntime.InvokeVoidAsync("pdfViewer.renderThumbnail", i, $"thumb-canvas-{i}"); - - // Configurable delay between renders - if (i < _totalPages) { - await Task.Delay(delay); - } - } - } catch (Exception ex) { - // Thumbnail rendering is not critical - System.Diagnostics.Debug.WriteLine($"Thumbnail rendering error: {ex.Message}"); - } - } - - // Resizable splitter methods - void OnSplitterMouseDown(MouseEventArgs e) { - _isResizing = true; - _resizeStartX = (int)e.ClientX; - _resizeStartWidth = _thumbnailWidth; - - // Add resizing class to body to prevent text selection - _ = JSRuntime.InvokeVoidAsync("eval", "document.body.classList.add('resizing')"); - _ = JSRuntime.InvokeVoidAsync("pdfViewer.startResize"); - } - - [JSInvokable] - public async Task OnSplitterMouseMove(int clientX) { - if (!_isResizing) return; - - var delta = clientX - _resizeStartX; - var newWidth = _resizeStartWidth + delta; - - // Clamp to min/max - _thumbnailWidth = Math.Clamp(newWidth, MinThumbnailWidth, MaxThumbnailWidth); - - await InvokeAsync(StateHasChanged); - } - - [JSInvokable] - public async Task OnSplitterMouseUp() { - if (!_isResizing) return; - - _isResizing = false; - - // Remove resizing class from body - await JSRuntime.InvokeVoidAsync("eval", "document.body.classList.remove('resizing')"); - - // Save preference to localStorage - await JSRuntime.InvokeVoidAsync("localStorage.setItem", "envelopeViewer_thumbnailWidth", _thumbnailWidth.ToString()); - - await InvokeAsync(StateHasChanged); - } - - public async ValueTask DisposeAsync() { - if (_pdfLoaded) { - try { - await JSRuntime.InvokeVoidAsync("pdfViewer.dispose"); - } catch { - // Ignore errors during disposal - } - } - _dotNetRef?.Dispose(); - } -} diff --git a/EnvelopeGenerator.ReceiverUI/Pages/EnvelopeReceiverPage_DxPdfViewer.razor b/EnvelopeGenerator.ReceiverUI/Pages/EnvelopeReceiverPage_DxPdfViewer.razor deleted file mode 100644 index 86eb1943..00000000 --- a/EnvelopeGenerator.ReceiverUI/Pages/EnvelopeReceiverPage_DxPdfViewer.razor +++ /dev/null @@ -1,112 +0,0 @@ -@page "/envelope/DxPdfViewer" -@using System.IO -@using DevExpress.Blazor -@using System.Reflection - - - - - -
- - Drag and Drop File Hereor - -
- - - -@if (DocumentContent != null && DocumentContent.Length > 0) -{ -
- PDF loaded: @DocumentContent.Length bytes -
- -} -else -{ -
- Please upload a PDF file to view it. -
-} - -@code { - readonly List ALLOWED_FILE_TYPES = new List { ".pdf" }; - DxFileInput fileInput; - byte[] DocumentContent { get; set; } - protected override void OnInitialized() - { - Assembly assembly = Assembly.GetExecutingAssembly(); - Stream stream = assembly.GetManifestResourceStream("EnvelopeGenerator.ReceiverUI.Resources.Invoice.pdf"); - if (stream != null) - { - using (stream) - using (var binaryReader = new BinaryReader(stream)) - DocumentContent = binaryReader.ReadBytes((int)stream.Length); - } - } - protected async Task OnFilesUploading(FilesUploadingEventArgs args) - { - using (MemoryStream stream = new MemoryStream()) - { - IFileInputSelectedFile file = args.Files[0]; - await file.OpenReadStream(file.Size).CopyToAsync(stream); - DocumentContent = stream.ToArray(); - await InvokeAsync(StateHasChanged); - } - } -} - diff --git a/EnvelopeGenerator.ReceiverUI/Pages/EnvelopeReceiverPage_DxReportViewer.razor b/EnvelopeGenerator.ReceiverUI/Pages/EnvelopeReceiverPage_DxReportViewer.razor deleted file mode 100644 index 7c2de031..00000000 --- a/EnvelopeGenerator.ReceiverUI/Pages/EnvelopeReceiverPage_DxReportViewer.razor +++ /dev/null @@ -1,49 +0,0 @@ -@page "/envelope/{EnvelopeKey}/DxReportViewer" -@using XtraReport = DevExpress.XtraReports.UI.XtraReport -@using DevExpress.Blazor.Reporting -@using Microsoft.Extensions.Options -@using EnvelopeGenerator.ReceiverUI.Options -@using EnvelopeGenerator.ReceiverUI.Services -@inject InMemoryReportStorageWebExtension ReportStorage -@inject DocumentService DocumentService -@inject IOptions AppOptions - - - - - -@if (_report is not null) { - -} - -@code { - [Parameter] public string EnvelopeKey { get; init; } = null!; - - XtraReport? _report = null; - - protected override async Task OnInitializedAsync() - { - _report = await CreateReport(); - } - - async Task CreateReport() - { - if (AppOptions.Value.UsePredefinedReports) - { - return PredefinedReports.ReportsFactory.GetReport("LargeDatasetReport"); - } - else - { - - var pdfBytes = await DocumentService.GetDocumentAsync(EnvelopeKey); - if (pdfBytes is null || pdfBytes.Length == 0) - throw new InvalidOperationException($"No PDF bytes found for EnvelopeKey: {EnvelopeKey}"); - - var report = new XtraReport(); - var detail = new DevExpress.XtraReports.UI.DetailBand(); - report.Bands.Add(detail); - detail.Controls.Add(new DevExpress.XtraReports.UI.XRPdfContent { Source = pdfBytes, GenerateOwnPages = true }); - return report; - } - } -} \ No newline at end of file diff --git a/EnvelopeGenerator.ReceiverUI/Pages/EnvelopeReceiverPage_embed.razor b/EnvelopeGenerator.ReceiverUI/Pages/EnvelopeReceiverPage_embed.razor deleted file mode 100644 index 83834158..00000000 --- a/EnvelopeGenerator.ReceiverUI/Pages/EnvelopeReceiverPage_embed.razor +++ /dev/null @@ -1,123 +0,0 @@ -@page "/envelope/Embed" -@using System.IO -@using DevExpress.Blazor -@using System.Reflection - - - - - -
- - Drag and Drop File Hereor - -
- - - -@if (DocumentContent != null && DocumentContent.Length > 0) -{ -
- PDF loaded: @DocumentContent.Length bytes -
- -} -else -{ -
- Please upload a PDF file to view it. -
-} - -@code { - readonly List ALLOWED_FILE_TYPES = new List { ".pdf" }; - DxFileInput fileInput; - byte[] DocumentContent { get; set; } - - protected override void OnInitialized() - { - Assembly assembly = Assembly.GetExecutingAssembly(); - Stream stream = assembly.GetManifestResourceStream("EnvelopeGenerator.ReceiverUI.Resources.Invoice.pdf"); - if (stream != null) - { - using (stream) - using (var binaryReader = new BinaryReader(stream)) - DocumentContent = binaryReader.ReadBytes((int)stream.Length); - } - } - - protected async Task OnFilesUploading(FilesUploadingEventArgs args) - { - using (MemoryStream stream = new MemoryStream()) - { - IFileInputSelectedFile file = args.Files[0]; - await file.OpenReadStream(file.Size).CopyToAsync(stream); - DocumentContent = stream.ToArray(); - await InvokeAsync(StateHasChanged); - } - } - - private string GetPdfDataUrl() - { - if (DocumentContent == null || DocumentContent.Length == 0) - return string.Empty; - - string base64 = Convert.ToBase64String(DocumentContent); - return $"data:application/pdf;base64,{base64}#toolbar=0&navpanes=0&scrollbar=1"; - } -} - diff --git a/EnvelopeGenerator.ReceiverUI/Pages/EnvelopeSenderPage.razor b/EnvelopeGenerator.ReceiverUI/Pages/EnvelopeSenderPage.razor deleted file mode 100644 index 3f9017a6..00000000 --- a/EnvelopeGenerator.ReceiverUI/Pages/EnvelopeSenderPage.razor +++ /dev/null @@ -1,442 +0,0 @@ -@page "/sender" -@attribute [Microsoft.AspNetCore.Authorization.Authorize(Policy = "Sender")] - -@using System.Text.Json -@using EnvelopeGenerator.Domain.Constants -@using EnvelopeGenerator.ReceiverUI.Models -@using DevExpress.Blazor -@using EnvelopeGenerator.ReceiverUI.Services -@inject EnvelopeGenerator.ReceiverUI.Services.EnvelopeService EnvelopeService -@inject EnvelopeGenerator.ReceiverUI.Services.AuthService AuthService -@inject NavigationManager Navigation -@inject IJSRuntime JSRuntime -@inject AppVersionService AppVersion - - - - - -
-
-
-
- -
Umschlag-Übersicht
-
- -
- - - - - - - - - -
-
-
- -
- @if (_isLoading && _allEnvelopes == null) { -
-
-
- Lädt... -
-

Umschläge werden geladen...

-
-
- } else if (_errorMessage != null) { -
-
-
- - - - -
-
Fehler beim Laden der Umschläge
-

@_errorMessage

-
-
-
-
- } else { -
-
- - -
- -
- @if (_activeTab == "active") { - - - - - @((cellContext.DataItem as EnvelopeDto)?.Id) - - - - - @((cellContext.DataItem as EnvelopeDto)?.Title) - - - - - @{ - var envelope = cellContext.DataItem as EnvelopeDto; - if (envelope != null) { - var statusInfo = GetStatusInfo(envelope.Status); -
- - @statusInfo.Label -
- } - } -
-
- - - @{ - var envelope = cellContext.DataItem as EnvelopeDto; - if (envelope != null) { - var receivers = envelope.EnvelopeReceivers ?? new List(); - var signed = receivers.Count(r => r.Signed); - var total = receivers.Count; -
- - @signed / @total unterschrieben - - @if (total > 0) { -
-
-
- } -
- } - } -
-
-
- -
-
Empfänger
- @{ - var envelope = detailContext.DataItem as EnvelopeDto; - if (envelope?.EnvelopeReceivers?.Any() == true) { -
- @foreach (var receiver in envelope.EnvelopeReceivers) { -
- - @if (receiver.Signed) { - - - - Unterschrieben - } else { - - - - - Ausstehend - } - -
- @receiver.Name - @receiver.Email -
-
- } -
- } else { -

Keine Empfänger

- } - } -
-
-
- } else { - - - - - @((cellContext.DataItem as EnvelopeDto)?.Id) - - - - - @((cellContext.DataItem as EnvelopeDto)?.Title) - - - - - @{ - var envelope = cellContext.DataItem as EnvelopeDto; - if (envelope != null) { - var statusInfo = GetStatusInfo(envelope.Status); -
- - @statusInfo.Label -
- } - } -
-
- - - @{ - var envelope = cellContext.DataItem as EnvelopeDto; - if (envelope != null) { - var receivers = envelope.EnvelopeReceivers ?? new List(); - var signed = receivers.Count(r => r.Signed); - var total = receivers.Count; -
- - @signed / @total unterschrieben - - @if (total > 0) { -
-
-
- } -
- } - } -
-
-
- -
-
Empfänger
- @{ - var envelope = detailContext.DataItem as EnvelopeDto; - if (envelope?.EnvelopeReceivers?.Any() == true) { -
- @foreach (var receiver in envelope.EnvelopeReceivers) { -
- - @if (receiver.Signed) { - - - - Unterschrieben - } else { - - - - - Ausstehend - } - -
- @receiver.Name - @receiver.Email -
-
- } -
- } else { -

Keine Empfänger

- } - } -
-
-
- } -
-
- } -
-
- -@code { - private IEnumerable? _allEnvelopes; - private IEnumerable? _activeEnvelopes; - private IEnumerable? _completedEnvelopes; - private EnvelopeDto? _selectedEnvelope; - private string _activeTab = "active"; - private bool _isLoading = true; - private bool _isLoggingOut = false; - private string? _errorMessage; - private DxGrid? _gridActive; - private DxGrid? _gridCompleted; - - protected override async Task OnInitializedAsync() - { - var hasAccess = await AuthService.CheckSenderAsync(); - if (!hasAccess) - { - Navigation.NavigateTo($"/sender/login"); - return; - } - - await LoadEnvelopesAsync(); - } - - async Task LoadEnvelopesAsync() - { - _isLoading = true; - _errorMessage = null; - await InvokeAsync(StateHasChanged); - - try - { - _allEnvelopes = await EnvelopeService.GetAsync() ?? []; - - // Split into active and completed based on status - var envelopes = _allEnvelopes.ToList(); - _activeEnvelopes = envelopes.Where(e => ((EnvelopeStatus)e.Status).IsActive()).ToList(); - _completedEnvelopes = envelopes.Where(e => ((EnvelopeStatus)e.Status).IsCompleted()).ToList(); - - await JSRuntime.InvokeVoidAsync("console.log", $"Loaded {_activeEnvelopes.Count()} active and {_completedEnvelopes.Count()} completed envelopes"); - } - catch (Exception ex) - { - _errorMessage = ex.Message; - await JSRuntime.InvokeVoidAsync("console.error", "Fehler beim Laden der Umschläge:", ex.ToString()); - } - finally - { - _isLoading = false; - await InvokeAsync(StateHasChanged); - } - } - - async Task RefreshEnvelopes() - { - await LoadEnvelopesAsync(); - } - - void CreateEnvelope() - { - // TODO: Navigate to envelope creation page - JSRuntime.InvokeVoidAsync("console.log", "Create envelope clicked - not yet implemented"); - } - - void EditEnvelope() - { - if (_selectedEnvelope == null) return; - // TODO: Navigate to envelope editor - JSRuntime.InvokeVoidAsync("console.log", $"Edit envelope {_selectedEnvelope.Id} clicked - not yet implemented"); - } - - void DeleteEnvelope() - { - if (_selectedEnvelope == null) return; - // TODO: Show delete confirmation dialog - JSRuntime.InvokeVoidAsync("console.log", $"Delete envelope {_selectedEnvelope.Id} clicked - not yet implemented"); - } - - async Task LogoutAsync() - { - _isLoggingOut = true; - await InvokeAsync(StateHasChanged); - await AuthService.LogoutSenderAsync(); - Navigation.NavigateTo("/sender/login", forceLoad: true); - } - - bool IsEnvelopeSent(EnvelopeDto envelope) - { - var status = (EnvelopeStatus)envelope.Status; - return status >= EnvelopeStatus.EnvelopeQueued; - } - - (string Label, string CssClass, string DotColor) GetStatusInfo(int statusCode) - { - var status = (EnvelopeStatus)statusCode; - return status switch - { - EnvelopeStatus.EnvelopePartlySigned => ("Teilweise unterschrieben", "partly-signed", "green"), - EnvelopeStatus.EnvelopeQueued => ("In Warteschlange", "queued", "orange"), - EnvelopeStatus.EnvelopeSent => ("Gesendet", "sent", "orange"), - EnvelopeStatus.EnvelopeCompletelySigned => ("Vollständig unterschrieben", "completed", "green"), - EnvelopeStatus.EnvelopeDeleted => ("Gelöscht", "deleted", "red"), - EnvelopeStatus.EnvelopeRejected => ("Abgelehnt", "rejected", "red"), - EnvelopeStatus.EnvelopeWithdrawn => ("Zurückgezogen", "withdrawn", "red"), - EnvelopeStatus.EnvelopeCreated => ("Erstellt", "created", "blue"), - EnvelopeStatus.EnvelopeSaved => ("Gespeichert", "saved", "blue"), - _ => ("Unbekannt", "unknown", "blue") - }; - } - - void OnCustomizeElement(GridCustomizeElementEventArgs e) - { - // Future: Add custom row coloring based on status if needed - } - - void OnSelectedEnvelopeChanged(object envelope) - { - _selectedEnvelope = envelope as EnvelopeDto; - } -} \ No newline at end of file diff --git a/EnvelopeGenerator.ReceiverUI/Pages/Example/DocumentViewer.razor b/EnvelopeGenerator.ReceiverUI/Pages/Example/DocumentViewer.razor deleted file mode 100644 index 9313b9a5..00000000 --- a/EnvelopeGenerator.ReceiverUI/Pages/Example/DocumentViewer.razor +++ /dev/null @@ -1,5 +0,0 @@ -@page "/example/documentviewer" - - - - \ No newline at end of file diff --git a/EnvelopeGenerator.ReceiverUI/Pages/Example/ReportDesigner.razor b/EnvelopeGenerator.ReceiverUI/Pages/Example/ReportDesigner.razor deleted file mode 100644 index 24a1906a..00000000 --- a/EnvelopeGenerator.ReceiverUI/Pages/Example/ReportDesigner.razor +++ /dev/null @@ -1,19 +0,0 @@ -@page "/example/sender" -@using DevExpress.DataAccess.Json; -@using EnvelopeGenerator.ReceiverUI.Services; - - - - - -@code { - Dictionary DataSources = new Dictionary(); - protected override async Task OnInitializedAsync() { - await base.OnInitializedAsync(); - var connection = CustomDataSourceWizardJsonDataConnectionStorage.GetDefaultConnection(); - JsonDataSource jsonDataSource = new JsonDataSource(); - jsonDataSource.JsonSource = connection.GetJsonSource(); - await jsonDataSource.FillAsync(); - DataSources.Add("Northwind", jsonDataSource); - } -} \ No newline at end of file diff --git a/EnvelopeGenerator.ReceiverUI/Pages/Example/ReportViewer.razor b/EnvelopeGenerator.ReceiverUI/Pages/Example/ReportViewer.razor deleted file mode 100644 index 42bfc0d7..00000000 --- a/EnvelopeGenerator.ReceiverUI/Pages/Example/ReportViewer.razor +++ /dev/null @@ -1,750 +0,0 @@ -@page "/example/receiver/{EnvelopeKey}" -@page "/example/report-viewer/{EnvelopeKey}" -@using System.Drawing -@using DevExpress.Blazor -@using DevExpress.Drawing -@using DevExpress.Utils -@using DevExpress.XtraPrinting -@using DevExpress.XtraPrinting.Drawing -@using EnvelopeGenerator.Application.Common.Dto -@using Microsoft.JSInterop -@using XtraReport = DevExpress.XtraReports.UI.XtraReport -@using BottomMarginBand = DevExpress.XtraReports.UI.BottomMarginBand -@using XRLabel = DevExpress.XtraReports.UI.XRLabel -@using XRPictureBox = DevExpress.XtraReports.UI.XRPictureBox -@using XRControl = DevExpress.XtraReports.UI.XRControl -@using ImageSizeMode = DevExpress.XtraPrinting.ImageSizeMode -@using EnvelopeGenerator.ReceiverUI.Services -@using DevExpress.Blazor.Reporting -@using Microsoft.Extensions.Options -@using EnvelopeGenerator.ReceiverUI.Options -@using EnvelopeGenerator.ReceiverUI.Models -@implements IDisposable -@inject IJSRuntime JSRuntime -@inject AnnotationService AnnotationService -@inject IOptions AppOptions -@inject NavigationManager Navigation -@inject InMemoryReportStorageWebExtension ReportStorage -@inject EnvelopeGenerator.ReceiverUI.Services.DocumentService DocumentService -@inject EnvelopeGenerator.ReceiverUI.Services.AuthService AuthService -@inject EnvelopeGenerator.ReceiverUI.Services.EnvelopeReceiverService EnvelopeReceiverService - - - - -
- -
- -@* ?? Envelope info header ???????????????????????????????????????????????? *@ -@if (_envelopeReceiver is not null) { -
-
-
- - - -
-
@(_envelopeReceiver.Envelope?.Title ?? "Dokument")
- @if (!string.IsNullOrWhiteSpace(_envelopeReceiver.Envelope?.User?.FullName) || !string.IsNullOrWhiteSpace(_envelopeReceiver.Envelope?.User?.Email)) { -
- Von - @if (!string.IsNullOrWhiteSpace(_envelopeReceiver.Envelope?.User?.FullName)) { - @_envelopeReceiver.Envelope!.User!.FullName - } - @if (!string.IsNullOrWhiteSpace(_envelopeReceiver.Envelope?.User?.Email)) { - <@_envelopeReceiver.Envelope!.User!.Email> - } -  ·  @_envelopeReceiver.Envelope?.AddedWhen.ToString("dd.MM.yyyy") -
- } -
-
-
- @if (!string.IsNullOrWhiteSpace(_envelopeReceiver.Name)) { - - - - - @_envelopeReceiver.Name - - } - @if (!string.IsNullOrWhiteSpace(_envelopeReceiver.CompanyName)) { - - - - - @_envelopeReceiver.CompanyName - - } - @if (!string.IsNullOrWhiteSpace(_envelopeReceiver.JobTitle)) { - @_envelopeReceiver.JobTitle - } - @{ - var docElements = _envelopeReceiver.Envelope?.Documents?.FirstOrDefault()?.Elements; - int sigCount = docElements?.Count() ?? _annotations.Count; - } - @if (sigCount > 0) { - - - - - @sigCount @(sigCount == 1 ? "Unterschriftsfeld" : "Unterschriftsfelder") - - } -
-
- @if (!string.IsNullOrWhiteSpace(_envelopeReceiver.Envelope?.Message)) { -
@_envelopeReceiver.Envelope!.Message
- } - @if (!string.IsNullOrWhiteSpace(_envelopeReceiver.PrivateMessage)) { -
- - - - @_envelopeReceiver.PrivateMessage -
- } -
-} - -@* ?? Signature action bar ???????????????????????????????????????????????? *@ -
-
- - - @if (_annotations.Count > 0 && !SignatureApplied) { -
-
-
-
- - @_checkedAnnotations.Count / @_annotations.Count - Seite@(AnnotationPages.Count() == 1 ? "" : "n") @string.Join(",", AnnotationPages) - - @if (_capturedSignature is null) { - Zuerst Unterschrift erstellen - } else if (_checkedAnnotations.Count == _annotations.Count) { - ✓ Wird angewendet… - } -
- } - - @if (!string.IsNullOrWhiteSpace(SignatureValidationMessage)) { - @SignatureValidationMessage - } - @if (SignatureApplied) { - - - - - Unterschrift angewendet - - } - -
- - @if (!string.IsNullOrWhiteSpace(EnvelopeKey)) { - - } -
-
-
- -
- - - - - - @if(ActiveSignatureTab == SignatureTabDraw) { -

Bitte unterschreiben Sie im folgenden Feld.

- - } else if(ActiveSignatureTab == SignatureTabText) { -

Geben Sie Ihre Unterschrift als Text ein und waehlen Sie eine Schriftart.

-
-
- -
-
- -
-
- - } else { -

Laden Sie ein Bild Ihrer Unterschrift hoch.

- - - } - - -
-

Bitte geben Sie die folgenden Angaben ein. Das Datum wird automatisch hinzugefuegt.

-
-
- - -
-
- - -
-
- - -
-
-
- - @if(!string.IsNullOrWhiteSpace(PopupValidationMessage)) { -
@PopupValidationMessage
- } -
- -
- - -
-
-
- -
-@if(Report is not null) { - -} -
- -
- -@code { - - const string SignatureTabDraw = "draw"; - const string SignatureTabText = "text"; - const string SignatureTabImage = "image"; - const string DrawCanvasId = "receiver-signature-pad"; - const string TypedCanvasId = "receiver-typed-signature-pad"; - const string ImageInputId = "receiver-signature-image-input"; - const string ImageCanvasId = "receiver-image-signature-pad"; - - readonly (string Text, string Value)[] TypedSignatureFonts = { - ("Brush Script", "'Brush Script MT', cursive"), - ("Segoe Script", "'Segoe Script', cursive"), - ("Lucida Handwriting", "'Lucida Handwriting', cursive"), - ("Comic Sans", "'Comic Sans MS', cursive"), - ("Cursive", "cursive") -}; - - [Parameter] public string EnvelopeKey { get; set; } = string.Empty; - - DxReportViewer? reportViewer; - XtraReport? Report; - bool SignatureApplied; - bool SignaturePopupVisible; - string? SignatureValidationMessage; - string? PopupValidationMessage; - string ActiveSignatureTab = SignatureTabDraw; - string TypedSignatureText = string.Empty; - string TypedSignatureFont = "'Brush Script MT', cursive"; - string SignerFullName = string.Empty; - string SignerPosition = string.Empty; - string SignaturePlace = string.Empty; - int ViewerKey; - bool IsLoggingOut; - - IReadOnlyList _annotations = []; - IEnumerable AnnotationPages => _annotations - .Select(a => a.Page ?? throw new InvalidOperationException($"Annotation page is missing for annotation ID {a.Id}. Annotation details: X={a.X}, Y={a.Y}")) - .Distinct() - .OrderBy(p => p); - EnvelopeReceiverDto? _envelopeReceiver; - record SignatureCapture(string DataUrl, string FullName, string Position, string Place); - SignatureCapture? _capturedSignature; - byte[]? _basePdfBytes; - // annotation IDs the user has checked via overlay checkboxes - readonly HashSet _checkedAnnotations = []; - DotNetObjectReference? _dotNetRef; - int _lastOverlayViewerKey = -1; - - async Task LogoutAsync() { - if (string.IsNullOrWhiteSpace(EnvelopeKey) || IsLoggingOut) return; - IsLoggingOut = true; - await InvokeAsync(StateHasChanged); - await AuthService.LogoutEnvelopeReceiverAsync(EnvelopeKey); - Navigation.NavigateTo($"/login/{Uri.EscapeDataString(EnvelopeKey)}", forceLoad: true); - } - - protected override async Task OnInitializedAsync() { - - // ? REDIRECT: /receiver/{key} -> /envelope/{key} (NEW PDF.js viewer) - if (!string.IsNullOrWhiteSpace(EnvelopeKey)) { - Navigation.NavigateTo($"/envelope/{Uri.EscapeDataString(EnvelopeKey)}", forceLoad: false); - return; - } - - if (!string.IsNullOrWhiteSpace(EnvelopeKey)) { - var hasAccess = await AuthService.CheckEnvelopeAccessAsync(EnvelopeKey); - if (!hasAccess) { - Navigation.NavigateTo($"/login/{Uri.EscapeDataString(EnvelopeKey)}"); - return; - } - else - { - ActiveSignatureTab = SignatureTabDraw; - SignaturePopupVisible = true; - SignatureValidationMessage = null; - PopupValidationMessage = null; - } - } - - _annotations = await AnnotationService.GetAnnotationsAsync(EnvelopeKey); - - try { - _envelopeReceiver = await EnvelopeReceiverService.GetAsync(EnvelopeKey); - } catch (HttpRequestException ex) { - // Log error but continue - UI will handle null envelope receiver gracefully - Console.WriteLine($"Failed to load envelope receiver: {ex.Message}"); - } - - if (!AppOptions.Value.UsePredefinedReports && !string.IsNullOrWhiteSpace(EnvelopeKey)) { - try { - var pdfBytes = await DocumentService.GetDocumentAsync(EnvelopeKey); - if (pdfBytes is { Length: > 0 }) - _basePdfBytes = pdfBytes; - } catch (HttpRequestException ex) { - // Log error but continue - will use predefined report instead - Console.WriteLine($"Failed to load document: {ex.Message}"); - } - } - - var initialReport = BuildFreshBaseReport(); - Report = initialReport; - } - - protected override async Task OnAfterRenderAsync(bool firstRender) { - if (firstRender) - _dotNetRef = DotNetObjectReference.Create(this); - - - if (Report is not null && _annotations.Count > 0 - && _capturedSignature is not null && !SignatureApplied - && _lastOverlayViewerKey != ViewerKey) { - _lastOverlayViewerKey = ViewerKey; - await JSRuntime.InvokeVoidAsync( - "receiverSignature.installAnnotationCheckboxes", - _annotations, _checkedAnnotations.ToArray(), _dotNetRef); - } - } - - [JSInvokable] - public async Task OnAnnotationToggled(long annotationId, bool isChecked) { - if (isChecked) - _checkedAnnotations.Add(annotationId); - else - _checkedAnnotations.Remove(annotationId); - await InvokeAsync(StateHasChanged); - - if (_capturedSignature is not null - && !SignatureApplied - && _annotations.Count > 0 - && _checkedAnnotations.Count == _annotations.Count) { - // K?sa bekleme: kullan?c? son tick'in görsel feedback'ini görsün - await Task.Delay(400); - await SubmitSignaturesAsync(); - } - } - - void OpenSignaturePopupAsync() { - ActiveSignatureTab = SignatureTabDraw; - SignaturePopupVisible = true; - SignatureValidationMessage = null; - PopupValidationMessage = null; - } - - async Task OnPopupShownAsync() { - await InitializeActiveSignatureTabAsync(); - } - - async Task SetSignatureTabAsync(string tab) { - ActiveSignatureTab = tab; - PopupValidationMessage = null; - await InvokeAsync(StateHasChanged); - await Task.Delay(50); - await InitializeActiveSignatureTabAsync(); - } - - async Task InitializeActiveSignatureTabAsync() { - if(ActiveSignatureTab == SignatureTabDraw) { - await JSRuntime.InvokeVoidAsync("receiverSignature.initialize", DrawCanvasId); - } else if(ActiveSignatureTab == SignatureTabText) { - await JSRuntime.InvokeVoidAsync("receiverSignature.initializeTyped", TypedCanvasId); - await RenderTypedSignatureAsync(); - } else { - await JSRuntime.InvokeVoidAsync("receiverSignature.initializeImage", ImageInputId, ImageCanvasId); - } - } - - async Task RenewSignatureAsync() { - PopupValidationMessage = null; - - if(ActiveSignatureTab == SignatureTabDraw) { - await JSRuntime.InvokeVoidAsync("receiverSignature.clear", DrawCanvasId); - } else if(ActiveSignatureTab == SignatureTabText) { - TypedSignatureText = string.Empty; - await JSRuntime.InvokeVoidAsync("receiverSignature.clearTyped", TypedCanvasId); - } else { - await JSRuntime.InvokeVoidAsync("receiverSignature.clearImage", ImageInputId, ImageCanvasId); - } - } - - void CloseSignaturePopup() { - PopupValidationMessage = null; - SignaturePopupVisible = false; - } - - async Task OnTypedSignatureChanged(Microsoft.AspNetCore.Components.ChangeEventArgs args) { - TypedSignatureText = args.Value?.ToString() ?? string.Empty; - await RenderTypedSignatureAsync(); - } - - async Task OnTypedSignatureFontChanged(Microsoft.AspNetCore.Components.ChangeEventArgs args) { - TypedSignatureFont = args.Value?.ToString() ?? TypedSignatureFont; - await RenderTypedSignatureAsync(); - } - - async Task RenderTypedSignatureAsync() { - await JSRuntime.InvokeVoidAsync("receiverSignature.renderTypedSignature", TypedCanvasId, TypedSignatureText, TypedSignatureFont); - } - - async Task SaveSignatureAsync() { - if (string.IsNullOrWhiteSpace(SignerFullName)) { - PopupValidationMessage = "Bitte geben Sie Vor- und Nachname ein."; - return; - } - if (string.IsNullOrWhiteSpace(SignaturePlace)) { - PopupValidationMessage = "Bitte geben Sie den Ort ein."; - return; - } - var signatureDataUrl = await GetActiveSignatureDataUrlAsync(); - if (string.IsNullOrWhiteSpace(signatureDataUrl)) { - PopupValidationMessage = "Die Unterschrift ist fuer den PDF-Export erforderlich."; - return; - } - - PopupValidationMessage = null; - SignatureValidationMessage = null; - _capturedSignature = new(signatureDataUrl, SignerFullName.Trim(), SignerPosition.Trim(), SignaturePlace.Trim()); - - // If no annotations, apply immediately (no checkbox step needed) - if (_annotations.Count == 0) { - var freshReport = BuildFreshBaseReport(); - AddSignature(freshReport, _capturedSignature.DataUrl, _capturedSignature.FullName, _capturedSignature.Position, _capturedSignature.Place); - Report = freshReport; - SignatureApplied = true; - SignaturePopupVisible = false; - ViewerKey++; - return; - } - - // Close popup; checkboxes will appear on the PDF via OnAfterRenderAsync - SignaturePopupVisible = false; - _lastOverlayViewerKey = -1; // force overlay reinstall - await InvokeAsync(StateHasChanged); - } - - async Task SubmitSignaturesAsync() { - if (_checkedAnnotations.Count == 0) { - SignatureValidationMessage = "Bitte markieren Sie mindestens ein Unterschriftsfeld im Dokument."; - return; - } - if (_checkedAnnotations.Count < _annotations.Count) { - SignatureValidationMessage = $"Bitte markieren Sie alle {_annotations.Count} Unterschriftsfelder. Noch {_annotations.Count - _checkedAnnotations.Count} offen."; - return; - } - - SignatureValidationMessage = null; - var freshReport = BuildFreshBaseReport(); - foreach (var ann in _annotations) - AddSignatureAtAnnotation(freshReport, ann, _capturedSignature!.DataUrl, _capturedSignature.FullName, _capturedSignature.Position, _capturedSignature.Place); - - Report = freshReport; - SignatureApplied = true; - ViewerKey++; - await InvokeAsync(StateHasChanged); - } - - async Task GetActiveSignatureDataUrlAsync() { - if(ActiveSignatureTab == SignatureTabDraw) - return await JSRuntime.InvokeAsync("receiverSignature.getDataUrl", DrawCanvasId); - - if(ActiveSignatureTab == SignatureTabText) { - await RenderTypedSignatureAsync(); - return await JSRuntime.InvokeAsync("receiverSignature.getTypedDataUrl", TypedCanvasId); - } - - return await JSRuntime.InvokeAsync("receiverSignature.getImageDataUrl", ImageCanvasId); - } - - async Task ExportSignedPdfAsync() { - if(!SignatureApplied || Report is null) { - SignatureValidationMessage = "Bitte fuegen Sie die Unterschrift zuerst zum Bericht hinzu."; - return; - } - - try { - SignatureValidationMessage = null; - await reportViewer!.ExportToAsync(ExportFormat.Pdf); - } catch(Exception) { - SignatureValidationMessage = "Das signierte PDF konnte nicht exportiert werden. Bitte laden Sie die Seite neu und versuchen Sie es erneut."; - } - } - - XtraReport BuildFreshBaseReport() { - if (_basePdfBytes is { Length: > 0 }) { - var report = new XtraReport(); - var detail = new DevExpress.XtraReports.UI.DetailBand(); - report.Bands.Add(detail); - detail.Controls.Add(new DevExpress.XtraReports.UI.XRPdfContent { Source = _basePdfBytes, GenerateOwnPages = true }); - return report; - } - return CreateReportInstance(); - } - - static void AddAnnotationPlaceholders(XtraReport report, IReadOnlyList annotations) { - var bottomMargin = report.Bands.OfType().FirstOrDefault(); - if (bottomMargin is null) { - bottomMargin = new BottomMarginBand(); - report.Bands.Add(bottomMargin); - } - - const float sigWidth = 230F; - const float sigHeight = 154F; - const float bottomPad = 6F; - const float defaultTopPad = 8F; - const float maxBandHeight = 210F; - - float requiredHeight = defaultTopPad + sigHeight + bottomPad; - bottomMargin.HeightF = Math.Min(maxBandHeight, Math.Max(bottomMargin.HeightF, requiredHeight)); - float topPad = Math.Max(0F, bottomMargin.HeightF - bottomPad - sigHeight); - - foreach (var ann in annotations) { - float sigX = (float)(ann.X); - var annotId = ann.Id.ToString(); - - var placeholder = new XRLabel { - Name = $"receiverSignaturePlaceholder_{annotId}", - Text = "\u270e Bitte unterschreiben", - BoundsF = new RectangleF(sigX, topPad, sigWidth, sigHeight), - Borders = BorderSide.All, - BorderColor = System.Drawing.Color.FromArgb(230, 81, 0), - BackColor = System.Drawing.Color.FromArgb(30, 255, 236, 153), - Font = new DXFont("Open Sans", 10F, DXFontStyle.Regular), - ForeColor = System.Drawing.Color.FromArgb(94, 38, 0), - TextAlignment = TextAlignment.MiddleCenter - }; - - bottomMargin.Controls.Add(placeholder); - } - } - - XtraReport CreateReportInstance() { - return ReportStorage.TryGetReport("LargeDatasetReport", out var savedReport) - ? savedReport - : PredefinedReports.ReportsFactory.GetReport("LargeDatasetReport"); - } - - static void AddSignature(XtraReport report, string signatureDataUrl, string signerFullName, string signerPosition, string signaturePlace) { - var imageBytes = Convert.FromBase64String(signatureDataUrl[(signatureDataUrl.IndexOf(',') + 1)..]); - using var imageStream = new MemoryStream(imageBytes); - var imageSource = new ImageSource(DXImage.FromStream(imageStream)); - var bottomMargin = report.Bands.OfType().FirstOrDefault(); - - if(bottomMargin is null) { - bottomMargin = new BottomMarginBand(); - report.Bands.Add(bottomMargin); - } - - RemoveExistingSignature(bottomMargin); - - // Layout constants - const float sigX = 390F; - const float sigWidth = 230F; - const float sigImgHeight = 70F; - const float infoHeight = 65F; // up to 4 lines at 8pt - const float innerGap = 5F; - const float bottomPad = 6F; - const float defaultTopPad = 8F; - const float maxBandHeight = 210F; - - float requiredHeight = defaultTopPad + sigImgHeight + innerGap + infoHeight + bottomPad; - - // Grow band if needed, but cap at maxBandHeight to avoid overlapping page content - bottomMargin.HeightF = Math.Min(maxBandHeight, Math.Max(bottomMargin.HeightF, requiredHeight)); - - // If band is tighter than required, compress top padding so content still fits - float topPad = Math.Max(0F, bottomMargin.HeightF - bottomPad - infoHeight - innerGap - sigImgHeight); - - float imageY = topPad; - float labelY = imageY + sigImgHeight + innerGap; - - var signatureInformation = string.IsNullOrWhiteSpace(signerPosition) - ? $"{signerFullName}\n{signaturePlace}, {DateTime.Now:d}" - : $"{signerFullName}\n{signerPosition}\n{signaturePlace}, {DateTime.Now:d}"; - - var signature = new XRPictureBox { - Name = "receiverSignatureImage", - ImageSource = imageSource, - BoundsF = new RectangleF(sigX, imageY, sigWidth, sigImgHeight), - Sizing = ImageSizeMode.ZoomImage, - Borders = BorderSide.Bottom, - BorderColor = System.Drawing.Color.FromArgb(73, 80, 87) - }; - - var signatureLabel = new XRLabel { - Name = "receiverSignatureLabel", - Text = signatureInformation, - Multiline = true, - BoundsF = new RectangleF(sigX, labelY, sigWidth, infoHeight), - Font = new DXFont("Open Sans", 8F, DXFontStyle.Regular), - ForeColor = System.Drawing.Color.FromArgb(73, 80, 87), - TextAlignment = TextAlignment.TopLeft - }; - - bottomMargin.Controls.AddRange(new XRControl[] { signature, signatureLabel }); - } - - static void RemoveExistingSignature(BottomMarginBand bottomMargin) { - var controls = bottomMargin.Controls - .Cast() - .Where(control => control.Name is "receiverSignatureLabel" or "receiverSignatureImage") - .ToArray(); - - foreach(var control in controls) - bottomMargin.Controls.Remove(control); - } - - static void AddSignatureAtAnnotation(XtraReport report, AnnotationDto? annotation, string signatureDataUrl, string signerFullName, string signerPosition, string signaturePlace) { - var imageBytes = Convert.FromBase64String(signatureDataUrl[(signatureDataUrl.IndexOf(',') + 1)..]); - using var imageStream = new MemoryStream(imageBytes); - var imageSource = new ImageSource(DXImage.FromStream(imageStream)); - - var detail = report.Bands.OfType().FirstOrDefault(); - if (detail is null) return; - - var annotId = annotation?.Id.ToString() ?? "0"; - RemoveExistingSignatureById(detail, annotId); - - const float sigWidth = 230F; - const float sigImgHeight = 70F; - const float infoHeight = 48.75F; - const float innerGap = 5F; - - float sigX = (float)(annotation?.X ?? 390.0); - float imageY = (float)(annotation?.Y ?? 900.0); - float labelY = imageY + sigImgHeight + innerGap; - int targetPage = annotation?.Page ?? 1; - - var signatureInformation = string.IsNullOrWhiteSpace(signerPosition) - ? $"{signerFullName}\n{signaturePlace}, {DateTime.Now:d}" - : $"{signerFullName}\n{signerPosition}\n{signaturePlace}, {DateTime.Now:d}"; - - var signature = new XRPictureBox { - Name = $"receiverSignatureImage_{annotId}", - ImageSource = imageSource, - BoundsF = new RectangleF(sigX, imageY, sigWidth, sigImgHeight), - Sizing = ImageSizeMode.ZoomImage, - Borders = BorderSide.Bottom, - BorderColor = System.Drawing.Color.FromArgb(73, 80, 87), - BackColor = Color.FromArgb(219, 219, 219) - }; - - var signatureLabel = new XRLabel { - Name = $"receiverSignatureLabel_{annotId}", - Text = signatureInformation, - Multiline = true, - BoundsF = new RectangleF(sigX, labelY - 5, sigWidth, infoHeight), - Font = new DXFont("Open Sans", 8F, DXFontStyle.Regular), - ForeColor = System.Drawing.Color.FromArgb(73, 80, 87), - TextAlignment = TextAlignment.TopCenter, - BackColor = Color.FromArgb(219, 219, 219) - }; - - // Show each control only on the target page using an independent print counter - int sigPrintCount = 0; - signature.BeforePrint += (_, e) => { - sigPrintCount++; - e.Cancel = sigPrintCount != targetPage; - }; - - int lblPrintCount = 0; - signatureLabel.BeforePrint += (_, e) => { - lblPrintCount++; - e.Cancel = lblPrintCount != targetPage; - }; - - detail.Controls.AddRange(new XRControl[] { signature, signatureLabel }); - } - - static void RemoveExistingSignatureById(DevExpress.XtraReports.UI.DetailBand detail, string annotId) { - var controls = detail.Controls - .Cast() - .Where(c => c.Name == $"receiverSignatureImage_{annotId}" || c.Name == $"receiverSignatureLabel_{annotId}") - .ToArray(); - foreach (var c in controls) - detail.Controls.Remove(c); - } - - public void Dispose() { - _dotNetRef?.Dispose(); - } -} - diff --git a/EnvelopeGenerator.ReceiverUI/Pages/Example/TestViewer.razor b/EnvelopeGenerator.ReceiverUI/Pages/Example/TestViewer.razor deleted file mode 100644 index 8bc2a445..00000000 --- a/EnvelopeGenerator.ReceiverUI/Pages/Example/TestViewer.razor +++ /dev/null @@ -1,81 +0,0 @@ -@page "/example/test" -@using System.Drawing -@using DevExpress.Drawing -@using DevExpress.Utils -@using DevExpress.XtraPrinting -@using DevExpress.XtraPrinting.Drawing -@using XtraReport = DevExpress.XtraReports.UI.XtraReport -@using BottomMarginBand = DevExpress.XtraReports.UI.BottomMarginBand -@using XRLabel = DevExpress.XtraReports.UI.XRLabel -@using XRPictureBox = DevExpress.XtraReports.UI.XRPictureBox -@using XRControl = DevExpress.XtraReports.UI.XRControl -@using ImageSizeMode = DevExpress.XtraPrinting.ImageSizeMode -@using EnvelopeGenerator.ReceiverUI.Services -@using DevExpress.Blazor.Reporting -@inject IJSRuntime JSRuntime -@inject InMemoryReportStorageWebExtension ReportStorage -@inject EnvelopeGenerator.ReceiverUI.Services.DocumentService DocumentService -@inject Microsoft.Extensions.Configuration.IConfiguration Configuration -@inject HttpClient Http -@using System; - - - - -
- -
- - @if (PdfBytes is { Length: > 0 }) { - - } - else{ -
Not found
- } -
- -
- -@code { - - const string SignatureTabDraw = "draw"; - const string SignatureTabText = "text"; - const string SignatureTabImage = "image"; - const string DrawCanvasId = "receiver-signature-pad"; - const string TypedCanvasId = "receiver-typed-signature-pad"; - const string ImageInputId = "receiver-signature-image-input"; - const string ImageCanvasId = "receiver-image-signature-pad"; - - readonly (string Text, string Value)[] TypedSignatureFonts = { - ("Brush Script", "'Brush Script MT', cursive"), - ("Segoe Script", "'Segoe Script', cursive"), - ("Lucida Handwriting", "'Lucida Handwriting', cursive"), - ("Comic Sans", "'Comic Sans MS', cursive"), - ("Cursive", "cursive") - }; - - [Parameter] public string? EnvelopeKey { get; set; } - - DxReportViewer? reportViewer; - XtraReport? Report; - string PdfViewerUrl = string.Empty; - byte[]? PdfBytes; - byte[]? SignedPdfBytes; - bool SignatureApplied; - bool SignaturePopupVisible; - string? PopupValidationMessage; - string ActiveSignatureTab = SignatureTabDraw; - string TypedSignatureText = string.Empty; - string TypedSignatureFont = "'Brush Script MT', cursive"; - string SignerFullName = string.Empty; - string SignerPosition = string.Empty; - string SignaturePlace = string.Empty; - int ViewerKey; - - protected override async Task OnInitializedAsync() { - PdfBytes = await Http.GetByteArrayAsync("/docs/Document.pdf"); - } - - -} - diff --git a/EnvelopeGenerator.ReceiverUI/Pages/IndexPage.razor b/EnvelopeGenerator.ReceiverUI/Pages/IndexPage.razor deleted file mode 100644 index be0953ea..00000000 --- a/EnvelopeGenerator.ReceiverUI/Pages/IndexPage.razor +++ /dev/null @@ -1,71 +0,0 @@ -@page "/" -@inject IJSRuntime JS - - - -
- -
-
- - - -
-

SignFlow

-

Willkommen im eSign-Portal

-
-
-
- -
-
-
- -

- -

- -
-
-
- - - - Sicherer Zugang -
-
- - - - Digitale Unterschrift -
-
- - - - - PDF-Export -
-
-
- -
-
-
- -
- -@code { - private const string HomePageDescription = - "Das digitale Unterschriftenportal ist eine Plattform, die entwickelt wurde, um Ihre Dokumente sicher zu unterschreiben und zu verwalten. " + - "Mit seiner benutzerfreundlichen Oberfläche können Sie Ihre Dokumente schnell hochladen, die Unterschriftsprozesse verfolgen und Ihre digitalen Unterschriftenanwendungen einfach durchführen. " + - "Dieses Portal beschleunigt Ihren Arbeitsablauf mit rechtlich gültigen Unterschriften und erhöht gleichzeitig die Sicherheit Ihrer Dokumente."; - - protected override async Task OnAfterRenderAsync(bool firstRender) - { - if (firstRender) - { - await JS.InvokeVoidAsync("receiverSignature.startTyped", "home-description", HomePageDescription, 15); - } - } -} diff --git a/EnvelopeGenerator.ReceiverUI/Pages/LoginReceiverPage.razor b/EnvelopeGenerator.ReceiverUI/Pages/LoginReceiverPage.razor deleted file mode 100644 index 2fd42f9b..00000000 --- a/EnvelopeGenerator.ReceiverUI/Pages/LoginReceiverPage.razor +++ /dev/null @@ -1,158 +0,0 @@ -@page "/envelope/login/{EnvelopeKey}" -@using EnvelopeGenerator.ReceiverUI.Services -@inject AuthService AuthService -@inject NavigationManager Navigation - - - - - -@code { - [Parameter] public string EnvelopeKey { get; set; } = string.Empty; - - string AccessCode = string.Empty; - bool ShowCode; - bool IsLoading; - EnvelopeLoginResult? LoginResult; - - async Task OnKeyDownAsync(Microsoft.AspNetCore.Components.Web.KeyboardEventArgs e) { - if (e.Key == "Enter") - await SubmitAsync(); - } - - async Task SubmitAsync() { - if (string.IsNullOrWhiteSpace(AccessCode) || IsLoading) return; - - IsLoading = true; - LoginResult = null; - await InvokeAsync(StateHasChanged); - - var result = await AuthService.LoginEnvelopeReceiverAsync(EnvelopeKey, AccessCode.Trim()); - - if (result == EnvelopeLoginResult.Success) { - Navigation.NavigateTo($"/envelope/{Uri.EscapeDataString(EnvelopeKey)}", forceLoad: true); - return; - } - - LoginResult = result; - IsLoading = false; - await InvokeAsync(StateHasChanged); - } -} - diff --git a/EnvelopeGenerator.ReceiverUI/Pages/LoginSenderPage.razor b/EnvelopeGenerator.ReceiverUI/Pages/LoginSenderPage.razor deleted file mode 100644 index 26acfab5..00000000 --- a/EnvelopeGenerator.ReceiverUI/Pages/LoginSenderPage.razor +++ /dev/null @@ -1,172 +0,0 @@ -@page "/sender/login" -@using EnvelopeGenerator.ReceiverUI.Services -@inject AuthService AuthService -@inject NavigationManager Navigation - - - - - -@code { - string Username = string.Empty; - string Password = string.Empty; - bool ShowPassword; - bool IsLoading; - SenderLoginResult? LoginResult; - - async Task OnKeyDownAsync(Microsoft.AspNetCore.Components.Web.KeyboardEventArgs e) { - if (e.Key == "Enter") - await SubmitAsync(); - } - - async Task SubmitAsync() { - if (string.IsNullOrWhiteSpace(Username) || string.IsNullOrWhiteSpace(Password) || IsLoading) return; - - IsLoading = true; - LoginResult = null; - await InvokeAsync(StateHasChanged); - - var result = await AuthService.LoginSenderAsync(Username.Trim(), Password.Trim()); - - if (result == SenderLoginResult.Success) { - Navigation.NavigateTo("/sender", forceLoad: true); - return; - } - - LoginResult = result; - IsLoading = false; - await InvokeAsync(StateHasChanged); - } -} - diff --git a/EnvelopeGenerator.ReceiverUI/PredefinedReports/Report.cs b/EnvelopeGenerator.ReceiverUI/PredefinedReports/Report.cs deleted file mode 100644 index 23cb4d5c..00000000 --- a/EnvelopeGenerator.ReceiverUI/PredefinedReports/Report.cs +++ /dev/null @@ -1,1198 +0,0 @@ -using DevExpress.XtraReports.UI; -namespace EnvelopeGenerator.ReceiverUI.PredefinedReports { - public class Report : XtraReport { - private TopMarginBand topMarginBand1; - private XRPageInfo xrPageInfo4; - private XRPageInfo xrPageInfo3; - private BottomMarginBand bottomMarginBand1; - private DetailBand detailBand1; - private XRLabel xrLabel1; - private XRBarCode xrBarCode1; - private XRLabel xrLabel4; - private XRLabel xrLabel5; - private XRLabel xrLabel6; - private XRLabel xrLabel7; - private XRLabel xrLabel8; - private XRLabel xrLabel9; - private XRLabel xrLabel10; - private XRLabel xrLabel11; - private XRLabel xrLabel12; - private XRLabel xrLabel13; - private SubBand SubBand1; - private XRTable xrTable5; - private XRTableRow xrTableRow9; - private XRTableCell xrTableCell18; - private XRTableCell xrTableCell20; - private XRTableRow xrTableRow11; - private XRTableCell xrTableCell24; - private XRTableCell xrTableCell25; - private XRTableRow xrTableRow12; - private XRTableCell xrTableCell26; - private XRTableCell xrTableCell27; - private XRTableRow xrTableRow10; - private XRTableCell xrTableCell21; - private XRTableCell xrTableCell23; - private XRTableRow xrTableRow13; - private XRTableCell xrTableCell28; - private XRTableCell xrTableCell29; - private XRLabel xrLabel2; - private DetailReportBand detailReportBand1; - private GroupHeaderBand groupHeaderBand1; - private XRTable xrTable2; - private XRTableRow xrTableRow3; - private XRTableCell xrTableCell7; - private XRTableCell xrTableCell8; - private XRTableCell xrTableCell9; - private XRTableCell xrTableCell11; - private DetailBand detailBand2; - private XRTable xrTable3; - private XRTableRow xrTableRow4; - private XRTableCell xrTableCell12; - private XRTableCell xrTableCell13; - private XRTableCell xrTableCell15; - private XRTableCell xrTableCell16; - private ReportHeaderBand ReportHeader; - private XRLabel xrLabel3; - private ReportFooterBand ReportFooter; - private XRTable xrTable1; - private XRTableRow xrTableRow1; - private XRTableCell xrTableCell3; - private XRTableCell xrTableCell1; - private XRTableCell xrTableCell2; - private XRTableRow xrTableRow2; - private XRTableCell xrTableCell6; - private XRTableCell xrTableCell4; - private XRTableCell xrTableCell5; - private DevExpress.DataAccess.ObjectBinding.ObjectDataSource objectDataSource1; - private XRControlStyle Title; - private XRControlStyle ReportTitleCaption; - private XRControlStyle DetailData3; - private XRControlStyle DetailData3_Odd; - private XRControlStyle PageInfo; - private XRControlStyle Headers; - private XRControlStyle SummaryTitles; - private XRControlStyle SummaryValues; - protected DevExpress.XtraReports.Parameters.Parameter RowCountParameter; - private System.ComponentModel.IContainer components; - - public Report() : this(35u) { } - - public Report(uint countParameter) { - InitializeComponent(); - RowCountParameter.Value = countParameter; - Name = "LargeDatasetReport"; - DisplayName = "Large Dataset"; - } - - private void InitializeComponent() { - this.components = new System.ComponentModel.Container(); - DevExpress.XtraPrinting.BarCode.QRCodeGenerator qrCodeGenerator1 = new DevExpress.XtraPrinting.BarCode.QRCodeGenerator(); - DevExpress.XtraReports.UI.XRSummary xrSummary1 = new DevExpress.XtraReports.UI.XRSummary(); - DevExpress.DataAccess.ObjectBinding.ObjectConstructorInfo objectConstructorInfo1 = new DevExpress.DataAccess.ObjectBinding.ObjectConstructorInfo(); - DevExpress.DataAccess.ObjectBinding.Parameter parameter1 = new DevExpress.DataAccess.ObjectBinding.Parameter(); - this.topMarginBand1 = new DevExpress.XtraReports.UI.TopMarginBand(); - this.bottomMarginBand1 = new DevExpress.XtraReports.UI.BottomMarginBand(); - this.detailBand1 = new DevExpress.XtraReports.UI.DetailBand(); - this.detailReportBand1 = new DevExpress.XtraReports.UI.DetailReportBand(); - this.xrPageInfo4 = new DevExpress.XtraReports.UI.XRPageInfo(); - this.xrPageInfo3 = new DevExpress.XtraReports.UI.XRPageInfo(); - this.xrLabel1 = new DevExpress.XtraReports.UI.XRLabel(); - this.xrBarCode1 = new DevExpress.XtraReports.UI.XRBarCode(); - this.xrLabel4 = new DevExpress.XtraReports.UI.XRLabel(); - this.xrLabel5 = new DevExpress.XtraReports.UI.XRLabel(); - this.xrLabel6 = new DevExpress.XtraReports.UI.XRLabel(); - this.xrLabel7 = new DevExpress.XtraReports.UI.XRLabel(); - this.xrLabel8 = new DevExpress.XtraReports.UI.XRLabel(); - this.xrLabel9 = new DevExpress.XtraReports.UI.XRLabel(); - this.xrLabel10 = new DevExpress.XtraReports.UI.XRLabel(); - this.xrLabel11 = new DevExpress.XtraReports.UI.XRLabel(); - this.xrLabel12 = new DevExpress.XtraReports.UI.XRLabel(); - this.xrLabel13 = new DevExpress.XtraReports.UI.XRLabel(); - this.SubBand1 = new DevExpress.XtraReports.UI.SubBand(); - this.xrTable5 = new DevExpress.XtraReports.UI.XRTable(); - this.xrLabel2 = new DevExpress.XtraReports.UI.XRLabel(); - this.xrTableRow9 = new DevExpress.XtraReports.UI.XRTableRow(); - this.xrTableRow11 = new DevExpress.XtraReports.UI.XRTableRow(); - this.xrTableRow12 = new DevExpress.XtraReports.UI.XRTableRow(); - this.xrTableRow10 = new DevExpress.XtraReports.UI.XRTableRow(); - this.xrTableRow13 = new DevExpress.XtraReports.UI.XRTableRow(); - this.xrTableCell18 = new DevExpress.XtraReports.UI.XRTableCell(); - this.xrTableCell20 = new DevExpress.XtraReports.UI.XRTableCell(); - this.xrTableCell24 = new DevExpress.XtraReports.UI.XRTableCell(); - this.xrTableCell25 = new DevExpress.XtraReports.UI.XRTableCell(); - this.xrTableCell26 = new DevExpress.XtraReports.UI.XRTableCell(); - this.xrTableCell27 = new DevExpress.XtraReports.UI.XRTableCell(); - this.xrTableCell21 = new DevExpress.XtraReports.UI.XRTableCell(); - this.xrTableCell23 = new DevExpress.XtraReports.UI.XRTableCell(); - this.xrTableCell28 = new DevExpress.XtraReports.UI.XRTableCell(); - this.xrTableCell29 = new DevExpress.XtraReports.UI.XRTableCell(); - this.groupHeaderBand1 = new DevExpress.XtraReports.UI.GroupHeaderBand(); - this.detailBand2 = new DevExpress.XtraReports.UI.DetailBand(); - this.ReportHeader = new DevExpress.XtraReports.UI.ReportHeaderBand(); - this.ReportFooter = new DevExpress.XtraReports.UI.ReportFooterBand(); - this.xrTable2 = new DevExpress.XtraReports.UI.XRTable(); - this.xrTableRow3 = new DevExpress.XtraReports.UI.XRTableRow(); - this.xrTableCell7 = new DevExpress.XtraReports.UI.XRTableCell(); - this.xrTableCell8 = new DevExpress.XtraReports.UI.XRTableCell(); - this.xrTableCell9 = new DevExpress.XtraReports.UI.XRTableCell(); - this.xrTableCell11 = new DevExpress.XtraReports.UI.XRTableCell(); - this.xrTable3 = new DevExpress.XtraReports.UI.XRTable(); - this.xrTableRow4 = new DevExpress.XtraReports.UI.XRTableRow(); - this.xrTableCell12 = new DevExpress.XtraReports.UI.XRTableCell(); - this.xrTableCell13 = new DevExpress.XtraReports.UI.XRTableCell(); - this.xrTableCell15 = new DevExpress.XtraReports.UI.XRTableCell(); - this.xrTableCell16 = new DevExpress.XtraReports.UI.XRTableCell(); - this.xrLabel3 = new DevExpress.XtraReports.UI.XRLabel(); - this.xrTable1 = new DevExpress.XtraReports.UI.XRTable(); - this.xrTableRow1 = new DevExpress.XtraReports.UI.XRTableRow(); - this.xrTableRow2 = new DevExpress.XtraReports.UI.XRTableRow(); - this.xrTableCell3 = new DevExpress.XtraReports.UI.XRTableCell(); - this.xrTableCell1 = new DevExpress.XtraReports.UI.XRTableCell(); - this.xrTableCell2 = new DevExpress.XtraReports.UI.XRTableCell(); - this.xrTableCell6 = new DevExpress.XtraReports.UI.XRTableCell(); - this.xrTableCell4 = new DevExpress.XtraReports.UI.XRTableCell(); - this.xrTableCell5 = new DevExpress.XtraReports.UI.XRTableCell(); - this.objectDataSource1 = new DevExpress.DataAccess.ObjectBinding.ObjectDataSource(this.components); - this.Title = new DevExpress.XtraReports.UI.XRControlStyle(); - this.ReportTitleCaption = new DevExpress.XtraReports.UI.XRControlStyle(); - this.DetailData3 = new DevExpress.XtraReports.UI.XRControlStyle(); - this.DetailData3_Odd = new DevExpress.XtraReports.UI.XRControlStyle(); - this.PageInfo = new DevExpress.XtraReports.UI.XRControlStyle(); - this.Headers = new DevExpress.XtraReports.UI.XRControlStyle(); - this.SummaryTitles = new DevExpress.XtraReports.UI.XRControlStyle(); - this.SummaryValues = new DevExpress.XtraReports.UI.XRControlStyle(); - this.RowCountParameter = new DevExpress.XtraReports.Parameters.Parameter(); - ((System.ComponentModel.ISupportInitialize)(this.xrTable5)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.xrTable2)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.xrTable3)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.xrTable1)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.objectDataSource1)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this)).BeginInit(); - // - // topMarginBand1 - // - this.topMarginBand1.Controls.AddRange(new DevExpress.XtraReports.UI.XRControl[] { - this.xrPageInfo4, - this.xrPageInfo3}); - this.topMarginBand1.Name = "topMarginBand1"; - // - // bottomMarginBand1 - // - this.bottomMarginBand1.Name = "bottomMarginBand1"; - // - // detailBand1 - // - this.detailBand1.Controls.AddRange(new DevExpress.XtraReports.UI.XRControl[] { - this.xrLabel1, - this.xrBarCode1, - this.xrLabel4, - this.xrLabel5, - this.xrLabel6, - this.xrLabel7, - this.xrLabel8, - this.xrLabel9, - this.xrLabel10, - this.xrLabel11, - this.xrLabel12, - this.xrLabel13}); - this.detailBand1.HeightF = 197.9167F; - this.detailBand1.KeepTogether = true; - this.detailBand1.Name = "detailBand1"; - this.detailBand1.SubBands.AddRange(new DevExpress.XtraReports.UI.SubBand[] { - this.SubBand1}); - // - // detailReportBand1 - // - this.detailReportBand1.Bands.AddRange(new DevExpress.XtraReports.UI.Band[] { - this.groupHeaderBand1, - this.detailBand2, - this.ReportHeader, - this.ReportFooter}); - this.detailReportBand1.DataMember = "Adjustments"; - this.detailReportBand1.DataSource = this.objectDataSource1; - this.detailReportBand1.Level = 0; - this.detailReportBand1.Name = "detailReportBand1"; - this.detailReportBand1.PageBreak = DevExpress.XtraReports.UI.PageBreak.AfterBand; - // - // xrPageInfo4 - // - this.xrPageInfo4.LocationFloat = new DevExpress.Utils.PointFloat(461.75F, 38.73147F); - this.xrPageInfo4.Name = "xrPageInfo4"; - this.xrPageInfo4.Padding = new DevExpress.XtraPrinting.PaddingInfo(0, 0, 0, 0, 100F); - this.xrPageInfo4.PageInfo = DevExpress.XtraPrinting.PageInfo.DateTime; - this.xrPageInfo4.SizeF = new System.Drawing.SizeF(178.875F, 23F); - this.xrPageInfo4.StyleName = "PageInfo"; - this.xrPageInfo4.StylePriority.UseForeColor = false; - this.xrPageInfo4.StylePriority.UsePadding = false; - this.xrPageInfo4.StylePriority.UseTextAlignment = false; - this.xrPageInfo4.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleRight; - this.xrPageInfo4.TextFormatString = "Issued: {0}"; - // - // xrPageInfo3 - // - this.xrPageInfo3.LocationFloat = new DevExpress.Utils.PointFloat(0F, 38.73146F); - this.xrPageInfo3.Name = "xrPageInfo3"; - this.xrPageInfo3.Padding = new DevExpress.XtraPrinting.PaddingInfo(0, 2, 0, 0, 100F); - this.xrPageInfo3.SizeF = new System.Drawing.SizeF(300.2737F, 23F); - this.xrPageInfo3.StyleName = "PageInfo"; - this.xrPageInfo3.StylePriority.UseForeColor = false; - this.xrPageInfo3.StylePriority.UsePadding = false; - this.xrPageInfo3.StylePriority.UseTextAlignment = false; - this.xrPageInfo3.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleLeft; - this.xrPageInfo3.TextFormatString = "Page {0} of {1} Pages"; - // - // xrLabel1 - // - this.xrLabel1.ExpressionBindings.AddRange(new DevExpress.XtraReports.UI.ExpressionBinding[] { - new DevExpress.XtraReports.UI.ExpressionBinding("BeforePrint", "Text", "[CompanyName]")}); - this.xrLabel1.LocationFloat = new DevExpress.Utils.PointFloat(0F, 0F); - this.xrLabel1.Name = "xrLabel1"; - this.xrLabel1.Padding = new DevExpress.XtraPrinting.PaddingInfo(0, 2, 0, 0, 100F); - this.xrLabel1.SizeF = new System.Drawing.SizeF(650F, 50F); - this.xrLabel1.StyleName = "ReportTitleCaption"; - this.xrLabel1.StylePriority.UseFont = false; - this.xrLabel1.StylePriority.UseForeColor = false; - this.xrLabel1.StylePriority.UsePadding = false; - this.xrLabel1.Text = "Paris spécialités"; - // - // xrBarCode1 - // - this.xrBarCode1.Alignment = DevExpress.XtraPrinting.TextAlignment.MiddleCenter; - this.xrBarCode1.AutoModule = true; - this.xrBarCode1.ExpressionBindings.AddRange(new DevExpress.XtraReports.UI.ExpressionBinding[] { - new DevExpress.XtraReports.UI.ExpressionBinding("BeforePrint", "Text", "[Address] + NewLine() + [City] + \' , \' + [PostalCode] + NewLine() + [Phone]")}); - this.xrBarCode1.LocationFloat = new DevExpress.Utils.PointFloat(514.9792F, 50.18913F); - this.xrBarCode1.Module = 4.7F; - this.xrBarCode1.Name = "xrBarCode1"; - this.xrBarCode1.Padding = new DevExpress.XtraPrinting.PaddingInfo(0, 0, 0, 0, 100F); - this.xrBarCode1.ShowText = false; - this.xrBarCode1.SizeF = new System.Drawing.SizeF(135.021F, 124.9819F); - this.xrBarCode1.StylePriority.UsePadding = false; - qrCodeGenerator1.CompactionMode = DevExpress.XtraPrinting.BarCode.QRCodeCompactionMode.Byte; - this.xrBarCode1.Symbology = qrCodeGenerator1; - this.xrBarCode1.Text = "12, rue des Bouchers\r\nMarseille , 13008\r\n91.24.45.40"; - // - // xrLabel4 - // - this.xrLabel4.BackColor = System.Drawing.Color.Transparent; - this.xrLabel4.BorderColor = System.Drawing.Color.Transparent; - this.xrLabel4.Borders = DevExpress.XtraPrinting.BorderSide.None; - this.xrLabel4.BorderWidth = 1F; - this.xrLabel4.LocationFloat = new DevExpress.Utils.PointFloat(0F, 60.41667F); - this.xrLabel4.Name = "xrLabel4"; - this.xrLabel4.Padding = new DevExpress.XtraPrinting.PaddingInfo(10, 2, 0, 0, 100F); - this.xrLabel4.SizeF = new System.Drawing.SizeF(163.3871F, 25F); - this.xrLabel4.StyleName = "Headers"; - this.xrLabel4.StylePriority.UseBackColor = false; - this.xrLabel4.StylePriority.UseBorderColor = false; - this.xrLabel4.StylePriority.UseBorders = false; - this.xrLabel4.StylePriority.UseBorderWidth = false; - this.xrLabel4.StylePriority.UseFont = false; - this.xrLabel4.StylePriority.UseForeColor = false; - this.xrLabel4.StylePriority.UsePadding = false; - this.xrLabel4.StylePriority.UseTextAlignment = false; - this.xrLabel4.Text = "CUSTOMER ACCOUNT:"; - this.xrLabel4.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleLeft; - // - // xrLabel5 - // - this.xrLabel5.BackColor = System.Drawing.Color.Transparent; - this.xrLabel5.BorderColor = System.Drawing.Color.Transparent; - this.xrLabel5.Borders = DevExpress.XtraPrinting.BorderSide.None; - this.xrLabel5.ExpressionBindings.AddRange(new DevExpress.XtraReports.UI.ExpressionBinding[] { - new DevExpress.XtraReports.UI.ExpressionBinding("BeforePrint", "Text", "[CustomerAccount]")}); - this.xrLabel5.LocationFloat = new DevExpress.Utils.PointFloat(163.3871F, 60.41667F); - this.xrLabel5.Name = "xrLabel5"; - this.xrLabel5.Padding = new DevExpress.XtraPrinting.PaddingInfo(0, 2, 0, 0, 100F); - this.xrLabel5.SizeF = new System.Drawing.SizeF(127.8075F, 25F); - this.xrLabel5.StyleName = "DetailData3"; - this.xrLabel5.StylePriority.UseBackColor = false; - this.xrLabel5.StylePriority.UseBorderColor = false; - this.xrLabel5.StylePriority.UseBorders = false; - this.xrLabel5.StylePriority.UseFont = false; - this.xrLabel5.StylePriority.UseForeColor = false; - this.xrLabel5.StylePriority.UsePadding = false; - this.xrLabel5.StylePriority.UseTextAlignment = false; - this.xrLabel5.Text = "Energy"; - this.xrLabel5.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleLeft; - // - // xrLabel6 - // - this.xrLabel6.BackColor = System.Drawing.Color.Transparent; - this.xrLabel6.BorderColor = System.Drawing.Color.Transparent; - this.xrLabel6.Borders = DevExpress.XtraPrinting.BorderSide.None; - this.xrLabel6.BorderWidth = 1F; - this.xrLabel6.LocationFloat = new DevExpress.Utils.PointFloat(0F, 89.58334F); - this.xrLabel6.Name = "xrLabel6"; - this.xrLabel6.Padding = new DevExpress.XtraPrinting.PaddingInfo(10, 2, 0, 0, 100F); - this.xrLabel6.SizeF = new System.Drawing.SizeF(163.3871F, 25F); - this.xrLabel6.StyleName = "Headers"; - this.xrLabel6.StylePriority.UseBackColor = false; - this.xrLabel6.StylePriority.UseBorderColor = false; - this.xrLabel6.StylePriority.UseBorders = false; - this.xrLabel6.StylePriority.UseBorderWidth = false; - this.xrLabel6.StylePriority.UseFont = false; - this.xrLabel6.StylePriority.UseForeColor = false; - this.xrLabel6.StylePriority.UsePadding = false; - this.xrLabel6.StylePriority.UseTextAlignment = false; - this.xrLabel6.Text = "CUSTOMER IDENTIFIERS:"; - this.xrLabel6.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleLeft; - // - // xrLabel7 - // - this.xrLabel7.BackColor = System.Drawing.Color.Transparent; - this.xrLabel7.BorderColor = System.Drawing.Color.Transparent; - this.xrLabel7.Borders = DevExpress.XtraPrinting.BorderSide.None; - this.xrLabel7.ExpressionBindings.AddRange(new DevExpress.XtraReports.UI.ExpressionBinding[] { - new DevExpress.XtraReports.UI.ExpressionBinding("BeforePrint", "Text", "[CustomerIdentifiers]")}); - this.xrLabel7.LocationFloat = new DevExpress.Utils.PointFloat(163.3871F, 89.58334F); - this.xrLabel7.Name = "xrLabel7"; - this.xrLabel7.Padding = new DevExpress.XtraPrinting.PaddingInfo(0, 2, 0, 0, 100F); - this.xrLabel7.SizeF = new System.Drawing.SizeF(127.8075F, 25F); - this.xrLabel7.StyleName = "DetailData3"; - this.xrLabel7.StylePriority.UseBackColor = false; - this.xrLabel7.StylePriority.UseBorderColor = false; - this.xrLabel7.StylePriority.UseBorders = false; - this.xrLabel7.StylePriority.UseFont = false; - this.xrLabel7.StylePriority.UseForeColor = false; - this.xrLabel7.StylePriority.UsePadding = false; - this.xrLabel7.StylePriority.UseTextAlignment = false; - this.xrLabel7.Text = "1273-86"; - this.xrLabel7.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleLeft; - // - // xrLabel8 - // - this.xrLabel8.BackColor = System.Drawing.Color.Transparent; - this.xrLabel8.BorderColor = System.Drawing.Color.Transparent; - this.xrLabel8.Borders = DevExpress.XtraPrinting.BorderSide.None; - this.xrLabel8.BorderWidth = 1F; - this.xrLabel8.LocationFloat = new DevExpress.Utils.PointFloat(0F, 118.75F); - this.xrLabel8.Name = "xrLabel8"; - this.xrLabel8.Padding = new DevExpress.XtraPrinting.PaddingInfo(10, 2, 0, 0, 100F); - this.xrLabel8.SizeF = new System.Drawing.SizeF(163.3871F, 24.99999F); - this.xrLabel8.StyleName = "Headers"; - this.xrLabel8.StylePriority.UseBackColor = false; - this.xrLabel8.StylePriority.UseBorderColor = false; - this.xrLabel8.StylePriority.UseBorders = false; - this.xrLabel8.StylePriority.UseBorderWidth = false; - this.xrLabel8.StylePriority.UseFont = false; - this.xrLabel8.StylePriority.UseForeColor = false; - this.xrLabel8.StylePriority.UsePadding = false; - this.xrLabel8.StylePriority.UseTextAlignment = false; - this.xrLabel8.Text = "EMAIL:"; - this.xrLabel8.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleLeft; - // - // xrLabel9 - // - this.xrLabel9.AutoWidth = true; - this.xrLabel9.BackColor = System.Drawing.Color.Transparent; - this.xrLabel9.BorderColor = System.Drawing.Color.Transparent; - this.xrLabel9.Borders = DevExpress.XtraPrinting.BorderSide.None; - this.xrLabel9.ExpressionBindings.AddRange(new DevExpress.XtraReports.UI.ExpressionBinding[] { - new DevExpress.XtraReports.UI.ExpressionBinding("BeforePrint", "Text", "[Email]")}); - this.xrLabel9.LocationFloat = new DevExpress.Utils.PointFloat(163.3871F, 118.75F); - this.xrLabel9.Name = "xrLabel9"; - this.xrLabel9.Padding = new DevExpress.XtraPrinting.PaddingInfo(0, 2, 0, 0, 100F); - this.xrLabel9.SizeF = new System.Drawing.SizeF(127.8075F, 24.99997F); - this.xrLabel9.StyleName = "DetailData3"; - this.xrLabel9.StylePriority.UseBackColor = false; - this.xrLabel9.StylePriority.UseBorderColor = false; - this.xrLabel9.StylePriority.UseBorders = false; - this.xrLabel9.StylePriority.UseFont = false; - this.xrLabel9.StylePriority.UseForeColor = false; - this.xrLabel9.StylePriority.UsePadding = false; - this.xrLabel9.StylePriority.UseTextAlignment = false; - this.xrLabel9.Text = "laurence@bon.com"; - this.xrLabel9.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleLeft; - this.xrLabel9.WordWrap = false; - // - // xrLabel10 - // - this.xrLabel10.BackColor = System.Drawing.Color.Transparent; - this.xrLabel10.BorderColor = System.Drawing.Color.Transparent; - this.xrLabel10.Borders = DevExpress.XtraPrinting.BorderSide.None; - this.xrLabel10.CanGrow = false; - this.xrLabel10.ExpressionBindings.AddRange(new DevExpress.XtraReports.UI.ExpressionBinding[] { - new DevExpress.XtraReports.UI.ExpressionBinding("BeforePrint", "Text", "[Address]")}); - this.xrLabel10.LocationFloat = new DevExpress.Utils.PointFloat(370.0327F, 60.41668F); - this.xrLabel10.Name = "xrLabel10"; - this.xrLabel10.Padding = new DevExpress.XtraPrinting.PaddingInfo(2, 2, 0, 0, 100F); - this.xrLabel10.SizeF = new System.Drawing.SizeF(144.7905F, 25F); - this.xrLabel10.StyleName = "DetailData3"; - this.xrLabel10.StylePriority.UseBackColor = false; - this.xrLabel10.StylePriority.UseBorderColor = false; - this.xrLabel10.StylePriority.UseBorders = false; - this.xrLabel10.StylePriority.UseFont = false; - this.xrLabel10.StylePriority.UseForeColor = false; - this.xrLabel10.StylePriority.UsePadding = false; - this.xrLabel10.StylePriority.UseTextAlignment = false; - this.xrLabel10.Text = "12, rue des Bouchers"; - this.xrLabel10.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleRight; - this.xrLabel10.WordWrap = false; - // - // xrLabel11 - // - this.xrLabel11.BackColor = System.Drawing.Color.Transparent; - this.xrLabel11.BorderColor = System.Drawing.Color.Transparent; - this.xrLabel11.Borders = DevExpress.XtraPrinting.BorderSide.None; - this.xrLabel11.ExpressionBindings.AddRange(new DevExpress.XtraReports.UI.ExpressionBinding[] { - new DevExpress.XtraReports.UI.ExpressionBinding("BeforePrint", "Text", "[City] + \', \' + [Region] + \' \' + [PostalCode]")}); - this.xrLabel11.LocationFloat = new DevExpress.Utils.PointFloat(302.2708F, 89.58334F); - this.xrLabel11.Name = "xrLabel11"; - this.xrLabel11.Padding = new DevExpress.XtraPrinting.PaddingInfo(2, 2, 0, 0, 100F); - this.xrLabel11.SizeF = new System.Drawing.SizeF(212.5539F, 25F); - this.xrLabel11.StyleName = "DetailData3"; - this.xrLabel11.StylePriority.UseBackColor = false; - this.xrLabel11.StylePriority.UseBorderColor = false; - this.xrLabel11.StylePriority.UseBorders = false; - this.xrLabel11.StylePriority.UseFont = false; - this.xrLabel11.StylePriority.UseForeColor = false; - this.xrLabel11.StylePriority.UsePadding = false; - this.xrLabel11.StylePriority.UseTextAlignment = false; - this.xrLabel11.Text = "Marseille, 13008"; - this.xrLabel11.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleRight; - // - // xrLabel12 - // - this.xrLabel12.BorderColor = System.Drawing.Color.Transparent; - this.xrLabel12.Borders = DevExpress.XtraPrinting.BorderSide.None; - this.xrLabel12.ExpressionBindings.AddRange(new DevExpress.XtraReports.UI.ExpressionBinding[] { - new DevExpress.XtraReports.UI.ExpressionBinding("BeforePrint", "Text", "[Country]")}); - this.xrLabel12.LocationFloat = new DevExpress.Utils.PointFloat(370.0327F, 118.75F); - this.xrLabel12.Name = "xrLabel12"; - this.xrLabel12.Padding = new DevExpress.XtraPrinting.PaddingInfo(2, 2, 0, 0, 100F); - this.xrLabel12.SizeF = new System.Drawing.SizeF(144.792F, 25.00002F); - this.xrLabel12.StyleName = "DetailData3"; - this.xrLabel12.StylePriority.UseBorderColor = false; - this.xrLabel12.StylePriority.UseBorders = false; - this.xrLabel12.StylePriority.UseFont = false; - this.xrLabel12.StylePriority.UseForeColor = false; - this.xrLabel12.StylePriority.UsePadding = false; - this.xrLabel12.StylePriority.UseTextAlignment = false; - this.xrLabel12.Text = "France"; - this.xrLabel12.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleRight; - // - // xrLabel13 - // - this.xrLabel13.BackColor = System.Drawing.Color.Transparent; - this.xrLabel13.BorderColor = System.Drawing.Color.Transparent; - this.xrLabel13.Borders = DevExpress.XtraPrinting.BorderSide.None; - this.xrLabel13.ExpressionBindings.AddRange(new DevExpress.XtraReports.UI.ExpressionBinding[] { - new DevExpress.XtraReports.UI.ExpressionBinding("BeforePrint", "Text", "[Phone]")}); - this.xrLabel13.LocationFloat = new DevExpress.Utils.PointFloat(370.034F, 147.9167F); - this.xrLabel13.Name = "xrLabel13"; - this.xrLabel13.Padding = new DevExpress.XtraPrinting.PaddingInfo(2, 2, 0, 0, 100F); - this.xrLabel13.SizeF = new System.Drawing.SizeF(144.792F, 25F); - this.xrLabel13.StyleName = "DetailData3"; - this.xrLabel13.StylePriority.UseBackColor = false; - this.xrLabel13.StylePriority.UseBorderColor = false; - this.xrLabel13.StylePriority.UseBorders = false; - this.xrLabel13.StylePriority.UseFont = false; - this.xrLabel13.StylePriority.UseForeColor = false; - this.xrLabel13.StylePriority.UsePadding = false; - this.xrLabel13.StylePriority.UseTextAlignment = false; - this.xrLabel13.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleRight; - // - // SubBand1 - // - this.SubBand1.Controls.AddRange(new DevExpress.XtraReports.UI.XRControl[] { - this.xrTable5, - this.xrLabel2}); - this.SubBand1.HeightF = 226.7708F; - this.SubBand1.Name = "SubBand1"; - // - // xrTable5 - // - this.xrTable5.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(75)))), ((int)(((byte)(75)))), ((int)(((byte)(75))))); - this.xrTable5.Borders = DevExpress.XtraPrinting.BorderSide.None; - this.xrTable5.LocationFloat = new DevExpress.Utils.PointFloat(0F, 48.95833F); - this.xrTable5.Name = "xrTable5"; - this.xrTable5.Rows.AddRange(new DevExpress.XtraReports.UI.XRTableRow[] { - this.xrTableRow9, - this.xrTableRow11, - this.xrTableRow12, - this.xrTableRow10, - this.xrTableRow13}); - this.xrTable5.SizeF = new System.Drawing.SizeF(640.625F, 145.8333F); - this.xrTable5.StylePriority.UseBorderColor = false; - this.xrTable5.StylePriority.UseBorders = false; - // - // xrLabel2 - // - this.xrLabel2.LocationFloat = new DevExpress.Utils.PointFloat(0F, 2.083345F); - this.xrLabel2.Name = "xrLabel2"; - this.xrLabel2.Padding = new DevExpress.XtraPrinting.PaddingInfo(0, 2, 0, 0, 100F); - this.xrLabel2.SizeF = new System.Drawing.SizeF(640.625F, 35F); - this.xrLabel2.StyleName = "Title"; - this.xrLabel2.StylePriority.UseBorderColor = false; - this.xrLabel2.StylePriority.UseBorders = false; - this.xrLabel2.StylePriority.UseFont = false; - this.xrLabel2.StylePriority.UseForeColor = false; - this.xrLabel2.StylePriority.UsePadding = false; - this.xrLabel2.StylePriority.UseTextAlignment = false; - this.xrLabel2.Text = "Monthly Billing Invoice Statement"; - this.xrLabel2.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleLeft; - // - // xrTableRow9 - // - this.xrTableRow9.Cells.AddRange(new DevExpress.XtraReports.UI.XRTableCell[] { - this.xrTableCell18, - this.xrTableCell20}); - this.xrTableRow9.Name = "xrTableRow9"; - this.xrTableRow9.Weight = 10.208333833436589D; - // - // xrTableRow11 - // - this.xrTableRow11.Cells.AddRange(new DevExpress.XtraReports.UI.XRTableCell[] { - this.xrTableCell24, - this.xrTableCell25}); - this.xrTableRow11.Name = "xrTableRow11"; - this.xrTableRow11.Weight = 10.208333401633816D; - // - // xrTableRow12 - // - this.xrTableRow12.Cells.AddRange(new DevExpress.XtraReports.UI.XRTableCell[] { - this.xrTableCell26, - this.xrTableCell27}); - this.xrTableRow12.Name = "xrTableRow12"; - this.xrTableRow12.Weight = 10.208334312922753D; - // - // xrTableRow10 - // - this.xrTableRow10.Cells.AddRange(new DevExpress.XtraReports.UI.XRTableCell[] { - this.xrTableCell21, - this.xrTableCell23}); - this.xrTableRow10.Name = "xrTableRow10"; - this.xrTableRow10.Weight = 10.208334312922753D; - // - // xrTableRow13 - // - this.xrTableRow13.Cells.AddRange(new DevExpress.XtraReports.UI.XRTableCell[] { - this.xrTableCell28, - this.xrTableCell29}); - this.xrTableRow13.Name = "xrTableRow13"; - this.xrTableRow13.Weight = 10.208332922147653D; - // - // xrTableCell18 - // - this.xrTableCell18.Font = new DevExpress.Drawing.DXFont("Open Sans", 8.25F, DevExpress.Drawing.DXFontStyle.Bold); - this.xrTableCell18.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(46)))), ((int)(((byte)(94)))), ((int)(((byte)(168))))); - this.xrTableCell18.Multiline = true; - this.xrTableCell18.Name = "xrTableCell18"; - this.xrTableCell18.Padding = new DevExpress.XtraPrinting.PaddingInfo(10, 2, 0, 1, 100F); - this.xrTableCell18.StyleName = "DetailData3_Odd"; - this.xrTableCell18.StylePriority.UseFont = false; - this.xrTableCell18.StylePriority.UseForeColor = false; - this.xrTableCell18.StylePriority.UsePadding = false; - this.xrTableCell18.Text = "CONTACT NAME"; - this.xrTableCell18.Weight = 0.13177048207687855D; - // - // xrTableCell20 - // - this.xrTableCell20.ExpressionBindings.AddRange(new DevExpress.XtraReports.UI.ExpressionBinding[] { - new DevExpress.XtraReports.UI.ExpressionBinding("BeforePrint", "Text", "[ContactName]")}); - this.xrTableCell20.Name = "xrTableCell20"; - this.xrTableCell20.Padding = new DevExpress.XtraPrinting.PaddingInfo(6, 2, 0, 1, 100F); - this.xrTableCell20.StyleName = "DetailData3_Odd"; - this.xrTableCell20.StylePriority.UsePadding = false; - this.xrTableCell20.Text = "Laurence Lebihan"; - this.xrTableCell20.Weight = 0.31267396236756584D; - // - // xrTableCell24 - // - this.xrTableCell24.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(75)))), ((int)(((byte)(75)))), ((int)(((byte)(75))))); - this.xrTableCell24.Name = "xrTableCell24"; - this.xrTableCell24.Padding = new DevExpress.XtraPrinting.PaddingInfo(10, 2, 0, 1, 100F); - this.xrTableCell24.StyleName = "Headers"; - this.xrTableCell24.StylePriority.UseBackColor = false; - this.xrTableCell24.StylePriority.UseBorderColor = false; - this.xrTableCell24.StylePriority.UseBorders = false; - this.xrTableCell24.StylePriority.UseFont = false; - this.xrTableCell24.StylePriority.UseForeColor = false; - this.xrTableCell24.StylePriority.UsePadding = false; - this.xrTableCell24.Text = "CONTACT TITLE"; - this.xrTableCell24.Weight = 0.13177048207687855D; - // - // xrTableCell25 - // - this.xrTableCell25.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(75)))), ((int)(((byte)(75)))), ((int)(((byte)(75))))); - this.xrTableCell25.ExpressionBindings.AddRange(new DevExpress.XtraReports.UI.ExpressionBinding[] { - new DevExpress.XtraReports.UI.ExpressionBinding("BeforePrint", "Text", "[ContactTitle]")}); - this.xrTableCell25.Name = "xrTableCell25"; - this.xrTableCell25.Padding = new DevExpress.XtraPrinting.PaddingInfo(6, 2, 0, 1, 100F); - this.xrTableCell25.StyleName = "DetailData3"; - this.xrTableCell25.StylePriority.UseBorderColor = false; - this.xrTableCell25.StylePriority.UseBorders = false; - this.xrTableCell25.StylePriority.UsePadding = false; - this.xrTableCell25.Text = "Owner"; - this.xrTableCell25.Weight = 0.31267396236756584D; - // - // xrTableCell26 - // - this.xrTableCell26.Font = new DevExpress.Drawing.DXFont("Open Sans", 8.25F, DevExpress.Drawing.DXFontStyle.Bold); - this.xrTableCell26.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(46)))), ((int)(((byte)(94)))), ((int)(((byte)(168))))); - this.xrTableCell26.Name = "xrTableCell26"; - this.xrTableCell26.Padding = new DevExpress.XtraPrinting.PaddingInfo(10, 2, 0, 1, 100F); - this.xrTableCell26.StyleName = "DetailData3_Odd"; - this.xrTableCell26.StylePriority.UseFont = false; - this.xrTableCell26.StylePriority.UseForeColor = false; - this.xrTableCell26.StylePriority.UsePadding = false; - this.xrTableCell26.Text = "BILLING STATEMENT DATE"; - this.xrTableCell26.Weight = 0.13177048207687855D; - // - // xrTableCell27 - // - this.xrTableCell27.ExpressionBindings.AddRange(new DevExpress.XtraReports.UI.ExpressionBinding[] { - new DevExpress.XtraReports.UI.ExpressionBinding("BeforePrint", "Text", "[BillingDate]")}); - this.xrTableCell27.Name = "xrTableCell27"; - this.xrTableCell27.Padding = new DevExpress.XtraPrinting.PaddingInfo(6, 2, 0, 1, 100F); - this.xrTableCell27.StyleName = "DetailData3_Odd"; - this.xrTableCell27.StylePriority.UsePadding = false; - this.xrTableCell27.Text = "9/5/2018"; - this.xrTableCell27.TextFormatString = "{0:M/d/yyyy}"; - this.xrTableCell27.Weight = 0.31267396236756584D; - // - // xrTableCell21 - // - this.xrTableCell21.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(75)))), ((int)(((byte)(75)))), ((int)(((byte)(75))))); - this.xrTableCell21.Name = "xrTableCell21"; - this.xrTableCell21.Padding = new DevExpress.XtraPrinting.PaddingInfo(10, 2, 0, 1, 100F); - this.xrTableCell21.StyleName = "Headers"; - this.xrTableCell21.StylePriority.UseBackColor = false; - this.xrTableCell21.StylePriority.UseBorderColor = false; - this.xrTableCell21.StylePriority.UseBorders = false; - this.xrTableCell21.StylePriority.UseFont = false; - this.xrTableCell21.StylePriority.UseForeColor = false; - this.xrTableCell21.StylePriority.UsePadding = false; - this.xrTableCell21.Text = "BILLING PERIOD"; - this.xrTableCell21.Weight = 0.13177048207687855D; - // - // xrTableCell23 - // - this.xrTableCell23.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(75)))), ((int)(((byte)(75)))), ((int)(((byte)(75))))); - this.xrTableCell23.ExpressionBindings.AddRange(new DevExpress.XtraReports.UI.ExpressionBinding[] { - new DevExpress.XtraReports.UI.ExpressionBinding("BeforePrint", "Text", "FormatString(\'{0:M/d/yyyy}\',[BillingPeriodStart] ) + \' To \' + FormatString(\'{0:M/" + - "d/yyyy}\',[BillingPeriodEnd])")}); - this.xrTableCell23.Name = "xrTableCell23"; - this.xrTableCell23.Padding = new DevExpress.XtraPrinting.PaddingInfo(6, 2, 0, 1, 100F); - this.xrTableCell23.StyleName = "DetailData3"; - this.xrTableCell23.StylePriority.UseBorderColor = false; - this.xrTableCell23.StylePriority.UseBorders = false; - this.xrTableCell23.StylePriority.UsePadding = false; - this.xrTableCell23.Text = "8/4/2018 To 8/17/2018"; - this.xrTableCell23.Weight = 0.31267396236756584D; - // - // xrTableCell28 - // - this.xrTableCell28.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(75)))), ((int)(((byte)(75)))), ((int)(((byte)(75))))); - this.xrTableCell28.Font = new DevExpress.Drawing.DXFont("Open Sans", 8.25F, DevExpress.Drawing.DXFontStyle.Bold); - this.xrTableCell28.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(46)))), ((int)(((byte)(94)))), ((int)(((byte)(168))))); - this.xrTableCell28.Name = "xrTableCell28"; - this.xrTableCell28.Padding = new DevExpress.XtraPrinting.PaddingInfo(10, 2, 0, 1, 100F); - this.xrTableCell28.StyleName = "DetailData3_Odd"; - this.xrTableCell28.StylePriority.UseBorderColor = false; - this.xrTableCell28.StylePriority.UseBorders = false; - this.xrTableCell28.StylePriority.UseFont = false; - this.xrTableCell28.StylePriority.UseForeColor = false; - this.xrTableCell28.StylePriority.UsePadding = false; - this.xrTableCell28.Text = "TERMS"; - this.xrTableCell28.Weight = 0.13177048207687855D; - // - // xrTableCell29 - // - this.xrTableCell29.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(75)))), ((int)(((byte)(75)))), ((int)(((byte)(75))))); - this.xrTableCell29.ExpressionBindings.AddRange(new DevExpress.XtraReports.UI.ExpressionBinding[] { - new DevExpress.XtraReports.UI.ExpressionBinding("BeforePrint", "Text", "[Terms]")}); - this.xrTableCell29.Name = "xrTableCell29"; - this.xrTableCell29.Padding = new DevExpress.XtraPrinting.PaddingInfo(6, 2, 0, 1, 100F); - this.xrTableCell29.StyleName = "DetailData3_Odd"; - this.xrTableCell29.StylePriority.UseBorderColor = false; - this.xrTableCell29.StylePriority.UseBorders = false; - this.xrTableCell29.StylePriority.UsePadding = false; - this.xrTableCell29.Text = "End of month"; - this.xrTableCell29.Weight = 0.31267396236756584D; - // - // groupHeaderBand1 - // - this.groupHeaderBand1.Controls.AddRange(new DevExpress.XtraReports.UI.XRControl[] { - this.xrTable2}); - this.groupHeaderBand1.GroupUnion = DevExpress.XtraReports.UI.GroupUnion.WithFirstDetail; - this.groupHeaderBand1.HeightF = 29.16667F; - this.groupHeaderBand1.Name = "groupHeaderBand1"; - // - // detailBand2 - // - this.detailBand2.Controls.AddRange(new DevExpress.XtraReports.UI.XRControl[] { - this.xrTable3}); - this.detailBand2.EvenStyleName = "DetailData3"; - this.detailBand2.HeightF = 29.16667F; - this.detailBand2.Name = "detailBand2"; - // - // ReportHeader - // - this.ReportHeader.Controls.AddRange(new DevExpress.XtraReports.UI.XRControl[] { - this.xrLabel3}); - this.ReportHeader.HeightF = 46.875F; - this.ReportHeader.Name = "ReportHeader"; - // - // ReportFooter - // - this.ReportFooter.Controls.AddRange(new DevExpress.XtraReports.UI.XRControl[] { - this.xrTable1}); - this.ReportFooter.HeightF = 98.95834F; - this.ReportFooter.Name = "ReportFooter"; - this.ReportFooter.PrintAtBottom = true; - // - // xrTable2 - // - this.xrTable2.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(75)))), ((int)(((byte)(75)))), ((int)(((byte)(75))))); - this.xrTable2.Borders = ((DevExpress.XtraPrinting.BorderSide)((((DevExpress.XtraPrinting.BorderSide.Left | DevExpress.XtraPrinting.BorderSide.Top) - | DevExpress.XtraPrinting.BorderSide.Right) - | DevExpress.XtraPrinting.BorderSide.Bottom))); - this.xrTable2.BorderWidth = 1.2F; - this.xrTable2.LocationFloat = new DevExpress.Utils.PointFloat(4.238557E-05F, 0F); - this.xrTable2.Name = "xrTable2"; - this.xrTable2.Rows.AddRange(new DevExpress.XtraReports.UI.XRTableRow[] { - this.xrTableRow3}); - this.xrTable2.SizeF = new System.Drawing.SizeF(640.625F, 29.16667F); - this.xrTable2.StyleName = "Headers"; - this.xrTable2.StylePriority.UseBorderWidth = false; - // - // xrTableRow3 - // - this.xrTableRow3.Cells.AddRange(new DevExpress.XtraReports.UI.XRTableCell[] { - this.xrTableCell7, - this.xrTableCell8, - this.xrTableCell9, - this.xrTableCell11}); - this.xrTableRow3.Name = "xrTableRow3"; - this.xrTableRow3.StyleName = "Headers"; - this.xrTableRow3.Weight = 1.0416666991890433D; - // - // xrTableCell7 - // - this.xrTableCell7.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(46)))), ((int)(((byte)(94)))), ((int)(((byte)(168))))); - this.xrTableCell7.Borders = DevExpress.XtraPrinting.BorderSide.Bottom; - this.xrTableCell7.BorderWidth = 2F; - this.xrTableCell7.Name = "xrTableCell7"; - this.xrTableCell7.Padding = new DevExpress.XtraPrinting.PaddingInfo(10, 2, 0, 0, 100F); - this.xrTableCell7.StyleName = "Headers"; - this.xrTableCell7.StylePriority.UseBorderColor = false; - this.xrTableCell7.StylePriority.UseBorders = false; - this.xrTableCell7.StylePriority.UseBorderWidth = false; - this.xrTableCell7.StylePriority.UsePadding = false; - this.xrTableCell7.Text = "DATE"; - this.xrTableCell7.Weight = 0.26282052324906857D; - // - // xrTableCell8 - // - this.xrTableCell8.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(46)))), ((int)(((byte)(94)))), ((int)(((byte)(168))))); - this.xrTableCell8.Borders = DevExpress.XtraPrinting.BorderSide.Bottom; - this.xrTableCell8.BorderWidth = 2F; - this.xrTableCell8.Name = "xrTableCell8"; - this.xrTableCell8.Padding = new DevExpress.XtraPrinting.PaddingInfo(2, 2, 0, 0, 100F); - this.xrTableCell8.StyleName = "Headers"; - this.xrTableCell8.StylePriority.UseBorderColor = false; - this.xrTableCell8.StylePriority.UseBorders = false; - this.xrTableCell8.StylePriority.UseBorderWidth = false; - this.xrTableCell8.Text = "DESCRIPTION"; - this.xrTableCell8.Weight = 0.2264102459817007D; - // - // xrTableCell9 - // - this.xrTableCell9.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(46)))), ((int)(((byte)(94)))), ((int)(((byte)(168))))); - this.xrTableCell9.Borders = DevExpress.XtraPrinting.BorderSide.Bottom; - this.xrTableCell9.BorderWidth = 2F; - this.xrTableCell9.Name = "xrTableCell9"; - this.xrTableCell9.Padding = new DevExpress.XtraPrinting.PaddingInfo(2, 2, 0, 0, 100F); - this.xrTableCell9.StyleName = "Headers"; - this.xrTableCell9.StylePriority.UseBorderColor = false; - this.xrTableCell9.StylePriority.UseBorders = false; - this.xrTableCell9.StylePriority.UseBorderWidth = false; - this.xrTableCell9.StylePriority.UseTextAlignment = false; - this.xrTableCell9.Text = "AMOUNT"; - this.xrTableCell9.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleRight; - this.xrTableCell9.Weight = 0.24679486710782655D; - // - // xrTableCell11 - // - this.xrTableCell11.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(46)))), ((int)(((byte)(94)))), ((int)(((byte)(168))))); - this.xrTableCell11.Borders = DevExpress.XtraPrinting.BorderSide.Bottom; - this.xrTableCell11.BorderWidth = 2F; - this.xrTableCell11.Name = "xrTableCell11"; - this.xrTableCell11.Padding = new DevExpress.XtraPrinting.PaddingInfo(2, 10, 0, 0, 100F); - this.xrTableCell11.StyleName = "Headers"; - this.xrTableCell11.StylePriority.UseBorderColor = false; - this.xrTableCell11.StylePriority.UseBorders = false; - this.xrTableCell11.StylePriority.UseBorderWidth = false; - this.xrTableCell11.StylePriority.UsePadding = false; - this.xrTableCell11.StylePriority.UseTextAlignment = false; - this.xrTableCell11.Text = "BALANCE"; - this.xrTableCell11.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleRight; - this.xrTableCell11.Weight = 0.26397427885888147D; - // - // xrTable3 - // - this.xrTable3.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(75)))), ((int)(((byte)(75)))), ((int)(((byte)(75))))); - this.xrTable3.BorderWidth = 0.8F; - this.xrTable3.EvenStyleName = "DetailData3_Odd"; - this.xrTable3.LocationFloat = new DevExpress.Utils.PointFloat(5.298196E-05F, 0F); - this.xrTable3.Name = "xrTable3"; - this.xrTable3.OddStyleName = "DetailData3"; - this.xrTable3.Rows.AddRange(new DevExpress.XtraReports.UI.XRTableRow[] { - this.xrTableRow4}); - this.xrTable3.SizeF = new System.Drawing.SizeF(640.6249F, 29.16667F); - this.xrTable3.StylePriority.UseBorderColor = false; - this.xrTable3.StylePriority.UseBorders = false; - this.xrTable3.StylePriority.UseBorderWidth = false; - // - // xrTableRow4 - // - this.xrTableRow4.Cells.AddRange(new DevExpress.XtraReports.UI.XRTableCell[] { - this.xrTableCell12, - this.xrTableCell13, - this.xrTableCell15, - this.xrTableCell16}); - this.xrTableRow4.Name = "xrTableRow4"; - this.xrTableRow4.Weight = 13.416666666666666D; - // - // xrTableCell12 - // - this.xrTableCell12.ExpressionBindings.AddRange(new DevExpress.XtraReports.UI.ExpressionBinding[] { - new DevExpress.XtraReports.UI.ExpressionBinding("BeforePrint", "Text", "[Date]")}); - this.xrTableCell12.Name = "xrTableCell12"; - this.xrTableCell12.Padding = new DevExpress.XtraPrinting.PaddingInfo(10, 2, 0, 0, 100F); - this.xrTableCell12.StyleName = "DetailData3"; - this.xrTableCell12.StylePriority.UsePadding = false; - this.xrTableCell12.Text = "9/9/2018"; - this.xrTableCell12.TextFormatString = "{0:M/d/yyyy}"; - this.xrTableCell12.Weight = 0.22071864610205361D; - // - // xrTableCell13 - // - this.xrTableCell13.ExpressionBindings.AddRange(new DevExpress.XtraReports.UI.ExpressionBinding[] { - new DevExpress.XtraReports.UI.ExpressionBinding("BeforePrint", "Text", "[Description]")}); - this.xrTableCell13.Name = "xrTableCell13"; - this.xrTableCell13.Padding = new DevExpress.XtraPrinting.PaddingInfo(2, 2, 0, 0, 100F); - this.xrTableCell13.StyleName = "DetailData3"; - this.xrTableCell13.StylePriority.UsePadding = false; - this.xrTableCell13.Text = "Bill - Rent"; - this.xrTableCell13.Weight = 0.190140978530862D; - // - // xrTableCell15 - // - this.xrTableCell15.ExpressionBindings.AddRange(new DevExpress.XtraReports.UI.ExpressionBinding[] { - new DevExpress.XtraReports.UI.ExpressionBinding("BeforePrint", "Text", "Iif(Contains([Description], \'Balance\'), \'\', [Amount])")}); - this.xrTableCell15.Name = "xrTableCell15"; - this.xrTableCell15.Padding = new DevExpress.XtraPrinting.PaddingInfo(6, 2, 0, 0, 100F); - this.xrTableCell15.StyleName = "DetailData3"; - this.xrTableCell15.StylePriority.UsePadding = false; - this.xrTableCell15.StylePriority.UseTextAlignment = false; - this.xrTableCell15.Text = "$210.00"; - this.xrTableCell15.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleRight; - this.xrTableCell15.TextFormatString = "{0:$#,##.00}"; - this.xrTableCell15.Weight = 0.20726019714891966D; - // - // xrTableCell16 - // - this.xrTableCell16.ExpressionBindings.AddRange(new DevExpress.XtraReports.UI.ExpressionBinding[] { - new DevExpress.XtraReports.UI.ExpressionBinding("BeforePrint", "Text", "sumRunningSum([Amount])"), - new DevExpress.XtraReports.UI.ExpressionBinding("BeforePrint", "Font.Name", "\'Open Sans\'"), - new DevExpress.XtraReports.UI.ExpressionBinding("BeforePrint", "Font.Size", "8"), - new DevExpress.XtraReports.UI.ExpressionBinding("BeforePrint", "Font.Bold", "[DataSource.CurrentRowIndex] == [DataSource.RowCount] -1")}); - this.xrTableCell16.Font = new DevExpress.Drawing.DXFont("Open Sans", 8F, DevExpress.Drawing.DXFontStyle.Bold); - this.xrTableCell16.Name = "xrTableCell16"; - this.xrTableCell16.Padding = new DevExpress.XtraPrinting.PaddingInfo(6, 10, 0, 0, 100F); - this.xrTableCell16.StyleName = "DetailData3"; - this.xrTableCell16.StylePriority.UseFont = false; - this.xrTableCell16.StylePriority.UsePadding = false; - this.xrTableCell16.StylePriority.UseTextAlignment = false; - xrSummary1.Running = DevExpress.XtraReports.UI.SummaryRunning.Report; - this.xrTableCell16.Summary = xrSummary1; - this.xrTableCell16.Text = "xrTableCell16"; - this.xrTableCell16.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleRight; - this.xrTableCell16.TextFormatString = "{0:$#,##.00}"; - this.xrTableCell16.Weight = 0.22168754127396906D; - // - // xrLabel3 - // - this.xrLabel3.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(75)))), ((int)(((byte)(75)))), ((int)(((byte)(75))))); - this.xrLabel3.Borders = DevExpress.XtraPrinting.BorderSide.None; - this.xrLabel3.LocationFloat = new DevExpress.Utils.PointFloat(0F, 2.083306F); - this.xrLabel3.Name = "xrLabel3"; - this.xrLabel3.Padding = new DevExpress.XtraPrinting.PaddingInfo(0, 2, 0, 0, 100F); - this.xrLabel3.SizeF = new System.Drawing.SizeF(640.625F, 27.94597F); - this.xrLabel3.StyleName = "Title"; - this.xrLabel3.StylePriority.UseBorderColor = false; - this.xrLabel3.StylePriority.UseBorders = false; - this.xrLabel3.StylePriority.UseFont = false; - this.xrLabel3.StylePriority.UseForeColor = false; - this.xrLabel3.StylePriority.UsePadding = false; - this.xrLabel3.StylePriority.UseTextAlignment = false; - this.xrLabel3.Text = "Payments and Adjustments"; - this.xrLabel3.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleLeft; - // - // xrTable1 - // - this.xrTable1.LocationFloat = new DevExpress.Utils.PointFloat(0F, 0F); - this.xrTable1.Name = "xrTable1"; - this.xrTable1.Rows.AddRange(new DevExpress.XtraReports.UI.XRTableRow[] { - this.xrTableRow1, - this.xrTableRow2}); - this.xrTable1.SizeF = new System.Drawing.SizeF(650F, 98.95834F); - // - // xrTableRow1 - // - this.xrTableRow1.Cells.AddRange(new DevExpress.XtraReports.UI.XRTableCell[] { - this.xrTableCell3, - this.xrTableCell1, - this.xrTableCell2}); - this.xrTableRow1.KeepTogether = false; - this.xrTableRow1.Name = "xrTableRow1"; - this.xrTableRow1.Weight = 0.299592056274414D; - // - // xrTableRow2 - // - this.xrTableRow2.Cells.AddRange(new DevExpress.XtraReports.UI.XRTableCell[] { - this.xrTableCell6, - this.xrTableCell4, - this.xrTableCell5}); - this.xrTableRow2.KeepTogether = false; - this.xrTableRow2.Name = "xrTableRow2"; - this.xrTableRow2.Weight = 0.70040771484374975D; - // - // xrTableCell3 - // - this.xrTableCell3.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(238)))), ((int)(((byte)(241)))), ((int)(((byte)(246))))); - this.xrTableCell3.Borders = DevExpress.XtraPrinting.BorderSide.Right; - this.xrTableCell3.BorderWidth = 2F; - this.xrTableCell3.Multiline = true; - this.xrTableCell3.Name = "xrTableCell3"; - this.xrTableCell3.Padding = new DevExpress.XtraPrinting.PaddingInfo(2, 2, 0, 0, 100F); - this.xrTableCell3.StyleName = "SummaryTitles"; - this.xrTableCell3.StylePriority.UseBorderColor = false; - this.xrTableCell3.StylePriority.UseBorders = false; - this.xrTableCell3.StylePriority.UseBorderWidth = false; - this.xrTableCell3.StylePriority.UseTextAlignment = false; - this.xrTableCell3.Text = "NEW CHARGES\r\n"; - this.xrTableCell3.TextAlignment = DevExpress.XtraPrinting.TextAlignment.BottomCenter; - this.xrTableCell3.Weight = 0.9903846153846152D; - // - // xrTableCell1 - // - this.xrTableCell1.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(238)))), ((int)(((byte)(241)))), ((int)(((byte)(246))))); - this.xrTableCell1.Borders = DevExpress.XtraPrinting.BorderSide.Right; - this.xrTableCell1.BorderWidth = 2F; - this.xrTableCell1.Multiline = true; - this.xrTableCell1.Name = "xrTableCell1"; - this.xrTableCell1.Padding = new DevExpress.XtraPrinting.PaddingInfo(2, 2, 0, 0, 100F); - this.xrTableCell1.StyleName = "SummaryTitles"; - this.xrTableCell1.StylePriority.UseBorderColor = false; - this.xrTableCell1.StylePriority.UseBorders = false; - this.xrTableCell1.StylePriority.UseBorderWidth = false; - this.xrTableCell1.StylePriority.UseTextAlignment = false; - this.xrTableCell1.Text = "PAYMENTS"; - this.xrTableCell1.TextAlignment = DevExpress.XtraPrinting.TextAlignment.BottomCenter; - this.xrTableCell1.Weight = 1D; - // - // xrTableCell2 - // - this.xrTableCell2.Multiline = true; - this.xrTableCell2.Name = "xrTableCell2"; - this.xrTableCell2.Padding = new DevExpress.XtraPrinting.PaddingInfo(2, 2, 0, 0, 100F); - this.xrTableCell2.StyleName = "SummaryTitles"; - this.xrTableCell2.StylePriority.UseBorderColor = false; - this.xrTableCell2.StylePriority.UseBorders = false; - this.xrTableCell2.StylePriority.UseBorderWidth = false; - this.xrTableCell2.StylePriority.UsePadding = false; - this.xrTableCell2.StylePriority.UseTextAlignment = false; - this.xrTableCell2.Text = "CURRENT BALANCE"; - this.xrTableCell2.TextAlignment = DevExpress.XtraPrinting.TextAlignment.BottomCenter; - this.xrTableCell2.Weight = 1.0096153846153846D; - // - // xrTableCell6 - // - this.xrTableCell6.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(238)))), ((int)(((byte)(241)))), ((int)(((byte)(246))))); - this.xrTableCell6.Borders = DevExpress.XtraPrinting.BorderSide.Right; - this.xrTableCell6.BorderWidth = 2F; - this.xrTableCell6.CanGrow = false; - this.xrTableCell6.ExpressionBindings.AddRange(new DevExpress.XtraReports.UI.ExpressionBinding[] { - new DevExpress.XtraReports.UI.ExpressionBinding("BeforePrint", "Text", "[][[Amount] > 0 And !Contains([Description], \'Balance\')].Sum([Amount])")}); - this.xrTableCell6.Font = new DevExpress.Drawing.DXFont("Open Sans", 23F, DevExpress.Drawing.DXFontStyle.Bold); - this.xrTableCell6.Multiline = true; - this.xrTableCell6.Name = "xrTableCell6"; - this.xrTableCell6.Padding = new DevExpress.XtraPrinting.PaddingInfo(0, 0, 2, 0, 100F); - this.xrTableCell6.StyleName = "SummaryValues"; - this.xrTableCell6.StylePriority.UseBorderColor = false; - this.xrTableCell6.StylePriority.UseBorders = false; - this.xrTableCell6.StylePriority.UseBorderWidth = false; - this.xrTableCell6.StylePriority.UseFont = false; - this.xrTableCell6.StylePriority.UsePadding = false; - this.xrTableCell6.Text = "+$210.00"; - this.xrTableCell6.TextFormatString = "+{0:$#,##.00}"; - this.xrTableCell6.Weight = 0.9903846153846152D; - // - // xrTableCell4 - // - this.xrTableCell4.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(238)))), ((int)(((byte)(241)))), ((int)(((byte)(246))))); - this.xrTableCell4.Borders = DevExpress.XtraPrinting.BorderSide.Right; - this.xrTableCell4.BorderWidth = 2F; - this.xrTableCell4.CanGrow = false; - this.xrTableCell4.ExpressionBindings.AddRange(new DevExpress.XtraReports.UI.ExpressionBinding[] { - new DevExpress.XtraReports.UI.ExpressionBinding("BeforePrint", "Text", "[][[Amount] < 0].Sum([Amount])")}); - this.xrTableCell4.Font = new DevExpress.Drawing.DXFont("Open Sans", 23F, DevExpress.Drawing.DXFontStyle.Bold); - this.xrTableCell4.Multiline = true; - this.xrTableCell4.Name = "xrTableCell4"; - this.xrTableCell4.Padding = new DevExpress.XtraPrinting.PaddingInfo(0, 0, 2, 0, 100F); - this.xrTableCell4.StyleName = "SummaryValues"; - this.xrTableCell4.StylePriority.UseBorderColor = false; - this.xrTableCell4.StylePriority.UseBorders = false; - this.xrTableCell4.StylePriority.UseBorderWidth = false; - this.xrTableCell4.StylePriority.UseFont = false; - this.xrTableCell4.StylePriority.UsePadding = false; - this.xrTableCell4.Text = "-$280.00"; - this.xrTableCell4.TextFormatString = "{0:$#,##.00}"; - this.xrTableCell4.Weight = 1D; - // - // xrTableCell5 - // - this.xrTableCell5.CanGrow = false; - this.xrTableCell5.ExpressionBindings.AddRange(new DevExpress.XtraReports.UI.ExpressionBinding[] { - new DevExpress.XtraReports.UI.ExpressionBinding("BeforePrint", "Text", "Sum([Amount])")}); - this.xrTableCell5.Font = new DevExpress.Drawing.DXFont("Open Sans", 23F, DevExpress.Drawing.DXFontStyle.Bold); - this.xrTableCell5.Multiline = true; - this.xrTableCell5.Name = "xrTableCell5"; - this.xrTableCell5.Padding = new DevExpress.XtraPrinting.PaddingInfo(0, 0, 2, 0, 100F); - this.xrTableCell5.StyleName = "SummaryValues"; - this.xrTableCell5.StylePriority.UseBorderColor = false; - this.xrTableCell5.StylePriority.UseBorders = false; - this.xrTableCell5.StylePriority.UseBorderWidth = false; - this.xrTableCell5.StylePriority.UseFont = false; - this.xrTableCell5.StylePriority.UsePadding = false; - this.xrTableCell5.Text = "$1,480.00"; - this.xrTableCell5.TextFormatString = "{0:$#,##.00}"; - this.xrTableCell5.Weight = 1.0096153846153846D; - // - // objectDataSource1 - // - parameter1.Name = "rowCount"; - parameter1.Type = typeof(DevExpress.DataAccess.Expression); - parameter1.Value = new DevExpress.DataAccess.Expression("[Parameters.RowCountParameter]", typeof(int)); - objectConstructorInfo1.Parameters.AddRange(new DevExpress.DataAccess.ObjectBinding.Parameter[] { - parameter1}); - this.objectDataSource1.Constructor = objectConstructorInfo1; - this.objectDataSource1.DataSource = typeof(EnvelopeGenerator.ReceiverUI.Data.DataItemList); - this.objectDataSource1.Name = "objectDataSource1"; - // - // Title - // - this.Title.BackColor = System.Drawing.Color.Transparent; - this.Title.BorderColor = System.Drawing.Color.Black; - this.Title.Borders = DevExpress.XtraPrinting.BorderSide.None; - this.Title.BorderWidth = 1F; - this.Title.Font = new DevExpress.Drawing.DXFont("Open Sans", 13F, DevExpress.Drawing.DXFontStyle.Bold); - this.Title.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(73)))), ((int)(((byte)(80)))), ((int)(((byte)(87))))); - this.Title.Name = "Title"; - // - // ReportTitleCaption - // - this.ReportTitleCaption.BackColor = System.Drawing.Color.Transparent; - this.ReportTitleCaption.BorderColor = System.Drawing.Color.Transparent; - this.ReportTitleCaption.Borders = DevExpress.XtraPrinting.BorderSide.None; - this.ReportTitleCaption.Font = new DevExpress.Drawing.DXFont("Open Sans", 20F, DevExpress.Drawing.DXFontStyle.Bold); - this.ReportTitleCaption.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(73)))), ((int)(((byte)(80)))), ((int)(((byte)(87))))); - this.ReportTitleCaption.Name = "ReportTitleCaption"; - this.ReportTitleCaption.Padding = new DevExpress.XtraPrinting.PaddingInfo(6, 6, 0, 0, 100F); - this.ReportTitleCaption.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleLeft; - // - // DetailData3 - // - this.DetailData3.Font = new DevExpress.Drawing.DXFont("Open Sans", 8.25F); - this.DetailData3.ForeColor = System.Drawing.Color.Black; - this.DetailData3.Name = "DetailData3"; - this.DetailData3.Padding = new DevExpress.XtraPrinting.PaddingInfo(6, 6, 0, 0, 100F); - this.DetailData3.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleLeft; - // - // DetailData3_Odd - // - this.DetailData3_Odd.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(249)))), ((int)(((byte)(250)))), ((int)(((byte)(252))))); - this.DetailData3_Odd.BorderColor = System.Drawing.Color.Transparent; - this.DetailData3_Odd.Borders = DevExpress.XtraPrinting.BorderSide.None; - this.DetailData3_Odd.BorderWidth = 1F; - this.DetailData3_Odd.Font = new DevExpress.Drawing.DXFont("Open Sans", 8.25F); - this.DetailData3_Odd.ForeColor = System.Drawing.Color.Black; - this.DetailData3_Odd.Name = "DetailData3_Odd"; - this.DetailData3_Odd.Padding = new DevExpress.XtraPrinting.PaddingInfo(6, 6, 0, 0, 100F); - this.DetailData3_Odd.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleLeft; - // - // PageInfo - // - this.PageInfo.Font = new DevExpress.Drawing.DXFont("Open Sans", 8.25F, DevExpress.Drawing.DXFontStyle.Bold); - this.PageInfo.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(73)))), ((int)(((byte)(80)))), ((int)(((byte)(87))))); - this.PageInfo.Name = "PageInfo"; - this.PageInfo.Padding = new DevExpress.XtraPrinting.PaddingInfo(2, 2, 0, 0, 100F); - // - // Headers - // - this.Headers.Font = new DevExpress.Drawing.DXFont("Open Sans", 8.25F, DevExpress.Drawing.DXFontStyle.Bold); - this.Headers.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(46)))), ((int)(((byte)(94)))), ((int)(((byte)(168))))); - this.Headers.Name = "Headers"; - this.Headers.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleLeft; - // - // SummaryTitles - // - this.SummaryTitles.Font = new DevExpress.Drawing.DXFont("Open Sans", 9F, DevExpress.Drawing.DXFontStyle.Bold); - this.SummaryTitles.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(171)))), ((int)(((byte)(185)))), ((int)(((byte)(214))))); - this.SummaryTitles.Name = "SummaryTitles"; - this.SummaryTitles.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleCenter; - // - // SummaryValues - // - this.SummaryValues.Font = new DevExpress.Drawing.DXFont("Open Sans", 23F); - this.SummaryValues.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(46)))), ((int)(((byte)(94)))), ((int)(((byte)(168))))); - this.SummaryValues.Name = "SummaryValues"; - this.SummaryValues.Padding = new DevExpress.XtraPrinting.PaddingInfo(0, 0, 16, 0, 100F); - this.SummaryValues.TextAlignment = DevExpress.XtraPrinting.TextAlignment.TopCenter; - // - // RowCountParameter - // - this.RowCountParameter.Description = "Row Count"; - this.RowCountParameter.Name = "RowCountParameter"; - this.RowCountParameter.Type = typeof(int); - this.RowCountParameter.ValueInfo = "100000"; - // - // Report - // - this.Bands.AddRange(new DevExpress.XtraReports.UI.Band[] { - this.topMarginBand1, - this.bottomMarginBand1, - this.detailBand1, - this.detailReportBand1}); - this.ComponentStorage.AddRange(new System.ComponentModel.IComponent[] { - this.objectDataSource1}); - this.DataSource = this.objectDataSource1; - this.DisplayName = "Large Dataset"; - this.Font = new DevExpress.Drawing.DXFont("Open Sans", 9.75F); - this.Parameters.AddRange(new DevExpress.XtraReports.Parameters.Parameter[] { - this.RowCountParameter}); - this.RequestParameters = false; - this.StyleSheet.AddRange(new DevExpress.XtraReports.UI.XRControlStyle[] { - this.Title, - this.ReportTitleCaption, - this.DetailData3, - this.DetailData3_Odd, - this.PageInfo, - this.Headers, - this.SummaryTitles, - this.SummaryValues}); - this.Version = "23.1"; - ((System.ComponentModel.ISupportInitialize)(this.xrTable5)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.xrTable2)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.xrTable3)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.xrTable1)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.objectDataSource1)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this)).EndInit(); - - } - } -} \ No newline at end of file diff --git a/EnvelopeGenerator.ReceiverUI/PredefinedReports/Report.resx b/EnvelopeGenerator.ReceiverUI/PredefinedReports/Report.resx deleted file mode 100644 index ed290a7e..00000000 --- a/EnvelopeGenerator.ReceiverUI/PredefinedReports/Report.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 - - - 17, 17 - - \ No newline at end of file diff --git a/EnvelopeGenerator.ReceiverUI/PredefinedReports/ReportsFactory.cs b/EnvelopeGenerator.ReceiverUI/PredefinedReports/ReportsFactory.cs deleted file mode 100644 index 036bb63f..00000000 --- a/EnvelopeGenerator.ReceiverUI/PredefinedReports/ReportsFactory.cs +++ /dev/null @@ -1,14 +0,0 @@ -using DevExpress.XtraReports.UI; - -namespace EnvelopeGenerator.ReceiverUI.PredefinedReports { - public static class ReportsFactory - { - public static readonly Dictionary> Reports = new() { - ["LargeDatasetReport"] = () => new PredefinedReports.Report() - }; - - public static XtraReport GetReport(string reportName) { - return Reports[reportName](); - } - } -} \ No newline at end of file diff --git a/EnvelopeGenerator.ReceiverUI/Program.cs b/EnvelopeGenerator.ReceiverUI/Program.cs deleted file mode 100644 index 19ac86f9..00000000 --- a/EnvelopeGenerator.ReceiverUI/Program.cs +++ /dev/null @@ -1,78 +0,0 @@ -using Microsoft.AspNetCore.Components.WebAssembly.Hosting; -using Microsoft.AspNetCore.Components.Web; -using EnvelopeGenerator.ReceiverUI; -using DevExpress.DataAccess.Web; -using EnvelopeGenerator.ReceiverUI.Services; -using EnvelopeGenerator.ReceiverUI.Options; -using DevExpress.XtraReports.Services; -using DevExpress.Blazor.Reporting; -using DevExpress.XtraReports.Web.Extensions; -using EnvelopeGenerator.Application.Resources; -using Microsoft.Extensions.Localization; -using System.Globalization; - -var builder = WebAssemblyHostBuilder.CreateDefault(args); -builder.RootComponents.Add("#app"); -builder.RootComponents.Add("head::after"); -builder.Services.AddScoped(sp => new HttpClient { BaseAddress = new Uri(builder.HostEnvironment.BaseAddress) }); -builder.Services.Configure(opts => -builder.Configuration.GetSection(ApiOptions.SectionName).Bind(opts)); -builder.Services.Configure(opts => -builder.Configuration.GetSection(PdfViewerOptions.SectionName).Bind(opts)); -builder.Services.AddScoped(); -builder.Services.AddScoped(); -builder.Services.AddScoped(); -builder.Services.AddScoped(); -builder.Services.AddScoped(); -builder.Services.AddScoped(); -builder.Services.AddSingleton(); -builder.Services.AddScoped(); -builder.Services.AddScoped(); - -// Localization services -builder.Services.AddLocalization(); - -builder.Services.AddDevExpressWebAssemblyBlazorReportViewer(); -builder.Services.AddDevExpressWebAssemblyBlazorPdfViewer(); - -builder.Services.AddDevExpressBlazorReportingWebAssembly(configure => { - configure.UseDevelopmentMode(); -}); -builder.Services.AddScoped(); -builder.Services.AddScoped(); -builder.Services.AddScoped(); -DevExpress.Utils.DeserializationSettings.RegisterTrustedClass(typeof(EnvelopeGenerator.ReceiverUI.Data.DataItemList)); -DevExpress.Utils.DeserializationSettings.RegisterTrustedClass(typeof(EnvelopeGenerator.ReceiverUI.PredefinedReports.Report)); -builder.Services.AddSingleton(); -builder.Services.AddSingleton(sp => sp.GetRequiredService()); -builder.Services.AddScoped(); -ReportStorageWebExtension.RegisterExtensionGlobal(new InMemoryReportStorageWebExtension()); - -var host = builder.Build(); - -// ⚠️ IMPORTANT: BLAZOR WASM-SPECIFIC CULTURE INITIALIZATION -// This approach sets DefaultThreadCurrentCulture globally, which is SAFE for WebAssembly -// because each user runs their own isolated app instance in their browser. -// -// ⚠️ TODO: REMOVE/REFACTOR WHEN MIGRATING TO BLAZOR SERVER/AUTO -// In Server/Auto render modes, this is DANGEROUS because: -// - Server runs a single shared instance for all users -// - Setting global culture affects ALL connected users simultaneously -// - Race conditions and culture conflicts will occur -// -// Migration Guide: -// - Option 1: Use RequestLocalizationMiddleware for per-request culture -// - Option 2: Use CascadingParameter with per-circuit culture state -// - See: https://learn.microsoft.com/aspnet/core/blazor/globalization-localization -// -// Related files to update on migration: -// - LanguageSelector.razor (remove manual culture setting) -// - App.razor (may need CascadingValue for culture) -// - Startup/Program.cs (add middleware) -var cultureService = host.Services.GetRequiredService(); -var culture = await cultureService.InitializeCultureAsync(); -CultureInfo.DefaultThreadCurrentCulture = culture; -CultureInfo.DefaultThreadCurrentUICulture = culture; - -await FontLoader.LoadFonts(host.Services.GetRequiredService(), new List { "opensans.ttf" }); -await host.RunAsync(); diff --git a/EnvelopeGenerator.ReceiverUI/Properties/PublishProfiles/IISProfile.pubxml b/EnvelopeGenerator.ReceiverUI/Properties/PublishProfiles/IISProfile.pubxml deleted file mode 100644 index 4d98da90..00000000 --- a/EnvelopeGenerator.ReceiverUI/Properties/PublishProfiles/IISProfile.pubxml +++ /dev/null @@ -1,17 +0,0 @@ - - - - - Package - Release - Any CPU - - true - false - fb2d306b-1042-4a70-31ed-f991a1599371 - M:\App&Service\0 DD - Smart UP\signFLOW\PreRelease\ReceiverUI\net8\$(Version)\EnvelopeGenerator.ReceiverUI.zip - true - EnvelopeGenerator.ReceiverUI - <_TargetId>IISWebDeployPackage - - \ No newline at end of file diff --git a/EnvelopeGenerator.ReceiverUI/Properties/launchSettings.json b/EnvelopeGenerator.ReceiverUI/Properties/launchSettings.json deleted file mode 100644 index 227c2ec4..00000000 --- a/EnvelopeGenerator.ReceiverUI/Properties/launchSettings.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "profiles": { - "EnvelopeGenerator.ReceiverUI": { - "commandName": "Project", - "launchBrowser": false, - "environmentVariables": { - "ASPNETCORE_ENVIRONMENT": "Development" - }, - "applicationUrl": "https://localhost:52936;http://localhost:52937" - } - } -} \ No newline at end of file diff --git a/EnvelopeGenerator.ReceiverUI/Services/AnnotationService.cs b/EnvelopeGenerator.ReceiverUI/Services/AnnotationService.cs deleted file mode 100644 index 74bb3960..00000000 --- a/EnvelopeGenerator.ReceiverUI/Services/AnnotationService.cs +++ /dev/null @@ -1,34 +0,0 @@ -using System.Net.Http.Json; -using System.Text.Json; -using EnvelopeGenerator.Application.Common.Dto; -using EnvelopeGenerator.ReceiverUI.Models; -using EnvelopeGenerator.ReceiverUI.Options; -using Microsoft.Extensions.Options; - -namespace EnvelopeGenerator.ReceiverUI.Services; - -/// -/// Retrieves annotation positions from the API. -/// The URL is composed as {BaseUrl}/api/Annotation/{envelopeKey}. -/// During development, BaseUrl is empty so the request resolves to the -/// YARP-proxied route on the same origin, which currently serves -/// fake-data/annotations.json. To switch to real data, update the -/// YARP route in yarp.json — no code change required. -/// -[Obsolete("Use SignatureService.")] -public class AnnotationService(HttpClient http, IOptions apiOptions) -{ - private static readonly JsonSerializerOptions _jsonOptions = new(JsonSerializerDefaults.Web); - - public async Task> GetAnnotationsAsync(string envelopeKey, CancellationToken cancel = default) - { - var url = $"{apiOptions.Value.BaseUrl}/api/Annotation/{Uri.EscapeDataString(envelopeKey)}"; - var response = await http.GetAsync(url, cancel); - - if (!response.IsSuccessStatusCode) - return []; - - var result = await response.Content.ReadFromJsonAsync>(_jsonOptions, cancel); - return result ?? []; - } -} diff --git a/EnvelopeGenerator.ReceiverUI/Services/AppVersionService.cs b/EnvelopeGenerator.ReceiverUI/Services/AppVersionService.cs deleted file mode 100644 index 596371fe..00000000 --- a/EnvelopeGenerator.ReceiverUI/Services/AppVersionService.cs +++ /dev/null @@ -1,26 +0,0 @@ -namespace EnvelopeGenerator.ReceiverUI.Services; - -/// -/// Provides application version for cache busting static assets. -/// Version is automatically incremented on each build via AssemblyVersion. -/// -public class AppVersionService -{ - /// - /// Current application version (e.g., "1.0.0.0") - /// - public string Version { get; } - - public AppVersionService() - { - // Get version from assembly metadata - Version = typeof(AppVersionService).Assembly.GetName().Version?.ToString() ?? "1.0.0.0"; - } - - /// - /// Generates versioned URL for static assets (cache busting) - /// - /// Asset path (e.g., "css/envelope-viewer.css") - /// Versioned URL (e.g., "css/envelope-viewer.css?v=1.0.0.0") - public string GetVersionedUrl(string path) => $"{path}?v={Version}"; -} diff --git a/EnvelopeGenerator.ReceiverUI/Services/AuthService.cs b/EnvelopeGenerator.ReceiverUI/Services/AuthService.cs deleted file mode 100644 index 9bff4bd1..00000000 --- a/EnvelopeGenerator.ReceiverUI/Services/AuthService.cs +++ /dev/null @@ -1,103 +0,0 @@ -using System.Net; -using System.Net.Http.Json; -using EnvelopeGenerator.ReceiverUI.Options; -using Microsoft.Extensions.Options; - -namespace EnvelopeGenerator.ReceiverUI.Services; - -public enum EnvelopeLoginResult { Success, InvalidCode, NotFound, Error } - -public enum SenderLoginResult { Success, InvalidCredentials, Error } - -public class AuthService(HttpClient http, IOptions apiOptions) -{ - private readonly ApiOptions _api = apiOptions.Value; - - /// - /// Checks whether the current user holds a valid receiver token for the given envelope key. - /// Calls GET /api/auth/check/envelope/{envelopeKey}. - /// - public async Task CheckEnvelopeAccessAsync(string envelopeKey, CancellationToken cancel = default) - { - var response = await http.GetAsync($"{_api.BaseUrl}/api/auth/check/envelope/{Uri.EscapeDataString(envelopeKey)}", cancel); - return response.StatusCode == HttpStatusCode.OK; - } - - /// - /// Submits the access code for the given envelope key. - /// Calls POST /api/Auth/envelope-receiver/{key} with multipart/form-data. - /// On success the API sets an authentication cookie automatically. - /// - public async Task LoginEnvelopeReceiverAsync(string envelopeKey, string accessCode, CancellationToken cancel = default) - { - var form = new MultipartFormDataContent(); - form.Add(new StringContent(accessCode), "AccessCode"); - - var response = await http.PostAsync( - $"{_api.BaseUrl}/api/Auth/envelope-receiver/{Uri.EscapeDataString(envelopeKey)}", - form, cancel); - - return response.StatusCode switch - { - HttpStatusCode.OK => EnvelopeLoginResult.Success, - HttpStatusCode.Unauthorized => EnvelopeLoginResult.InvalidCode, - HttpStatusCode.NotFound => EnvelopeLoginResult.NotFound, - _ => EnvelopeLoginResult.Error - }; - } - - /// - /// Removes the per-envelope receiver cookie for the given envelope key. - /// Calls POST /api/auth/logout/envelope/{envelopeKey}. - /// - public async Task LogoutEnvelopeReceiverAsync(string envelopeKey, CancellationToken cancel = default) - { - var response = await http.PostAsync( - $"{_api.BaseUrl}/api/auth/logout/envelope/{Uri.EscapeDataString(envelopeKey)}", - null, cancel); - return response.IsSuccessStatusCode; - } - - /// - /// Checks whether the current user holds a valid receiver token for the given envelope key. - /// Calls GET /api/auth/check/envelope/{envelopeKey}. - /// - public async Task CheckSenderAsync(CancellationToken cancel = default) - { - var response = await http.GetAsync($"{_api.BaseUrl}/api/auth/check", cancel); - return response.StatusCode == HttpStatusCode.OK; - } - - /// - /// Authenticates a sender user with username and password. - /// Calls POST /api/auth?cookie=true with JSON body. - /// On success the API sets an authentication cookie automatically. - /// - public async Task LoginSenderAsync(string username, string password, CancellationToken cancel = default) - { - var requestBody = new { username, password }; - - var response = await http.PostAsJsonAsync( - $"{_api.BaseUrl}/api/auth?cookie=true", - requestBody, cancel); - - return response.StatusCode switch - { - HttpStatusCode.OK => SenderLoginResult.Success, - HttpStatusCode.Unauthorized => SenderLoginResult.InvalidCredentials, - _ => SenderLoginResult.Error - }; - } - - /// - /// Logs out the sender user by removing the authentication cookie. - /// Calls POST /api/auth/logout. - /// - public async Task LogoutSenderAsync(CancellationToken cancel = default) - { - var response = await http.PostAsync( - $"{_api.BaseUrl}/api/auth/logout", - null, cancel); - return response.IsSuccessStatusCode; - } -} diff --git a/EnvelopeGenerator.ReceiverUI/Services/CultureService.cs b/EnvelopeGenerator.ReceiverUI/Services/CultureService.cs deleted file mode 100644 index 2b4e4aeb..00000000 --- a/EnvelopeGenerator.ReceiverUI/Services/CultureService.cs +++ /dev/null @@ -1,74 +0,0 @@ -using System.Globalization; -using Microsoft.JSInterop; - -namespace EnvelopeGenerator.ReceiverUI.Services; - -/// -/// Service for managing application culture/localization. -/// -public class CultureService -{ - private readonly IJSRuntime _jsRuntime; - private const string CULTURE_KEY = "AppCulture"; - - public CultureService(IJSRuntime jsRuntime) - { - _jsRuntime = jsRuntime; - } - - /// - /// Gets the list of supported cultures. - /// - public static CultureInfo[] SupportedCultures { get; } = new[] - { - new CultureInfo("de-DE"), - new CultureInfo("en-US"), - new CultureInfo("fr-FR") - }; - - /// - /// Sets the application culture and stores it in localStorage. - /// - public async Task SetCultureAsync(string culture) - { - if (!SupportedCultures.Any(c => c.Name == culture)) - throw new ArgumentException($"Culture '{culture}' is not supported.", nameof(culture)); - - await _jsRuntime.InvokeVoidAsync("localStorage.setItem", CULTURE_KEY, culture); - } - - /// - /// Gets the stored culture from localStorage. - /// - public async Task GetCultureAsync() - { - try - { - return await _jsRuntime.InvokeAsync("localStorage.getItem", CULTURE_KEY); - } - catch - { - return null; - } - } - - /// - /// Initializes the culture from localStorage or browser settings. - /// - public async Task InitializeCultureAsync() - { - var storedCulture = await GetCultureAsync(); - - if (!string.IsNullOrEmpty(storedCulture) && - SupportedCultures.Any(c => c.Name == storedCulture)) - { - return new CultureInfo(storedCulture); - } - - // Fallback to browser culture or default - var browserCulture = CultureInfo.CurrentCulture.Name; - var matchedCulture = SupportedCultures.FirstOrDefault(c => c.Name == browserCulture); - - return matchedCulture ?? SupportedCultures[0]; // Default to German - } -} diff --git a/EnvelopeGenerator.ReceiverUI/Services/CustomDataSourceWizardJsonDataConnectionStorage.cs b/EnvelopeGenerator.ReceiverUI/Services/CustomDataSourceWizardJsonDataConnectionStorage.cs deleted file mode 100644 index 18814f7c..00000000 --- a/EnvelopeGenerator.ReceiverUI/Services/CustomDataSourceWizardJsonDataConnectionStorage.cs +++ /dev/null @@ -1,40 +0,0 @@ -using DevExpress.DataAccess.Json; -using DevExpress.DataAccess.Web; -using DevExpress.DataAccess.Wizard.Services; - -namespace EnvelopeGenerator.ReceiverUI.Services -{ - public class CustomDataSourceWizardJsonDataConnectionStorage : IDataSourceWizardJsonConnectionStorage - { - public static JsonDataConnection GetDefaultConnection() { - var uriJsonSource = new UriJsonSource() { - Uri = new Uri(@"https://raw.githubusercontent.com/DevExpress-Examples/DataSources/master/JSON/customers.json"), - }; - return new JsonDataConnection(uriJsonSource) { StoreConnectionNameOnly = true, Name = "NWindProductsJson" }; - } - public static List GetConnections() { - var connections = new List { - GetDefaultConnection() - }; - return connections; - } - - bool IJsonConnectionStorageService.CanSaveConnection => false; - bool IJsonConnectionStorageService.ContainsConnection(string connectionName) { - return GetConnections().Any(x => x.Name == connectionName); - } - - IEnumerable IJsonConnectionStorageService.GetConnections() { - return GetConnections(); - } - - JsonDataConnection IJsonDataConnectionProviderService.GetJsonDataConnection(string name) { - var connection = GetConnections().FirstOrDefault(x => x.Name == name); - if(connection == null) - throw new InvalidOperationException(); - return connection; - } - - void IJsonConnectionStorageService.SaveConnection(string connectionName, JsonDataConnection connection, bool saveCredentials) { } - } -} \ No newline at end of file diff --git a/EnvelopeGenerator.ReceiverUI/Services/CustomJsonDataConnectionProviderFactory.cs b/EnvelopeGenerator.ReceiverUI/Services/CustomJsonDataConnectionProviderFactory.cs deleted file mode 100644 index 669435d5..00000000 --- a/EnvelopeGenerator.ReceiverUI/Services/CustomJsonDataConnectionProviderFactory.cs +++ /dev/null @@ -1,24 +0,0 @@ -using DevExpress.DataAccess.Json; -using DevExpress.DataAccess.Web; -namespace EnvelopeGenerator.ReceiverUI.Services -{ - public class CustomJsonDataConnectionProviderFactory : IJsonDataConnectionProviderFactory { - public IJsonDataConnectionProviderService Create() { - return new WebDocumentViewerJsonDataConnectionProvider(CustomDataSourceWizardJsonDataConnectionStorage.GetConnections()); - } - } - - public class WebDocumentViewerJsonDataConnectionProvider : IJsonDataConnectionProviderService - { - readonly List jsonDataConnections; - public WebDocumentViewerJsonDataConnectionProvider(List jsonDataConnections) { - this.jsonDataConnections = jsonDataConnections; - } - public JsonDataConnection GetJsonDataConnection(string name) { - var connection = jsonDataConnections.FirstOrDefault(x => x.Name == name); - if(connection == null) - throw new InvalidOperationException(); - return connection; - } - } -} \ No newline at end of file diff --git a/EnvelopeGenerator.ReceiverUI/Services/CustomReportProvider.cs b/EnvelopeGenerator.ReceiverUI/Services/CustomReportProvider.cs deleted file mode 100644 index 535d7ff1..00000000 --- a/EnvelopeGenerator.ReceiverUI/Services/CustomReportProvider.cs +++ /dev/null @@ -1,21 +0,0 @@ -using DevExpress.XtraReports.UI; -using DevExpress.XtraReports.Services; -using EnvelopeGenerator.ReceiverUI.PredefinedReports; - -namespace EnvelopeGenerator.ReceiverUI.Services -{ - public class CustomReportProvider : IReportProviderAsync { - private readonly InMemoryReportStorageWebExtension reportStorage; - - public CustomReportProvider(InMemoryReportStorageWebExtension reportStorage) { - this.reportStorage = reportStorage; - } - - public Task GetReportAsync(string id, ReportProviderContext context) { - if(reportStorage.TryGetReport(id, out var savedReport)) - return Task.FromResult(savedReport); - - return Task.FromResult(ReportsFactory.GetReport(id)); - } - } -} \ No newline at end of file diff --git a/EnvelopeGenerator.ReceiverUI/Services/DocReceiverElementService.cs b/EnvelopeGenerator.ReceiverUI/Services/DocReceiverElementService.cs deleted file mode 100644 index 34ef1916..00000000 --- a/EnvelopeGenerator.ReceiverUI/Services/DocReceiverElementService.cs +++ /dev/null @@ -1,24 +0,0 @@ -using System.Net.Http.Json; -using System.Text.Json; -using EnvelopeGenerator.ReceiverUI.Models; -using EnvelopeGenerator.ReceiverUI.Options; -using Microsoft.Extensions.Options; - -namespace EnvelopeGenerator.ReceiverUI.Services; - -public class DocReceiverElementService(HttpClient http, IOptions apiOptions) -{ - private static readonly JsonSerializerOptions _jsonOptions = new(JsonSerializerDefaults.Web); - - public async Task> GetAsync(string envelopeKey, CancellationToken cancel = default) - { - var url = $"{apiOptions.Value.BaseUrl}/api/DocReceiverElement/{Uri.EscapeDataString(envelopeKey)}"; - var response = await http.GetAsync(url, cancel); - - if (!response.IsSuccessStatusCode) - throw new HttpRequestException($"Failed to retrieve signatures for envelope {envelopeKey}: {response.StatusCode} {response.ReasonPhrase}"); - - var result = await response.Content.ReadFromJsonAsync>(_jsonOptions, cancel); - return result ?? []; - } -} diff --git a/EnvelopeGenerator.ReceiverUI/Services/DocumentService.cs b/EnvelopeGenerator.ReceiverUI/Services/DocumentService.cs deleted file mode 100644 index 08363893..00000000 --- a/EnvelopeGenerator.ReceiverUI/Services/DocumentService.cs +++ /dev/null @@ -1,35 +0,0 @@ -using System.Net; -using System.Net.Http; -using Microsoft.Extensions.Options; -using EnvelopeGenerator.ReceiverUI.Options; - -namespace EnvelopeGenerator.ReceiverUI.Services; - -public class DocumentService(HttpClient http, IOptions apiOptions) -{ - private readonly ApiOptions _api = apiOptions.Value; - - /// - /// Fetches the PDF bytes for the given envelope key from the API. - /// Throws HttpRequestException on failure with appropriate status code. - /// - /// Thrown when the API request fails. - public async Task GetDocumentAsync(string envelopeKey, CancellationToken cancel = default) - { - var response = await http.GetAsync($"{_api.BaseUrl}/api/Document/{Uri.EscapeDataString(envelopeKey)}", cancel); - - if (!response.IsSuccessStatusCode) - { - var statusCode = (int)response.StatusCode; - var reasonPhrase = response.ReasonPhrase ?? "Unknown error"; - throw new HttpRequestException( - $"Failed to load document. Status: {statusCode} ({reasonPhrase})", - null, - response.StatusCode); - } - - var bytes = await response.Content.ReadAsByteArrayAsync(cancel); - return bytes; - } -} - diff --git a/EnvelopeGenerator.ReceiverUI/Services/EnvelopeReceiverService.cs b/EnvelopeGenerator.ReceiverUI/Services/EnvelopeReceiverService.cs deleted file mode 100644 index 944c77a8..00000000 --- a/EnvelopeGenerator.ReceiverUI/Services/EnvelopeReceiverService.cs +++ /dev/null @@ -1,40 +0,0 @@ -using System.Net; -using System.Net.Http.Json; -using System.Text.Json; -using EnvelopeGenerator.ReceiverUI.Models; -using EnvelopeGenerator.ReceiverUI.Options; -using Microsoft.Extensions.Options; - -namespace EnvelopeGenerator.ReceiverUI.Services; - -/// -/// Retrieves the for the authenticated receiver -/// from GET api/EnvelopeReceiver/{envelopeKey}. -/// -public class EnvelopeReceiverService(HttpClient http, IOptions apiOptions) -{ - private static readonly JsonSerializerOptions _jsonOptions = new(JsonSerializerDefaults.Web); - - /// - /// Fetches the envelope receiver data for the given envelope key from the API. - /// Throws HttpRequestException on failure with appropriate status code. - /// - /// Thrown when the API request fails. - public async Task GetAsync(string envelopeKey, CancellationToken cancel = default) - { - var url = $"{apiOptions.Value.BaseUrl}/api/EnvelopeReceiver/{Uri.EscapeDataString(envelopeKey)}"; - var response = await http.GetAsync(url, cancel); - - if (!response.IsSuccessStatusCode) - { - var statusCode = (int)response.StatusCode; - var reasonPhrase = response.ReasonPhrase ?? "Unknown error"; - throw new HttpRequestException( - $"Failed to load envelope receiver data. Status: {statusCode} ({reasonPhrase})", - null, - response.StatusCode); - } - - return await response.Content.ReadFromJsonAsync(_jsonOptions, cancel); - } -} diff --git a/EnvelopeGenerator.ReceiverUI/Services/EnvelopeService.cs b/EnvelopeGenerator.ReceiverUI/Services/EnvelopeService.cs deleted file mode 100644 index 2e61f47d..00000000 --- a/EnvelopeGenerator.ReceiverUI/Services/EnvelopeService.cs +++ /dev/null @@ -1,72 +0,0 @@ -using System.Net.Http.Json; -using System.Text.Json; -using EnvelopeGenerator.ReceiverUI.Models; -using EnvelopeGenerator.ReceiverUI.Options; -using Microsoft.AspNetCore.WebUtilities; -using Microsoft.Extensions.Options; - -namespace EnvelopeGenerator.ReceiverUI.Services; - -/// -/// Retrieves s from the API. -/// -public class EnvelopeService -{ - private readonly HttpClient _http; - private readonly ApiOptions _apiOptions; - private static readonly JsonSerializerOptions _jsonOptions = new(JsonSerializerDefaults.Web); - - public EnvelopeService(HttpClient http, IOptions apiOptions) - { - _http = http; - _apiOptions = apiOptions.Value; - } - - /// - /// Fetches envelopes from the API with optional filters. - /// - /// Thrown when the API request fails. - public async Task?> GetAsync( - int? id = null, - string? uuid = null, - bool? onlyActive = null, - bool? onlyCompleted = null, - CancellationToken cancel = default) - { - var baseUrl = $"{_apiOptions.BaseUrl}/api/Envelope"; - var queryParams = new Dictionary(); - - if (id.HasValue) - { - queryParams["Id"] = id.Value.ToString(); - } - if (!string.IsNullOrEmpty(uuid)) - { - queryParams["Uuid"] = uuid; - } - if (onlyActive.HasValue) - { - queryParams["OnlyActive"] = onlyActive.Value.ToString(); - } - if (onlyCompleted.HasValue) - { - queryParams["OnlyCompleted"] = onlyCompleted.Value.ToString(); - } - - var url = QueryHelpers.AddQueryString(baseUrl, queryParams); - - var response = await _http.GetAsync(url, cancel); - - if (!response.IsSuccessStatusCode) - { - var statusCode = (int)response.StatusCode; - var reasonPhrase = response.ReasonPhrase ?? "Unknown error"; - throw new HttpRequestException( - $"Failed to load envelopes. Status: {statusCode} ({reasonPhrase})", - null, - response.StatusCode); - } - - return await response.Content.ReadFromJsonAsync>(_jsonOptions, cancel); - } -} diff --git a/EnvelopeGenerator.ReceiverUI/Services/FontLoader.cs b/EnvelopeGenerator.ReceiverUI/Services/FontLoader.cs deleted file mode 100644 index 6d51685c..00000000 --- a/EnvelopeGenerator.ReceiverUI/Services/FontLoader.cs +++ /dev/null @@ -1,12 +0,0 @@ -using DevExpress.Drawing; - -namespace EnvelopeGenerator.ReceiverUI.Services { - public static class FontLoader { - public async static Task LoadFonts(HttpClient httpClient, List fontNames) { - foreach(var fontName in fontNames) { - var fontBytes = await httpClient.GetByteArrayAsync($"fonts/{fontName}"); - DXFontRepository.Instance.AddFont(fontBytes); - } - } - } -} \ No newline at end of file diff --git a/EnvelopeGenerator.ReceiverUI/Services/InMemoryReportStorageWebExtension.cs b/EnvelopeGenerator.ReceiverUI/Services/InMemoryReportStorageWebExtension.cs deleted file mode 100644 index 96b40bb8..00000000 --- a/EnvelopeGenerator.ReceiverUI/Services/InMemoryReportStorageWebExtension.cs +++ /dev/null @@ -1,83 +0,0 @@ -using DevExpress.XtraReports.UI; -using DevExpress.XtraReports.Web.Extensions; -using EnvelopeGenerator.ReceiverUI.PredefinedReports; - -namespace EnvelopeGenerator.ReceiverUI.Services; - -public class InMemoryReportStorageWebExtension : ReportStorageWebExtension -{ - private const string DefaultReportName = "LargeDatasetReport"; - private static readonly Dictionary Reports = new(StringComparer.OrdinalIgnoreCase); - - public override bool CanSetData(string url) => IsValidUrl(url); - - public override byte[] GetData(string url) - { - url = NormalizeUrl(url); - - if (Reports.TryGetValue(url, out var reportLayout)) - return reportLayout; - - if (ReportsFactory.Reports.TryGetValue(url, out var reportFactory)) - return SaveReport(reportFactory()); - - throw new DevExpress.XtraReports.Web.ClientControls.FaultException($"Report '{url}' was not found."); - } - - public override Dictionary GetUrls() - { - var urls = ReportsFactory.Reports.Keys - .Concat(Reports.Keys) - .Distinct(StringComparer.OrdinalIgnoreCase) - .ToDictionary(name => name, name => name, StringComparer.OrdinalIgnoreCase); - - return urls; - } - - public override bool IsValidUrl(string url) - { - return !string.IsNullOrWhiteSpace(url) - && url.IndexOfAny(Path.GetInvalidFileNameChars()) < 0; - } - - public override void SetData(XtraReport report, string url) - { - url = NormalizeUrl(url); - Reports[url] = SaveReport(report); - } - - public override string SetNewData(XtraReport report, string defaultUrl) - { - var url = NormalizeUrl(defaultUrl); - Reports[url] = SaveReport(report); - return url; - } - - public bool TryGetReport(string url, out XtraReport report) - { - url = NormalizeUrl(url); - - if (!Reports.ContainsKey(url)) - { - report = null!; - return false; - } - - using var stream = new MemoryStream(Reports[url]); - report = XtraReport.FromXmlStream(stream, true); - report.Name = url; - return true; - } - - private static string NormalizeUrl(string url) - { - return string.IsNullOrWhiteSpace(url) ? DefaultReportName : url; - } - - private static byte[] SaveReport(XtraReport report) - { - using var stream = new MemoryStream(); - report.SaveLayoutToXml(stream); - return stream.ToArray(); - } -} diff --git a/EnvelopeGenerator.ReceiverUI/Services/ObjectDataSourceWizardCustomTypeProvider.cs b/EnvelopeGenerator.ReceiverUI/Services/ObjectDataSourceWizardCustomTypeProvider.cs deleted file mode 100644 index 6dce6391..00000000 --- a/EnvelopeGenerator.ReceiverUI/Services/ObjectDataSourceWizardCustomTypeProvider.cs +++ /dev/null @@ -1,9 +0,0 @@ -using DevExpress.DataAccess.Web; - -namespace EnvelopeGenerator.ReceiverUI.Services { - public class ObjectDataSourceWizardCustomTypeProvider : IObjectDataSourceWizardTypeProvider { - public IEnumerable GetAvailableTypes(string context) { - return new[] { typeof(Data.DataItemList) }; - } - } -} \ No newline at end of file diff --git a/EnvelopeGenerator.ReceiverUI/Services/SignatureCacheService.cs b/EnvelopeGenerator.ReceiverUI/Services/SignatureCacheService.cs deleted file mode 100644 index 04fe4a57..00000000 --- a/EnvelopeGenerator.ReceiverUI/Services/SignatureCacheService.cs +++ /dev/null @@ -1,67 +0,0 @@ -using System.Net.Http.Json; -using Microsoft.Extensions.Options; -using EnvelopeGenerator.ReceiverUI.Options; -using EnvelopeGenerator.ReceiverUI.Models; - -namespace EnvelopeGenerator.ReceiverUI.Services; - -/// -/// Client service for managing cached signatures via API. -/// -public class SignatureCacheService(HttpClient http, IOptions apiOptions) -{ - private readonly ApiOptions _api = apiOptions.Value; - - public async Task SaveSignatureAsync( - string envelopeKey, - SignatureCaptureDto signature, - CancellationToken cancel = default) - { - var response = await http.PostAsJsonAsync( - $"{_api.BaseUrl}/api/Cache/SignatureCapture/{Uri.EscapeDataString(envelopeKey)}", - signature, - cancel); - - if (!response.IsSuccessStatusCode) - { - var error = await response.Content.ReadAsStringAsync(cancel); - throw new HttpRequestException($"Failed to cache signature: {response.StatusCode} - {error}"); - } - } - - public async Task GetSignatureAsync( - string envelopeKey, - CancellationToken cancel = default) - { - var response = await http.GetAsync( - $"{_api.BaseUrl}/api/Cache/SignatureCapture/{Uri.EscapeDataString(envelopeKey)}", - cancel); - - if (response.StatusCode == System.Net.HttpStatusCode.NotFound) - return null; - - if (!response.IsSuccessStatusCode) - { - var error = await response.Content.ReadAsStringAsync(cancel); - throw new HttpRequestException($"Failed to retrieve signature: {response.StatusCode} - {error}"); - } - - return await response.Content.ReadFromJsonAsync(cancellationToken: cancel); - } - - public async Task DeleteSignatureAsync( - string envelopeKey, - CancellationToken cancel = default) - { - var response = await http.DeleteAsync( - $"{_api.BaseUrl}/api/Cache/SignatureCapture/{Uri.EscapeDataString(envelopeKey)}", - cancel); - - if (!response.IsSuccessStatusCode) - { - var error = await response.Content.ReadAsStringAsync(cancel); - throw new HttpRequestException($"Failed to delete signature: {response.StatusCode} - {error}"); - } - } -} - diff --git a/EnvelopeGenerator.ReceiverUI/Shared/Header.razor b/EnvelopeGenerator.ReceiverUI/Shared/Header.razor deleted file mode 100644 index 9cb7c979..00000000 --- a/EnvelopeGenerator.ReceiverUI/Shared/Header.razor +++ /dev/null @@ -1,21 +0,0 @@ - - -@code { - [Parameter] public bool ToggleOn { get; set; } - [Parameter] public EventCallback ToggleOnChanged { get; set; } - - async Task OnToggleClick() => await Toggle(); - - async Task Toggle(bool? value = null) { - var newValue = value ?? !ToggleOn; - if(ToggleOn != newValue) { - ToggleOn = newValue; - await ToggleOnChanged.InvokeAsync(ToggleOn); - } - } -} \ No newline at end of file diff --git a/EnvelopeGenerator.ReceiverUI/Shared/Header.razor.css b/EnvelopeGenerator.ReceiverUI/Shared/Header.razor.css deleted file mode 100644 index edb43931..00000000 --- a/EnvelopeGenerator.ReceiverUI/Shared/Header.razor.css +++ /dev/null @@ -1,39 +0,0 @@ -.navbar.header-navbar { - flex-grow: 0; - flex-wrap: nowrap; - border: none; - background-color: inherit; - border-radius: 0; - height: 3.5rem; - min-height: 3.5rem; - box-shadow: 0px 2px 6px 0px rgba(0, 0, 0, 0.12); - justify-content: flex-start; -} - -.header-navbar .navbar-toggler { - outline: none; - border-radius: 0; - padding-left: .75rem; - padding-right: .75rem; - box-shadow: none; - align-self: stretch; -} - -.header-navbar .navbar-toggler .navbar-toggler-icon { - background-image: url("data:image/svg+xml;charset=utf8,%3Csvg viewBox='0 0 32 32' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='rgba(255,255,255, 1)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 8h24M4 16h24M4 24h24'/%3E%3C/svg%3E"); - background-color: transparent !important; - height: 2rem; - width: 2rem; -} - -.title { - font-size: 1.1rem; - text-overflow: ellipsis; - overflow: hidden; -} - -@media (max-width: 350px) { - .title { - font-size: inherit; - } -} diff --git a/EnvelopeGenerator.ReceiverUI/Shared/LanguageSelector.razor b/EnvelopeGenerator.ReceiverUI/Shared/LanguageSelector.razor deleted file mode 100644 index e426e22a..00000000 --- a/EnvelopeGenerator.ReceiverUI/Shared/LanguageSelector.razor +++ /dev/null @@ -1,80 +0,0 @@ -@using System.Globalization -@using EnvelopeGenerator.ReceiverUI.Services -@inject IJSRuntime JSRuntime -@inject NavigationManager Navigation -@inject CultureService CultureService - -
- - - @if (isOpen) - { -
- - - -
- } -
- -@code { - private bool isOpen = false; - private string CurrentCulture => CultureInfo.CurrentCulture.Name; - - private void ToggleDropdown() - { - isOpen = !isOpen; - } - - private async Task ChangeLanguageAsync(string culture) - { - if (CultureInfo.CurrentCulture.Name != culture) - { - await CultureService.SetCultureAsync(culture); - - // Set culture without page reload - var cultureInfo = new CultureInfo(culture); - CultureInfo.DefaultThreadCurrentCulture = cultureInfo; - CultureInfo.DefaultThreadCurrentUICulture = cultureInfo; - - // Navigate without reload to trigger re-render - Navigation.NavigateTo(Navigation.Uri, forceLoad: false); - } - - isOpen = false; - } - - private string GetFlagCode(string culture) - { - return culture switch - { - "de-DE" => "de", - "en-US" => "us", - "fr-FR" => "fr", - _ => "de" - }; - } - - private string GetLanguageName(string culture) - { - return culture switch - { - "de-DE" => "Deutsch", - "en-US" => "English", - "fr-FR" => "Français", - _ => "Deutsch" - }; - } -} diff --git a/EnvelopeGenerator.ReceiverUI/Shared/LanguageSelector.razor.css b/EnvelopeGenerator.ReceiverUI/Shared/LanguageSelector.razor.css deleted file mode 100644 index e69de29b..00000000 diff --git a/EnvelopeGenerator.ReceiverUI/Shared/MainLayout.razor b/EnvelopeGenerator.ReceiverUI/Shared/MainLayout.razor deleted file mode 100644 index 873ea018..00000000 --- a/EnvelopeGenerator.ReceiverUI/Shared/MainLayout.razor +++ /dev/null @@ -1,30 +0,0 @@ -@using EnvelopeGenerator.ReceiverUI.Services; -@inherits LayoutComponentBase - -
-
-
- @Body -
-
- -
- -@code { - [Inject] HttpClient Http { get; set; } - List RequiredFonts = new() { - "opensans.ttf" - }; - - protected async override Task OnInitializedAsync() { - await FontLoader.LoadFonts(Http, RequiredFonts); - await base.OnInitializedAsync(); - } -} \ No newline at end of file diff --git a/EnvelopeGenerator.ReceiverUI/Shared/MainLayout.razor.css b/EnvelopeGenerator.ReceiverUI/Shared/MainLayout.razor.css deleted file mode 100644 index ef51f3a9..00000000 --- a/EnvelopeGenerator.ReceiverUI/Shared/MainLayout.razor.css +++ /dev/null @@ -1,32 +0,0 @@ -.page { - position: relative; - display: flex; - flex-direction: column; - overflow: auto; -} - -main { - flex: 1; - margin: 0; - padding: 0; -} - -article { - padding: 0 !important; - margin: 0 !important; -} - -.receiver-footer { - display: flex; - justify-content: space-between; - align-items: center; - padding: 1rem 2rem; - gap: 1rem; -} - -.receiver-footer__content { - display: flex; - align-items: center; - gap: 0.5rem; -} - diff --git a/EnvelopeGenerator.ReceiverUI/Shared/NavMenu.razor b/EnvelopeGenerator.ReceiverUI/Shared/NavMenu.razor deleted file mode 100644 index fa17f626..00000000 --- a/EnvelopeGenerator.ReceiverUI/Shared/NavMenu.razor +++ /dev/null @@ -1,46 +0,0 @@ - - -
- -
- -@code { - private bool collapseNavMenu = true; - - private string NavMenuCssClass => collapseNavMenu ? "collapse" : null; - - private void ToggleNavMenu() - { - collapseNavMenu = !collapseNavMenu; - } -} \ No newline at end of file diff --git a/EnvelopeGenerator.ReceiverUI/Shared/NavMenu.razor.css b/EnvelopeGenerator.ReceiverUI/Shared/NavMenu.razor.css deleted file mode 100644 index 66181ee2..00000000 --- a/EnvelopeGenerator.ReceiverUI/Shared/NavMenu.razor.css +++ /dev/null @@ -1,63 +0,0 @@ -.navbar-toggler { - background-color: rgba(255, 255, 255, 0.1); -} - -.top-row { - height: 3.5rem; - background-color: rgba(0,0,0,0.4); -} - -.navbar-brand { - font-size: 1.1rem; -} - -.oi { - width: 2rem; - font-size: 1.1rem; - vertical-align: text-top; - top: -2px; -} - -.nav-item { - font-size: 0.9rem; - padding-bottom: 0.5rem; -} - - .nav-item:first-of-type { - padding-top: 1rem; - } - - .nav-item:last-of-type { - padding-bottom: 1rem; - } - - .nav-item ::deep a { - color: #d7d7d7; - border-radius: 4px; - height: 3rem; - display: flex; - align-items: center; - line-height: 3rem; - white-space: nowrap; - } - -.nav-item ::deep a.active { - background-color: rgba(255,255,255,0.25); - color: white; -} - -.nav-item ::deep a:hover { - background-color: rgba(255,255,255,0.1); - color: white; -} - -@media (min-width: 641px) { - .navbar-toggler { - display: none; - } - - .sidebar .collapse { - /* Never collapse the sidebar for wide screens */ - display: block; - } -} diff --git a/EnvelopeGenerator.ReceiverUI/_Imports.razor b/EnvelopeGenerator.ReceiverUI/_Imports.razor deleted file mode 100644 index 9d5bd866..00000000 --- a/EnvelopeGenerator.ReceiverUI/_Imports.razor +++ /dev/null @@ -1,10 +0,0 @@ -@using System.Net.Http -@using Microsoft.AspNetCore.Components.Forms -@using Microsoft.AspNetCore.Components.Routing -@using Microsoft.AspNetCore.Components.Web -@using Microsoft.JSInterop -@using EnvelopeGenerator.ReceiverUI -@using EnvelopeGenerator.ReceiverUI.Shared -@using DevExpress.Blazor.Reporting -@using DevExpress.Blazor.PdfViewer -@using DevExpress.Blazor \ No newline at end of file diff --git a/EnvelopeGenerator.ReceiverUI/appsettings.Development.json b/EnvelopeGenerator.ReceiverUI/appsettings.Development.json deleted file mode 100644 index 3293d7ac..00000000 --- a/EnvelopeGenerator.ReceiverUI/appsettings.Development.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "Logging": { - "IncludeScopes": false, - "LogLevel": { - "Default": "Information", - "System": "Information", - "Microsoft": "Information" - } - } -} diff --git a/EnvelopeGenerator.ReceiverUI/appsettings.json b/EnvelopeGenerator.ReceiverUI/appsettings.json deleted file mode 100644 index 5745bc45..00000000 --- a/EnvelopeGenerator.ReceiverUI/appsettings.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "Logging": { - "LogLevel": { - "Default": "Information", - "Microsoft": "Warning", - "Microsoft.Hosting.Lifetime": "Information", - "DevExpress": "Warning" - } - } -} diff --git a/EnvelopeGenerator.ReceiverUI/wwwroot/appsettings.json b/EnvelopeGenerator.ReceiverUI/wwwroot/appsettings.json deleted file mode 100644 index 23b77e53..00000000 --- a/EnvelopeGenerator.ReceiverUI/wwwroot/appsettings.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "Api": { - "BaseUrl": "", - "UsePredefinedReports": false - }, - "PdfViewer": { - "ThumbnailBaseScale": 0.75, - "ThumbnailEnableHiDPI": true, - "ThumbnailMaxDPR": 2.0, - "MainCanvasEnableHiDPI": true, - "MainCanvasMaxDPR": 2.0, - "EnableSmoothZoom": true, - "ZoomTransitionDuration": 900, - "RenderingOpacity": 0.85, - "ThumbnailRenderDelay": 50, - "ZoomStepPercentage": 5 - } -} diff --git a/EnvelopeGenerator.ReceiverUI/wwwroot/browserNotSupported.html b/EnvelopeGenerator.ReceiverUI/wwwroot/browserNotSupported.html deleted file mode 100644 index dc931a7f..00000000 --- a/EnvelopeGenerator.ReceiverUI/wwwroot/browserNotSupported.html +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - -
-
- -
-
Your browser is not supported.
-

In .NET 5.0, Blazor does not support Microsoft Internet Explorer and Microsoft Edge Legacy (refer to Supported Browsers).
Please use a different browser to run EnvelopeGenerator.ReceiverUI.

-
-
-
- - \ No newline at end of file diff --git a/EnvelopeGenerator.ReceiverUI/wwwroot/css/app.css b/EnvelopeGenerator.ReceiverUI/wwwroot/css/app.css deleted file mode 100644 index 48de5029..00000000 --- a/EnvelopeGenerator.ReceiverUI/wwwroot/css/app.css +++ /dev/null @@ -1,439 +0,0 @@ -@import url('open-iconic/font/css/open-iconic-bootstrap.min.css'); - -html, body { - font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; - padding: 0; - margin: 0; - width: 100%; -} - -html, body { - height: 100%; - overflow: hidden; -} - -main, .page { - margin: 0; - padding: 0; - width: 100%; -} - -article { - height: calc(100vh - 36px); - display: flex; - flex-direction: column; - overflow-y: auto; - padding: 0 !important; - margin: 0 !important; -} - -.receiver-page-layout { - display: flex; - flex-direction: column; - height: 100%; - overflow: hidden; -} - -.receiver-signature-panel { - flex: 0 0 auto; -} - -.receiver-viewer-wrapper { - flex: 1 1 0; - min-height: 0; - overflow: hidden; -} - -.valid.modified:not([type=checkbox]) { - outline: 1px solid #26b050; -} - -.invalid { - outline: 1px solid red; -} - -.validation-message { - color: red; -} - -#blazor-error-ui { - background: lightyellow; - bottom: 0; - box-shadow: 0 -1px 2px rgba(0, 0, 0, 0.2); - display: none; - left: 0; - padding: 0.6rem 1.25rem 0.7rem 1.25rem; - position: fixed; - width: 100%; - z-index: 1000; -} - -#blazor-error-ui .dismiss { - cursor: pointer; - position: absolute; - right: 0.75rem; - top: 0.5rem; -} - -.dx-blazor-reporting-container { - height: calc(100vh - 166px) !important; - width: 100% !important; -} - -/* ── Force DevExpress viewer pages into a single centered column ─────────── */ -.dxbrv-report-preview-content { - display: flex !important; - flex-direction: column !important; - align-items: center !important; -} - -/* ── Annotation signature checkbox overlays ─────────────────────────────── */ -.annot-sig-cb-wrapper { - display: flex; - align-items: center; - justify-content: center; - gap: 8px; - border-radius: 6px; - font-size: 0.75rem; - font-weight: 600; - font-family: "Segoe UI", Arial, sans-serif; - padding: 0 12px; - overflow: hidden; - cursor: pointer; - user-select: none; - background: linear-gradient(135deg, #2c3e50 0%, #3498db 100%); - border: none; - color: #ffffff; - box-shadow: 0 2px 8px rgba(44, 62, 80, 0.35); - transition: box-shadow 0.18s, filter 0.18s; -} - -.annot-sig-cb-wrapper:hover { - filter: brightness(1.12); - box-shadow: 0 4px 14px rgba(44, 62, 80, 0.45); -} - -.annot-sig-cb-wrapper--checked { - background: linear-gradient(135deg, #1a6b2a 0%, #27ae60 100%); - box-shadow: 0 2px 8px rgba(26, 107, 42, 0.35); -} - -.annot-sig-cb-wrapper--checked:hover { - filter: brightness(1.1); - box-shadow: 0 4px 14px rgba(26, 107, 42, 0.45); -} - -.annot-sig-cb { - display: none; -} - -.annot-sig-cb__label { - white-space: nowrap; - overflow: hidden; - text-overflow: ellipsis; - pointer-events: none; - letter-spacing: 0.01em; -} - -/* ── Envelope info header ────────────────────────────────────────────────── */ -.receiver-info-header { - border-bottom: 1px solid rgba(0,0,0,.08); -} - -.receiver-info-header__gradient { - display: flex; - align-items: center; - justify-content: space-between; - flex-wrap: wrap; - gap: 8px; - padding: 10px 16px 8px; - background: linear-gradient(135deg, #2c3e50 0%, #3498db 100%); - color: #fff; -} - -.receiver-info-header__left { - display: flex; - align-items: center; - gap: 10px; - min-width: 0; -} - -.receiver-info-header__icon { - flex-shrink: 0; - opacity: .85; -} - -.receiver-info-header__title { - font-size: 0.92rem; - font-weight: 600; - white-space: nowrap; - overflow: hidden; - text-overflow: ellipsis; - max-width: 340px; -} - -.receiver-info-header__sender { - font-size: 0.72rem; - opacity: .8; - margin-top: 1px; - white-space: nowrap; - overflow: hidden; - text-overflow: ellipsis; - max-width: 400px; -} - -.receiver-info-header__badges { - display: flex; - flex-wrap: wrap; - gap: 5px; - align-items: center; -} - -.receiver-info-badge { - display: inline-flex; - align-items: center; - background: rgba(255,255,255,.18); - color: #fff; - border-radius: 20px; - padding: 2px 9px; - font-size: 0.70rem; - font-weight: 500; - white-space: nowrap; -} - -.receiver-info-badge--muted { - background: rgba(255,255,255,.10); - opacity: .8; -} - -.receiver-info-badge--accent { - background: rgba(39,174,96,.35); - border: 1px solid rgba(39,174,96,.5); -} - -.receiver-info-message { - padding: 7px 16px; - font-size: 0.78rem; - color: #444; - border-bottom: 1px solid rgba(0,0,0,.05); - white-space: pre-wrap; - line-height: 1.45; -} - -.receiver-info-private-message { - display: flex; - align-items: flex-start; - gap: 4px; - padding: 5px 16px 6px; - font-size: 0.75rem; - color: #5a5a72; - background: #f8f7ff; - border-top: 1px solid rgba(90,80,180,.12); -} - -/* ── Signature action bar ────────────────────────────────────────────────── */ -.receiver-action-bar { - border-bottom: 1px solid rgba(0,0,0,.08); - background: #fff; -} - -.receiver-action-bar__inner { - display: flex; - align-items: center; - flex-wrap: wrap; - gap: 10px; - padding: 7px 14px; -} - -.receiver-action-bar__progress { - display: flex; - align-items: center; - gap: 7px; - flex-wrap: wrap; -} - -/* ── Home page ───────────────────────────────────────────────────────────── */ -.home-page-wrapper { - display: flex; - flex-direction: column; - align-items: center; - min-height: calc(100vh - 36px); - background: linear-gradient(160deg, #1e2e3e 0%, #2c3e50 40%, #3498db 100%); - padding-bottom: 36px; -} - -.home-hero-header { - width: 100%; - padding: 48px 24px 36px; - text-align: center; -} - -.home-hero-header__inner { - display: inline-flex; - align-items: center; - gap: 20px; - color: #fff; -} - -.home-hero-header__icon { - opacity: 0.90; - flex-shrink: 0; -} - -.home-hero-header__title { - font-size: 2rem; - font-weight: 700; - margin: 0; - color: #fff; - letter-spacing: 0.02em; -} - -.home-hero-header__subtitle { - font-size: 0.92rem; - margin: 4px 0 0; - color: rgba(255,255,255,0.75); -} - -.home-content { - width: 100%; - max-width: 520px; - padding: 0 16px; -} - -.home-card { - border-radius: 12px !important; - overflow: hidden; -} - -.home-btn-primary { - background: linear-gradient(135deg, #2c3e50 0%, #3498db 100%); - border: none; - color: #fff; - font-weight: 500; - border-radius: 8px; - transition: filter 0.15s, box-shadow 0.15s; - box-shadow: 0 2px 10px rgba(44,62,80,0.30); -} - -.home-btn-primary:hover { - filter: brightness(1.12); - box-shadow: 0 4px 16px rgba(44,62,80,0.40); - color: #fff; -} - -.home-feature-badge { - display: inline-flex; - align-items: center; - background: rgba(52,152,219,0.10); - color: #3498db; - border: 1px solid rgba(52,152,219,0.25); - border-radius: 20px; - padding: 4px 12px; - font-size: 0.75rem; - font-weight: 500; -} - -/* ── Footer ──────────────────────────────────────────────────────────────── */ -.receiver-footer { - position: fixed; - bottom: 0; - left: 0; - right: 0; - height: 36px; - display: flex; - align-items: center; - justify-content: center; - gap: 10px; - padding: 0 20px; - background: linear-gradient(135deg, #2c3e50 0%, #3498db 100%); - color: rgba(255, 255, 255, 0.75); - font-size: 0.72rem; - z-index: 100; - flex-shrink: 0; -} - -.receiver-footer a { - color: rgba(255, 255, 255, 0.90); - text-decoration: none; - transition: color 0.15s; -} - -.receiver-footer a:hover { - color: #ffffff; - text-decoration: underline; -} - -.receiver-footer__sep { - opacity: 0.4; -} - -/* ── Language Selector (Footer) ──────────────────────────────────────────── */ -.language-selector { - position: relative; - display: inline-block; -} - -.language-selector__trigger { - display: flex; - align-items: center; - gap: 0.4rem; - padding: 0.25rem 0.5rem; - background: rgba(255, 255, 255, 0.1); - border: 1px solid rgba(255, 255, 255, 0.2); - border-radius: 4px; - color: rgba(255, 255, 255, 0.9); - cursor: pointer; - font-size: 1rem; - transition: all 0.2s ease; -} - -.language-selector__trigger:hover { - background: rgba(255, 255, 255, 0.15); - border-color: rgba(255, 255, 255, 0.3); -} - -.language-selector__arrow { - font-size: 0.6rem; - transition: transform 0.2s ease; - opacity: 0.7; -} - -.language-selector__dropdown { - position: absolute; - bottom: calc(100% + 0.5rem); - right: 0; - background: white; - border: 1px solid #ddd; - border-radius: 6px; - box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15); - min-width: 160px; - z-index: 1000; - overflow: hidden; -} - -.language-selector__option { - display: flex; - align-items: center; - gap: 0.75rem; - width: 100%; - padding: 0.65rem 1rem; - background: white; - border: none; - color: #333; - cursor: pointer; - font-size: 0.9rem; - transition: background-color 0.2s ease; - text-align: left; -} - -.language-selector__option:hover { - background-color: #f5f5f5; -} - -.language-selector__option .fi { - font-size: 1.25rem; -} - -.language-selector__option span:last-child { - font-weight: 500; -} diff --git a/EnvelopeGenerator.ReceiverUI/wwwroot/css/bootstrap/bootstrap.css b/EnvelopeGenerator.ReceiverUI/wwwroot/css/bootstrap/bootstrap.css deleted file mode 100644 index c7c4fbc6..00000000 --- a/EnvelopeGenerator.ReceiverUI/wwwroot/css/bootstrap/bootstrap.css +++ /dev/null @@ -1,12063 +0,0 @@ -@charset "UTF-8"; -/*! - * Bootstrap v5.3.1 (https://getbootstrap.com/) - * Copyright 2011-2023 The Bootstrap Authors - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) - */ -:root, -[data-bs-theme=light] { - --bs-blue: #0d6efd; - --bs-indigo: #6610f2; - --bs-purple: #6f42c1; - --bs-pink: #d63384; - --bs-red: #dc3545; - --bs-orange: #fd7e14; - --bs-yellow: #ffc107; - --bs-green: #198754; - --bs-teal: #20c997; - --bs-cyan: #0dcaf0; - --bs-black: #000; - --bs-white: #fff; - --bs-gray: #6c757d; - --bs-gray-dark: #343a40; - --bs-gray-100: #f8f9fa; - --bs-gray-200: #e9ecef; - --bs-gray-300: #dee2e6; - --bs-gray-400: #ced4da; - --bs-gray-500: #adb5bd; - --bs-gray-600: #6c757d; - --bs-gray-700: #495057; - --bs-gray-800: #343a40; - --bs-gray-900: #212529; - --bs-primary: #0d6efd; - --bs-secondary: #6c757d; - --bs-success: #198754; - --bs-info: #0dcaf0; - --bs-warning: #ffc107; - --bs-danger: #dc3545; - --bs-light: #f8f9fa; - --bs-dark: #212529; - --bs-primary-rgb: 13, 110, 253; - --bs-secondary-rgb: 108, 117, 125; - --bs-success-rgb: 25, 135, 84; - --bs-info-rgb: 13, 202, 240; - --bs-warning-rgb: 255, 193, 7; - --bs-danger-rgb: 220, 53, 69; - --bs-light-rgb: 248, 249, 250; - --bs-dark-rgb: 33, 37, 41; - --bs-primary-text-emphasis: #052c65; - --bs-secondary-text-emphasis: #2b2f32; - --bs-success-text-emphasis: #0a3622; - --bs-info-text-emphasis: #055160; - --bs-warning-text-emphasis: #664d03; - --bs-danger-text-emphasis: #58151c; - --bs-light-text-emphasis: #495057; - --bs-dark-text-emphasis: #495057; - --bs-primary-bg-subtle: #cfe2ff; - --bs-secondary-bg-subtle: #e2e3e5; - --bs-success-bg-subtle: #d1e7dd; - --bs-info-bg-subtle: #cff4fc; - --bs-warning-bg-subtle: #fff3cd; - --bs-danger-bg-subtle: #f8d7da; - --bs-light-bg-subtle: #fcfcfd; - --bs-dark-bg-subtle: #ced4da; - --bs-primary-border-subtle: #9ec5fe; - --bs-secondary-border-subtle: #c4c8cb; - --bs-success-border-subtle: #a3cfbb; - --bs-info-border-subtle: #9eeaf9; - --bs-warning-border-subtle: #ffe69c; - --bs-danger-border-subtle: #f1aeb5; - --bs-light-border-subtle: #e9ecef; - --bs-dark-border-subtle: #adb5bd; - --bs-white-rgb: 255, 255, 255; - --bs-black-rgb: 0, 0, 0; - --bs-font-sans-serif: system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", "Liberation Sans", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; - --bs-font-monospace: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; - --bs-gradient: linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0)); - --bs-body-font-family: var(--bs-font-sans-serif); - --bs-body-font-size: 1rem; - --bs-body-font-weight: 400; - --bs-body-line-height: 1.5; - --bs-body-color: #212529; - --bs-body-color-rgb: 33, 37, 41; - --bs-body-bg: #fff; - --bs-body-bg-rgb: 255, 255, 255; - --bs-emphasis-color: #000; - --bs-emphasis-color-rgb: 0, 0, 0; - --bs-secondary-color: rgba(33, 37, 41, 0.75); - --bs-secondary-color-rgb: 33, 37, 41; - --bs-secondary-bg: #e9ecef; - --bs-secondary-bg-rgb: 233, 236, 239; - --bs-tertiary-color: rgba(33, 37, 41, 0.5); - --bs-tertiary-color-rgb: 33, 37, 41; - --bs-tertiary-bg: #f8f9fa; - --bs-tertiary-bg-rgb: 248, 249, 250; - --bs-heading-color: inherit; - --bs-link-color: #0d6efd; - --bs-link-color-rgb: 13, 110, 253; - --bs-link-decoration: underline; - --bs-link-hover-color: #0a58ca; - --bs-link-hover-color-rgb: 10, 88, 202; - --bs-code-color: #d63384; - --bs-highlight-bg: #fff3cd; - --bs-border-width: 1px; - --bs-border-style: solid; - --bs-border-color: #dee2e6; - --bs-border-color-translucent: rgba(0, 0, 0, 0.175); - --bs-border-radius: 0.375rem; - --bs-border-radius-sm: 0.25rem; - --bs-border-radius-lg: 0.5rem; - --bs-border-radius-xl: 1rem; - --bs-border-radius-xxl: 2rem; - --bs-border-radius-2xl: var(--bs-border-radius-xxl); - --bs-border-radius-pill: 50rem; - --bs-box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15); - --bs-box-shadow-sm: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075); - --bs-box-shadow-lg: 0 1rem 3rem rgba(0, 0, 0, 0.175); - --bs-box-shadow-inset: inset 0 1px 2px rgba(0, 0, 0, 0.075); - --bs-focus-ring-width: 0.25rem; - --bs-focus-ring-opacity: 0.25; - --bs-focus-ring-color: rgba(13, 110, 253, 0.25); - --bs-form-valid-color: #198754; - --bs-form-valid-border-color: #198754; - --bs-form-invalid-color: #dc3545; - --bs-form-invalid-border-color: #dc3545; -} - -[data-bs-theme=dark] { - color-scheme: dark; - --bs-body-color: #dee2e6; - --bs-body-color-rgb: 222, 226, 230; - --bs-body-bg: #212529; - --bs-body-bg-rgb: 33, 37, 41; - --bs-emphasis-color: #fff; - --bs-emphasis-color-rgb: 255, 255, 255; - --bs-secondary-color: rgba(222, 226, 230, 0.75); - --bs-secondary-color-rgb: 222, 226, 230; - --bs-secondary-bg: #343a40; - --bs-secondary-bg-rgb: 52, 58, 64; - --bs-tertiary-color: rgba(222, 226, 230, 0.5); - --bs-tertiary-color-rgb: 222, 226, 230; - --bs-tertiary-bg: #2b3035; - --bs-tertiary-bg-rgb: 43, 48, 53; - --bs-primary-text-emphasis: #6ea8fe; - --bs-secondary-text-emphasis: #a7acb1; - --bs-success-text-emphasis: #75b798; - --bs-info-text-emphasis: #6edff6; - --bs-warning-text-emphasis: #ffda6a; - --bs-danger-text-emphasis: #ea868f; - --bs-light-text-emphasis: #f8f9fa; - --bs-dark-text-emphasis: #dee2e6; - --bs-primary-bg-subtle: #031633; - --bs-secondary-bg-subtle: #161719; - --bs-success-bg-subtle: #051b11; - --bs-info-bg-subtle: #032830; - --bs-warning-bg-subtle: #332701; - --bs-danger-bg-subtle: #2c0b0e; - --bs-light-bg-subtle: #343a40; - --bs-dark-bg-subtle: #1a1d20; - --bs-primary-border-subtle: #084298; - --bs-secondary-border-subtle: #41464b; - --bs-success-border-subtle: #0f5132; - --bs-info-border-subtle: #087990; - --bs-warning-border-subtle: #997404; - --bs-danger-border-subtle: #842029; - --bs-light-border-subtle: #495057; - --bs-dark-border-subtle: #343a40; - --bs-heading-color: inherit; - --bs-link-color: #6ea8fe; - --bs-link-hover-color: #8bb9fe; - --bs-link-color-rgb: 110, 168, 254; - --bs-link-hover-color-rgb: 139, 185, 254; - --bs-code-color: #e685b5; - --bs-border-color: #495057; - --bs-border-color-translucent: rgba(255, 255, 255, 0.15); - --bs-form-valid-color: #75b798; - --bs-form-valid-border-color: #75b798; - --bs-form-invalid-color: #ea868f; - --bs-form-invalid-border-color: #ea868f; -} - -*, -*::before, -*::after { - box-sizing: border-box; -} - -@media (prefers-reduced-motion: no-preference) { - :root { - scroll-behavior: smooth; - } -} - -body { - margin: 0; - font-family: var(--bs-body-font-family); - font-size: var(--bs-body-font-size); - font-weight: var(--bs-body-font-weight); - line-height: var(--bs-body-line-height); - color: var(--bs-body-color); - text-align: var(--bs-body-text-align); - background-color: var(--bs-body-bg); - -webkit-text-size-adjust: 100%; - -webkit-tap-highlight-color: rgba(0, 0, 0, 0); -} - -hr { - margin: 1rem 0; - color: inherit; - border: 0; - border-top: var(--bs-border-width) solid; - opacity: 0.25; -} - -h6, .h6, h5, .h5, h4, .h4, h3, .h3, h2, .h2, h1, .h1 { - margin-top: 0; - margin-bottom: 0.5rem; - font-weight: 500; - line-height: 1.2; - color: var(--bs-heading-color); -} - -h1, .h1 { - font-size: calc(1.375rem + 1.5vw); -} -@media (min-width: 1200px) { - h1, .h1 { - font-size: 2.5rem; - } -} - -h2, .h2 { - font-size: calc(1.325rem + 0.9vw); -} -@media (min-width: 1200px) { - h2, .h2 { - font-size: 2rem; - } -} - -h3, .h3 { - font-size: calc(1.3rem + 0.6vw); -} -@media (min-width: 1200px) { - h3, .h3 { - font-size: 1.75rem; - } -} - -h4, .h4 { - font-size: calc(1.275rem + 0.3vw); -} -@media (min-width: 1200px) { - h4, .h4 { - font-size: 1.5rem; - } -} - -h5, .h5 { - font-size: 1.25rem; -} - -h6, .h6 { - font-size: 1rem; -} - -p { - margin-top: 0; - margin-bottom: 1rem; -} - -abbr[title] { - -webkit-text-decoration: underline dotted; - text-decoration: underline dotted; - cursor: help; - -webkit-text-decoration-skip-ink: none; - text-decoration-skip-ink: none; -} - -address { - margin-bottom: 1rem; - font-style: normal; - line-height: inherit; -} - -ol, -ul { - padding-left: 2rem; -} - -ol, -ul, -dl { - margin-top: 0; - margin-bottom: 1rem; -} - -ol ol, -ul ul, -ol ul, -ul ol { - margin-bottom: 0; -} - -dt { - font-weight: 700; -} - -dd { - margin-bottom: 0.5rem; - margin-left: 0; -} - -blockquote { - margin: 0 0 1rem; -} - -b, -strong { - font-weight: bolder; -} - -small, .small { - font-size: 0.875em; -} - -mark, .mark { - padding: 0.1875em; - background-color: var(--bs-highlight-bg); -} - -sub, -sup { - position: relative; - font-size: 0.75em; - line-height: 0; - vertical-align: baseline; -} - -sub { - bottom: -0.25em; -} - -sup { - top: -0.5em; -} - -a { - color: rgba(var(--bs-link-color-rgb), var(--bs-link-opacity, 1)); - text-decoration: underline; -} -a:hover { - --bs-link-color-rgb: var(--bs-link-hover-color-rgb); -} - -a:not([href]):not([class]), a:not([href]):not([class]):hover { - color: inherit; - text-decoration: none; -} - -pre, -code, -kbd, -samp { - font-family: var(--bs-font-monospace); - font-size: 1em; -} - -pre { - display: block; - margin-top: 0; - margin-bottom: 1rem; - overflow: auto; - font-size: 0.875em; -} -pre code { - font-size: inherit; - color: inherit; - word-break: normal; -} - -code { - font-size: 0.875em; - color: var(--bs-code-color); - word-wrap: break-word; -} -a > code { - color: inherit; -} - -kbd { - padding: 0.1875rem 0.375rem; - font-size: 0.875em; - color: var(--bs-body-bg); - background-color: var(--bs-body-color); - border-radius: 0.25rem; -} -kbd kbd { - padding: 0; - font-size: 1em; -} - -figure { - margin: 0 0 1rem; -} - -img, -svg { - vertical-align: middle; -} - -table { - caption-side: bottom; - border-collapse: collapse; -} - -caption { - padding-top: 0.5rem; - padding-bottom: 0.5rem; - color: var(--bs-secondary-color); - text-align: left; -} - -th { - text-align: inherit; - text-align: -webkit-match-parent; -} - -thead, -tbody, -tfoot, -tr, -td, -th { - border-color: inherit; - border-style: solid; - border-width: 0; -} - -label { - display: inline-block; -} - -button { - border-radius: 0; -} - -button:focus:not(:focus-visible) { - outline: 0; -} - -input, -button, -select, -optgroup, -textarea { - margin: 0; - font-family: inherit; - font-size: inherit; - line-height: inherit; -} - -button, -select { - text-transform: none; -} - -[role=button] { - cursor: pointer; -} - -select { - word-wrap: normal; -} -select:disabled { - opacity: 1; -} - -[list]:not([type=date]):not([type=datetime-local]):not([type=month]):not([type=week]):not([type=time])::-webkit-calendar-picker-indicator { - display: none !important; -} - -button, -[type=button], -[type=reset], -[type=submit] { - -webkit-appearance: button; -} -button:not(:disabled), -[type=button]:not(:disabled), -[type=reset]:not(:disabled), -[type=submit]:not(:disabled) { - cursor: pointer; -} - -::-moz-focus-inner { - padding: 0; - border-style: none; -} - -textarea { - resize: vertical; -} - -fieldset { - min-width: 0; - padding: 0; - margin: 0; - border: 0; -} - -legend { - float: left; - width: 100%; - padding: 0; - margin-bottom: 0.5rem; - font-size: calc(1.275rem + 0.3vw); - line-height: inherit; -} -@media (min-width: 1200px) { - legend { - font-size: 1.5rem; - } -} -legend + * { - clear: left; -} - -::-webkit-datetime-edit-fields-wrapper, -::-webkit-datetime-edit-text, -::-webkit-datetime-edit-minute, -::-webkit-datetime-edit-hour-field, -::-webkit-datetime-edit-day-field, -::-webkit-datetime-edit-month-field, -::-webkit-datetime-edit-year-field { - padding: 0; -} - -::-webkit-inner-spin-button { - height: auto; -} - -[type=search] { - -webkit-appearance: textfield; - outline-offset: -2px; -} - -/* rtl:raw: -[type="tel"], -[type="url"], -[type="email"], -[type="number"] { - direction: ltr; -} -*/ -::-webkit-search-decoration { - -webkit-appearance: none; -} - -::-webkit-color-swatch-wrapper { - padding: 0; -} - -::-webkit-file-upload-button { - font: inherit; - -webkit-appearance: button; -} - -::file-selector-button { - font: inherit; - -webkit-appearance: button; -} - -output { - display: inline-block; -} - -iframe { - border: 0; -} - -summary { - display: list-item; - cursor: pointer; -} - -progress { - vertical-align: baseline; -} - -[hidden] { - display: none !important; -} - -.lead { - font-size: 1.25rem; - font-weight: 300; -} - -.display-1 { - font-size: calc(1.625rem + 4.5vw); - font-weight: 300; - line-height: 1.2; -} -@media (min-width: 1200px) { - .display-1 { - font-size: 5rem; - } -} - -.display-2 { - font-size: calc(1.575rem + 3.9vw); - font-weight: 300; - line-height: 1.2; -} -@media (min-width: 1200px) { - .display-2 { - font-size: 4.5rem; - } -} - -.display-3 { - font-size: calc(1.525rem + 3.3vw); - font-weight: 300; - line-height: 1.2; -} -@media (min-width: 1200px) { - .display-3 { - font-size: 4rem; - } -} - -.display-4 { - font-size: calc(1.475rem + 2.7vw); - font-weight: 300; - line-height: 1.2; -} -@media (min-width: 1200px) { - .display-4 { - font-size: 3.5rem; - } -} - -.display-5 { - font-size: calc(1.425rem + 2.1vw); - font-weight: 300; - line-height: 1.2; -} -@media (min-width: 1200px) { - .display-5 { - font-size: 3rem; - } -} - -.display-6 { - font-size: calc(1.375rem + 1.5vw); - font-weight: 300; - line-height: 1.2; -} -@media (min-width: 1200px) { - .display-6 { - font-size: 2.5rem; - } -} - -.list-unstyled { - padding-left: 0; - list-style: none; -} - -.list-inline { - padding-left: 0; - list-style: none; -} - -.list-inline-item { - display: inline-block; -} -.list-inline-item:not(:last-child) { - margin-right: 0.5rem; -} - -.initialism { - font-size: 0.875em; - text-transform: uppercase; -} - -.blockquote { - margin-bottom: 1rem; - font-size: 1.25rem; -} -.blockquote > :last-child { - margin-bottom: 0; -} - -.blockquote-footer { - margin-top: -1rem; - margin-bottom: 1rem; - font-size: 0.875em; - color: #6c757d; -} -.blockquote-footer::before { - content: "— "; -} - -.img-fluid { - max-width: 100%; - height: auto; -} - -.img-thumbnail { - padding: 0.25rem; - background-color: var(--bs-body-bg); - border: var(--bs-border-width) solid var(--bs-border-color); - border-radius: var(--bs-border-radius); - max-width: 100%; - height: auto; -} - -.figure { - display: inline-block; -} - -.figure-img { - margin-bottom: 0.5rem; - line-height: 1; -} - -.figure-caption { - font-size: 0.875em; - color: var(--bs-secondary-color); -} - -.container, -.container-fluid, -.container-xxl, -.container-xl, -.container-lg, -.container-md, -.container-sm { - --bs-gutter-x: 1.5rem; - --bs-gutter-y: 0; - width: 100%; - padding-right: calc(var(--bs-gutter-x) * 0.5); - padding-left: calc(var(--bs-gutter-x) * 0.5); - margin-right: auto; - margin-left: auto; -} - -@media (min-width: 576px) { - .container-sm, .container { - max-width: 540px; - } -} -@media (min-width: 768px) { - .container-md, .container-sm, .container { - max-width: 720px; - } -} -@media (min-width: 992px) { - .container-lg, .container-md, .container-sm, .container { - max-width: 960px; - } -} -@media (min-width: 1200px) { - .container-xl, .container-lg, .container-md, .container-sm, .container { - max-width: 1140px; - } -} -@media (min-width: 1400px) { - .container-xxl, .container-xl, .container-lg, .container-md, .container-sm, .container { - max-width: 1320px; - } -} -:root { - --bs-breakpoint-xs: 0; - --bs-breakpoint-sm: 576px; - --bs-breakpoint-md: 768px; - --bs-breakpoint-lg: 992px; - --bs-breakpoint-xl: 1200px; - --bs-breakpoint-xxl: 1400px; -} - -.row { - --bs-gutter-x: 1.5rem; - --bs-gutter-y: 0; - display: flex; - flex-wrap: wrap; - margin-top: calc(-1 * var(--bs-gutter-y)); - margin-right: calc(-0.5 * var(--bs-gutter-x)); - margin-left: calc(-0.5 * var(--bs-gutter-x)); -} -.row > * { - flex-shrink: 0; - width: 100%; - max-width: 100%; - padding-right: calc(var(--bs-gutter-x) * 0.5); - padding-left: calc(var(--bs-gutter-x) * 0.5); - margin-top: var(--bs-gutter-y); -} - -.col { - flex: 1 0 0%; -} - -.row-cols-auto > * { - flex: 0 0 auto; - width: auto; -} - -.row-cols-1 > * { - flex: 0 0 auto; - width: 100%; -} - -.row-cols-2 > * { - flex: 0 0 auto; - width: 50%; -} - -.row-cols-3 > * { - flex: 0 0 auto; - width: 33.3333333333%; -} - -.row-cols-4 > * { - flex: 0 0 auto; - width: 25%; -} - -.row-cols-5 > * { - flex: 0 0 auto; - width: 20%; -} - -.row-cols-6 > * { - flex: 0 0 auto; - width: 16.6666666667%; -} - -.col-auto { - flex: 0 0 auto; - width: auto; -} - -.col-1 { - flex: 0 0 auto; - width: 8.33333333%; -} - -.col-2 { - flex: 0 0 auto; - width: 16.66666667%; -} - -.col-3 { - flex: 0 0 auto; - width: 25%; -} - -.col-4 { - flex: 0 0 auto; - width: 33.33333333%; -} - -.col-5 { - flex: 0 0 auto; - width: 41.66666667%; -} - -.col-6 { - flex: 0 0 auto; - width: 50%; -} - -.col-7 { - flex: 0 0 auto; - width: 58.33333333%; -} - -.col-8 { - flex: 0 0 auto; - width: 66.66666667%; -} - -.col-9 { - flex: 0 0 auto; - width: 75%; -} - -.col-10 { - flex: 0 0 auto; - width: 83.33333333%; -} - -.col-11 { - flex: 0 0 auto; - width: 91.66666667%; -} - -.col-12 { - flex: 0 0 auto; - width: 100%; -} - -.offset-1 { - margin-left: 8.33333333%; -} - -.offset-2 { - margin-left: 16.66666667%; -} - -.offset-3 { - margin-left: 25%; -} - -.offset-4 { - margin-left: 33.33333333%; -} - -.offset-5 { - margin-left: 41.66666667%; -} - -.offset-6 { - margin-left: 50%; -} - -.offset-7 { - margin-left: 58.33333333%; -} - -.offset-8 { - margin-left: 66.66666667%; -} - -.offset-9 { - margin-left: 75%; -} - -.offset-10 { - margin-left: 83.33333333%; -} - -.offset-11 { - margin-left: 91.66666667%; -} - -.g-0, -.gx-0 { - --bs-gutter-x: 0; -} - -.g-0, -.gy-0 { - --bs-gutter-y: 0; -} - -.g-1, -.gx-1 { - --bs-gutter-x: 0.25rem; -} - -.g-1, -.gy-1 { - --bs-gutter-y: 0.25rem; -} - -.g-2, -.gx-2 { - --bs-gutter-x: 0.5rem; -} - -.g-2, -.gy-2 { - --bs-gutter-y: 0.5rem; -} - -.g-3, -.gx-3 { - --bs-gutter-x: 1rem; -} - -.g-3, -.gy-3 { - --bs-gutter-y: 1rem; -} - -.g-4, -.gx-4 { - --bs-gutter-x: 1.5rem; -} - -.g-4, -.gy-4 { - --bs-gutter-y: 1.5rem; -} - -.g-5, -.gx-5 { - --bs-gutter-x: 3rem; -} - -.g-5, -.gy-5 { - --bs-gutter-y: 3rem; -} - -@media (min-width: 576px) { - .col-sm { - flex: 1 0 0%; - } - .row-cols-sm-auto > * { - flex: 0 0 auto; - width: auto; - } - .row-cols-sm-1 > * { - flex: 0 0 auto; - width: 100%; - } - .row-cols-sm-2 > * { - flex: 0 0 auto; - width: 50%; - } - .row-cols-sm-3 > * { - flex: 0 0 auto; - width: 33.3333333333%; - } - .row-cols-sm-4 > * { - flex: 0 0 auto; - width: 25%; - } - .row-cols-sm-5 > * { - flex: 0 0 auto; - width: 20%; - } - .row-cols-sm-6 > * { - flex: 0 0 auto; - width: 16.6666666667%; - } - .col-sm-auto { - flex: 0 0 auto; - width: auto; - } - .col-sm-1 { - flex: 0 0 auto; - width: 8.33333333%; - } - .col-sm-2 { - flex: 0 0 auto; - width: 16.66666667%; - } - .col-sm-3 { - flex: 0 0 auto; - width: 25%; - } - .col-sm-4 { - flex: 0 0 auto; - width: 33.33333333%; - } - .col-sm-5 { - flex: 0 0 auto; - width: 41.66666667%; - } - .col-sm-6 { - flex: 0 0 auto; - width: 50%; - } - .col-sm-7 { - flex: 0 0 auto; - width: 58.33333333%; - } - .col-sm-8 { - flex: 0 0 auto; - width: 66.66666667%; - } - .col-sm-9 { - flex: 0 0 auto; - width: 75%; - } - .col-sm-10 { - flex: 0 0 auto; - width: 83.33333333%; - } - .col-sm-11 { - flex: 0 0 auto; - width: 91.66666667%; - } - .col-sm-12 { - flex: 0 0 auto; - width: 100%; - } - .offset-sm-0 { - margin-left: 0; - } - .offset-sm-1 { - margin-left: 8.33333333%; - } - .offset-sm-2 { - margin-left: 16.66666667%; - } - .offset-sm-3 { - margin-left: 25%; - } - .offset-sm-4 { - margin-left: 33.33333333%; - } - .offset-sm-5 { - margin-left: 41.66666667%; - } - .offset-sm-6 { - margin-left: 50%; - } - .offset-sm-7 { - margin-left: 58.33333333%; - } - .offset-sm-8 { - margin-left: 66.66666667%; - } - .offset-sm-9 { - margin-left: 75%; - } - .offset-sm-10 { - margin-left: 83.33333333%; - } - .offset-sm-11 { - margin-left: 91.66666667%; - } - .g-sm-0, - .gx-sm-0 { - --bs-gutter-x: 0; - } - .g-sm-0, - .gy-sm-0 { - --bs-gutter-y: 0; - } - .g-sm-1, - .gx-sm-1 { - --bs-gutter-x: 0.25rem; - } - .g-sm-1, - .gy-sm-1 { - --bs-gutter-y: 0.25rem; - } - .g-sm-2, - .gx-sm-2 { - --bs-gutter-x: 0.5rem; - } - .g-sm-2, - .gy-sm-2 { - --bs-gutter-y: 0.5rem; - } - .g-sm-3, - .gx-sm-3 { - --bs-gutter-x: 1rem; - } - .g-sm-3, - .gy-sm-3 { - --bs-gutter-y: 1rem; - } - .g-sm-4, - .gx-sm-4 { - --bs-gutter-x: 1.5rem; - } - .g-sm-4, - .gy-sm-4 { - --bs-gutter-y: 1.5rem; - } - .g-sm-5, - .gx-sm-5 { - --bs-gutter-x: 3rem; - } - .g-sm-5, - .gy-sm-5 { - --bs-gutter-y: 3rem; - } -} -@media (min-width: 768px) { - .col-md { - flex: 1 0 0%; - } - .row-cols-md-auto > * { - flex: 0 0 auto; - width: auto; - } - .row-cols-md-1 > * { - flex: 0 0 auto; - width: 100%; - } - .row-cols-md-2 > * { - flex: 0 0 auto; - width: 50%; - } - .row-cols-md-3 > * { - flex: 0 0 auto; - width: 33.3333333333%; - } - .row-cols-md-4 > * { - flex: 0 0 auto; - width: 25%; - } - .row-cols-md-5 > * { - flex: 0 0 auto; - width: 20%; - } - .row-cols-md-6 > * { - flex: 0 0 auto; - width: 16.6666666667%; - } - .col-md-auto { - flex: 0 0 auto; - width: auto; - } - .col-md-1 { - flex: 0 0 auto; - width: 8.33333333%; - } - .col-md-2 { - flex: 0 0 auto; - width: 16.66666667%; - } - .col-md-3 { - flex: 0 0 auto; - width: 25%; - } - .col-md-4 { - flex: 0 0 auto; - width: 33.33333333%; - } - .col-md-5 { - flex: 0 0 auto; - width: 41.66666667%; - } - .col-md-6 { - flex: 0 0 auto; - width: 50%; - } - .col-md-7 { - flex: 0 0 auto; - width: 58.33333333%; - } - .col-md-8 { - flex: 0 0 auto; - width: 66.66666667%; - } - .col-md-9 { - flex: 0 0 auto; - width: 75%; - } - .col-md-10 { - flex: 0 0 auto; - width: 83.33333333%; - } - .col-md-11 { - flex: 0 0 auto; - width: 91.66666667%; - } - .col-md-12 { - flex: 0 0 auto; - width: 100%; - } - .offset-md-0 { - margin-left: 0; - } - .offset-md-1 { - margin-left: 8.33333333%; - } - .offset-md-2 { - margin-left: 16.66666667%; - } - .offset-md-3 { - margin-left: 25%; - } - .offset-md-4 { - margin-left: 33.33333333%; - } - .offset-md-5 { - margin-left: 41.66666667%; - } - .offset-md-6 { - margin-left: 50%; - } - .offset-md-7 { - margin-left: 58.33333333%; - } - .offset-md-8 { - margin-left: 66.66666667%; - } - .offset-md-9 { - margin-left: 75%; - } - .offset-md-10 { - margin-left: 83.33333333%; - } - .offset-md-11 { - margin-left: 91.66666667%; - } - .g-md-0, - .gx-md-0 { - --bs-gutter-x: 0; - } - .g-md-0, - .gy-md-0 { - --bs-gutter-y: 0; - } - .g-md-1, - .gx-md-1 { - --bs-gutter-x: 0.25rem; - } - .g-md-1, - .gy-md-1 { - --bs-gutter-y: 0.25rem; - } - .g-md-2, - .gx-md-2 { - --bs-gutter-x: 0.5rem; - } - .g-md-2, - .gy-md-2 { - --bs-gutter-y: 0.5rem; - } - .g-md-3, - .gx-md-3 { - --bs-gutter-x: 1rem; - } - .g-md-3, - .gy-md-3 { - --bs-gutter-y: 1rem; - } - .g-md-4, - .gx-md-4 { - --bs-gutter-x: 1.5rem; - } - .g-md-4, - .gy-md-4 { - --bs-gutter-y: 1.5rem; - } - .g-md-5, - .gx-md-5 { - --bs-gutter-x: 3rem; - } - .g-md-5, - .gy-md-5 { - --bs-gutter-y: 3rem; - } -} -@media (min-width: 992px) { - .col-lg { - flex: 1 0 0%; - } - .row-cols-lg-auto > * { - flex: 0 0 auto; - width: auto; - } - .row-cols-lg-1 > * { - flex: 0 0 auto; - width: 100%; - } - .row-cols-lg-2 > * { - flex: 0 0 auto; - width: 50%; - } - .row-cols-lg-3 > * { - flex: 0 0 auto; - width: 33.3333333333%; - } - .row-cols-lg-4 > * { - flex: 0 0 auto; - width: 25%; - } - .row-cols-lg-5 > * { - flex: 0 0 auto; - width: 20%; - } - .row-cols-lg-6 > * { - flex: 0 0 auto; - width: 16.6666666667%; - } - .col-lg-auto { - flex: 0 0 auto; - width: auto; - } - .col-lg-1 { - flex: 0 0 auto; - width: 8.33333333%; - } - .col-lg-2 { - flex: 0 0 auto; - width: 16.66666667%; - } - .col-lg-3 { - flex: 0 0 auto; - width: 25%; - } - .col-lg-4 { - flex: 0 0 auto; - width: 33.33333333%; - } - .col-lg-5 { - flex: 0 0 auto; - width: 41.66666667%; - } - .col-lg-6 { - flex: 0 0 auto; - width: 50%; - } - .col-lg-7 { - flex: 0 0 auto; - width: 58.33333333%; - } - .col-lg-8 { - flex: 0 0 auto; - width: 66.66666667%; - } - .col-lg-9 { - flex: 0 0 auto; - width: 75%; - } - .col-lg-10 { - flex: 0 0 auto; - width: 83.33333333%; - } - .col-lg-11 { - flex: 0 0 auto; - width: 91.66666667%; - } - .col-lg-12 { - flex: 0 0 auto; - width: 100%; - } - .offset-lg-0 { - margin-left: 0; - } - .offset-lg-1 { - margin-left: 8.33333333%; - } - .offset-lg-2 { - margin-left: 16.66666667%; - } - .offset-lg-3 { - margin-left: 25%; - } - .offset-lg-4 { - margin-left: 33.33333333%; - } - .offset-lg-5 { - margin-left: 41.66666667%; - } - .offset-lg-6 { - margin-left: 50%; - } - .offset-lg-7 { - margin-left: 58.33333333%; - } - .offset-lg-8 { - margin-left: 66.66666667%; - } - .offset-lg-9 { - margin-left: 75%; - } - .offset-lg-10 { - margin-left: 83.33333333%; - } - .offset-lg-11 { - margin-left: 91.66666667%; - } - .g-lg-0, - .gx-lg-0 { - --bs-gutter-x: 0; - } - .g-lg-0, - .gy-lg-0 { - --bs-gutter-y: 0; - } - .g-lg-1, - .gx-lg-1 { - --bs-gutter-x: 0.25rem; - } - .g-lg-1, - .gy-lg-1 { - --bs-gutter-y: 0.25rem; - } - .g-lg-2, - .gx-lg-2 { - --bs-gutter-x: 0.5rem; - } - .g-lg-2, - .gy-lg-2 { - --bs-gutter-y: 0.5rem; - } - .g-lg-3, - .gx-lg-3 { - --bs-gutter-x: 1rem; - } - .g-lg-3, - .gy-lg-3 { - --bs-gutter-y: 1rem; - } - .g-lg-4, - .gx-lg-4 { - --bs-gutter-x: 1.5rem; - } - .g-lg-4, - .gy-lg-4 { - --bs-gutter-y: 1.5rem; - } - .g-lg-5, - .gx-lg-5 { - --bs-gutter-x: 3rem; - } - .g-lg-5, - .gy-lg-5 { - --bs-gutter-y: 3rem; - } -} -@media (min-width: 1200px) { - .col-xl { - flex: 1 0 0%; - } - .row-cols-xl-auto > * { - flex: 0 0 auto; - width: auto; - } - .row-cols-xl-1 > * { - flex: 0 0 auto; - width: 100%; - } - .row-cols-xl-2 > * { - flex: 0 0 auto; - width: 50%; - } - .row-cols-xl-3 > * { - flex: 0 0 auto; - width: 33.3333333333%; - } - .row-cols-xl-4 > * { - flex: 0 0 auto; - width: 25%; - } - .row-cols-xl-5 > * { - flex: 0 0 auto; - width: 20%; - } - .row-cols-xl-6 > * { - flex: 0 0 auto; - width: 16.6666666667%; - } - .col-xl-auto { - flex: 0 0 auto; - width: auto; - } - .col-xl-1 { - flex: 0 0 auto; - width: 8.33333333%; - } - .col-xl-2 { - flex: 0 0 auto; - width: 16.66666667%; - } - .col-xl-3 { - flex: 0 0 auto; - width: 25%; - } - .col-xl-4 { - flex: 0 0 auto; - width: 33.33333333%; - } - .col-xl-5 { - flex: 0 0 auto; - width: 41.66666667%; - } - .col-xl-6 { - flex: 0 0 auto; - width: 50%; - } - .col-xl-7 { - flex: 0 0 auto; - width: 58.33333333%; - } - .col-xl-8 { - flex: 0 0 auto; - width: 66.66666667%; - } - .col-xl-9 { - flex: 0 0 auto; - width: 75%; - } - .col-xl-10 { - flex: 0 0 auto; - width: 83.33333333%; - } - .col-xl-11 { - flex: 0 0 auto; - width: 91.66666667%; - } - .col-xl-12 { - flex: 0 0 auto; - width: 100%; - } - .offset-xl-0 { - margin-left: 0; - } - .offset-xl-1 { - margin-left: 8.33333333%; - } - .offset-xl-2 { - margin-left: 16.66666667%; - } - .offset-xl-3 { - margin-left: 25%; - } - .offset-xl-4 { - margin-left: 33.33333333%; - } - .offset-xl-5 { - margin-left: 41.66666667%; - } - .offset-xl-6 { - margin-left: 50%; - } - .offset-xl-7 { - margin-left: 58.33333333%; - } - .offset-xl-8 { - margin-left: 66.66666667%; - } - .offset-xl-9 { - margin-left: 75%; - } - .offset-xl-10 { - margin-left: 83.33333333%; - } - .offset-xl-11 { - margin-left: 91.66666667%; - } - .g-xl-0, - .gx-xl-0 { - --bs-gutter-x: 0; - } - .g-xl-0, - .gy-xl-0 { - --bs-gutter-y: 0; - } - .g-xl-1, - .gx-xl-1 { - --bs-gutter-x: 0.25rem; - } - .g-xl-1, - .gy-xl-1 { - --bs-gutter-y: 0.25rem; - } - .g-xl-2, - .gx-xl-2 { - --bs-gutter-x: 0.5rem; - } - .g-xl-2, - .gy-xl-2 { - --bs-gutter-y: 0.5rem; - } - .g-xl-3, - .gx-xl-3 { - --bs-gutter-x: 1rem; - } - .g-xl-3, - .gy-xl-3 { - --bs-gutter-y: 1rem; - } - .g-xl-4, - .gx-xl-4 { - --bs-gutter-x: 1.5rem; - } - .g-xl-4, - .gy-xl-4 { - --bs-gutter-y: 1.5rem; - } - .g-xl-5, - .gx-xl-5 { - --bs-gutter-x: 3rem; - } - .g-xl-5, - .gy-xl-5 { - --bs-gutter-y: 3rem; - } -} -@media (min-width: 1400px) { - .col-xxl { - flex: 1 0 0%; - } - .row-cols-xxl-auto > * { - flex: 0 0 auto; - width: auto; - } - .row-cols-xxl-1 > * { - flex: 0 0 auto; - width: 100%; - } - .row-cols-xxl-2 > * { - flex: 0 0 auto; - width: 50%; - } - .row-cols-xxl-3 > * { - flex: 0 0 auto; - width: 33.3333333333%; - } - .row-cols-xxl-4 > * { - flex: 0 0 auto; - width: 25%; - } - .row-cols-xxl-5 > * { - flex: 0 0 auto; - width: 20%; - } - .row-cols-xxl-6 > * { - flex: 0 0 auto; - width: 16.6666666667%; - } - .col-xxl-auto { - flex: 0 0 auto; - width: auto; - } - .col-xxl-1 { - flex: 0 0 auto; - width: 8.33333333%; - } - .col-xxl-2 { - flex: 0 0 auto; - width: 16.66666667%; - } - .col-xxl-3 { - flex: 0 0 auto; - width: 25%; - } - .col-xxl-4 { - flex: 0 0 auto; - width: 33.33333333%; - } - .col-xxl-5 { - flex: 0 0 auto; - width: 41.66666667%; - } - .col-xxl-6 { - flex: 0 0 auto; - width: 50%; - } - .col-xxl-7 { - flex: 0 0 auto; - width: 58.33333333%; - } - .col-xxl-8 { - flex: 0 0 auto; - width: 66.66666667%; - } - .col-xxl-9 { - flex: 0 0 auto; - width: 75%; - } - .col-xxl-10 { - flex: 0 0 auto; - width: 83.33333333%; - } - .col-xxl-11 { - flex: 0 0 auto; - width: 91.66666667%; - } - .col-xxl-12 { - flex: 0 0 auto; - width: 100%; - } - .offset-xxl-0 { - margin-left: 0; - } - .offset-xxl-1 { - margin-left: 8.33333333%; - } - .offset-xxl-2 { - margin-left: 16.66666667%; - } - .offset-xxl-3 { - margin-left: 25%; - } - .offset-xxl-4 { - margin-left: 33.33333333%; - } - .offset-xxl-5 { - margin-left: 41.66666667%; - } - .offset-xxl-6 { - margin-left: 50%; - } - .offset-xxl-7 { - margin-left: 58.33333333%; - } - .offset-xxl-8 { - margin-left: 66.66666667%; - } - .offset-xxl-9 { - margin-left: 75%; - } - .offset-xxl-10 { - margin-left: 83.33333333%; - } - .offset-xxl-11 { - margin-left: 91.66666667%; - } - .g-xxl-0, - .gx-xxl-0 { - --bs-gutter-x: 0; - } - .g-xxl-0, - .gy-xxl-0 { - --bs-gutter-y: 0; - } - .g-xxl-1, - .gx-xxl-1 { - --bs-gutter-x: 0.25rem; - } - .g-xxl-1, - .gy-xxl-1 { - --bs-gutter-y: 0.25rem; - } - .g-xxl-2, - .gx-xxl-2 { - --bs-gutter-x: 0.5rem; - } - .g-xxl-2, - .gy-xxl-2 { - --bs-gutter-y: 0.5rem; - } - .g-xxl-3, - .gx-xxl-3 { - --bs-gutter-x: 1rem; - } - .g-xxl-3, - .gy-xxl-3 { - --bs-gutter-y: 1rem; - } - .g-xxl-4, - .gx-xxl-4 { - --bs-gutter-x: 1.5rem; - } - .g-xxl-4, - .gy-xxl-4 { - --bs-gutter-y: 1.5rem; - } - .g-xxl-5, - .gx-xxl-5 { - --bs-gutter-x: 3rem; - } - .g-xxl-5, - .gy-xxl-5 { - --bs-gutter-y: 3rem; - } -} -.table { - --bs-table-color-type: initial; - --bs-table-bg-type: initial; - --bs-table-color-state: initial; - --bs-table-bg-state: initial; - --bs-table-color: var(--bs-body-color); - --bs-table-bg: var(--bs-body-bg); - --bs-table-border-color: var(--bs-border-color); - --bs-table-accent-bg: transparent; - --bs-table-striped-color: var(--bs-body-color); - --bs-table-striped-bg: rgba(0, 0, 0, 0.05); - --bs-table-active-color: var(--bs-body-color); - --bs-table-active-bg: rgba(0, 0, 0, 0.1); - --bs-table-hover-color: var(--bs-body-color); - --bs-table-hover-bg: rgba(0, 0, 0, 0.075); - width: 100%; - margin-bottom: 1rem; - vertical-align: top; - border-color: var(--bs-table-border-color); -} -.table > :not(caption) > * > * { - padding: 0.5rem 0.5rem; - color: var(--bs-table-color-state, var(--bs-table-color-type, var(--bs-table-color))); - background-color: var(--bs-table-bg); - border-bottom-width: var(--bs-border-width); - box-shadow: inset 0 0 0 9999px var(--bs-table-bg-state, var(--bs-table-bg-type, var(--bs-table-accent-bg))); -} -.table > tbody { - vertical-align: inherit; -} -.table > thead { - vertical-align: bottom; -} - -.table-group-divider { - border-top: calc(var(--bs-border-width) * 2) solid currentcolor; -} - -.caption-top { - caption-side: top; -} - -.table-sm > :not(caption) > * > * { - padding: 0.25rem 0.25rem; -} - -.table-bordered > :not(caption) > * { - border-width: var(--bs-border-width) 0; -} -.table-bordered > :not(caption) > * > * { - border-width: 0 var(--bs-border-width); -} - -.table-borderless > :not(caption) > * > * { - border-bottom-width: 0; -} -.table-borderless > :not(:first-child) { - border-top-width: 0; -} - -.table-striped > tbody > tr:nth-of-type(odd) > * { - --bs-table-color-type: var(--bs-table-striped-color); - --bs-table-bg-type: var(--bs-table-striped-bg); -} - -.table-striped-columns > :not(caption) > tr > :nth-child(even) { - --bs-table-color-type: var(--bs-table-striped-color); - --bs-table-bg-type: var(--bs-table-striped-bg); -} - -.table-active { - --bs-table-color-state: var(--bs-table-active-color); - --bs-table-bg-state: var(--bs-table-active-bg); -} - -.table-hover > tbody > tr:hover > * { - --bs-table-color-state: var(--bs-table-hover-color); - --bs-table-bg-state: var(--bs-table-hover-bg); -} - -.table-primary { - --bs-table-color: #000; - --bs-table-bg: #cfe2ff; - --bs-table-border-color: #bacbe6; - --bs-table-striped-bg: #c5d7f2; - --bs-table-striped-color: #000; - --bs-table-active-bg: #bacbe6; - --bs-table-active-color: #000; - --bs-table-hover-bg: #bfd1ec; - --bs-table-hover-color: #000; - color: var(--bs-table-color); - border-color: var(--bs-table-border-color); -} - -.table-secondary { - --bs-table-color: #000; - --bs-table-bg: #e2e3e5; - --bs-table-border-color: #cbccce; - --bs-table-striped-bg: #d7d8da; - --bs-table-striped-color: #000; - --bs-table-active-bg: #cbccce; - --bs-table-active-color: #000; - --bs-table-hover-bg: #d1d2d4; - --bs-table-hover-color: #000; - color: var(--bs-table-color); - border-color: var(--bs-table-border-color); -} - -.table-success { - --bs-table-color: #000; - --bs-table-bg: #d1e7dd; - --bs-table-border-color: #bcd0c7; - --bs-table-striped-bg: #c7dbd2; - --bs-table-striped-color: #000; - --bs-table-active-bg: #bcd0c7; - --bs-table-active-color: #000; - --bs-table-hover-bg: #c1d6cc; - --bs-table-hover-color: #000; - color: var(--bs-table-color); - border-color: var(--bs-table-border-color); -} - -.table-info { - --bs-table-color: #000; - --bs-table-bg: #cff4fc; - --bs-table-border-color: #badce3; - --bs-table-striped-bg: #c5e8ef; - --bs-table-striped-color: #000; - --bs-table-active-bg: #badce3; - --bs-table-active-color: #000; - --bs-table-hover-bg: #bfe2e9; - --bs-table-hover-color: #000; - color: var(--bs-table-color); - border-color: var(--bs-table-border-color); -} - -.table-warning { - --bs-table-color: #000; - --bs-table-bg: #fff3cd; - --bs-table-border-color: #e6dbb9; - --bs-table-striped-bg: #f2e7c3; - --bs-table-striped-color: #000; - --bs-table-active-bg: #e6dbb9; - --bs-table-active-color: #000; - --bs-table-hover-bg: #ece1be; - --bs-table-hover-color: #000; - color: var(--bs-table-color); - border-color: var(--bs-table-border-color); -} - -.table-danger { - --bs-table-color: #000; - --bs-table-bg: #f8d7da; - --bs-table-border-color: #dfc2c4; - --bs-table-striped-bg: #eccccf; - --bs-table-striped-color: #000; - --bs-table-active-bg: #dfc2c4; - --bs-table-active-color: #000; - --bs-table-hover-bg: #e5c7ca; - --bs-table-hover-color: #000; - color: var(--bs-table-color); - border-color: var(--bs-table-border-color); -} - -.table-light { - --bs-table-color: #000; - --bs-table-bg: #f8f9fa; - --bs-table-border-color: #dfe0e1; - --bs-table-striped-bg: #ecedee; - --bs-table-striped-color: #000; - --bs-table-active-bg: #dfe0e1; - --bs-table-active-color: #000; - --bs-table-hover-bg: #e5e6e7; - --bs-table-hover-color: #000; - color: var(--bs-table-color); - border-color: var(--bs-table-border-color); -} - -.table-dark { - --bs-table-color: #fff; - --bs-table-bg: #212529; - --bs-table-border-color: #373b3e; - --bs-table-striped-bg: #2c3034; - --bs-table-striped-color: #fff; - --bs-table-active-bg: #373b3e; - --bs-table-active-color: #fff; - --bs-table-hover-bg: #323539; - --bs-table-hover-color: #fff; - color: var(--bs-table-color); - border-color: var(--bs-table-border-color); -} - -.table-responsive { - overflow-x: auto; - -webkit-overflow-scrolling: touch; -} - -@media (max-width: 575.98px) { - .table-responsive-sm { - overflow-x: auto; - -webkit-overflow-scrolling: touch; - } -} -@media (max-width: 767.98px) { - .table-responsive-md { - overflow-x: auto; - -webkit-overflow-scrolling: touch; - } -} -@media (max-width: 991.98px) { - .table-responsive-lg { - overflow-x: auto; - -webkit-overflow-scrolling: touch; - } -} -@media (max-width: 1199.98px) { - .table-responsive-xl { - overflow-x: auto; - -webkit-overflow-scrolling: touch; - } -} -@media (max-width: 1399.98px) { - .table-responsive-xxl { - overflow-x: auto; - -webkit-overflow-scrolling: touch; - } -} -.form-label { - margin-bottom: 0.5rem; -} - -.col-form-label { - padding-top: calc(0.375rem + var(--bs-border-width)); - padding-bottom: calc(0.375rem + var(--bs-border-width)); - margin-bottom: 0; - font-size: inherit; - line-height: 1.5; -} - -.col-form-label-lg { - padding-top: calc(0.5rem + var(--bs-border-width)); - padding-bottom: calc(0.5rem + var(--bs-border-width)); - font-size: 1.25rem; -} - -.col-form-label-sm { - padding-top: calc(0.25rem + var(--bs-border-width)); - padding-bottom: calc(0.25rem + var(--bs-border-width)); - font-size: 0.875rem; -} - -.form-text { - margin-top: 0.25rem; - font-size: 0.875em; - color: var(--bs-secondary-color); -} - -.form-control { - display: block; - width: 100%; - padding: 0.375rem 0.75rem; - font-size: 1rem; - font-weight: 400; - line-height: 1.5; - color: var(--bs-body-color); - -webkit-appearance: none; - -moz-appearance: none; - appearance: none; - background-color: var(--bs-body-bg); - background-clip: padding-box; - border: var(--bs-border-width) solid var(--bs-border-color); - border-radius: var(--bs-border-radius); - transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; -} -@media (prefers-reduced-motion: reduce) { - .form-control { - transition: none; - } -} -.form-control[type=file] { - overflow: hidden; -} -.form-control[type=file]:not(:disabled):not([readonly]) { - cursor: pointer; -} -.form-control:focus { - color: var(--bs-body-color); - background-color: var(--bs-body-bg); - border-color: #86b7fe; - outline: 0; - box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25); -} -.form-control::-webkit-date-and-time-value { - min-width: 85px; - height: 1.5em; - margin: 0; -} -.form-control::-webkit-datetime-edit { - display: block; - padding: 0; -} -.form-control::-moz-placeholder { - color: var(--bs-secondary-color); - opacity: 1; -} -.form-control::placeholder { - color: var(--bs-secondary-color); - opacity: 1; -} -.form-control:disabled { - background-color: var(--bs-secondary-bg); - opacity: 1; -} -.form-control::-webkit-file-upload-button { - padding: 0.375rem 0.75rem; - margin: -0.375rem -0.75rem; - -webkit-margin-end: 0.75rem; - margin-inline-end: 0.75rem; - color: var(--bs-body-color); - background-color: var(--bs-tertiary-bg); - pointer-events: none; - border-color: inherit; - border-style: solid; - border-width: 0; - border-inline-end-width: var(--bs-border-width); - border-radius: 0; - -webkit-transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; - transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; -} -.form-control::file-selector-button { - padding: 0.375rem 0.75rem; - margin: -0.375rem -0.75rem; - -webkit-margin-end: 0.75rem; - margin-inline-end: 0.75rem; - color: var(--bs-body-color); - background-color: var(--bs-tertiary-bg); - pointer-events: none; - border-color: inherit; - border-style: solid; - border-width: 0; - border-inline-end-width: var(--bs-border-width); - border-radius: 0; - transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; -} -@media (prefers-reduced-motion: reduce) { - .form-control::-webkit-file-upload-button { - -webkit-transition: none; - transition: none; - } - .form-control::file-selector-button { - transition: none; - } -} -.form-control:hover:not(:disabled):not([readonly])::-webkit-file-upload-button { - background-color: var(--bs-secondary-bg); -} -.form-control:hover:not(:disabled):not([readonly])::file-selector-button { - background-color: var(--bs-secondary-bg); -} - -.form-control-plaintext { - display: block; - width: 100%; - padding: 0.375rem 0; - margin-bottom: 0; - line-height: 1.5; - color: var(--bs-body-color); - background-color: transparent; - border: solid transparent; - border-width: var(--bs-border-width) 0; -} -.form-control-plaintext:focus { - outline: 0; -} -.form-control-plaintext.form-control-sm, .form-control-plaintext.form-control-lg { - padding-right: 0; - padding-left: 0; -} - -.form-control-sm { - min-height: calc(1.5em + 0.5rem + calc(var(--bs-border-width) * 2)); - padding: 0.25rem 0.5rem; - font-size: 0.875rem; - border-radius: var(--bs-border-radius-sm); -} -.form-control-sm::-webkit-file-upload-button { - padding: 0.25rem 0.5rem; - margin: -0.25rem -0.5rem; - -webkit-margin-end: 0.5rem; - margin-inline-end: 0.5rem; -} -.form-control-sm::file-selector-button { - padding: 0.25rem 0.5rem; - margin: -0.25rem -0.5rem; - -webkit-margin-end: 0.5rem; - margin-inline-end: 0.5rem; -} - -.form-control-lg { - min-height: calc(1.5em + 1rem + calc(var(--bs-border-width) * 2)); - padding: 0.5rem 1rem; - font-size: 1.25rem; - border-radius: var(--bs-border-radius-lg); -} -.form-control-lg::-webkit-file-upload-button { - padding: 0.5rem 1rem; - margin: -0.5rem -1rem; - -webkit-margin-end: 1rem; - margin-inline-end: 1rem; -} -.form-control-lg::file-selector-button { - padding: 0.5rem 1rem; - margin: -0.5rem -1rem; - -webkit-margin-end: 1rem; - margin-inline-end: 1rem; -} - -textarea.form-control { - min-height: calc(1.5em + 0.75rem + calc(var(--bs-border-width) * 2)); -} -textarea.form-control-sm { - min-height: calc(1.5em + 0.5rem + calc(var(--bs-border-width) * 2)); -} -textarea.form-control-lg { - min-height: calc(1.5em + 1rem + calc(var(--bs-border-width) * 2)); -} - -.form-control-color { - width: 3rem; - height: calc(1.5em + 0.75rem + calc(var(--bs-border-width) * 2)); - padding: 0.375rem; -} -.form-control-color:not(:disabled):not([readonly]) { - cursor: pointer; -} -.form-control-color::-moz-color-swatch { - border: 0 !important; - border-radius: var(--bs-border-radius); -} -.form-control-color::-webkit-color-swatch { - border: 0 !important; - border-radius: var(--bs-border-radius); -} -.form-control-color.form-control-sm { - height: calc(1.5em + 0.5rem + calc(var(--bs-border-width) * 2)); -} -.form-control-color.form-control-lg { - height: calc(1.5em + 1rem + calc(var(--bs-border-width) * 2)); -} - -.form-select { - --bs-form-select-bg-img: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e"); - display: block; - width: 100%; - padding: 0.375rem 2.25rem 0.375rem 0.75rem; - font-size: 1rem; - font-weight: 400; - line-height: 1.5; - color: var(--bs-body-color); - -webkit-appearance: none; - -moz-appearance: none; - appearance: none; - background-color: var(--bs-body-bg); - background-image: var(--bs-form-select-bg-img), var(--bs-form-select-bg-icon, none); - background-repeat: no-repeat; - background-position: right 0.75rem center; - background-size: 16px 12px; - border: var(--bs-border-width) solid var(--bs-border-color); - border-radius: var(--bs-border-radius); - transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; -} -@media (prefers-reduced-motion: reduce) { - .form-select { - transition: none; - } -} -.form-select:focus { - border-color: #86b7fe; - outline: 0; - box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25); -} -.form-select[multiple], .form-select[size]:not([size="1"]) { - padding-right: 0.75rem; - background-image: none; -} -.form-select:disabled { - background-color: var(--bs-secondary-bg); -} -.form-select:-moz-focusring { - color: transparent; - text-shadow: 0 0 0 var(--bs-body-color); -} - -.form-select-sm { - padding-top: 0.25rem; - padding-bottom: 0.25rem; - padding-left: 0.5rem; - font-size: 0.875rem; - border-radius: var(--bs-border-radius-sm); -} - -.form-select-lg { - padding-top: 0.5rem; - padding-bottom: 0.5rem; - padding-left: 1rem; - font-size: 1.25rem; - border-radius: var(--bs-border-radius-lg); -} - -[data-bs-theme=dark] .form-select { - --bs-form-select-bg-img: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23dee2e6' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e"); -} - -.form-check { - display: block; - min-height: 1.5rem; - padding-left: 1.5em; - margin-bottom: 0.125rem; -} -.form-check .form-check-input { - float: left; - margin-left: -1.5em; -} - -.form-check-reverse { - padding-right: 1.5em; - padding-left: 0; - text-align: right; -} -.form-check-reverse .form-check-input { - float: right; - margin-right: -1.5em; - margin-left: 0; -} - -.form-check-input { - --bs-form-check-bg: var(--bs-body-bg); - width: 1em; - height: 1em; - margin-top: 0.25em; - vertical-align: top; - -webkit-appearance: none; - -moz-appearance: none; - appearance: none; - background-color: var(--bs-form-check-bg); - background-image: var(--bs-form-check-bg-image); - background-repeat: no-repeat; - background-position: center; - background-size: contain; - border: var(--bs-border-width) solid var(--bs-border-color); - -webkit-print-color-adjust: exact; - color-adjust: exact; - print-color-adjust: exact; -} -.form-check-input[type=checkbox] { - border-radius: 0.25em; -} -.form-check-input[type=radio] { - border-radius: 50%; -} -.form-check-input:active { - filter: brightness(90%); -} -.form-check-input:focus { - border-color: #86b7fe; - outline: 0; - box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25); -} -.form-check-input:checked { - background-color: #0d6efd; - border-color: #0d6efd; -} -.form-check-input:checked[type=checkbox] { - --bs-form-check-bg-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='m6 10 3 3 6-6'/%3e%3c/svg%3e"); -} -.form-check-input:checked[type=radio] { - --bs-form-check-bg-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='2' fill='%23fff'/%3e%3c/svg%3e"); -} -.form-check-input[type=checkbox]:indeterminate { - background-color: #0d6efd; - border-color: #0d6efd; - --bs-form-check-bg-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10h8'/%3e%3c/svg%3e"); -} -.form-check-input:disabled { - pointer-events: none; - filter: none; - opacity: 0.5; -} -.form-check-input[disabled] ~ .form-check-label, .form-check-input:disabled ~ .form-check-label { - cursor: default; - opacity: 0.5; -} - -.form-switch { - padding-left: 2.5em; -} -.form-switch .form-check-input { - --bs-form-switch-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='rgba%280, 0, 0, 0.25%29'/%3e%3c/svg%3e"); - width: 2em; - margin-left: -2.5em; - background-image: var(--bs-form-switch-bg); - background-position: left center; - border-radius: 2em; - transition: background-position 0.15s ease-in-out; -} -@media (prefers-reduced-motion: reduce) { - .form-switch .form-check-input { - transition: none; - } -} -.form-switch .form-check-input:focus { - --bs-form-switch-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%2386b7fe'/%3e%3c/svg%3e"); -} -.form-switch .form-check-input:checked { - background-position: right center; - --bs-form-switch-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e"); -} -.form-switch.form-check-reverse { - padding-right: 2.5em; - padding-left: 0; -} -.form-switch.form-check-reverse .form-check-input { - margin-right: -2.5em; - margin-left: 0; -} - -.form-check-inline { - display: inline-block; - margin-right: 1rem; -} - -.btn-check { - position: absolute; - clip: rect(0, 0, 0, 0); - pointer-events: none; -} -.btn-check[disabled] + .btn, .btn-check:disabled + .btn { - pointer-events: none; - filter: none; - opacity: 0.65; -} - -[data-bs-theme=dark] .form-switch .form-check-input:not(:checked):not(:focus) { - --bs-form-switch-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='rgba%28255, 255, 255, 0.25%29'/%3e%3c/svg%3e"); -} - -.form-range { - width: 100%; - height: 1.5rem; - padding: 0; - -webkit-appearance: none; - -moz-appearance: none; - appearance: none; - background-color: transparent; -} -.form-range:focus { - outline: 0; -} -.form-range:focus::-webkit-slider-thumb { - box-shadow: 0 0 0 1px #fff, 0 0 0 0.25rem rgba(13, 110, 253, 0.25); -} -.form-range:focus::-moz-range-thumb { - box-shadow: 0 0 0 1px #fff, 0 0 0 0.25rem rgba(13, 110, 253, 0.25); -} -.form-range::-moz-focus-outer { - border: 0; -} -.form-range::-webkit-slider-thumb { - width: 1rem; - height: 1rem; - margin-top: -0.25rem; - -webkit-appearance: none; - appearance: none; - background-color: #0d6efd; - border: 0; - border-radius: 1rem; - -webkit-transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; - transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; -} -@media (prefers-reduced-motion: reduce) { - .form-range::-webkit-slider-thumb { - -webkit-transition: none; - transition: none; - } -} -.form-range::-webkit-slider-thumb:active { - background-color: #b6d4fe; -} -.form-range::-webkit-slider-runnable-track { - width: 100%; - height: 0.5rem; - color: transparent; - cursor: pointer; - background-color: var(--bs-tertiary-bg); - border-color: transparent; - border-radius: 1rem; -} -.form-range::-moz-range-thumb { - width: 1rem; - height: 1rem; - -moz-appearance: none; - appearance: none; - background-color: #0d6efd; - border: 0; - border-radius: 1rem; - -moz-transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; - transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; -} -@media (prefers-reduced-motion: reduce) { - .form-range::-moz-range-thumb { - -moz-transition: none; - transition: none; - } -} -.form-range::-moz-range-thumb:active { - background-color: #b6d4fe; -} -.form-range::-moz-range-track { - width: 100%; - height: 0.5rem; - color: transparent; - cursor: pointer; - background-color: var(--bs-tertiary-bg); - border-color: transparent; - border-radius: 1rem; -} -.form-range:disabled { - pointer-events: none; -} -.form-range:disabled::-webkit-slider-thumb { - background-color: var(--bs-secondary-color); -} -.form-range:disabled::-moz-range-thumb { - background-color: var(--bs-secondary-color); -} - -.form-floating { - position: relative; -} -.form-floating > .form-control, -.form-floating > .form-control-plaintext, -.form-floating > .form-select { - height: calc(3.5rem + calc(var(--bs-border-width) * 2)); - min-height: calc(3.5rem + calc(var(--bs-border-width) * 2)); - line-height: 1.25; -} -.form-floating > label { - position: absolute; - top: 0; - left: 0; - z-index: 2; - height: 100%; - padding: 1rem 0.75rem; - overflow: hidden; - text-align: start; - text-overflow: ellipsis; - white-space: nowrap; - pointer-events: none; - border: var(--bs-border-width) solid transparent; - transform-origin: 0 0; - transition: opacity 0.1s ease-in-out, transform 0.1s ease-in-out; -} -@media (prefers-reduced-motion: reduce) { - .form-floating > label { - transition: none; - } -} -.form-floating > .form-control, -.form-floating > .form-control-plaintext { - padding: 1rem 0.75rem; -} -.form-floating > .form-control::-moz-placeholder, .form-floating > .form-control-plaintext::-moz-placeholder { - color: transparent; -} -.form-floating > .form-control::placeholder, -.form-floating > .form-control-plaintext::placeholder { - color: transparent; -} -.form-floating > .form-control:not(:-moz-placeholder-shown), .form-floating > .form-control-plaintext:not(:-moz-placeholder-shown) { - padding-top: 1.625rem; - padding-bottom: 0.625rem; -} -.form-floating > .form-control:focus, .form-floating > .form-control:not(:placeholder-shown), -.form-floating > .form-control-plaintext:focus, -.form-floating > .form-control-plaintext:not(:placeholder-shown) { - padding-top: 1.625rem; - padding-bottom: 0.625rem; -} -.form-floating > .form-control:-webkit-autofill, -.form-floating > .form-control-plaintext:-webkit-autofill { - padding-top: 1.625rem; - padding-bottom: 0.625rem; -} -.form-floating > .form-select { - padding-top: 1.625rem; - padding-bottom: 0.625rem; -} -.form-floating > .form-control:not(:-moz-placeholder-shown) ~ label { - color: rgba(var(--bs-body-color-rgb), 0.65); - transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem); -} -.form-floating > .form-control:focus ~ label, -.form-floating > .form-control:not(:placeholder-shown) ~ label, -.form-floating > .form-control-plaintext ~ label, -.form-floating > .form-select ~ label { - color: rgba(var(--bs-body-color-rgb), 0.65); - transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem); -} -.form-floating > .form-control:not(:-moz-placeholder-shown) ~ label::after { - position: absolute; - inset: 1rem 0.375rem; - z-index: -1; - height: 1.5em; - content: ""; - background-color: var(--bs-body-bg); - border-radius: var(--bs-border-radius); -} -.form-floating > .form-control:focus ~ label::after, -.form-floating > .form-control:not(:placeholder-shown) ~ label::after, -.form-floating > .form-control-plaintext ~ label::after, -.form-floating > .form-select ~ label::after { - position: absolute; - inset: 1rem 0.375rem; - z-index: -1; - height: 1.5em; - content: ""; - background-color: var(--bs-body-bg); - border-radius: var(--bs-border-radius); -} -.form-floating > .form-control:-webkit-autofill ~ label { - color: rgba(var(--bs-body-color-rgb), 0.65); - transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem); -} -.form-floating > .form-control-plaintext ~ label { - border-width: var(--bs-border-width) 0; -} -.form-floating > :disabled ~ label, -.form-floating > .form-control:disabled ~ label { - color: #6c757d; -} -.form-floating > :disabled ~ label::after, -.form-floating > .form-control:disabled ~ label::after { - background-color: var(--bs-secondary-bg); -} - -.input-group { - position: relative; - display: flex; - flex-wrap: wrap; - align-items: stretch; - width: 100%; -} -.input-group > .form-control, -.input-group > .form-select, -.input-group > .form-floating { - position: relative; - flex: 1 1 auto; - width: 1%; - min-width: 0; -} -.input-group > .form-control:focus, -.input-group > .form-select:focus, -.input-group > .form-floating:focus-within { - z-index: 5; -} -.input-group .btn { - position: relative; - z-index: 2; -} -.input-group .btn:focus { - z-index: 5; -} - -.input-group-text { - display: flex; - align-items: center; - padding: 0.375rem 0.75rem; - font-size: 1rem; - font-weight: 400; - line-height: 1.5; - color: var(--bs-body-color); - text-align: center; - white-space: nowrap; - background-color: var(--bs-tertiary-bg); - border: var(--bs-border-width) solid var(--bs-border-color); - border-radius: var(--bs-border-radius); -} - -.input-group-lg > .form-control, -.input-group-lg > .form-select, -.input-group-lg > .input-group-text, -.input-group-lg > .btn { - padding: 0.5rem 1rem; - font-size: 1.25rem; - border-radius: var(--bs-border-radius-lg); -} - -.input-group-sm > .form-control, -.input-group-sm > .form-select, -.input-group-sm > .input-group-text, -.input-group-sm > .btn { - padding: 0.25rem 0.5rem; - font-size: 0.875rem; - border-radius: var(--bs-border-radius-sm); -} - -.input-group-lg > .form-select, -.input-group-sm > .form-select { - padding-right: 3rem; -} - -.input-group:not(.has-validation) > :not(:last-child):not(.dropdown-toggle):not(.dropdown-menu):not(.form-floating), -.input-group:not(.has-validation) > .dropdown-toggle:nth-last-child(n+3), -.input-group:not(.has-validation) > .form-floating:not(:last-child) > .form-control, -.input-group:not(.has-validation) > .form-floating:not(:last-child) > .form-select { - border-top-right-radius: 0; - border-bottom-right-radius: 0; -} -.input-group.has-validation > :nth-last-child(n+3):not(.dropdown-toggle):not(.dropdown-menu):not(.form-floating), -.input-group.has-validation > .dropdown-toggle:nth-last-child(n+4), -.input-group.has-validation > .form-floating:nth-last-child(n+3) > .form-control, -.input-group.has-validation > .form-floating:nth-last-child(n+3) > .form-select { - border-top-right-radius: 0; - border-bottom-right-radius: 0; -} -.input-group > :not(:first-child):not(.dropdown-menu):not(.valid-tooltip):not(.valid-feedback):not(.invalid-tooltip):not(.invalid-feedback) { - margin-left: calc(var(--bs-border-width) * -1); - border-top-left-radius: 0; - border-bottom-left-radius: 0; -} -.input-group > .form-floating:not(:first-child) > .form-control, -.input-group > .form-floating:not(:first-child) > .form-select { - border-top-left-radius: 0; - border-bottom-left-radius: 0; -} - -.valid-feedback { - display: none; - width: 100%; - margin-top: 0.25rem; - font-size: 0.875em; - color: var(--bs-form-valid-color); -} - -.valid-tooltip { - position: absolute; - top: 100%; - z-index: 5; - display: none; - max-width: 100%; - padding: 0.25rem 0.5rem; - margin-top: 0.1rem; - font-size: 0.875rem; - color: #fff; - background-color: var(--bs-success); - border-radius: var(--bs-border-radius); -} - -.was-validated :valid ~ .valid-feedback, -.was-validated :valid ~ .valid-tooltip, -.is-valid ~ .valid-feedback, -.is-valid ~ .valid-tooltip { - display: block; -} - -.was-validated .form-control:valid, .form-control.is-valid { - border-color: var(--bs-form-valid-border-color); - padding-right: calc(1.5em + 0.75rem); - background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23198754' d='M2.3 6.73.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e"); - background-repeat: no-repeat; - background-position: right calc(0.375em + 0.1875rem) center; - background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem); -} -.was-validated .form-control:valid:focus, .form-control.is-valid:focus { - border-color: var(--bs-form-valid-border-color); - box-shadow: 0 0 0 0.25rem rgba(var(--bs-success-rgb), 0.25); -} - -.was-validated textarea.form-control:valid, textarea.form-control.is-valid { - padding-right: calc(1.5em + 0.75rem); - background-position: top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem); -} - -.was-validated .form-select:valid, .form-select.is-valid { - border-color: var(--bs-form-valid-border-color); -} -.was-validated .form-select:valid:not([multiple]):not([size]), .was-validated .form-select:valid:not([multiple])[size="1"], .form-select.is-valid:not([multiple]):not([size]), .form-select.is-valid:not([multiple])[size="1"] { - --bs-form-select-bg-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23198754' d='M2.3 6.73.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e"); - padding-right: 4.125rem; - background-position: right 0.75rem center, center right 2.25rem; - background-size: 16px 12px, calc(0.75em + 0.375rem) calc(0.75em + 0.375rem); -} -.was-validated .form-select:valid:focus, .form-select.is-valid:focus { - border-color: var(--bs-form-valid-border-color); - box-shadow: 0 0 0 0.25rem rgba(var(--bs-success-rgb), 0.25); -} - -.was-validated .form-control-color:valid, .form-control-color.is-valid { - width: calc(3rem + calc(1.5em + 0.75rem)); -} - -.was-validated .form-check-input:valid, .form-check-input.is-valid { - border-color: var(--bs-form-valid-border-color); -} -.was-validated .form-check-input:valid:checked, .form-check-input.is-valid:checked { - background-color: var(--bs-form-valid-color); -} -.was-validated .form-check-input:valid:focus, .form-check-input.is-valid:focus { - box-shadow: 0 0 0 0.25rem rgba(var(--bs-success-rgb), 0.25); -} -.was-validated .form-check-input:valid ~ .form-check-label, .form-check-input.is-valid ~ .form-check-label { - color: var(--bs-form-valid-color); -} - -.form-check-inline .form-check-input ~ .valid-feedback { - margin-left: 0.5em; -} - -.was-validated .input-group > .form-control:not(:focus):valid, .input-group > .form-control:not(:focus).is-valid, -.was-validated .input-group > .form-select:not(:focus):valid, -.input-group > .form-select:not(:focus).is-valid, -.was-validated .input-group > .form-floating:not(:focus-within):valid, -.input-group > .form-floating:not(:focus-within).is-valid { - z-index: 3; -} - -.invalid-feedback { - display: none; - width: 100%; - margin-top: 0.25rem; - font-size: 0.875em; - color: var(--bs-form-invalid-color); -} - -.invalid-tooltip { - position: absolute; - top: 100%; - z-index: 5; - display: none; - max-width: 100%; - padding: 0.25rem 0.5rem; - margin-top: 0.1rem; - font-size: 0.875rem; - color: #fff; - background-color: var(--bs-danger); - border-radius: var(--bs-border-radius); -} - -.was-validated :invalid ~ .invalid-feedback, -.was-validated :invalid ~ .invalid-tooltip, -.is-invalid ~ .invalid-feedback, -.is-invalid ~ .invalid-tooltip { - display: block; -} - -.was-validated .form-control:invalid, .form-control.is-invalid { - border-color: var(--bs-form-invalid-border-color); - padding-right: calc(1.5em + 0.75rem); - background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23dc3545'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e"); - background-repeat: no-repeat; - background-position: right calc(0.375em + 0.1875rem) center; - background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem); -} -.was-validated .form-control:invalid:focus, .form-control.is-invalid:focus { - border-color: var(--bs-form-invalid-border-color); - box-shadow: 0 0 0 0.25rem rgba(var(--bs-danger-rgb), 0.25); -} - -.was-validated textarea.form-control:invalid, textarea.form-control.is-invalid { - padding-right: calc(1.5em + 0.75rem); - background-position: top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem); -} - -.was-validated .form-select:invalid, .form-select.is-invalid { - border-color: var(--bs-form-invalid-border-color); -} -.was-validated .form-select:invalid:not([multiple]):not([size]), .was-validated .form-select:invalid:not([multiple])[size="1"], .form-select.is-invalid:not([multiple]):not([size]), .form-select.is-invalid:not([multiple])[size="1"] { - --bs-form-select-bg-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23dc3545'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e"); - padding-right: 4.125rem; - background-position: right 0.75rem center, center right 2.25rem; - background-size: 16px 12px, calc(0.75em + 0.375rem) calc(0.75em + 0.375rem); -} -.was-validated .form-select:invalid:focus, .form-select.is-invalid:focus { - border-color: var(--bs-form-invalid-border-color); - box-shadow: 0 0 0 0.25rem rgba(var(--bs-danger-rgb), 0.25); -} - -.was-validated .form-control-color:invalid, .form-control-color.is-invalid { - width: calc(3rem + calc(1.5em + 0.75rem)); -} - -.was-validated .form-check-input:invalid, .form-check-input.is-invalid { - border-color: var(--bs-form-invalid-border-color); -} -.was-validated .form-check-input:invalid:checked, .form-check-input.is-invalid:checked { - background-color: var(--bs-form-invalid-color); -} -.was-validated .form-check-input:invalid:focus, .form-check-input.is-invalid:focus { - box-shadow: 0 0 0 0.25rem rgba(var(--bs-danger-rgb), 0.25); -} -.was-validated .form-check-input:invalid ~ .form-check-label, .form-check-input.is-invalid ~ .form-check-label { - color: var(--bs-form-invalid-color); -} - -.form-check-inline .form-check-input ~ .invalid-feedback { - margin-left: 0.5em; -} - -.was-validated .input-group > .form-control:not(:focus):invalid, .input-group > .form-control:not(:focus).is-invalid, -.was-validated .input-group > .form-select:not(:focus):invalid, -.input-group > .form-select:not(:focus).is-invalid, -.was-validated .input-group > .form-floating:not(:focus-within):invalid, -.input-group > .form-floating:not(:focus-within).is-invalid { - z-index: 4; -} - -.btn { - --bs-btn-padding-x: 0.75rem; - --bs-btn-padding-y: 0.375rem; - --bs-btn-font-family: ; - --bs-btn-font-size: 1rem; - --bs-btn-font-weight: 400; - --bs-btn-line-height: 1.5; - --bs-btn-color: var(--bs-body-color); - --bs-btn-bg: transparent; - --bs-btn-border-width: var(--bs-border-width); - --bs-btn-border-color: transparent; - --bs-btn-border-radius: var(--bs-border-radius); - --bs-btn-hover-border-color: transparent; - --bs-btn-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 1px rgba(0, 0, 0, 0.075); - --bs-btn-disabled-opacity: 0.65; - --bs-btn-focus-box-shadow: 0 0 0 0.25rem rgba(var(--bs-btn-focus-shadow-rgb), .5); - display: inline-block; - padding: var(--bs-btn-padding-y) var(--bs-btn-padding-x); - font-family: var(--bs-btn-font-family); - font-size: var(--bs-btn-font-size); - font-weight: var(--bs-btn-font-weight); - line-height: var(--bs-btn-line-height); - color: var(--bs-btn-color); - text-align: center; - text-decoration: none; - vertical-align: middle; - cursor: pointer; - -webkit-user-select: none; - -moz-user-select: none; - user-select: none; - border: var(--bs-btn-border-width) solid var(--bs-btn-border-color); - border-radius: var(--bs-btn-border-radius); - background-color: var(--bs-btn-bg); - transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; -} -@media (prefers-reduced-motion: reduce) { - .btn { - transition: none; - } -} -.btn:hover { - color: var(--bs-btn-hover-color); - background-color: var(--bs-btn-hover-bg); - border-color: var(--bs-btn-hover-border-color); -} -.btn-check + .btn:hover { - color: var(--bs-btn-color); - background-color: var(--bs-btn-bg); - border-color: var(--bs-btn-border-color); -} -.btn:focus-visible { - color: var(--bs-btn-hover-color); - background-color: var(--bs-btn-hover-bg); - border-color: var(--bs-btn-hover-border-color); - outline: 0; - box-shadow: var(--bs-btn-focus-box-shadow); -} -.btn-check:focus-visible + .btn { - border-color: var(--bs-btn-hover-border-color); - outline: 0; - box-shadow: var(--bs-btn-focus-box-shadow); -} -.btn-check:checked + .btn, :not(.btn-check) + .btn:active, .btn:first-child:active, .btn.active, .btn.show { - color: var(--bs-btn-active-color); - background-color: var(--bs-btn-active-bg); - border-color: var(--bs-btn-active-border-color); -} -.btn-check:checked + .btn:focus-visible, :not(.btn-check) + .btn:active:focus-visible, .btn:first-child:active:focus-visible, .btn.active:focus-visible, .btn.show:focus-visible { - box-shadow: var(--bs-btn-focus-box-shadow); -} -.btn:disabled, .btn.disabled, fieldset:disabled .btn { - color: var(--bs-btn-disabled-color); - pointer-events: none; - background-color: var(--bs-btn-disabled-bg); - border-color: var(--bs-btn-disabled-border-color); - opacity: var(--bs-btn-disabled-opacity); -} - -.btn-primary { - --bs-btn-color: #fff; - --bs-btn-bg: #0d6efd; - --bs-btn-border-color: #0d6efd; - --bs-btn-hover-color: #fff; - --bs-btn-hover-bg: #0b5ed7; - --bs-btn-hover-border-color: #0a58ca; - --bs-btn-focus-shadow-rgb: 49, 132, 253; - --bs-btn-active-color: #fff; - --bs-btn-active-bg: #0a58ca; - --bs-btn-active-border-color: #0a53be; - --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); - --bs-btn-disabled-color: #fff; - --bs-btn-disabled-bg: #0d6efd; - --bs-btn-disabled-border-color: #0d6efd; -} - -.btn-secondary { - --bs-btn-color: #fff; - --bs-btn-bg: #6c757d; - --bs-btn-border-color: #6c757d; - --bs-btn-hover-color: #fff; - --bs-btn-hover-bg: #5c636a; - --bs-btn-hover-border-color: #565e64; - --bs-btn-focus-shadow-rgb: 130, 138, 145; - --bs-btn-active-color: #fff; - --bs-btn-active-bg: #565e64; - --bs-btn-active-border-color: #51585e; - --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); - --bs-btn-disabled-color: #fff; - --bs-btn-disabled-bg: #6c757d; - --bs-btn-disabled-border-color: #6c757d; -} - -.btn-success { - --bs-btn-color: #fff; - --bs-btn-bg: #198754; - --bs-btn-border-color: #198754; - --bs-btn-hover-color: #fff; - --bs-btn-hover-bg: #157347; - --bs-btn-hover-border-color: #146c43; - --bs-btn-focus-shadow-rgb: 60, 153, 110; - --bs-btn-active-color: #fff; - --bs-btn-active-bg: #146c43; - --bs-btn-active-border-color: #13653f; - --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); - --bs-btn-disabled-color: #fff; - --bs-btn-disabled-bg: #198754; - --bs-btn-disabled-border-color: #198754; -} - -.btn-info { - --bs-btn-color: #000; - --bs-btn-bg: #0dcaf0; - --bs-btn-border-color: #0dcaf0; - --bs-btn-hover-color: #000; - --bs-btn-hover-bg: #31d2f2; - --bs-btn-hover-border-color: #25cff2; - --bs-btn-focus-shadow-rgb: 11, 172, 204; - --bs-btn-active-color: #000; - --bs-btn-active-bg: #3dd5f3; - --bs-btn-active-border-color: #25cff2; - --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); - --bs-btn-disabled-color: #000; - --bs-btn-disabled-bg: #0dcaf0; - --bs-btn-disabled-border-color: #0dcaf0; -} - -.btn-warning { - --bs-btn-color: #000; - --bs-btn-bg: #ffc107; - --bs-btn-border-color: #ffc107; - --bs-btn-hover-color: #000; - --bs-btn-hover-bg: #ffca2c; - --bs-btn-hover-border-color: #ffc720; - --bs-btn-focus-shadow-rgb: 217, 164, 6; - --bs-btn-active-color: #000; - --bs-btn-active-bg: #ffcd39; - --bs-btn-active-border-color: #ffc720; - --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); - --bs-btn-disabled-color: #000; - --bs-btn-disabled-bg: #ffc107; - --bs-btn-disabled-border-color: #ffc107; -} - -.btn-danger { - --bs-btn-color: #fff; - --bs-btn-bg: #dc3545; - --bs-btn-border-color: #dc3545; - --bs-btn-hover-color: #fff; - --bs-btn-hover-bg: #bb2d3b; - --bs-btn-hover-border-color: #b02a37; - --bs-btn-focus-shadow-rgb: 225, 83, 97; - --bs-btn-active-color: #fff; - --bs-btn-active-bg: #b02a37; - --bs-btn-active-border-color: #a52834; - --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); - --bs-btn-disabled-color: #fff; - --bs-btn-disabled-bg: #dc3545; - --bs-btn-disabled-border-color: #dc3545; -} - -.btn-light { - --bs-btn-color: #000; - --bs-btn-bg: #f8f9fa; - --bs-btn-border-color: #f8f9fa; - --bs-btn-hover-color: #000; - --bs-btn-hover-bg: #d3d4d5; - --bs-btn-hover-border-color: #c6c7c8; - --bs-btn-focus-shadow-rgb: 211, 212, 213; - --bs-btn-active-color: #000; - --bs-btn-active-bg: #c6c7c8; - --bs-btn-active-border-color: #babbbc; - --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); - --bs-btn-disabled-color: #000; - --bs-btn-disabled-bg: #f8f9fa; - --bs-btn-disabled-border-color: #f8f9fa; -} - -.btn-dark { - --bs-btn-color: #fff; - --bs-btn-bg: #212529; - --bs-btn-border-color: #212529; - --bs-btn-hover-color: #fff; - --bs-btn-hover-bg: #424649; - --bs-btn-hover-border-color: #373b3e; - --bs-btn-focus-shadow-rgb: 66, 70, 73; - --bs-btn-active-color: #fff; - --bs-btn-active-bg: #4d5154; - --bs-btn-active-border-color: #373b3e; - --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); - --bs-btn-disabled-color: #fff; - --bs-btn-disabled-bg: #212529; - --bs-btn-disabled-border-color: #212529; -} - -.btn-outline-primary { - --bs-btn-color: #0d6efd; - --bs-btn-border-color: #0d6efd; - --bs-btn-hover-color: #fff; - --bs-btn-hover-bg: #0d6efd; - --bs-btn-hover-border-color: #0d6efd; - --bs-btn-focus-shadow-rgb: 13, 110, 253; - --bs-btn-active-color: #fff; - --bs-btn-active-bg: #0d6efd; - --bs-btn-active-border-color: #0d6efd; - --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); - --bs-btn-disabled-color: #0d6efd; - --bs-btn-disabled-bg: transparent; - --bs-btn-disabled-border-color: #0d6efd; - --bs-gradient: none; -} - -.btn-outline-secondary { - --bs-btn-color: #6c757d; - --bs-btn-border-color: #6c757d; - --bs-btn-hover-color: #fff; - --bs-btn-hover-bg: #6c757d; - --bs-btn-hover-border-color: #6c757d; - --bs-btn-focus-shadow-rgb: 108, 117, 125; - --bs-btn-active-color: #fff; - --bs-btn-active-bg: #6c757d; - --bs-btn-active-border-color: #6c757d; - --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); - --bs-btn-disabled-color: #6c757d; - --bs-btn-disabled-bg: transparent; - --bs-btn-disabled-border-color: #6c757d; - --bs-gradient: none; -} - -.btn-outline-success { - --bs-btn-color: #198754; - --bs-btn-border-color: #198754; - --bs-btn-hover-color: #fff; - --bs-btn-hover-bg: #198754; - --bs-btn-hover-border-color: #198754; - --bs-btn-focus-shadow-rgb: 25, 135, 84; - --bs-btn-active-color: #fff; - --bs-btn-active-bg: #198754; - --bs-btn-active-border-color: #198754; - --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); - --bs-btn-disabled-color: #198754; - --bs-btn-disabled-bg: transparent; - --bs-btn-disabled-border-color: #198754; - --bs-gradient: none; -} - -.btn-outline-info { - --bs-btn-color: #0dcaf0; - --bs-btn-border-color: #0dcaf0; - --bs-btn-hover-color: #000; - --bs-btn-hover-bg: #0dcaf0; - --bs-btn-hover-border-color: #0dcaf0; - --bs-btn-focus-shadow-rgb: 13, 202, 240; - --bs-btn-active-color: #000; - --bs-btn-active-bg: #0dcaf0; - --bs-btn-active-border-color: #0dcaf0; - --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); - --bs-btn-disabled-color: #0dcaf0; - --bs-btn-disabled-bg: transparent; - --bs-btn-disabled-border-color: #0dcaf0; - --bs-gradient: none; -} - -.btn-outline-warning { - --bs-btn-color: #ffc107; - --bs-btn-border-color: #ffc107; - --bs-btn-hover-color: #000; - --bs-btn-hover-bg: #ffc107; - --bs-btn-hover-border-color: #ffc107; - --bs-btn-focus-shadow-rgb: 255, 193, 7; - --bs-btn-active-color: #000; - --bs-btn-active-bg: #ffc107; - --bs-btn-active-border-color: #ffc107; - --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); - --bs-btn-disabled-color: #ffc107; - --bs-btn-disabled-bg: transparent; - --bs-btn-disabled-border-color: #ffc107; - --bs-gradient: none; -} - -.btn-outline-danger { - --bs-btn-color: #dc3545; - --bs-btn-border-color: #dc3545; - --bs-btn-hover-color: #fff; - --bs-btn-hover-bg: #dc3545; - --bs-btn-hover-border-color: #dc3545; - --bs-btn-focus-shadow-rgb: 220, 53, 69; - --bs-btn-active-color: #fff; - --bs-btn-active-bg: #dc3545; - --bs-btn-active-border-color: #dc3545; - --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); - --bs-btn-disabled-color: #dc3545; - --bs-btn-disabled-bg: transparent; - --bs-btn-disabled-border-color: #dc3545; - --bs-gradient: none; -} - -.btn-outline-light { - --bs-btn-color: #f8f9fa; - --bs-btn-border-color: #f8f9fa; - --bs-btn-hover-color: #000; - --bs-btn-hover-bg: #f8f9fa; - --bs-btn-hover-border-color: #f8f9fa; - --bs-btn-focus-shadow-rgb: 248, 249, 250; - --bs-btn-active-color: #000; - --bs-btn-active-bg: #f8f9fa; - --bs-btn-active-border-color: #f8f9fa; - --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); - --bs-btn-disabled-color: #f8f9fa; - --bs-btn-disabled-bg: transparent; - --bs-btn-disabled-border-color: #f8f9fa; - --bs-gradient: none; -} - -.btn-outline-dark { - --bs-btn-color: #212529; - --bs-btn-border-color: #212529; - --bs-btn-hover-color: #fff; - --bs-btn-hover-bg: #212529; - --bs-btn-hover-border-color: #212529; - --bs-btn-focus-shadow-rgb: 33, 37, 41; - --bs-btn-active-color: #fff; - --bs-btn-active-bg: #212529; - --bs-btn-active-border-color: #212529; - --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); - --bs-btn-disabled-color: #212529; - --bs-btn-disabled-bg: transparent; - --bs-btn-disabled-border-color: #212529; - --bs-gradient: none; -} - -.btn-link { - --bs-btn-font-weight: 400; - --bs-btn-color: var(--bs-link-color); - --bs-btn-bg: transparent; - --bs-btn-border-color: transparent; - --bs-btn-hover-color: var(--bs-link-hover-color); - --bs-btn-hover-border-color: transparent; - --bs-btn-active-color: var(--bs-link-hover-color); - --bs-btn-active-border-color: transparent; - --bs-btn-disabled-color: #6c757d; - --bs-btn-disabled-border-color: transparent; - --bs-btn-box-shadow: 0 0 0 #000; - --bs-btn-focus-shadow-rgb: 49, 132, 253; - text-decoration: underline; -} -.btn-link:focus-visible { - color: var(--bs-btn-color); -} -.btn-link:hover { - color: var(--bs-btn-hover-color); -} - -.btn-lg, .btn-group-lg > .btn { - --bs-btn-padding-y: 0.5rem; - --bs-btn-padding-x: 1rem; - --bs-btn-font-size: 1.25rem; - --bs-btn-border-radius: var(--bs-border-radius-lg); -} - -.btn-sm, .btn-group-sm > .btn { - --bs-btn-padding-y: 0.25rem; - --bs-btn-padding-x: 0.5rem; - --bs-btn-font-size: 0.875rem; - --bs-btn-border-radius: var(--bs-border-radius-sm); -} - -.fade { - transition: opacity 0.15s linear; -} -@media (prefers-reduced-motion: reduce) { - .fade { - transition: none; - } -} -.fade:not(.show) { - opacity: 0; -} - -.collapse:not(.show) { - display: none; -} - -.collapsing { - height: 0; - overflow: hidden; - transition: height 0.35s ease; -} -@media (prefers-reduced-motion: reduce) { - .collapsing { - transition: none; - } -} -.collapsing.collapse-horizontal { - width: 0; - height: auto; - transition: width 0.35s ease; -} -@media (prefers-reduced-motion: reduce) { - .collapsing.collapse-horizontal { - transition: none; - } -} - -.dropup, -.dropend, -.dropdown, -.dropstart, -.dropup-center, -.dropdown-center { - position: relative; -} - -.dropdown-toggle { - white-space: nowrap; -} -.dropdown-toggle::after { - display: inline-block; - margin-left: 0.255em; - vertical-align: 0.255em; - content: ""; - border-top: 0.3em solid; - border-right: 0.3em solid transparent; - border-bottom: 0; - border-left: 0.3em solid transparent; -} -.dropdown-toggle:empty::after { - margin-left: 0; -} - -.dropdown-menu { - --bs-dropdown-zindex: 1000; - --bs-dropdown-min-width: 10rem; - --bs-dropdown-padding-x: 0; - --bs-dropdown-padding-y: 0.5rem; - --bs-dropdown-spacer: 0.125rem; - --bs-dropdown-font-size: 1rem; - --bs-dropdown-color: var(--bs-body-color); - --bs-dropdown-bg: var(--bs-body-bg); - --bs-dropdown-border-color: var(--bs-border-color-translucent); - --bs-dropdown-border-radius: var(--bs-border-radius); - --bs-dropdown-border-width: var(--bs-border-width); - --bs-dropdown-inner-border-radius: calc(var(--bs-border-radius) - var(--bs-border-width)); - --bs-dropdown-divider-bg: var(--bs-border-color-translucent); - --bs-dropdown-divider-margin-y: 0.5rem; - --bs-dropdown-box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15); - --bs-dropdown-link-color: var(--bs-body-color); - --bs-dropdown-link-hover-color: var(--bs-body-color); - --bs-dropdown-link-hover-bg: var(--bs-tertiary-bg); - --bs-dropdown-link-active-color: #fff; - --bs-dropdown-link-active-bg: #0d6efd; - --bs-dropdown-link-disabled-color: var(--bs-tertiary-color); - --bs-dropdown-item-padding-x: 1rem; - --bs-dropdown-item-padding-y: 0.25rem; - --bs-dropdown-header-color: #6c757d; - --bs-dropdown-header-padding-x: 1rem; - --bs-dropdown-header-padding-y: 0.5rem; - position: absolute; - z-index: var(--bs-dropdown-zindex); - display: none; - min-width: var(--bs-dropdown-min-width); - padding: var(--bs-dropdown-padding-y) var(--bs-dropdown-padding-x); - margin: 0; - font-size: var(--bs-dropdown-font-size); - color: var(--bs-dropdown-color); - text-align: left; - list-style: none; - background-color: var(--bs-dropdown-bg); - background-clip: padding-box; - border: var(--bs-dropdown-border-width) solid var(--bs-dropdown-border-color); - border-radius: var(--bs-dropdown-border-radius); -} -.dropdown-menu[data-bs-popper] { - top: 100%; - left: 0; - margin-top: var(--bs-dropdown-spacer); -} - -.dropdown-menu-start { - --bs-position: start; -} -.dropdown-menu-start[data-bs-popper] { - right: auto; - left: 0; -} - -.dropdown-menu-end { - --bs-position: end; -} -.dropdown-menu-end[data-bs-popper] { - right: 0; - left: auto; -} - -@media (min-width: 576px) { - .dropdown-menu-sm-start { - --bs-position: start; - } - .dropdown-menu-sm-start[data-bs-popper] { - right: auto; - left: 0; - } - .dropdown-menu-sm-end { - --bs-position: end; - } - .dropdown-menu-sm-end[data-bs-popper] { - right: 0; - left: auto; - } -} -@media (min-width: 768px) { - .dropdown-menu-md-start { - --bs-position: start; - } - .dropdown-menu-md-start[data-bs-popper] { - right: auto; - left: 0; - } - .dropdown-menu-md-end { - --bs-position: end; - } - .dropdown-menu-md-end[data-bs-popper] { - right: 0; - left: auto; - } -} -@media (min-width: 992px) { - .dropdown-menu-lg-start { - --bs-position: start; - } - .dropdown-menu-lg-start[data-bs-popper] { - right: auto; - left: 0; - } - .dropdown-menu-lg-end { - --bs-position: end; - } - .dropdown-menu-lg-end[data-bs-popper] { - right: 0; - left: auto; - } -} -@media (min-width: 1200px) { - .dropdown-menu-xl-start { - --bs-position: start; - } - .dropdown-menu-xl-start[data-bs-popper] { - right: auto; - left: 0; - } - .dropdown-menu-xl-end { - --bs-position: end; - } - .dropdown-menu-xl-end[data-bs-popper] { - right: 0; - left: auto; - } -} -@media (min-width: 1400px) { - .dropdown-menu-xxl-start { - --bs-position: start; - } - .dropdown-menu-xxl-start[data-bs-popper] { - right: auto; - left: 0; - } - .dropdown-menu-xxl-end { - --bs-position: end; - } - .dropdown-menu-xxl-end[data-bs-popper] { - right: 0; - left: auto; - } -} -.dropup .dropdown-menu[data-bs-popper] { - top: auto; - bottom: 100%; - margin-top: 0; - margin-bottom: var(--bs-dropdown-spacer); -} -.dropup .dropdown-toggle::after { - display: inline-block; - margin-left: 0.255em; - vertical-align: 0.255em; - content: ""; - border-top: 0; - border-right: 0.3em solid transparent; - border-bottom: 0.3em solid; - border-left: 0.3em solid transparent; -} -.dropup .dropdown-toggle:empty::after { - margin-left: 0; -} - -.dropend .dropdown-menu[data-bs-popper] { - top: 0; - right: auto; - left: 100%; - margin-top: 0; - margin-left: var(--bs-dropdown-spacer); -} -.dropend .dropdown-toggle::after { - display: inline-block; - margin-left: 0.255em; - vertical-align: 0.255em; - content: ""; - border-top: 0.3em solid transparent; - border-right: 0; - border-bottom: 0.3em solid transparent; - border-left: 0.3em solid; -} -.dropend .dropdown-toggle:empty::after { - margin-left: 0; -} -.dropend .dropdown-toggle::after { - vertical-align: 0; -} - -.dropstart .dropdown-menu[data-bs-popper] { - top: 0; - right: 100%; - left: auto; - margin-top: 0; - margin-right: var(--bs-dropdown-spacer); -} -.dropstart .dropdown-toggle::after { - display: inline-block; - margin-left: 0.255em; - vertical-align: 0.255em; - content: ""; -} -.dropstart .dropdown-toggle::after { - display: none; -} -.dropstart .dropdown-toggle::before { - display: inline-block; - margin-right: 0.255em; - vertical-align: 0.255em; - content: ""; - border-top: 0.3em solid transparent; - border-right: 0.3em solid; - border-bottom: 0.3em solid transparent; -} -.dropstart .dropdown-toggle:empty::after { - margin-left: 0; -} -.dropstart .dropdown-toggle::before { - vertical-align: 0; -} - -.dropdown-divider { - height: 0; - margin: var(--bs-dropdown-divider-margin-y) 0; - overflow: hidden; - border-top: 1px solid var(--bs-dropdown-divider-bg); - opacity: 1; -} - -.dropdown-item { - display: block; - width: 100%; - padding: var(--bs-dropdown-item-padding-y) var(--bs-dropdown-item-padding-x); - clear: both; - font-weight: 400; - color: var(--bs-dropdown-link-color); - text-align: inherit; - text-decoration: none; - white-space: nowrap; - background-color: transparent; - border: 0; - border-radius: var(--bs-dropdown-item-border-radius, 0); -} -.dropdown-item:hover, .dropdown-item:focus { - color: var(--bs-dropdown-link-hover-color); - background-color: var(--bs-dropdown-link-hover-bg); -} -.dropdown-item.active, .dropdown-item:active { - color: var(--bs-dropdown-link-active-color); - text-decoration: none; - background-color: var(--bs-dropdown-link-active-bg); -} -.dropdown-item.disabled, .dropdown-item:disabled { - color: var(--bs-dropdown-link-disabled-color); - pointer-events: none; - background-color: transparent; -} - -.dropdown-menu.show { - display: block; -} - -.dropdown-header { - display: block; - padding: var(--bs-dropdown-header-padding-y) var(--bs-dropdown-header-padding-x); - margin-bottom: 0; - font-size: 0.875rem; - color: var(--bs-dropdown-header-color); - white-space: nowrap; -} - -.dropdown-item-text { - display: block; - padding: var(--bs-dropdown-item-padding-y) var(--bs-dropdown-item-padding-x); - color: var(--bs-dropdown-link-color); -} - -.dropdown-menu-dark { - --bs-dropdown-color: #dee2e6; - --bs-dropdown-bg: #343a40; - --bs-dropdown-border-color: var(--bs-border-color-translucent); - --bs-dropdown-box-shadow: ; - --bs-dropdown-link-color: #dee2e6; - --bs-dropdown-link-hover-color: #fff; - --bs-dropdown-divider-bg: var(--bs-border-color-translucent); - --bs-dropdown-link-hover-bg: rgba(255, 255, 255, 0.15); - --bs-dropdown-link-active-color: #fff; - --bs-dropdown-link-active-bg: #0d6efd; - --bs-dropdown-link-disabled-color: #adb5bd; - --bs-dropdown-header-color: #adb5bd; -} - -.btn-group, -.btn-group-vertical { - position: relative; - display: inline-flex; - vertical-align: middle; -} -.btn-group > .btn, -.btn-group-vertical > .btn { - position: relative; - flex: 1 1 auto; -} -.btn-group > .btn-check:checked + .btn, -.btn-group > .btn-check:focus + .btn, -.btn-group > .btn:hover, -.btn-group > .btn:focus, -.btn-group > .btn:active, -.btn-group > .btn.active, -.btn-group-vertical > .btn-check:checked + .btn, -.btn-group-vertical > .btn-check:focus + .btn, -.btn-group-vertical > .btn:hover, -.btn-group-vertical > .btn:focus, -.btn-group-vertical > .btn:active, -.btn-group-vertical > .btn.active { - z-index: 1; -} - -.btn-toolbar { - display: flex; - flex-wrap: wrap; - justify-content: flex-start; -} -.btn-toolbar .input-group { - width: auto; -} - -.btn-group { - border-radius: var(--bs-border-radius); -} -.btn-group > :not(.btn-check:first-child) + .btn, -.btn-group > .btn-group:not(:first-child) { - margin-left: calc(var(--bs-border-width) * -1); -} -.btn-group > .btn:not(:last-child):not(.dropdown-toggle), -.btn-group > .btn.dropdown-toggle-split:first-child, -.btn-group > .btn-group:not(:last-child) > .btn { - border-top-right-radius: 0; - border-bottom-right-radius: 0; -} -.btn-group > .btn:nth-child(n+3), -.btn-group > :not(.btn-check) + .btn, -.btn-group > .btn-group:not(:first-child) > .btn { - border-top-left-radius: 0; - border-bottom-left-radius: 0; -} - -.dropdown-toggle-split { - padding-right: 0.5625rem; - padding-left: 0.5625rem; -} -.dropdown-toggle-split::after, .dropup .dropdown-toggle-split::after, .dropend .dropdown-toggle-split::after { - margin-left: 0; -} -.dropstart .dropdown-toggle-split::before { - margin-right: 0; -} - -.btn-sm + .dropdown-toggle-split, .btn-group-sm > .btn + .dropdown-toggle-split { - padding-right: 0.375rem; - padding-left: 0.375rem; -} - -.btn-lg + .dropdown-toggle-split, .btn-group-lg > .btn + .dropdown-toggle-split { - padding-right: 0.75rem; - padding-left: 0.75rem; -} - -.btn-group-vertical { - flex-direction: column; - align-items: flex-start; - justify-content: center; -} -.btn-group-vertical > .btn, -.btn-group-vertical > .btn-group { - width: 100%; -} -.btn-group-vertical > .btn:not(:first-child), -.btn-group-vertical > .btn-group:not(:first-child) { - margin-top: calc(var(--bs-border-width) * -1); -} -.btn-group-vertical > .btn:not(:last-child):not(.dropdown-toggle), -.btn-group-vertical > .btn-group:not(:last-child) > .btn { - border-bottom-right-radius: 0; - border-bottom-left-radius: 0; -} -.btn-group-vertical > .btn ~ .btn, -.btn-group-vertical > .btn-group:not(:first-child) > .btn { - border-top-left-radius: 0; - border-top-right-radius: 0; -} - -.nav { - --bs-nav-link-padding-x: 1rem; - --bs-nav-link-padding-y: 0.5rem; - --bs-nav-link-font-weight: ; - --bs-nav-link-color: var(--bs-link-color); - --bs-nav-link-hover-color: var(--bs-link-hover-color); - --bs-nav-link-disabled-color: var(--bs-secondary-color); - display: flex; - flex-wrap: wrap; - padding-left: 0; - margin-bottom: 0; - list-style: none; -} - -.nav-link { - display: block; - padding: var(--bs-nav-link-padding-y) var(--bs-nav-link-padding-x); - font-size: var(--bs-nav-link-font-size); - font-weight: var(--bs-nav-link-font-weight); - color: var(--bs-nav-link-color); - text-decoration: none; - background: none; - border: 0; - transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out; -} -@media (prefers-reduced-motion: reduce) { - .nav-link { - transition: none; - } -} -.nav-link:hover, .nav-link:focus { - color: var(--bs-nav-link-hover-color); -} -.nav-link:focus-visible { - outline: 0; - box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25); -} -.nav-link.disabled, .nav-link:disabled { - color: var(--bs-nav-link-disabled-color); - pointer-events: none; - cursor: default; -} - -.nav-tabs { - --bs-nav-tabs-border-width: var(--bs-border-width); - --bs-nav-tabs-border-color: var(--bs-border-color); - --bs-nav-tabs-border-radius: var(--bs-border-radius); - --bs-nav-tabs-link-hover-border-color: var(--bs-secondary-bg) var(--bs-secondary-bg) var(--bs-border-color); - --bs-nav-tabs-link-active-color: var(--bs-emphasis-color); - --bs-nav-tabs-link-active-bg: var(--bs-body-bg); - --bs-nav-tabs-link-active-border-color: var(--bs-border-color) var(--bs-border-color) var(--bs-body-bg); - border-bottom: var(--bs-nav-tabs-border-width) solid var(--bs-nav-tabs-border-color); -} -.nav-tabs .nav-link { - margin-bottom: calc(-1 * var(--bs-nav-tabs-border-width)); - border: var(--bs-nav-tabs-border-width) solid transparent; - border-top-left-radius: var(--bs-nav-tabs-border-radius); - border-top-right-radius: var(--bs-nav-tabs-border-radius); -} -.nav-tabs .nav-link:hover, .nav-tabs .nav-link:focus { - isolation: isolate; - border-color: var(--bs-nav-tabs-link-hover-border-color); -} -.nav-tabs .nav-link.active, -.nav-tabs .nav-item.show .nav-link { - color: var(--bs-nav-tabs-link-active-color); - background-color: var(--bs-nav-tabs-link-active-bg); - border-color: var(--bs-nav-tabs-link-active-border-color); -} -.nav-tabs .dropdown-menu { - margin-top: calc(-1 * var(--bs-nav-tabs-border-width)); - border-top-left-radius: 0; - border-top-right-radius: 0; -} - -.nav-pills { - --bs-nav-pills-border-radius: var(--bs-border-radius); - --bs-nav-pills-link-active-color: #fff; - --bs-nav-pills-link-active-bg: #0d6efd; -} -.nav-pills .nav-link { - border-radius: var(--bs-nav-pills-border-radius); -} -.nav-pills .nav-link.active, -.nav-pills .show > .nav-link { - color: var(--bs-nav-pills-link-active-color); - background-color: var(--bs-nav-pills-link-active-bg); -} - -.nav-underline { - --bs-nav-underline-gap: 1rem; - --bs-nav-underline-border-width: 0.125rem; - --bs-nav-underline-link-active-color: var(--bs-emphasis-color); - gap: var(--bs-nav-underline-gap); -} -.nav-underline .nav-link { - padding-right: 0; - padding-left: 0; - border-bottom: var(--bs-nav-underline-border-width) solid transparent; -} -.nav-underline .nav-link:hover, .nav-underline .nav-link:focus { - border-bottom-color: currentcolor; -} -.nav-underline .nav-link.active, -.nav-underline .show > .nav-link { - font-weight: 700; - color: var(--bs-nav-underline-link-active-color); - border-bottom-color: currentcolor; -} - -.nav-fill > .nav-link, -.nav-fill .nav-item { - flex: 1 1 auto; - text-align: center; -} - -.nav-justified > .nav-link, -.nav-justified .nav-item { - flex-basis: 0; - flex-grow: 1; - text-align: center; -} - -.nav-fill .nav-item .nav-link, -.nav-justified .nav-item .nav-link { - width: 100%; -} - -.tab-content > .tab-pane { - display: none; -} -.tab-content > .active { - display: block; -} - -.navbar { - --bs-navbar-padding-x: 0; - --bs-navbar-padding-y: 0.5rem; - --bs-navbar-color: rgba(var(--bs-emphasis-color-rgb), 0.65); - --bs-navbar-hover-color: rgba(var(--bs-emphasis-color-rgb), 0.8); - --bs-navbar-disabled-color: rgba(var(--bs-emphasis-color-rgb), 0.3); - --bs-navbar-active-color: rgba(var(--bs-emphasis-color-rgb), 1); - --bs-navbar-brand-padding-y: 0.3125rem; - --bs-navbar-brand-margin-end: 1rem; - --bs-navbar-brand-font-size: 1.25rem; - --bs-navbar-brand-color: rgba(var(--bs-emphasis-color-rgb), 1); - --bs-navbar-brand-hover-color: rgba(var(--bs-emphasis-color-rgb), 1); - --bs-navbar-nav-link-padding-x: 0.5rem; - --bs-navbar-toggler-padding-y: 0.25rem; - --bs-navbar-toggler-padding-x: 0.75rem; - --bs-navbar-toggler-font-size: 1.25rem; - --bs-navbar-toggler-icon-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%2833, 37, 41, 0.75%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e"); - --bs-navbar-toggler-border-color: rgba(var(--bs-emphasis-color-rgb), 0.15); - --bs-navbar-toggler-border-radius: var(--bs-border-radius); - --bs-navbar-toggler-focus-width: 0.25rem; - --bs-navbar-toggler-transition: box-shadow 0.15s ease-in-out; - position: relative; - display: flex; - flex-wrap: wrap; - align-items: center; - justify-content: space-between; - padding: var(--bs-navbar-padding-y) var(--bs-navbar-padding-x); -} -.navbar > .container, -.navbar > .container-fluid, -.navbar > .container-sm, -.navbar > .container-md, -.navbar > .container-lg, -.navbar > .container-xl, -.navbar > .container-xxl { - display: flex; - flex-wrap: inherit; - align-items: center; - justify-content: space-between; -} -.navbar-brand { - padding-top: var(--bs-navbar-brand-padding-y); - padding-bottom: var(--bs-navbar-brand-padding-y); - margin-right: var(--bs-navbar-brand-margin-end); - font-size: var(--bs-navbar-brand-font-size); - color: var(--bs-navbar-brand-color); - text-decoration: none; - white-space: nowrap; -} -.navbar-brand:hover, .navbar-brand:focus { - color: var(--bs-navbar-brand-hover-color); -} - -.navbar-nav { - --bs-nav-link-padding-x: 0; - --bs-nav-link-padding-y: 0.5rem; - --bs-nav-link-font-weight: ; - --bs-nav-link-color: var(--bs-navbar-color); - --bs-nav-link-hover-color: var(--bs-navbar-hover-color); - --bs-nav-link-disabled-color: var(--bs-navbar-disabled-color); - display: flex; - flex-direction: column; - padding-left: 0; - margin-bottom: 0; - list-style: none; -} -.navbar-nav .nav-link.active, .navbar-nav .nav-link.show { - color: var(--bs-navbar-active-color); -} -.navbar-nav .dropdown-menu { - position: static; -} - -.navbar-text { - padding-top: 0.5rem; - padding-bottom: 0.5rem; - color: var(--bs-navbar-color); -} -.navbar-text a, -.navbar-text a:hover, -.navbar-text a:focus { - color: var(--bs-navbar-active-color); -} - -.navbar-collapse { - flex-basis: 100%; - flex-grow: 1; - align-items: center; -} - -.navbar-toggler { - padding: var(--bs-navbar-toggler-padding-y) var(--bs-navbar-toggler-padding-x); - font-size: var(--bs-navbar-toggler-font-size); - line-height: 1; - color: var(--bs-navbar-color); - background-color: transparent; - border: var(--bs-border-width) solid var(--bs-navbar-toggler-border-color); - border-radius: var(--bs-navbar-toggler-border-radius); - transition: var(--bs-navbar-toggler-transition); -} -@media (prefers-reduced-motion: reduce) { - .navbar-toggler { - transition: none; - } -} -.navbar-toggler:hover { - text-decoration: none; -} -.navbar-toggler:focus { - text-decoration: none; - outline: 0; - box-shadow: 0 0 0 var(--bs-navbar-toggler-focus-width); -} - -.navbar-toggler-icon { - display: inline-block; - width: 1.5em; - height: 1.5em; - vertical-align: middle; - background-image: var(--bs-navbar-toggler-icon-bg); - background-repeat: no-repeat; - background-position: center; - background-size: 100%; -} - -.navbar-nav-scroll { - max-height: var(--bs-scroll-height, 75vh); - overflow-y: auto; -} - -@media (min-width: 576px) { - .navbar-expand-sm { - flex-wrap: nowrap; - justify-content: flex-start; - } - .navbar-expand-sm .navbar-nav { - flex-direction: row; - } - .navbar-expand-sm .navbar-nav .dropdown-menu { - position: absolute; - } - .navbar-expand-sm .navbar-nav .nav-link { - padding-right: var(--bs-navbar-nav-link-padding-x); - padding-left: var(--bs-navbar-nav-link-padding-x); - } - .navbar-expand-sm .navbar-nav-scroll { - overflow: visible; - } - .navbar-expand-sm .navbar-collapse { - display: flex !important; - flex-basis: auto; - } - .navbar-expand-sm .navbar-toggler { - display: none; - } - .navbar-expand-sm .offcanvas { - position: static; - z-index: auto; - flex-grow: 1; - width: auto !important; - height: auto !important; - visibility: visible !important; - background-color: transparent !important; - border: 0 !important; - transform: none !important; - transition: none; - } - .navbar-expand-sm .offcanvas .offcanvas-header { - display: none; - } - .navbar-expand-sm .offcanvas .offcanvas-body { - display: flex; - flex-grow: 0; - padding: 0; - overflow-y: visible; - } -} -@media (min-width: 768px) { - .navbar-expand-md { - flex-wrap: nowrap; - justify-content: flex-start; - } - .navbar-expand-md .navbar-nav { - flex-direction: row; - } - .navbar-expand-md .navbar-nav .dropdown-menu { - position: absolute; - } - .navbar-expand-md .navbar-nav .nav-link { - padding-right: var(--bs-navbar-nav-link-padding-x); - padding-left: var(--bs-navbar-nav-link-padding-x); - } - .navbar-expand-md .navbar-nav-scroll { - overflow: visible; - } - .navbar-expand-md .navbar-collapse { - display: flex !important; - flex-basis: auto; - } - .navbar-expand-md .navbar-toggler { - display: none; - } - .navbar-expand-md .offcanvas { - position: static; - z-index: auto; - flex-grow: 1; - width: auto !important; - height: auto !important; - visibility: visible !important; - background-color: transparent !important; - border: 0 !important; - transform: none !important; - transition: none; - } - .navbar-expand-md .offcanvas .offcanvas-header { - display: none; - } - .navbar-expand-md .offcanvas .offcanvas-body { - display: flex; - flex-grow: 0; - padding: 0; - overflow-y: visible; - } -} -@media (min-width: 992px) { - .navbar-expand-lg { - flex-wrap: nowrap; - justify-content: flex-start; - } - .navbar-expand-lg .navbar-nav { - flex-direction: row; - } - .navbar-expand-lg .navbar-nav .dropdown-menu { - position: absolute; - } - .navbar-expand-lg .navbar-nav .nav-link { - padding-right: var(--bs-navbar-nav-link-padding-x); - padding-left: var(--bs-navbar-nav-link-padding-x); - } - .navbar-expand-lg .navbar-nav-scroll { - overflow: visible; - } - .navbar-expand-lg .navbar-collapse { - display: flex !important; - flex-basis: auto; - } - .navbar-expand-lg .navbar-toggler { - display: none; - } - .navbar-expand-lg .offcanvas { - position: static; - z-index: auto; - flex-grow: 1; - width: auto !important; - height: auto !important; - visibility: visible !important; - background-color: transparent !important; - border: 0 !important; - transform: none !important; - transition: none; - } - .navbar-expand-lg .offcanvas .offcanvas-header { - display: none; - } - .navbar-expand-lg .offcanvas .offcanvas-body { - display: flex; - flex-grow: 0; - padding: 0; - overflow-y: visible; - } -} -@media (min-width: 1200px) { - .navbar-expand-xl { - flex-wrap: nowrap; - justify-content: flex-start; - } - .navbar-expand-xl .navbar-nav { - flex-direction: row; - } - .navbar-expand-xl .navbar-nav .dropdown-menu { - position: absolute; - } - .navbar-expand-xl .navbar-nav .nav-link { - padding-right: var(--bs-navbar-nav-link-padding-x); - padding-left: var(--bs-navbar-nav-link-padding-x); - } - .navbar-expand-xl .navbar-nav-scroll { - overflow: visible; - } - .navbar-expand-xl .navbar-collapse { - display: flex !important; - flex-basis: auto; - } - .navbar-expand-xl .navbar-toggler { - display: none; - } - .navbar-expand-xl .offcanvas { - position: static; - z-index: auto; - flex-grow: 1; - width: auto !important; - height: auto !important; - visibility: visible !important; - background-color: transparent !important; - border: 0 !important; - transform: none !important; - transition: none; - } - .navbar-expand-xl .offcanvas .offcanvas-header { - display: none; - } - .navbar-expand-xl .offcanvas .offcanvas-body { - display: flex; - flex-grow: 0; - padding: 0; - overflow-y: visible; - } -} -@media (min-width: 1400px) { - .navbar-expand-xxl { - flex-wrap: nowrap; - justify-content: flex-start; - } - .navbar-expand-xxl .navbar-nav { - flex-direction: row; - } - .navbar-expand-xxl .navbar-nav .dropdown-menu { - position: absolute; - } - .navbar-expand-xxl .navbar-nav .nav-link { - padding-right: var(--bs-navbar-nav-link-padding-x); - padding-left: var(--bs-navbar-nav-link-padding-x); - } - .navbar-expand-xxl .navbar-nav-scroll { - overflow: visible; - } - .navbar-expand-xxl .navbar-collapse { - display: flex !important; - flex-basis: auto; - } - .navbar-expand-xxl .navbar-toggler { - display: none; - } - .navbar-expand-xxl .offcanvas { - position: static; - z-index: auto; - flex-grow: 1; - width: auto !important; - height: auto !important; - visibility: visible !important; - background-color: transparent !important; - border: 0 !important; - transform: none !important; - transition: none; - } - .navbar-expand-xxl .offcanvas .offcanvas-header { - display: none; - } - .navbar-expand-xxl .offcanvas .offcanvas-body { - display: flex; - flex-grow: 0; - padding: 0; - overflow-y: visible; - } -} -.navbar-expand { - flex-wrap: nowrap; - justify-content: flex-start; -} -.navbar-expand .navbar-nav { - flex-direction: row; -} -.navbar-expand .navbar-nav .dropdown-menu { - position: absolute; -} -.navbar-expand .navbar-nav .nav-link { - padding-right: var(--bs-navbar-nav-link-padding-x); - padding-left: var(--bs-navbar-nav-link-padding-x); -} -.navbar-expand .navbar-nav-scroll { - overflow: visible; -} -.navbar-expand .navbar-collapse { - display: flex !important; - flex-basis: auto; -} -.navbar-expand .navbar-toggler { - display: none; -} -.navbar-expand .offcanvas { - position: static; - z-index: auto; - flex-grow: 1; - width: auto !important; - height: auto !important; - visibility: visible !important; - background-color: transparent !important; - border: 0 !important; - transform: none !important; - transition: none; -} -.navbar-expand .offcanvas .offcanvas-header { - display: none; -} -.navbar-expand .offcanvas .offcanvas-body { - display: flex; - flex-grow: 0; - padding: 0; - overflow-y: visible; -} - -.navbar-dark, -.navbar[data-bs-theme=dark] { - --bs-navbar-color: rgba(255, 255, 255, 0.55); - --bs-navbar-hover-color: rgba(255, 255, 255, 0.75); - --bs-navbar-disabled-color: rgba(255, 255, 255, 0.25); - --bs-navbar-active-color: #fff; - --bs-navbar-brand-color: #fff; - --bs-navbar-brand-hover-color: #fff; - --bs-navbar-toggler-border-color: rgba(255, 255, 255, 0.1); - --bs-navbar-toggler-icon-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255, 255, 255, 0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e"); -} - -[data-bs-theme=dark] .navbar-toggler-icon { - --bs-navbar-toggler-icon-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255, 255, 255, 0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e"); -} - -.card { - --bs-card-spacer-y: 1rem; - --bs-card-spacer-x: 1rem; - --bs-card-title-spacer-y: 0.5rem; - --bs-card-title-color: ; - --bs-card-subtitle-color: ; - --bs-card-border-width: var(--bs-border-width); - --bs-card-border-color: var(--bs-border-color-translucent); - --bs-card-border-radius: var(--bs-border-radius); - --bs-card-box-shadow: ; - --bs-card-inner-border-radius: calc(var(--bs-border-radius) - (var(--bs-border-width))); - --bs-card-cap-padding-y: 0.5rem; - --bs-card-cap-padding-x: 1rem; - --bs-card-cap-bg: rgba(var(--bs-body-color-rgb), 0.03); - --bs-card-cap-color: ; - --bs-card-height: ; - --bs-card-color: ; - --bs-card-bg: var(--bs-body-bg); - --bs-card-img-overlay-padding: 1rem; - --bs-card-group-margin: 0.75rem; - position: relative; - display: flex; - flex-direction: column; - min-width: 0; - height: var(--bs-card-height); - color: var(--bs-body-color); - word-wrap: break-word; - background-color: var(--bs-card-bg); - background-clip: border-box; - border: var(--bs-card-border-width) solid var(--bs-card-border-color); - border-radius: var(--bs-card-border-radius); -} -.card > hr { - margin-right: 0; - margin-left: 0; -} -.card > .list-group { - border-top: inherit; - border-bottom: inherit; -} -.card > .list-group:first-child { - border-top-width: 0; - border-top-left-radius: var(--bs-card-inner-border-radius); - border-top-right-radius: var(--bs-card-inner-border-radius); -} -.card > .list-group:last-child { - border-bottom-width: 0; - border-bottom-right-radius: var(--bs-card-inner-border-radius); - border-bottom-left-radius: var(--bs-card-inner-border-radius); -} -.card > .card-header + .list-group, -.card > .list-group + .card-footer { - border-top: 0; -} - -.card-body { - flex: 1 1 auto; - padding: var(--bs-card-spacer-y) var(--bs-card-spacer-x); - color: var(--bs-card-color); -} - -.card-title { - margin-bottom: var(--bs-card-title-spacer-y); - color: var(--bs-card-title-color); -} - -.card-subtitle { - margin-top: calc(-0.5 * var(--bs-card-title-spacer-y)); - margin-bottom: 0; - color: var(--bs-card-subtitle-color); -} - -.card-text:last-child { - margin-bottom: 0; -} - -.card-link + .card-link { - margin-left: var(--bs-card-spacer-x); -} - -.card-header { - padding: var(--bs-card-cap-padding-y) var(--bs-card-cap-padding-x); - margin-bottom: 0; - color: var(--bs-card-cap-color); - background-color: var(--bs-card-cap-bg); - border-bottom: var(--bs-card-border-width) solid var(--bs-card-border-color); -} -.card-header:first-child { - border-radius: var(--bs-card-inner-border-radius) var(--bs-card-inner-border-radius) 0 0; -} - -.card-footer { - padding: var(--bs-card-cap-padding-y) var(--bs-card-cap-padding-x); - color: var(--bs-card-cap-color); - background-color: var(--bs-card-cap-bg); - border-top: var(--bs-card-border-width) solid var(--bs-card-border-color); -} -.card-footer:last-child { - border-radius: 0 0 var(--bs-card-inner-border-radius) var(--bs-card-inner-border-radius); -} - -.card-header-tabs { - margin-right: calc(-0.5 * var(--bs-card-cap-padding-x)); - margin-bottom: calc(-1 * var(--bs-card-cap-padding-y)); - margin-left: calc(-0.5 * var(--bs-card-cap-padding-x)); - border-bottom: 0; -} -.card-header-tabs .nav-link.active { - background-color: var(--bs-card-bg); - border-bottom-color: var(--bs-card-bg); -} - -.card-header-pills { - margin-right: calc(-0.5 * var(--bs-card-cap-padding-x)); - margin-left: calc(-0.5 * var(--bs-card-cap-padding-x)); -} - -.card-img-overlay { - position: absolute; - top: 0; - right: 0; - bottom: 0; - left: 0; - padding: var(--bs-card-img-overlay-padding); - border-radius: var(--bs-card-inner-border-radius); -} - -.card-img, -.card-img-top, -.card-img-bottom { - width: 100%; -} - -.card-img, -.card-img-top { - border-top-left-radius: var(--bs-card-inner-border-radius); - border-top-right-radius: var(--bs-card-inner-border-radius); -} - -.card-img, -.card-img-bottom { - border-bottom-right-radius: var(--bs-card-inner-border-radius); - border-bottom-left-radius: var(--bs-card-inner-border-radius); -} - -.card-group > .card { - margin-bottom: var(--bs-card-group-margin); -} -@media (min-width: 576px) { - .card-group { - display: flex; - flex-flow: row wrap; - } - .card-group > .card { - flex: 1 0 0%; - margin-bottom: 0; - } - .card-group > .card + .card { - margin-left: 0; - border-left: 0; - } - .card-group > .card:not(:last-child) { - border-top-right-radius: 0; - border-bottom-right-radius: 0; - } - .card-group > .card:not(:last-child) .card-img-top, - .card-group > .card:not(:last-child) .card-header { - border-top-right-radius: 0; - } - .card-group > .card:not(:last-child) .card-img-bottom, - .card-group > .card:not(:last-child) .card-footer { - border-bottom-right-radius: 0; - } - .card-group > .card:not(:first-child) { - border-top-left-radius: 0; - border-bottom-left-radius: 0; - } - .card-group > .card:not(:first-child) .card-img-top, - .card-group > .card:not(:first-child) .card-header { - border-top-left-radius: 0; - } - .card-group > .card:not(:first-child) .card-img-bottom, - .card-group > .card:not(:first-child) .card-footer { - border-bottom-left-radius: 0; - } -} - -.accordion { - --bs-accordion-color: var(--bs-body-color); - --bs-accordion-bg: var(--bs-body-bg); - --bs-accordion-transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out, border-radius 0.15s ease; - --bs-accordion-border-color: var(--bs-border-color); - --bs-accordion-border-width: var(--bs-border-width); - --bs-accordion-border-radius: var(--bs-border-radius); - --bs-accordion-inner-border-radius: calc(var(--bs-border-radius) - (var(--bs-border-width))); - --bs-accordion-btn-padding-x: 1.25rem; - --bs-accordion-btn-padding-y: 1rem; - --bs-accordion-btn-color: var(--bs-body-color); - --bs-accordion-btn-bg: var(--bs-accordion-bg); - --bs-accordion-btn-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23212529'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e"); - --bs-accordion-btn-icon-width: 1.25rem; - --bs-accordion-btn-icon-transform: rotate(-180deg); - --bs-accordion-btn-icon-transition: transform 0.2s ease-in-out; - --bs-accordion-btn-active-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23052c65'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e"); - --bs-accordion-btn-focus-border-color: #86b7fe; - --bs-accordion-btn-focus-box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25); - --bs-accordion-body-padding-x: 1.25rem; - --bs-accordion-body-padding-y: 1rem; - --bs-accordion-active-color: var(--bs-primary-text-emphasis); - --bs-accordion-active-bg: var(--bs-primary-bg-subtle); -} - -.accordion-button { - position: relative; - display: flex; - align-items: center; - width: 100%; - padding: var(--bs-accordion-btn-padding-y) var(--bs-accordion-btn-padding-x); - font-size: 1rem; - color: var(--bs-accordion-btn-color); - text-align: left; - background-color: var(--bs-accordion-btn-bg); - border: 0; - border-radius: 0; - overflow-anchor: none; - transition: var(--bs-accordion-transition); -} -@media (prefers-reduced-motion: reduce) { - .accordion-button { - transition: none; - } -} -.accordion-button:not(.collapsed) { - color: var(--bs-accordion-active-color); - background-color: var(--bs-accordion-active-bg); - box-shadow: inset 0 calc(-1 * var(--bs-accordion-border-width)) 0 var(--bs-accordion-border-color); -} -.accordion-button:not(.collapsed)::after { - background-image: var(--bs-accordion-btn-active-icon); - transform: var(--bs-accordion-btn-icon-transform); -} -.accordion-button::after { - flex-shrink: 0; - width: var(--bs-accordion-btn-icon-width); - height: var(--bs-accordion-btn-icon-width); - margin-left: auto; - content: ""; - background-image: var(--bs-accordion-btn-icon); - background-repeat: no-repeat; - background-size: var(--bs-accordion-btn-icon-width); - transition: var(--bs-accordion-btn-icon-transition); -} -@media (prefers-reduced-motion: reduce) { - .accordion-button::after { - transition: none; - } -} -.accordion-button:hover { - z-index: 2; -} -.accordion-button:focus { - z-index: 3; - border-color: var(--bs-accordion-btn-focus-border-color); - outline: 0; - box-shadow: var(--bs-accordion-btn-focus-box-shadow); -} - -.accordion-header { - margin-bottom: 0; -} - -.accordion-item { - color: var(--bs-accordion-color); - background-color: var(--bs-accordion-bg); - border: var(--bs-accordion-border-width) solid var(--bs-accordion-border-color); -} -.accordion-item:first-of-type { - border-top-left-radius: var(--bs-accordion-border-radius); - border-top-right-radius: var(--bs-accordion-border-radius); -} -.accordion-item:first-of-type .accordion-button { - border-top-left-radius: var(--bs-accordion-inner-border-radius); - border-top-right-radius: var(--bs-accordion-inner-border-radius); -} -.accordion-item:not(:first-of-type) { - border-top: 0; -} -.accordion-item:last-of-type { - border-bottom-right-radius: var(--bs-accordion-border-radius); - border-bottom-left-radius: var(--bs-accordion-border-radius); -} -.accordion-item:last-of-type .accordion-button.collapsed { - border-bottom-right-radius: var(--bs-accordion-inner-border-radius); - border-bottom-left-radius: var(--bs-accordion-inner-border-radius); -} -.accordion-item:last-of-type .accordion-collapse { - border-bottom-right-radius: var(--bs-accordion-border-radius); - border-bottom-left-radius: var(--bs-accordion-border-radius); -} - -.accordion-body { - padding: var(--bs-accordion-body-padding-y) var(--bs-accordion-body-padding-x); -} - -.accordion-flush .accordion-collapse { - border-width: 0; -} -.accordion-flush .accordion-item { - border-right: 0; - border-left: 0; - border-radius: 0; -} -.accordion-flush .accordion-item:first-child { - border-top: 0; -} -.accordion-flush .accordion-item:last-child { - border-bottom: 0; -} -.accordion-flush .accordion-item .accordion-button, .accordion-flush .accordion-item .accordion-button.collapsed { - border-radius: 0; -} - -[data-bs-theme=dark] .accordion-button::after { - --bs-accordion-btn-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%236ea8fe'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e"); - --bs-accordion-btn-active-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%236ea8fe'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e"); -} - -.breadcrumb { - --bs-breadcrumb-padding-x: 0; - --bs-breadcrumb-padding-y: 0; - --bs-breadcrumb-margin-bottom: 1rem; - --bs-breadcrumb-bg: ; - --bs-breadcrumb-border-radius: ; - --bs-breadcrumb-divider-color: var(--bs-secondary-color); - --bs-breadcrumb-item-padding-x: 0.5rem; - --bs-breadcrumb-item-active-color: var(--bs-secondary-color); - display: flex; - flex-wrap: wrap; - padding: var(--bs-breadcrumb-padding-y) var(--bs-breadcrumb-padding-x); - margin-bottom: var(--bs-breadcrumb-margin-bottom); - font-size: var(--bs-breadcrumb-font-size); - list-style: none; - background-color: var(--bs-breadcrumb-bg); - border-radius: var(--bs-breadcrumb-border-radius); -} - -.breadcrumb-item + .breadcrumb-item { - padding-left: var(--bs-breadcrumb-item-padding-x); -} -.breadcrumb-item + .breadcrumb-item::before { - float: left; - padding-right: var(--bs-breadcrumb-item-padding-x); - color: var(--bs-breadcrumb-divider-color); - content: var(--bs-breadcrumb-divider, "/") /* rtl: var(--bs-breadcrumb-divider, "/") */; -} -.breadcrumb-item.active { - color: var(--bs-breadcrumb-item-active-color); -} - -.pagination { - --bs-pagination-padding-x: 0.75rem; - --bs-pagination-padding-y: 0.375rem; - --bs-pagination-font-size: 1rem; - --bs-pagination-color: var(--bs-link-color); - --bs-pagination-bg: var(--bs-body-bg); - --bs-pagination-border-width: var(--bs-border-width); - --bs-pagination-border-color: var(--bs-border-color); - --bs-pagination-border-radius: var(--bs-border-radius); - --bs-pagination-hover-color: var(--bs-link-hover-color); - --bs-pagination-hover-bg: var(--bs-tertiary-bg); - --bs-pagination-hover-border-color: var(--bs-border-color); - --bs-pagination-focus-color: var(--bs-link-hover-color); - --bs-pagination-focus-bg: var(--bs-secondary-bg); - --bs-pagination-focus-box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25); - --bs-pagination-active-color: #fff; - --bs-pagination-active-bg: #0d6efd; - --bs-pagination-active-border-color: #0d6efd; - --bs-pagination-disabled-color: var(--bs-secondary-color); - --bs-pagination-disabled-bg: var(--bs-secondary-bg); - --bs-pagination-disabled-border-color: var(--bs-border-color); - display: flex; - padding-left: 0; - list-style: none; -} - -.page-link { - position: relative; - display: block; - padding: var(--bs-pagination-padding-y) var(--bs-pagination-padding-x); - font-size: var(--bs-pagination-font-size); - color: var(--bs-pagination-color); - text-decoration: none; - background-color: var(--bs-pagination-bg); - border: var(--bs-pagination-border-width) solid var(--bs-pagination-border-color); - transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; -} -@media (prefers-reduced-motion: reduce) { - .page-link { - transition: none; - } -} -.page-link:hover { - z-index: 2; - color: var(--bs-pagination-hover-color); - background-color: var(--bs-pagination-hover-bg); - border-color: var(--bs-pagination-hover-border-color); -} -.page-link:focus { - z-index: 3; - color: var(--bs-pagination-focus-color); - background-color: var(--bs-pagination-focus-bg); - outline: 0; - box-shadow: var(--bs-pagination-focus-box-shadow); -} -.page-link.active, .active > .page-link { - z-index: 3; - color: var(--bs-pagination-active-color); - background-color: var(--bs-pagination-active-bg); - border-color: var(--bs-pagination-active-border-color); -} -.page-link.disabled, .disabled > .page-link { - color: var(--bs-pagination-disabled-color); - pointer-events: none; - background-color: var(--bs-pagination-disabled-bg); - border-color: var(--bs-pagination-disabled-border-color); -} - -.page-item:not(:first-child) .page-link { - margin-left: calc(var(--bs-border-width) * -1); -} -.page-item:first-child .page-link { - border-top-left-radius: var(--bs-pagination-border-radius); - border-bottom-left-radius: var(--bs-pagination-border-radius); -} -.page-item:last-child .page-link { - border-top-right-radius: var(--bs-pagination-border-radius); - border-bottom-right-radius: var(--bs-pagination-border-radius); -} - -.pagination-lg { - --bs-pagination-padding-x: 1.5rem; - --bs-pagination-padding-y: 0.75rem; - --bs-pagination-font-size: 1.25rem; - --bs-pagination-border-radius: var(--bs-border-radius-lg); -} - -.pagination-sm { - --bs-pagination-padding-x: 0.5rem; - --bs-pagination-padding-y: 0.25rem; - --bs-pagination-font-size: 0.875rem; - --bs-pagination-border-radius: var(--bs-border-radius-sm); -} - -.badge { - --bs-badge-padding-x: 0.65em; - --bs-badge-padding-y: 0.35em; - --bs-badge-font-size: 0.75em; - --bs-badge-font-weight: 700; - --bs-badge-color: #fff; - --bs-badge-border-radius: var(--bs-border-radius); - display: inline-block; - padding: var(--bs-badge-padding-y) var(--bs-badge-padding-x); - font-size: var(--bs-badge-font-size); - font-weight: var(--bs-badge-font-weight); - line-height: 1; - color: var(--bs-badge-color); - text-align: center; - white-space: nowrap; - vertical-align: baseline; - border-radius: var(--bs-badge-border-radius); -} -.badge:empty { - display: none; -} - -.btn .badge { - position: relative; - top: -1px; -} - -.alert { - --bs-alert-bg: transparent; - --bs-alert-padding-x: 1rem; - --bs-alert-padding-y: 1rem; - --bs-alert-margin-bottom: 1rem; - --bs-alert-color: inherit; - --bs-alert-border-color: transparent; - --bs-alert-border: var(--bs-border-width) solid var(--bs-alert-border-color); - --bs-alert-border-radius: var(--bs-border-radius); - --bs-alert-link-color: inherit; - position: relative; - padding: var(--bs-alert-padding-y) var(--bs-alert-padding-x); - margin-bottom: var(--bs-alert-margin-bottom); - color: var(--bs-alert-color); - background-color: var(--bs-alert-bg); - border: var(--bs-alert-border); - border-radius: var(--bs-alert-border-radius); -} - -.alert-heading { - color: inherit; -} - -.alert-link { - font-weight: 700; - color: var(--bs-alert-link-color); -} - -.alert-dismissible { - padding-right: 3rem; -} -.alert-dismissible .btn-close { - position: absolute; - top: 0; - right: 0; - z-index: 2; - padding: 1.25rem 1rem; -} - -.alert-primary { - --bs-alert-color: var(--bs-primary-text-emphasis); - --bs-alert-bg: var(--bs-primary-bg-subtle); - --bs-alert-border-color: var(--bs-primary-border-subtle); - --bs-alert-link-color: var(--bs-primary-text-emphasis); -} - -.alert-secondary { - --bs-alert-color: var(--bs-secondary-text-emphasis); - --bs-alert-bg: var(--bs-secondary-bg-subtle); - --bs-alert-border-color: var(--bs-secondary-border-subtle); - --bs-alert-link-color: var(--bs-secondary-text-emphasis); -} - -.alert-success { - --bs-alert-color: var(--bs-success-text-emphasis); - --bs-alert-bg: var(--bs-success-bg-subtle); - --bs-alert-border-color: var(--bs-success-border-subtle); - --bs-alert-link-color: var(--bs-success-text-emphasis); -} - -.alert-info { - --bs-alert-color: var(--bs-info-text-emphasis); - --bs-alert-bg: var(--bs-info-bg-subtle); - --bs-alert-border-color: var(--bs-info-border-subtle); - --bs-alert-link-color: var(--bs-info-text-emphasis); -} - -.alert-warning { - --bs-alert-color: var(--bs-warning-text-emphasis); - --bs-alert-bg: var(--bs-warning-bg-subtle); - --bs-alert-border-color: var(--bs-warning-border-subtle); - --bs-alert-link-color: var(--bs-warning-text-emphasis); -} - -.alert-danger { - --bs-alert-color: var(--bs-danger-text-emphasis); - --bs-alert-bg: var(--bs-danger-bg-subtle); - --bs-alert-border-color: var(--bs-danger-border-subtle); - --bs-alert-link-color: var(--bs-danger-text-emphasis); -} - -.alert-light { - --bs-alert-color: var(--bs-light-text-emphasis); - --bs-alert-bg: var(--bs-light-bg-subtle); - --bs-alert-border-color: var(--bs-light-border-subtle); - --bs-alert-link-color: var(--bs-light-text-emphasis); -} - -.alert-dark { - --bs-alert-color: var(--bs-dark-text-emphasis); - --bs-alert-bg: var(--bs-dark-bg-subtle); - --bs-alert-border-color: var(--bs-dark-border-subtle); - --bs-alert-link-color: var(--bs-dark-text-emphasis); -} - -@keyframes progress-bar-stripes { - 0% { - background-position-x: 1rem; - } -} -.progress, -.progress-stacked { - --bs-progress-height: 1rem; - --bs-progress-font-size: 0.75rem; - --bs-progress-bg: var(--bs-secondary-bg); - --bs-progress-border-radius: var(--bs-border-radius); - --bs-progress-box-shadow: var(--bs-box-shadow-inset); - --bs-progress-bar-color: #fff; - --bs-progress-bar-bg: #0d6efd; - --bs-progress-bar-transition: width 0.6s ease; - display: flex; - height: var(--bs-progress-height); - overflow: hidden; - font-size: var(--bs-progress-font-size); - background-color: var(--bs-progress-bg); - border-radius: var(--bs-progress-border-radius); -} - -.progress-bar { - display: flex; - flex-direction: column; - justify-content: center; - overflow: hidden; - color: var(--bs-progress-bar-color); - text-align: center; - white-space: nowrap; - background-color: var(--bs-progress-bar-bg); - transition: var(--bs-progress-bar-transition); -} -@media (prefers-reduced-motion: reduce) { - .progress-bar { - transition: none; - } -} - -.progress-bar-striped { - background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-size: var(--bs-progress-height) var(--bs-progress-height); -} - -.progress-stacked > .progress { - overflow: visible; -} - -.progress-stacked > .progress > .progress-bar { - width: 100%; -} - -.progress-bar-animated { - animation: 1s linear infinite progress-bar-stripes; -} -@media (prefers-reduced-motion: reduce) { - .progress-bar-animated { - animation: none; - } -} - -.list-group { - --bs-list-group-color: var(--bs-body-color); - --bs-list-group-bg: var(--bs-body-bg); - --bs-list-group-border-color: var(--bs-border-color); - --bs-list-group-border-width: var(--bs-border-width); - --bs-list-group-border-radius: var(--bs-border-radius); - --bs-list-group-item-padding-x: 1rem; - --bs-list-group-item-padding-y: 0.5rem; - --bs-list-group-action-color: var(--bs-secondary-color); - --bs-list-group-action-hover-color: var(--bs-emphasis-color); - --bs-list-group-action-hover-bg: var(--bs-tertiary-bg); - --bs-list-group-action-active-color: var(--bs-body-color); - --bs-list-group-action-active-bg: var(--bs-secondary-bg); - --bs-list-group-disabled-color: var(--bs-secondary-color); - --bs-list-group-disabled-bg: var(--bs-body-bg); - --bs-list-group-active-color: #fff; - --bs-list-group-active-bg: #0d6efd; - --bs-list-group-active-border-color: #0d6efd; - display: flex; - flex-direction: column; - padding-left: 0; - margin-bottom: 0; - border-radius: var(--bs-list-group-border-radius); -} - -.list-group-numbered { - list-style-type: none; - counter-reset: section; -} -.list-group-numbered > .list-group-item::before { - content: counters(section, ".") ". "; - counter-increment: section; -} - -.list-group-item-action { - width: 100%; - color: var(--bs-list-group-action-color); - text-align: inherit; -} -.list-group-item-action:hover, .list-group-item-action:focus { - z-index: 1; - color: var(--bs-list-group-action-hover-color); - text-decoration: none; - background-color: var(--bs-list-group-action-hover-bg); -} -.list-group-item-action:active { - color: var(--bs-list-group-action-active-color); - background-color: var(--bs-list-group-action-active-bg); -} - -.list-group-item { - position: relative; - display: block; - padding: var(--bs-list-group-item-padding-y) var(--bs-list-group-item-padding-x); - color: var(--bs-list-group-color); - text-decoration: none; - background-color: var(--bs-list-group-bg); - border: var(--bs-list-group-border-width) solid var(--bs-list-group-border-color); -} -.list-group-item:first-child { - border-top-left-radius: inherit; - border-top-right-radius: inherit; -} -.list-group-item:last-child { - border-bottom-right-radius: inherit; - border-bottom-left-radius: inherit; -} -.list-group-item.disabled, .list-group-item:disabled { - color: var(--bs-list-group-disabled-color); - pointer-events: none; - background-color: var(--bs-list-group-disabled-bg); -} -.list-group-item.active { - z-index: 2; - color: var(--bs-list-group-active-color); - background-color: var(--bs-list-group-active-bg); - border-color: var(--bs-list-group-active-border-color); -} -.list-group-item + .list-group-item { - border-top-width: 0; -} -.list-group-item + .list-group-item.active { - margin-top: calc(-1 * var(--bs-list-group-border-width)); - border-top-width: var(--bs-list-group-border-width); -} - -.list-group-horizontal { - flex-direction: row; -} -.list-group-horizontal > .list-group-item:first-child:not(:last-child) { - border-bottom-left-radius: var(--bs-list-group-border-radius); - border-top-right-radius: 0; -} -.list-group-horizontal > .list-group-item:last-child:not(:first-child) { - border-top-right-radius: var(--bs-list-group-border-radius); - border-bottom-left-radius: 0; -} -.list-group-horizontal > .list-group-item.active { - margin-top: 0; -} -.list-group-horizontal > .list-group-item + .list-group-item { - border-top-width: var(--bs-list-group-border-width); - border-left-width: 0; -} -.list-group-horizontal > .list-group-item + .list-group-item.active { - margin-left: calc(-1 * var(--bs-list-group-border-width)); - border-left-width: var(--bs-list-group-border-width); -} - -@media (min-width: 576px) { - .list-group-horizontal-sm { - flex-direction: row; - } - .list-group-horizontal-sm > .list-group-item:first-child:not(:last-child) { - border-bottom-left-radius: var(--bs-list-group-border-radius); - border-top-right-radius: 0; - } - .list-group-horizontal-sm > .list-group-item:last-child:not(:first-child) { - border-top-right-radius: var(--bs-list-group-border-radius); - border-bottom-left-radius: 0; - } - .list-group-horizontal-sm > .list-group-item.active { - margin-top: 0; - } - .list-group-horizontal-sm > .list-group-item + .list-group-item { - border-top-width: var(--bs-list-group-border-width); - border-left-width: 0; - } - .list-group-horizontal-sm > .list-group-item + .list-group-item.active { - margin-left: calc(-1 * var(--bs-list-group-border-width)); - border-left-width: var(--bs-list-group-border-width); - } -} -@media (min-width: 768px) { - .list-group-horizontal-md { - flex-direction: row; - } - .list-group-horizontal-md > .list-group-item:first-child:not(:last-child) { - border-bottom-left-radius: var(--bs-list-group-border-radius); - border-top-right-radius: 0; - } - .list-group-horizontal-md > .list-group-item:last-child:not(:first-child) { - border-top-right-radius: var(--bs-list-group-border-radius); - border-bottom-left-radius: 0; - } - .list-group-horizontal-md > .list-group-item.active { - margin-top: 0; - } - .list-group-horizontal-md > .list-group-item + .list-group-item { - border-top-width: var(--bs-list-group-border-width); - border-left-width: 0; - } - .list-group-horizontal-md > .list-group-item + .list-group-item.active { - margin-left: calc(-1 * var(--bs-list-group-border-width)); - border-left-width: var(--bs-list-group-border-width); - } -} -@media (min-width: 992px) { - .list-group-horizontal-lg { - flex-direction: row; - } - .list-group-horizontal-lg > .list-group-item:first-child:not(:last-child) { - border-bottom-left-radius: var(--bs-list-group-border-radius); - border-top-right-radius: 0; - } - .list-group-horizontal-lg > .list-group-item:last-child:not(:first-child) { - border-top-right-radius: var(--bs-list-group-border-radius); - border-bottom-left-radius: 0; - } - .list-group-horizontal-lg > .list-group-item.active { - margin-top: 0; - } - .list-group-horizontal-lg > .list-group-item + .list-group-item { - border-top-width: var(--bs-list-group-border-width); - border-left-width: 0; - } - .list-group-horizontal-lg > .list-group-item + .list-group-item.active { - margin-left: calc(-1 * var(--bs-list-group-border-width)); - border-left-width: var(--bs-list-group-border-width); - } -} -@media (min-width: 1200px) { - .list-group-horizontal-xl { - flex-direction: row; - } - .list-group-horizontal-xl > .list-group-item:first-child:not(:last-child) { - border-bottom-left-radius: var(--bs-list-group-border-radius); - border-top-right-radius: 0; - } - .list-group-horizontal-xl > .list-group-item:last-child:not(:first-child) { - border-top-right-radius: var(--bs-list-group-border-radius); - border-bottom-left-radius: 0; - } - .list-group-horizontal-xl > .list-group-item.active { - margin-top: 0; - } - .list-group-horizontal-xl > .list-group-item + .list-group-item { - border-top-width: var(--bs-list-group-border-width); - border-left-width: 0; - } - .list-group-horizontal-xl > .list-group-item + .list-group-item.active { - margin-left: calc(-1 * var(--bs-list-group-border-width)); - border-left-width: var(--bs-list-group-border-width); - } -} -@media (min-width: 1400px) { - .list-group-horizontal-xxl { - flex-direction: row; - } - .list-group-horizontal-xxl > .list-group-item:first-child:not(:last-child) { - border-bottom-left-radius: var(--bs-list-group-border-radius); - border-top-right-radius: 0; - } - .list-group-horizontal-xxl > .list-group-item:last-child:not(:first-child) { - border-top-right-radius: var(--bs-list-group-border-radius); - border-bottom-left-radius: 0; - } - .list-group-horizontal-xxl > .list-group-item.active { - margin-top: 0; - } - .list-group-horizontal-xxl > .list-group-item + .list-group-item { - border-top-width: var(--bs-list-group-border-width); - border-left-width: 0; - } - .list-group-horizontal-xxl > .list-group-item + .list-group-item.active { - margin-left: calc(-1 * var(--bs-list-group-border-width)); - border-left-width: var(--bs-list-group-border-width); - } -} -.list-group-flush { - border-radius: 0; -} -.list-group-flush > .list-group-item { - border-width: 0 0 var(--bs-list-group-border-width); -} -.list-group-flush > .list-group-item:last-child { - border-bottom-width: 0; -} - -.list-group-item-primary { - --bs-list-group-color: var(--bs-primary-text-emphasis); - --bs-list-group-bg: var(--bs-primary-bg-subtle); - --bs-list-group-border-color: var(--bs-primary-border-subtle); - --bs-list-group-action-hover-color: var(--bs-emphasis-color); - --bs-list-group-action-hover-bg: var(--bs-primary-border-subtle); - --bs-list-group-action-active-color: var(--bs-emphasis-color); - --bs-list-group-action-active-bg: var(--bs-primary-border-subtle); - --bs-list-group-active-color: var(--bs-primary-bg-subtle); - --bs-list-group-active-bg: var(--bs-primary-text-emphasis); - --bs-list-group-active-border-color: var(--bs-primary-text-emphasis); -} - -.list-group-item-secondary { - --bs-list-group-color: var(--bs-secondary-text-emphasis); - --bs-list-group-bg: var(--bs-secondary-bg-subtle); - --bs-list-group-border-color: var(--bs-secondary-border-subtle); - --bs-list-group-action-hover-color: var(--bs-emphasis-color); - --bs-list-group-action-hover-bg: var(--bs-secondary-border-subtle); - --bs-list-group-action-active-color: var(--bs-emphasis-color); - --bs-list-group-action-active-bg: var(--bs-secondary-border-subtle); - --bs-list-group-active-color: var(--bs-secondary-bg-subtle); - --bs-list-group-active-bg: var(--bs-secondary-text-emphasis); - --bs-list-group-active-border-color: var(--bs-secondary-text-emphasis); -} - -.list-group-item-success { - --bs-list-group-color: var(--bs-success-text-emphasis); - --bs-list-group-bg: var(--bs-success-bg-subtle); - --bs-list-group-border-color: var(--bs-success-border-subtle); - --bs-list-group-action-hover-color: var(--bs-emphasis-color); - --bs-list-group-action-hover-bg: var(--bs-success-border-subtle); - --bs-list-group-action-active-color: var(--bs-emphasis-color); - --bs-list-group-action-active-bg: var(--bs-success-border-subtle); - --bs-list-group-active-color: var(--bs-success-bg-subtle); - --bs-list-group-active-bg: var(--bs-success-text-emphasis); - --bs-list-group-active-border-color: var(--bs-success-text-emphasis); -} - -.list-group-item-info { - --bs-list-group-color: var(--bs-info-text-emphasis); - --bs-list-group-bg: var(--bs-info-bg-subtle); - --bs-list-group-border-color: var(--bs-info-border-subtle); - --bs-list-group-action-hover-color: var(--bs-emphasis-color); - --bs-list-group-action-hover-bg: var(--bs-info-border-subtle); - --bs-list-group-action-active-color: var(--bs-emphasis-color); - --bs-list-group-action-active-bg: var(--bs-info-border-subtle); - --bs-list-group-active-color: var(--bs-info-bg-subtle); - --bs-list-group-active-bg: var(--bs-info-text-emphasis); - --bs-list-group-active-border-color: var(--bs-info-text-emphasis); -} - -.list-group-item-warning { - --bs-list-group-color: var(--bs-warning-text-emphasis); - --bs-list-group-bg: var(--bs-warning-bg-subtle); - --bs-list-group-border-color: var(--bs-warning-border-subtle); - --bs-list-group-action-hover-color: var(--bs-emphasis-color); - --bs-list-group-action-hover-bg: var(--bs-warning-border-subtle); - --bs-list-group-action-active-color: var(--bs-emphasis-color); - --bs-list-group-action-active-bg: var(--bs-warning-border-subtle); - --bs-list-group-active-color: var(--bs-warning-bg-subtle); - --bs-list-group-active-bg: var(--bs-warning-text-emphasis); - --bs-list-group-active-border-color: var(--bs-warning-text-emphasis); -} - -.list-group-item-danger { - --bs-list-group-color: var(--bs-danger-text-emphasis); - --bs-list-group-bg: var(--bs-danger-bg-subtle); - --bs-list-group-border-color: var(--bs-danger-border-subtle); - --bs-list-group-action-hover-color: var(--bs-emphasis-color); - --bs-list-group-action-hover-bg: var(--bs-danger-border-subtle); - --bs-list-group-action-active-color: var(--bs-emphasis-color); - --bs-list-group-action-active-bg: var(--bs-danger-border-subtle); - --bs-list-group-active-color: var(--bs-danger-bg-subtle); - --bs-list-group-active-bg: var(--bs-danger-text-emphasis); - --bs-list-group-active-border-color: var(--bs-danger-text-emphasis); -} - -.list-group-item-light { - --bs-list-group-color: var(--bs-light-text-emphasis); - --bs-list-group-bg: var(--bs-light-bg-subtle); - --bs-list-group-border-color: var(--bs-light-border-subtle); - --bs-list-group-action-hover-color: var(--bs-emphasis-color); - --bs-list-group-action-hover-bg: var(--bs-light-border-subtle); - --bs-list-group-action-active-color: var(--bs-emphasis-color); - --bs-list-group-action-active-bg: var(--bs-light-border-subtle); - --bs-list-group-active-color: var(--bs-light-bg-subtle); - --bs-list-group-active-bg: var(--bs-light-text-emphasis); - --bs-list-group-active-border-color: var(--bs-light-text-emphasis); -} - -.list-group-item-dark { - --bs-list-group-color: var(--bs-dark-text-emphasis); - --bs-list-group-bg: var(--bs-dark-bg-subtle); - --bs-list-group-border-color: var(--bs-dark-border-subtle); - --bs-list-group-action-hover-color: var(--bs-emphasis-color); - --bs-list-group-action-hover-bg: var(--bs-dark-border-subtle); - --bs-list-group-action-active-color: var(--bs-emphasis-color); - --bs-list-group-action-active-bg: var(--bs-dark-border-subtle); - --bs-list-group-active-color: var(--bs-dark-bg-subtle); - --bs-list-group-active-bg: var(--bs-dark-text-emphasis); - --bs-list-group-active-border-color: var(--bs-dark-text-emphasis); -} - -.btn-close { - --bs-btn-close-color: #000; - --bs-btn-close-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23000'%3e%3cpath d='M.293.293a1 1 0 0 1 1.414 0L8 6.586 14.293.293a1 1 0 1 1 1.414 1.414L9.414 8l6.293 6.293a1 1 0 0 1-1.414 1.414L8 9.414l-6.293 6.293a1 1 0 0 1-1.414-1.414L6.586 8 .293 1.707a1 1 0 0 1 0-1.414z'/%3e%3c/svg%3e"); - --bs-btn-close-opacity: 0.5; - --bs-btn-close-hover-opacity: 0.75; - --bs-btn-close-focus-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25); - --bs-btn-close-focus-opacity: 1; - --bs-btn-close-disabled-opacity: 0.25; - --bs-btn-close-white-filter: invert(1) grayscale(100%) brightness(200%); - box-sizing: content-box; - width: 1em; - height: 1em; - padding: 0.25em 0.25em; - color: var(--bs-btn-close-color); - background: transparent var(--bs-btn-close-bg) center/1em auto no-repeat; - border: 0; - border-radius: 0.375rem; - opacity: var(--bs-btn-close-opacity); -} -.btn-close:hover { - color: var(--bs-btn-close-color); - text-decoration: none; - opacity: var(--bs-btn-close-hover-opacity); -} -.btn-close:focus { - outline: 0; - box-shadow: var(--bs-btn-close-focus-shadow); - opacity: var(--bs-btn-close-focus-opacity); -} -.btn-close:disabled, .btn-close.disabled { - pointer-events: none; - -webkit-user-select: none; - -moz-user-select: none; - user-select: none; - opacity: var(--bs-btn-close-disabled-opacity); -} - -.btn-close-white { - filter: var(--bs-btn-close-white-filter); -} - -[data-bs-theme=dark] .btn-close { - filter: var(--bs-btn-close-white-filter); -} - -.toast { - --bs-toast-zindex: 1090; - --bs-toast-padding-x: 0.75rem; - --bs-toast-padding-y: 0.5rem; - --bs-toast-spacing: 1.5rem; - --bs-toast-max-width: 350px; - --bs-toast-font-size: 0.875rem; - --bs-toast-color: ; - --bs-toast-bg: rgba(var(--bs-body-bg-rgb), 0.85); - --bs-toast-border-width: var(--bs-border-width); - --bs-toast-border-color: var(--bs-border-color-translucent); - --bs-toast-border-radius: var(--bs-border-radius); - --bs-toast-box-shadow: var(--bs-box-shadow); - --bs-toast-header-color: var(--bs-secondary-color); - --bs-toast-header-bg: rgba(var(--bs-body-bg-rgb), 0.85); - --bs-toast-header-border-color: var(--bs-border-color-translucent); - width: var(--bs-toast-max-width); - max-width: 100%; - font-size: var(--bs-toast-font-size); - color: var(--bs-toast-color); - pointer-events: auto; - background-color: var(--bs-toast-bg); - background-clip: padding-box; - border: var(--bs-toast-border-width) solid var(--bs-toast-border-color); - box-shadow: var(--bs-toast-box-shadow); - border-radius: var(--bs-toast-border-radius); -} -.toast.showing { - opacity: 0; -} -.toast:not(.show) { - display: none; -} - -.toast-container { - --bs-toast-zindex: 1090; - position: absolute; - z-index: var(--bs-toast-zindex); - width: -webkit-max-content; - width: -moz-max-content; - width: max-content; - max-width: 100%; - pointer-events: none; -} -.toast-container > :not(:last-child) { - margin-bottom: var(--bs-toast-spacing); -} - -.toast-header { - display: flex; - align-items: center; - padding: var(--bs-toast-padding-y) var(--bs-toast-padding-x); - color: var(--bs-toast-header-color); - background-color: var(--bs-toast-header-bg); - background-clip: padding-box; - border-bottom: var(--bs-toast-border-width) solid var(--bs-toast-header-border-color); - border-top-left-radius: calc(var(--bs-toast-border-radius) - var(--bs-toast-border-width)); - border-top-right-radius: calc(var(--bs-toast-border-radius) - var(--bs-toast-border-width)); -} -.toast-header .btn-close { - margin-right: calc(-0.5 * var(--bs-toast-padding-x)); - margin-left: var(--bs-toast-padding-x); -} - -.toast-body { - padding: var(--bs-toast-padding-x); - word-wrap: break-word; -} - -.modal { - --bs-modal-zindex: 1055; - --bs-modal-width: 500px; - --bs-modal-padding: 1rem; - --bs-modal-margin: 0.5rem; - --bs-modal-color: ; - --bs-modal-bg: var(--bs-body-bg); - --bs-modal-border-color: var(--bs-border-color-translucent); - --bs-modal-border-width: var(--bs-border-width); - --bs-modal-border-radius: var(--bs-border-radius-lg); - --bs-modal-box-shadow: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075); - --bs-modal-inner-border-radius: calc(var(--bs-border-radius-lg) - (var(--bs-border-width))); - --bs-modal-header-padding-x: 1rem; - --bs-modal-header-padding-y: 1rem; - --bs-modal-header-padding: 1rem 1rem; - --bs-modal-header-border-color: var(--bs-border-color); - --bs-modal-header-border-width: var(--bs-border-width); - --bs-modal-title-line-height: 1.5; - --bs-modal-footer-gap: 0.5rem; - --bs-modal-footer-bg: ; - --bs-modal-footer-border-color: var(--bs-border-color); - --bs-modal-footer-border-width: var(--bs-border-width); - position: fixed; - top: 0; - left: 0; - z-index: var(--bs-modal-zindex); - display: none; - width: 100%; - height: 100%; - overflow-x: hidden; - overflow-y: auto; - outline: 0; -} - -.modal-dialog { - position: relative; - width: auto; - margin: var(--bs-modal-margin); - pointer-events: none; -} -.modal.fade .modal-dialog { - transition: transform 0.3s ease-out; - transform: translate(0, -50px); -} -@media (prefers-reduced-motion: reduce) { - .modal.fade .modal-dialog { - transition: none; - } -} -.modal.show .modal-dialog { - transform: none; -} -.modal.modal-static .modal-dialog { - transform: scale(1.02); -} - -.modal-dialog-scrollable { - height: calc(100% - var(--bs-modal-margin) * 2); -} -.modal-dialog-scrollable .modal-content { - max-height: 100%; - overflow: hidden; -} -.modal-dialog-scrollable .modal-body { - overflow-y: auto; -} - -.modal-dialog-centered { - display: flex; - align-items: center; - min-height: calc(100% - var(--bs-modal-margin) * 2); -} - -.modal-content { - position: relative; - display: flex; - flex-direction: column; - width: 100%; - color: var(--bs-modal-color); - pointer-events: auto; - background-color: var(--bs-modal-bg); - background-clip: padding-box; - border: var(--bs-modal-border-width) solid var(--bs-modal-border-color); - border-radius: var(--bs-modal-border-radius); - outline: 0; -} - -.modal-backdrop { - --bs-backdrop-zindex: 1050; - --bs-backdrop-bg: #000; - --bs-backdrop-opacity: 0.5; - position: fixed; - top: 0; - left: 0; - z-index: var(--bs-backdrop-zindex); - width: 100vw; - height: 100vh; - background-color: var(--bs-backdrop-bg); -} -.modal-backdrop.fade { - opacity: 0; -} -.modal-backdrop.show { - opacity: var(--bs-backdrop-opacity); -} - -.modal-header { - display: flex; - flex-shrink: 0; - align-items: center; - justify-content: space-between; - padding: var(--bs-modal-header-padding); - border-bottom: var(--bs-modal-header-border-width) solid var(--bs-modal-header-border-color); - border-top-left-radius: var(--bs-modal-inner-border-radius); - border-top-right-radius: var(--bs-modal-inner-border-radius); -} -.modal-header .btn-close { - padding: calc(var(--bs-modal-header-padding-y) * 0.5) calc(var(--bs-modal-header-padding-x) * 0.5); - margin: calc(-0.5 * var(--bs-modal-header-padding-y)) calc(-0.5 * var(--bs-modal-header-padding-x)) calc(-0.5 * var(--bs-modal-header-padding-y)) auto; -} - -.modal-title { - margin-bottom: 0; - line-height: var(--bs-modal-title-line-height); -} - -.modal-body { - position: relative; - flex: 1 1 auto; - padding: var(--bs-modal-padding); -} - -.modal-footer { - display: flex; - flex-shrink: 0; - flex-wrap: wrap; - align-items: center; - justify-content: flex-end; - padding: calc(var(--bs-modal-padding) - var(--bs-modal-footer-gap) * 0.5); - background-color: var(--bs-modal-footer-bg); - border-top: var(--bs-modal-footer-border-width) solid var(--bs-modal-footer-border-color); - border-bottom-right-radius: var(--bs-modal-inner-border-radius); - border-bottom-left-radius: var(--bs-modal-inner-border-radius); -} -.modal-footer > * { - margin: calc(var(--bs-modal-footer-gap) * 0.5); -} - -@media (min-width: 576px) { - .modal { - --bs-modal-margin: 1.75rem; - --bs-modal-box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15); - } - .modal-dialog { - max-width: var(--bs-modal-width); - margin-right: auto; - margin-left: auto; - } - .modal-sm { - --bs-modal-width: 300px; - } -} -@media (min-width: 992px) { - .modal-lg, - .modal-xl { - --bs-modal-width: 800px; - } -} -@media (min-width: 1200px) { - .modal-xl { - --bs-modal-width: 1140px; - } -} -.modal-fullscreen { - width: 100vw; - max-width: none; - height: 100%; - margin: 0; -} -.modal-fullscreen .modal-content { - height: 100%; - border: 0; - border-radius: 0; -} -.modal-fullscreen .modal-header, -.modal-fullscreen .modal-footer { - border-radius: 0; -} -.modal-fullscreen .modal-body { - overflow-y: auto; -} - -@media (max-width: 575.98px) { - .modal-fullscreen-sm-down { - width: 100vw; - max-width: none; - height: 100%; - margin: 0; - } - .modal-fullscreen-sm-down .modal-content { - height: 100%; - border: 0; - border-radius: 0; - } - .modal-fullscreen-sm-down .modal-header, - .modal-fullscreen-sm-down .modal-footer { - border-radius: 0; - } - .modal-fullscreen-sm-down .modal-body { - overflow-y: auto; - } -} -@media (max-width: 767.98px) { - .modal-fullscreen-md-down { - width: 100vw; - max-width: none; - height: 100%; - margin: 0; - } - .modal-fullscreen-md-down .modal-content { - height: 100%; - border: 0; - border-radius: 0; - } - .modal-fullscreen-md-down .modal-header, - .modal-fullscreen-md-down .modal-footer { - border-radius: 0; - } - .modal-fullscreen-md-down .modal-body { - overflow-y: auto; - } -} -@media (max-width: 991.98px) { - .modal-fullscreen-lg-down { - width: 100vw; - max-width: none; - height: 100%; - margin: 0; - } - .modal-fullscreen-lg-down .modal-content { - height: 100%; - border: 0; - border-radius: 0; - } - .modal-fullscreen-lg-down .modal-header, - .modal-fullscreen-lg-down .modal-footer { - border-radius: 0; - } - .modal-fullscreen-lg-down .modal-body { - overflow-y: auto; - } -} -@media (max-width: 1199.98px) { - .modal-fullscreen-xl-down { - width: 100vw; - max-width: none; - height: 100%; - margin: 0; - } - .modal-fullscreen-xl-down .modal-content { - height: 100%; - border: 0; - border-radius: 0; - } - .modal-fullscreen-xl-down .modal-header, - .modal-fullscreen-xl-down .modal-footer { - border-radius: 0; - } - .modal-fullscreen-xl-down .modal-body { - overflow-y: auto; - } -} -@media (max-width: 1399.98px) { - .modal-fullscreen-xxl-down { - width: 100vw; - max-width: none; - height: 100%; - margin: 0; - } - .modal-fullscreen-xxl-down .modal-content { - height: 100%; - border: 0; - border-radius: 0; - } - .modal-fullscreen-xxl-down .modal-header, - .modal-fullscreen-xxl-down .modal-footer { - border-radius: 0; - } - .modal-fullscreen-xxl-down .modal-body { - overflow-y: auto; - } -} -.tooltip { - --bs-tooltip-zindex: 1080; - --bs-tooltip-max-width: 200px; - --bs-tooltip-padding-x: 0.5rem; - --bs-tooltip-padding-y: 0.25rem; - --bs-tooltip-margin: ; - --bs-tooltip-font-size: 0.875rem; - --bs-tooltip-color: var(--bs-body-bg); - --bs-tooltip-bg: var(--bs-emphasis-color); - --bs-tooltip-border-radius: var(--bs-border-radius); - --bs-tooltip-opacity: 0.9; - --bs-tooltip-arrow-width: 0.8rem; - --bs-tooltip-arrow-height: 0.4rem; - z-index: var(--bs-tooltip-zindex); - display: block; - margin: var(--bs-tooltip-margin); - font-family: var(--bs-font-sans-serif); - font-style: normal; - font-weight: 400; - line-height: 1.5; - text-align: left; - text-align: start; - text-decoration: none; - text-shadow: none; - text-transform: none; - letter-spacing: normal; - word-break: normal; - white-space: normal; - word-spacing: normal; - line-break: auto; - font-size: var(--bs-tooltip-font-size); - word-wrap: break-word; - opacity: 0; -} -.tooltip.show { - opacity: var(--bs-tooltip-opacity); -} -.tooltip .tooltip-arrow { - display: block; - width: var(--bs-tooltip-arrow-width); - height: var(--bs-tooltip-arrow-height); -} -.tooltip .tooltip-arrow::before { - position: absolute; - content: ""; - border-color: transparent; - border-style: solid; -} - -.bs-tooltip-top .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow { - bottom: calc(-1 * var(--bs-tooltip-arrow-height)); -} -.bs-tooltip-top .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow::before { - top: -1px; - border-width: var(--bs-tooltip-arrow-height) calc(var(--bs-tooltip-arrow-width) * 0.5) 0; - border-top-color: var(--bs-tooltip-bg); -} - -/* rtl:begin:ignore */ -.bs-tooltip-end .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow { - left: calc(-1 * var(--bs-tooltip-arrow-height)); - width: var(--bs-tooltip-arrow-height); - height: var(--bs-tooltip-arrow-width); -} -.bs-tooltip-end .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow::before { - right: -1px; - border-width: calc(var(--bs-tooltip-arrow-width) * 0.5) var(--bs-tooltip-arrow-height) calc(var(--bs-tooltip-arrow-width) * 0.5) 0; - border-right-color: var(--bs-tooltip-bg); -} - -/* rtl:end:ignore */ -.bs-tooltip-bottom .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow { - top: calc(-1 * var(--bs-tooltip-arrow-height)); -} -.bs-tooltip-bottom .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow::before { - bottom: -1px; - border-width: 0 calc(var(--bs-tooltip-arrow-width) * 0.5) var(--bs-tooltip-arrow-height); - border-bottom-color: var(--bs-tooltip-bg); -} - -/* rtl:begin:ignore */ -.bs-tooltip-start .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow { - right: calc(-1 * var(--bs-tooltip-arrow-height)); - width: var(--bs-tooltip-arrow-height); - height: var(--bs-tooltip-arrow-width); -} -.bs-tooltip-start .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow::before { - left: -1px; - border-width: calc(var(--bs-tooltip-arrow-width) * 0.5) 0 calc(var(--bs-tooltip-arrow-width) * 0.5) var(--bs-tooltip-arrow-height); - border-left-color: var(--bs-tooltip-bg); -} - -/* rtl:end:ignore */ -.tooltip-inner { - max-width: var(--bs-tooltip-max-width); - padding: var(--bs-tooltip-padding-y) var(--bs-tooltip-padding-x); - color: var(--bs-tooltip-color); - text-align: center; - background-color: var(--bs-tooltip-bg); - border-radius: var(--bs-tooltip-border-radius); -} - -.popover { - --bs-popover-zindex: 1070; - --bs-popover-max-width: 276px; - --bs-popover-font-size: 0.875rem; - --bs-popover-bg: var(--bs-body-bg); - --bs-popover-border-width: var(--bs-border-width); - --bs-popover-border-color: var(--bs-border-color-translucent); - --bs-popover-border-radius: var(--bs-border-radius-lg); - --bs-popover-inner-border-radius: calc(var(--bs-border-radius-lg) - var(--bs-border-width)); - --bs-popover-box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15); - --bs-popover-header-padding-x: 1rem; - --bs-popover-header-padding-y: 0.5rem; - --bs-popover-header-font-size: 1rem; - --bs-popover-header-color: inherit; - --bs-popover-header-bg: var(--bs-secondary-bg); - --bs-popover-body-padding-x: 1rem; - --bs-popover-body-padding-y: 1rem; - --bs-popover-body-color: var(--bs-body-color); - --bs-popover-arrow-width: 1rem; - --bs-popover-arrow-height: 0.5rem; - --bs-popover-arrow-border: var(--bs-popover-border-color); - z-index: var(--bs-popover-zindex); - display: block; - max-width: var(--bs-popover-max-width); - font-family: var(--bs-font-sans-serif); - font-style: normal; - font-weight: 400; - line-height: 1.5; - text-align: left; - text-align: start; - text-decoration: none; - text-shadow: none; - text-transform: none; - letter-spacing: normal; - word-break: normal; - white-space: normal; - word-spacing: normal; - line-break: auto; - font-size: var(--bs-popover-font-size); - word-wrap: break-word; - background-color: var(--bs-popover-bg); - background-clip: padding-box; - border: var(--bs-popover-border-width) solid var(--bs-popover-border-color); - border-radius: var(--bs-popover-border-radius); -} -.popover .popover-arrow { - display: block; - width: var(--bs-popover-arrow-width); - height: var(--bs-popover-arrow-height); -} -.popover .popover-arrow::before, .popover .popover-arrow::after { - position: absolute; - display: block; - content: ""; - border-color: transparent; - border-style: solid; - border-width: 0; -} - -.bs-popover-top > .popover-arrow, .bs-popover-auto[data-popper-placement^=top] > .popover-arrow { - bottom: calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width)); -} -.bs-popover-top > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=top] > .popover-arrow::before, .bs-popover-top > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=top] > .popover-arrow::after { - border-width: var(--bs-popover-arrow-height) calc(var(--bs-popover-arrow-width) * 0.5) 0; -} -.bs-popover-top > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=top] > .popover-arrow::before { - bottom: 0; - border-top-color: var(--bs-popover-arrow-border); -} -.bs-popover-top > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=top] > .popover-arrow::after { - bottom: var(--bs-popover-border-width); - border-top-color: var(--bs-popover-bg); -} - -/* rtl:begin:ignore */ -.bs-popover-end > .popover-arrow, .bs-popover-auto[data-popper-placement^=right] > .popover-arrow { - left: calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width)); - width: var(--bs-popover-arrow-height); - height: var(--bs-popover-arrow-width); -} -.bs-popover-end > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=right] > .popover-arrow::before, .bs-popover-end > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=right] > .popover-arrow::after { - border-width: calc(var(--bs-popover-arrow-width) * 0.5) var(--bs-popover-arrow-height) calc(var(--bs-popover-arrow-width) * 0.5) 0; -} -.bs-popover-end > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=right] > .popover-arrow::before { - left: 0; - border-right-color: var(--bs-popover-arrow-border); -} -.bs-popover-end > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=right] > .popover-arrow::after { - left: var(--bs-popover-border-width); - border-right-color: var(--bs-popover-bg); -} - -/* rtl:end:ignore */ -.bs-popover-bottom > .popover-arrow, .bs-popover-auto[data-popper-placement^=bottom] > .popover-arrow { - top: calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width)); -} -.bs-popover-bottom > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=bottom] > .popover-arrow::before, .bs-popover-bottom > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=bottom] > .popover-arrow::after { - border-width: 0 calc(var(--bs-popover-arrow-width) * 0.5) var(--bs-popover-arrow-height); -} -.bs-popover-bottom > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=bottom] > .popover-arrow::before { - top: 0; - border-bottom-color: var(--bs-popover-arrow-border); -} -.bs-popover-bottom > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=bottom] > .popover-arrow::after { - top: var(--bs-popover-border-width); - border-bottom-color: var(--bs-popover-bg); -} -.bs-popover-bottom .popover-header::before, .bs-popover-auto[data-popper-placement^=bottom] .popover-header::before { - position: absolute; - top: 0; - left: 50%; - display: block; - width: var(--bs-popover-arrow-width); - margin-left: calc(-0.5 * var(--bs-popover-arrow-width)); - content: ""; - border-bottom: var(--bs-popover-border-width) solid var(--bs-popover-header-bg); -} - -/* rtl:begin:ignore */ -.bs-popover-start > .popover-arrow, .bs-popover-auto[data-popper-placement^=left] > .popover-arrow { - right: calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width)); - width: var(--bs-popover-arrow-height); - height: var(--bs-popover-arrow-width); -} -.bs-popover-start > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=left] > .popover-arrow::before, .bs-popover-start > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=left] > .popover-arrow::after { - border-width: calc(var(--bs-popover-arrow-width) * 0.5) 0 calc(var(--bs-popover-arrow-width) * 0.5) var(--bs-popover-arrow-height); -} -.bs-popover-start > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=left] > .popover-arrow::before { - right: 0; - border-left-color: var(--bs-popover-arrow-border); -} -.bs-popover-start > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=left] > .popover-arrow::after { - right: var(--bs-popover-border-width); - border-left-color: var(--bs-popover-bg); -} - -/* rtl:end:ignore */ -.popover-header { - padding: var(--bs-popover-header-padding-y) var(--bs-popover-header-padding-x); - margin-bottom: 0; - font-size: var(--bs-popover-header-font-size); - color: var(--bs-popover-header-color); - background-color: var(--bs-popover-header-bg); - border-bottom: var(--bs-popover-border-width) solid var(--bs-popover-border-color); - border-top-left-radius: var(--bs-popover-inner-border-radius); - border-top-right-radius: var(--bs-popover-inner-border-radius); -} -.popover-header:empty { - display: none; -} - -.popover-body { - padding: var(--bs-popover-body-padding-y) var(--bs-popover-body-padding-x); - color: var(--bs-popover-body-color); -} - -.carousel { - position: relative; -} - -.carousel.pointer-event { - touch-action: pan-y; -} - -.carousel-inner { - position: relative; - width: 100%; - overflow: hidden; -} -.carousel-inner::after { - display: block; - clear: both; - content: ""; -} - -.carousel-item { - position: relative; - display: none; - float: left; - width: 100%; - margin-right: -100%; - -webkit-backface-visibility: hidden; - backface-visibility: hidden; - transition: transform 0.6s ease-in-out; -} -@media (prefers-reduced-motion: reduce) { - .carousel-item { - transition: none; - } -} - -.carousel-item.active, -.carousel-item-next, -.carousel-item-prev { - display: block; -} - -.carousel-item-next:not(.carousel-item-start), -.active.carousel-item-end { - transform: translateX(100%); -} - -.carousel-item-prev:not(.carousel-item-end), -.active.carousel-item-start { - transform: translateX(-100%); -} - -.carousel-fade .carousel-item { - opacity: 0; - transition-property: opacity; - transform: none; -} -.carousel-fade .carousel-item.active, -.carousel-fade .carousel-item-next.carousel-item-start, -.carousel-fade .carousel-item-prev.carousel-item-end { - z-index: 1; - opacity: 1; -} -.carousel-fade .active.carousel-item-start, -.carousel-fade .active.carousel-item-end { - z-index: 0; - opacity: 0; - transition: opacity 0s 0.6s; -} -@media (prefers-reduced-motion: reduce) { - .carousel-fade .active.carousel-item-start, - .carousel-fade .active.carousel-item-end { - transition: none; - } -} - -.carousel-control-prev, -.carousel-control-next { - position: absolute; - top: 0; - bottom: 0; - z-index: 1; - display: flex; - align-items: center; - justify-content: center; - width: 15%; - padding: 0; - color: #fff; - text-align: center; - background: none; - border: 0; - opacity: 0.5; - transition: opacity 0.15s ease; -} -@media (prefers-reduced-motion: reduce) { - .carousel-control-prev, - .carousel-control-next { - transition: none; - } -} -.carousel-control-prev:hover, .carousel-control-prev:focus, -.carousel-control-next:hover, -.carousel-control-next:focus { - color: #fff; - text-decoration: none; - outline: 0; - opacity: 0.9; -} - -.carousel-control-prev { - left: 0; -} - -.carousel-control-next { - right: 0; -} - -.carousel-control-prev-icon, -.carousel-control-next-icon { - display: inline-block; - width: 2rem; - height: 2rem; - background-repeat: no-repeat; - background-position: 50%; - background-size: 100% 100%; -} - -/* rtl:options: { - "autoRename": true, - "stringMap":[ { - "name" : "prev-next", - "search" : "prev", - "replace" : "next" - } ] -} */ -.carousel-control-prev-icon { - background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M11.354 1.646a.5.5 0 0 1 0 .708L5.707 8l5.647 5.646a.5.5 0 0 1-.708.708l-6-6a.5.5 0 0 1 0-.708l6-6a.5.5 0 0 1 .708 0z'/%3e%3c/svg%3e"); -} - -.carousel-control-next-icon { - background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8 4.646 2.354a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e"); -} - -.carousel-indicators { - position: absolute; - right: 0; - bottom: 0; - left: 0; - z-index: 2; - display: flex; - justify-content: center; - padding: 0; - margin-right: 15%; - margin-bottom: 1rem; - margin-left: 15%; -} -.carousel-indicators [data-bs-target] { - box-sizing: content-box; - flex: 0 1 auto; - width: 30px; - height: 3px; - padding: 0; - margin-right: 3px; - margin-left: 3px; - text-indent: -999px; - cursor: pointer; - background-color: #fff; - background-clip: padding-box; - border: 0; - border-top: 10px solid transparent; - border-bottom: 10px solid transparent; - opacity: 0.5; - transition: opacity 0.6s ease; -} -@media (prefers-reduced-motion: reduce) { - .carousel-indicators [data-bs-target] { - transition: none; - } -} -.carousel-indicators .active { - opacity: 1; -} - -.carousel-caption { - position: absolute; - right: 15%; - bottom: 1.25rem; - left: 15%; - padding-top: 1.25rem; - padding-bottom: 1.25rem; - color: #fff; - text-align: center; -} - -.carousel-dark .carousel-control-prev-icon, -.carousel-dark .carousel-control-next-icon { - filter: invert(1) grayscale(100); -} -.carousel-dark .carousel-indicators [data-bs-target] { - background-color: #000; -} -.carousel-dark .carousel-caption { - color: #000; -} - -[data-bs-theme=dark] .carousel .carousel-control-prev-icon, -[data-bs-theme=dark] .carousel .carousel-control-next-icon, [data-bs-theme=dark].carousel .carousel-control-prev-icon, -[data-bs-theme=dark].carousel .carousel-control-next-icon { - filter: invert(1) grayscale(100); -} -[data-bs-theme=dark] .carousel .carousel-indicators [data-bs-target], [data-bs-theme=dark].carousel .carousel-indicators [data-bs-target] { - background-color: #000; -} -[data-bs-theme=dark] .carousel .carousel-caption, [data-bs-theme=dark].carousel .carousel-caption { - color: #000; -} - -.spinner-grow, -.spinner-border { - display: inline-block; - width: var(--bs-spinner-width); - height: var(--bs-spinner-height); - vertical-align: var(--bs-spinner-vertical-align); - border-radius: 50%; - animation: var(--bs-spinner-animation-speed) linear infinite var(--bs-spinner-animation-name); -} - -@keyframes spinner-border { - to { - transform: rotate(360deg) /* rtl:ignore */; - } -} -.spinner-border { - --bs-spinner-width: 2rem; - --bs-spinner-height: 2rem; - --bs-spinner-vertical-align: -0.125em; - --bs-spinner-border-width: 0.25em; - --bs-spinner-animation-speed: 0.75s; - --bs-spinner-animation-name: spinner-border; - border: var(--bs-spinner-border-width) solid currentcolor; - border-right-color: transparent; -} - -.spinner-border-sm { - --bs-spinner-width: 1rem; - --bs-spinner-height: 1rem; - --bs-spinner-border-width: 0.2em; -} - -@keyframes spinner-grow { - 0% { - transform: scale(0); - } - 50% { - opacity: 1; - transform: none; - } -} -.spinner-grow { - --bs-spinner-width: 2rem; - --bs-spinner-height: 2rem; - --bs-spinner-vertical-align: -0.125em; - --bs-spinner-animation-speed: 0.75s; - --bs-spinner-animation-name: spinner-grow; - background-color: currentcolor; - opacity: 0; -} - -.spinner-grow-sm { - --bs-spinner-width: 1rem; - --bs-spinner-height: 1rem; -} - -@media (prefers-reduced-motion: reduce) { - .spinner-border, - .spinner-grow { - --bs-spinner-animation-speed: 1.5s; - } -} -.offcanvas, .offcanvas-xxl, .offcanvas-xl, .offcanvas-lg, .offcanvas-md, .offcanvas-sm { - --bs-offcanvas-zindex: 1045; - --bs-offcanvas-width: 400px; - --bs-offcanvas-height: 30vh; - --bs-offcanvas-padding-x: 1rem; - --bs-offcanvas-padding-y: 1rem; - --bs-offcanvas-color: var(--bs-body-color); - --bs-offcanvas-bg: var(--bs-body-bg); - --bs-offcanvas-border-width: var(--bs-border-width); - --bs-offcanvas-border-color: var(--bs-border-color-translucent); - --bs-offcanvas-box-shadow: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075); - --bs-offcanvas-transition: transform 0.3s ease-in-out; - --bs-offcanvas-title-line-height: 1.5; -} - -@media (max-width: 575.98px) { - .offcanvas-sm { - position: fixed; - bottom: 0; - z-index: var(--bs-offcanvas-zindex); - display: flex; - flex-direction: column; - max-width: 100%; - color: var(--bs-offcanvas-color); - visibility: hidden; - background-color: var(--bs-offcanvas-bg); - background-clip: padding-box; - outline: 0; - transition: var(--bs-offcanvas-transition); - } -} -@media (max-width: 575.98px) and (prefers-reduced-motion: reduce) { - .offcanvas-sm { - transition: none; - } -} -@media (max-width: 575.98px) { - .offcanvas-sm.offcanvas-start { - top: 0; - left: 0; - width: var(--bs-offcanvas-width); - border-right: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); - transform: translateX(-100%); - } - .offcanvas-sm.offcanvas-end { - top: 0; - right: 0; - width: var(--bs-offcanvas-width); - border-left: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); - transform: translateX(100%); - } - .offcanvas-sm.offcanvas-top { - top: 0; - right: 0; - left: 0; - height: var(--bs-offcanvas-height); - max-height: 100%; - border-bottom: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); - transform: translateY(-100%); - } - .offcanvas-sm.offcanvas-bottom { - right: 0; - left: 0; - height: var(--bs-offcanvas-height); - max-height: 100%; - border-top: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); - transform: translateY(100%); - } - .offcanvas-sm.showing, .offcanvas-sm.show:not(.hiding) { - transform: none; - } - .offcanvas-sm.showing, .offcanvas-sm.hiding, .offcanvas-sm.show { - visibility: visible; - } -} -@media (min-width: 576px) { - .offcanvas-sm { - --bs-offcanvas-height: auto; - --bs-offcanvas-border-width: 0; - background-color: transparent !important; - } - .offcanvas-sm .offcanvas-header { - display: none; - } - .offcanvas-sm .offcanvas-body { - display: flex; - flex-grow: 0; - padding: 0; - overflow-y: visible; - background-color: transparent !important; - } -} - -@media (max-width: 767.98px) { - .offcanvas-md { - position: fixed; - bottom: 0; - z-index: var(--bs-offcanvas-zindex); - display: flex; - flex-direction: column; - max-width: 100%; - color: var(--bs-offcanvas-color); - visibility: hidden; - background-color: var(--bs-offcanvas-bg); - background-clip: padding-box; - outline: 0; - transition: var(--bs-offcanvas-transition); - } -} -@media (max-width: 767.98px) and (prefers-reduced-motion: reduce) { - .offcanvas-md { - transition: none; - } -} -@media (max-width: 767.98px) { - .offcanvas-md.offcanvas-start { - top: 0; - left: 0; - width: var(--bs-offcanvas-width); - border-right: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); - transform: translateX(-100%); - } - .offcanvas-md.offcanvas-end { - top: 0; - right: 0; - width: var(--bs-offcanvas-width); - border-left: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); - transform: translateX(100%); - } - .offcanvas-md.offcanvas-top { - top: 0; - right: 0; - left: 0; - height: var(--bs-offcanvas-height); - max-height: 100%; - border-bottom: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); - transform: translateY(-100%); - } - .offcanvas-md.offcanvas-bottom { - right: 0; - left: 0; - height: var(--bs-offcanvas-height); - max-height: 100%; - border-top: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); - transform: translateY(100%); - } - .offcanvas-md.showing, .offcanvas-md.show:not(.hiding) { - transform: none; - } - .offcanvas-md.showing, .offcanvas-md.hiding, .offcanvas-md.show { - visibility: visible; - } -} -@media (min-width: 768px) { - .offcanvas-md { - --bs-offcanvas-height: auto; - --bs-offcanvas-border-width: 0; - background-color: transparent !important; - } - .offcanvas-md .offcanvas-header { - display: none; - } - .offcanvas-md .offcanvas-body { - display: flex; - flex-grow: 0; - padding: 0; - overflow-y: visible; - background-color: transparent !important; - } -} - -@media (max-width: 991.98px) { - .offcanvas-lg { - position: fixed; - bottom: 0; - z-index: var(--bs-offcanvas-zindex); - display: flex; - flex-direction: column; - max-width: 100%; - color: var(--bs-offcanvas-color); - visibility: hidden; - background-color: var(--bs-offcanvas-bg); - background-clip: padding-box; - outline: 0; - transition: var(--bs-offcanvas-transition); - } -} -@media (max-width: 991.98px) and (prefers-reduced-motion: reduce) { - .offcanvas-lg { - transition: none; - } -} -@media (max-width: 991.98px) { - .offcanvas-lg.offcanvas-start { - top: 0; - left: 0; - width: var(--bs-offcanvas-width); - border-right: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); - transform: translateX(-100%); - } - .offcanvas-lg.offcanvas-end { - top: 0; - right: 0; - width: var(--bs-offcanvas-width); - border-left: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); - transform: translateX(100%); - } - .offcanvas-lg.offcanvas-top { - top: 0; - right: 0; - left: 0; - height: var(--bs-offcanvas-height); - max-height: 100%; - border-bottom: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); - transform: translateY(-100%); - } - .offcanvas-lg.offcanvas-bottom { - right: 0; - left: 0; - height: var(--bs-offcanvas-height); - max-height: 100%; - border-top: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); - transform: translateY(100%); - } - .offcanvas-lg.showing, .offcanvas-lg.show:not(.hiding) { - transform: none; - } - .offcanvas-lg.showing, .offcanvas-lg.hiding, .offcanvas-lg.show { - visibility: visible; - } -} -@media (min-width: 992px) { - .offcanvas-lg { - --bs-offcanvas-height: auto; - --bs-offcanvas-border-width: 0; - background-color: transparent !important; - } - .offcanvas-lg .offcanvas-header { - display: none; - } - .offcanvas-lg .offcanvas-body { - display: flex; - flex-grow: 0; - padding: 0; - overflow-y: visible; - background-color: transparent !important; - } -} - -@media (max-width: 1199.98px) { - .offcanvas-xl { - position: fixed; - bottom: 0; - z-index: var(--bs-offcanvas-zindex); - display: flex; - flex-direction: column; - max-width: 100%; - color: var(--bs-offcanvas-color); - visibility: hidden; - background-color: var(--bs-offcanvas-bg); - background-clip: padding-box; - outline: 0; - transition: var(--bs-offcanvas-transition); - } -} -@media (max-width: 1199.98px) and (prefers-reduced-motion: reduce) { - .offcanvas-xl { - transition: none; - } -} -@media (max-width: 1199.98px) { - .offcanvas-xl.offcanvas-start { - top: 0; - left: 0; - width: var(--bs-offcanvas-width); - border-right: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); - transform: translateX(-100%); - } - .offcanvas-xl.offcanvas-end { - top: 0; - right: 0; - width: var(--bs-offcanvas-width); - border-left: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); - transform: translateX(100%); - } - .offcanvas-xl.offcanvas-top { - top: 0; - right: 0; - left: 0; - height: var(--bs-offcanvas-height); - max-height: 100%; - border-bottom: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); - transform: translateY(-100%); - } - .offcanvas-xl.offcanvas-bottom { - right: 0; - left: 0; - height: var(--bs-offcanvas-height); - max-height: 100%; - border-top: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); - transform: translateY(100%); - } - .offcanvas-xl.showing, .offcanvas-xl.show:not(.hiding) { - transform: none; - } - .offcanvas-xl.showing, .offcanvas-xl.hiding, .offcanvas-xl.show { - visibility: visible; - } -} -@media (min-width: 1200px) { - .offcanvas-xl { - --bs-offcanvas-height: auto; - --bs-offcanvas-border-width: 0; - background-color: transparent !important; - } - .offcanvas-xl .offcanvas-header { - display: none; - } - .offcanvas-xl .offcanvas-body { - display: flex; - flex-grow: 0; - padding: 0; - overflow-y: visible; - background-color: transparent !important; - } -} - -@media (max-width: 1399.98px) { - .offcanvas-xxl { - position: fixed; - bottom: 0; - z-index: var(--bs-offcanvas-zindex); - display: flex; - flex-direction: column; - max-width: 100%; - color: var(--bs-offcanvas-color); - visibility: hidden; - background-color: var(--bs-offcanvas-bg); - background-clip: padding-box; - outline: 0; - transition: var(--bs-offcanvas-transition); - } -} -@media (max-width: 1399.98px) and (prefers-reduced-motion: reduce) { - .offcanvas-xxl { - transition: none; - } -} -@media (max-width: 1399.98px) { - .offcanvas-xxl.offcanvas-start { - top: 0; - left: 0; - width: var(--bs-offcanvas-width); - border-right: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); - transform: translateX(-100%); - } - .offcanvas-xxl.offcanvas-end { - top: 0; - right: 0; - width: var(--bs-offcanvas-width); - border-left: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); - transform: translateX(100%); - } - .offcanvas-xxl.offcanvas-top { - top: 0; - right: 0; - left: 0; - height: var(--bs-offcanvas-height); - max-height: 100%; - border-bottom: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); - transform: translateY(-100%); - } - .offcanvas-xxl.offcanvas-bottom { - right: 0; - left: 0; - height: var(--bs-offcanvas-height); - max-height: 100%; - border-top: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); - transform: translateY(100%); - } - .offcanvas-xxl.showing, .offcanvas-xxl.show:not(.hiding) { - transform: none; - } - .offcanvas-xxl.showing, .offcanvas-xxl.hiding, .offcanvas-xxl.show { - visibility: visible; - } -} -@media (min-width: 1400px) { - .offcanvas-xxl { - --bs-offcanvas-height: auto; - --bs-offcanvas-border-width: 0; - background-color: transparent !important; - } - .offcanvas-xxl .offcanvas-header { - display: none; - } - .offcanvas-xxl .offcanvas-body { - display: flex; - flex-grow: 0; - padding: 0; - overflow-y: visible; - background-color: transparent !important; - } -} - -.offcanvas { - position: fixed; - bottom: 0; - z-index: var(--bs-offcanvas-zindex); - display: flex; - flex-direction: column; - max-width: 100%; - color: var(--bs-offcanvas-color); - visibility: hidden; - background-color: var(--bs-offcanvas-bg); - background-clip: padding-box; - outline: 0; - transition: var(--bs-offcanvas-transition); -} -@media (prefers-reduced-motion: reduce) { - .offcanvas { - transition: none; - } -} -.offcanvas.offcanvas-start { - top: 0; - left: 0; - width: var(--bs-offcanvas-width); - border-right: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); - transform: translateX(-100%); -} -.offcanvas.offcanvas-end { - top: 0; - right: 0; - width: var(--bs-offcanvas-width); - border-left: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); - transform: translateX(100%); -} -.offcanvas.offcanvas-top { - top: 0; - right: 0; - left: 0; - height: var(--bs-offcanvas-height); - max-height: 100%; - border-bottom: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); - transform: translateY(-100%); -} -.offcanvas.offcanvas-bottom { - right: 0; - left: 0; - height: var(--bs-offcanvas-height); - max-height: 100%; - border-top: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); - transform: translateY(100%); -} -.offcanvas.showing, .offcanvas.show:not(.hiding) { - transform: none; -} -.offcanvas.showing, .offcanvas.hiding, .offcanvas.show { - visibility: visible; -} - -.offcanvas-backdrop { - position: fixed; - top: 0; - left: 0; - z-index: 1040; - width: 100vw; - height: 100vh; - background-color: #000; -} -.offcanvas-backdrop.fade { - opacity: 0; -} -.offcanvas-backdrop.show { - opacity: 0.5; -} - -.offcanvas-header { - display: flex; - align-items: center; - justify-content: space-between; - padding: var(--bs-offcanvas-padding-y) var(--bs-offcanvas-padding-x); -} -.offcanvas-header .btn-close { - padding: calc(var(--bs-offcanvas-padding-y) * 0.5) calc(var(--bs-offcanvas-padding-x) * 0.5); - margin-top: calc(-0.5 * var(--bs-offcanvas-padding-y)); - margin-right: calc(-0.5 * var(--bs-offcanvas-padding-x)); - margin-bottom: calc(-0.5 * var(--bs-offcanvas-padding-y)); -} - -.offcanvas-title { - margin-bottom: 0; - line-height: var(--bs-offcanvas-title-line-height); -} - -.offcanvas-body { - flex-grow: 1; - padding: var(--bs-offcanvas-padding-y) var(--bs-offcanvas-padding-x); - overflow-y: auto; -} - -.placeholder { - display: inline-block; - min-height: 1em; - vertical-align: middle; - cursor: wait; - background-color: currentcolor; - opacity: 0.5; -} -.placeholder.btn::before { - display: inline-block; - content: ""; -} - -.placeholder-xs { - min-height: 0.6em; -} - -.placeholder-sm { - min-height: 0.8em; -} - -.placeholder-lg { - min-height: 1.2em; -} - -.placeholder-glow .placeholder { - animation: placeholder-glow 2s ease-in-out infinite; -} - -@keyframes placeholder-glow { - 50% { - opacity: 0.2; - } -} -.placeholder-wave { - -webkit-mask-image: linear-gradient(130deg, #000 55%, rgba(0, 0, 0, 0.8) 75%, #000 95%); - mask-image: linear-gradient(130deg, #000 55%, rgba(0, 0, 0, 0.8) 75%, #000 95%); - -webkit-mask-size: 200% 100%; - mask-size: 200% 100%; - animation: placeholder-wave 2s linear infinite; -} - -@keyframes placeholder-wave { - 100% { - -webkit-mask-position: -200% 0%; - mask-position: -200% 0%; - } -} -.clearfix::after { - display: block; - clear: both; - content: ""; -} - -.text-bg-primary { - color: #fff !important; - background-color: RGBA(var(--bs-primary-rgb), var(--bs-bg-opacity, 1)) !important; -} - -.text-bg-secondary { - color: #fff !important; - background-color: RGBA(var(--bs-secondary-rgb), var(--bs-bg-opacity, 1)) !important; -} - -.text-bg-success { - color: #fff !important; - background-color: RGBA(var(--bs-success-rgb), var(--bs-bg-opacity, 1)) !important; -} - -.text-bg-info { - color: #000 !important; - background-color: RGBA(var(--bs-info-rgb), var(--bs-bg-opacity, 1)) !important; -} - -.text-bg-warning { - color: #000 !important; - background-color: RGBA(var(--bs-warning-rgb), var(--bs-bg-opacity, 1)) !important; -} - -.text-bg-danger { - color: #fff !important; - background-color: RGBA(var(--bs-danger-rgb), var(--bs-bg-opacity, 1)) !important; -} - -.text-bg-light { - color: #000 !important; - background-color: RGBA(var(--bs-light-rgb), var(--bs-bg-opacity, 1)) !important; -} - -.text-bg-dark { - color: #fff !important; - background-color: RGBA(var(--bs-dark-rgb), var(--bs-bg-opacity, 1)) !important; -} - -.link-primary { - color: RGBA(var(--bs-primary-rgb), var(--bs-link-opacity, 1)) !important; - -webkit-text-decoration-color: RGBA(var(--bs-primary-rgb), var(--bs-link-underline-opacity, 1)) !important; - text-decoration-color: RGBA(var(--bs-primary-rgb), var(--bs-link-underline-opacity, 1)) !important; -} -.link-primary:hover, .link-primary:focus { - color: RGBA(10, 88, 202, var(--bs-link-opacity, 1)) !important; - -webkit-text-decoration-color: RGBA(10, 88, 202, var(--bs-link-underline-opacity, 1)) !important; - text-decoration-color: RGBA(10, 88, 202, var(--bs-link-underline-opacity, 1)) !important; -} - -.link-secondary { - color: RGBA(var(--bs-secondary-rgb), var(--bs-link-opacity, 1)) !important; - -webkit-text-decoration-color: RGBA(var(--bs-secondary-rgb), var(--bs-link-underline-opacity, 1)) !important; - text-decoration-color: RGBA(var(--bs-secondary-rgb), var(--bs-link-underline-opacity, 1)) !important; -} -.link-secondary:hover, .link-secondary:focus { - color: RGBA(86, 94, 100, var(--bs-link-opacity, 1)) !important; - -webkit-text-decoration-color: RGBA(86, 94, 100, var(--bs-link-underline-opacity, 1)) !important; - text-decoration-color: RGBA(86, 94, 100, var(--bs-link-underline-opacity, 1)) !important; -} - -.link-success { - color: RGBA(var(--bs-success-rgb), var(--bs-link-opacity, 1)) !important; - -webkit-text-decoration-color: RGBA(var(--bs-success-rgb), var(--bs-link-underline-opacity, 1)) !important; - text-decoration-color: RGBA(var(--bs-success-rgb), var(--bs-link-underline-opacity, 1)) !important; -} -.link-success:hover, .link-success:focus { - color: RGBA(20, 108, 67, var(--bs-link-opacity, 1)) !important; - -webkit-text-decoration-color: RGBA(20, 108, 67, var(--bs-link-underline-opacity, 1)) !important; - text-decoration-color: RGBA(20, 108, 67, var(--bs-link-underline-opacity, 1)) !important; -} - -.link-info { - color: RGBA(var(--bs-info-rgb), var(--bs-link-opacity, 1)) !important; - -webkit-text-decoration-color: RGBA(var(--bs-info-rgb), var(--bs-link-underline-opacity, 1)) !important; - text-decoration-color: RGBA(var(--bs-info-rgb), var(--bs-link-underline-opacity, 1)) !important; -} -.link-info:hover, .link-info:focus { - color: RGBA(61, 213, 243, var(--bs-link-opacity, 1)) !important; - -webkit-text-decoration-color: RGBA(61, 213, 243, var(--bs-link-underline-opacity, 1)) !important; - text-decoration-color: RGBA(61, 213, 243, var(--bs-link-underline-opacity, 1)) !important; -} - -.link-warning { - color: RGBA(var(--bs-warning-rgb), var(--bs-link-opacity, 1)) !important; - -webkit-text-decoration-color: RGBA(var(--bs-warning-rgb), var(--bs-link-underline-opacity, 1)) !important; - text-decoration-color: RGBA(var(--bs-warning-rgb), var(--bs-link-underline-opacity, 1)) !important; -} -.link-warning:hover, .link-warning:focus { - color: RGBA(255, 205, 57, var(--bs-link-opacity, 1)) !important; - -webkit-text-decoration-color: RGBA(255, 205, 57, var(--bs-link-underline-opacity, 1)) !important; - text-decoration-color: RGBA(255, 205, 57, var(--bs-link-underline-opacity, 1)) !important; -} - -.link-danger { - color: RGBA(var(--bs-danger-rgb), var(--bs-link-opacity, 1)) !important; - -webkit-text-decoration-color: RGBA(var(--bs-danger-rgb), var(--bs-link-underline-opacity, 1)) !important; - text-decoration-color: RGBA(var(--bs-danger-rgb), var(--bs-link-underline-opacity, 1)) !important; -} -.link-danger:hover, .link-danger:focus { - color: RGBA(176, 42, 55, var(--bs-link-opacity, 1)) !important; - -webkit-text-decoration-color: RGBA(176, 42, 55, var(--bs-link-underline-opacity, 1)) !important; - text-decoration-color: RGBA(176, 42, 55, var(--bs-link-underline-opacity, 1)) !important; -} - -.link-light { - color: RGBA(var(--bs-light-rgb), var(--bs-link-opacity, 1)) !important; - -webkit-text-decoration-color: RGBA(var(--bs-light-rgb), var(--bs-link-underline-opacity, 1)) !important; - text-decoration-color: RGBA(var(--bs-light-rgb), var(--bs-link-underline-opacity, 1)) !important; -} -.link-light:hover, .link-light:focus { - color: RGBA(249, 250, 251, var(--bs-link-opacity, 1)) !important; - -webkit-text-decoration-color: RGBA(249, 250, 251, var(--bs-link-underline-opacity, 1)) !important; - text-decoration-color: RGBA(249, 250, 251, var(--bs-link-underline-opacity, 1)) !important; -} - -.link-dark { - color: RGBA(var(--bs-dark-rgb), var(--bs-link-opacity, 1)) !important; - -webkit-text-decoration-color: RGBA(var(--bs-dark-rgb), var(--bs-link-underline-opacity, 1)) !important; - text-decoration-color: RGBA(var(--bs-dark-rgb), var(--bs-link-underline-opacity, 1)) !important; -} -.link-dark:hover, .link-dark:focus { - color: RGBA(26, 30, 33, var(--bs-link-opacity, 1)) !important; - -webkit-text-decoration-color: RGBA(26, 30, 33, var(--bs-link-underline-opacity, 1)) !important; - text-decoration-color: RGBA(26, 30, 33, var(--bs-link-underline-opacity, 1)) !important; -} - -.link-body-emphasis { - color: RGBA(var(--bs-emphasis-color-rgb), var(--bs-link-opacity, 1)) !important; - -webkit-text-decoration-color: RGBA(var(--bs-emphasis-color-rgb), var(--bs-link-underline-opacity, 1)) !important; - text-decoration-color: RGBA(var(--bs-emphasis-color-rgb), var(--bs-link-underline-opacity, 1)) !important; -} -.link-body-emphasis:hover, .link-body-emphasis:focus { - color: RGBA(var(--bs-emphasis-color-rgb), var(--bs-link-opacity, 0.75)) !important; - -webkit-text-decoration-color: RGBA(var(--bs-emphasis-color-rgb), var(--bs-link-underline-opacity, 0.75)) !important; - text-decoration-color: RGBA(var(--bs-emphasis-color-rgb), var(--bs-link-underline-opacity, 0.75)) !important; -} - -.focus-ring:focus { - outline: 0; - box-shadow: var(--bs-focus-ring-x, 0) var(--bs-focus-ring-y, 0) var(--bs-focus-ring-blur, 0) var(--bs-focus-ring-width) var(--bs-focus-ring-color); -} - -.icon-link { - display: inline-flex; - gap: 0.375rem; - align-items: center; - -webkit-text-decoration-color: rgba(var(--bs-link-color-rgb), var(--bs-link-opacity, 0.5)); - text-decoration-color: rgba(var(--bs-link-color-rgb), var(--bs-link-opacity, 0.5)); - text-underline-offset: 0.25em; - -webkit-backface-visibility: hidden; - backface-visibility: hidden; -} -.icon-link > .bi { - flex-shrink: 0; - width: 1em; - height: 1em; - fill: currentcolor; - transition: 0.2s ease-in-out transform; -} -@media (prefers-reduced-motion: reduce) { - .icon-link > .bi { - transition: none; - } -} - -.icon-link-hover:hover > .bi, .icon-link-hover:focus-visible > .bi { - transform: var(--bs-icon-link-transform, translate3d(0.25em, 0, 0)); -} - -.ratio { - position: relative; - width: 100%; -} -.ratio::before { - display: block; - padding-top: var(--bs-aspect-ratio); - content: ""; -} -.ratio > * { - position: absolute; - top: 0; - left: 0; - width: 100%; - height: 100%; -} - -.ratio-1x1 { - --bs-aspect-ratio: 100%; -} - -.ratio-4x3 { - --bs-aspect-ratio: 75%; -} - -.ratio-16x9 { - --bs-aspect-ratio: 56.25%; -} - -.ratio-21x9 { - --bs-aspect-ratio: 42.8571428571%; -} - -.fixed-top { - position: fixed; - top: 0; - right: 0; - left: 0; - z-index: 1030; -} - -.fixed-bottom { - position: fixed; - right: 0; - bottom: 0; - left: 0; - z-index: 1030; -} - -.sticky-top { - position: -webkit-sticky; - position: sticky; - top: 0; - z-index: 1020; -} - -.sticky-bottom { - position: -webkit-sticky; - position: sticky; - bottom: 0; - z-index: 1020; -} - -@media (min-width: 576px) { - .sticky-sm-top { - position: -webkit-sticky; - position: sticky; - top: 0; - z-index: 1020; - } - .sticky-sm-bottom { - position: -webkit-sticky; - position: sticky; - bottom: 0; - z-index: 1020; - } -} -@media (min-width: 768px) { - .sticky-md-top { - position: -webkit-sticky; - position: sticky; - top: 0; - z-index: 1020; - } - .sticky-md-bottom { - position: -webkit-sticky; - position: sticky; - bottom: 0; - z-index: 1020; - } -} -@media (min-width: 992px) { - .sticky-lg-top { - position: -webkit-sticky; - position: sticky; - top: 0; - z-index: 1020; - } - .sticky-lg-bottom { - position: -webkit-sticky; - position: sticky; - bottom: 0; - z-index: 1020; - } -} -@media (min-width: 1200px) { - .sticky-xl-top { - position: -webkit-sticky; - position: sticky; - top: 0; - z-index: 1020; - } - .sticky-xl-bottom { - position: -webkit-sticky; - position: sticky; - bottom: 0; - z-index: 1020; - } -} -@media (min-width: 1400px) { - .sticky-xxl-top { - position: -webkit-sticky; - position: sticky; - top: 0; - z-index: 1020; - } - .sticky-xxl-bottom { - position: -webkit-sticky; - position: sticky; - bottom: 0; - z-index: 1020; - } -} -.hstack { - display: flex; - flex-direction: row; - align-items: center; - align-self: stretch; -} - -.vstack { - display: flex; - flex: 1 1 auto; - flex-direction: column; - align-self: stretch; -} - -.visually-hidden, -.visually-hidden-focusable:not(:focus):not(:focus-within) { - width: 1px !important; - height: 1px !important; - padding: 0 !important; - margin: -1px !important; - overflow: hidden !important; - clip: rect(0, 0, 0, 0) !important; - white-space: nowrap !important; - border: 0 !important; -} -.visually-hidden:not(caption), -.visually-hidden-focusable:not(:focus):not(:focus-within):not(caption) { - position: absolute !important; -} - -.stretched-link::after { - position: absolute; - top: 0; - right: 0; - bottom: 0; - left: 0; - z-index: 1; - content: ""; -} - -.text-truncate { - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; -} - -.vr { - display: inline-block; - align-self: stretch; - width: var(--bs-border-width); - min-height: 1em; - background-color: currentcolor; - opacity: 0.25; -} - -.align-baseline { - vertical-align: baseline !important; -} - -.align-top { - vertical-align: top !important; -} - -.align-middle { - vertical-align: middle !important; -} - -.align-bottom { - vertical-align: bottom !important; -} - -.align-text-bottom { - vertical-align: text-bottom !important; -} - -.align-text-top { - vertical-align: text-top !important; -} - -.float-start { - float: left !important; -} - -.float-end { - float: right !important; -} - -.float-none { - float: none !important; -} - -.object-fit-contain { - -o-object-fit: contain !important; - object-fit: contain !important; -} - -.object-fit-cover { - -o-object-fit: cover !important; - object-fit: cover !important; -} - -.object-fit-fill { - -o-object-fit: fill !important; - object-fit: fill !important; -} - -.object-fit-scale { - -o-object-fit: scale-down !important; - object-fit: scale-down !important; -} - -.object-fit-none { - -o-object-fit: none !important; - object-fit: none !important; -} - -.opacity-0 { - opacity: 0 !important; -} - -.opacity-25 { - opacity: 0.25 !important; -} - -.opacity-50 { - opacity: 0.5 !important; -} - -.opacity-75 { - opacity: 0.75 !important; -} - -.opacity-100 { - opacity: 1 !important; -} - -.overflow-auto { - overflow: auto !important; -} - -.overflow-hidden { - overflow: hidden !important; -} - -.overflow-visible { - overflow: visible !important; -} - -.overflow-scroll { - overflow: scroll !important; -} - -.overflow-x-auto { - overflow-x: auto !important; -} - -.overflow-x-hidden { - overflow-x: hidden !important; -} - -.overflow-x-visible { - overflow-x: visible !important; -} - -.overflow-x-scroll { - overflow-x: scroll !important; -} - -.overflow-y-auto { - overflow-y: auto !important; -} - -.overflow-y-hidden { - overflow-y: hidden !important; -} - -.overflow-y-visible { - overflow-y: visible !important; -} - -.overflow-y-scroll { - overflow-y: scroll !important; -} - -.d-inline { - display: inline !important; -} - -.d-inline-block { - display: inline-block !important; -} - -.d-block { - display: block !important; -} - -.d-grid { - display: grid !important; -} - -.d-inline-grid { - display: inline-grid !important; -} - -.d-table { - display: table !important; -} - -.d-table-row { - display: table-row !important; -} - -.d-table-cell { - display: table-cell !important; -} - -.d-flex { - display: flex !important; -} - -.d-inline-flex { - display: inline-flex !important; -} - -.d-none { - display: none !important; -} - -.shadow { - box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15) !important; -} - -.shadow-sm { - box-shadow: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075) !important; -} - -.shadow-lg { - box-shadow: 0 1rem 3rem rgba(0, 0, 0, 0.175) !important; -} - -.shadow-none { - box-shadow: none !important; -} - -.focus-ring-primary { - --bs-focus-ring-color: rgba(var(--bs-primary-rgb), var(--bs-focus-ring-opacity)); -} - -.focus-ring-secondary { - --bs-focus-ring-color: rgba(var(--bs-secondary-rgb), var(--bs-focus-ring-opacity)); -} - -.focus-ring-success { - --bs-focus-ring-color: rgba(var(--bs-success-rgb), var(--bs-focus-ring-opacity)); -} - -.focus-ring-info { - --bs-focus-ring-color: rgba(var(--bs-info-rgb), var(--bs-focus-ring-opacity)); -} - -.focus-ring-warning { - --bs-focus-ring-color: rgba(var(--bs-warning-rgb), var(--bs-focus-ring-opacity)); -} - -.focus-ring-danger { - --bs-focus-ring-color: rgba(var(--bs-danger-rgb), var(--bs-focus-ring-opacity)); -} - -.focus-ring-light { - --bs-focus-ring-color: rgba(var(--bs-light-rgb), var(--bs-focus-ring-opacity)); -} - -.focus-ring-dark { - --bs-focus-ring-color: rgba(var(--bs-dark-rgb), var(--bs-focus-ring-opacity)); -} - -.position-static { - position: static !important; -} - -.position-relative { - position: relative !important; -} - -.position-absolute { - position: absolute !important; -} - -.position-fixed { - position: fixed !important; -} - -.position-sticky { - position: -webkit-sticky !important; - position: sticky !important; -} - -.top-0 { - top: 0 !important; -} - -.top-50 { - top: 50% !important; -} - -.top-100 { - top: 100% !important; -} - -.bottom-0 { - bottom: 0 !important; -} - -.bottom-50 { - bottom: 50% !important; -} - -.bottom-100 { - bottom: 100% !important; -} - -.start-0 { - left: 0 !important; -} - -.start-50 { - left: 50% !important; -} - -.start-100 { - left: 100% !important; -} - -.end-0 { - right: 0 !important; -} - -.end-50 { - right: 50% !important; -} - -.end-100 { - right: 100% !important; -} - -.translate-middle { - transform: translate(-50%, -50%) !important; -} - -.translate-middle-x { - transform: translateX(-50%) !important; -} - -.translate-middle-y { - transform: translateY(-50%) !important; -} - -.border { - border: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important; -} - -.border-0 { - border: 0 !important; -} - -.border-top { - border-top: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important; -} - -.border-top-0 { - border-top: 0 !important; -} - -.border-end { - border-right: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important; -} - -.border-end-0 { - border-right: 0 !important; -} - -.border-bottom { - border-bottom: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important; -} - -.border-bottom-0 { - border-bottom: 0 !important; -} - -.border-start { - border-left: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important; -} - -.border-start-0 { - border-left: 0 !important; -} - -.border-primary { - --bs-border-opacity: 1; - border-color: rgba(var(--bs-primary-rgb), var(--bs-border-opacity)) !important; -} - -.border-secondary { - --bs-border-opacity: 1; - border-color: rgba(var(--bs-secondary-rgb), var(--bs-border-opacity)) !important; -} - -.border-success { - --bs-border-opacity: 1; - border-color: rgba(var(--bs-success-rgb), var(--bs-border-opacity)) !important; -} - -.border-info { - --bs-border-opacity: 1; - border-color: rgba(var(--bs-info-rgb), var(--bs-border-opacity)) !important; -} - -.border-warning { - --bs-border-opacity: 1; - border-color: rgba(var(--bs-warning-rgb), var(--bs-border-opacity)) !important; -} - -.border-danger { - --bs-border-opacity: 1; - border-color: rgba(var(--bs-danger-rgb), var(--bs-border-opacity)) !important; -} - -.border-light { - --bs-border-opacity: 1; - border-color: rgba(var(--bs-light-rgb), var(--bs-border-opacity)) !important; -} - -.border-dark { - --bs-border-opacity: 1; - border-color: rgba(var(--bs-dark-rgb), var(--bs-border-opacity)) !important; -} - -.border-black { - --bs-border-opacity: 1; - border-color: rgba(var(--bs-black-rgb), var(--bs-border-opacity)) !important; -} - -.border-white { - --bs-border-opacity: 1; - border-color: rgba(var(--bs-white-rgb), var(--bs-border-opacity)) !important; -} - -.border-primary-subtle { - border-color: var(--bs-primary-border-subtle) !important; -} - -.border-secondary-subtle { - border-color: var(--bs-secondary-border-subtle) !important; -} - -.border-success-subtle { - border-color: var(--bs-success-border-subtle) !important; -} - -.border-info-subtle { - border-color: var(--bs-info-border-subtle) !important; -} - -.border-warning-subtle { - border-color: var(--bs-warning-border-subtle) !important; -} - -.border-danger-subtle { - border-color: var(--bs-danger-border-subtle) !important; -} - -.border-light-subtle { - border-color: var(--bs-light-border-subtle) !important; -} - -.border-dark-subtle { - border-color: var(--bs-dark-border-subtle) !important; -} - -.border-1 { - border-width: 1px !important; -} - -.border-2 { - border-width: 2px !important; -} - -.border-3 { - border-width: 3px !important; -} - -.border-4 { - border-width: 4px !important; -} - -.border-5 { - border-width: 5px !important; -} - -.border-opacity-10 { - --bs-border-opacity: 0.1; -} - -.border-opacity-25 { - --bs-border-opacity: 0.25; -} - -.border-opacity-50 { - --bs-border-opacity: 0.5; -} - -.border-opacity-75 { - --bs-border-opacity: 0.75; -} - -.border-opacity-100 { - --bs-border-opacity: 1; -} - -.w-25 { - width: 25% !important; -} - -.w-50 { - width: 50% !important; -} - -.w-75 { - width: 75% !important; -} - -.w-100 { - width: 100% !important; -} - -.w-auto { - width: auto !important; -} - -.mw-100 { - max-width: 100% !important; -} - -.vw-100 { - width: 100vw !important; -} - -.min-vw-100 { - min-width: 100vw !important; -} - -.h-25 { - height: 25% !important; -} - -.h-50 { - height: 50% !important; -} - -.h-75 { - height: 75% !important; -} - -.h-100 { - height: 100% !important; -} - -.h-auto { - height: auto !important; -} - -.mh-100 { - max-height: 100% !important; -} - -.vh-100 { - height: 100vh !important; -} - -.min-vh-100 { - min-height: 100vh !important; -} - -.flex-fill { - flex: 1 1 auto !important; -} - -.flex-row { - flex-direction: row !important; -} - -.flex-column { - flex-direction: column !important; -} - -.flex-row-reverse { - flex-direction: row-reverse !important; -} - -.flex-column-reverse { - flex-direction: column-reverse !important; -} - -.flex-grow-0 { - flex-grow: 0 !important; -} - -.flex-grow-1 { - flex-grow: 1 !important; -} - -.flex-shrink-0 { - flex-shrink: 0 !important; -} - -.flex-shrink-1 { - flex-shrink: 1 !important; -} - -.flex-wrap { - flex-wrap: wrap !important; -} - -.flex-nowrap { - flex-wrap: nowrap !important; -} - -.flex-wrap-reverse { - flex-wrap: wrap-reverse !important; -} - -.justify-content-start { - justify-content: flex-start !important; -} - -.justify-content-end { - justify-content: flex-end !important; -} - -.justify-content-center { - justify-content: center !important; -} - -.justify-content-between { - justify-content: space-between !important; -} - -.justify-content-around { - justify-content: space-around !important; -} - -.justify-content-evenly { - justify-content: space-evenly !important; -} - -.align-items-start { - align-items: flex-start !important; -} - -.align-items-end { - align-items: flex-end !important; -} - -.align-items-center { - align-items: center !important; -} - -.align-items-baseline { - align-items: baseline !important; -} - -.align-items-stretch { - align-items: stretch !important; -} - -.align-content-start { - align-content: flex-start !important; -} - -.align-content-end { - align-content: flex-end !important; -} - -.align-content-center { - align-content: center !important; -} - -.align-content-between { - align-content: space-between !important; -} - -.align-content-around { - align-content: space-around !important; -} - -.align-content-stretch { - align-content: stretch !important; -} - -.align-self-auto { - align-self: auto !important; -} - -.align-self-start { - align-self: flex-start !important; -} - -.align-self-end { - align-self: flex-end !important; -} - -.align-self-center { - align-self: center !important; -} - -.align-self-baseline { - align-self: baseline !important; -} - -.align-self-stretch { - align-self: stretch !important; -} - -.order-first { - order: -1 !important; -} - -.order-0 { - order: 0 !important; -} - -.order-1 { - order: 1 !important; -} - -.order-2 { - order: 2 !important; -} - -.order-3 { - order: 3 !important; -} - -.order-4 { - order: 4 !important; -} - -.order-5 { - order: 5 !important; -} - -.order-last { - order: 6 !important; -} - -.m-0 { - margin: 0 !important; -} - -.m-1 { - margin: 0.25rem !important; -} - -.m-2 { - margin: 0.5rem !important; -} - -.m-3 { - margin: 1rem !important; -} - -.m-4 { - margin: 1.5rem !important; -} - -.m-5 { - margin: 3rem !important; -} - -.m-auto { - margin: auto !important; -} - -.mx-0 { - margin-right: 0 !important; - margin-left: 0 !important; -} - -.mx-1 { - margin-right: 0.25rem !important; - margin-left: 0.25rem !important; -} - -.mx-2 { - margin-right: 0.5rem !important; - margin-left: 0.5rem !important; -} - -.mx-3 { - margin-right: 1rem !important; - margin-left: 1rem !important; -} - -.mx-4 { - margin-right: 1.5rem !important; - margin-left: 1.5rem !important; -} - -.mx-5 { - margin-right: 3rem !important; - margin-left: 3rem !important; -} - -.mx-auto { - margin-right: auto !important; - margin-left: auto !important; -} - -.my-0 { - margin-top: 0 !important; - margin-bottom: 0 !important; -} - -.my-1 { - margin-top: 0.25rem !important; - margin-bottom: 0.25rem !important; -} - -.my-2 { - margin-top: 0.5rem !important; - margin-bottom: 0.5rem !important; -} - -.my-3 { - margin-top: 1rem !important; - margin-bottom: 1rem !important; -} - -.my-4 { - margin-top: 1.5rem !important; - margin-bottom: 1.5rem !important; -} - -.my-5 { - margin-top: 3rem !important; - margin-bottom: 3rem !important; -} - -.my-auto { - margin-top: auto !important; - margin-bottom: auto !important; -} - -.mt-0 { - margin-top: 0 !important; -} - -.mt-1 { - margin-top: 0.25rem !important; -} - -.mt-2 { - margin-top: 0.5rem !important; -} - -.mt-3 { - margin-top: 1rem !important; -} - -.mt-4 { - margin-top: 1.5rem !important; -} - -.mt-5 { - margin-top: 3rem !important; -} - -.mt-auto { - margin-top: auto !important; -} - -.me-0 { - margin-right: 0 !important; -} - -.me-1 { - margin-right: 0.25rem !important; -} - -.me-2 { - margin-right: 0.5rem !important; -} - -.me-3 { - margin-right: 1rem !important; -} - -.me-4 { - margin-right: 1.5rem !important; -} - -.me-5 { - margin-right: 3rem !important; -} - -.me-auto { - margin-right: auto !important; -} - -.mb-0 { - margin-bottom: 0 !important; -} - -.mb-1 { - margin-bottom: 0.25rem !important; -} - -.mb-2 { - margin-bottom: 0.5rem !important; -} - -.mb-3 { - margin-bottom: 1rem !important; -} - -.mb-4 { - margin-bottom: 1.5rem !important; -} - -.mb-5 { - margin-bottom: 3rem !important; -} - -.mb-auto { - margin-bottom: auto !important; -} - -.ms-0 { - margin-left: 0 !important; -} - -.ms-1 { - margin-left: 0.25rem !important; -} - -.ms-2 { - margin-left: 0.5rem !important; -} - -.ms-3 { - margin-left: 1rem !important; -} - -.ms-4 { - margin-left: 1.5rem !important; -} - -.ms-5 { - margin-left: 3rem !important; -} - -.ms-auto { - margin-left: auto !important; -} - -.p-0 { - padding: 0 !important; -} - -.p-1 { - padding: 0.25rem !important; -} - -.p-2 { - padding: 0.5rem !important; -} - -.p-3 { - padding: 1rem !important; -} - -.p-4 { - padding: 1.5rem !important; -} - -.p-5 { - padding: 3rem !important; -} - -.px-0 { - padding-right: 0 !important; - padding-left: 0 !important; -} - -.px-1 { - padding-right: 0.25rem !important; - padding-left: 0.25rem !important; -} - -.px-2 { - padding-right: 0.5rem !important; - padding-left: 0.5rem !important; -} - -.px-3 { - padding-right: 1rem !important; - padding-left: 1rem !important; -} - -.px-4 { - padding-right: 1.5rem !important; - padding-left: 1.5rem !important; -} - -.px-5 { - padding-right: 3rem !important; - padding-left: 3rem !important; -} - -.py-0 { - padding-top: 0 !important; - padding-bottom: 0 !important; -} - -.py-1 { - padding-top: 0.25rem !important; - padding-bottom: 0.25rem !important; -} - -.py-2 { - padding-top: 0.5rem !important; - padding-bottom: 0.5rem !important; -} - -.py-3 { - padding-top: 1rem !important; - padding-bottom: 1rem !important; -} - -.py-4 { - padding-top: 1.5rem !important; - padding-bottom: 1.5rem !important; -} - -.py-5 { - padding-top: 3rem !important; - padding-bottom: 3rem !important; -} - -.pt-0 { - padding-top: 0 !important; -} - -.pt-1 { - padding-top: 0.25rem !important; -} - -.pt-2 { - padding-top: 0.5rem !important; -} - -.pt-3 { - padding-top: 1rem !important; -} - -.pt-4 { - padding-top: 1.5rem !important; -} - -.pt-5 { - padding-top: 3rem !important; -} - -.pe-0 { - padding-right: 0 !important; -} - -.pe-1 { - padding-right: 0.25rem !important; -} - -.pe-2 { - padding-right: 0.5rem !important; -} - -.pe-3 { - padding-right: 1rem !important; -} - -.pe-4 { - padding-right: 1.5rem !important; -} - -.pe-5 { - padding-right: 3rem !important; -} - -.pb-0 { - padding-bottom: 0 !important; -} - -.pb-1 { - padding-bottom: 0.25rem !important; -} - -.pb-2 { - padding-bottom: 0.5rem !important; -} - -.pb-3 { - padding-bottom: 1rem !important; -} - -.pb-4 { - padding-bottom: 1.5rem !important; -} - -.pb-5 { - padding-bottom: 3rem !important; -} - -.ps-0 { - padding-left: 0 !important; -} - -.ps-1 { - padding-left: 0.25rem !important; -} - -.ps-2 { - padding-left: 0.5rem !important; -} - -.ps-3 { - padding-left: 1rem !important; -} - -.ps-4 { - padding-left: 1.5rem !important; -} - -.ps-5 { - padding-left: 3rem !important; -} - -.gap-0 { - gap: 0 !important; -} - -.gap-1 { - gap: 0.25rem !important; -} - -.gap-2 { - gap: 0.5rem !important; -} - -.gap-3 { - gap: 1rem !important; -} - -.gap-4 { - gap: 1.5rem !important; -} - -.gap-5 { - gap: 3rem !important; -} - -.row-gap-0 { - row-gap: 0 !important; -} - -.row-gap-1 { - row-gap: 0.25rem !important; -} - -.row-gap-2 { - row-gap: 0.5rem !important; -} - -.row-gap-3 { - row-gap: 1rem !important; -} - -.row-gap-4 { - row-gap: 1.5rem !important; -} - -.row-gap-5 { - row-gap: 3rem !important; -} - -.column-gap-0 { - -moz-column-gap: 0 !important; - column-gap: 0 !important; -} - -.column-gap-1 { - -moz-column-gap: 0.25rem !important; - column-gap: 0.25rem !important; -} - -.column-gap-2 { - -moz-column-gap: 0.5rem !important; - column-gap: 0.5rem !important; -} - -.column-gap-3 { - -moz-column-gap: 1rem !important; - column-gap: 1rem !important; -} - -.column-gap-4 { - -moz-column-gap: 1.5rem !important; - column-gap: 1.5rem !important; -} - -.column-gap-5 { - -moz-column-gap: 3rem !important; - column-gap: 3rem !important; -} - -.font-monospace { - font-family: var(--bs-font-monospace) !important; -} - -.fs-1 { - font-size: calc(1.375rem + 1.5vw) !important; -} - -.fs-2 { - font-size: calc(1.325rem + 0.9vw) !important; -} - -.fs-3 { - font-size: calc(1.3rem + 0.6vw) !important; -} - -.fs-4 { - font-size: calc(1.275rem + 0.3vw) !important; -} - -.fs-5 { - font-size: 1.25rem !important; -} - -.fs-6 { - font-size: 1rem !important; -} - -.fst-italic { - font-style: italic !important; -} - -.fst-normal { - font-style: normal !important; -} - -.fw-lighter { - font-weight: lighter !important; -} - -.fw-light { - font-weight: 300 !important; -} - -.fw-normal { - font-weight: 400 !important; -} - -.fw-medium { - font-weight: 500 !important; -} - -.fw-semibold { - font-weight: 600 !important; -} - -.fw-bold { - font-weight: 700 !important; -} - -.fw-bolder { - font-weight: bolder !important; -} - -.lh-1 { - line-height: 1 !important; -} - -.lh-sm { - line-height: 1.25 !important; -} - -.lh-base { - line-height: 1.5 !important; -} - -.lh-lg { - line-height: 2 !important; -} - -.text-start { - text-align: left !important; -} - -.text-end { - text-align: right !important; -} - -.text-center { - text-align: center !important; -} - -.text-decoration-none { - text-decoration: none !important; -} - -.text-decoration-underline { - text-decoration: underline !important; -} - -.text-decoration-line-through { - text-decoration: line-through !important; -} - -.text-lowercase { - text-transform: lowercase !important; -} - -.text-uppercase { - text-transform: uppercase !important; -} - -.text-capitalize { - text-transform: capitalize !important; -} - -.text-wrap { - white-space: normal !important; -} - -.text-nowrap { - white-space: nowrap !important; -} - -/* rtl:begin:remove */ -.text-break { - word-wrap: break-word !important; - word-break: break-word !important; -} - -/* rtl:end:remove */ -.text-primary { - --bs-text-opacity: 1; - color: rgba(var(--bs-primary-rgb), var(--bs-text-opacity)) !important; -} - -.text-secondary { - --bs-text-opacity: 1; - color: rgba(var(--bs-secondary-rgb), var(--bs-text-opacity)) !important; -} - -.text-success { - --bs-text-opacity: 1; - color: rgba(var(--bs-success-rgb), var(--bs-text-opacity)) !important; -} - -.text-info { - --bs-text-opacity: 1; - color: rgba(var(--bs-info-rgb), var(--bs-text-opacity)) !important; -} - -.text-warning { - --bs-text-opacity: 1; - color: rgba(var(--bs-warning-rgb), var(--bs-text-opacity)) !important; -} - -.text-danger { - --bs-text-opacity: 1; - color: rgba(var(--bs-danger-rgb), var(--bs-text-opacity)) !important; -} - -.text-light { - --bs-text-opacity: 1; - color: rgba(var(--bs-light-rgb), var(--bs-text-opacity)) !important; -} - -.text-dark { - --bs-text-opacity: 1; - color: rgba(var(--bs-dark-rgb), var(--bs-text-opacity)) !important; -} - -.text-black { - --bs-text-opacity: 1; - color: rgba(var(--bs-black-rgb), var(--bs-text-opacity)) !important; -} - -.text-white { - --bs-text-opacity: 1; - color: rgba(var(--bs-white-rgb), var(--bs-text-opacity)) !important; -} - -.text-body { - --bs-text-opacity: 1; - color: rgba(var(--bs-body-color-rgb), var(--bs-text-opacity)) !important; -} - -.text-muted { - --bs-text-opacity: 1; - color: var(--bs-secondary-color) !important; -} - -.text-black-50 { - --bs-text-opacity: 1; - color: rgba(0, 0, 0, 0.5) !important; -} - -.text-white-50 { - --bs-text-opacity: 1; - color: rgba(255, 255, 255, 0.5) !important; -} - -.text-body-secondary { - --bs-text-opacity: 1; - color: var(--bs-secondary-color) !important; -} - -.text-body-tertiary { - --bs-text-opacity: 1; - color: var(--bs-tertiary-color) !important; -} - -.text-body-emphasis { - --bs-text-opacity: 1; - color: var(--bs-emphasis-color) !important; -} - -.text-reset { - --bs-text-opacity: 1; - color: inherit !important; -} - -.text-opacity-25 { - --bs-text-opacity: 0.25; -} - -.text-opacity-50 { - --bs-text-opacity: 0.5; -} - -.text-opacity-75 { - --bs-text-opacity: 0.75; -} - -.text-opacity-100 { - --bs-text-opacity: 1; -} - -.text-primary-emphasis { - color: var(--bs-primary-text-emphasis) !important; -} - -.text-secondary-emphasis { - color: var(--bs-secondary-text-emphasis) !important; -} - -.text-success-emphasis { - color: var(--bs-success-text-emphasis) !important; -} - -.text-info-emphasis { - color: var(--bs-info-text-emphasis) !important; -} - -.text-warning-emphasis { - color: var(--bs-warning-text-emphasis) !important; -} - -.text-danger-emphasis { - color: var(--bs-danger-text-emphasis) !important; -} - -.text-light-emphasis { - color: var(--bs-light-text-emphasis) !important; -} - -.text-dark-emphasis { - color: var(--bs-dark-text-emphasis) !important; -} - -.link-opacity-10 { - --bs-link-opacity: 0.1; -} - -.link-opacity-10-hover:hover { - --bs-link-opacity: 0.1; -} - -.link-opacity-25 { - --bs-link-opacity: 0.25; -} - -.link-opacity-25-hover:hover { - --bs-link-opacity: 0.25; -} - -.link-opacity-50 { - --bs-link-opacity: 0.5; -} - -.link-opacity-50-hover:hover { - --bs-link-opacity: 0.5; -} - -.link-opacity-75 { - --bs-link-opacity: 0.75; -} - -.link-opacity-75-hover:hover { - --bs-link-opacity: 0.75; -} - -.link-opacity-100 { - --bs-link-opacity: 1; -} - -.link-opacity-100-hover:hover { - --bs-link-opacity: 1; -} - -.link-offset-1 { - text-underline-offset: 0.125em !important; -} - -.link-offset-1-hover:hover { - text-underline-offset: 0.125em !important; -} - -.link-offset-2 { - text-underline-offset: 0.25em !important; -} - -.link-offset-2-hover:hover { - text-underline-offset: 0.25em !important; -} - -.link-offset-3 { - text-underline-offset: 0.375em !important; -} - -.link-offset-3-hover:hover { - text-underline-offset: 0.375em !important; -} - -.link-underline-primary { - --bs-link-underline-opacity: 1; - -webkit-text-decoration-color: rgba(var(--bs-primary-rgb), var(--bs-link-underline-opacity)) !important; - text-decoration-color: rgba(var(--bs-primary-rgb), var(--bs-link-underline-opacity)) !important; -} - -.link-underline-secondary { - --bs-link-underline-opacity: 1; - -webkit-text-decoration-color: rgba(var(--bs-secondary-rgb), var(--bs-link-underline-opacity)) !important; - text-decoration-color: rgba(var(--bs-secondary-rgb), var(--bs-link-underline-opacity)) !important; -} - -.link-underline-success { - --bs-link-underline-opacity: 1; - -webkit-text-decoration-color: rgba(var(--bs-success-rgb), var(--bs-link-underline-opacity)) !important; - text-decoration-color: rgba(var(--bs-success-rgb), var(--bs-link-underline-opacity)) !important; -} - -.link-underline-info { - --bs-link-underline-opacity: 1; - -webkit-text-decoration-color: rgba(var(--bs-info-rgb), var(--bs-link-underline-opacity)) !important; - text-decoration-color: rgba(var(--bs-info-rgb), var(--bs-link-underline-opacity)) !important; -} - -.link-underline-warning { - --bs-link-underline-opacity: 1; - -webkit-text-decoration-color: rgba(var(--bs-warning-rgb), var(--bs-link-underline-opacity)) !important; - text-decoration-color: rgba(var(--bs-warning-rgb), var(--bs-link-underline-opacity)) !important; -} - -.link-underline-danger { - --bs-link-underline-opacity: 1; - -webkit-text-decoration-color: rgba(var(--bs-danger-rgb), var(--bs-link-underline-opacity)) !important; - text-decoration-color: rgba(var(--bs-danger-rgb), var(--bs-link-underline-opacity)) !important; -} - -.link-underline-light { - --bs-link-underline-opacity: 1; - -webkit-text-decoration-color: rgba(var(--bs-light-rgb), var(--bs-link-underline-opacity)) !important; - text-decoration-color: rgba(var(--bs-light-rgb), var(--bs-link-underline-opacity)) !important; -} - -.link-underline-dark { - --bs-link-underline-opacity: 1; - -webkit-text-decoration-color: rgba(var(--bs-dark-rgb), var(--bs-link-underline-opacity)) !important; - text-decoration-color: rgba(var(--bs-dark-rgb), var(--bs-link-underline-opacity)) !important; -} - -.link-underline { - --bs-link-underline-opacity: 1; - -webkit-text-decoration-color: rgba(var(--bs-link-color-rgb), var(--bs-link-underline-opacity, 1)) !important; - text-decoration-color: rgba(var(--bs-link-color-rgb), var(--bs-link-underline-opacity, 1)) !important; -} - -.link-underline-opacity-0 { - --bs-link-underline-opacity: 0; -} - -.link-underline-opacity-0-hover:hover { - --bs-link-underline-opacity: 0; -} - -.link-underline-opacity-10 { - --bs-link-underline-opacity: 0.1; -} - -.link-underline-opacity-10-hover:hover { - --bs-link-underline-opacity: 0.1; -} - -.link-underline-opacity-25 { - --bs-link-underline-opacity: 0.25; -} - -.link-underline-opacity-25-hover:hover { - --bs-link-underline-opacity: 0.25; -} - -.link-underline-opacity-50 { - --bs-link-underline-opacity: 0.5; -} - -.link-underline-opacity-50-hover:hover { - --bs-link-underline-opacity: 0.5; -} - -.link-underline-opacity-75 { - --bs-link-underline-opacity: 0.75; -} - -.link-underline-opacity-75-hover:hover { - --bs-link-underline-opacity: 0.75; -} - -.link-underline-opacity-100 { - --bs-link-underline-opacity: 1; -} - -.link-underline-opacity-100-hover:hover { - --bs-link-underline-opacity: 1; -} - -.bg-primary { - --bs-bg-opacity: 1; - background-color: rgba(var(--bs-primary-rgb), var(--bs-bg-opacity)) !important; -} - -.bg-secondary { - --bs-bg-opacity: 1; - background-color: rgba(var(--bs-secondary-rgb), var(--bs-bg-opacity)) !important; -} - -.bg-success { - --bs-bg-opacity: 1; - background-color: rgba(var(--bs-success-rgb), var(--bs-bg-opacity)) !important; -} - -.bg-info { - --bs-bg-opacity: 1; - background-color: rgba(var(--bs-info-rgb), var(--bs-bg-opacity)) !important; -} - -.bg-warning { - --bs-bg-opacity: 1; - background-color: rgba(var(--bs-warning-rgb), var(--bs-bg-opacity)) !important; -} - -.bg-danger { - --bs-bg-opacity: 1; - background-color: rgba(var(--bs-danger-rgb), var(--bs-bg-opacity)) !important; -} - -.bg-light { - --bs-bg-opacity: 1; - background-color: rgba(var(--bs-light-rgb), var(--bs-bg-opacity)) !important; -} - -.bg-dark { - --bs-bg-opacity: 1; - background-color: rgba(var(--bs-dark-rgb), var(--bs-bg-opacity)) !important; -} - -.bg-black { - --bs-bg-opacity: 1; - background-color: rgba(var(--bs-black-rgb), var(--bs-bg-opacity)) !important; -} - -.bg-white { - --bs-bg-opacity: 1; - background-color: rgba(var(--bs-white-rgb), var(--bs-bg-opacity)) !important; -} - -.bg-body { - --bs-bg-opacity: 1; - background-color: rgba(var(--bs-body-bg-rgb), var(--bs-bg-opacity)) !important; -} - -.bg-transparent { - --bs-bg-opacity: 1; - background-color: transparent !important; -} - -.bg-body-secondary { - --bs-bg-opacity: 1; - background-color: rgba(var(--bs-secondary-bg-rgb), var(--bs-bg-opacity)) !important; -} - -.bg-body-tertiary { - --bs-bg-opacity: 1; - background-color: rgba(var(--bs-tertiary-bg-rgb), var(--bs-bg-opacity)) !important; -} - -.bg-opacity-10 { - --bs-bg-opacity: 0.1; -} - -.bg-opacity-25 { - --bs-bg-opacity: 0.25; -} - -.bg-opacity-50 { - --bs-bg-opacity: 0.5; -} - -.bg-opacity-75 { - --bs-bg-opacity: 0.75; -} - -.bg-opacity-100 { - --bs-bg-opacity: 1; -} - -.bg-primary-subtle { - background-color: var(--bs-primary-bg-subtle) !important; -} - -.bg-secondary-subtle { - background-color: var(--bs-secondary-bg-subtle) !important; -} - -.bg-success-subtle { - background-color: var(--bs-success-bg-subtle) !important; -} - -.bg-info-subtle { - background-color: var(--bs-info-bg-subtle) !important; -} - -.bg-warning-subtle { - background-color: var(--bs-warning-bg-subtle) !important; -} - -.bg-danger-subtle { - background-color: var(--bs-danger-bg-subtle) !important; -} - -.bg-light-subtle { - background-color: var(--bs-light-bg-subtle) !important; -} - -.bg-dark-subtle { - background-color: var(--bs-dark-bg-subtle) !important; -} - -.bg-gradient { - background-image: var(--bs-gradient) !important; -} - -.user-select-all { - -webkit-user-select: all !important; - -moz-user-select: all !important; - user-select: all !important; -} - -.user-select-auto { - -webkit-user-select: auto !important; - -moz-user-select: auto !important; - user-select: auto !important; -} - -.user-select-none { - -webkit-user-select: none !important; - -moz-user-select: none !important; - user-select: none !important; -} - -.pe-none { - pointer-events: none !important; -} - -.pe-auto { - pointer-events: auto !important; -} - -.rounded { - border-radius: var(--bs-border-radius) !important; -} - -.rounded-0 { - border-radius: 0 !important; -} - -.rounded-1 { - border-radius: var(--bs-border-radius-sm) !important; -} - -.rounded-2 { - border-radius: var(--bs-border-radius) !important; -} - -.rounded-3 { - border-radius: var(--bs-border-radius-lg) !important; -} - -.rounded-4 { - border-radius: var(--bs-border-radius-xl) !important; -} - -.rounded-5 { - border-radius: var(--bs-border-radius-xxl) !important; -} - -.rounded-circle { - border-radius: 50% !important; -} - -.rounded-pill { - border-radius: var(--bs-border-radius-pill) !important; -} - -.rounded-top { - border-top-left-radius: var(--bs-border-radius) !important; - border-top-right-radius: var(--bs-border-radius) !important; -} - -.rounded-top-0 { - border-top-left-radius: 0 !important; - border-top-right-radius: 0 !important; -} - -.rounded-top-1 { - border-top-left-radius: var(--bs-border-radius-sm) !important; - border-top-right-radius: var(--bs-border-radius-sm) !important; -} - -.rounded-top-2 { - border-top-left-radius: var(--bs-border-radius) !important; - border-top-right-radius: var(--bs-border-radius) !important; -} - -.rounded-top-3 { - border-top-left-radius: var(--bs-border-radius-lg) !important; - border-top-right-radius: var(--bs-border-radius-lg) !important; -} - -.rounded-top-4 { - border-top-left-radius: var(--bs-border-radius-xl) !important; - border-top-right-radius: var(--bs-border-radius-xl) !important; -} - -.rounded-top-5 { - border-top-left-radius: var(--bs-border-radius-xxl) !important; - border-top-right-radius: var(--bs-border-radius-xxl) !important; -} - -.rounded-top-circle { - border-top-left-radius: 50% !important; - border-top-right-radius: 50% !important; -} - -.rounded-top-pill { - border-top-left-radius: var(--bs-border-radius-pill) !important; - border-top-right-radius: var(--bs-border-radius-pill) !important; -} - -.rounded-end { - border-top-right-radius: var(--bs-border-radius) !important; - border-bottom-right-radius: var(--bs-border-radius) !important; -} - -.rounded-end-0 { - border-top-right-radius: 0 !important; - border-bottom-right-radius: 0 !important; -} - -.rounded-end-1 { - border-top-right-radius: var(--bs-border-radius-sm) !important; - border-bottom-right-radius: var(--bs-border-radius-sm) !important; -} - -.rounded-end-2 { - border-top-right-radius: var(--bs-border-radius) !important; - border-bottom-right-radius: var(--bs-border-radius) !important; -} - -.rounded-end-3 { - border-top-right-radius: var(--bs-border-radius-lg) !important; - border-bottom-right-radius: var(--bs-border-radius-lg) !important; -} - -.rounded-end-4 { - border-top-right-radius: var(--bs-border-radius-xl) !important; - border-bottom-right-radius: var(--bs-border-radius-xl) !important; -} - -.rounded-end-5 { - border-top-right-radius: var(--bs-border-radius-xxl) !important; - border-bottom-right-radius: var(--bs-border-radius-xxl) !important; -} - -.rounded-end-circle { - border-top-right-radius: 50% !important; - border-bottom-right-radius: 50% !important; -} - -.rounded-end-pill { - border-top-right-radius: var(--bs-border-radius-pill) !important; - border-bottom-right-radius: var(--bs-border-radius-pill) !important; -} - -.rounded-bottom { - border-bottom-right-radius: var(--bs-border-radius) !important; - border-bottom-left-radius: var(--bs-border-radius) !important; -} - -.rounded-bottom-0 { - border-bottom-right-radius: 0 !important; - border-bottom-left-radius: 0 !important; -} - -.rounded-bottom-1 { - border-bottom-right-radius: var(--bs-border-radius-sm) !important; - border-bottom-left-radius: var(--bs-border-radius-sm) !important; -} - -.rounded-bottom-2 { - border-bottom-right-radius: var(--bs-border-radius) !important; - border-bottom-left-radius: var(--bs-border-radius) !important; -} - -.rounded-bottom-3 { - border-bottom-right-radius: var(--bs-border-radius-lg) !important; - border-bottom-left-radius: var(--bs-border-radius-lg) !important; -} - -.rounded-bottom-4 { - border-bottom-right-radius: var(--bs-border-radius-xl) !important; - border-bottom-left-radius: var(--bs-border-radius-xl) !important; -} - -.rounded-bottom-5 { - border-bottom-right-radius: var(--bs-border-radius-xxl) !important; - border-bottom-left-radius: var(--bs-border-radius-xxl) !important; -} - -.rounded-bottom-circle { - border-bottom-right-radius: 50% !important; - border-bottom-left-radius: 50% !important; -} - -.rounded-bottom-pill { - border-bottom-right-radius: var(--bs-border-radius-pill) !important; - border-bottom-left-radius: var(--bs-border-radius-pill) !important; -} - -.rounded-start { - border-bottom-left-radius: var(--bs-border-radius) !important; - border-top-left-radius: var(--bs-border-radius) !important; -} - -.rounded-start-0 { - border-bottom-left-radius: 0 !important; - border-top-left-radius: 0 !important; -} - -.rounded-start-1 { - border-bottom-left-radius: var(--bs-border-radius-sm) !important; - border-top-left-radius: var(--bs-border-radius-sm) !important; -} - -.rounded-start-2 { - border-bottom-left-radius: var(--bs-border-radius) !important; - border-top-left-radius: var(--bs-border-radius) !important; -} - -.rounded-start-3 { - border-bottom-left-radius: var(--bs-border-radius-lg) !important; - border-top-left-radius: var(--bs-border-radius-lg) !important; -} - -.rounded-start-4 { - border-bottom-left-radius: var(--bs-border-radius-xl) !important; - border-top-left-radius: var(--bs-border-radius-xl) !important; -} - -.rounded-start-5 { - border-bottom-left-radius: var(--bs-border-radius-xxl) !important; - border-top-left-radius: var(--bs-border-radius-xxl) !important; -} - -.rounded-start-circle { - border-bottom-left-radius: 50% !important; - border-top-left-radius: 50% !important; -} - -.rounded-start-pill { - border-bottom-left-radius: var(--bs-border-radius-pill) !important; - border-top-left-radius: var(--bs-border-radius-pill) !important; -} - -.visible { - visibility: visible !important; -} - -.invisible { - visibility: hidden !important; -} - -.z-n1 { - z-index: -1 !important; -} - -.z-0 { - z-index: 0 !important; -} - -.z-1 { - z-index: 1 !important; -} - -.z-2 { - z-index: 2 !important; -} - -.z-3 { - z-index: 3 !important; -} - -@media (min-width: 576px) { - .float-sm-start { - float: left !important; - } - .float-sm-end { - float: right !important; - } - .float-sm-none { - float: none !important; - } - .object-fit-sm-contain { - -o-object-fit: contain !important; - object-fit: contain !important; - } - .object-fit-sm-cover { - -o-object-fit: cover !important; - object-fit: cover !important; - } - .object-fit-sm-fill { - -o-object-fit: fill !important; - object-fit: fill !important; - } - .object-fit-sm-scale { - -o-object-fit: scale-down !important; - object-fit: scale-down !important; - } - .object-fit-sm-none { - -o-object-fit: none !important; - object-fit: none !important; - } - .d-sm-inline { - display: inline !important; - } - .d-sm-inline-block { - display: inline-block !important; - } - .d-sm-block { - display: block !important; - } - .d-sm-grid { - display: grid !important; - } - .d-sm-inline-grid { - display: inline-grid !important; - } - .d-sm-table { - display: table !important; - } - .d-sm-table-row { - display: table-row !important; - } - .d-sm-table-cell { - display: table-cell !important; - } - .d-sm-flex { - display: flex !important; - } - .d-sm-inline-flex { - display: inline-flex !important; - } - .d-sm-none { - display: none !important; - } - .flex-sm-fill { - flex: 1 1 auto !important; - } - .flex-sm-row { - flex-direction: row !important; - } - .flex-sm-column { - flex-direction: column !important; - } - .flex-sm-row-reverse { - flex-direction: row-reverse !important; - } - .flex-sm-column-reverse { - flex-direction: column-reverse !important; - } - .flex-sm-grow-0 { - flex-grow: 0 !important; - } - .flex-sm-grow-1 { - flex-grow: 1 !important; - } - .flex-sm-shrink-0 { - flex-shrink: 0 !important; - } - .flex-sm-shrink-1 { - flex-shrink: 1 !important; - } - .flex-sm-wrap { - flex-wrap: wrap !important; - } - .flex-sm-nowrap { - flex-wrap: nowrap !important; - } - .flex-sm-wrap-reverse { - flex-wrap: wrap-reverse !important; - } - .justify-content-sm-start { - justify-content: flex-start !important; - } - .justify-content-sm-end { - justify-content: flex-end !important; - } - .justify-content-sm-center { - justify-content: center !important; - } - .justify-content-sm-between { - justify-content: space-between !important; - } - .justify-content-sm-around { - justify-content: space-around !important; - } - .justify-content-sm-evenly { - justify-content: space-evenly !important; - } - .align-items-sm-start { - align-items: flex-start !important; - } - .align-items-sm-end { - align-items: flex-end !important; - } - .align-items-sm-center { - align-items: center !important; - } - .align-items-sm-baseline { - align-items: baseline !important; - } - .align-items-sm-stretch { - align-items: stretch !important; - } - .align-content-sm-start { - align-content: flex-start !important; - } - .align-content-sm-end { - align-content: flex-end !important; - } - .align-content-sm-center { - align-content: center !important; - } - .align-content-sm-between { - align-content: space-between !important; - } - .align-content-sm-around { - align-content: space-around !important; - } - .align-content-sm-stretch { - align-content: stretch !important; - } - .align-self-sm-auto { - align-self: auto !important; - } - .align-self-sm-start { - align-self: flex-start !important; - } - .align-self-sm-end { - align-self: flex-end !important; - } - .align-self-sm-center { - align-self: center !important; - } - .align-self-sm-baseline { - align-self: baseline !important; - } - .align-self-sm-stretch { - align-self: stretch !important; - } - .order-sm-first { - order: -1 !important; - } - .order-sm-0 { - order: 0 !important; - } - .order-sm-1 { - order: 1 !important; - } - .order-sm-2 { - order: 2 !important; - } - .order-sm-3 { - order: 3 !important; - } - .order-sm-4 { - order: 4 !important; - } - .order-sm-5 { - order: 5 !important; - } - .order-sm-last { - order: 6 !important; - } - .m-sm-0 { - margin: 0 !important; - } - .m-sm-1 { - margin: 0.25rem !important; - } - .m-sm-2 { - margin: 0.5rem !important; - } - .m-sm-3 { - margin: 1rem !important; - } - .m-sm-4 { - margin: 1.5rem !important; - } - .m-sm-5 { - margin: 3rem !important; - } - .m-sm-auto { - margin: auto !important; - } - .mx-sm-0 { - margin-right: 0 !important; - margin-left: 0 !important; - } - .mx-sm-1 { - margin-right: 0.25rem !important; - margin-left: 0.25rem !important; - } - .mx-sm-2 { - margin-right: 0.5rem !important; - margin-left: 0.5rem !important; - } - .mx-sm-3 { - margin-right: 1rem !important; - margin-left: 1rem !important; - } - .mx-sm-4 { - margin-right: 1.5rem !important; - margin-left: 1.5rem !important; - } - .mx-sm-5 { - margin-right: 3rem !important; - margin-left: 3rem !important; - } - .mx-sm-auto { - margin-right: auto !important; - margin-left: auto !important; - } - .my-sm-0 { - margin-top: 0 !important; - margin-bottom: 0 !important; - } - .my-sm-1 { - margin-top: 0.25rem !important; - margin-bottom: 0.25rem !important; - } - .my-sm-2 { - margin-top: 0.5rem !important; - margin-bottom: 0.5rem !important; - } - .my-sm-3 { - margin-top: 1rem !important; - margin-bottom: 1rem !important; - } - .my-sm-4 { - margin-top: 1.5rem !important; - margin-bottom: 1.5rem !important; - } - .my-sm-5 { - margin-top: 3rem !important; - margin-bottom: 3rem !important; - } - .my-sm-auto { - margin-top: auto !important; - margin-bottom: auto !important; - } - .mt-sm-0 { - margin-top: 0 !important; - } - .mt-sm-1 { - margin-top: 0.25rem !important; - } - .mt-sm-2 { - margin-top: 0.5rem !important; - } - .mt-sm-3 { - margin-top: 1rem !important; - } - .mt-sm-4 { - margin-top: 1.5rem !important; - } - .mt-sm-5 { - margin-top: 3rem !important; - } - .mt-sm-auto { - margin-top: auto !important; - } - .me-sm-0 { - margin-right: 0 !important; - } - .me-sm-1 { - margin-right: 0.25rem !important; - } - .me-sm-2 { - margin-right: 0.5rem !important; - } - .me-sm-3 { - margin-right: 1rem !important; - } - .me-sm-4 { - margin-right: 1.5rem !important; - } - .me-sm-5 { - margin-right: 3rem !important; - } - .me-sm-auto { - margin-right: auto !important; - } - .mb-sm-0 { - margin-bottom: 0 !important; - } - .mb-sm-1 { - margin-bottom: 0.25rem !important; - } - .mb-sm-2 { - margin-bottom: 0.5rem !important; - } - .mb-sm-3 { - margin-bottom: 1rem !important; - } - .mb-sm-4 { - margin-bottom: 1.5rem !important; - } - .mb-sm-5 { - margin-bottom: 3rem !important; - } - .mb-sm-auto { - margin-bottom: auto !important; - } - .ms-sm-0 { - margin-left: 0 !important; - } - .ms-sm-1 { - margin-left: 0.25rem !important; - } - .ms-sm-2 { - margin-left: 0.5rem !important; - } - .ms-sm-3 { - margin-left: 1rem !important; - } - .ms-sm-4 { - margin-left: 1.5rem !important; - } - .ms-sm-5 { - margin-left: 3rem !important; - } - .ms-sm-auto { - margin-left: auto !important; - } - .p-sm-0 { - padding: 0 !important; - } - .p-sm-1 { - padding: 0.25rem !important; - } - .p-sm-2 { - padding: 0.5rem !important; - } - .p-sm-3 { - padding: 1rem !important; - } - .p-sm-4 { - padding: 1.5rem !important; - } - .p-sm-5 { - padding: 3rem !important; - } - .px-sm-0 { - padding-right: 0 !important; - padding-left: 0 !important; - } - .px-sm-1 { - padding-right: 0.25rem !important; - padding-left: 0.25rem !important; - } - .px-sm-2 { - padding-right: 0.5rem !important; - padding-left: 0.5rem !important; - } - .px-sm-3 { - padding-right: 1rem !important; - padding-left: 1rem !important; - } - .px-sm-4 { - padding-right: 1.5rem !important; - padding-left: 1.5rem !important; - } - .px-sm-5 { - padding-right: 3rem !important; - padding-left: 3rem !important; - } - .py-sm-0 { - padding-top: 0 !important; - padding-bottom: 0 !important; - } - .py-sm-1 { - padding-top: 0.25rem !important; - padding-bottom: 0.25rem !important; - } - .py-sm-2 { - padding-top: 0.5rem !important; - padding-bottom: 0.5rem !important; - } - .py-sm-3 { - padding-top: 1rem !important; - padding-bottom: 1rem !important; - } - .py-sm-4 { - padding-top: 1.5rem !important; - padding-bottom: 1.5rem !important; - } - .py-sm-5 { - padding-top: 3rem !important; - padding-bottom: 3rem !important; - } - .pt-sm-0 { - padding-top: 0 !important; - } - .pt-sm-1 { - padding-top: 0.25rem !important; - } - .pt-sm-2 { - padding-top: 0.5rem !important; - } - .pt-sm-3 { - padding-top: 1rem !important; - } - .pt-sm-4 { - padding-top: 1.5rem !important; - } - .pt-sm-5 { - padding-top: 3rem !important; - } - .pe-sm-0 { - padding-right: 0 !important; - } - .pe-sm-1 { - padding-right: 0.25rem !important; - } - .pe-sm-2 { - padding-right: 0.5rem !important; - } - .pe-sm-3 { - padding-right: 1rem !important; - } - .pe-sm-4 { - padding-right: 1.5rem !important; - } - .pe-sm-5 { - padding-right: 3rem !important; - } - .pb-sm-0 { - padding-bottom: 0 !important; - } - .pb-sm-1 { - padding-bottom: 0.25rem !important; - } - .pb-sm-2 { - padding-bottom: 0.5rem !important; - } - .pb-sm-3 { - padding-bottom: 1rem !important; - } - .pb-sm-4 { - padding-bottom: 1.5rem !important; - } - .pb-sm-5 { - padding-bottom: 3rem !important; - } - .ps-sm-0 { - padding-left: 0 !important; - } - .ps-sm-1 { - padding-left: 0.25rem !important; - } - .ps-sm-2 { - padding-left: 0.5rem !important; - } - .ps-sm-3 { - padding-left: 1rem !important; - } - .ps-sm-4 { - padding-left: 1.5rem !important; - } - .ps-sm-5 { - padding-left: 3rem !important; - } - .gap-sm-0 { - gap: 0 !important; - } - .gap-sm-1 { - gap: 0.25rem !important; - } - .gap-sm-2 { - gap: 0.5rem !important; - } - .gap-sm-3 { - gap: 1rem !important; - } - .gap-sm-4 { - gap: 1.5rem !important; - } - .gap-sm-5 { - gap: 3rem !important; - } - .row-gap-sm-0 { - row-gap: 0 !important; - } - .row-gap-sm-1 { - row-gap: 0.25rem !important; - } - .row-gap-sm-2 { - row-gap: 0.5rem !important; - } - .row-gap-sm-3 { - row-gap: 1rem !important; - } - .row-gap-sm-4 { - row-gap: 1.5rem !important; - } - .row-gap-sm-5 { - row-gap: 3rem !important; - } - .column-gap-sm-0 { - -moz-column-gap: 0 !important; - column-gap: 0 !important; - } - .column-gap-sm-1 { - -moz-column-gap: 0.25rem !important; - column-gap: 0.25rem !important; - } - .column-gap-sm-2 { - -moz-column-gap: 0.5rem !important; - column-gap: 0.5rem !important; - } - .column-gap-sm-3 { - -moz-column-gap: 1rem !important; - column-gap: 1rem !important; - } - .column-gap-sm-4 { - -moz-column-gap: 1.5rem !important; - column-gap: 1.5rem !important; - } - .column-gap-sm-5 { - -moz-column-gap: 3rem !important; - column-gap: 3rem !important; - } - .text-sm-start { - text-align: left !important; - } - .text-sm-end { - text-align: right !important; - } - .text-sm-center { - text-align: center !important; - } -} -@media (min-width: 768px) { - .float-md-start { - float: left !important; - } - .float-md-end { - float: right !important; - } - .float-md-none { - float: none !important; - } - .object-fit-md-contain { - -o-object-fit: contain !important; - object-fit: contain !important; - } - .object-fit-md-cover { - -o-object-fit: cover !important; - object-fit: cover !important; - } - .object-fit-md-fill { - -o-object-fit: fill !important; - object-fit: fill !important; - } - .object-fit-md-scale { - -o-object-fit: scale-down !important; - object-fit: scale-down !important; - } - .object-fit-md-none { - -o-object-fit: none !important; - object-fit: none !important; - } - .d-md-inline { - display: inline !important; - } - .d-md-inline-block { - display: inline-block !important; - } - .d-md-block { - display: block !important; - } - .d-md-grid { - display: grid !important; - } - .d-md-inline-grid { - display: inline-grid !important; - } - .d-md-table { - display: table !important; - } - .d-md-table-row { - display: table-row !important; - } - .d-md-table-cell { - display: table-cell !important; - } - .d-md-flex { - display: flex !important; - } - .d-md-inline-flex { - display: inline-flex !important; - } - .d-md-none { - display: none !important; - } - .flex-md-fill { - flex: 1 1 auto !important; - } - .flex-md-row { - flex-direction: row !important; - } - .flex-md-column { - flex-direction: column !important; - } - .flex-md-row-reverse { - flex-direction: row-reverse !important; - } - .flex-md-column-reverse { - flex-direction: column-reverse !important; - } - .flex-md-grow-0 { - flex-grow: 0 !important; - } - .flex-md-grow-1 { - flex-grow: 1 !important; - } - .flex-md-shrink-0 { - flex-shrink: 0 !important; - } - .flex-md-shrink-1 { - flex-shrink: 1 !important; - } - .flex-md-wrap { - flex-wrap: wrap !important; - } - .flex-md-nowrap { - flex-wrap: nowrap !important; - } - .flex-md-wrap-reverse { - flex-wrap: wrap-reverse !important; - } - .justify-content-md-start { - justify-content: flex-start !important; - } - .justify-content-md-end { - justify-content: flex-end !important; - } - .justify-content-md-center { - justify-content: center !important; - } - .justify-content-md-between { - justify-content: space-between !important; - } - .justify-content-md-around { - justify-content: space-around !important; - } - .justify-content-md-evenly { - justify-content: space-evenly !important; - } - .align-items-md-start { - align-items: flex-start !important; - } - .align-items-md-end { - align-items: flex-end !important; - } - .align-items-md-center { - align-items: center !important; - } - .align-items-md-baseline { - align-items: baseline !important; - } - .align-items-md-stretch { - align-items: stretch !important; - } - .align-content-md-start { - align-content: flex-start !important; - } - .align-content-md-end { - align-content: flex-end !important; - } - .align-content-md-center { - align-content: center !important; - } - .align-content-md-between { - align-content: space-between !important; - } - .align-content-md-around { - align-content: space-around !important; - } - .align-content-md-stretch { - align-content: stretch !important; - } - .align-self-md-auto { - align-self: auto !important; - } - .align-self-md-start { - align-self: flex-start !important; - } - .align-self-md-end { - align-self: flex-end !important; - } - .align-self-md-center { - align-self: center !important; - } - .align-self-md-baseline { - align-self: baseline !important; - } - .align-self-md-stretch { - align-self: stretch !important; - } - .order-md-first { - order: -1 !important; - } - .order-md-0 { - order: 0 !important; - } - .order-md-1 { - order: 1 !important; - } - .order-md-2 { - order: 2 !important; - } - .order-md-3 { - order: 3 !important; - } - .order-md-4 { - order: 4 !important; - } - .order-md-5 { - order: 5 !important; - } - .order-md-last { - order: 6 !important; - } - .m-md-0 { - margin: 0 !important; - } - .m-md-1 { - margin: 0.25rem !important; - } - .m-md-2 { - margin: 0.5rem !important; - } - .m-md-3 { - margin: 1rem !important; - } - .m-md-4 { - margin: 1.5rem !important; - } - .m-md-5 { - margin: 3rem !important; - } - .m-md-auto { - margin: auto !important; - } - .mx-md-0 { - margin-right: 0 !important; - margin-left: 0 !important; - } - .mx-md-1 { - margin-right: 0.25rem !important; - margin-left: 0.25rem !important; - } - .mx-md-2 { - margin-right: 0.5rem !important; - margin-left: 0.5rem !important; - } - .mx-md-3 { - margin-right: 1rem !important; - margin-left: 1rem !important; - } - .mx-md-4 { - margin-right: 1.5rem !important; - margin-left: 1.5rem !important; - } - .mx-md-5 { - margin-right: 3rem !important; - margin-left: 3rem !important; - } - .mx-md-auto { - margin-right: auto !important; - margin-left: auto !important; - } - .my-md-0 { - margin-top: 0 !important; - margin-bottom: 0 !important; - } - .my-md-1 { - margin-top: 0.25rem !important; - margin-bottom: 0.25rem !important; - } - .my-md-2 { - margin-top: 0.5rem !important; - margin-bottom: 0.5rem !important; - } - .my-md-3 { - margin-top: 1rem !important; - margin-bottom: 1rem !important; - } - .my-md-4 { - margin-top: 1.5rem !important; - margin-bottom: 1.5rem !important; - } - .my-md-5 { - margin-top: 3rem !important; - margin-bottom: 3rem !important; - } - .my-md-auto { - margin-top: auto !important; - margin-bottom: auto !important; - } - .mt-md-0 { - margin-top: 0 !important; - } - .mt-md-1 { - margin-top: 0.25rem !important; - } - .mt-md-2 { - margin-top: 0.5rem !important; - } - .mt-md-3 { - margin-top: 1rem !important; - } - .mt-md-4 { - margin-top: 1.5rem !important; - } - .mt-md-5 { - margin-top: 3rem !important; - } - .mt-md-auto { - margin-top: auto !important; - } - .me-md-0 { - margin-right: 0 !important; - } - .me-md-1 { - margin-right: 0.25rem !important; - } - .me-md-2 { - margin-right: 0.5rem !important; - } - .me-md-3 { - margin-right: 1rem !important; - } - .me-md-4 { - margin-right: 1.5rem !important; - } - .me-md-5 { - margin-right: 3rem !important; - } - .me-md-auto { - margin-right: auto !important; - } - .mb-md-0 { - margin-bottom: 0 !important; - } - .mb-md-1 { - margin-bottom: 0.25rem !important; - } - .mb-md-2 { - margin-bottom: 0.5rem !important; - } - .mb-md-3 { - margin-bottom: 1rem !important; - } - .mb-md-4 { - margin-bottom: 1.5rem !important; - } - .mb-md-5 { - margin-bottom: 3rem !important; - } - .mb-md-auto { - margin-bottom: auto !important; - } - .ms-md-0 { - margin-left: 0 !important; - } - .ms-md-1 { - margin-left: 0.25rem !important; - } - .ms-md-2 { - margin-left: 0.5rem !important; - } - .ms-md-3 { - margin-left: 1rem !important; - } - .ms-md-4 { - margin-left: 1.5rem !important; - } - .ms-md-5 { - margin-left: 3rem !important; - } - .ms-md-auto { - margin-left: auto !important; - } - .p-md-0 { - padding: 0 !important; - } - .p-md-1 { - padding: 0.25rem !important; - } - .p-md-2 { - padding: 0.5rem !important; - } - .p-md-3 { - padding: 1rem !important; - } - .p-md-4 { - padding: 1.5rem !important; - } - .p-md-5 { - padding: 3rem !important; - } - .px-md-0 { - padding-right: 0 !important; - padding-left: 0 !important; - } - .px-md-1 { - padding-right: 0.25rem !important; - padding-left: 0.25rem !important; - } - .px-md-2 { - padding-right: 0.5rem !important; - padding-left: 0.5rem !important; - } - .px-md-3 { - padding-right: 1rem !important; - padding-left: 1rem !important; - } - .px-md-4 { - padding-right: 1.5rem !important; - padding-left: 1.5rem !important; - } - .px-md-5 { - padding-right: 3rem !important; - padding-left: 3rem !important; - } - .py-md-0 { - padding-top: 0 !important; - padding-bottom: 0 !important; - } - .py-md-1 { - padding-top: 0.25rem !important; - padding-bottom: 0.25rem !important; - } - .py-md-2 { - padding-top: 0.5rem !important; - padding-bottom: 0.5rem !important; - } - .py-md-3 { - padding-top: 1rem !important; - padding-bottom: 1rem !important; - } - .py-md-4 { - padding-top: 1.5rem !important; - padding-bottom: 1.5rem !important; - } - .py-md-5 { - padding-top: 3rem !important; - padding-bottom: 3rem !important; - } - .pt-md-0 { - padding-top: 0 !important; - } - .pt-md-1 { - padding-top: 0.25rem !important; - } - .pt-md-2 { - padding-top: 0.5rem !important; - } - .pt-md-3 { - padding-top: 1rem !important; - } - .pt-md-4 { - padding-top: 1.5rem !important; - } - .pt-md-5 { - padding-top: 3rem !important; - } - .pe-md-0 { - padding-right: 0 !important; - } - .pe-md-1 { - padding-right: 0.25rem !important; - } - .pe-md-2 { - padding-right: 0.5rem !important; - } - .pe-md-3 { - padding-right: 1rem !important; - } - .pe-md-4 { - padding-right: 1.5rem !important; - } - .pe-md-5 { - padding-right: 3rem !important; - } - .pb-md-0 { - padding-bottom: 0 !important; - } - .pb-md-1 { - padding-bottom: 0.25rem !important; - } - .pb-md-2 { - padding-bottom: 0.5rem !important; - } - .pb-md-3 { - padding-bottom: 1rem !important; - } - .pb-md-4 { - padding-bottom: 1.5rem !important; - } - .pb-md-5 { - padding-bottom: 3rem !important; - } - .ps-md-0 { - padding-left: 0 !important; - } - .ps-md-1 { - padding-left: 0.25rem !important; - } - .ps-md-2 { - padding-left: 0.5rem !important; - } - .ps-md-3 { - padding-left: 1rem !important; - } - .ps-md-4 { - padding-left: 1.5rem !important; - } - .ps-md-5 { - padding-left: 3rem !important; - } - .gap-md-0 { - gap: 0 !important; - } - .gap-md-1 { - gap: 0.25rem !important; - } - .gap-md-2 { - gap: 0.5rem !important; - } - .gap-md-3 { - gap: 1rem !important; - } - .gap-md-4 { - gap: 1.5rem !important; - } - .gap-md-5 { - gap: 3rem !important; - } - .row-gap-md-0 { - row-gap: 0 !important; - } - .row-gap-md-1 { - row-gap: 0.25rem !important; - } - .row-gap-md-2 { - row-gap: 0.5rem !important; - } - .row-gap-md-3 { - row-gap: 1rem !important; - } - .row-gap-md-4 { - row-gap: 1.5rem !important; - } - .row-gap-md-5 { - row-gap: 3rem !important; - } - .column-gap-md-0 { - -moz-column-gap: 0 !important; - column-gap: 0 !important; - } - .column-gap-md-1 { - -moz-column-gap: 0.25rem !important; - column-gap: 0.25rem !important; - } - .column-gap-md-2 { - -moz-column-gap: 0.5rem !important; - column-gap: 0.5rem !important; - } - .column-gap-md-3 { - -moz-column-gap: 1rem !important; - column-gap: 1rem !important; - } - .column-gap-md-4 { - -moz-column-gap: 1.5rem !important; - column-gap: 1.5rem !important; - } - .column-gap-md-5 { - -moz-column-gap: 3rem !important; - column-gap: 3rem !important; - } - .text-md-start { - text-align: left !important; - } - .text-md-end { - text-align: right !important; - } - .text-md-center { - text-align: center !important; - } -} -@media (min-width: 992px) { - .float-lg-start { - float: left !important; - } - .float-lg-end { - float: right !important; - } - .float-lg-none { - float: none !important; - } - .object-fit-lg-contain { - -o-object-fit: contain !important; - object-fit: contain !important; - } - .object-fit-lg-cover { - -o-object-fit: cover !important; - object-fit: cover !important; - } - .object-fit-lg-fill { - -o-object-fit: fill !important; - object-fit: fill !important; - } - .object-fit-lg-scale { - -o-object-fit: scale-down !important; - object-fit: scale-down !important; - } - .object-fit-lg-none { - -o-object-fit: none !important; - object-fit: none !important; - } - .d-lg-inline { - display: inline !important; - } - .d-lg-inline-block { - display: inline-block !important; - } - .d-lg-block { - display: block !important; - } - .d-lg-grid { - display: grid !important; - } - .d-lg-inline-grid { - display: inline-grid !important; - } - .d-lg-table { - display: table !important; - } - .d-lg-table-row { - display: table-row !important; - } - .d-lg-table-cell { - display: table-cell !important; - } - .d-lg-flex { - display: flex !important; - } - .d-lg-inline-flex { - display: inline-flex !important; - } - .d-lg-none { - display: none !important; - } - .flex-lg-fill { - flex: 1 1 auto !important; - } - .flex-lg-row { - flex-direction: row !important; - } - .flex-lg-column { - flex-direction: column !important; - } - .flex-lg-row-reverse { - flex-direction: row-reverse !important; - } - .flex-lg-column-reverse { - flex-direction: column-reverse !important; - } - .flex-lg-grow-0 { - flex-grow: 0 !important; - } - .flex-lg-grow-1 { - flex-grow: 1 !important; - } - .flex-lg-shrink-0 { - flex-shrink: 0 !important; - } - .flex-lg-shrink-1 { - flex-shrink: 1 !important; - } - .flex-lg-wrap { - flex-wrap: wrap !important; - } - .flex-lg-nowrap { - flex-wrap: nowrap !important; - } - .flex-lg-wrap-reverse { - flex-wrap: wrap-reverse !important; - } - .justify-content-lg-start { - justify-content: flex-start !important; - } - .justify-content-lg-end { - justify-content: flex-end !important; - } - .justify-content-lg-center { - justify-content: center !important; - } - .justify-content-lg-between { - justify-content: space-between !important; - } - .justify-content-lg-around { - justify-content: space-around !important; - } - .justify-content-lg-evenly { - justify-content: space-evenly !important; - } - .align-items-lg-start { - align-items: flex-start !important; - } - .align-items-lg-end { - align-items: flex-end !important; - } - .align-items-lg-center { - align-items: center !important; - } - .align-items-lg-baseline { - align-items: baseline !important; - } - .align-items-lg-stretch { - align-items: stretch !important; - } - .align-content-lg-start { - align-content: flex-start !important; - } - .align-content-lg-end { - align-content: flex-end !important; - } - .align-content-lg-center { - align-content: center !important; - } - .align-content-lg-between { - align-content: space-between !important; - } - .align-content-lg-around { - align-content: space-around !important; - } - .align-content-lg-stretch { - align-content: stretch !important; - } - .align-self-lg-auto { - align-self: auto !important; - } - .align-self-lg-start { - align-self: flex-start !important; - } - .align-self-lg-end { - align-self: flex-end !important; - } - .align-self-lg-center { - align-self: center !important; - } - .align-self-lg-baseline { - align-self: baseline !important; - } - .align-self-lg-stretch { - align-self: stretch !important; - } - .order-lg-first { - order: -1 !important; - } - .order-lg-0 { - order: 0 !important; - } - .order-lg-1 { - order: 1 !important; - } - .order-lg-2 { - order: 2 !important; - } - .order-lg-3 { - order: 3 !important; - } - .order-lg-4 { - order: 4 !important; - } - .order-lg-5 { - order: 5 !important; - } - .order-lg-last { - order: 6 !important; - } - .m-lg-0 { - margin: 0 !important; - } - .m-lg-1 { - margin: 0.25rem !important; - } - .m-lg-2 { - margin: 0.5rem !important; - } - .m-lg-3 { - margin: 1rem !important; - } - .m-lg-4 { - margin: 1.5rem !important; - } - .m-lg-5 { - margin: 3rem !important; - } - .m-lg-auto { - margin: auto !important; - } - .mx-lg-0 { - margin-right: 0 !important; - margin-left: 0 !important; - } - .mx-lg-1 { - margin-right: 0.25rem !important; - margin-left: 0.25rem !important; - } - .mx-lg-2 { - margin-right: 0.5rem !important; - margin-left: 0.5rem !important; - } - .mx-lg-3 { - margin-right: 1rem !important; - margin-left: 1rem !important; - } - .mx-lg-4 { - margin-right: 1.5rem !important; - margin-left: 1.5rem !important; - } - .mx-lg-5 { - margin-right: 3rem !important; - margin-left: 3rem !important; - } - .mx-lg-auto { - margin-right: auto !important; - margin-left: auto !important; - } - .my-lg-0 { - margin-top: 0 !important; - margin-bottom: 0 !important; - } - .my-lg-1 { - margin-top: 0.25rem !important; - margin-bottom: 0.25rem !important; - } - .my-lg-2 { - margin-top: 0.5rem !important; - margin-bottom: 0.5rem !important; - } - .my-lg-3 { - margin-top: 1rem !important; - margin-bottom: 1rem !important; - } - .my-lg-4 { - margin-top: 1.5rem !important; - margin-bottom: 1.5rem !important; - } - .my-lg-5 { - margin-top: 3rem !important; - margin-bottom: 3rem !important; - } - .my-lg-auto { - margin-top: auto !important; - margin-bottom: auto !important; - } - .mt-lg-0 { - margin-top: 0 !important; - } - .mt-lg-1 { - margin-top: 0.25rem !important; - } - .mt-lg-2 { - margin-top: 0.5rem !important; - } - .mt-lg-3 { - margin-top: 1rem !important; - } - .mt-lg-4 { - margin-top: 1.5rem !important; - } - .mt-lg-5 { - margin-top: 3rem !important; - } - .mt-lg-auto { - margin-top: auto !important; - } - .me-lg-0 { - margin-right: 0 !important; - } - .me-lg-1 { - margin-right: 0.25rem !important; - } - .me-lg-2 { - margin-right: 0.5rem !important; - } - .me-lg-3 { - margin-right: 1rem !important; - } - .me-lg-4 { - margin-right: 1.5rem !important; - } - .me-lg-5 { - margin-right: 3rem !important; - } - .me-lg-auto { - margin-right: auto !important; - } - .mb-lg-0 { - margin-bottom: 0 !important; - } - .mb-lg-1 { - margin-bottom: 0.25rem !important; - } - .mb-lg-2 { - margin-bottom: 0.5rem !important; - } - .mb-lg-3 { - margin-bottom: 1rem !important; - } - .mb-lg-4 { - margin-bottom: 1.5rem !important; - } - .mb-lg-5 { - margin-bottom: 3rem !important; - } - .mb-lg-auto { - margin-bottom: auto !important; - } - .ms-lg-0 { - margin-left: 0 !important; - } - .ms-lg-1 { - margin-left: 0.25rem !important; - } - .ms-lg-2 { - margin-left: 0.5rem !important; - } - .ms-lg-3 { - margin-left: 1rem !important; - } - .ms-lg-4 { - margin-left: 1.5rem !important; - } - .ms-lg-5 { - margin-left: 3rem !important; - } - .ms-lg-auto { - margin-left: auto !important; - } - .p-lg-0 { - padding: 0 !important; - } - .p-lg-1 { - padding: 0.25rem !important; - } - .p-lg-2 { - padding: 0.5rem !important; - } - .p-lg-3 { - padding: 1rem !important; - } - .p-lg-4 { - padding: 1.5rem !important; - } - .p-lg-5 { - padding: 3rem !important; - } - .px-lg-0 { - padding-right: 0 !important; - padding-left: 0 !important; - } - .px-lg-1 { - padding-right: 0.25rem !important; - padding-left: 0.25rem !important; - } - .px-lg-2 { - padding-right: 0.5rem !important; - padding-left: 0.5rem !important; - } - .px-lg-3 { - padding-right: 1rem !important; - padding-left: 1rem !important; - } - .px-lg-4 { - padding-right: 1.5rem !important; - padding-left: 1.5rem !important; - } - .px-lg-5 { - padding-right: 3rem !important; - padding-left: 3rem !important; - } - .py-lg-0 { - padding-top: 0 !important; - padding-bottom: 0 !important; - } - .py-lg-1 { - padding-top: 0.25rem !important; - padding-bottom: 0.25rem !important; - } - .py-lg-2 { - padding-top: 0.5rem !important; - padding-bottom: 0.5rem !important; - } - .py-lg-3 { - padding-top: 1rem !important; - padding-bottom: 1rem !important; - } - .py-lg-4 { - padding-top: 1.5rem !important; - padding-bottom: 1.5rem !important; - } - .py-lg-5 { - padding-top: 3rem !important; - padding-bottom: 3rem !important; - } - .pt-lg-0 { - padding-top: 0 !important; - } - .pt-lg-1 { - padding-top: 0.25rem !important; - } - .pt-lg-2 { - padding-top: 0.5rem !important; - } - .pt-lg-3 { - padding-top: 1rem !important; - } - .pt-lg-4 { - padding-top: 1.5rem !important; - } - .pt-lg-5 { - padding-top: 3rem !important; - } - .pe-lg-0 { - padding-right: 0 !important; - } - .pe-lg-1 { - padding-right: 0.25rem !important; - } - .pe-lg-2 { - padding-right: 0.5rem !important; - } - .pe-lg-3 { - padding-right: 1rem !important; - } - .pe-lg-4 { - padding-right: 1.5rem !important; - } - .pe-lg-5 { - padding-right: 3rem !important; - } - .pb-lg-0 { - padding-bottom: 0 !important; - } - .pb-lg-1 { - padding-bottom: 0.25rem !important; - } - .pb-lg-2 { - padding-bottom: 0.5rem !important; - } - .pb-lg-3 { - padding-bottom: 1rem !important; - } - .pb-lg-4 { - padding-bottom: 1.5rem !important; - } - .pb-lg-5 { - padding-bottom: 3rem !important; - } - .ps-lg-0 { - padding-left: 0 !important; - } - .ps-lg-1 { - padding-left: 0.25rem !important; - } - .ps-lg-2 { - padding-left: 0.5rem !important; - } - .ps-lg-3 { - padding-left: 1rem !important; - } - .ps-lg-4 { - padding-left: 1.5rem !important; - } - .ps-lg-5 { - padding-left: 3rem !important; - } - .gap-lg-0 { - gap: 0 !important; - } - .gap-lg-1 { - gap: 0.25rem !important; - } - .gap-lg-2 { - gap: 0.5rem !important; - } - .gap-lg-3 { - gap: 1rem !important; - } - .gap-lg-4 { - gap: 1.5rem !important; - } - .gap-lg-5 { - gap: 3rem !important; - } - .row-gap-lg-0 { - row-gap: 0 !important; - } - .row-gap-lg-1 { - row-gap: 0.25rem !important; - } - .row-gap-lg-2 { - row-gap: 0.5rem !important; - } - .row-gap-lg-3 { - row-gap: 1rem !important; - } - .row-gap-lg-4 { - row-gap: 1.5rem !important; - } - .row-gap-lg-5 { - row-gap: 3rem !important; - } - .column-gap-lg-0 { - -moz-column-gap: 0 !important; - column-gap: 0 !important; - } - .column-gap-lg-1 { - -moz-column-gap: 0.25rem !important; - column-gap: 0.25rem !important; - } - .column-gap-lg-2 { - -moz-column-gap: 0.5rem !important; - column-gap: 0.5rem !important; - } - .column-gap-lg-3 { - -moz-column-gap: 1rem !important; - column-gap: 1rem !important; - } - .column-gap-lg-4 { - -moz-column-gap: 1.5rem !important; - column-gap: 1.5rem !important; - } - .column-gap-lg-5 { - -moz-column-gap: 3rem !important; - column-gap: 3rem !important; - } - .text-lg-start { - text-align: left !important; - } - .text-lg-end { - text-align: right !important; - } - .text-lg-center { - text-align: center !important; - } -} -@media (min-width: 1200px) { - .float-xl-start { - float: left !important; - } - .float-xl-end { - float: right !important; - } - .float-xl-none { - float: none !important; - } - .object-fit-xl-contain { - -o-object-fit: contain !important; - object-fit: contain !important; - } - .object-fit-xl-cover { - -o-object-fit: cover !important; - object-fit: cover !important; - } - .object-fit-xl-fill { - -o-object-fit: fill !important; - object-fit: fill !important; - } - .object-fit-xl-scale { - -o-object-fit: scale-down !important; - object-fit: scale-down !important; - } - .object-fit-xl-none { - -o-object-fit: none !important; - object-fit: none !important; - } - .d-xl-inline { - display: inline !important; - } - .d-xl-inline-block { - display: inline-block !important; - } - .d-xl-block { - display: block !important; - } - .d-xl-grid { - display: grid !important; - } - .d-xl-inline-grid { - display: inline-grid !important; - } - .d-xl-table { - display: table !important; - } - .d-xl-table-row { - display: table-row !important; - } - .d-xl-table-cell { - display: table-cell !important; - } - .d-xl-flex { - display: flex !important; - } - .d-xl-inline-flex { - display: inline-flex !important; - } - .d-xl-none { - display: none !important; - } - .flex-xl-fill { - flex: 1 1 auto !important; - } - .flex-xl-row { - flex-direction: row !important; - } - .flex-xl-column { - flex-direction: column !important; - } - .flex-xl-row-reverse { - flex-direction: row-reverse !important; - } - .flex-xl-column-reverse { - flex-direction: column-reverse !important; - } - .flex-xl-grow-0 { - flex-grow: 0 !important; - } - .flex-xl-grow-1 { - flex-grow: 1 !important; - } - .flex-xl-shrink-0 { - flex-shrink: 0 !important; - } - .flex-xl-shrink-1 { - flex-shrink: 1 !important; - } - .flex-xl-wrap { - flex-wrap: wrap !important; - } - .flex-xl-nowrap { - flex-wrap: nowrap !important; - } - .flex-xl-wrap-reverse { - flex-wrap: wrap-reverse !important; - } - .justify-content-xl-start { - justify-content: flex-start !important; - } - .justify-content-xl-end { - justify-content: flex-end !important; - } - .justify-content-xl-center { - justify-content: center !important; - } - .justify-content-xl-between { - justify-content: space-between !important; - } - .justify-content-xl-around { - justify-content: space-around !important; - } - .justify-content-xl-evenly { - justify-content: space-evenly !important; - } - .align-items-xl-start { - align-items: flex-start !important; - } - .align-items-xl-end { - align-items: flex-end !important; - } - .align-items-xl-center { - align-items: center !important; - } - .align-items-xl-baseline { - align-items: baseline !important; - } - .align-items-xl-stretch { - align-items: stretch !important; - } - .align-content-xl-start { - align-content: flex-start !important; - } - .align-content-xl-end { - align-content: flex-end !important; - } - .align-content-xl-center { - align-content: center !important; - } - .align-content-xl-between { - align-content: space-between !important; - } - .align-content-xl-around { - align-content: space-around !important; - } - .align-content-xl-stretch { - align-content: stretch !important; - } - .align-self-xl-auto { - align-self: auto !important; - } - .align-self-xl-start { - align-self: flex-start !important; - } - .align-self-xl-end { - align-self: flex-end !important; - } - .align-self-xl-center { - align-self: center !important; - } - .align-self-xl-baseline { - align-self: baseline !important; - } - .align-self-xl-stretch { - align-self: stretch !important; - } - .order-xl-first { - order: -1 !important; - } - .order-xl-0 { - order: 0 !important; - } - .order-xl-1 { - order: 1 !important; - } - .order-xl-2 { - order: 2 !important; - } - .order-xl-3 { - order: 3 !important; - } - .order-xl-4 { - order: 4 !important; - } - .order-xl-5 { - order: 5 !important; - } - .order-xl-last { - order: 6 !important; - } - .m-xl-0 { - margin: 0 !important; - } - .m-xl-1 { - margin: 0.25rem !important; - } - .m-xl-2 { - margin: 0.5rem !important; - } - .m-xl-3 { - margin: 1rem !important; - } - .m-xl-4 { - margin: 1.5rem !important; - } - .m-xl-5 { - margin: 3rem !important; - } - .m-xl-auto { - margin: auto !important; - } - .mx-xl-0 { - margin-right: 0 !important; - margin-left: 0 !important; - } - .mx-xl-1 { - margin-right: 0.25rem !important; - margin-left: 0.25rem !important; - } - .mx-xl-2 { - margin-right: 0.5rem !important; - margin-left: 0.5rem !important; - } - .mx-xl-3 { - margin-right: 1rem !important; - margin-left: 1rem !important; - } - .mx-xl-4 { - margin-right: 1.5rem !important; - margin-left: 1.5rem !important; - } - .mx-xl-5 { - margin-right: 3rem !important; - margin-left: 3rem !important; - } - .mx-xl-auto { - margin-right: auto !important; - margin-left: auto !important; - } - .my-xl-0 { - margin-top: 0 !important; - margin-bottom: 0 !important; - } - .my-xl-1 { - margin-top: 0.25rem !important; - margin-bottom: 0.25rem !important; - } - .my-xl-2 { - margin-top: 0.5rem !important; - margin-bottom: 0.5rem !important; - } - .my-xl-3 { - margin-top: 1rem !important; - margin-bottom: 1rem !important; - } - .my-xl-4 { - margin-top: 1.5rem !important; - margin-bottom: 1.5rem !important; - } - .my-xl-5 { - margin-top: 3rem !important; - margin-bottom: 3rem !important; - } - .my-xl-auto { - margin-top: auto !important; - margin-bottom: auto !important; - } - .mt-xl-0 { - margin-top: 0 !important; - } - .mt-xl-1 { - margin-top: 0.25rem !important; - } - .mt-xl-2 { - margin-top: 0.5rem !important; - } - .mt-xl-3 { - margin-top: 1rem !important; - } - .mt-xl-4 { - margin-top: 1.5rem !important; - } - .mt-xl-5 { - margin-top: 3rem !important; - } - .mt-xl-auto { - margin-top: auto !important; - } - .me-xl-0 { - margin-right: 0 !important; - } - .me-xl-1 { - margin-right: 0.25rem !important; - } - .me-xl-2 { - margin-right: 0.5rem !important; - } - .me-xl-3 { - margin-right: 1rem !important; - } - .me-xl-4 { - margin-right: 1.5rem !important; - } - .me-xl-5 { - margin-right: 3rem !important; - } - .me-xl-auto { - margin-right: auto !important; - } - .mb-xl-0 { - margin-bottom: 0 !important; - } - .mb-xl-1 { - margin-bottom: 0.25rem !important; - } - .mb-xl-2 { - margin-bottom: 0.5rem !important; - } - .mb-xl-3 { - margin-bottom: 1rem !important; - } - .mb-xl-4 { - margin-bottom: 1.5rem !important; - } - .mb-xl-5 { - margin-bottom: 3rem !important; - } - .mb-xl-auto { - margin-bottom: auto !important; - } - .ms-xl-0 { - margin-left: 0 !important; - } - .ms-xl-1 { - margin-left: 0.25rem !important; - } - .ms-xl-2 { - margin-left: 0.5rem !important; - } - .ms-xl-3 { - margin-left: 1rem !important; - } - .ms-xl-4 { - margin-left: 1.5rem !important; - } - .ms-xl-5 { - margin-left: 3rem !important; - } - .ms-xl-auto { - margin-left: auto !important; - } - .p-xl-0 { - padding: 0 !important; - } - .p-xl-1 { - padding: 0.25rem !important; - } - .p-xl-2 { - padding: 0.5rem !important; - } - .p-xl-3 { - padding: 1rem !important; - } - .p-xl-4 { - padding: 1.5rem !important; - } - .p-xl-5 { - padding: 3rem !important; - } - .px-xl-0 { - padding-right: 0 !important; - padding-left: 0 !important; - } - .px-xl-1 { - padding-right: 0.25rem !important; - padding-left: 0.25rem !important; - } - .px-xl-2 { - padding-right: 0.5rem !important; - padding-left: 0.5rem !important; - } - .px-xl-3 { - padding-right: 1rem !important; - padding-left: 1rem !important; - } - .px-xl-4 { - padding-right: 1.5rem !important; - padding-left: 1.5rem !important; - } - .px-xl-5 { - padding-right: 3rem !important; - padding-left: 3rem !important; - } - .py-xl-0 { - padding-top: 0 !important; - padding-bottom: 0 !important; - } - .py-xl-1 { - padding-top: 0.25rem !important; - padding-bottom: 0.25rem !important; - } - .py-xl-2 { - padding-top: 0.5rem !important; - padding-bottom: 0.5rem !important; - } - .py-xl-3 { - padding-top: 1rem !important; - padding-bottom: 1rem !important; - } - .py-xl-4 { - padding-top: 1.5rem !important; - padding-bottom: 1.5rem !important; - } - .py-xl-5 { - padding-top: 3rem !important; - padding-bottom: 3rem !important; - } - .pt-xl-0 { - padding-top: 0 !important; - } - .pt-xl-1 { - padding-top: 0.25rem !important; - } - .pt-xl-2 { - padding-top: 0.5rem !important; - } - .pt-xl-3 { - padding-top: 1rem !important; - } - .pt-xl-4 { - padding-top: 1.5rem !important; - } - .pt-xl-5 { - padding-top: 3rem !important; - } - .pe-xl-0 { - padding-right: 0 !important; - } - .pe-xl-1 { - padding-right: 0.25rem !important; - } - .pe-xl-2 { - padding-right: 0.5rem !important; - } - .pe-xl-3 { - padding-right: 1rem !important; - } - .pe-xl-4 { - padding-right: 1.5rem !important; - } - .pe-xl-5 { - padding-right: 3rem !important; - } - .pb-xl-0 { - padding-bottom: 0 !important; - } - .pb-xl-1 { - padding-bottom: 0.25rem !important; - } - .pb-xl-2 { - padding-bottom: 0.5rem !important; - } - .pb-xl-3 { - padding-bottom: 1rem !important; - } - .pb-xl-4 { - padding-bottom: 1.5rem !important; - } - .pb-xl-5 { - padding-bottom: 3rem !important; - } - .ps-xl-0 { - padding-left: 0 !important; - } - .ps-xl-1 { - padding-left: 0.25rem !important; - } - .ps-xl-2 { - padding-left: 0.5rem !important; - } - .ps-xl-3 { - padding-left: 1rem !important; - } - .ps-xl-4 { - padding-left: 1.5rem !important; - } - .ps-xl-5 { - padding-left: 3rem !important; - } - .gap-xl-0 { - gap: 0 !important; - } - .gap-xl-1 { - gap: 0.25rem !important; - } - .gap-xl-2 { - gap: 0.5rem !important; - } - .gap-xl-3 { - gap: 1rem !important; - } - .gap-xl-4 { - gap: 1.5rem !important; - } - .gap-xl-5 { - gap: 3rem !important; - } - .row-gap-xl-0 { - row-gap: 0 !important; - } - .row-gap-xl-1 { - row-gap: 0.25rem !important; - } - .row-gap-xl-2 { - row-gap: 0.5rem !important; - } - .row-gap-xl-3 { - row-gap: 1rem !important; - } - .row-gap-xl-4 { - row-gap: 1.5rem !important; - } - .row-gap-xl-5 { - row-gap: 3rem !important; - } - .column-gap-xl-0 { - -moz-column-gap: 0 !important; - column-gap: 0 !important; - } - .column-gap-xl-1 { - -moz-column-gap: 0.25rem !important; - column-gap: 0.25rem !important; - } - .column-gap-xl-2 { - -moz-column-gap: 0.5rem !important; - column-gap: 0.5rem !important; - } - .column-gap-xl-3 { - -moz-column-gap: 1rem !important; - column-gap: 1rem !important; - } - .column-gap-xl-4 { - -moz-column-gap: 1.5rem !important; - column-gap: 1.5rem !important; - } - .column-gap-xl-5 { - -moz-column-gap: 3rem !important; - column-gap: 3rem !important; - } - .text-xl-start { - text-align: left !important; - } - .text-xl-end { - text-align: right !important; - } - .text-xl-center { - text-align: center !important; - } -} -@media (min-width: 1400px) { - .float-xxl-start { - float: left !important; - } - .float-xxl-end { - float: right !important; - } - .float-xxl-none { - float: none !important; - } - .object-fit-xxl-contain { - -o-object-fit: contain !important; - object-fit: contain !important; - } - .object-fit-xxl-cover { - -o-object-fit: cover !important; - object-fit: cover !important; - } - .object-fit-xxl-fill { - -o-object-fit: fill !important; - object-fit: fill !important; - } - .object-fit-xxl-scale { - -o-object-fit: scale-down !important; - object-fit: scale-down !important; - } - .object-fit-xxl-none { - -o-object-fit: none !important; - object-fit: none !important; - } - .d-xxl-inline { - display: inline !important; - } - .d-xxl-inline-block { - display: inline-block !important; - } - .d-xxl-block { - display: block !important; - } - .d-xxl-grid { - display: grid !important; - } - .d-xxl-inline-grid { - display: inline-grid !important; - } - .d-xxl-table { - display: table !important; - } - .d-xxl-table-row { - display: table-row !important; - } - .d-xxl-table-cell { - display: table-cell !important; - } - .d-xxl-flex { - display: flex !important; - } - .d-xxl-inline-flex { - display: inline-flex !important; - } - .d-xxl-none { - display: none !important; - } - .flex-xxl-fill { - flex: 1 1 auto !important; - } - .flex-xxl-row { - flex-direction: row !important; - } - .flex-xxl-column { - flex-direction: column !important; - } - .flex-xxl-row-reverse { - flex-direction: row-reverse !important; - } - .flex-xxl-column-reverse { - flex-direction: column-reverse !important; - } - .flex-xxl-grow-0 { - flex-grow: 0 !important; - } - .flex-xxl-grow-1 { - flex-grow: 1 !important; - } - .flex-xxl-shrink-0 { - flex-shrink: 0 !important; - } - .flex-xxl-shrink-1 { - flex-shrink: 1 !important; - } - .flex-xxl-wrap { - flex-wrap: wrap !important; - } - .flex-xxl-nowrap { - flex-wrap: nowrap !important; - } - .flex-xxl-wrap-reverse { - flex-wrap: wrap-reverse !important; - } - .justify-content-xxl-start { - justify-content: flex-start !important; - } - .justify-content-xxl-end { - justify-content: flex-end !important; - } - .justify-content-xxl-center { - justify-content: center !important; - } - .justify-content-xxl-between { - justify-content: space-between !important; - } - .justify-content-xxl-around { - justify-content: space-around !important; - } - .justify-content-xxl-evenly { - justify-content: space-evenly !important; - } - .align-items-xxl-start { - align-items: flex-start !important; - } - .align-items-xxl-end { - align-items: flex-end !important; - } - .align-items-xxl-center { - align-items: center !important; - } - .align-items-xxl-baseline { - align-items: baseline !important; - } - .align-items-xxl-stretch { - align-items: stretch !important; - } - .align-content-xxl-start { - align-content: flex-start !important; - } - .align-content-xxl-end { - align-content: flex-end !important; - } - .align-content-xxl-center { - align-content: center !important; - } - .align-content-xxl-between { - align-content: space-between !important; - } - .align-content-xxl-around { - align-content: space-around !important; - } - .align-content-xxl-stretch { - align-content: stretch !important; - } - .align-self-xxl-auto { - align-self: auto !important; - } - .align-self-xxl-start { - align-self: flex-start !important; - } - .align-self-xxl-end { - align-self: flex-end !important; - } - .align-self-xxl-center { - align-self: center !important; - } - .align-self-xxl-baseline { - align-self: baseline !important; - } - .align-self-xxl-stretch { - align-self: stretch !important; - } - .order-xxl-first { - order: -1 !important; - } - .order-xxl-0 { - order: 0 !important; - } - .order-xxl-1 { - order: 1 !important; - } - .order-xxl-2 { - order: 2 !important; - } - .order-xxl-3 { - order: 3 !important; - } - .order-xxl-4 { - order: 4 !important; - } - .order-xxl-5 { - order: 5 !important; - } - .order-xxl-last { - order: 6 !important; - } - .m-xxl-0 { - margin: 0 !important; - } - .m-xxl-1 { - margin: 0.25rem !important; - } - .m-xxl-2 { - margin: 0.5rem !important; - } - .m-xxl-3 { - margin: 1rem !important; - } - .m-xxl-4 { - margin: 1.5rem !important; - } - .m-xxl-5 { - margin: 3rem !important; - } - .m-xxl-auto { - margin: auto !important; - } - .mx-xxl-0 { - margin-right: 0 !important; - margin-left: 0 !important; - } - .mx-xxl-1 { - margin-right: 0.25rem !important; - margin-left: 0.25rem !important; - } - .mx-xxl-2 { - margin-right: 0.5rem !important; - margin-left: 0.5rem !important; - } - .mx-xxl-3 { - margin-right: 1rem !important; - margin-left: 1rem !important; - } - .mx-xxl-4 { - margin-right: 1.5rem !important; - margin-left: 1.5rem !important; - } - .mx-xxl-5 { - margin-right: 3rem !important; - margin-left: 3rem !important; - } - .mx-xxl-auto { - margin-right: auto !important; - margin-left: auto !important; - } - .my-xxl-0 { - margin-top: 0 !important; - margin-bottom: 0 !important; - } - .my-xxl-1 { - margin-top: 0.25rem !important; - margin-bottom: 0.25rem !important; - } - .my-xxl-2 { - margin-top: 0.5rem !important; - margin-bottom: 0.5rem !important; - } - .my-xxl-3 { - margin-top: 1rem !important; - margin-bottom: 1rem !important; - } - .my-xxl-4 { - margin-top: 1.5rem !important; - margin-bottom: 1.5rem !important; - } - .my-xxl-5 { - margin-top: 3rem !important; - margin-bottom: 3rem !important; - } - .my-xxl-auto { - margin-top: auto !important; - margin-bottom: auto !important; - } - .mt-xxl-0 { - margin-top: 0 !important; - } - .mt-xxl-1 { - margin-top: 0.25rem !important; - } - .mt-xxl-2 { - margin-top: 0.5rem !important; - } - .mt-xxl-3 { - margin-top: 1rem !important; - } - .mt-xxl-4 { - margin-top: 1.5rem !important; - } - .mt-xxl-5 { - margin-top: 3rem !important; - } - .mt-xxl-auto { - margin-top: auto !important; - } - .me-xxl-0 { - margin-right: 0 !important; - } - .me-xxl-1 { - margin-right: 0.25rem !important; - } - .me-xxl-2 { - margin-right: 0.5rem !important; - } - .me-xxl-3 { - margin-right: 1rem !important; - } - .me-xxl-4 { - margin-right: 1.5rem !important; - } - .me-xxl-5 { - margin-right: 3rem !important; - } - .me-xxl-auto { - margin-right: auto !important; - } - .mb-xxl-0 { - margin-bottom: 0 !important; - } - .mb-xxl-1 { - margin-bottom: 0.25rem !important; - } - .mb-xxl-2 { - margin-bottom: 0.5rem !important; - } - .mb-xxl-3 { - margin-bottom: 1rem !important; - } - .mb-xxl-4 { - margin-bottom: 1.5rem !important; - } - .mb-xxl-5 { - margin-bottom: 3rem !important; - } - .mb-xxl-auto { - margin-bottom: auto !important; - } - .ms-xxl-0 { - margin-left: 0 !important; - } - .ms-xxl-1 { - margin-left: 0.25rem !important; - } - .ms-xxl-2 { - margin-left: 0.5rem !important; - } - .ms-xxl-3 { - margin-left: 1rem !important; - } - .ms-xxl-4 { - margin-left: 1.5rem !important; - } - .ms-xxl-5 { - margin-left: 3rem !important; - } - .ms-xxl-auto { - margin-left: auto !important; - } - .p-xxl-0 { - padding: 0 !important; - } - .p-xxl-1 { - padding: 0.25rem !important; - } - .p-xxl-2 { - padding: 0.5rem !important; - } - .p-xxl-3 { - padding: 1rem !important; - } - .p-xxl-4 { - padding: 1.5rem !important; - } - .p-xxl-5 { - padding: 3rem !important; - } - .px-xxl-0 { - padding-right: 0 !important; - padding-left: 0 !important; - } - .px-xxl-1 { - padding-right: 0.25rem !important; - padding-left: 0.25rem !important; - } - .px-xxl-2 { - padding-right: 0.5rem !important; - padding-left: 0.5rem !important; - } - .px-xxl-3 { - padding-right: 1rem !important; - padding-left: 1rem !important; - } - .px-xxl-4 { - padding-right: 1.5rem !important; - padding-left: 1.5rem !important; - } - .px-xxl-5 { - padding-right: 3rem !important; - padding-left: 3rem !important; - } - .py-xxl-0 { - padding-top: 0 !important; - padding-bottom: 0 !important; - } - .py-xxl-1 { - padding-top: 0.25rem !important; - padding-bottom: 0.25rem !important; - } - .py-xxl-2 { - padding-top: 0.5rem !important; - padding-bottom: 0.5rem !important; - } - .py-xxl-3 { - padding-top: 1rem !important; - padding-bottom: 1rem !important; - } - .py-xxl-4 { - padding-top: 1.5rem !important; - padding-bottom: 1.5rem !important; - } - .py-xxl-5 { - padding-top: 3rem !important; - padding-bottom: 3rem !important; - } - .pt-xxl-0 { - padding-top: 0 !important; - } - .pt-xxl-1 { - padding-top: 0.25rem !important; - } - .pt-xxl-2 { - padding-top: 0.5rem !important; - } - .pt-xxl-3 { - padding-top: 1rem !important; - } - .pt-xxl-4 { - padding-top: 1.5rem !important; - } - .pt-xxl-5 { - padding-top: 3rem !important; - } - .pe-xxl-0 { - padding-right: 0 !important; - } - .pe-xxl-1 { - padding-right: 0.25rem !important; - } - .pe-xxl-2 { - padding-right: 0.5rem !important; - } - .pe-xxl-3 { - padding-right: 1rem !important; - } - .pe-xxl-4 { - padding-right: 1.5rem !important; - } - .pe-xxl-5 { - padding-right: 3rem !important; - } - .pb-xxl-0 { - padding-bottom: 0 !important; - } - .pb-xxl-1 { - padding-bottom: 0.25rem !important; - } - .pb-xxl-2 { - padding-bottom: 0.5rem !important; - } - .pb-xxl-3 { - padding-bottom: 1rem !important; - } - .pb-xxl-4 { - padding-bottom: 1.5rem !important; - } - .pb-xxl-5 { - padding-bottom: 3rem !important; - } - .ps-xxl-0 { - padding-left: 0 !important; - } - .ps-xxl-1 { - padding-left: 0.25rem !important; - } - .ps-xxl-2 { - padding-left: 0.5rem !important; - } - .ps-xxl-3 { - padding-left: 1rem !important; - } - .ps-xxl-4 { - padding-left: 1.5rem !important; - } - .ps-xxl-5 { - padding-left: 3rem !important; - } - .gap-xxl-0 { - gap: 0 !important; - } - .gap-xxl-1 { - gap: 0.25rem !important; - } - .gap-xxl-2 { - gap: 0.5rem !important; - } - .gap-xxl-3 { - gap: 1rem !important; - } - .gap-xxl-4 { - gap: 1.5rem !important; - } - .gap-xxl-5 { - gap: 3rem !important; - } - .row-gap-xxl-0 { - row-gap: 0 !important; - } - .row-gap-xxl-1 { - row-gap: 0.25rem !important; - } - .row-gap-xxl-2 { - row-gap: 0.5rem !important; - } - .row-gap-xxl-3 { - row-gap: 1rem !important; - } - .row-gap-xxl-4 { - row-gap: 1.5rem !important; - } - .row-gap-xxl-5 { - row-gap: 3rem !important; - } - .column-gap-xxl-0 { - -moz-column-gap: 0 !important; - column-gap: 0 !important; - } - .column-gap-xxl-1 { - -moz-column-gap: 0.25rem !important; - column-gap: 0.25rem !important; - } - .column-gap-xxl-2 { - -moz-column-gap: 0.5rem !important; - column-gap: 0.5rem !important; - } - .column-gap-xxl-3 { - -moz-column-gap: 1rem !important; - column-gap: 1rem !important; - } - .column-gap-xxl-4 { - -moz-column-gap: 1.5rem !important; - column-gap: 1.5rem !important; - } - .column-gap-xxl-5 { - -moz-column-gap: 3rem !important; - column-gap: 3rem !important; - } - .text-xxl-start { - text-align: left !important; - } - .text-xxl-end { - text-align: right !important; - } - .text-xxl-center { - text-align: center !important; - } -} -@media (min-width: 1200px) { - .fs-1 { - font-size: 2.5rem !important; - } - .fs-2 { - font-size: 2rem !important; - } - .fs-3 { - font-size: 1.75rem !important; - } - .fs-4 { - font-size: 1.5rem !important; - } -} -@media print { - .d-print-inline { - display: inline !important; - } - .d-print-inline-block { - display: inline-block !important; - } - .d-print-block { - display: block !important; - } - .d-print-grid { - display: grid !important; - } - .d-print-inline-grid { - display: inline-grid !important; - } - .d-print-table { - display: table !important; - } - .d-print-table-row { - display: table-row !important; - } - .d-print-table-cell { - display: table-cell !important; - } - .d-print-flex { - display: flex !important; - } - .d-print-inline-flex { - display: inline-flex !important; - } - .d-print-none { - display: none !important; - } -} - -/*# sourceMappingURL=bootstrap.css.map */ \ No newline at end of file diff --git a/EnvelopeGenerator.ReceiverUI/wwwroot/css/bootstrap/bootstrap.min.css b/EnvelopeGenerator.ReceiverUI/wwwroot/css/bootstrap/bootstrap.min.css deleted file mode 100644 index a89937cc..00000000 --- a/EnvelopeGenerator.ReceiverUI/wwwroot/css/bootstrap/bootstrap.min.css +++ /dev/null @@ -1,6 +0,0 @@ -@charset "UTF-8";/*! - * Bootstrap v5.3.1 (https://getbootstrap.com/) - * Copyright 2011-2023 The Bootstrap Authors - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) - */:root,[data-bs-theme=light]{--bs-blue:#0d6efd;--bs-indigo:#6610f2;--bs-purple:#6f42c1;--bs-pink:#d63384;--bs-red:#dc3545;--bs-orange:#fd7e14;--bs-yellow:#ffc107;--bs-green:#198754;--bs-teal:#20c997;--bs-cyan:#0dcaf0;--bs-black:#000;--bs-white:#fff;--bs-gray:#6c757d;--bs-gray-dark:#343a40;--bs-gray-100:#f8f9fa;--bs-gray-200:#e9ecef;--bs-gray-300:#dee2e6;--bs-gray-400:#ced4da;--bs-gray-500:#adb5bd;--bs-gray-600:#6c757d;--bs-gray-700:#495057;--bs-gray-800:#343a40;--bs-gray-900:#212529;--bs-primary:#0d6efd;--bs-secondary:#6c757d;--bs-success:#198754;--bs-info:#0dcaf0;--bs-warning:#ffc107;--bs-danger:#dc3545;--bs-light:#f8f9fa;--bs-dark:#212529;--bs-primary-rgb:13,110,253;--bs-secondary-rgb:108,117,125;--bs-success-rgb:25,135,84;--bs-info-rgb:13,202,240;--bs-warning-rgb:255,193,7;--bs-danger-rgb:220,53,69;--bs-light-rgb:248,249,250;--bs-dark-rgb:33,37,41;--bs-primary-text-emphasis:#052c65;--bs-secondary-text-emphasis:#2b2f32;--bs-success-text-emphasis:#0a3622;--bs-info-text-emphasis:#055160;--bs-warning-text-emphasis:#664d03;--bs-danger-text-emphasis:#58151c;--bs-light-text-emphasis:#495057;--bs-dark-text-emphasis:#495057;--bs-primary-bg-subtle:#cfe2ff;--bs-secondary-bg-subtle:#e2e3e5;--bs-success-bg-subtle:#d1e7dd;--bs-info-bg-subtle:#cff4fc;--bs-warning-bg-subtle:#fff3cd;--bs-danger-bg-subtle:#f8d7da;--bs-light-bg-subtle:#fcfcfd;--bs-dark-bg-subtle:#ced4da;--bs-primary-border-subtle:#9ec5fe;--bs-secondary-border-subtle:#c4c8cb;--bs-success-border-subtle:#a3cfbb;--bs-info-border-subtle:#9eeaf9;--bs-warning-border-subtle:#ffe69c;--bs-danger-border-subtle:#f1aeb5;--bs-light-border-subtle:#e9ecef;--bs-dark-border-subtle:#adb5bd;--bs-white-rgb:255,255,255;--bs-black-rgb:0,0,0;--bs-font-sans-serif:system-ui,-apple-system,"Segoe UI",Roboto,"Helvetica Neue","Noto Sans","Liberation Sans",Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--bs-font-monospace:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--bs-gradient:linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0));--bs-body-font-family:var(--bs-font-sans-serif);--bs-body-font-size:1rem;--bs-body-font-weight:400;--bs-body-line-height:1.5;--bs-body-color:#212529;--bs-body-color-rgb:33,37,41;--bs-body-bg:#fff;--bs-body-bg-rgb:255,255,255;--bs-emphasis-color:#000;--bs-emphasis-color-rgb:0,0,0;--bs-secondary-color:rgba(33, 37, 41, 0.75);--bs-secondary-color-rgb:33,37,41;--bs-secondary-bg:#e9ecef;--bs-secondary-bg-rgb:233,236,239;--bs-tertiary-color:rgba(33, 37, 41, 0.5);--bs-tertiary-color-rgb:33,37,41;--bs-tertiary-bg:#f8f9fa;--bs-tertiary-bg-rgb:248,249,250;--bs-heading-color:inherit;--bs-link-color:#0d6efd;--bs-link-color-rgb:13,110,253;--bs-link-decoration:underline;--bs-link-hover-color:#0a58ca;--bs-link-hover-color-rgb:10,88,202;--bs-code-color:#d63384;--bs-highlight-bg:#fff3cd;--bs-border-width:1px;--bs-border-style:solid;--bs-border-color:#dee2e6;--bs-border-color-translucent:rgba(0, 0, 0, 0.175);--bs-border-radius:0.375rem;--bs-border-radius-sm:0.25rem;--bs-border-radius-lg:0.5rem;--bs-border-radius-xl:1rem;--bs-border-radius-xxl:2rem;--bs-border-radius-2xl:var(--bs-border-radius-xxl);--bs-border-radius-pill:50rem;--bs-box-shadow:0 0.5rem 1rem rgba(0, 0, 0, 0.15);--bs-box-shadow-sm:0 0.125rem 0.25rem rgba(0, 0, 0, 0.075);--bs-box-shadow-lg:0 1rem 3rem rgba(0, 0, 0, 0.175);--bs-box-shadow-inset:inset 0 1px 2px rgba(0, 0, 0, 0.075);--bs-focus-ring-width:0.25rem;--bs-focus-ring-opacity:0.25;--bs-focus-ring-color:rgba(13, 110, 253, 0.25);--bs-form-valid-color:#198754;--bs-form-valid-border-color:#198754;--bs-form-invalid-color:#dc3545;--bs-form-invalid-border-color:#dc3545}[data-bs-theme=dark]{color-scheme:dark;--bs-body-color:#dee2e6;--bs-body-color-rgb:222,226,230;--bs-body-bg:#212529;--bs-body-bg-rgb:33,37,41;--bs-emphasis-color:#fff;--bs-emphasis-color-rgb:255,255,255;--bs-secondary-color:rgba(222, 226, 230, 0.75);--bs-secondary-color-rgb:222,226,230;--bs-secondary-bg:#343a40;--bs-secondary-bg-rgb:52,58,64;--bs-tertiary-color:rgba(222, 226, 230, 0.5);--bs-tertiary-color-rgb:222,226,230;--bs-tertiary-bg:#2b3035;--bs-tertiary-bg-rgb:43,48,53;--bs-primary-text-emphasis:#6ea8fe;--bs-secondary-text-emphasis:#a7acb1;--bs-success-text-emphasis:#75b798;--bs-info-text-emphasis:#6edff6;--bs-warning-text-emphasis:#ffda6a;--bs-danger-text-emphasis:#ea868f;--bs-light-text-emphasis:#f8f9fa;--bs-dark-text-emphasis:#dee2e6;--bs-primary-bg-subtle:#031633;--bs-secondary-bg-subtle:#161719;--bs-success-bg-subtle:#051b11;--bs-info-bg-subtle:#032830;--bs-warning-bg-subtle:#332701;--bs-danger-bg-subtle:#2c0b0e;--bs-light-bg-subtle:#343a40;--bs-dark-bg-subtle:#1a1d20;--bs-primary-border-subtle:#084298;--bs-secondary-border-subtle:#41464b;--bs-success-border-subtle:#0f5132;--bs-info-border-subtle:#087990;--bs-warning-border-subtle:#997404;--bs-danger-border-subtle:#842029;--bs-light-border-subtle:#495057;--bs-dark-border-subtle:#343a40;--bs-heading-color:inherit;--bs-link-color:#6ea8fe;--bs-link-hover-color:#8bb9fe;--bs-link-color-rgb:110,168,254;--bs-link-hover-color-rgb:139,185,254;--bs-code-color:#e685b5;--bs-border-color:#495057;--bs-border-color-translucent:rgba(255, 255, 255, 0.15);--bs-form-valid-color:#75b798;--bs-form-valid-border-color:#75b798;--bs-form-invalid-color:#ea868f;--bs-form-invalid-border-color:#ea868f}*,::after,::before{box-sizing:border-box}@media (prefers-reduced-motion:no-preference){:root{scroll-behavior:smooth}}body{margin:0;font-family:var(--bs-body-font-family);font-size:var(--bs-body-font-size);font-weight:var(--bs-body-font-weight);line-height:var(--bs-body-line-height);color:var(--bs-body-color);text-align:var(--bs-body-text-align);background-color:var(--bs-body-bg);-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:transparent}hr{margin:1rem 0;color:inherit;border:0;border-top:var(--bs-border-width) solid;opacity:.25}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem;font-weight:500;line-height:1.2;color:var(--bs-heading-color)}.h1,h1{font-size:calc(1.375rem + 1.5vw)}@media (min-width:1200px){.h1,h1{font-size:2.5rem}}.h2,h2{font-size:calc(1.325rem + .9vw)}@media (min-width:1200px){.h2,h2{font-size:2rem}}.h3,h3{font-size:calc(1.3rem + .6vw)}@media (min-width:1200px){.h3,h3{font-size:1.75rem}}.h4,h4{font-size:calc(1.275rem + .3vw)}@media (min-width:1200px){.h4,h4{font-size:1.5rem}}.h5,h5{font-size:1.25rem}.h6,h6{font-size:1rem}p{margin-top:0;margin-bottom:1rem}abbr[title]{-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none}address{margin-bottom:1rem;font-style:normal;line-height:inherit}ol,ul{padding-left:2rem}dl,ol,ul{margin-top:0;margin-bottom:1rem}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}.small,small{font-size:.875em}.mark,mark{padding:.1875em;background-color:var(--bs-highlight-bg)}sub,sup{position:relative;font-size:.75em;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:rgba(var(--bs-link-color-rgb),var(--bs-link-opacity,1));text-decoration:underline}a:hover{--bs-link-color-rgb:var(--bs-link-hover-color-rgb)}a:not([href]):not([class]),a:not([href]):not([class]):hover{color:inherit;text-decoration:none}code,kbd,pre,samp{font-family:var(--bs-font-monospace);font-size:1em}pre{display:block;margin-top:0;margin-bottom:1rem;overflow:auto;font-size:.875em}pre code{font-size:inherit;color:inherit;word-break:normal}code{font-size:.875em;color:var(--bs-code-color);word-wrap:break-word}a>code{color:inherit}kbd{padding:.1875rem .375rem;font-size:.875em;color:var(--bs-body-bg);background-color:var(--bs-body-color);border-radius:.25rem}kbd kbd{padding:0;font-size:1em}figure{margin:0 0 1rem}img,svg{vertical-align:middle}table{caption-side:bottom;border-collapse:collapse}caption{padding-top:.5rem;padding-bottom:.5rem;color:var(--bs-secondary-color);text-align:left}th{text-align:inherit;text-align:-webkit-match-parent}tbody,td,tfoot,th,thead,tr{border-color:inherit;border-style:solid;border-width:0}label{display:inline-block}button{border-radius:0}button:focus:not(:focus-visible){outline:0}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,select{text-transform:none}[role=button]{cursor:pointer}select{word-wrap:normal}select:disabled{opacity:1}[list]:not([type=date]):not([type=datetime-local]):not([type=month]):not([type=week]):not([type=time])::-webkit-calendar-picker-indicator{display:none!important}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled),button:not(:disabled){cursor:pointer}::-moz-focus-inner{padding:0;border-style:none}textarea{resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{float:left;width:100%;padding:0;margin-bottom:.5rem;font-size:calc(1.275rem + .3vw);line-height:inherit}@media (min-width:1200px){legend{font-size:1.5rem}}legend+*{clear:left}::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-fields-wrapper,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-minute,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-text,::-webkit-datetime-edit-year-field{padding:0}::-webkit-inner-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-color-swatch-wrapper{padding:0}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}::file-selector-button{font:inherit;-webkit-appearance:button}output{display:inline-block}iframe{border:0}summary{display:list-item;cursor:pointer}progress{vertical-align:baseline}[hidden]{display:none!important}.lead{font-size:1.25rem;font-weight:300}.display-1{font-size:calc(1.625rem + 4.5vw);font-weight:300;line-height:1.2}@media (min-width:1200px){.display-1{font-size:5rem}}.display-2{font-size:calc(1.575rem + 3.9vw);font-weight:300;line-height:1.2}@media (min-width:1200px){.display-2{font-size:4.5rem}}.display-3{font-size:calc(1.525rem + 3.3vw);font-weight:300;line-height:1.2}@media (min-width:1200px){.display-3{font-size:4rem}}.display-4{font-size:calc(1.475rem + 2.7vw);font-weight:300;line-height:1.2}@media (min-width:1200px){.display-4{font-size:3.5rem}}.display-5{font-size:calc(1.425rem + 2.1vw);font-weight:300;line-height:1.2}@media (min-width:1200px){.display-5{font-size:3rem}}.display-6{font-size:calc(1.375rem + 1.5vw);font-weight:300;line-height:1.2}@media (min-width:1200px){.display-6{font-size:2.5rem}}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none}.list-inline-item{display:inline-block}.list-inline-item:not(:last-child){margin-right:.5rem}.initialism{font-size:.875em;text-transform:uppercase}.blockquote{margin-bottom:1rem;font-size:1.25rem}.blockquote>:last-child{margin-bottom:0}.blockquote-footer{margin-top:-1rem;margin-bottom:1rem;font-size:.875em;color:#6c757d}.blockquote-footer::before{content:"— "}.img-fluid{max-width:100%;height:auto}.img-thumbnail{padding:.25rem;background-color:var(--bs-body-bg);border:var(--bs-border-width) solid var(--bs-border-color);border-radius:var(--bs-border-radius);max-width:100%;height:auto}.figure{display:inline-block}.figure-img{margin-bottom:.5rem;line-height:1}.figure-caption{font-size:.875em;color:var(--bs-secondary-color)}.container,.container-fluid,.container-lg,.container-md,.container-sm,.container-xl,.container-xxl{--bs-gutter-x:1.5rem;--bs-gutter-y:0;width:100%;padding-right:calc(var(--bs-gutter-x) * .5);padding-left:calc(var(--bs-gutter-x) * .5);margin-right:auto;margin-left:auto}@media (min-width:576px){.container,.container-sm{max-width:540px}}@media (min-width:768px){.container,.container-md,.container-sm{max-width:720px}}@media (min-width:992px){.container,.container-lg,.container-md,.container-sm{max-width:960px}}@media (min-width:1200px){.container,.container-lg,.container-md,.container-sm,.container-xl{max-width:1140px}}@media (min-width:1400px){.container,.container-lg,.container-md,.container-sm,.container-xl,.container-xxl{max-width:1320px}}:root{--bs-breakpoint-xs:0;--bs-breakpoint-sm:576px;--bs-breakpoint-md:768px;--bs-breakpoint-lg:992px;--bs-breakpoint-xl:1200px;--bs-breakpoint-xxl:1400px}.row{--bs-gutter-x:1.5rem;--bs-gutter-y:0;display:flex;flex-wrap:wrap;margin-top:calc(-1 * var(--bs-gutter-y));margin-right:calc(-.5 * var(--bs-gutter-x));margin-left:calc(-.5 * var(--bs-gutter-x))}.row>*{flex-shrink:0;width:100%;max-width:100%;padding-right:calc(var(--bs-gutter-x) * .5);padding-left:calc(var(--bs-gutter-x) * .5);margin-top:var(--bs-gutter-y)}.col{flex:1 0 0%}.row-cols-auto>*{flex:0 0 auto;width:auto}.row-cols-1>*{flex:0 0 auto;width:100%}.row-cols-2>*{flex:0 0 auto;width:50%}.row-cols-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-4>*{flex:0 0 auto;width:25%}.row-cols-5>*{flex:0 0 auto;width:20%}.row-cols-6>*{flex:0 0 auto;width:16.6666666667%}.col-auto{flex:0 0 auto;width:auto}.col-1{flex:0 0 auto;width:8.33333333%}.col-2{flex:0 0 auto;width:16.66666667%}.col-3{flex:0 0 auto;width:25%}.col-4{flex:0 0 auto;width:33.33333333%}.col-5{flex:0 0 auto;width:41.66666667%}.col-6{flex:0 0 auto;width:50%}.col-7{flex:0 0 auto;width:58.33333333%}.col-8{flex:0 0 auto;width:66.66666667%}.col-9{flex:0 0 auto;width:75%}.col-10{flex:0 0 auto;width:83.33333333%}.col-11{flex:0 0 auto;width:91.66666667%}.col-12{flex:0 0 auto;width:100%}.offset-1{margin-left:8.33333333%}.offset-2{margin-left:16.66666667%}.offset-3{margin-left:25%}.offset-4{margin-left:33.33333333%}.offset-5{margin-left:41.66666667%}.offset-6{margin-left:50%}.offset-7{margin-left:58.33333333%}.offset-8{margin-left:66.66666667%}.offset-9{margin-left:75%}.offset-10{margin-left:83.33333333%}.offset-11{margin-left:91.66666667%}.g-0,.gx-0{--bs-gutter-x:0}.g-0,.gy-0{--bs-gutter-y:0}.g-1,.gx-1{--bs-gutter-x:0.25rem}.g-1,.gy-1{--bs-gutter-y:0.25rem}.g-2,.gx-2{--bs-gutter-x:0.5rem}.g-2,.gy-2{--bs-gutter-y:0.5rem}.g-3,.gx-3{--bs-gutter-x:1rem}.g-3,.gy-3{--bs-gutter-y:1rem}.g-4,.gx-4{--bs-gutter-x:1.5rem}.g-4,.gy-4{--bs-gutter-y:1.5rem}.g-5,.gx-5{--bs-gutter-x:3rem}.g-5,.gy-5{--bs-gutter-y:3rem}@media (min-width:576px){.col-sm{flex:1 0 0%}.row-cols-sm-auto>*{flex:0 0 auto;width:auto}.row-cols-sm-1>*{flex:0 0 auto;width:100%}.row-cols-sm-2>*{flex:0 0 auto;width:50%}.row-cols-sm-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-sm-4>*{flex:0 0 auto;width:25%}.row-cols-sm-5>*{flex:0 0 auto;width:20%}.row-cols-sm-6>*{flex:0 0 auto;width:16.6666666667%}.col-sm-auto{flex:0 0 auto;width:auto}.col-sm-1{flex:0 0 auto;width:8.33333333%}.col-sm-2{flex:0 0 auto;width:16.66666667%}.col-sm-3{flex:0 0 auto;width:25%}.col-sm-4{flex:0 0 auto;width:33.33333333%}.col-sm-5{flex:0 0 auto;width:41.66666667%}.col-sm-6{flex:0 0 auto;width:50%}.col-sm-7{flex:0 0 auto;width:58.33333333%}.col-sm-8{flex:0 0 auto;width:66.66666667%}.col-sm-9{flex:0 0 auto;width:75%}.col-sm-10{flex:0 0 auto;width:83.33333333%}.col-sm-11{flex:0 0 auto;width:91.66666667%}.col-sm-12{flex:0 0 auto;width:100%}.offset-sm-0{margin-left:0}.offset-sm-1{margin-left:8.33333333%}.offset-sm-2{margin-left:16.66666667%}.offset-sm-3{margin-left:25%}.offset-sm-4{margin-left:33.33333333%}.offset-sm-5{margin-left:41.66666667%}.offset-sm-6{margin-left:50%}.offset-sm-7{margin-left:58.33333333%}.offset-sm-8{margin-left:66.66666667%}.offset-sm-9{margin-left:75%}.offset-sm-10{margin-left:83.33333333%}.offset-sm-11{margin-left:91.66666667%}.g-sm-0,.gx-sm-0{--bs-gutter-x:0}.g-sm-0,.gy-sm-0{--bs-gutter-y:0}.g-sm-1,.gx-sm-1{--bs-gutter-x:0.25rem}.g-sm-1,.gy-sm-1{--bs-gutter-y:0.25rem}.g-sm-2,.gx-sm-2{--bs-gutter-x:0.5rem}.g-sm-2,.gy-sm-2{--bs-gutter-y:0.5rem}.g-sm-3,.gx-sm-3{--bs-gutter-x:1rem}.g-sm-3,.gy-sm-3{--bs-gutter-y:1rem}.g-sm-4,.gx-sm-4{--bs-gutter-x:1.5rem}.g-sm-4,.gy-sm-4{--bs-gutter-y:1.5rem}.g-sm-5,.gx-sm-5{--bs-gutter-x:3rem}.g-sm-5,.gy-sm-5{--bs-gutter-y:3rem}}@media (min-width:768px){.col-md{flex:1 0 0%}.row-cols-md-auto>*{flex:0 0 auto;width:auto}.row-cols-md-1>*{flex:0 0 auto;width:100%}.row-cols-md-2>*{flex:0 0 auto;width:50%}.row-cols-md-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-md-4>*{flex:0 0 auto;width:25%}.row-cols-md-5>*{flex:0 0 auto;width:20%}.row-cols-md-6>*{flex:0 0 auto;width:16.6666666667%}.col-md-auto{flex:0 0 auto;width:auto}.col-md-1{flex:0 0 auto;width:8.33333333%}.col-md-2{flex:0 0 auto;width:16.66666667%}.col-md-3{flex:0 0 auto;width:25%}.col-md-4{flex:0 0 auto;width:33.33333333%}.col-md-5{flex:0 0 auto;width:41.66666667%}.col-md-6{flex:0 0 auto;width:50%}.col-md-7{flex:0 0 auto;width:58.33333333%}.col-md-8{flex:0 0 auto;width:66.66666667%}.col-md-9{flex:0 0 auto;width:75%}.col-md-10{flex:0 0 auto;width:83.33333333%}.col-md-11{flex:0 0 auto;width:91.66666667%}.col-md-12{flex:0 0 auto;width:100%}.offset-md-0{margin-left:0}.offset-md-1{margin-left:8.33333333%}.offset-md-2{margin-left:16.66666667%}.offset-md-3{margin-left:25%}.offset-md-4{margin-left:33.33333333%}.offset-md-5{margin-left:41.66666667%}.offset-md-6{margin-left:50%}.offset-md-7{margin-left:58.33333333%}.offset-md-8{margin-left:66.66666667%}.offset-md-9{margin-left:75%}.offset-md-10{margin-left:83.33333333%}.offset-md-11{margin-left:91.66666667%}.g-md-0,.gx-md-0{--bs-gutter-x:0}.g-md-0,.gy-md-0{--bs-gutter-y:0}.g-md-1,.gx-md-1{--bs-gutter-x:0.25rem}.g-md-1,.gy-md-1{--bs-gutter-y:0.25rem}.g-md-2,.gx-md-2{--bs-gutter-x:0.5rem}.g-md-2,.gy-md-2{--bs-gutter-y:0.5rem}.g-md-3,.gx-md-3{--bs-gutter-x:1rem}.g-md-3,.gy-md-3{--bs-gutter-y:1rem}.g-md-4,.gx-md-4{--bs-gutter-x:1.5rem}.g-md-4,.gy-md-4{--bs-gutter-y:1.5rem}.g-md-5,.gx-md-5{--bs-gutter-x:3rem}.g-md-5,.gy-md-5{--bs-gutter-y:3rem}}@media (min-width:992px){.col-lg{flex:1 0 0%}.row-cols-lg-auto>*{flex:0 0 auto;width:auto}.row-cols-lg-1>*{flex:0 0 auto;width:100%}.row-cols-lg-2>*{flex:0 0 auto;width:50%}.row-cols-lg-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-lg-4>*{flex:0 0 auto;width:25%}.row-cols-lg-5>*{flex:0 0 auto;width:20%}.row-cols-lg-6>*{flex:0 0 auto;width:16.6666666667%}.col-lg-auto{flex:0 0 auto;width:auto}.col-lg-1{flex:0 0 auto;width:8.33333333%}.col-lg-2{flex:0 0 auto;width:16.66666667%}.col-lg-3{flex:0 0 auto;width:25%}.col-lg-4{flex:0 0 auto;width:33.33333333%}.col-lg-5{flex:0 0 auto;width:41.66666667%}.col-lg-6{flex:0 0 auto;width:50%}.col-lg-7{flex:0 0 auto;width:58.33333333%}.col-lg-8{flex:0 0 auto;width:66.66666667%}.col-lg-9{flex:0 0 auto;width:75%}.col-lg-10{flex:0 0 auto;width:83.33333333%}.col-lg-11{flex:0 0 auto;width:91.66666667%}.col-lg-12{flex:0 0 auto;width:100%}.offset-lg-0{margin-left:0}.offset-lg-1{margin-left:8.33333333%}.offset-lg-2{margin-left:16.66666667%}.offset-lg-3{margin-left:25%}.offset-lg-4{margin-left:33.33333333%}.offset-lg-5{margin-left:41.66666667%}.offset-lg-6{margin-left:50%}.offset-lg-7{margin-left:58.33333333%}.offset-lg-8{margin-left:66.66666667%}.offset-lg-9{margin-left:75%}.offset-lg-10{margin-left:83.33333333%}.offset-lg-11{margin-left:91.66666667%}.g-lg-0,.gx-lg-0{--bs-gutter-x:0}.g-lg-0,.gy-lg-0{--bs-gutter-y:0}.g-lg-1,.gx-lg-1{--bs-gutter-x:0.25rem}.g-lg-1,.gy-lg-1{--bs-gutter-y:0.25rem}.g-lg-2,.gx-lg-2{--bs-gutter-x:0.5rem}.g-lg-2,.gy-lg-2{--bs-gutter-y:0.5rem}.g-lg-3,.gx-lg-3{--bs-gutter-x:1rem}.g-lg-3,.gy-lg-3{--bs-gutter-y:1rem}.g-lg-4,.gx-lg-4{--bs-gutter-x:1.5rem}.g-lg-4,.gy-lg-4{--bs-gutter-y:1.5rem}.g-lg-5,.gx-lg-5{--bs-gutter-x:3rem}.g-lg-5,.gy-lg-5{--bs-gutter-y:3rem}}@media (min-width:1200px){.col-xl{flex:1 0 0%}.row-cols-xl-auto>*{flex:0 0 auto;width:auto}.row-cols-xl-1>*{flex:0 0 auto;width:100%}.row-cols-xl-2>*{flex:0 0 auto;width:50%}.row-cols-xl-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-xl-4>*{flex:0 0 auto;width:25%}.row-cols-xl-5>*{flex:0 0 auto;width:20%}.row-cols-xl-6>*{flex:0 0 auto;width:16.6666666667%}.col-xl-auto{flex:0 0 auto;width:auto}.col-xl-1{flex:0 0 auto;width:8.33333333%}.col-xl-2{flex:0 0 auto;width:16.66666667%}.col-xl-3{flex:0 0 auto;width:25%}.col-xl-4{flex:0 0 auto;width:33.33333333%}.col-xl-5{flex:0 0 auto;width:41.66666667%}.col-xl-6{flex:0 0 auto;width:50%}.col-xl-7{flex:0 0 auto;width:58.33333333%}.col-xl-8{flex:0 0 auto;width:66.66666667%}.col-xl-9{flex:0 0 auto;width:75%}.col-xl-10{flex:0 0 auto;width:83.33333333%}.col-xl-11{flex:0 0 auto;width:91.66666667%}.col-xl-12{flex:0 0 auto;width:100%}.offset-xl-0{margin-left:0}.offset-xl-1{margin-left:8.33333333%}.offset-xl-2{margin-left:16.66666667%}.offset-xl-3{margin-left:25%}.offset-xl-4{margin-left:33.33333333%}.offset-xl-5{margin-left:41.66666667%}.offset-xl-6{margin-left:50%}.offset-xl-7{margin-left:58.33333333%}.offset-xl-8{margin-left:66.66666667%}.offset-xl-9{margin-left:75%}.offset-xl-10{margin-left:83.33333333%}.offset-xl-11{margin-left:91.66666667%}.g-xl-0,.gx-xl-0{--bs-gutter-x:0}.g-xl-0,.gy-xl-0{--bs-gutter-y:0}.g-xl-1,.gx-xl-1{--bs-gutter-x:0.25rem}.g-xl-1,.gy-xl-1{--bs-gutter-y:0.25rem}.g-xl-2,.gx-xl-2{--bs-gutter-x:0.5rem}.g-xl-2,.gy-xl-2{--bs-gutter-y:0.5rem}.g-xl-3,.gx-xl-3{--bs-gutter-x:1rem}.g-xl-3,.gy-xl-3{--bs-gutter-y:1rem}.g-xl-4,.gx-xl-4{--bs-gutter-x:1.5rem}.g-xl-4,.gy-xl-4{--bs-gutter-y:1.5rem}.g-xl-5,.gx-xl-5{--bs-gutter-x:3rem}.g-xl-5,.gy-xl-5{--bs-gutter-y:3rem}}@media (min-width:1400px){.col-xxl{flex:1 0 0%}.row-cols-xxl-auto>*{flex:0 0 auto;width:auto}.row-cols-xxl-1>*{flex:0 0 auto;width:100%}.row-cols-xxl-2>*{flex:0 0 auto;width:50%}.row-cols-xxl-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-xxl-4>*{flex:0 0 auto;width:25%}.row-cols-xxl-5>*{flex:0 0 auto;width:20%}.row-cols-xxl-6>*{flex:0 0 auto;width:16.6666666667%}.col-xxl-auto{flex:0 0 auto;width:auto}.col-xxl-1{flex:0 0 auto;width:8.33333333%}.col-xxl-2{flex:0 0 auto;width:16.66666667%}.col-xxl-3{flex:0 0 auto;width:25%}.col-xxl-4{flex:0 0 auto;width:33.33333333%}.col-xxl-5{flex:0 0 auto;width:41.66666667%}.col-xxl-6{flex:0 0 auto;width:50%}.col-xxl-7{flex:0 0 auto;width:58.33333333%}.col-xxl-8{flex:0 0 auto;width:66.66666667%}.col-xxl-9{flex:0 0 auto;width:75%}.col-xxl-10{flex:0 0 auto;width:83.33333333%}.col-xxl-11{flex:0 0 auto;width:91.66666667%}.col-xxl-12{flex:0 0 auto;width:100%}.offset-xxl-0{margin-left:0}.offset-xxl-1{margin-left:8.33333333%}.offset-xxl-2{margin-left:16.66666667%}.offset-xxl-3{margin-left:25%}.offset-xxl-4{margin-left:33.33333333%}.offset-xxl-5{margin-left:41.66666667%}.offset-xxl-6{margin-left:50%}.offset-xxl-7{margin-left:58.33333333%}.offset-xxl-8{margin-left:66.66666667%}.offset-xxl-9{margin-left:75%}.offset-xxl-10{margin-left:83.33333333%}.offset-xxl-11{margin-left:91.66666667%}.g-xxl-0,.gx-xxl-0{--bs-gutter-x:0}.g-xxl-0,.gy-xxl-0{--bs-gutter-y:0}.g-xxl-1,.gx-xxl-1{--bs-gutter-x:0.25rem}.g-xxl-1,.gy-xxl-1{--bs-gutter-y:0.25rem}.g-xxl-2,.gx-xxl-2{--bs-gutter-x:0.5rem}.g-xxl-2,.gy-xxl-2{--bs-gutter-y:0.5rem}.g-xxl-3,.gx-xxl-3{--bs-gutter-x:1rem}.g-xxl-3,.gy-xxl-3{--bs-gutter-y:1rem}.g-xxl-4,.gx-xxl-4{--bs-gutter-x:1.5rem}.g-xxl-4,.gy-xxl-4{--bs-gutter-y:1.5rem}.g-xxl-5,.gx-xxl-5{--bs-gutter-x:3rem}.g-xxl-5,.gy-xxl-5{--bs-gutter-y:3rem}}.table{--bs-table-color-type:initial;--bs-table-bg-type:initial;--bs-table-color-state:initial;--bs-table-bg-state:initial;--bs-table-color:var(--bs-body-color);--bs-table-bg:var(--bs-body-bg);--bs-table-border-color:var(--bs-border-color);--bs-table-accent-bg:transparent;--bs-table-striped-color:var(--bs-body-color);--bs-table-striped-bg:rgba(0, 0, 0, 0.05);--bs-table-active-color:var(--bs-body-color);--bs-table-active-bg:rgba(0, 0, 0, 0.1);--bs-table-hover-color:var(--bs-body-color);--bs-table-hover-bg:rgba(0, 0, 0, 0.075);width:100%;margin-bottom:1rem;vertical-align:top;border-color:var(--bs-table-border-color)}.table>:not(caption)>*>*{padding:.5rem .5rem;color:var(--bs-table-color-state,var(--bs-table-color-type,var(--bs-table-color)));background-color:var(--bs-table-bg);border-bottom-width:var(--bs-border-width);box-shadow:inset 0 0 0 9999px var(--bs-table-bg-state,var(--bs-table-bg-type,var(--bs-table-accent-bg)))}.table>tbody{vertical-align:inherit}.table>thead{vertical-align:bottom}.table-group-divider{border-top:calc(var(--bs-border-width) * 2) solid currentcolor}.caption-top{caption-side:top}.table-sm>:not(caption)>*>*{padding:.25rem .25rem}.table-bordered>:not(caption)>*{border-width:var(--bs-border-width) 0}.table-bordered>:not(caption)>*>*{border-width:0 var(--bs-border-width)}.table-borderless>:not(caption)>*>*{border-bottom-width:0}.table-borderless>:not(:first-child){border-top-width:0}.table-striped>tbody>tr:nth-of-type(odd)>*{--bs-table-color-type:var(--bs-table-striped-color);--bs-table-bg-type:var(--bs-table-striped-bg)}.table-striped-columns>:not(caption)>tr>:nth-child(2n){--bs-table-color-type:var(--bs-table-striped-color);--bs-table-bg-type:var(--bs-table-striped-bg)}.table-active{--bs-table-color-state:var(--bs-table-active-color);--bs-table-bg-state:var(--bs-table-active-bg)}.table-hover>tbody>tr:hover>*{--bs-table-color-state:var(--bs-table-hover-color);--bs-table-bg-state:var(--bs-table-hover-bg)}.table-primary{--bs-table-color:#000;--bs-table-bg:#cfe2ff;--bs-table-border-color:#bacbe6;--bs-table-striped-bg:#c5d7f2;--bs-table-striped-color:#000;--bs-table-active-bg:#bacbe6;--bs-table-active-color:#000;--bs-table-hover-bg:#bfd1ec;--bs-table-hover-color:#000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-secondary{--bs-table-color:#000;--bs-table-bg:#e2e3e5;--bs-table-border-color:#cbccce;--bs-table-striped-bg:#d7d8da;--bs-table-striped-color:#000;--bs-table-active-bg:#cbccce;--bs-table-active-color:#000;--bs-table-hover-bg:#d1d2d4;--bs-table-hover-color:#000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-success{--bs-table-color:#000;--bs-table-bg:#d1e7dd;--bs-table-border-color:#bcd0c7;--bs-table-striped-bg:#c7dbd2;--bs-table-striped-color:#000;--bs-table-active-bg:#bcd0c7;--bs-table-active-color:#000;--bs-table-hover-bg:#c1d6cc;--bs-table-hover-color:#000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-info{--bs-table-color:#000;--bs-table-bg:#cff4fc;--bs-table-border-color:#badce3;--bs-table-striped-bg:#c5e8ef;--bs-table-striped-color:#000;--bs-table-active-bg:#badce3;--bs-table-active-color:#000;--bs-table-hover-bg:#bfe2e9;--bs-table-hover-color:#000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-warning{--bs-table-color:#000;--bs-table-bg:#fff3cd;--bs-table-border-color:#e6dbb9;--bs-table-striped-bg:#f2e7c3;--bs-table-striped-color:#000;--bs-table-active-bg:#e6dbb9;--bs-table-active-color:#000;--bs-table-hover-bg:#ece1be;--bs-table-hover-color:#000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-danger{--bs-table-color:#000;--bs-table-bg:#f8d7da;--bs-table-border-color:#dfc2c4;--bs-table-striped-bg:#eccccf;--bs-table-striped-color:#000;--bs-table-active-bg:#dfc2c4;--bs-table-active-color:#000;--bs-table-hover-bg:#e5c7ca;--bs-table-hover-color:#000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-light{--bs-table-color:#000;--bs-table-bg:#f8f9fa;--bs-table-border-color:#dfe0e1;--bs-table-striped-bg:#ecedee;--bs-table-striped-color:#000;--bs-table-active-bg:#dfe0e1;--bs-table-active-color:#000;--bs-table-hover-bg:#e5e6e7;--bs-table-hover-color:#000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-dark{--bs-table-color:#fff;--bs-table-bg:#212529;--bs-table-border-color:#373b3e;--bs-table-striped-bg:#2c3034;--bs-table-striped-color:#fff;--bs-table-active-bg:#373b3e;--bs-table-active-color:#fff;--bs-table-hover-bg:#323539;--bs-table-hover-color:#fff;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-responsive{overflow-x:auto;-webkit-overflow-scrolling:touch}@media (max-width:575.98px){.table-responsive-sm{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media (max-width:767.98px){.table-responsive-md{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media (max-width:991.98px){.table-responsive-lg{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media (max-width:1199.98px){.table-responsive-xl{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media (max-width:1399.98px){.table-responsive-xxl{overflow-x:auto;-webkit-overflow-scrolling:touch}}.form-label{margin-bottom:.5rem}.col-form-label{padding-top:calc(.375rem + var(--bs-border-width));padding-bottom:calc(.375rem + var(--bs-border-width));margin-bottom:0;font-size:inherit;line-height:1.5}.col-form-label-lg{padding-top:calc(.5rem + var(--bs-border-width));padding-bottom:calc(.5rem + var(--bs-border-width));font-size:1.25rem}.col-form-label-sm{padding-top:calc(.25rem + var(--bs-border-width));padding-bottom:calc(.25rem + var(--bs-border-width));font-size:.875rem}.form-text{margin-top:.25rem;font-size:.875em;color:var(--bs-secondary-color)}.form-control{display:block;width:100%;padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:var(--bs-body-color);-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:var(--bs-body-bg);background-clip:padding-box;border:var(--bs-border-width) solid var(--bs-border-color);border-radius:var(--bs-border-radius);transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.form-control{transition:none}}.form-control[type=file]{overflow:hidden}.form-control[type=file]:not(:disabled):not([readonly]){cursor:pointer}.form-control:focus{color:var(--bs-body-color);background-color:var(--bs-body-bg);border-color:#86b7fe;outline:0;box-shadow:0 0 0 .25rem rgba(13,110,253,.25)}.form-control::-webkit-date-and-time-value{min-width:85px;height:1.5em;margin:0}.form-control::-webkit-datetime-edit{display:block;padding:0}.form-control::-moz-placeholder{color:var(--bs-secondary-color);opacity:1}.form-control::placeholder{color:var(--bs-secondary-color);opacity:1}.form-control:disabled{background-color:var(--bs-secondary-bg);opacity:1}.form-control::-webkit-file-upload-button{padding:.375rem .75rem;margin:-.375rem -.75rem;-webkit-margin-end:.75rem;margin-inline-end:.75rem;color:var(--bs-body-color);background-color:var(--bs-tertiary-bg);pointer-events:none;border-color:inherit;border-style:solid;border-width:0;border-inline-end-width:var(--bs-border-width);border-radius:0;-webkit-transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}.form-control::file-selector-button{padding:.375rem .75rem;margin:-.375rem -.75rem;-webkit-margin-end:.75rem;margin-inline-end:.75rem;color:var(--bs-body-color);background-color:var(--bs-tertiary-bg);pointer-events:none;border-color:inherit;border-style:solid;border-width:0;border-inline-end-width:var(--bs-border-width);border-radius:0;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.form-control::-webkit-file-upload-button{-webkit-transition:none;transition:none}.form-control::file-selector-button{transition:none}}.form-control:hover:not(:disabled):not([readonly])::-webkit-file-upload-button{background-color:var(--bs-secondary-bg)}.form-control:hover:not(:disabled):not([readonly])::file-selector-button{background-color:var(--bs-secondary-bg)}.form-control-plaintext{display:block;width:100%;padding:.375rem 0;margin-bottom:0;line-height:1.5;color:var(--bs-body-color);background-color:transparent;border:solid transparent;border-width:var(--bs-border-width) 0}.form-control-plaintext:focus{outline:0}.form-control-plaintext.form-control-lg,.form-control-plaintext.form-control-sm{padding-right:0;padding-left:0}.form-control-sm{min-height:calc(1.5em + .5rem + calc(var(--bs-border-width) * 2));padding:.25rem .5rem;font-size:.875rem;border-radius:var(--bs-border-radius-sm)}.form-control-sm::-webkit-file-upload-button{padding:.25rem .5rem;margin:-.25rem -.5rem;-webkit-margin-end:.5rem;margin-inline-end:.5rem}.form-control-sm::file-selector-button{padding:.25rem .5rem;margin:-.25rem -.5rem;-webkit-margin-end:.5rem;margin-inline-end:.5rem}.form-control-lg{min-height:calc(1.5em + 1rem + calc(var(--bs-border-width) * 2));padding:.5rem 1rem;font-size:1.25rem;border-radius:var(--bs-border-radius-lg)}.form-control-lg::-webkit-file-upload-button{padding:.5rem 1rem;margin:-.5rem -1rem;-webkit-margin-end:1rem;margin-inline-end:1rem}.form-control-lg::file-selector-button{padding:.5rem 1rem;margin:-.5rem -1rem;-webkit-margin-end:1rem;margin-inline-end:1rem}textarea.form-control{min-height:calc(1.5em + .75rem + calc(var(--bs-border-width) * 2))}textarea.form-control-sm{min-height:calc(1.5em + .5rem + calc(var(--bs-border-width) * 2))}textarea.form-control-lg{min-height:calc(1.5em + 1rem + calc(var(--bs-border-width) * 2))}.form-control-color{width:3rem;height:calc(1.5em + .75rem + calc(var(--bs-border-width) * 2));padding:.375rem}.form-control-color:not(:disabled):not([readonly]){cursor:pointer}.form-control-color::-moz-color-swatch{border:0!important;border-radius:var(--bs-border-radius)}.form-control-color::-webkit-color-swatch{border:0!important;border-radius:var(--bs-border-radius)}.form-control-color.form-control-sm{height:calc(1.5em + .5rem + calc(var(--bs-border-width) * 2))}.form-control-color.form-control-lg{height:calc(1.5em + 1rem + calc(var(--bs-border-width) * 2))}.form-select{--bs-form-select-bg-img:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e");display:block;width:100%;padding:.375rem 2.25rem .375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:var(--bs-body-color);-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:var(--bs-body-bg);background-image:var(--bs-form-select-bg-img),var(--bs-form-select-bg-icon,none);background-repeat:no-repeat;background-position:right .75rem center;background-size:16px 12px;border:var(--bs-border-width) solid var(--bs-border-color);border-radius:var(--bs-border-radius);transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.form-select{transition:none}}.form-select:focus{border-color:#86b7fe;outline:0;box-shadow:0 0 0 .25rem rgba(13,110,253,.25)}.form-select[multiple],.form-select[size]:not([size="1"]){padding-right:.75rem;background-image:none}.form-select:disabled{background-color:var(--bs-secondary-bg)}.form-select:-moz-focusring{color:transparent;text-shadow:0 0 0 var(--bs-body-color)}.form-select-sm{padding-top:.25rem;padding-bottom:.25rem;padding-left:.5rem;font-size:.875rem;border-radius:var(--bs-border-radius-sm)}.form-select-lg{padding-top:.5rem;padding-bottom:.5rem;padding-left:1rem;font-size:1.25rem;border-radius:var(--bs-border-radius-lg)}[data-bs-theme=dark] .form-select{--bs-form-select-bg-img:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23dee2e6' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e")}.form-check{display:block;min-height:1.5rem;padding-left:1.5em;margin-bottom:.125rem}.form-check .form-check-input{float:left;margin-left:-1.5em}.form-check-reverse{padding-right:1.5em;padding-left:0;text-align:right}.form-check-reverse .form-check-input{float:right;margin-right:-1.5em;margin-left:0}.form-check-input{--bs-form-check-bg:var(--bs-body-bg);width:1em;height:1em;margin-top:.25em;vertical-align:top;-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:var(--bs-form-check-bg);background-image:var(--bs-form-check-bg-image);background-repeat:no-repeat;background-position:center;background-size:contain;border:var(--bs-border-width) solid var(--bs-border-color);-webkit-print-color-adjust:exact;color-adjust:exact;print-color-adjust:exact}.form-check-input[type=checkbox]{border-radius:.25em}.form-check-input[type=radio]{border-radius:50%}.form-check-input:active{filter:brightness(90%)}.form-check-input:focus{border-color:#86b7fe;outline:0;box-shadow:0 0 0 .25rem rgba(13,110,253,.25)}.form-check-input:checked{background-color:#0d6efd;border-color:#0d6efd}.form-check-input:checked[type=checkbox]{--bs-form-check-bg-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='m6 10 3 3 6-6'/%3e%3c/svg%3e")}.form-check-input:checked[type=radio]{--bs-form-check-bg-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='2' fill='%23fff'/%3e%3c/svg%3e")}.form-check-input[type=checkbox]:indeterminate{background-color:#0d6efd;border-color:#0d6efd;--bs-form-check-bg-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10h8'/%3e%3c/svg%3e")}.form-check-input:disabled{pointer-events:none;filter:none;opacity:.5}.form-check-input:disabled~.form-check-label,.form-check-input[disabled]~.form-check-label{cursor:default;opacity:.5}.form-switch{padding-left:2.5em}.form-switch .form-check-input{--bs-form-switch-bg:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='rgba%280, 0, 0, 0.25%29'/%3e%3c/svg%3e");width:2em;margin-left:-2.5em;background-image:var(--bs-form-switch-bg);background-position:left center;border-radius:2em;transition:background-position .15s ease-in-out}@media (prefers-reduced-motion:reduce){.form-switch .form-check-input{transition:none}}.form-switch .form-check-input:focus{--bs-form-switch-bg:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%2386b7fe'/%3e%3c/svg%3e")}.form-switch .form-check-input:checked{background-position:right center;--bs-form-switch-bg:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e")}.form-switch.form-check-reverse{padding-right:2.5em;padding-left:0}.form-switch.form-check-reverse .form-check-input{margin-right:-2.5em;margin-left:0}.form-check-inline{display:inline-block;margin-right:1rem}.btn-check{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.btn-check:disabled+.btn,.btn-check[disabled]+.btn{pointer-events:none;filter:none;opacity:.65}[data-bs-theme=dark] .form-switch .form-check-input:not(:checked):not(:focus){--bs-form-switch-bg:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='rgba%28255, 255, 255, 0.25%29'/%3e%3c/svg%3e")}.form-range{width:100%;height:1.5rem;padding:0;-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:transparent}.form-range:focus{outline:0}.form-range:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .25rem rgba(13,110,253,.25)}.form-range:focus::-moz-range-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .25rem rgba(13,110,253,.25)}.form-range::-moz-focus-outer{border:0}.form-range::-webkit-slider-thumb{width:1rem;height:1rem;margin-top:-.25rem;-webkit-appearance:none;appearance:none;background-color:#0d6efd;border:0;border-radius:1rem;-webkit-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.form-range::-webkit-slider-thumb{-webkit-transition:none;transition:none}}.form-range::-webkit-slider-thumb:active{background-color:#b6d4fe}.form-range::-webkit-slider-runnable-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:var(--bs-tertiary-bg);border-color:transparent;border-radius:1rem}.form-range::-moz-range-thumb{width:1rem;height:1rem;-moz-appearance:none;appearance:none;background-color:#0d6efd;border:0;border-radius:1rem;-moz-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.form-range::-moz-range-thumb{-moz-transition:none;transition:none}}.form-range::-moz-range-thumb:active{background-color:#b6d4fe}.form-range::-moz-range-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:var(--bs-tertiary-bg);border-color:transparent;border-radius:1rem}.form-range:disabled{pointer-events:none}.form-range:disabled::-webkit-slider-thumb{background-color:var(--bs-secondary-color)}.form-range:disabled::-moz-range-thumb{background-color:var(--bs-secondary-color)}.form-floating{position:relative}.form-floating>.form-control,.form-floating>.form-control-plaintext,.form-floating>.form-select{height:calc(3.5rem + calc(var(--bs-border-width) * 2));min-height:calc(3.5rem + calc(var(--bs-border-width) * 2));line-height:1.25}.form-floating>label{position:absolute;top:0;left:0;z-index:2;height:100%;padding:1rem .75rem;overflow:hidden;text-align:start;text-overflow:ellipsis;white-space:nowrap;pointer-events:none;border:var(--bs-border-width) solid transparent;transform-origin:0 0;transition:opacity .1s ease-in-out,transform .1s ease-in-out}@media (prefers-reduced-motion:reduce){.form-floating>label{transition:none}}.form-floating>.form-control,.form-floating>.form-control-plaintext{padding:1rem .75rem}.form-floating>.form-control-plaintext::-moz-placeholder,.form-floating>.form-control::-moz-placeholder{color:transparent}.form-floating>.form-control-plaintext::placeholder,.form-floating>.form-control::placeholder{color:transparent}.form-floating>.form-control-plaintext:not(:-moz-placeholder-shown),.form-floating>.form-control:not(:-moz-placeholder-shown){padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-control-plaintext:focus,.form-floating>.form-control-plaintext:not(:placeholder-shown),.form-floating>.form-control:focus,.form-floating>.form-control:not(:placeholder-shown){padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-control-plaintext:-webkit-autofill,.form-floating>.form-control:-webkit-autofill{padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-select{padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-control:not(:-moz-placeholder-shown)~label{color:rgba(var(--bs-body-color-rgb),.65);transform:scale(.85) translateY(-.5rem) translateX(.15rem)}.form-floating>.form-control-plaintext~label,.form-floating>.form-control:focus~label,.form-floating>.form-control:not(:placeholder-shown)~label,.form-floating>.form-select~label{color:rgba(var(--bs-body-color-rgb),.65);transform:scale(.85) translateY(-.5rem) translateX(.15rem)}.form-floating>.form-control:not(:-moz-placeholder-shown)~label::after{position:absolute;inset:1rem 0.375rem;z-index:-1;height:1.5em;content:"";background-color:var(--bs-body-bg);border-radius:var(--bs-border-radius)}.form-floating>.form-control-plaintext~label::after,.form-floating>.form-control:focus~label::after,.form-floating>.form-control:not(:placeholder-shown)~label::after,.form-floating>.form-select~label::after{position:absolute;inset:1rem 0.375rem;z-index:-1;height:1.5em;content:"";background-color:var(--bs-body-bg);border-radius:var(--bs-border-radius)}.form-floating>.form-control:-webkit-autofill~label{color:rgba(var(--bs-body-color-rgb),.65);transform:scale(.85) translateY(-.5rem) translateX(.15rem)}.form-floating>.form-control-plaintext~label{border-width:var(--bs-border-width) 0}.form-floating>.form-control:disabled~label,.form-floating>:disabled~label{color:#6c757d}.form-floating>.form-control:disabled~label::after,.form-floating>:disabled~label::after{background-color:var(--bs-secondary-bg)}.input-group{position:relative;display:flex;flex-wrap:wrap;align-items:stretch;width:100%}.input-group>.form-control,.input-group>.form-floating,.input-group>.form-select{position:relative;flex:1 1 auto;width:1%;min-width:0}.input-group>.form-control:focus,.input-group>.form-floating:focus-within,.input-group>.form-select:focus{z-index:5}.input-group .btn{position:relative;z-index:2}.input-group .btn:focus{z-index:5}.input-group-text{display:flex;align-items:center;padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:var(--bs-body-color);text-align:center;white-space:nowrap;background-color:var(--bs-tertiary-bg);border:var(--bs-border-width) solid var(--bs-border-color);border-radius:var(--bs-border-radius)}.input-group-lg>.btn,.input-group-lg>.form-control,.input-group-lg>.form-select,.input-group-lg>.input-group-text{padding:.5rem 1rem;font-size:1.25rem;border-radius:var(--bs-border-radius-lg)}.input-group-sm>.btn,.input-group-sm>.form-control,.input-group-sm>.form-select,.input-group-sm>.input-group-text{padding:.25rem .5rem;font-size:.875rem;border-radius:var(--bs-border-radius-sm)}.input-group-lg>.form-select,.input-group-sm>.form-select{padding-right:3rem}.input-group:not(.has-validation)>.dropdown-toggle:nth-last-child(n+3),.input-group:not(.has-validation)>.form-floating:not(:last-child)>.form-control,.input-group:not(.has-validation)>.form-floating:not(:last-child)>.form-select,.input-group:not(.has-validation)>:not(:last-child):not(.dropdown-toggle):not(.dropdown-menu):not(.form-floating){border-top-right-radius:0;border-bottom-right-radius:0}.input-group.has-validation>.dropdown-toggle:nth-last-child(n+4),.input-group.has-validation>.form-floating:nth-last-child(n+3)>.form-control,.input-group.has-validation>.form-floating:nth-last-child(n+3)>.form-select,.input-group.has-validation>:nth-last-child(n+3):not(.dropdown-toggle):not(.dropdown-menu):not(.form-floating){border-top-right-radius:0;border-bottom-right-radius:0}.input-group>:not(:first-child):not(.dropdown-menu):not(.valid-tooltip):not(.valid-feedback):not(.invalid-tooltip):not(.invalid-feedback){margin-left:calc(var(--bs-border-width) * -1);border-top-left-radius:0;border-bottom-left-radius:0}.input-group>.form-floating:not(:first-child)>.form-control,.input-group>.form-floating:not(:first-child)>.form-select{border-top-left-radius:0;border-bottom-left-radius:0}.valid-feedback{display:none;width:100%;margin-top:.25rem;font-size:.875em;color:var(--bs-form-valid-color)}.valid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;color:#fff;background-color:var(--bs-success);border-radius:var(--bs-border-radius)}.is-valid~.valid-feedback,.is-valid~.valid-tooltip,.was-validated :valid~.valid-feedback,.was-validated :valid~.valid-tooltip{display:block}.form-control.is-valid,.was-validated .form-control:valid{border-color:var(--bs-form-valid-border-color);padding-right:calc(1.5em + .75rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23198754' d='M2.3 6.73.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:right calc(.375em + .1875rem) center;background-size:calc(.75em + .375rem) calc(.75em + .375rem)}.form-control.is-valid:focus,.was-validated .form-control:valid:focus{border-color:var(--bs-form-valid-border-color);box-shadow:0 0 0 .25rem rgba(var(--bs-success-rgb),.25)}.was-validated textarea.form-control:valid,textarea.form-control.is-valid{padding-right:calc(1.5em + .75rem);background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem)}.form-select.is-valid,.was-validated .form-select:valid{border-color:var(--bs-form-valid-border-color)}.form-select.is-valid:not([multiple]):not([size]),.form-select.is-valid:not([multiple])[size="1"],.was-validated .form-select:valid:not([multiple]):not([size]),.was-validated .form-select:valid:not([multiple])[size="1"]{--bs-form-select-bg-icon:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23198754' d='M2.3 6.73.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e");padding-right:4.125rem;background-position:right .75rem center,center right 2.25rem;background-size:16px 12px,calc(.75em + .375rem) calc(.75em + .375rem)}.form-select.is-valid:focus,.was-validated .form-select:valid:focus{border-color:var(--bs-form-valid-border-color);box-shadow:0 0 0 .25rem rgba(var(--bs-success-rgb),.25)}.form-control-color.is-valid,.was-validated .form-control-color:valid{width:calc(3rem + calc(1.5em + .75rem))}.form-check-input.is-valid,.was-validated .form-check-input:valid{border-color:var(--bs-form-valid-border-color)}.form-check-input.is-valid:checked,.was-validated .form-check-input:valid:checked{background-color:var(--bs-form-valid-color)}.form-check-input.is-valid:focus,.was-validated .form-check-input:valid:focus{box-shadow:0 0 0 .25rem rgba(var(--bs-success-rgb),.25)}.form-check-input.is-valid~.form-check-label,.was-validated .form-check-input:valid~.form-check-label{color:var(--bs-form-valid-color)}.form-check-inline .form-check-input~.valid-feedback{margin-left:.5em}.input-group>.form-control:not(:focus).is-valid,.input-group>.form-floating:not(:focus-within).is-valid,.input-group>.form-select:not(:focus).is-valid,.was-validated .input-group>.form-control:not(:focus):valid,.was-validated .input-group>.form-floating:not(:focus-within):valid,.was-validated .input-group>.form-select:not(:focus):valid{z-index:3}.invalid-feedback{display:none;width:100%;margin-top:.25rem;font-size:.875em;color:var(--bs-form-invalid-color)}.invalid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;color:#fff;background-color:var(--bs-danger);border-radius:var(--bs-border-radius)}.is-invalid~.invalid-feedback,.is-invalid~.invalid-tooltip,.was-validated :invalid~.invalid-feedback,.was-validated :invalid~.invalid-tooltip{display:block}.form-control.is-invalid,.was-validated .form-control:invalid{border-color:var(--bs-form-invalid-border-color);padding-right:calc(1.5em + .75rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23dc3545'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:right calc(.375em + .1875rem) center;background-size:calc(.75em + .375rem) calc(.75em + .375rem)}.form-control.is-invalid:focus,.was-validated .form-control:invalid:focus{border-color:var(--bs-form-invalid-border-color);box-shadow:0 0 0 .25rem rgba(var(--bs-danger-rgb),.25)}.was-validated textarea.form-control:invalid,textarea.form-control.is-invalid{padding-right:calc(1.5em + .75rem);background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem)}.form-select.is-invalid,.was-validated .form-select:invalid{border-color:var(--bs-form-invalid-border-color)}.form-select.is-invalid:not([multiple]):not([size]),.form-select.is-invalid:not([multiple])[size="1"],.was-validated .form-select:invalid:not([multiple]):not([size]),.was-validated .form-select:invalid:not([multiple])[size="1"]{--bs-form-select-bg-icon:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23dc3545'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e");padding-right:4.125rem;background-position:right .75rem center,center right 2.25rem;background-size:16px 12px,calc(.75em + .375rem) calc(.75em + .375rem)}.form-select.is-invalid:focus,.was-validated .form-select:invalid:focus{border-color:var(--bs-form-invalid-border-color);box-shadow:0 0 0 .25rem rgba(var(--bs-danger-rgb),.25)}.form-control-color.is-invalid,.was-validated .form-control-color:invalid{width:calc(3rem + calc(1.5em + .75rem))}.form-check-input.is-invalid,.was-validated .form-check-input:invalid{border-color:var(--bs-form-invalid-border-color)}.form-check-input.is-invalid:checked,.was-validated .form-check-input:invalid:checked{background-color:var(--bs-form-invalid-color)}.form-check-input.is-invalid:focus,.was-validated .form-check-input:invalid:focus{box-shadow:0 0 0 .25rem rgba(var(--bs-danger-rgb),.25)}.form-check-input.is-invalid~.form-check-label,.was-validated .form-check-input:invalid~.form-check-label{color:var(--bs-form-invalid-color)}.form-check-inline .form-check-input~.invalid-feedback{margin-left:.5em}.input-group>.form-control:not(:focus).is-invalid,.input-group>.form-floating:not(:focus-within).is-invalid,.input-group>.form-select:not(:focus).is-invalid,.was-validated .input-group>.form-control:not(:focus):invalid,.was-validated .input-group>.form-floating:not(:focus-within):invalid,.was-validated .input-group>.form-select:not(:focus):invalid{z-index:4}.btn{--bs-btn-padding-x:0.75rem;--bs-btn-padding-y:0.375rem;--bs-btn-font-family: ;--bs-btn-font-size:1rem;--bs-btn-font-weight:400;--bs-btn-line-height:1.5;--bs-btn-color:var(--bs-body-color);--bs-btn-bg:transparent;--bs-btn-border-width:var(--bs-border-width);--bs-btn-border-color:transparent;--bs-btn-border-radius:var(--bs-border-radius);--bs-btn-hover-border-color:transparent;--bs-btn-box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.15),0 1px 1px rgba(0, 0, 0, 0.075);--bs-btn-disabled-opacity:0.65;--bs-btn-focus-box-shadow:0 0 0 0.25rem rgba(var(--bs-btn-focus-shadow-rgb), .5);display:inline-block;padding:var(--bs-btn-padding-y) var(--bs-btn-padding-x);font-family:var(--bs-btn-font-family);font-size:var(--bs-btn-font-size);font-weight:var(--bs-btn-font-weight);line-height:var(--bs-btn-line-height);color:var(--bs-btn-color);text-align:center;text-decoration:none;vertical-align:middle;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;user-select:none;border:var(--bs-btn-border-width) solid var(--bs-btn-border-color);border-radius:var(--bs-btn-border-radius);background-color:var(--bs-btn-bg);transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.btn{transition:none}}.btn:hover{color:var(--bs-btn-hover-color);background-color:var(--bs-btn-hover-bg);border-color:var(--bs-btn-hover-border-color)}.btn-check+.btn:hover{color:var(--bs-btn-color);background-color:var(--bs-btn-bg);border-color:var(--bs-btn-border-color)}.btn:focus-visible{color:var(--bs-btn-hover-color);background-color:var(--bs-btn-hover-bg);border-color:var(--bs-btn-hover-border-color);outline:0;box-shadow:var(--bs-btn-focus-box-shadow)}.btn-check:focus-visible+.btn{border-color:var(--bs-btn-hover-border-color);outline:0;box-shadow:var(--bs-btn-focus-box-shadow)}.btn-check:checked+.btn,.btn.active,.btn.show,.btn:first-child:active,:not(.btn-check)+.btn:active{color:var(--bs-btn-active-color);background-color:var(--bs-btn-active-bg);border-color:var(--bs-btn-active-border-color)}.btn-check:checked+.btn:focus-visible,.btn.active:focus-visible,.btn.show:focus-visible,.btn:first-child:active:focus-visible,:not(.btn-check)+.btn:active:focus-visible{box-shadow:var(--bs-btn-focus-box-shadow)}.btn.disabled,.btn:disabled,fieldset:disabled .btn{color:var(--bs-btn-disabled-color);pointer-events:none;background-color:var(--bs-btn-disabled-bg);border-color:var(--bs-btn-disabled-border-color);opacity:var(--bs-btn-disabled-opacity)}.btn-primary{--bs-btn-color:#fff;--bs-btn-bg:#0d6efd;--bs-btn-border-color:#0d6efd;--bs-btn-hover-color:#fff;--bs-btn-hover-bg:#0b5ed7;--bs-btn-hover-border-color:#0a58ca;--bs-btn-focus-shadow-rgb:49,132,253;--bs-btn-active-color:#fff;--bs-btn-active-bg:#0a58ca;--bs-btn-active-border-color:#0a53be;--bs-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color:#fff;--bs-btn-disabled-bg:#0d6efd;--bs-btn-disabled-border-color:#0d6efd}.btn-secondary{--bs-btn-color:#fff;--bs-btn-bg:#6c757d;--bs-btn-border-color:#6c757d;--bs-btn-hover-color:#fff;--bs-btn-hover-bg:#5c636a;--bs-btn-hover-border-color:#565e64;--bs-btn-focus-shadow-rgb:130,138,145;--bs-btn-active-color:#fff;--bs-btn-active-bg:#565e64;--bs-btn-active-border-color:#51585e;--bs-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color:#fff;--bs-btn-disabled-bg:#6c757d;--bs-btn-disabled-border-color:#6c757d}.btn-success{--bs-btn-color:#fff;--bs-btn-bg:#198754;--bs-btn-border-color:#198754;--bs-btn-hover-color:#fff;--bs-btn-hover-bg:#157347;--bs-btn-hover-border-color:#146c43;--bs-btn-focus-shadow-rgb:60,153,110;--bs-btn-active-color:#fff;--bs-btn-active-bg:#146c43;--bs-btn-active-border-color:#13653f;--bs-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color:#fff;--bs-btn-disabled-bg:#198754;--bs-btn-disabled-border-color:#198754}.btn-info{--bs-btn-color:#000;--bs-btn-bg:#0dcaf0;--bs-btn-border-color:#0dcaf0;--bs-btn-hover-color:#000;--bs-btn-hover-bg:#31d2f2;--bs-btn-hover-border-color:#25cff2;--bs-btn-focus-shadow-rgb:11,172,204;--bs-btn-active-color:#000;--bs-btn-active-bg:#3dd5f3;--bs-btn-active-border-color:#25cff2;--bs-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color:#000;--bs-btn-disabled-bg:#0dcaf0;--bs-btn-disabled-border-color:#0dcaf0}.btn-warning{--bs-btn-color:#000;--bs-btn-bg:#ffc107;--bs-btn-border-color:#ffc107;--bs-btn-hover-color:#000;--bs-btn-hover-bg:#ffca2c;--bs-btn-hover-border-color:#ffc720;--bs-btn-focus-shadow-rgb:217,164,6;--bs-btn-active-color:#000;--bs-btn-active-bg:#ffcd39;--bs-btn-active-border-color:#ffc720;--bs-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color:#000;--bs-btn-disabled-bg:#ffc107;--bs-btn-disabled-border-color:#ffc107}.btn-danger{--bs-btn-color:#fff;--bs-btn-bg:#dc3545;--bs-btn-border-color:#dc3545;--bs-btn-hover-color:#fff;--bs-btn-hover-bg:#bb2d3b;--bs-btn-hover-border-color:#b02a37;--bs-btn-focus-shadow-rgb:225,83,97;--bs-btn-active-color:#fff;--bs-btn-active-bg:#b02a37;--bs-btn-active-border-color:#a52834;--bs-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color:#fff;--bs-btn-disabled-bg:#dc3545;--bs-btn-disabled-border-color:#dc3545}.btn-light{--bs-btn-color:#000;--bs-btn-bg:#f8f9fa;--bs-btn-border-color:#f8f9fa;--bs-btn-hover-color:#000;--bs-btn-hover-bg:#d3d4d5;--bs-btn-hover-border-color:#c6c7c8;--bs-btn-focus-shadow-rgb:211,212,213;--bs-btn-active-color:#000;--bs-btn-active-bg:#c6c7c8;--bs-btn-active-border-color:#babbbc;--bs-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color:#000;--bs-btn-disabled-bg:#f8f9fa;--bs-btn-disabled-border-color:#f8f9fa}.btn-dark{--bs-btn-color:#fff;--bs-btn-bg:#212529;--bs-btn-border-color:#212529;--bs-btn-hover-color:#fff;--bs-btn-hover-bg:#424649;--bs-btn-hover-border-color:#373b3e;--bs-btn-focus-shadow-rgb:66,70,73;--bs-btn-active-color:#fff;--bs-btn-active-bg:#4d5154;--bs-btn-active-border-color:#373b3e;--bs-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color:#fff;--bs-btn-disabled-bg:#212529;--bs-btn-disabled-border-color:#212529}.btn-outline-primary{--bs-btn-color:#0d6efd;--bs-btn-border-color:#0d6efd;--bs-btn-hover-color:#fff;--bs-btn-hover-bg:#0d6efd;--bs-btn-hover-border-color:#0d6efd;--bs-btn-focus-shadow-rgb:13,110,253;--bs-btn-active-color:#fff;--bs-btn-active-bg:#0d6efd;--bs-btn-active-border-color:#0d6efd;--bs-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color:#0d6efd;--bs-btn-disabled-bg:transparent;--bs-btn-disabled-border-color:#0d6efd;--bs-gradient:none}.btn-outline-secondary{--bs-btn-color:#6c757d;--bs-btn-border-color:#6c757d;--bs-btn-hover-color:#fff;--bs-btn-hover-bg:#6c757d;--bs-btn-hover-border-color:#6c757d;--bs-btn-focus-shadow-rgb:108,117,125;--bs-btn-active-color:#fff;--bs-btn-active-bg:#6c757d;--bs-btn-active-border-color:#6c757d;--bs-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color:#6c757d;--bs-btn-disabled-bg:transparent;--bs-btn-disabled-border-color:#6c757d;--bs-gradient:none}.btn-outline-success{--bs-btn-color:#198754;--bs-btn-border-color:#198754;--bs-btn-hover-color:#fff;--bs-btn-hover-bg:#198754;--bs-btn-hover-border-color:#198754;--bs-btn-focus-shadow-rgb:25,135,84;--bs-btn-active-color:#fff;--bs-btn-active-bg:#198754;--bs-btn-active-border-color:#198754;--bs-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color:#198754;--bs-btn-disabled-bg:transparent;--bs-btn-disabled-border-color:#198754;--bs-gradient:none}.btn-outline-info{--bs-btn-color:#0dcaf0;--bs-btn-border-color:#0dcaf0;--bs-btn-hover-color:#000;--bs-btn-hover-bg:#0dcaf0;--bs-btn-hover-border-color:#0dcaf0;--bs-btn-focus-shadow-rgb:13,202,240;--bs-btn-active-color:#000;--bs-btn-active-bg:#0dcaf0;--bs-btn-active-border-color:#0dcaf0;--bs-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color:#0dcaf0;--bs-btn-disabled-bg:transparent;--bs-btn-disabled-border-color:#0dcaf0;--bs-gradient:none}.btn-outline-warning{--bs-btn-color:#ffc107;--bs-btn-border-color:#ffc107;--bs-btn-hover-color:#000;--bs-btn-hover-bg:#ffc107;--bs-btn-hover-border-color:#ffc107;--bs-btn-focus-shadow-rgb:255,193,7;--bs-btn-active-color:#000;--bs-btn-active-bg:#ffc107;--bs-btn-active-border-color:#ffc107;--bs-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color:#ffc107;--bs-btn-disabled-bg:transparent;--bs-btn-disabled-border-color:#ffc107;--bs-gradient:none}.btn-outline-danger{--bs-btn-color:#dc3545;--bs-btn-border-color:#dc3545;--bs-btn-hover-color:#fff;--bs-btn-hover-bg:#dc3545;--bs-btn-hover-border-color:#dc3545;--bs-btn-focus-shadow-rgb:220,53,69;--bs-btn-active-color:#fff;--bs-btn-active-bg:#dc3545;--bs-btn-active-border-color:#dc3545;--bs-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color:#dc3545;--bs-btn-disabled-bg:transparent;--bs-btn-disabled-border-color:#dc3545;--bs-gradient:none}.btn-outline-light{--bs-btn-color:#f8f9fa;--bs-btn-border-color:#f8f9fa;--bs-btn-hover-color:#000;--bs-btn-hover-bg:#f8f9fa;--bs-btn-hover-border-color:#f8f9fa;--bs-btn-focus-shadow-rgb:248,249,250;--bs-btn-active-color:#000;--bs-btn-active-bg:#f8f9fa;--bs-btn-active-border-color:#f8f9fa;--bs-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color:#f8f9fa;--bs-btn-disabled-bg:transparent;--bs-btn-disabled-border-color:#f8f9fa;--bs-gradient:none}.btn-outline-dark{--bs-btn-color:#212529;--bs-btn-border-color:#212529;--bs-btn-hover-color:#fff;--bs-btn-hover-bg:#212529;--bs-btn-hover-border-color:#212529;--bs-btn-focus-shadow-rgb:33,37,41;--bs-btn-active-color:#fff;--bs-btn-active-bg:#212529;--bs-btn-active-border-color:#212529;--bs-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color:#212529;--bs-btn-disabled-bg:transparent;--bs-btn-disabled-border-color:#212529;--bs-gradient:none}.btn-link{--bs-btn-font-weight:400;--bs-btn-color:var(--bs-link-color);--bs-btn-bg:transparent;--bs-btn-border-color:transparent;--bs-btn-hover-color:var(--bs-link-hover-color);--bs-btn-hover-border-color:transparent;--bs-btn-active-color:var(--bs-link-hover-color);--bs-btn-active-border-color:transparent;--bs-btn-disabled-color:#6c757d;--bs-btn-disabled-border-color:transparent;--bs-btn-box-shadow:0 0 0 #000;--bs-btn-focus-shadow-rgb:49,132,253;text-decoration:underline}.btn-link:focus-visible{color:var(--bs-btn-color)}.btn-link:hover{color:var(--bs-btn-hover-color)}.btn-group-lg>.btn,.btn-lg{--bs-btn-padding-y:0.5rem;--bs-btn-padding-x:1rem;--bs-btn-font-size:1.25rem;--bs-btn-border-radius:var(--bs-border-radius-lg)}.btn-group-sm>.btn,.btn-sm{--bs-btn-padding-y:0.25rem;--bs-btn-padding-x:0.5rem;--bs-btn-font-size:0.875rem;--bs-btn-border-radius:var(--bs-border-radius-sm)}.fade{transition:opacity .15s linear}@media (prefers-reduced-motion:reduce){.fade{transition:none}}.fade:not(.show){opacity:0}.collapse:not(.show){display:none}.collapsing{height:0;overflow:hidden;transition:height .35s ease}@media (prefers-reduced-motion:reduce){.collapsing{transition:none}}.collapsing.collapse-horizontal{width:0;height:auto;transition:width .35s ease}@media (prefers-reduced-motion:reduce){.collapsing.collapse-horizontal{transition:none}}.dropdown,.dropdown-center,.dropend,.dropstart,.dropup,.dropup-center{position:relative}.dropdown-toggle{white-space:nowrap}.dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid;border-right:.3em solid transparent;border-bottom:0;border-left:.3em solid transparent}.dropdown-toggle:empty::after{margin-left:0}.dropdown-menu{--bs-dropdown-zindex:1000;--bs-dropdown-min-width:10rem;--bs-dropdown-padding-x:0;--bs-dropdown-padding-y:0.5rem;--bs-dropdown-spacer:0.125rem;--bs-dropdown-font-size:1rem;--bs-dropdown-color:var(--bs-body-color);--bs-dropdown-bg:var(--bs-body-bg);--bs-dropdown-border-color:var(--bs-border-color-translucent);--bs-dropdown-border-radius:var(--bs-border-radius);--bs-dropdown-border-width:var(--bs-border-width);--bs-dropdown-inner-border-radius:calc(var(--bs-border-radius) - var(--bs-border-width));--bs-dropdown-divider-bg:var(--bs-border-color-translucent);--bs-dropdown-divider-margin-y:0.5rem;--bs-dropdown-box-shadow:0 0.5rem 1rem rgba(0, 0, 0, 0.15);--bs-dropdown-link-color:var(--bs-body-color);--bs-dropdown-link-hover-color:var(--bs-body-color);--bs-dropdown-link-hover-bg:var(--bs-tertiary-bg);--bs-dropdown-link-active-color:#fff;--bs-dropdown-link-active-bg:#0d6efd;--bs-dropdown-link-disabled-color:var(--bs-tertiary-color);--bs-dropdown-item-padding-x:1rem;--bs-dropdown-item-padding-y:0.25rem;--bs-dropdown-header-color:#6c757d;--bs-dropdown-header-padding-x:1rem;--bs-dropdown-header-padding-y:0.5rem;position:absolute;z-index:var(--bs-dropdown-zindex);display:none;min-width:var(--bs-dropdown-min-width);padding:var(--bs-dropdown-padding-y) var(--bs-dropdown-padding-x);margin:0;font-size:var(--bs-dropdown-font-size);color:var(--bs-dropdown-color);text-align:left;list-style:none;background-color:var(--bs-dropdown-bg);background-clip:padding-box;border:var(--bs-dropdown-border-width) solid var(--bs-dropdown-border-color);border-radius:var(--bs-dropdown-border-radius)}.dropdown-menu[data-bs-popper]{top:100%;left:0;margin-top:var(--bs-dropdown-spacer)}.dropdown-menu-start{--bs-position:start}.dropdown-menu-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-end{--bs-position:end}.dropdown-menu-end[data-bs-popper]{right:0;left:auto}@media (min-width:576px){.dropdown-menu-sm-start{--bs-position:start}.dropdown-menu-sm-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-sm-end{--bs-position:end}.dropdown-menu-sm-end[data-bs-popper]{right:0;left:auto}}@media (min-width:768px){.dropdown-menu-md-start{--bs-position:start}.dropdown-menu-md-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-md-end{--bs-position:end}.dropdown-menu-md-end[data-bs-popper]{right:0;left:auto}}@media (min-width:992px){.dropdown-menu-lg-start{--bs-position:start}.dropdown-menu-lg-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-lg-end{--bs-position:end}.dropdown-menu-lg-end[data-bs-popper]{right:0;left:auto}}@media (min-width:1200px){.dropdown-menu-xl-start{--bs-position:start}.dropdown-menu-xl-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-xl-end{--bs-position:end}.dropdown-menu-xl-end[data-bs-popper]{right:0;left:auto}}@media (min-width:1400px){.dropdown-menu-xxl-start{--bs-position:start}.dropdown-menu-xxl-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-xxl-end{--bs-position:end}.dropdown-menu-xxl-end[data-bs-popper]{right:0;left:auto}}.dropup .dropdown-menu[data-bs-popper]{top:auto;bottom:100%;margin-top:0;margin-bottom:var(--bs-dropdown-spacer)}.dropup .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:0;border-right:.3em solid transparent;border-bottom:.3em solid;border-left:.3em solid transparent}.dropup .dropdown-toggle:empty::after{margin-left:0}.dropend .dropdown-menu[data-bs-popper]{top:0;right:auto;left:100%;margin-top:0;margin-left:var(--bs-dropdown-spacer)}.dropend .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:0;border-bottom:.3em solid transparent;border-left:.3em solid}.dropend .dropdown-toggle:empty::after{margin-left:0}.dropend .dropdown-toggle::after{vertical-align:0}.dropstart .dropdown-menu[data-bs-popper]{top:0;right:100%;left:auto;margin-top:0;margin-right:var(--bs-dropdown-spacer)}.dropstart .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:""}.dropstart .dropdown-toggle::after{display:none}.dropstart .dropdown-toggle::before{display:inline-block;margin-right:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:.3em solid;border-bottom:.3em solid transparent}.dropstart .dropdown-toggle:empty::after{margin-left:0}.dropstart .dropdown-toggle::before{vertical-align:0}.dropdown-divider{height:0;margin:var(--bs-dropdown-divider-margin-y) 0;overflow:hidden;border-top:1px solid var(--bs-dropdown-divider-bg);opacity:1}.dropdown-item{display:block;width:100%;padding:var(--bs-dropdown-item-padding-y) var(--bs-dropdown-item-padding-x);clear:both;font-weight:400;color:var(--bs-dropdown-link-color);text-align:inherit;text-decoration:none;white-space:nowrap;background-color:transparent;border:0;border-radius:var(--bs-dropdown-item-border-radius,0)}.dropdown-item:focus,.dropdown-item:hover{color:var(--bs-dropdown-link-hover-color);background-color:var(--bs-dropdown-link-hover-bg)}.dropdown-item.active,.dropdown-item:active{color:var(--bs-dropdown-link-active-color);text-decoration:none;background-color:var(--bs-dropdown-link-active-bg)}.dropdown-item.disabled,.dropdown-item:disabled{color:var(--bs-dropdown-link-disabled-color);pointer-events:none;background-color:transparent}.dropdown-menu.show{display:block}.dropdown-header{display:block;padding:var(--bs-dropdown-header-padding-y) var(--bs-dropdown-header-padding-x);margin-bottom:0;font-size:.875rem;color:var(--bs-dropdown-header-color);white-space:nowrap}.dropdown-item-text{display:block;padding:var(--bs-dropdown-item-padding-y) var(--bs-dropdown-item-padding-x);color:var(--bs-dropdown-link-color)}.dropdown-menu-dark{--bs-dropdown-color:#dee2e6;--bs-dropdown-bg:#343a40;--bs-dropdown-border-color:var(--bs-border-color-translucent);--bs-dropdown-box-shadow: ;--bs-dropdown-link-color:#dee2e6;--bs-dropdown-link-hover-color:#fff;--bs-dropdown-divider-bg:var(--bs-border-color-translucent);--bs-dropdown-link-hover-bg:rgba(255, 255, 255, 0.15);--bs-dropdown-link-active-color:#fff;--bs-dropdown-link-active-bg:#0d6efd;--bs-dropdown-link-disabled-color:#adb5bd;--bs-dropdown-header-color:#adb5bd}.btn-group,.btn-group-vertical{position:relative;display:inline-flex;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;flex:1 1 auto}.btn-group-vertical>.btn-check:checked+.btn,.btn-group-vertical>.btn-check:focus+.btn,.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:hover,.btn-group>.btn-check:checked+.btn,.btn-group>.btn-check:focus+.btn,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus,.btn-group>.btn:hover{z-index:1}.btn-toolbar{display:flex;flex-wrap:wrap;justify-content:flex-start}.btn-toolbar .input-group{width:auto}.btn-group{border-radius:var(--bs-border-radius)}.btn-group>.btn-group:not(:first-child),.btn-group>:not(.btn-check:first-child)+.btn{margin-left:calc(var(--bs-border-width) * -1)}.btn-group>.btn-group:not(:last-child)>.btn,.btn-group>.btn.dropdown-toggle-split:first-child,.btn-group>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:not(:first-child)>.btn,.btn-group>.btn:nth-child(n+3),.btn-group>:not(.btn-check)+.btn{border-top-left-radius:0;border-bottom-left-radius:0}.dropdown-toggle-split{padding-right:.5625rem;padding-left:.5625rem}.dropdown-toggle-split::after,.dropend .dropdown-toggle-split::after,.dropup .dropdown-toggle-split::after{margin-left:0}.dropstart .dropdown-toggle-split::before{margin-right:0}.btn-group-sm>.btn+.dropdown-toggle-split,.btn-sm+.dropdown-toggle-split{padding-right:.375rem;padding-left:.375rem}.btn-group-lg>.btn+.dropdown-toggle-split,.btn-lg+.dropdown-toggle-split{padding-right:.75rem;padding-left:.75rem}.btn-group-vertical{flex-direction:column;align-items:flex-start;justify-content:center}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group{width:100%}.btn-group-vertical>.btn-group:not(:first-child),.btn-group-vertical>.btn:not(:first-child){margin-top:calc(var(--bs-border-width) * -1)}.btn-group-vertical>.btn-group:not(:last-child)>.btn,.btn-group-vertical>.btn:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:not(:first-child)>.btn,.btn-group-vertical>.btn~.btn{border-top-left-radius:0;border-top-right-radius:0}.nav{--bs-nav-link-padding-x:1rem;--bs-nav-link-padding-y:0.5rem;--bs-nav-link-font-weight: ;--bs-nav-link-color:var(--bs-link-color);--bs-nav-link-hover-color:var(--bs-link-hover-color);--bs-nav-link-disabled-color:var(--bs-secondary-color);display:flex;flex-wrap:wrap;padding-left:0;margin-bottom:0;list-style:none}.nav-link{display:block;padding:var(--bs-nav-link-padding-y) var(--bs-nav-link-padding-x);font-size:var(--bs-nav-link-font-size);font-weight:var(--bs-nav-link-font-weight);color:var(--bs-nav-link-color);text-decoration:none;background:0 0;border:0;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out}@media (prefers-reduced-motion:reduce){.nav-link{transition:none}}.nav-link:focus,.nav-link:hover{color:var(--bs-nav-link-hover-color)}.nav-link:focus-visible{outline:0;box-shadow:0 0 0 .25rem rgba(13,110,253,.25)}.nav-link.disabled,.nav-link:disabled{color:var(--bs-nav-link-disabled-color);pointer-events:none;cursor:default}.nav-tabs{--bs-nav-tabs-border-width:var(--bs-border-width);--bs-nav-tabs-border-color:var(--bs-border-color);--bs-nav-tabs-border-radius:var(--bs-border-radius);--bs-nav-tabs-link-hover-border-color:var(--bs-secondary-bg) var(--bs-secondary-bg) var(--bs-border-color);--bs-nav-tabs-link-active-color:var(--bs-emphasis-color);--bs-nav-tabs-link-active-bg:var(--bs-body-bg);--bs-nav-tabs-link-active-border-color:var(--bs-border-color) var(--bs-border-color) var(--bs-body-bg);border-bottom:var(--bs-nav-tabs-border-width) solid var(--bs-nav-tabs-border-color)}.nav-tabs .nav-link{margin-bottom:calc(-1 * var(--bs-nav-tabs-border-width));border:var(--bs-nav-tabs-border-width) solid transparent;border-top-left-radius:var(--bs-nav-tabs-border-radius);border-top-right-radius:var(--bs-nav-tabs-border-radius)}.nav-tabs .nav-link:focus,.nav-tabs .nav-link:hover{isolation:isolate;border-color:var(--bs-nav-tabs-link-hover-border-color)}.nav-tabs .nav-item.show .nav-link,.nav-tabs .nav-link.active{color:var(--bs-nav-tabs-link-active-color);background-color:var(--bs-nav-tabs-link-active-bg);border-color:var(--bs-nav-tabs-link-active-border-color)}.nav-tabs .dropdown-menu{margin-top:calc(-1 * var(--bs-nav-tabs-border-width));border-top-left-radius:0;border-top-right-radius:0}.nav-pills{--bs-nav-pills-border-radius:var(--bs-border-radius);--bs-nav-pills-link-active-color:#fff;--bs-nav-pills-link-active-bg:#0d6efd}.nav-pills .nav-link{border-radius:var(--bs-nav-pills-border-radius)}.nav-pills .nav-link.active,.nav-pills .show>.nav-link{color:var(--bs-nav-pills-link-active-color);background-color:var(--bs-nav-pills-link-active-bg)}.nav-underline{--bs-nav-underline-gap:1rem;--bs-nav-underline-border-width:0.125rem;--bs-nav-underline-link-active-color:var(--bs-emphasis-color);gap:var(--bs-nav-underline-gap)}.nav-underline .nav-link{padding-right:0;padding-left:0;border-bottom:var(--bs-nav-underline-border-width) solid transparent}.nav-underline .nav-link:focus,.nav-underline .nav-link:hover{border-bottom-color:currentcolor}.nav-underline .nav-link.active,.nav-underline .show>.nav-link{font-weight:700;color:var(--bs-nav-underline-link-active-color);border-bottom-color:currentcolor}.nav-fill .nav-item,.nav-fill>.nav-link{flex:1 1 auto;text-align:center}.nav-justified .nav-item,.nav-justified>.nav-link{flex-basis:0;flex-grow:1;text-align:center}.nav-fill .nav-item .nav-link,.nav-justified .nav-item .nav-link{width:100%}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.navbar{--bs-navbar-padding-x:0;--bs-navbar-padding-y:0.5rem;--bs-navbar-color:rgba(var(--bs-emphasis-color-rgb), 0.65);--bs-navbar-hover-color:rgba(var(--bs-emphasis-color-rgb), 0.8);--bs-navbar-disabled-color:rgba(var(--bs-emphasis-color-rgb), 0.3);--bs-navbar-active-color:rgba(var(--bs-emphasis-color-rgb), 1);--bs-navbar-brand-padding-y:0.3125rem;--bs-navbar-brand-margin-end:1rem;--bs-navbar-brand-font-size:1.25rem;--bs-navbar-brand-color:rgba(var(--bs-emphasis-color-rgb), 1);--bs-navbar-brand-hover-color:rgba(var(--bs-emphasis-color-rgb), 1);--bs-navbar-nav-link-padding-x:0.5rem;--bs-navbar-toggler-padding-y:0.25rem;--bs-navbar-toggler-padding-x:0.75rem;--bs-navbar-toggler-font-size:1.25rem;--bs-navbar-toggler-icon-bg:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%2833, 37, 41, 0.75%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e");--bs-navbar-toggler-border-color:rgba(var(--bs-emphasis-color-rgb), 0.15);--bs-navbar-toggler-border-radius:var(--bs-border-radius);--bs-navbar-toggler-focus-width:0.25rem;--bs-navbar-toggler-transition:box-shadow 0.15s ease-in-out;position:relative;display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;padding:var(--bs-navbar-padding-y) var(--bs-navbar-padding-x)}.navbar>.container,.navbar>.container-fluid,.navbar>.container-lg,.navbar>.container-md,.navbar>.container-sm,.navbar>.container-xl,.navbar>.container-xxl{display:flex;flex-wrap:inherit;align-items:center;justify-content:space-between}.navbar-brand{padding-top:var(--bs-navbar-brand-padding-y);padding-bottom:var(--bs-navbar-brand-padding-y);margin-right:var(--bs-navbar-brand-margin-end);font-size:var(--bs-navbar-brand-font-size);color:var(--bs-navbar-brand-color);text-decoration:none;white-space:nowrap}.navbar-brand:focus,.navbar-brand:hover{color:var(--bs-navbar-brand-hover-color)}.navbar-nav{--bs-nav-link-padding-x:0;--bs-nav-link-padding-y:0.5rem;--bs-nav-link-font-weight: ;--bs-nav-link-color:var(--bs-navbar-color);--bs-nav-link-hover-color:var(--bs-navbar-hover-color);--bs-nav-link-disabled-color:var(--bs-navbar-disabled-color);display:flex;flex-direction:column;padding-left:0;margin-bottom:0;list-style:none}.navbar-nav .nav-link.active,.navbar-nav .nav-link.show{color:var(--bs-navbar-active-color)}.navbar-nav .dropdown-menu{position:static}.navbar-text{padding-top:.5rem;padding-bottom:.5rem;color:var(--bs-navbar-color)}.navbar-text a,.navbar-text a:focus,.navbar-text a:hover{color:var(--bs-navbar-active-color)}.navbar-collapse{flex-basis:100%;flex-grow:1;align-items:center}.navbar-toggler{padding:var(--bs-navbar-toggler-padding-y) var(--bs-navbar-toggler-padding-x);font-size:var(--bs-navbar-toggler-font-size);line-height:1;color:var(--bs-navbar-color);background-color:transparent;border:var(--bs-border-width) solid var(--bs-navbar-toggler-border-color);border-radius:var(--bs-navbar-toggler-border-radius);transition:var(--bs-navbar-toggler-transition)}@media (prefers-reduced-motion:reduce){.navbar-toggler{transition:none}}.navbar-toggler:hover{text-decoration:none}.navbar-toggler:focus{text-decoration:none;outline:0;box-shadow:0 0 0 var(--bs-navbar-toggler-focus-width)}.navbar-toggler-icon{display:inline-block;width:1.5em;height:1.5em;vertical-align:middle;background-image:var(--bs-navbar-toggler-icon-bg);background-repeat:no-repeat;background-position:center;background-size:100%}.navbar-nav-scroll{max-height:var(--bs-scroll-height,75vh);overflow-y:auto}@media (min-width:576px){.navbar-expand-sm{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-sm .navbar-nav{flex-direction:row}.navbar-expand-sm .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-sm .navbar-nav .nav-link{padding-right:var(--bs-navbar-nav-link-padding-x);padding-left:var(--bs-navbar-nav-link-padding-x)}.navbar-expand-sm .navbar-nav-scroll{overflow:visible}.navbar-expand-sm .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-sm .navbar-toggler{display:none}.navbar-expand-sm .offcanvas{position:static;z-index:auto;flex-grow:1;width:auto!important;height:auto!important;visibility:visible!important;background-color:transparent!important;border:0!important;transform:none!important;transition:none}.navbar-expand-sm .offcanvas .offcanvas-header{display:none}.navbar-expand-sm .offcanvas .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}@media (min-width:768px){.navbar-expand-md{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-md .navbar-nav{flex-direction:row}.navbar-expand-md .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-md .navbar-nav .nav-link{padding-right:var(--bs-navbar-nav-link-padding-x);padding-left:var(--bs-navbar-nav-link-padding-x)}.navbar-expand-md .navbar-nav-scroll{overflow:visible}.navbar-expand-md .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-md .navbar-toggler{display:none}.navbar-expand-md .offcanvas{position:static;z-index:auto;flex-grow:1;width:auto!important;height:auto!important;visibility:visible!important;background-color:transparent!important;border:0!important;transform:none!important;transition:none}.navbar-expand-md .offcanvas .offcanvas-header{display:none}.navbar-expand-md .offcanvas .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}@media (min-width:992px){.navbar-expand-lg{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-lg .navbar-nav{flex-direction:row}.navbar-expand-lg .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-lg .navbar-nav .nav-link{padding-right:var(--bs-navbar-nav-link-padding-x);padding-left:var(--bs-navbar-nav-link-padding-x)}.navbar-expand-lg .navbar-nav-scroll{overflow:visible}.navbar-expand-lg .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-lg .navbar-toggler{display:none}.navbar-expand-lg .offcanvas{position:static;z-index:auto;flex-grow:1;width:auto!important;height:auto!important;visibility:visible!important;background-color:transparent!important;border:0!important;transform:none!important;transition:none}.navbar-expand-lg .offcanvas .offcanvas-header{display:none}.navbar-expand-lg .offcanvas .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}@media (min-width:1200px){.navbar-expand-xl{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-xl .navbar-nav{flex-direction:row}.navbar-expand-xl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xl .navbar-nav .nav-link{padding-right:var(--bs-navbar-nav-link-padding-x);padding-left:var(--bs-navbar-nav-link-padding-x)}.navbar-expand-xl .navbar-nav-scroll{overflow:visible}.navbar-expand-xl .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-xl .navbar-toggler{display:none}.navbar-expand-xl .offcanvas{position:static;z-index:auto;flex-grow:1;width:auto!important;height:auto!important;visibility:visible!important;background-color:transparent!important;border:0!important;transform:none!important;transition:none}.navbar-expand-xl .offcanvas .offcanvas-header{display:none}.navbar-expand-xl .offcanvas .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}@media (min-width:1400px){.navbar-expand-xxl{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-xxl .navbar-nav{flex-direction:row}.navbar-expand-xxl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xxl .navbar-nav .nav-link{padding-right:var(--bs-navbar-nav-link-padding-x);padding-left:var(--bs-navbar-nav-link-padding-x)}.navbar-expand-xxl .navbar-nav-scroll{overflow:visible}.navbar-expand-xxl .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-xxl .navbar-toggler{display:none}.navbar-expand-xxl .offcanvas{position:static;z-index:auto;flex-grow:1;width:auto!important;height:auto!important;visibility:visible!important;background-color:transparent!important;border:0!important;transform:none!important;transition:none}.navbar-expand-xxl .offcanvas .offcanvas-header{display:none}.navbar-expand-xxl .offcanvas .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}.navbar-expand{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand .navbar-nav{flex-direction:row}.navbar-expand .navbar-nav .dropdown-menu{position:absolute}.navbar-expand .navbar-nav .nav-link{padding-right:var(--bs-navbar-nav-link-padding-x);padding-left:var(--bs-navbar-nav-link-padding-x)}.navbar-expand .navbar-nav-scroll{overflow:visible}.navbar-expand .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand .navbar-toggler{display:none}.navbar-expand .offcanvas{position:static;z-index:auto;flex-grow:1;width:auto!important;height:auto!important;visibility:visible!important;background-color:transparent!important;border:0!important;transform:none!important;transition:none}.navbar-expand .offcanvas .offcanvas-header{display:none}.navbar-expand .offcanvas .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}.navbar-dark,.navbar[data-bs-theme=dark]{--bs-navbar-color:rgba(255, 255, 255, 0.55);--bs-navbar-hover-color:rgba(255, 255, 255, 0.75);--bs-navbar-disabled-color:rgba(255, 255, 255, 0.25);--bs-navbar-active-color:#fff;--bs-navbar-brand-color:#fff;--bs-navbar-brand-hover-color:#fff;--bs-navbar-toggler-border-color:rgba(255, 255, 255, 0.1);--bs-navbar-toggler-icon-bg:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255, 255, 255, 0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}[data-bs-theme=dark] .navbar-toggler-icon{--bs-navbar-toggler-icon-bg:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255, 255, 255, 0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}.card{--bs-card-spacer-y:1rem;--bs-card-spacer-x:1rem;--bs-card-title-spacer-y:0.5rem;--bs-card-title-color: ;--bs-card-subtitle-color: ;--bs-card-border-width:var(--bs-border-width);--bs-card-border-color:var(--bs-border-color-translucent);--bs-card-border-radius:var(--bs-border-radius);--bs-card-box-shadow: ;--bs-card-inner-border-radius:calc(var(--bs-border-radius) - (var(--bs-border-width)));--bs-card-cap-padding-y:0.5rem;--bs-card-cap-padding-x:1rem;--bs-card-cap-bg:rgba(var(--bs-body-color-rgb), 0.03);--bs-card-cap-color: ;--bs-card-height: ;--bs-card-color: ;--bs-card-bg:var(--bs-body-bg);--bs-card-img-overlay-padding:1rem;--bs-card-group-margin:0.75rem;position:relative;display:flex;flex-direction:column;min-width:0;height:var(--bs-card-height);color:var(--bs-body-color);word-wrap:break-word;background-color:var(--bs-card-bg);background-clip:border-box;border:var(--bs-card-border-width) solid var(--bs-card-border-color);border-radius:var(--bs-card-border-radius)}.card>hr{margin-right:0;margin-left:0}.card>.list-group{border-top:inherit;border-bottom:inherit}.card>.list-group:first-child{border-top-width:0;border-top-left-radius:var(--bs-card-inner-border-radius);border-top-right-radius:var(--bs-card-inner-border-radius)}.card>.list-group:last-child{border-bottom-width:0;border-bottom-right-radius:var(--bs-card-inner-border-radius);border-bottom-left-radius:var(--bs-card-inner-border-radius)}.card>.card-header+.list-group,.card>.list-group+.card-footer{border-top:0}.card-body{flex:1 1 auto;padding:var(--bs-card-spacer-y) var(--bs-card-spacer-x);color:var(--bs-card-color)}.card-title{margin-bottom:var(--bs-card-title-spacer-y);color:var(--bs-card-title-color)}.card-subtitle{margin-top:calc(-.5 * var(--bs-card-title-spacer-y));margin-bottom:0;color:var(--bs-card-subtitle-color)}.card-text:last-child{margin-bottom:0}.card-link+.card-link{margin-left:var(--bs-card-spacer-x)}.card-header{padding:var(--bs-card-cap-padding-y) var(--bs-card-cap-padding-x);margin-bottom:0;color:var(--bs-card-cap-color);background-color:var(--bs-card-cap-bg);border-bottom:var(--bs-card-border-width) solid var(--bs-card-border-color)}.card-header:first-child{border-radius:var(--bs-card-inner-border-radius) var(--bs-card-inner-border-radius) 0 0}.card-footer{padding:var(--bs-card-cap-padding-y) var(--bs-card-cap-padding-x);color:var(--bs-card-cap-color);background-color:var(--bs-card-cap-bg);border-top:var(--bs-card-border-width) solid var(--bs-card-border-color)}.card-footer:last-child{border-radius:0 0 var(--bs-card-inner-border-radius) var(--bs-card-inner-border-radius)}.card-header-tabs{margin-right:calc(-.5 * var(--bs-card-cap-padding-x));margin-bottom:calc(-1 * var(--bs-card-cap-padding-y));margin-left:calc(-.5 * var(--bs-card-cap-padding-x));border-bottom:0}.card-header-tabs .nav-link.active{background-color:var(--bs-card-bg);border-bottom-color:var(--bs-card-bg)}.card-header-pills{margin-right:calc(-.5 * var(--bs-card-cap-padding-x));margin-left:calc(-.5 * var(--bs-card-cap-padding-x))}.card-img-overlay{position:absolute;top:0;right:0;bottom:0;left:0;padding:var(--bs-card-img-overlay-padding);border-radius:var(--bs-card-inner-border-radius)}.card-img,.card-img-bottom,.card-img-top{width:100%}.card-img,.card-img-top{border-top-left-radius:var(--bs-card-inner-border-radius);border-top-right-radius:var(--bs-card-inner-border-radius)}.card-img,.card-img-bottom{border-bottom-right-radius:var(--bs-card-inner-border-radius);border-bottom-left-radius:var(--bs-card-inner-border-radius)}.card-group>.card{margin-bottom:var(--bs-card-group-margin)}@media (min-width:576px){.card-group{display:flex;flex-flow:row wrap}.card-group>.card{flex:1 0 0%;margin-bottom:0}.card-group>.card+.card{margin-left:0;border-left:0}.card-group>.card:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.card-group>.card:not(:last-child) .card-header,.card-group>.card:not(:last-child) .card-img-top{border-top-right-radius:0}.card-group>.card:not(:last-child) .card-footer,.card-group>.card:not(:last-child) .card-img-bottom{border-bottom-right-radius:0}.card-group>.card:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.card-group>.card:not(:first-child) .card-header,.card-group>.card:not(:first-child) .card-img-top{border-top-left-radius:0}.card-group>.card:not(:first-child) .card-footer,.card-group>.card:not(:first-child) .card-img-bottom{border-bottom-left-radius:0}}.accordion{--bs-accordion-color:var(--bs-body-color);--bs-accordion-bg:var(--bs-body-bg);--bs-accordion-transition:color 0.15s ease-in-out,background-color 0.15s ease-in-out,border-color 0.15s ease-in-out,box-shadow 0.15s ease-in-out,border-radius 0.15s ease;--bs-accordion-border-color:var(--bs-border-color);--bs-accordion-border-width:var(--bs-border-width);--bs-accordion-border-radius:var(--bs-border-radius);--bs-accordion-inner-border-radius:calc(var(--bs-border-radius) - (var(--bs-border-width)));--bs-accordion-btn-padding-x:1.25rem;--bs-accordion-btn-padding-y:1rem;--bs-accordion-btn-color:var(--bs-body-color);--bs-accordion-btn-bg:var(--bs-accordion-bg);--bs-accordion-btn-icon:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23212529'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e");--bs-accordion-btn-icon-width:1.25rem;--bs-accordion-btn-icon-transform:rotate(-180deg);--bs-accordion-btn-icon-transition:transform 0.2s ease-in-out;--bs-accordion-btn-active-icon:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23052c65'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e");--bs-accordion-btn-focus-border-color:#86b7fe;--bs-accordion-btn-focus-box-shadow:0 0 0 0.25rem rgba(13, 110, 253, 0.25);--bs-accordion-body-padding-x:1.25rem;--bs-accordion-body-padding-y:1rem;--bs-accordion-active-color:var(--bs-primary-text-emphasis);--bs-accordion-active-bg:var(--bs-primary-bg-subtle)}.accordion-button{position:relative;display:flex;align-items:center;width:100%;padding:var(--bs-accordion-btn-padding-y) var(--bs-accordion-btn-padding-x);font-size:1rem;color:var(--bs-accordion-btn-color);text-align:left;background-color:var(--bs-accordion-btn-bg);border:0;border-radius:0;overflow-anchor:none;transition:var(--bs-accordion-transition)}@media (prefers-reduced-motion:reduce){.accordion-button{transition:none}}.accordion-button:not(.collapsed){color:var(--bs-accordion-active-color);background-color:var(--bs-accordion-active-bg);box-shadow:inset 0 calc(-1 * var(--bs-accordion-border-width)) 0 var(--bs-accordion-border-color)}.accordion-button:not(.collapsed)::after{background-image:var(--bs-accordion-btn-active-icon);transform:var(--bs-accordion-btn-icon-transform)}.accordion-button::after{flex-shrink:0;width:var(--bs-accordion-btn-icon-width);height:var(--bs-accordion-btn-icon-width);margin-left:auto;content:"";background-image:var(--bs-accordion-btn-icon);background-repeat:no-repeat;background-size:var(--bs-accordion-btn-icon-width);transition:var(--bs-accordion-btn-icon-transition)}@media (prefers-reduced-motion:reduce){.accordion-button::after{transition:none}}.accordion-button:hover{z-index:2}.accordion-button:focus{z-index:3;border-color:var(--bs-accordion-btn-focus-border-color);outline:0;box-shadow:var(--bs-accordion-btn-focus-box-shadow)}.accordion-header{margin-bottom:0}.accordion-item{color:var(--bs-accordion-color);background-color:var(--bs-accordion-bg);border:var(--bs-accordion-border-width) solid var(--bs-accordion-border-color)}.accordion-item:first-of-type{border-top-left-radius:var(--bs-accordion-border-radius);border-top-right-radius:var(--bs-accordion-border-radius)}.accordion-item:first-of-type .accordion-button{border-top-left-radius:var(--bs-accordion-inner-border-radius);border-top-right-radius:var(--bs-accordion-inner-border-radius)}.accordion-item:not(:first-of-type){border-top:0}.accordion-item:last-of-type{border-bottom-right-radius:var(--bs-accordion-border-radius);border-bottom-left-radius:var(--bs-accordion-border-radius)}.accordion-item:last-of-type .accordion-button.collapsed{border-bottom-right-radius:var(--bs-accordion-inner-border-radius);border-bottom-left-radius:var(--bs-accordion-inner-border-radius)}.accordion-item:last-of-type .accordion-collapse{border-bottom-right-radius:var(--bs-accordion-border-radius);border-bottom-left-radius:var(--bs-accordion-border-radius)}.accordion-body{padding:var(--bs-accordion-body-padding-y) var(--bs-accordion-body-padding-x)}.accordion-flush .accordion-collapse{border-width:0}.accordion-flush .accordion-item{border-right:0;border-left:0;border-radius:0}.accordion-flush .accordion-item:first-child{border-top:0}.accordion-flush .accordion-item:last-child{border-bottom:0}.accordion-flush .accordion-item .accordion-button,.accordion-flush .accordion-item .accordion-button.collapsed{border-radius:0}[data-bs-theme=dark] .accordion-button::after{--bs-accordion-btn-icon:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%236ea8fe'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e");--bs-accordion-btn-active-icon:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%236ea8fe'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e")}.breadcrumb{--bs-breadcrumb-padding-x:0;--bs-breadcrumb-padding-y:0;--bs-breadcrumb-margin-bottom:1rem;--bs-breadcrumb-bg: ;--bs-breadcrumb-border-radius: ;--bs-breadcrumb-divider-color:var(--bs-secondary-color);--bs-breadcrumb-item-padding-x:0.5rem;--bs-breadcrumb-item-active-color:var(--bs-secondary-color);display:flex;flex-wrap:wrap;padding:var(--bs-breadcrumb-padding-y) var(--bs-breadcrumb-padding-x);margin-bottom:var(--bs-breadcrumb-margin-bottom);font-size:var(--bs-breadcrumb-font-size);list-style:none;background-color:var(--bs-breadcrumb-bg);border-radius:var(--bs-breadcrumb-border-radius)}.breadcrumb-item+.breadcrumb-item{padding-left:var(--bs-breadcrumb-item-padding-x)}.breadcrumb-item+.breadcrumb-item::before{float:left;padding-right:var(--bs-breadcrumb-item-padding-x);color:var(--bs-breadcrumb-divider-color);content:var(--bs-breadcrumb-divider, "/")}.breadcrumb-item.active{color:var(--bs-breadcrumb-item-active-color)}.pagination{--bs-pagination-padding-x:0.75rem;--bs-pagination-padding-y:0.375rem;--bs-pagination-font-size:1rem;--bs-pagination-color:var(--bs-link-color);--bs-pagination-bg:var(--bs-body-bg);--bs-pagination-border-width:var(--bs-border-width);--bs-pagination-border-color:var(--bs-border-color);--bs-pagination-border-radius:var(--bs-border-radius);--bs-pagination-hover-color:var(--bs-link-hover-color);--bs-pagination-hover-bg:var(--bs-tertiary-bg);--bs-pagination-hover-border-color:var(--bs-border-color);--bs-pagination-focus-color:var(--bs-link-hover-color);--bs-pagination-focus-bg:var(--bs-secondary-bg);--bs-pagination-focus-box-shadow:0 0 0 0.25rem rgba(13, 110, 253, 0.25);--bs-pagination-active-color:#fff;--bs-pagination-active-bg:#0d6efd;--bs-pagination-active-border-color:#0d6efd;--bs-pagination-disabled-color:var(--bs-secondary-color);--bs-pagination-disabled-bg:var(--bs-secondary-bg);--bs-pagination-disabled-border-color:var(--bs-border-color);display:flex;padding-left:0;list-style:none}.page-link{position:relative;display:block;padding:var(--bs-pagination-padding-y) var(--bs-pagination-padding-x);font-size:var(--bs-pagination-font-size);color:var(--bs-pagination-color);text-decoration:none;background-color:var(--bs-pagination-bg);border:var(--bs-pagination-border-width) solid var(--bs-pagination-border-color);transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.page-link{transition:none}}.page-link:hover{z-index:2;color:var(--bs-pagination-hover-color);background-color:var(--bs-pagination-hover-bg);border-color:var(--bs-pagination-hover-border-color)}.page-link:focus{z-index:3;color:var(--bs-pagination-focus-color);background-color:var(--bs-pagination-focus-bg);outline:0;box-shadow:var(--bs-pagination-focus-box-shadow)}.active>.page-link,.page-link.active{z-index:3;color:var(--bs-pagination-active-color);background-color:var(--bs-pagination-active-bg);border-color:var(--bs-pagination-active-border-color)}.disabled>.page-link,.page-link.disabled{color:var(--bs-pagination-disabled-color);pointer-events:none;background-color:var(--bs-pagination-disabled-bg);border-color:var(--bs-pagination-disabled-border-color)}.page-item:not(:first-child) .page-link{margin-left:calc(var(--bs-border-width) * -1)}.page-item:first-child .page-link{border-top-left-radius:var(--bs-pagination-border-radius);border-bottom-left-radius:var(--bs-pagination-border-radius)}.page-item:last-child .page-link{border-top-right-radius:var(--bs-pagination-border-radius);border-bottom-right-radius:var(--bs-pagination-border-radius)}.pagination-lg{--bs-pagination-padding-x:1.5rem;--bs-pagination-padding-y:0.75rem;--bs-pagination-font-size:1.25rem;--bs-pagination-border-radius:var(--bs-border-radius-lg)}.pagination-sm{--bs-pagination-padding-x:0.5rem;--bs-pagination-padding-y:0.25rem;--bs-pagination-font-size:0.875rem;--bs-pagination-border-radius:var(--bs-border-radius-sm)}.badge{--bs-badge-padding-x:0.65em;--bs-badge-padding-y:0.35em;--bs-badge-font-size:0.75em;--bs-badge-font-weight:700;--bs-badge-color:#fff;--bs-badge-border-radius:var(--bs-border-radius);display:inline-block;padding:var(--bs-badge-padding-y) var(--bs-badge-padding-x);font-size:var(--bs-badge-font-size);font-weight:var(--bs-badge-font-weight);line-height:1;color:var(--bs-badge-color);text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:var(--bs-badge-border-radius)}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.alert{--bs-alert-bg:transparent;--bs-alert-padding-x:1rem;--bs-alert-padding-y:1rem;--bs-alert-margin-bottom:1rem;--bs-alert-color:inherit;--bs-alert-border-color:transparent;--bs-alert-border:var(--bs-border-width) solid var(--bs-alert-border-color);--bs-alert-border-radius:var(--bs-border-radius);--bs-alert-link-color:inherit;position:relative;padding:var(--bs-alert-padding-y) var(--bs-alert-padding-x);margin-bottom:var(--bs-alert-margin-bottom);color:var(--bs-alert-color);background-color:var(--bs-alert-bg);border:var(--bs-alert-border);border-radius:var(--bs-alert-border-radius)}.alert-heading{color:inherit}.alert-link{font-weight:700;color:var(--bs-alert-link-color)}.alert-dismissible{padding-right:3rem}.alert-dismissible .btn-close{position:absolute;top:0;right:0;z-index:2;padding:1.25rem 1rem}.alert-primary{--bs-alert-color:var(--bs-primary-text-emphasis);--bs-alert-bg:var(--bs-primary-bg-subtle);--bs-alert-border-color:var(--bs-primary-border-subtle);--bs-alert-link-color:var(--bs-primary-text-emphasis)}.alert-secondary{--bs-alert-color:var(--bs-secondary-text-emphasis);--bs-alert-bg:var(--bs-secondary-bg-subtle);--bs-alert-border-color:var(--bs-secondary-border-subtle);--bs-alert-link-color:var(--bs-secondary-text-emphasis)}.alert-success{--bs-alert-color:var(--bs-success-text-emphasis);--bs-alert-bg:var(--bs-success-bg-subtle);--bs-alert-border-color:var(--bs-success-border-subtle);--bs-alert-link-color:var(--bs-success-text-emphasis)}.alert-info{--bs-alert-color:var(--bs-info-text-emphasis);--bs-alert-bg:var(--bs-info-bg-subtle);--bs-alert-border-color:var(--bs-info-border-subtle);--bs-alert-link-color:var(--bs-info-text-emphasis)}.alert-warning{--bs-alert-color:var(--bs-warning-text-emphasis);--bs-alert-bg:var(--bs-warning-bg-subtle);--bs-alert-border-color:var(--bs-warning-border-subtle);--bs-alert-link-color:var(--bs-warning-text-emphasis)}.alert-danger{--bs-alert-color:var(--bs-danger-text-emphasis);--bs-alert-bg:var(--bs-danger-bg-subtle);--bs-alert-border-color:var(--bs-danger-border-subtle);--bs-alert-link-color:var(--bs-danger-text-emphasis)}.alert-light{--bs-alert-color:var(--bs-light-text-emphasis);--bs-alert-bg:var(--bs-light-bg-subtle);--bs-alert-border-color:var(--bs-light-border-subtle);--bs-alert-link-color:var(--bs-light-text-emphasis)}.alert-dark{--bs-alert-color:var(--bs-dark-text-emphasis);--bs-alert-bg:var(--bs-dark-bg-subtle);--bs-alert-border-color:var(--bs-dark-border-subtle);--bs-alert-link-color:var(--bs-dark-text-emphasis)}@keyframes progress-bar-stripes{0%{background-position-x:1rem}}.progress,.progress-stacked{--bs-progress-height:1rem;--bs-progress-font-size:0.75rem;--bs-progress-bg:var(--bs-secondary-bg);--bs-progress-border-radius:var(--bs-border-radius);--bs-progress-box-shadow:var(--bs-box-shadow-inset);--bs-progress-bar-color:#fff;--bs-progress-bar-bg:#0d6efd;--bs-progress-bar-transition:width 0.6s ease;display:flex;height:var(--bs-progress-height);overflow:hidden;font-size:var(--bs-progress-font-size);background-color:var(--bs-progress-bg);border-radius:var(--bs-progress-border-radius)}.progress-bar{display:flex;flex-direction:column;justify-content:center;overflow:hidden;color:var(--bs-progress-bar-color);text-align:center;white-space:nowrap;background-color:var(--bs-progress-bar-bg);transition:var(--bs-progress-bar-transition)}@media (prefers-reduced-motion:reduce){.progress-bar{transition:none}}.progress-bar-striped{background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-size:var(--bs-progress-height) var(--bs-progress-height)}.progress-stacked>.progress{overflow:visible}.progress-stacked>.progress>.progress-bar{width:100%}.progress-bar-animated{animation:1s linear infinite progress-bar-stripes}@media (prefers-reduced-motion:reduce){.progress-bar-animated{animation:none}}.list-group{--bs-list-group-color:var(--bs-body-color);--bs-list-group-bg:var(--bs-body-bg);--bs-list-group-border-color:var(--bs-border-color);--bs-list-group-border-width:var(--bs-border-width);--bs-list-group-border-radius:var(--bs-border-radius);--bs-list-group-item-padding-x:1rem;--bs-list-group-item-padding-y:0.5rem;--bs-list-group-action-color:var(--bs-secondary-color);--bs-list-group-action-hover-color:var(--bs-emphasis-color);--bs-list-group-action-hover-bg:var(--bs-tertiary-bg);--bs-list-group-action-active-color:var(--bs-body-color);--bs-list-group-action-active-bg:var(--bs-secondary-bg);--bs-list-group-disabled-color:var(--bs-secondary-color);--bs-list-group-disabled-bg:var(--bs-body-bg);--bs-list-group-active-color:#fff;--bs-list-group-active-bg:#0d6efd;--bs-list-group-active-border-color:#0d6efd;display:flex;flex-direction:column;padding-left:0;margin-bottom:0;border-radius:var(--bs-list-group-border-radius)}.list-group-numbered{list-style-type:none;counter-reset:section}.list-group-numbered>.list-group-item::before{content:counters(section, ".") ". ";counter-increment:section}.list-group-item-action{width:100%;color:var(--bs-list-group-action-color);text-align:inherit}.list-group-item-action:focus,.list-group-item-action:hover{z-index:1;color:var(--bs-list-group-action-hover-color);text-decoration:none;background-color:var(--bs-list-group-action-hover-bg)}.list-group-item-action:active{color:var(--bs-list-group-action-active-color);background-color:var(--bs-list-group-action-active-bg)}.list-group-item{position:relative;display:block;padding:var(--bs-list-group-item-padding-y) var(--bs-list-group-item-padding-x);color:var(--bs-list-group-color);text-decoration:none;background-color:var(--bs-list-group-bg);border:var(--bs-list-group-border-width) solid var(--bs-list-group-border-color)}.list-group-item:first-child{border-top-left-radius:inherit;border-top-right-radius:inherit}.list-group-item:last-child{border-bottom-right-radius:inherit;border-bottom-left-radius:inherit}.list-group-item.disabled,.list-group-item:disabled{color:var(--bs-list-group-disabled-color);pointer-events:none;background-color:var(--bs-list-group-disabled-bg)}.list-group-item.active{z-index:2;color:var(--bs-list-group-active-color);background-color:var(--bs-list-group-active-bg);border-color:var(--bs-list-group-active-border-color)}.list-group-item+.list-group-item{border-top-width:0}.list-group-item+.list-group-item.active{margin-top:calc(-1 * var(--bs-list-group-border-width));border-top-width:var(--bs-list-group-border-width)}.list-group-horizontal{flex-direction:row}.list-group-horizontal>.list-group-item:first-child:not(:last-child){border-bottom-left-radius:var(--bs-list-group-border-radius);border-top-right-radius:0}.list-group-horizontal>.list-group-item:last-child:not(:first-child){border-top-right-radius:var(--bs-list-group-border-radius);border-bottom-left-radius:0}.list-group-horizontal>.list-group-item.active{margin-top:0}.list-group-horizontal>.list-group-item+.list-group-item{border-top-width:var(--bs-list-group-border-width);border-left-width:0}.list-group-horizontal>.list-group-item+.list-group-item.active{margin-left:calc(-1 * var(--bs-list-group-border-width));border-left-width:var(--bs-list-group-border-width)}@media (min-width:576px){.list-group-horizontal-sm{flex-direction:row}.list-group-horizontal-sm>.list-group-item:first-child:not(:last-child){border-bottom-left-radius:var(--bs-list-group-border-radius);border-top-right-radius:0}.list-group-horizontal-sm>.list-group-item:last-child:not(:first-child){border-top-right-radius:var(--bs-list-group-border-radius);border-bottom-left-radius:0}.list-group-horizontal-sm>.list-group-item.active{margin-top:0}.list-group-horizontal-sm>.list-group-item+.list-group-item{border-top-width:var(--bs-list-group-border-width);border-left-width:0}.list-group-horizontal-sm>.list-group-item+.list-group-item.active{margin-left:calc(-1 * var(--bs-list-group-border-width));border-left-width:var(--bs-list-group-border-width)}}@media (min-width:768px){.list-group-horizontal-md{flex-direction:row}.list-group-horizontal-md>.list-group-item:first-child:not(:last-child){border-bottom-left-radius:var(--bs-list-group-border-radius);border-top-right-radius:0}.list-group-horizontal-md>.list-group-item:last-child:not(:first-child){border-top-right-radius:var(--bs-list-group-border-radius);border-bottom-left-radius:0}.list-group-horizontal-md>.list-group-item.active{margin-top:0}.list-group-horizontal-md>.list-group-item+.list-group-item{border-top-width:var(--bs-list-group-border-width);border-left-width:0}.list-group-horizontal-md>.list-group-item+.list-group-item.active{margin-left:calc(-1 * var(--bs-list-group-border-width));border-left-width:var(--bs-list-group-border-width)}}@media (min-width:992px){.list-group-horizontal-lg{flex-direction:row}.list-group-horizontal-lg>.list-group-item:first-child:not(:last-child){border-bottom-left-radius:var(--bs-list-group-border-radius);border-top-right-radius:0}.list-group-horizontal-lg>.list-group-item:last-child:not(:first-child){border-top-right-radius:var(--bs-list-group-border-radius);border-bottom-left-radius:0}.list-group-horizontal-lg>.list-group-item.active{margin-top:0}.list-group-horizontal-lg>.list-group-item+.list-group-item{border-top-width:var(--bs-list-group-border-width);border-left-width:0}.list-group-horizontal-lg>.list-group-item+.list-group-item.active{margin-left:calc(-1 * var(--bs-list-group-border-width));border-left-width:var(--bs-list-group-border-width)}}@media (min-width:1200px){.list-group-horizontal-xl{flex-direction:row}.list-group-horizontal-xl>.list-group-item:first-child:not(:last-child){border-bottom-left-radius:var(--bs-list-group-border-radius);border-top-right-radius:0}.list-group-horizontal-xl>.list-group-item:last-child:not(:first-child){border-top-right-radius:var(--bs-list-group-border-radius);border-bottom-left-radius:0}.list-group-horizontal-xl>.list-group-item.active{margin-top:0}.list-group-horizontal-xl>.list-group-item+.list-group-item{border-top-width:var(--bs-list-group-border-width);border-left-width:0}.list-group-horizontal-xl>.list-group-item+.list-group-item.active{margin-left:calc(-1 * var(--bs-list-group-border-width));border-left-width:var(--bs-list-group-border-width)}}@media (min-width:1400px){.list-group-horizontal-xxl{flex-direction:row}.list-group-horizontal-xxl>.list-group-item:first-child:not(:last-child){border-bottom-left-radius:var(--bs-list-group-border-radius);border-top-right-radius:0}.list-group-horizontal-xxl>.list-group-item:last-child:not(:first-child){border-top-right-radius:var(--bs-list-group-border-radius);border-bottom-left-radius:0}.list-group-horizontal-xxl>.list-group-item.active{margin-top:0}.list-group-horizontal-xxl>.list-group-item+.list-group-item{border-top-width:var(--bs-list-group-border-width);border-left-width:0}.list-group-horizontal-xxl>.list-group-item+.list-group-item.active{margin-left:calc(-1 * var(--bs-list-group-border-width));border-left-width:var(--bs-list-group-border-width)}}.list-group-flush{border-radius:0}.list-group-flush>.list-group-item{border-width:0 0 var(--bs-list-group-border-width)}.list-group-flush>.list-group-item:last-child{border-bottom-width:0}.list-group-item-primary{--bs-list-group-color:var(--bs-primary-text-emphasis);--bs-list-group-bg:var(--bs-primary-bg-subtle);--bs-list-group-border-color:var(--bs-primary-border-subtle);--bs-list-group-action-hover-color:var(--bs-emphasis-color);--bs-list-group-action-hover-bg:var(--bs-primary-border-subtle);--bs-list-group-action-active-color:var(--bs-emphasis-color);--bs-list-group-action-active-bg:var(--bs-primary-border-subtle);--bs-list-group-active-color:var(--bs-primary-bg-subtle);--bs-list-group-active-bg:var(--bs-primary-text-emphasis);--bs-list-group-active-border-color:var(--bs-primary-text-emphasis)}.list-group-item-secondary{--bs-list-group-color:var(--bs-secondary-text-emphasis);--bs-list-group-bg:var(--bs-secondary-bg-subtle);--bs-list-group-border-color:var(--bs-secondary-border-subtle);--bs-list-group-action-hover-color:var(--bs-emphasis-color);--bs-list-group-action-hover-bg:var(--bs-secondary-border-subtle);--bs-list-group-action-active-color:var(--bs-emphasis-color);--bs-list-group-action-active-bg:var(--bs-secondary-border-subtle);--bs-list-group-active-color:var(--bs-secondary-bg-subtle);--bs-list-group-active-bg:var(--bs-secondary-text-emphasis);--bs-list-group-active-border-color:var(--bs-secondary-text-emphasis)}.list-group-item-success{--bs-list-group-color:var(--bs-success-text-emphasis);--bs-list-group-bg:var(--bs-success-bg-subtle);--bs-list-group-border-color:var(--bs-success-border-subtle);--bs-list-group-action-hover-color:var(--bs-emphasis-color);--bs-list-group-action-hover-bg:var(--bs-success-border-subtle);--bs-list-group-action-active-color:var(--bs-emphasis-color);--bs-list-group-action-active-bg:var(--bs-success-border-subtle);--bs-list-group-active-color:var(--bs-success-bg-subtle);--bs-list-group-active-bg:var(--bs-success-text-emphasis);--bs-list-group-active-border-color:var(--bs-success-text-emphasis)}.list-group-item-info{--bs-list-group-color:var(--bs-info-text-emphasis);--bs-list-group-bg:var(--bs-info-bg-subtle);--bs-list-group-border-color:var(--bs-info-border-subtle);--bs-list-group-action-hover-color:var(--bs-emphasis-color);--bs-list-group-action-hover-bg:var(--bs-info-border-subtle);--bs-list-group-action-active-color:var(--bs-emphasis-color);--bs-list-group-action-active-bg:var(--bs-info-border-subtle);--bs-list-group-active-color:var(--bs-info-bg-subtle);--bs-list-group-active-bg:var(--bs-info-text-emphasis);--bs-list-group-active-border-color:var(--bs-info-text-emphasis)}.list-group-item-warning{--bs-list-group-color:var(--bs-warning-text-emphasis);--bs-list-group-bg:var(--bs-warning-bg-subtle);--bs-list-group-border-color:var(--bs-warning-border-subtle);--bs-list-group-action-hover-color:var(--bs-emphasis-color);--bs-list-group-action-hover-bg:var(--bs-warning-border-subtle);--bs-list-group-action-active-color:var(--bs-emphasis-color);--bs-list-group-action-active-bg:var(--bs-warning-border-subtle);--bs-list-group-active-color:var(--bs-warning-bg-subtle);--bs-list-group-active-bg:var(--bs-warning-text-emphasis);--bs-list-group-active-border-color:var(--bs-warning-text-emphasis)}.list-group-item-danger{--bs-list-group-color:var(--bs-danger-text-emphasis);--bs-list-group-bg:var(--bs-danger-bg-subtle);--bs-list-group-border-color:var(--bs-danger-border-subtle);--bs-list-group-action-hover-color:var(--bs-emphasis-color);--bs-list-group-action-hover-bg:var(--bs-danger-border-subtle);--bs-list-group-action-active-color:var(--bs-emphasis-color);--bs-list-group-action-active-bg:var(--bs-danger-border-subtle);--bs-list-group-active-color:var(--bs-danger-bg-subtle);--bs-list-group-active-bg:var(--bs-danger-text-emphasis);--bs-list-group-active-border-color:var(--bs-danger-text-emphasis)}.list-group-item-light{--bs-list-group-color:var(--bs-light-text-emphasis);--bs-list-group-bg:var(--bs-light-bg-subtle);--bs-list-group-border-color:var(--bs-light-border-subtle);--bs-list-group-action-hover-color:var(--bs-emphasis-color);--bs-list-group-action-hover-bg:var(--bs-light-border-subtle);--bs-list-group-action-active-color:var(--bs-emphasis-color);--bs-list-group-action-active-bg:var(--bs-light-border-subtle);--bs-list-group-active-color:var(--bs-light-bg-subtle);--bs-list-group-active-bg:var(--bs-light-text-emphasis);--bs-list-group-active-border-color:var(--bs-light-text-emphasis)}.list-group-item-dark{--bs-list-group-color:var(--bs-dark-text-emphasis);--bs-list-group-bg:var(--bs-dark-bg-subtle);--bs-list-group-border-color:var(--bs-dark-border-subtle);--bs-list-group-action-hover-color:var(--bs-emphasis-color);--bs-list-group-action-hover-bg:var(--bs-dark-border-subtle);--bs-list-group-action-active-color:var(--bs-emphasis-color);--bs-list-group-action-active-bg:var(--bs-dark-border-subtle);--bs-list-group-active-color:var(--bs-dark-bg-subtle);--bs-list-group-active-bg:var(--bs-dark-text-emphasis);--bs-list-group-active-border-color:var(--bs-dark-text-emphasis)}.btn-close{--bs-btn-close-color:#000;--bs-btn-close-bg:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23000'%3e%3cpath d='M.293.293a1 1 0 0 1 1.414 0L8 6.586 14.293.293a1 1 0 1 1 1.414 1.414L9.414 8l6.293 6.293a1 1 0 0 1-1.414 1.414L8 9.414l-6.293 6.293a1 1 0 0 1-1.414-1.414L6.586 8 .293 1.707a1 1 0 0 1 0-1.414z'/%3e%3c/svg%3e");--bs-btn-close-opacity:0.5;--bs-btn-close-hover-opacity:0.75;--bs-btn-close-focus-shadow:0 0 0 0.25rem rgba(13, 110, 253, 0.25);--bs-btn-close-focus-opacity:1;--bs-btn-close-disabled-opacity:0.25;--bs-btn-close-white-filter:invert(1) grayscale(100%) brightness(200%);box-sizing:content-box;width:1em;height:1em;padding:.25em .25em;color:var(--bs-btn-close-color);background:transparent var(--bs-btn-close-bg) center/1em auto no-repeat;border:0;border-radius:.375rem;opacity:var(--bs-btn-close-opacity)}.btn-close:hover{color:var(--bs-btn-close-color);text-decoration:none;opacity:var(--bs-btn-close-hover-opacity)}.btn-close:focus{outline:0;box-shadow:var(--bs-btn-close-focus-shadow);opacity:var(--bs-btn-close-focus-opacity)}.btn-close.disabled,.btn-close:disabled{pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;opacity:var(--bs-btn-close-disabled-opacity)}.btn-close-white{filter:var(--bs-btn-close-white-filter)}[data-bs-theme=dark] .btn-close{filter:var(--bs-btn-close-white-filter)}.toast{--bs-toast-zindex:1090;--bs-toast-padding-x:0.75rem;--bs-toast-padding-y:0.5rem;--bs-toast-spacing:1.5rem;--bs-toast-max-width:350px;--bs-toast-font-size:0.875rem;--bs-toast-color: ;--bs-toast-bg:rgba(var(--bs-body-bg-rgb), 0.85);--bs-toast-border-width:var(--bs-border-width);--bs-toast-border-color:var(--bs-border-color-translucent);--bs-toast-border-radius:var(--bs-border-radius);--bs-toast-box-shadow:var(--bs-box-shadow);--bs-toast-header-color:var(--bs-secondary-color);--bs-toast-header-bg:rgba(var(--bs-body-bg-rgb), 0.85);--bs-toast-header-border-color:var(--bs-border-color-translucent);width:var(--bs-toast-max-width);max-width:100%;font-size:var(--bs-toast-font-size);color:var(--bs-toast-color);pointer-events:auto;background-color:var(--bs-toast-bg);background-clip:padding-box;border:var(--bs-toast-border-width) solid var(--bs-toast-border-color);box-shadow:var(--bs-toast-box-shadow);border-radius:var(--bs-toast-border-radius)}.toast.showing{opacity:0}.toast:not(.show){display:none}.toast-container{--bs-toast-zindex:1090;position:absolute;z-index:var(--bs-toast-zindex);width:-webkit-max-content;width:-moz-max-content;width:max-content;max-width:100%;pointer-events:none}.toast-container>:not(:last-child){margin-bottom:var(--bs-toast-spacing)}.toast-header{display:flex;align-items:center;padding:var(--bs-toast-padding-y) var(--bs-toast-padding-x);color:var(--bs-toast-header-color);background-color:var(--bs-toast-header-bg);background-clip:padding-box;border-bottom:var(--bs-toast-border-width) solid var(--bs-toast-header-border-color);border-top-left-radius:calc(var(--bs-toast-border-radius) - var(--bs-toast-border-width));border-top-right-radius:calc(var(--bs-toast-border-radius) - var(--bs-toast-border-width))}.toast-header .btn-close{margin-right:calc(-.5 * var(--bs-toast-padding-x));margin-left:var(--bs-toast-padding-x)}.toast-body{padding:var(--bs-toast-padding-x);word-wrap:break-word}.modal{--bs-modal-zindex:1055;--bs-modal-width:500px;--bs-modal-padding:1rem;--bs-modal-margin:0.5rem;--bs-modal-color: ;--bs-modal-bg:var(--bs-body-bg);--bs-modal-border-color:var(--bs-border-color-translucent);--bs-modal-border-width:var(--bs-border-width);--bs-modal-border-radius:var(--bs-border-radius-lg);--bs-modal-box-shadow:0 0.125rem 0.25rem rgba(0, 0, 0, 0.075);--bs-modal-inner-border-radius:calc(var(--bs-border-radius-lg) - (var(--bs-border-width)));--bs-modal-header-padding-x:1rem;--bs-modal-header-padding-y:1rem;--bs-modal-header-padding:1rem 1rem;--bs-modal-header-border-color:var(--bs-border-color);--bs-modal-header-border-width:var(--bs-border-width);--bs-modal-title-line-height:1.5;--bs-modal-footer-gap:0.5rem;--bs-modal-footer-bg: ;--bs-modal-footer-border-color:var(--bs-border-color);--bs-modal-footer-border-width:var(--bs-border-width);position:fixed;top:0;left:0;z-index:var(--bs-modal-zindex);display:none;width:100%;height:100%;overflow-x:hidden;overflow-y:auto;outline:0}.modal-dialog{position:relative;width:auto;margin:var(--bs-modal-margin);pointer-events:none}.modal.fade .modal-dialog{transition:transform .3s ease-out;transform:translate(0,-50px)}@media (prefers-reduced-motion:reduce){.modal.fade .modal-dialog{transition:none}}.modal.show .modal-dialog{transform:none}.modal.modal-static .modal-dialog{transform:scale(1.02)}.modal-dialog-scrollable{height:calc(100% - var(--bs-modal-margin) * 2)}.modal-dialog-scrollable .modal-content{max-height:100%;overflow:hidden}.modal-dialog-scrollable .modal-body{overflow-y:auto}.modal-dialog-centered{display:flex;align-items:center;min-height:calc(100% - var(--bs-modal-margin) * 2)}.modal-content{position:relative;display:flex;flex-direction:column;width:100%;color:var(--bs-modal-color);pointer-events:auto;background-color:var(--bs-modal-bg);background-clip:padding-box;border:var(--bs-modal-border-width) solid var(--bs-modal-border-color);border-radius:var(--bs-modal-border-radius);outline:0}.modal-backdrop{--bs-backdrop-zindex:1050;--bs-backdrop-bg:#000;--bs-backdrop-opacity:0.5;position:fixed;top:0;left:0;z-index:var(--bs-backdrop-zindex);width:100vw;height:100vh;background-color:var(--bs-backdrop-bg)}.modal-backdrop.fade{opacity:0}.modal-backdrop.show{opacity:var(--bs-backdrop-opacity)}.modal-header{display:flex;flex-shrink:0;align-items:center;justify-content:space-between;padding:var(--bs-modal-header-padding);border-bottom:var(--bs-modal-header-border-width) solid var(--bs-modal-header-border-color);border-top-left-radius:var(--bs-modal-inner-border-radius);border-top-right-radius:var(--bs-modal-inner-border-radius)}.modal-header .btn-close{padding:calc(var(--bs-modal-header-padding-y) * .5) calc(var(--bs-modal-header-padding-x) * .5);margin:calc(-.5 * var(--bs-modal-header-padding-y)) calc(-.5 * var(--bs-modal-header-padding-x)) calc(-.5 * var(--bs-modal-header-padding-y)) auto}.modal-title{margin-bottom:0;line-height:var(--bs-modal-title-line-height)}.modal-body{position:relative;flex:1 1 auto;padding:var(--bs-modal-padding)}.modal-footer{display:flex;flex-shrink:0;flex-wrap:wrap;align-items:center;justify-content:flex-end;padding:calc(var(--bs-modal-padding) - var(--bs-modal-footer-gap) * .5);background-color:var(--bs-modal-footer-bg);border-top:var(--bs-modal-footer-border-width) solid var(--bs-modal-footer-border-color);border-bottom-right-radius:var(--bs-modal-inner-border-radius);border-bottom-left-radius:var(--bs-modal-inner-border-radius)}.modal-footer>*{margin:calc(var(--bs-modal-footer-gap) * .5)}@media (min-width:576px){.modal{--bs-modal-margin:1.75rem;--bs-modal-box-shadow:0 0.5rem 1rem rgba(0, 0, 0, 0.15)}.modal-dialog{max-width:var(--bs-modal-width);margin-right:auto;margin-left:auto}.modal-sm{--bs-modal-width:300px}}@media (min-width:992px){.modal-lg,.modal-xl{--bs-modal-width:800px}}@media (min-width:1200px){.modal-xl{--bs-modal-width:1140px}}.modal-fullscreen{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen .modal-footer,.modal-fullscreen .modal-header{border-radius:0}.modal-fullscreen .modal-body{overflow-y:auto}@media (max-width:575.98px){.modal-fullscreen-sm-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-sm-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-sm-down .modal-footer,.modal-fullscreen-sm-down .modal-header{border-radius:0}.modal-fullscreen-sm-down .modal-body{overflow-y:auto}}@media (max-width:767.98px){.modal-fullscreen-md-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-md-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-md-down .modal-footer,.modal-fullscreen-md-down .modal-header{border-radius:0}.modal-fullscreen-md-down .modal-body{overflow-y:auto}}@media (max-width:991.98px){.modal-fullscreen-lg-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-lg-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-lg-down .modal-footer,.modal-fullscreen-lg-down .modal-header{border-radius:0}.modal-fullscreen-lg-down .modal-body{overflow-y:auto}}@media (max-width:1199.98px){.modal-fullscreen-xl-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-xl-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-xl-down .modal-footer,.modal-fullscreen-xl-down .modal-header{border-radius:0}.modal-fullscreen-xl-down .modal-body{overflow-y:auto}}@media (max-width:1399.98px){.modal-fullscreen-xxl-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-xxl-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-xxl-down .modal-footer,.modal-fullscreen-xxl-down .modal-header{border-radius:0}.modal-fullscreen-xxl-down .modal-body{overflow-y:auto}}.tooltip{--bs-tooltip-zindex:1080;--bs-tooltip-max-width:200px;--bs-tooltip-padding-x:0.5rem;--bs-tooltip-padding-y:0.25rem;--bs-tooltip-margin: ;--bs-tooltip-font-size:0.875rem;--bs-tooltip-color:var(--bs-body-bg);--bs-tooltip-bg:var(--bs-emphasis-color);--bs-tooltip-border-radius:var(--bs-border-radius);--bs-tooltip-opacity:0.9;--bs-tooltip-arrow-width:0.8rem;--bs-tooltip-arrow-height:0.4rem;z-index:var(--bs-tooltip-zindex);display:block;margin:var(--bs-tooltip-margin);font-family:var(--bs-font-sans-serif);font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;white-space:normal;word-spacing:normal;line-break:auto;font-size:var(--bs-tooltip-font-size);word-wrap:break-word;opacity:0}.tooltip.show{opacity:var(--bs-tooltip-opacity)}.tooltip .tooltip-arrow{display:block;width:var(--bs-tooltip-arrow-width);height:var(--bs-tooltip-arrow-height)}.tooltip .tooltip-arrow::before{position:absolute;content:"";border-color:transparent;border-style:solid}.bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow,.bs-tooltip-top .tooltip-arrow{bottom:calc(-1 * var(--bs-tooltip-arrow-height))}.bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow::before,.bs-tooltip-top .tooltip-arrow::before{top:-1px;border-width:var(--bs-tooltip-arrow-height) calc(var(--bs-tooltip-arrow-width) * .5) 0;border-top-color:var(--bs-tooltip-bg)}.bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow,.bs-tooltip-end .tooltip-arrow{left:calc(-1 * var(--bs-tooltip-arrow-height));width:var(--bs-tooltip-arrow-height);height:var(--bs-tooltip-arrow-width)}.bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow::before,.bs-tooltip-end .tooltip-arrow::before{right:-1px;border-width:calc(var(--bs-tooltip-arrow-width) * .5) var(--bs-tooltip-arrow-height) calc(var(--bs-tooltip-arrow-width) * .5) 0;border-right-color:var(--bs-tooltip-bg)}.bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow,.bs-tooltip-bottom .tooltip-arrow{top:calc(-1 * var(--bs-tooltip-arrow-height))}.bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow::before,.bs-tooltip-bottom .tooltip-arrow::before{bottom:-1px;border-width:0 calc(var(--bs-tooltip-arrow-width) * .5) var(--bs-tooltip-arrow-height);border-bottom-color:var(--bs-tooltip-bg)}.bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow,.bs-tooltip-start .tooltip-arrow{right:calc(-1 * var(--bs-tooltip-arrow-height));width:var(--bs-tooltip-arrow-height);height:var(--bs-tooltip-arrow-width)}.bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow::before,.bs-tooltip-start .tooltip-arrow::before{left:-1px;border-width:calc(var(--bs-tooltip-arrow-width) * .5) 0 calc(var(--bs-tooltip-arrow-width) * .5) var(--bs-tooltip-arrow-height);border-left-color:var(--bs-tooltip-bg)}.tooltip-inner{max-width:var(--bs-tooltip-max-width);padding:var(--bs-tooltip-padding-y) var(--bs-tooltip-padding-x);color:var(--bs-tooltip-color);text-align:center;background-color:var(--bs-tooltip-bg);border-radius:var(--bs-tooltip-border-radius)}.popover{--bs-popover-zindex:1070;--bs-popover-max-width:276px;--bs-popover-font-size:0.875rem;--bs-popover-bg:var(--bs-body-bg);--bs-popover-border-width:var(--bs-border-width);--bs-popover-border-color:var(--bs-border-color-translucent);--bs-popover-border-radius:var(--bs-border-radius-lg);--bs-popover-inner-border-radius:calc(var(--bs-border-radius-lg) - var(--bs-border-width));--bs-popover-box-shadow:0 0.5rem 1rem rgba(0, 0, 0, 0.15);--bs-popover-header-padding-x:1rem;--bs-popover-header-padding-y:0.5rem;--bs-popover-header-font-size:1rem;--bs-popover-header-color:inherit;--bs-popover-header-bg:var(--bs-secondary-bg);--bs-popover-body-padding-x:1rem;--bs-popover-body-padding-y:1rem;--bs-popover-body-color:var(--bs-body-color);--bs-popover-arrow-width:1rem;--bs-popover-arrow-height:0.5rem;--bs-popover-arrow-border:var(--bs-popover-border-color);z-index:var(--bs-popover-zindex);display:block;max-width:var(--bs-popover-max-width);font-family:var(--bs-font-sans-serif);font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;white-space:normal;word-spacing:normal;line-break:auto;font-size:var(--bs-popover-font-size);word-wrap:break-word;background-color:var(--bs-popover-bg);background-clip:padding-box;border:var(--bs-popover-border-width) solid var(--bs-popover-border-color);border-radius:var(--bs-popover-border-radius)}.popover .popover-arrow{display:block;width:var(--bs-popover-arrow-width);height:var(--bs-popover-arrow-height)}.popover .popover-arrow::after,.popover .popover-arrow::before{position:absolute;display:block;content:"";border-color:transparent;border-style:solid;border-width:0}.bs-popover-auto[data-popper-placement^=top]>.popover-arrow,.bs-popover-top>.popover-arrow{bottom:calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width))}.bs-popover-auto[data-popper-placement^=top]>.popover-arrow::after,.bs-popover-auto[data-popper-placement^=top]>.popover-arrow::before,.bs-popover-top>.popover-arrow::after,.bs-popover-top>.popover-arrow::before{border-width:var(--bs-popover-arrow-height) calc(var(--bs-popover-arrow-width) * .5) 0}.bs-popover-auto[data-popper-placement^=top]>.popover-arrow::before,.bs-popover-top>.popover-arrow::before{bottom:0;border-top-color:var(--bs-popover-arrow-border)}.bs-popover-auto[data-popper-placement^=top]>.popover-arrow::after,.bs-popover-top>.popover-arrow::after{bottom:var(--bs-popover-border-width);border-top-color:var(--bs-popover-bg)}.bs-popover-auto[data-popper-placement^=right]>.popover-arrow,.bs-popover-end>.popover-arrow{left:calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width));width:var(--bs-popover-arrow-height);height:var(--bs-popover-arrow-width)}.bs-popover-auto[data-popper-placement^=right]>.popover-arrow::after,.bs-popover-auto[data-popper-placement^=right]>.popover-arrow::before,.bs-popover-end>.popover-arrow::after,.bs-popover-end>.popover-arrow::before{border-width:calc(var(--bs-popover-arrow-width) * .5) var(--bs-popover-arrow-height) calc(var(--bs-popover-arrow-width) * .5) 0}.bs-popover-auto[data-popper-placement^=right]>.popover-arrow::before,.bs-popover-end>.popover-arrow::before{left:0;border-right-color:var(--bs-popover-arrow-border)}.bs-popover-auto[data-popper-placement^=right]>.popover-arrow::after,.bs-popover-end>.popover-arrow::after{left:var(--bs-popover-border-width);border-right-color:var(--bs-popover-bg)}.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow,.bs-popover-bottom>.popover-arrow{top:calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width))}.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow::after,.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow::before,.bs-popover-bottom>.popover-arrow::after,.bs-popover-bottom>.popover-arrow::before{border-width:0 calc(var(--bs-popover-arrow-width) * .5) var(--bs-popover-arrow-height)}.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow::before,.bs-popover-bottom>.popover-arrow::before{top:0;border-bottom-color:var(--bs-popover-arrow-border)}.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow::after,.bs-popover-bottom>.popover-arrow::after{top:var(--bs-popover-border-width);border-bottom-color:var(--bs-popover-bg)}.bs-popover-auto[data-popper-placement^=bottom] .popover-header::before,.bs-popover-bottom .popover-header::before{position:absolute;top:0;left:50%;display:block;width:var(--bs-popover-arrow-width);margin-left:calc(-.5 * var(--bs-popover-arrow-width));content:"";border-bottom:var(--bs-popover-border-width) solid var(--bs-popover-header-bg)}.bs-popover-auto[data-popper-placement^=left]>.popover-arrow,.bs-popover-start>.popover-arrow{right:calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width));width:var(--bs-popover-arrow-height);height:var(--bs-popover-arrow-width)}.bs-popover-auto[data-popper-placement^=left]>.popover-arrow::after,.bs-popover-auto[data-popper-placement^=left]>.popover-arrow::before,.bs-popover-start>.popover-arrow::after,.bs-popover-start>.popover-arrow::before{border-width:calc(var(--bs-popover-arrow-width) * .5) 0 calc(var(--bs-popover-arrow-width) * .5) var(--bs-popover-arrow-height)}.bs-popover-auto[data-popper-placement^=left]>.popover-arrow::before,.bs-popover-start>.popover-arrow::before{right:0;border-left-color:var(--bs-popover-arrow-border)}.bs-popover-auto[data-popper-placement^=left]>.popover-arrow::after,.bs-popover-start>.popover-arrow::after{right:var(--bs-popover-border-width);border-left-color:var(--bs-popover-bg)}.popover-header{padding:var(--bs-popover-header-padding-y) var(--bs-popover-header-padding-x);margin-bottom:0;font-size:var(--bs-popover-header-font-size);color:var(--bs-popover-header-color);background-color:var(--bs-popover-header-bg);border-bottom:var(--bs-popover-border-width) solid var(--bs-popover-border-color);border-top-left-radius:var(--bs-popover-inner-border-radius);border-top-right-radius:var(--bs-popover-inner-border-radius)}.popover-header:empty{display:none}.popover-body{padding:var(--bs-popover-body-padding-y) var(--bs-popover-body-padding-x);color:var(--bs-popover-body-color)}.carousel{position:relative}.carousel.pointer-event{touch-action:pan-y}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner::after{display:block;clear:both;content:""}.carousel-item{position:relative;display:none;float:left;width:100%;margin-right:-100%;-webkit-backface-visibility:hidden;backface-visibility:hidden;transition:transform .6s ease-in-out}@media (prefers-reduced-motion:reduce){.carousel-item{transition:none}}.carousel-item-next,.carousel-item-prev,.carousel-item.active{display:block}.active.carousel-item-end,.carousel-item-next:not(.carousel-item-start){transform:translateX(100%)}.active.carousel-item-start,.carousel-item-prev:not(.carousel-item-end){transform:translateX(-100%)}.carousel-fade .carousel-item{opacity:0;transition-property:opacity;transform:none}.carousel-fade .carousel-item-next.carousel-item-start,.carousel-fade .carousel-item-prev.carousel-item-end,.carousel-fade .carousel-item.active{z-index:1;opacity:1}.carousel-fade .active.carousel-item-end,.carousel-fade .active.carousel-item-start{z-index:0;opacity:0;transition:opacity 0s .6s}@media (prefers-reduced-motion:reduce){.carousel-fade .active.carousel-item-end,.carousel-fade .active.carousel-item-start{transition:none}}.carousel-control-next,.carousel-control-prev{position:absolute;top:0;bottom:0;z-index:1;display:flex;align-items:center;justify-content:center;width:15%;padding:0;color:#fff;text-align:center;background:0 0;border:0;opacity:.5;transition:opacity .15s ease}@media (prefers-reduced-motion:reduce){.carousel-control-next,.carousel-control-prev{transition:none}}.carousel-control-next:focus,.carousel-control-next:hover,.carousel-control-prev:focus,.carousel-control-prev:hover{color:#fff;text-decoration:none;outline:0;opacity:.9}.carousel-control-prev{left:0}.carousel-control-next{right:0}.carousel-control-next-icon,.carousel-control-prev-icon{display:inline-block;width:2rem;height:2rem;background-repeat:no-repeat;background-position:50%;background-size:100% 100%}.carousel-control-prev-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M11.354 1.646a.5.5 0 0 1 0 .708L5.707 8l5.647 5.646a.5.5 0 0 1-.708.708l-6-6a.5.5 0 0 1 0-.708l6-6a.5.5 0 0 1 .708 0z'/%3e%3c/svg%3e")}.carousel-control-next-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8 4.646 2.354a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e")}.carousel-indicators{position:absolute;right:0;bottom:0;left:0;z-index:2;display:flex;justify-content:center;padding:0;margin-right:15%;margin-bottom:1rem;margin-left:15%}.carousel-indicators [data-bs-target]{box-sizing:content-box;flex:0 1 auto;width:30px;height:3px;padding:0;margin-right:3px;margin-left:3px;text-indent:-999px;cursor:pointer;background-color:#fff;background-clip:padding-box;border:0;border-top:10px solid transparent;border-bottom:10px solid transparent;opacity:.5;transition:opacity .6s ease}@media (prefers-reduced-motion:reduce){.carousel-indicators [data-bs-target]{transition:none}}.carousel-indicators .active{opacity:1}.carousel-caption{position:absolute;right:15%;bottom:1.25rem;left:15%;padding-top:1.25rem;padding-bottom:1.25rem;color:#fff;text-align:center}.carousel-dark .carousel-control-next-icon,.carousel-dark .carousel-control-prev-icon{filter:invert(1) grayscale(100)}.carousel-dark .carousel-indicators [data-bs-target]{background-color:#000}.carousel-dark .carousel-caption{color:#000}[data-bs-theme=dark] .carousel .carousel-control-next-icon,[data-bs-theme=dark] .carousel .carousel-control-prev-icon,[data-bs-theme=dark].carousel .carousel-control-next-icon,[data-bs-theme=dark].carousel .carousel-control-prev-icon{filter:invert(1) grayscale(100)}[data-bs-theme=dark] .carousel .carousel-indicators [data-bs-target],[data-bs-theme=dark].carousel .carousel-indicators [data-bs-target]{background-color:#000}[data-bs-theme=dark] .carousel .carousel-caption,[data-bs-theme=dark].carousel .carousel-caption{color:#000}.spinner-border,.spinner-grow{display:inline-block;width:var(--bs-spinner-width);height:var(--bs-spinner-height);vertical-align:var(--bs-spinner-vertical-align);border-radius:50%;animation:var(--bs-spinner-animation-speed) linear infinite var(--bs-spinner-animation-name)}@keyframes spinner-border{to{transform:rotate(360deg)}}.spinner-border{--bs-spinner-width:2rem;--bs-spinner-height:2rem;--bs-spinner-vertical-align:-0.125em;--bs-spinner-border-width:0.25em;--bs-spinner-animation-speed:0.75s;--bs-spinner-animation-name:spinner-border;border:var(--bs-spinner-border-width) solid currentcolor;border-right-color:transparent}.spinner-border-sm{--bs-spinner-width:1rem;--bs-spinner-height:1rem;--bs-spinner-border-width:0.2em}@keyframes spinner-grow{0%{transform:scale(0)}50%{opacity:1;transform:none}}.spinner-grow{--bs-spinner-width:2rem;--bs-spinner-height:2rem;--bs-spinner-vertical-align:-0.125em;--bs-spinner-animation-speed:0.75s;--bs-spinner-animation-name:spinner-grow;background-color:currentcolor;opacity:0}.spinner-grow-sm{--bs-spinner-width:1rem;--bs-spinner-height:1rem}@media (prefers-reduced-motion:reduce){.spinner-border,.spinner-grow{--bs-spinner-animation-speed:1.5s}}.offcanvas,.offcanvas-lg,.offcanvas-md,.offcanvas-sm,.offcanvas-xl,.offcanvas-xxl{--bs-offcanvas-zindex:1045;--bs-offcanvas-width:400px;--bs-offcanvas-height:30vh;--bs-offcanvas-padding-x:1rem;--bs-offcanvas-padding-y:1rem;--bs-offcanvas-color:var(--bs-body-color);--bs-offcanvas-bg:var(--bs-body-bg);--bs-offcanvas-border-width:var(--bs-border-width);--bs-offcanvas-border-color:var(--bs-border-color-translucent);--bs-offcanvas-box-shadow:0 0.125rem 0.25rem rgba(0, 0, 0, 0.075);--bs-offcanvas-transition:transform 0.3s ease-in-out;--bs-offcanvas-title-line-height:1.5}@media (max-width:575.98px){.offcanvas-sm{position:fixed;bottom:0;z-index:var(--bs-offcanvas-zindex);display:flex;flex-direction:column;max-width:100%;color:var(--bs-offcanvas-color);visibility:hidden;background-color:var(--bs-offcanvas-bg);background-clip:padding-box;outline:0;transition:var(--bs-offcanvas-transition)}}@media (max-width:575.98px) and (prefers-reduced-motion:reduce){.offcanvas-sm{transition:none}}@media (max-width:575.98px){.offcanvas-sm.offcanvas-start{top:0;left:0;width:var(--bs-offcanvas-width);border-right:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(-100%)}.offcanvas-sm.offcanvas-end{top:0;right:0;width:var(--bs-offcanvas-width);border-left:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(100%)}.offcanvas-sm.offcanvas-top{top:0;right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-bottom:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(-100%)}.offcanvas-sm.offcanvas-bottom{right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-top:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(100%)}.offcanvas-sm.show:not(.hiding),.offcanvas-sm.showing{transform:none}.offcanvas-sm.hiding,.offcanvas-sm.show,.offcanvas-sm.showing{visibility:visible}}@media (min-width:576px){.offcanvas-sm{--bs-offcanvas-height:auto;--bs-offcanvas-border-width:0;background-color:transparent!important}.offcanvas-sm .offcanvas-header{display:none}.offcanvas-sm .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible;background-color:transparent!important}}@media (max-width:767.98px){.offcanvas-md{position:fixed;bottom:0;z-index:var(--bs-offcanvas-zindex);display:flex;flex-direction:column;max-width:100%;color:var(--bs-offcanvas-color);visibility:hidden;background-color:var(--bs-offcanvas-bg);background-clip:padding-box;outline:0;transition:var(--bs-offcanvas-transition)}}@media (max-width:767.98px) and (prefers-reduced-motion:reduce){.offcanvas-md{transition:none}}@media (max-width:767.98px){.offcanvas-md.offcanvas-start{top:0;left:0;width:var(--bs-offcanvas-width);border-right:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(-100%)}.offcanvas-md.offcanvas-end{top:0;right:0;width:var(--bs-offcanvas-width);border-left:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(100%)}.offcanvas-md.offcanvas-top{top:0;right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-bottom:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(-100%)}.offcanvas-md.offcanvas-bottom{right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-top:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(100%)}.offcanvas-md.show:not(.hiding),.offcanvas-md.showing{transform:none}.offcanvas-md.hiding,.offcanvas-md.show,.offcanvas-md.showing{visibility:visible}}@media (min-width:768px){.offcanvas-md{--bs-offcanvas-height:auto;--bs-offcanvas-border-width:0;background-color:transparent!important}.offcanvas-md .offcanvas-header{display:none}.offcanvas-md .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible;background-color:transparent!important}}@media (max-width:991.98px){.offcanvas-lg{position:fixed;bottom:0;z-index:var(--bs-offcanvas-zindex);display:flex;flex-direction:column;max-width:100%;color:var(--bs-offcanvas-color);visibility:hidden;background-color:var(--bs-offcanvas-bg);background-clip:padding-box;outline:0;transition:var(--bs-offcanvas-transition)}}@media (max-width:991.98px) and (prefers-reduced-motion:reduce){.offcanvas-lg{transition:none}}@media (max-width:991.98px){.offcanvas-lg.offcanvas-start{top:0;left:0;width:var(--bs-offcanvas-width);border-right:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(-100%)}.offcanvas-lg.offcanvas-end{top:0;right:0;width:var(--bs-offcanvas-width);border-left:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(100%)}.offcanvas-lg.offcanvas-top{top:0;right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-bottom:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(-100%)}.offcanvas-lg.offcanvas-bottom{right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-top:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(100%)}.offcanvas-lg.show:not(.hiding),.offcanvas-lg.showing{transform:none}.offcanvas-lg.hiding,.offcanvas-lg.show,.offcanvas-lg.showing{visibility:visible}}@media (min-width:992px){.offcanvas-lg{--bs-offcanvas-height:auto;--bs-offcanvas-border-width:0;background-color:transparent!important}.offcanvas-lg .offcanvas-header{display:none}.offcanvas-lg .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible;background-color:transparent!important}}@media (max-width:1199.98px){.offcanvas-xl{position:fixed;bottom:0;z-index:var(--bs-offcanvas-zindex);display:flex;flex-direction:column;max-width:100%;color:var(--bs-offcanvas-color);visibility:hidden;background-color:var(--bs-offcanvas-bg);background-clip:padding-box;outline:0;transition:var(--bs-offcanvas-transition)}}@media (max-width:1199.98px) and (prefers-reduced-motion:reduce){.offcanvas-xl{transition:none}}@media (max-width:1199.98px){.offcanvas-xl.offcanvas-start{top:0;left:0;width:var(--bs-offcanvas-width);border-right:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(-100%)}.offcanvas-xl.offcanvas-end{top:0;right:0;width:var(--bs-offcanvas-width);border-left:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(100%)}.offcanvas-xl.offcanvas-top{top:0;right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-bottom:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(-100%)}.offcanvas-xl.offcanvas-bottom{right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-top:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(100%)}.offcanvas-xl.show:not(.hiding),.offcanvas-xl.showing{transform:none}.offcanvas-xl.hiding,.offcanvas-xl.show,.offcanvas-xl.showing{visibility:visible}}@media (min-width:1200px){.offcanvas-xl{--bs-offcanvas-height:auto;--bs-offcanvas-border-width:0;background-color:transparent!important}.offcanvas-xl .offcanvas-header{display:none}.offcanvas-xl .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible;background-color:transparent!important}}@media (max-width:1399.98px){.offcanvas-xxl{position:fixed;bottom:0;z-index:var(--bs-offcanvas-zindex);display:flex;flex-direction:column;max-width:100%;color:var(--bs-offcanvas-color);visibility:hidden;background-color:var(--bs-offcanvas-bg);background-clip:padding-box;outline:0;transition:var(--bs-offcanvas-transition)}}@media (max-width:1399.98px) and (prefers-reduced-motion:reduce){.offcanvas-xxl{transition:none}}@media (max-width:1399.98px){.offcanvas-xxl.offcanvas-start{top:0;left:0;width:var(--bs-offcanvas-width);border-right:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(-100%)}.offcanvas-xxl.offcanvas-end{top:0;right:0;width:var(--bs-offcanvas-width);border-left:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(100%)}.offcanvas-xxl.offcanvas-top{top:0;right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-bottom:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(-100%)}.offcanvas-xxl.offcanvas-bottom{right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-top:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(100%)}.offcanvas-xxl.show:not(.hiding),.offcanvas-xxl.showing{transform:none}.offcanvas-xxl.hiding,.offcanvas-xxl.show,.offcanvas-xxl.showing{visibility:visible}}@media (min-width:1400px){.offcanvas-xxl{--bs-offcanvas-height:auto;--bs-offcanvas-border-width:0;background-color:transparent!important}.offcanvas-xxl .offcanvas-header{display:none}.offcanvas-xxl .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible;background-color:transparent!important}}.offcanvas{position:fixed;bottom:0;z-index:var(--bs-offcanvas-zindex);display:flex;flex-direction:column;max-width:100%;color:var(--bs-offcanvas-color);visibility:hidden;background-color:var(--bs-offcanvas-bg);background-clip:padding-box;outline:0;transition:var(--bs-offcanvas-transition)}@media (prefers-reduced-motion:reduce){.offcanvas{transition:none}}.offcanvas.offcanvas-start{top:0;left:0;width:var(--bs-offcanvas-width);border-right:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(-100%)}.offcanvas.offcanvas-end{top:0;right:0;width:var(--bs-offcanvas-width);border-left:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(100%)}.offcanvas.offcanvas-top{top:0;right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-bottom:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(-100%)}.offcanvas.offcanvas-bottom{right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-top:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(100%)}.offcanvas.show:not(.hiding),.offcanvas.showing{transform:none}.offcanvas.hiding,.offcanvas.show,.offcanvas.showing{visibility:visible}.offcanvas-backdrop{position:fixed;top:0;left:0;z-index:1040;width:100vw;height:100vh;background-color:#000}.offcanvas-backdrop.fade{opacity:0}.offcanvas-backdrop.show{opacity:.5}.offcanvas-header{display:flex;align-items:center;justify-content:space-between;padding:var(--bs-offcanvas-padding-y) var(--bs-offcanvas-padding-x)}.offcanvas-header .btn-close{padding:calc(var(--bs-offcanvas-padding-y) * .5) calc(var(--bs-offcanvas-padding-x) * .5);margin-top:calc(-.5 * var(--bs-offcanvas-padding-y));margin-right:calc(-.5 * var(--bs-offcanvas-padding-x));margin-bottom:calc(-.5 * var(--bs-offcanvas-padding-y))}.offcanvas-title{margin-bottom:0;line-height:var(--bs-offcanvas-title-line-height)}.offcanvas-body{flex-grow:1;padding:var(--bs-offcanvas-padding-y) var(--bs-offcanvas-padding-x);overflow-y:auto}.placeholder{display:inline-block;min-height:1em;vertical-align:middle;cursor:wait;background-color:currentcolor;opacity:.5}.placeholder.btn::before{display:inline-block;content:""}.placeholder-xs{min-height:.6em}.placeholder-sm{min-height:.8em}.placeholder-lg{min-height:1.2em}.placeholder-glow .placeholder{animation:placeholder-glow 2s ease-in-out infinite}@keyframes placeholder-glow{50%{opacity:.2}}.placeholder-wave{-webkit-mask-image:linear-gradient(130deg,#000 55%,rgba(0,0,0,0.8) 75%,#000 95%);mask-image:linear-gradient(130deg,#000 55%,rgba(0,0,0,0.8) 75%,#000 95%);-webkit-mask-size:200% 100%;mask-size:200% 100%;animation:placeholder-wave 2s linear infinite}@keyframes placeholder-wave{100%{-webkit-mask-position:-200% 0%;mask-position:-200% 0%}}.clearfix::after{display:block;clear:both;content:""}.text-bg-primary{color:#fff!important;background-color:RGBA(var(--bs-primary-rgb),var(--bs-bg-opacity,1))!important}.text-bg-secondary{color:#fff!important;background-color:RGBA(var(--bs-secondary-rgb),var(--bs-bg-opacity,1))!important}.text-bg-success{color:#fff!important;background-color:RGBA(var(--bs-success-rgb),var(--bs-bg-opacity,1))!important}.text-bg-info{color:#000!important;background-color:RGBA(var(--bs-info-rgb),var(--bs-bg-opacity,1))!important}.text-bg-warning{color:#000!important;background-color:RGBA(var(--bs-warning-rgb),var(--bs-bg-opacity,1))!important}.text-bg-danger{color:#fff!important;background-color:RGBA(var(--bs-danger-rgb),var(--bs-bg-opacity,1))!important}.text-bg-light{color:#000!important;background-color:RGBA(var(--bs-light-rgb),var(--bs-bg-opacity,1))!important}.text-bg-dark{color:#fff!important;background-color:RGBA(var(--bs-dark-rgb),var(--bs-bg-opacity,1))!important}.link-primary{color:RGBA(var(--bs-primary-rgb),var(--bs-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(var(--bs-primary-rgb),var(--bs-link-underline-opacity,1))!important;text-decoration-color:RGBA(var(--bs-primary-rgb),var(--bs-link-underline-opacity,1))!important}.link-primary:focus,.link-primary:hover{color:RGBA(10,88,202,var(--bs-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(10,88,202,var(--bs-link-underline-opacity,1))!important;text-decoration-color:RGBA(10,88,202,var(--bs-link-underline-opacity,1))!important}.link-secondary{color:RGBA(var(--bs-secondary-rgb),var(--bs-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(var(--bs-secondary-rgb),var(--bs-link-underline-opacity,1))!important;text-decoration-color:RGBA(var(--bs-secondary-rgb),var(--bs-link-underline-opacity,1))!important}.link-secondary:focus,.link-secondary:hover{color:RGBA(86,94,100,var(--bs-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(86,94,100,var(--bs-link-underline-opacity,1))!important;text-decoration-color:RGBA(86,94,100,var(--bs-link-underline-opacity,1))!important}.link-success{color:RGBA(var(--bs-success-rgb),var(--bs-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(var(--bs-success-rgb),var(--bs-link-underline-opacity,1))!important;text-decoration-color:RGBA(var(--bs-success-rgb),var(--bs-link-underline-opacity,1))!important}.link-success:focus,.link-success:hover{color:RGBA(20,108,67,var(--bs-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(20,108,67,var(--bs-link-underline-opacity,1))!important;text-decoration-color:RGBA(20,108,67,var(--bs-link-underline-opacity,1))!important}.link-info{color:RGBA(var(--bs-info-rgb),var(--bs-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(var(--bs-info-rgb),var(--bs-link-underline-opacity,1))!important;text-decoration-color:RGBA(var(--bs-info-rgb),var(--bs-link-underline-opacity,1))!important}.link-info:focus,.link-info:hover{color:RGBA(61,213,243,var(--bs-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(61,213,243,var(--bs-link-underline-opacity,1))!important;text-decoration-color:RGBA(61,213,243,var(--bs-link-underline-opacity,1))!important}.link-warning{color:RGBA(var(--bs-warning-rgb),var(--bs-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(var(--bs-warning-rgb),var(--bs-link-underline-opacity,1))!important;text-decoration-color:RGBA(var(--bs-warning-rgb),var(--bs-link-underline-opacity,1))!important}.link-warning:focus,.link-warning:hover{color:RGBA(255,205,57,var(--bs-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(255,205,57,var(--bs-link-underline-opacity,1))!important;text-decoration-color:RGBA(255,205,57,var(--bs-link-underline-opacity,1))!important}.link-danger{color:RGBA(var(--bs-danger-rgb),var(--bs-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(var(--bs-danger-rgb),var(--bs-link-underline-opacity,1))!important;text-decoration-color:RGBA(var(--bs-danger-rgb),var(--bs-link-underline-opacity,1))!important}.link-danger:focus,.link-danger:hover{color:RGBA(176,42,55,var(--bs-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(176,42,55,var(--bs-link-underline-opacity,1))!important;text-decoration-color:RGBA(176,42,55,var(--bs-link-underline-opacity,1))!important}.link-light{color:RGBA(var(--bs-light-rgb),var(--bs-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(var(--bs-light-rgb),var(--bs-link-underline-opacity,1))!important;text-decoration-color:RGBA(var(--bs-light-rgb),var(--bs-link-underline-opacity,1))!important}.link-light:focus,.link-light:hover{color:RGBA(249,250,251,var(--bs-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(249,250,251,var(--bs-link-underline-opacity,1))!important;text-decoration-color:RGBA(249,250,251,var(--bs-link-underline-opacity,1))!important}.link-dark{color:RGBA(var(--bs-dark-rgb),var(--bs-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(var(--bs-dark-rgb),var(--bs-link-underline-opacity,1))!important;text-decoration-color:RGBA(var(--bs-dark-rgb),var(--bs-link-underline-opacity,1))!important}.link-dark:focus,.link-dark:hover{color:RGBA(26,30,33,var(--bs-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(26,30,33,var(--bs-link-underline-opacity,1))!important;text-decoration-color:RGBA(26,30,33,var(--bs-link-underline-opacity,1))!important}.link-body-emphasis{color:RGBA(var(--bs-emphasis-color-rgb),var(--bs-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(var(--bs-emphasis-color-rgb),var(--bs-link-underline-opacity,1))!important;text-decoration-color:RGBA(var(--bs-emphasis-color-rgb),var(--bs-link-underline-opacity,1))!important}.link-body-emphasis:focus,.link-body-emphasis:hover{color:RGBA(var(--bs-emphasis-color-rgb),var(--bs-link-opacity,.75))!important;-webkit-text-decoration-color:RGBA(var(--bs-emphasis-color-rgb),var(--bs-link-underline-opacity,0.75))!important;text-decoration-color:RGBA(var(--bs-emphasis-color-rgb),var(--bs-link-underline-opacity,0.75))!important}.focus-ring:focus{outline:0;box-shadow:var(--bs-focus-ring-x,0) var(--bs-focus-ring-y,0) var(--bs-focus-ring-blur,0) var(--bs-focus-ring-width) var(--bs-focus-ring-color)}.icon-link{display:inline-flex;gap:.375rem;align-items:center;-webkit-text-decoration-color:rgba(var(--bs-link-color-rgb),var(--bs-link-opacity,0.5));text-decoration-color:rgba(var(--bs-link-color-rgb),var(--bs-link-opacity,0.5));text-underline-offset:0.25em;-webkit-backface-visibility:hidden;backface-visibility:hidden}.icon-link>.bi{flex-shrink:0;width:1em;height:1em;fill:currentcolor;transition:.2s ease-in-out transform}@media (prefers-reduced-motion:reduce){.icon-link>.bi{transition:none}}.icon-link-hover:focus-visible>.bi,.icon-link-hover:hover>.bi{transform:var(--bs-icon-link-transform,translate3d(.25em,0,0))}.ratio{position:relative;width:100%}.ratio::before{display:block;padding-top:var(--bs-aspect-ratio);content:""}.ratio>*{position:absolute;top:0;left:0;width:100%;height:100%}.ratio-1x1{--bs-aspect-ratio:100%}.ratio-4x3{--bs-aspect-ratio:75%}.ratio-16x9{--bs-aspect-ratio:56.25%}.ratio-21x9{--bs-aspect-ratio:42.8571428571%}.fixed-top{position:fixed;top:0;right:0;left:0;z-index:1030}.fixed-bottom{position:fixed;right:0;bottom:0;left:0;z-index:1030}.sticky-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}.sticky-bottom{position:-webkit-sticky;position:sticky;bottom:0;z-index:1020}@media (min-width:576px){.sticky-sm-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}.sticky-sm-bottom{position:-webkit-sticky;position:sticky;bottom:0;z-index:1020}}@media (min-width:768px){.sticky-md-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}.sticky-md-bottom{position:-webkit-sticky;position:sticky;bottom:0;z-index:1020}}@media (min-width:992px){.sticky-lg-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}.sticky-lg-bottom{position:-webkit-sticky;position:sticky;bottom:0;z-index:1020}}@media (min-width:1200px){.sticky-xl-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}.sticky-xl-bottom{position:-webkit-sticky;position:sticky;bottom:0;z-index:1020}}@media (min-width:1400px){.sticky-xxl-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}.sticky-xxl-bottom{position:-webkit-sticky;position:sticky;bottom:0;z-index:1020}}.hstack{display:flex;flex-direction:row;align-items:center;align-self:stretch}.vstack{display:flex;flex:1 1 auto;flex-direction:column;align-self:stretch}.visually-hidden,.visually-hidden-focusable:not(:focus):not(:focus-within){width:1px!important;height:1px!important;padding:0!important;margin:-1px!important;overflow:hidden!important;clip:rect(0,0,0,0)!important;white-space:nowrap!important;border:0!important}.visually-hidden-focusable:not(:focus):not(:focus-within):not(caption),.visually-hidden:not(caption){position:absolute!important}.stretched-link::after{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;content:""}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.vr{display:inline-block;align-self:stretch;width:var(--bs-border-width);min-height:1em;background-color:currentcolor;opacity:.25}.align-baseline{vertical-align:baseline!important}.align-top{vertical-align:top!important}.align-middle{vertical-align:middle!important}.align-bottom{vertical-align:bottom!important}.align-text-bottom{vertical-align:text-bottom!important}.align-text-top{vertical-align:text-top!important}.float-start{float:left!important}.float-end{float:right!important}.float-none{float:none!important}.object-fit-contain{-o-object-fit:contain!important;object-fit:contain!important}.object-fit-cover{-o-object-fit:cover!important;object-fit:cover!important}.object-fit-fill{-o-object-fit:fill!important;object-fit:fill!important}.object-fit-scale{-o-object-fit:scale-down!important;object-fit:scale-down!important}.object-fit-none{-o-object-fit:none!important;object-fit:none!important}.opacity-0{opacity:0!important}.opacity-25{opacity:.25!important}.opacity-50{opacity:.5!important}.opacity-75{opacity:.75!important}.opacity-100{opacity:1!important}.overflow-auto{overflow:auto!important}.overflow-hidden{overflow:hidden!important}.overflow-visible{overflow:visible!important}.overflow-scroll{overflow:scroll!important}.overflow-x-auto{overflow-x:auto!important}.overflow-x-hidden{overflow-x:hidden!important}.overflow-x-visible{overflow-x:visible!important}.overflow-x-scroll{overflow-x:scroll!important}.overflow-y-auto{overflow-y:auto!important}.overflow-y-hidden{overflow-y:hidden!important}.overflow-y-visible{overflow-y:visible!important}.overflow-y-scroll{overflow-y:scroll!important}.d-inline{display:inline!important}.d-inline-block{display:inline-block!important}.d-block{display:block!important}.d-grid{display:grid!important}.d-inline-grid{display:inline-grid!important}.d-table{display:table!important}.d-table-row{display:table-row!important}.d-table-cell{display:table-cell!important}.d-flex{display:flex!important}.d-inline-flex{display:inline-flex!important}.d-none{display:none!important}.shadow{box-shadow:0 .5rem 1rem rgba(0,0,0,.15)!important}.shadow-sm{box-shadow:0 .125rem .25rem rgba(0,0,0,.075)!important}.shadow-lg{box-shadow:0 1rem 3rem rgba(0,0,0,.175)!important}.shadow-none{box-shadow:none!important}.focus-ring-primary{--bs-focus-ring-color:rgba(var(--bs-primary-rgb), var(--bs-focus-ring-opacity))}.focus-ring-secondary{--bs-focus-ring-color:rgba(var(--bs-secondary-rgb), var(--bs-focus-ring-opacity))}.focus-ring-success{--bs-focus-ring-color:rgba(var(--bs-success-rgb), var(--bs-focus-ring-opacity))}.focus-ring-info{--bs-focus-ring-color:rgba(var(--bs-info-rgb), var(--bs-focus-ring-opacity))}.focus-ring-warning{--bs-focus-ring-color:rgba(var(--bs-warning-rgb), var(--bs-focus-ring-opacity))}.focus-ring-danger{--bs-focus-ring-color:rgba(var(--bs-danger-rgb), var(--bs-focus-ring-opacity))}.focus-ring-light{--bs-focus-ring-color:rgba(var(--bs-light-rgb), var(--bs-focus-ring-opacity))}.focus-ring-dark{--bs-focus-ring-color:rgba(var(--bs-dark-rgb), var(--bs-focus-ring-opacity))}.position-static{position:static!important}.position-relative{position:relative!important}.position-absolute{position:absolute!important}.position-fixed{position:fixed!important}.position-sticky{position:-webkit-sticky!important;position:sticky!important}.top-0{top:0!important}.top-50{top:50%!important}.top-100{top:100%!important}.bottom-0{bottom:0!important}.bottom-50{bottom:50%!important}.bottom-100{bottom:100%!important}.start-0{left:0!important}.start-50{left:50%!important}.start-100{left:100%!important}.end-0{right:0!important}.end-50{right:50%!important}.end-100{right:100%!important}.translate-middle{transform:translate(-50%,-50%)!important}.translate-middle-x{transform:translateX(-50%)!important}.translate-middle-y{transform:translateY(-50%)!important}.border{border:var(--bs-border-width) var(--bs-border-style) var(--bs-border-color)!important}.border-0{border:0!important}.border-top{border-top:var(--bs-border-width) var(--bs-border-style) var(--bs-border-color)!important}.border-top-0{border-top:0!important}.border-end{border-right:var(--bs-border-width) var(--bs-border-style) var(--bs-border-color)!important}.border-end-0{border-right:0!important}.border-bottom{border-bottom:var(--bs-border-width) var(--bs-border-style) var(--bs-border-color)!important}.border-bottom-0{border-bottom:0!important}.border-start{border-left:var(--bs-border-width) var(--bs-border-style) var(--bs-border-color)!important}.border-start-0{border-left:0!important}.border-primary{--bs-border-opacity:1;border-color:rgba(var(--bs-primary-rgb),var(--bs-border-opacity))!important}.border-secondary{--bs-border-opacity:1;border-color:rgba(var(--bs-secondary-rgb),var(--bs-border-opacity))!important}.border-success{--bs-border-opacity:1;border-color:rgba(var(--bs-success-rgb),var(--bs-border-opacity))!important}.border-info{--bs-border-opacity:1;border-color:rgba(var(--bs-info-rgb),var(--bs-border-opacity))!important}.border-warning{--bs-border-opacity:1;border-color:rgba(var(--bs-warning-rgb),var(--bs-border-opacity))!important}.border-danger{--bs-border-opacity:1;border-color:rgba(var(--bs-danger-rgb),var(--bs-border-opacity))!important}.border-light{--bs-border-opacity:1;border-color:rgba(var(--bs-light-rgb),var(--bs-border-opacity))!important}.border-dark{--bs-border-opacity:1;border-color:rgba(var(--bs-dark-rgb),var(--bs-border-opacity))!important}.border-black{--bs-border-opacity:1;border-color:rgba(var(--bs-black-rgb),var(--bs-border-opacity))!important}.border-white{--bs-border-opacity:1;border-color:rgba(var(--bs-white-rgb),var(--bs-border-opacity))!important}.border-primary-subtle{border-color:var(--bs-primary-border-subtle)!important}.border-secondary-subtle{border-color:var(--bs-secondary-border-subtle)!important}.border-success-subtle{border-color:var(--bs-success-border-subtle)!important}.border-info-subtle{border-color:var(--bs-info-border-subtle)!important}.border-warning-subtle{border-color:var(--bs-warning-border-subtle)!important}.border-danger-subtle{border-color:var(--bs-danger-border-subtle)!important}.border-light-subtle{border-color:var(--bs-light-border-subtle)!important}.border-dark-subtle{border-color:var(--bs-dark-border-subtle)!important}.border-1{border-width:1px!important}.border-2{border-width:2px!important}.border-3{border-width:3px!important}.border-4{border-width:4px!important}.border-5{border-width:5px!important}.border-opacity-10{--bs-border-opacity:0.1}.border-opacity-25{--bs-border-opacity:0.25}.border-opacity-50{--bs-border-opacity:0.5}.border-opacity-75{--bs-border-opacity:0.75}.border-opacity-100{--bs-border-opacity:1}.w-25{width:25%!important}.w-50{width:50%!important}.w-75{width:75%!important}.w-100{width:100%!important}.w-auto{width:auto!important}.mw-100{max-width:100%!important}.vw-100{width:100vw!important}.min-vw-100{min-width:100vw!important}.h-25{height:25%!important}.h-50{height:50%!important}.h-75{height:75%!important}.h-100{height:100%!important}.h-auto{height:auto!important}.mh-100{max-height:100%!important}.vh-100{height:100vh!important}.min-vh-100{min-height:100vh!important}.flex-fill{flex:1 1 auto!important}.flex-row{flex-direction:row!important}.flex-column{flex-direction:column!important}.flex-row-reverse{flex-direction:row-reverse!important}.flex-column-reverse{flex-direction:column-reverse!important}.flex-grow-0{flex-grow:0!important}.flex-grow-1{flex-grow:1!important}.flex-shrink-0{flex-shrink:0!important}.flex-shrink-1{flex-shrink:1!important}.flex-wrap{flex-wrap:wrap!important}.flex-nowrap{flex-wrap:nowrap!important}.flex-wrap-reverse{flex-wrap:wrap-reverse!important}.justify-content-start{justify-content:flex-start!important}.justify-content-end{justify-content:flex-end!important}.justify-content-center{justify-content:center!important}.justify-content-between{justify-content:space-between!important}.justify-content-around{justify-content:space-around!important}.justify-content-evenly{justify-content:space-evenly!important}.align-items-start{align-items:flex-start!important}.align-items-end{align-items:flex-end!important}.align-items-center{align-items:center!important}.align-items-baseline{align-items:baseline!important}.align-items-stretch{align-items:stretch!important}.align-content-start{align-content:flex-start!important}.align-content-end{align-content:flex-end!important}.align-content-center{align-content:center!important}.align-content-between{align-content:space-between!important}.align-content-around{align-content:space-around!important}.align-content-stretch{align-content:stretch!important}.align-self-auto{align-self:auto!important}.align-self-start{align-self:flex-start!important}.align-self-end{align-self:flex-end!important}.align-self-center{align-self:center!important}.align-self-baseline{align-self:baseline!important}.align-self-stretch{align-self:stretch!important}.order-first{order:-1!important}.order-0{order:0!important}.order-1{order:1!important}.order-2{order:2!important}.order-3{order:3!important}.order-4{order:4!important}.order-5{order:5!important}.order-last{order:6!important}.m-0{margin:0!important}.m-1{margin:.25rem!important}.m-2{margin:.5rem!important}.m-3{margin:1rem!important}.m-4{margin:1.5rem!important}.m-5{margin:3rem!important}.m-auto{margin:auto!important}.mx-0{margin-right:0!important;margin-left:0!important}.mx-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-3{margin-right:1rem!important;margin-left:1rem!important}.mx-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-5{margin-right:3rem!important;margin-left:3rem!important}.mx-auto{margin-right:auto!important;margin-left:auto!important}.my-0{margin-top:0!important;margin-bottom:0!important}.my-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-0{margin-top:0!important}.mt-1{margin-top:.25rem!important}.mt-2{margin-top:.5rem!important}.mt-3{margin-top:1rem!important}.mt-4{margin-top:1.5rem!important}.mt-5{margin-top:3rem!important}.mt-auto{margin-top:auto!important}.me-0{margin-right:0!important}.me-1{margin-right:.25rem!important}.me-2{margin-right:.5rem!important}.me-3{margin-right:1rem!important}.me-4{margin-right:1.5rem!important}.me-5{margin-right:3rem!important}.me-auto{margin-right:auto!important}.mb-0{margin-bottom:0!important}.mb-1{margin-bottom:.25rem!important}.mb-2{margin-bottom:.5rem!important}.mb-3{margin-bottom:1rem!important}.mb-4{margin-bottom:1.5rem!important}.mb-5{margin-bottom:3rem!important}.mb-auto{margin-bottom:auto!important}.ms-0{margin-left:0!important}.ms-1{margin-left:.25rem!important}.ms-2{margin-left:.5rem!important}.ms-3{margin-left:1rem!important}.ms-4{margin-left:1.5rem!important}.ms-5{margin-left:3rem!important}.ms-auto{margin-left:auto!important}.p-0{padding:0!important}.p-1{padding:.25rem!important}.p-2{padding:.5rem!important}.p-3{padding:1rem!important}.p-4{padding:1.5rem!important}.p-5{padding:3rem!important}.px-0{padding-right:0!important;padding-left:0!important}.px-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-3{padding-right:1rem!important;padding-left:1rem!important}.px-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-5{padding-right:3rem!important;padding-left:3rem!important}.py-0{padding-top:0!important;padding-bottom:0!important}.py-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-0{padding-top:0!important}.pt-1{padding-top:.25rem!important}.pt-2{padding-top:.5rem!important}.pt-3{padding-top:1rem!important}.pt-4{padding-top:1.5rem!important}.pt-5{padding-top:3rem!important}.pe-0{padding-right:0!important}.pe-1{padding-right:.25rem!important}.pe-2{padding-right:.5rem!important}.pe-3{padding-right:1rem!important}.pe-4{padding-right:1.5rem!important}.pe-5{padding-right:3rem!important}.pb-0{padding-bottom:0!important}.pb-1{padding-bottom:.25rem!important}.pb-2{padding-bottom:.5rem!important}.pb-3{padding-bottom:1rem!important}.pb-4{padding-bottom:1.5rem!important}.pb-5{padding-bottom:3rem!important}.ps-0{padding-left:0!important}.ps-1{padding-left:.25rem!important}.ps-2{padding-left:.5rem!important}.ps-3{padding-left:1rem!important}.ps-4{padding-left:1.5rem!important}.ps-5{padding-left:3rem!important}.gap-0{gap:0!important}.gap-1{gap:.25rem!important}.gap-2{gap:.5rem!important}.gap-3{gap:1rem!important}.gap-4{gap:1.5rem!important}.gap-5{gap:3rem!important}.row-gap-0{row-gap:0!important}.row-gap-1{row-gap:.25rem!important}.row-gap-2{row-gap:.5rem!important}.row-gap-3{row-gap:1rem!important}.row-gap-4{row-gap:1.5rem!important}.row-gap-5{row-gap:3rem!important}.column-gap-0{-moz-column-gap:0!important;column-gap:0!important}.column-gap-1{-moz-column-gap:0.25rem!important;column-gap:.25rem!important}.column-gap-2{-moz-column-gap:0.5rem!important;column-gap:.5rem!important}.column-gap-3{-moz-column-gap:1rem!important;column-gap:1rem!important}.column-gap-4{-moz-column-gap:1.5rem!important;column-gap:1.5rem!important}.column-gap-5{-moz-column-gap:3rem!important;column-gap:3rem!important}.font-monospace{font-family:var(--bs-font-monospace)!important}.fs-1{font-size:calc(1.375rem + 1.5vw)!important}.fs-2{font-size:calc(1.325rem + .9vw)!important}.fs-3{font-size:calc(1.3rem + .6vw)!important}.fs-4{font-size:calc(1.275rem + .3vw)!important}.fs-5{font-size:1.25rem!important}.fs-6{font-size:1rem!important}.fst-italic{font-style:italic!important}.fst-normal{font-style:normal!important}.fw-lighter{font-weight:lighter!important}.fw-light{font-weight:300!important}.fw-normal{font-weight:400!important}.fw-medium{font-weight:500!important}.fw-semibold{font-weight:600!important}.fw-bold{font-weight:700!important}.fw-bolder{font-weight:bolder!important}.lh-1{line-height:1!important}.lh-sm{line-height:1.25!important}.lh-base{line-height:1.5!important}.lh-lg{line-height:2!important}.text-start{text-align:left!important}.text-end{text-align:right!important}.text-center{text-align:center!important}.text-decoration-none{text-decoration:none!important}.text-decoration-underline{text-decoration:underline!important}.text-decoration-line-through{text-decoration:line-through!important}.text-lowercase{text-transform:lowercase!important}.text-uppercase{text-transform:uppercase!important}.text-capitalize{text-transform:capitalize!important}.text-wrap{white-space:normal!important}.text-nowrap{white-space:nowrap!important}.text-break{word-wrap:break-word!important;word-break:break-word!important}.text-primary{--bs-text-opacity:1;color:rgba(var(--bs-primary-rgb),var(--bs-text-opacity))!important}.text-secondary{--bs-text-opacity:1;color:rgba(var(--bs-secondary-rgb),var(--bs-text-opacity))!important}.text-success{--bs-text-opacity:1;color:rgba(var(--bs-success-rgb),var(--bs-text-opacity))!important}.text-info{--bs-text-opacity:1;color:rgba(var(--bs-info-rgb),var(--bs-text-opacity))!important}.text-warning{--bs-text-opacity:1;color:rgba(var(--bs-warning-rgb),var(--bs-text-opacity))!important}.text-danger{--bs-text-opacity:1;color:rgba(var(--bs-danger-rgb),var(--bs-text-opacity))!important}.text-light{--bs-text-opacity:1;color:rgba(var(--bs-light-rgb),var(--bs-text-opacity))!important}.text-dark{--bs-text-opacity:1;color:rgba(var(--bs-dark-rgb),var(--bs-text-opacity))!important}.text-black{--bs-text-opacity:1;color:rgba(var(--bs-black-rgb),var(--bs-text-opacity))!important}.text-white{--bs-text-opacity:1;color:rgba(var(--bs-white-rgb),var(--bs-text-opacity))!important}.text-body{--bs-text-opacity:1;color:rgba(var(--bs-body-color-rgb),var(--bs-text-opacity))!important}.text-muted{--bs-text-opacity:1;color:var(--bs-secondary-color)!important}.text-black-50{--bs-text-opacity:1;color:rgba(0,0,0,.5)!important}.text-white-50{--bs-text-opacity:1;color:rgba(255,255,255,.5)!important}.text-body-secondary{--bs-text-opacity:1;color:var(--bs-secondary-color)!important}.text-body-tertiary{--bs-text-opacity:1;color:var(--bs-tertiary-color)!important}.text-body-emphasis{--bs-text-opacity:1;color:var(--bs-emphasis-color)!important}.text-reset{--bs-text-opacity:1;color:inherit!important}.text-opacity-25{--bs-text-opacity:0.25}.text-opacity-50{--bs-text-opacity:0.5}.text-opacity-75{--bs-text-opacity:0.75}.text-opacity-100{--bs-text-opacity:1}.text-primary-emphasis{color:var(--bs-primary-text-emphasis)!important}.text-secondary-emphasis{color:var(--bs-secondary-text-emphasis)!important}.text-success-emphasis{color:var(--bs-success-text-emphasis)!important}.text-info-emphasis{color:var(--bs-info-text-emphasis)!important}.text-warning-emphasis{color:var(--bs-warning-text-emphasis)!important}.text-danger-emphasis{color:var(--bs-danger-text-emphasis)!important}.text-light-emphasis{color:var(--bs-light-text-emphasis)!important}.text-dark-emphasis{color:var(--bs-dark-text-emphasis)!important}.link-opacity-10{--bs-link-opacity:0.1}.link-opacity-10-hover:hover{--bs-link-opacity:0.1}.link-opacity-25{--bs-link-opacity:0.25}.link-opacity-25-hover:hover{--bs-link-opacity:0.25}.link-opacity-50{--bs-link-opacity:0.5}.link-opacity-50-hover:hover{--bs-link-opacity:0.5}.link-opacity-75{--bs-link-opacity:0.75}.link-opacity-75-hover:hover{--bs-link-opacity:0.75}.link-opacity-100{--bs-link-opacity:1}.link-opacity-100-hover:hover{--bs-link-opacity:1}.link-offset-1{text-underline-offset:0.125em!important}.link-offset-1-hover:hover{text-underline-offset:0.125em!important}.link-offset-2{text-underline-offset:0.25em!important}.link-offset-2-hover:hover{text-underline-offset:0.25em!important}.link-offset-3{text-underline-offset:0.375em!important}.link-offset-3-hover:hover{text-underline-offset:0.375em!important}.link-underline-primary{--bs-link-underline-opacity:1;-webkit-text-decoration-color:rgba(var(--bs-primary-rgb),var(--bs-link-underline-opacity))!important;text-decoration-color:rgba(var(--bs-primary-rgb),var(--bs-link-underline-opacity))!important}.link-underline-secondary{--bs-link-underline-opacity:1;-webkit-text-decoration-color:rgba(var(--bs-secondary-rgb),var(--bs-link-underline-opacity))!important;text-decoration-color:rgba(var(--bs-secondary-rgb),var(--bs-link-underline-opacity))!important}.link-underline-success{--bs-link-underline-opacity:1;-webkit-text-decoration-color:rgba(var(--bs-success-rgb),var(--bs-link-underline-opacity))!important;text-decoration-color:rgba(var(--bs-success-rgb),var(--bs-link-underline-opacity))!important}.link-underline-info{--bs-link-underline-opacity:1;-webkit-text-decoration-color:rgba(var(--bs-info-rgb),var(--bs-link-underline-opacity))!important;text-decoration-color:rgba(var(--bs-info-rgb),var(--bs-link-underline-opacity))!important}.link-underline-warning{--bs-link-underline-opacity:1;-webkit-text-decoration-color:rgba(var(--bs-warning-rgb),var(--bs-link-underline-opacity))!important;text-decoration-color:rgba(var(--bs-warning-rgb),var(--bs-link-underline-opacity))!important}.link-underline-danger{--bs-link-underline-opacity:1;-webkit-text-decoration-color:rgba(var(--bs-danger-rgb),var(--bs-link-underline-opacity))!important;text-decoration-color:rgba(var(--bs-danger-rgb),var(--bs-link-underline-opacity))!important}.link-underline-light{--bs-link-underline-opacity:1;-webkit-text-decoration-color:rgba(var(--bs-light-rgb),var(--bs-link-underline-opacity))!important;text-decoration-color:rgba(var(--bs-light-rgb),var(--bs-link-underline-opacity))!important}.link-underline-dark{--bs-link-underline-opacity:1;-webkit-text-decoration-color:rgba(var(--bs-dark-rgb),var(--bs-link-underline-opacity))!important;text-decoration-color:rgba(var(--bs-dark-rgb),var(--bs-link-underline-opacity))!important}.link-underline{--bs-link-underline-opacity:1;-webkit-text-decoration-color:rgba(var(--bs-link-color-rgb),var(--bs-link-underline-opacity,1))!important;text-decoration-color:rgba(var(--bs-link-color-rgb),var(--bs-link-underline-opacity,1))!important}.link-underline-opacity-0{--bs-link-underline-opacity:0}.link-underline-opacity-0-hover:hover{--bs-link-underline-opacity:0}.link-underline-opacity-10{--bs-link-underline-opacity:0.1}.link-underline-opacity-10-hover:hover{--bs-link-underline-opacity:0.1}.link-underline-opacity-25{--bs-link-underline-opacity:0.25}.link-underline-opacity-25-hover:hover{--bs-link-underline-opacity:0.25}.link-underline-opacity-50{--bs-link-underline-opacity:0.5}.link-underline-opacity-50-hover:hover{--bs-link-underline-opacity:0.5}.link-underline-opacity-75{--bs-link-underline-opacity:0.75}.link-underline-opacity-75-hover:hover{--bs-link-underline-opacity:0.75}.link-underline-opacity-100{--bs-link-underline-opacity:1}.link-underline-opacity-100-hover:hover{--bs-link-underline-opacity:1}.bg-primary{--bs-bg-opacity:1;background-color:rgba(var(--bs-primary-rgb),var(--bs-bg-opacity))!important}.bg-secondary{--bs-bg-opacity:1;background-color:rgba(var(--bs-secondary-rgb),var(--bs-bg-opacity))!important}.bg-success{--bs-bg-opacity:1;background-color:rgba(var(--bs-success-rgb),var(--bs-bg-opacity))!important}.bg-info{--bs-bg-opacity:1;background-color:rgba(var(--bs-info-rgb),var(--bs-bg-opacity))!important}.bg-warning{--bs-bg-opacity:1;background-color:rgba(var(--bs-warning-rgb),var(--bs-bg-opacity))!important}.bg-danger{--bs-bg-opacity:1;background-color:rgba(var(--bs-danger-rgb),var(--bs-bg-opacity))!important}.bg-light{--bs-bg-opacity:1;background-color:rgba(var(--bs-light-rgb),var(--bs-bg-opacity))!important}.bg-dark{--bs-bg-opacity:1;background-color:rgba(var(--bs-dark-rgb),var(--bs-bg-opacity))!important}.bg-black{--bs-bg-opacity:1;background-color:rgba(var(--bs-black-rgb),var(--bs-bg-opacity))!important}.bg-white{--bs-bg-opacity:1;background-color:rgba(var(--bs-white-rgb),var(--bs-bg-opacity))!important}.bg-body{--bs-bg-opacity:1;background-color:rgba(var(--bs-body-bg-rgb),var(--bs-bg-opacity))!important}.bg-transparent{--bs-bg-opacity:1;background-color:transparent!important}.bg-body-secondary{--bs-bg-opacity:1;background-color:rgba(var(--bs-secondary-bg-rgb),var(--bs-bg-opacity))!important}.bg-body-tertiary{--bs-bg-opacity:1;background-color:rgba(var(--bs-tertiary-bg-rgb),var(--bs-bg-opacity))!important}.bg-opacity-10{--bs-bg-opacity:0.1}.bg-opacity-25{--bs-bg-opacity:0.25}.bg-opacity-50{--bs-bg-opacity:0.5}.bg-opacity-75{--bs-bg-opacity:0.75}.bg-opacity-100{--bs-bg-opacity:1}.bg-primary-subtle{background-color:var(--bs-primary-bg-subtle)!important}.bg-secondary-subtle{background-color:var(--bs-secondary-bg-subtle)!important}.bg-success-subtle{background-color:var(--bs-success-bg-subtle)!important}.bg-info-subtle{background-color:var(--bs-info-bg-subtle)!important}.bg-warning-subtle{background-color:var(--bs-warning-bg-subtle)!important}.bg-danger-subtle{background-color:var(--bs-danger-bg-subtle)!important}.bg-light-subtle{background-color:var(--bs-light-bg-subtle)!important}.bg-dark-subtle{background-color:var(--bs-dark-bg-subtle)!important}.bg-gradient{background-image:var(--bs-gradient)!important}.user-select-all{-webkit-user-select:all!important;-moz-user-select:all!important;user-select:all!important}.user-select-auto{-webkit-user-select:auto!important;-moz-user-select:auto!important;user-select:auto!important}.user-select-none{-webkit-user-select:none!important;-moz-user-select:none!important;user-select:none!important}.pe-none{pointer-events:none!important}.pe-auto{pointer-events:auto!important}.rounded{border-radius:var(--bs-border-radius)!important}.rounded-0{border-radius:0!important}.rounded-1{border-radius:var(--bs-border-radius-sm)!important}.rounded-2{border-radius:var(--bs-border-radius)!important}.rounded-3{border-radius:var(--bs-border-radius-lg)!important}.rounded-4{border-radius:var(--bs-border-radius-xl)!important}.rounded-5{border-radius:var(--bs-border-radius-xxl)!important}.rounded-circle{border-radius:50%!important}.rounded-pill{border-radius:var(--bs-border-radius-pill)!important}.rounded-top{border-top-left-radius:var(--bs-border-radius)!important;border-top-right-radius:var(--bs-border-radius)!important}.rounded-top-0{border-top-left-radius:0!important;border-top-right-radius:0!important}.rounded-top-1{border-top-left-radius:var(--bs-border-radius-sm)!important;border-top-right-radius:var(--bs-border-radius-sm)!important}.rounded-top-2{border-top-left-radius:var(--bs-border-radius)!important;border-top-right-radius:var(--bs-border-radius)!important}.rounded-top-3{border-top-left-radius:var(--bs-border-radius-lg)!important;border-top-right-radius:var(--bs-border-radius-lg)!important}.rounded-top-4{border-top-left-radius:var(--bs-border-radius-xl)!important;border-top-right-radius:var(--bs-border-radius-xl)!important}.rounded-top-5{border-top-left-radius:var(--bs-border-radius-xxl)!important;border-top-right-radius:var(--bs-border-radius-xxl)!important}.rounded-top-circle{border-top-left-radius:50%!important;border-top-right-radius:50%!important}.rounded-top-pill{border-top-left-radius:var(--bs-border-radius-pill)!important;border-top-right-radius:var(--bs-border-radius-pill)!important}.rounded-end{border-top-right-radius:var(--bs-border-radius)!important;border-bottom-right-radius:var(--bs-border-radius)!important}.rounded-end-0{border-top-right-radius:0!important;border-bottom-right-radius:0!important}.rounded-end-1{border-top-right-radius:var(--bs-border-radius-sm)!important;border-bottom-right-radius:var(--bs-border-radius-sm)!important}.rounded-end-2{border-top-right-radius:var(--bs-border-radius)!important;border-bottom-right-radius:var(--bs-border-radius)!important}.rounded-end-3{border-top-right-radius:var(--bs-border-radius-lg)!important;border-bottom-right-radius:var(--bs-border-radius-lg)!important}.rounded-end-4{border-top-right-radius:var(--bs-border-radius-xl)!important;border-bottom-right-radius:var(--bs-border-radius-xl)!important}.rounded-end-5{border-top-right-radius:var(--bs-border-radius-xxl)!important;border-bottom-right-radius:var(--bs-border-radius-xxl)!important}.rounded-end-circle{border-top-right-radius:50%!important;border-bottom-right-radius:50%!important}.rounded-end-pill{border-top-right-radius:var(--bs-border-radius-pill)!important;border-bottom-right-radius:var(--bs-border-radius-pill)!important}.rounded-bottom{border-bottom-right-radius:var(--bs-border-radius)!important;border-bottom-left-radius:var(--bs-border-radius)!important}.rounded-bottom-0{border-bottom-right-radius:0!important;border-bottom-left-radius:0!important}.rounded-bottom-1{border-bottom-right-radius:var(--bs-border-radius-sm)!important;border-bottom-left-radius:var(--bs-border-radius-sm)!important}.rounded-bottom-2{border-bottom-right-radius:var(--bs-border-radius)!important;border-bottom-left-radius:var(--bs-border-radius)!important}.rounded-bottom-3{border-bottom-right-radius:var(--bs-border-radius-lg)!important;border-bottom-left-radius:var(--bs-border-radius-lg)!important}.rounded-bottom-4{border-bottom-right-radius:var(--bs-border-radius-xl)!important;border-bottom-left-radius:var(--bs-border-radius-xl)!important}.rounded-bottom-5{border-bottom-right-radius:var(--bs-border-radius-xxl)!important;border-bottom-left-radius:var(--bs-border-radius-xxl)!important}.rounded-bottom-circle{border-bottom-right-radius:50%!important;border-bottom-left-radius:50%!important}.rounded-bottom-pill{border-bottom-right-radius:var(--bs-border-radius-pill)!important;border-bottom-left-radius:var(--bs-border-radius-pill)!important}.rounded-start{border-bottom-left-radius:var(--bs-border-radius)!important;border-top-left-radius:var(--bs-border-radius)!important}.rounded-start-0{border-bottom-left-radius:0!important;border-top-left-radius:0!important}.rounded-start-1{border-bottom-left-radius:var(--bs-border-radius-sm)!important;border-top-left-radius:var(--bs-border-radius-sm)!important}.rounded-start-2{border-bottom-left-radius:var(--bs-border-radius)!important;border-top-left-radius:var(--bs-border-radius)!important}.rounded-start-3{border-bottom-left-radius:var(--bs-border-radius-lg)!important;border-top-left-radius:var(--bs-border-radius-lg)!important}.rounded-start-4{border-bottom-left-radius:var(--bs-border-radius-xl)!important;border-top-left-radius:var(--bs-border-radius-xl)!important}.rounded-start-5{border-bottom-left-radius:var(--bs-border-radius-xxl)!important;border-top-left-radius:var(--bs-border-radius-xxl)!important}.rounded-start-circle{border-bottom-left-radius:50%!important;border-top-left-radius:50%!important}.rounded-start-pill{border-bottom-left-radius:var(--bs-border-radius-pill)!important;border-top-left-radius:var(--bs-border-radius-pill)!important}.visible{visibility:visible!important}.invisible{visibility:hidden!important}.z-n1{z-index:-1!important}.z-0{z-index:0!important}.z-1{z-index:1!important}.z-2{z-index:2!important}.z-3{z-index:3!important}@media (min-width:576px){.float-sm-start{float:left!important}.float-sm-end{float:right!important}.float-sm-none{float:none!important}.object-fit-sm-contain{-o-object-fit:contain!important;object-fit:contain!important}.object-fit-sm-cover{-o-object-fit:cover!important;object-fit:cover!important}.object-fit-sm-fill{-o-object-fit:fill!important;object-fit:fill!important}.object-fit-sm-scale{-o-object-fit:scale-down!important;object-fit:scale-down!important}.object-fit-sm-none{-o-object-fit:none!important;object-fit:none!important}.d-sm-inline{display:inline!important}.d-sm-inline-block{display:inline-block!important}.d-sm-block{display:block!important}.d-sm-grid{display:grid!important}.d-sm-inline-grid{display:inline-grid!important}.d-sm-table{display:table!important}.d-sm-table-row{display:table-row!important}.d-sm-table-cell{display:table-cell!important}.d-sm-flex{display:flex!important}.d-sm-inline-flex{display:inline-flex!important}.d-sm-none{display:none!important}.flex-sm-fill{flex:1 1 auto!important}.flex-sm-row{flex-direction:row!important}.flex-sm-column{flex-direction:column!important}.flex-sm-row-reverse{flex-direction:row-reverse!important}.flex-sm-column-reverse{flex-direction:column-reverse!important}.flex-sm-grow-0{flex-grow:0!important}.flex-sm-grow-1{flex-grow:1!important}.flex-sm-shrink-0{flex-shrink:0!important}.flex-sm-shrink-1{flex-shrink:1!important}.flex-sm-wrap{flex-wrap:wrap!important}.flex-sm-nowrap{flex-wrap:nowrap!important}.flex-sm-wrap-reverse{flex-wrap:wrap-reverse!important}.justify-content-sm-start{justify-content:flex-start!important}.justify-content-sm-end{justify-content:flex-end!important}.justify-content-sm-center{justify-content:center!important}.justify-content-sm-between{justify-content:space-between!important}.justify-content-sm-around{justify-content:space-around!important}.justify-content-sm-evenly{justify-content:space-evenly!important}.align-items-sm-start{align-items:flex-start!important}.align-items-sm-end{align-items:flex-end!important}.align-items-sm-center{align-items:center!important}.align-items-sm-baseline{align-items:baseline!important}.align-items-sm-stretch{align-items:stretch!important}.align-content-sm-start{align-content:flex-start!important}.align-content-sm-end{align-content:flex-end!important}.align-content-sm-center{align-content:center!important}.align-content-sm-between{align-content:space-between!important}.align-content-sm-around{align-content:space-around!important}.align-content-sm-stretch{align-content:stretch!important}.align-self-sm-auto{align-self:auto!important}.align-self-sm-start{align-self:flex-start!important}.align-self-sm-end{align-self:flex-end!important}.align-self-sm-center{align-self:center!important}.align-self-sm-baseline{align-self:baseline!important}.align-self-sm-stretch{align-self:stretch!important}.order-sm-first{order:-1!important}.order-sm-0{order:0!important}.order-sm-1{order:1!important}.order-sm-2{order:2!important}.order-sm-3{order:3!important}.order-sm-4{order:4!important}.order-sm-5{order:5!important}.order-sm-last{order:6!important}.m-sm-0{margin:0!important}.m-sm-1{margin:.25rem!important}.m-sm-2{margin:.5rem!important}.m-sm-3{margin:1rem!important}.m-sm-4{margin:1.5rem!important}.m-sm-5{margin:3rem!important}.m-sm-auto{margin:auto!important}.mx-sm-0{margin-right:0!important;margin-left:0!important}.mx-sm-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-sm-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-sm-3{margin-right:1rem!important;margin-left:1rem!important}.mx-sm-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-sm-5{margin-right:3rem!important;margin-left:3rem!important}.mx-sm-auto{margin-right:auto!important;margin-left:auto!important}.my-sm-0{margin-top:0!important;margin-bottom:0!important}.my-sm-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-sm-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-sm-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-sm-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-sm-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-sm-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-sm-0{margin-top:0!important}.mt-sm-1{margin-top:.25rem!important}.mt-sm-2{margin-top:.5rem!important}.mt-sm-3{margin-top:1rem!important}.mt-sm-4{margin-top:1.5rem!important}.mt-sm-5{margin-top:3rem!important}.mt-sm-auto{margin-top:auto!important}.me-sm-0{margin-right:0!important}.me-sm-1{margin-right:.25rem!important}.me-sm-2{margin-right:.5rem!important}.me-sm-3{margin-right:1rem!important}.me-sm-4{margin-right:1.5rem!important}.me-sm-5{margin-right:3rem!important}.me-sm-auto{margin-right:auto!important}.mb-sm-0{margin-bottom:0!important}.mb-sm-1{margin-bottom:.25rem!important}.mb-sm-2{margin-bottom:.5rem!important}.mb-sm-3{margin-bottom:1rem!important}.mb-sm-4{margin-bottom:1.5rem!important}.mb-sm-5{margin-bottom:3rem!important}.mb-sm-auto{margin-bottom:auto!important}.ms-sm-0{margin-left:0!important}.ms-sm-1{margin-left:.25rem!important}.ms-sm-2{margin-left:.5rem!important}.ms-sm-3{margin-left:1rem!important}.ms-sm-4{margin-left:1.5rem!important}.ms-sm-5{margin-left:3rem!important}.ms-sm-auto{margin-left:auto!important}.p-sm-0{padding:0!important}.p-sm-1{padding:.25rem!important}.p-sm-2{padding:.5rem!important}.p-sm-3{padding:1rem!important}.p-sm-4{padding:1.5rem!important}.p-sm-5{padding:3rem!important}.px-sm-0{padding-right:0!important;padding-left:0!important}.px-sm-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-sm-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-sm-3{padding-right:1rem!important;padding-left:1rem!important}.px-sm-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-sm-5{padding-right:3rem!important;padding-left:3rem!important}.py-sm-0{padding-top:0!important;padding-bottom:0!important}.py-sm-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-sm-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-sm-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-sm-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-sm-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-sm-0{padding-top:0!important}.pt-sm-1{padding-top:.25rem!important}.pt-sm-2{padding-top:.5rem!important}.pt-sm-3{padding-top:1rem!important}.pt-sm-4{padding-top:1.5rem!important}.pt-sm-5{padding-top:3rem!important}.pe-sm-0{padding-right:0!important}.pe-sm-1{padding-right:.25rem!important}.pe-sm-2{padding-right:.5rem!important}.pe-sm-3{padding-right:1rem!important}.pe-sm-4{padding-right:1.5rem!important}.pe-sm-5{padding-right:3rem!important}.pb-sm-0{padding-bottom:0!important}.pb-sm-1{padding-bottom:.25rem!important}.pb-sm-2{padding-bottom:.5rem!important}.pb-sm-3{padding-bottom:1rem!important}.pb-sm-4{padding-bottom:1.5rem!important}.pb-sm-5{padding-bottom:3rem!important}.ps-sm-0{padding-left:0!important}.ps-sm-1{padding-left:.25rem!important}.ps-sm-2{padding-left:.5rem!important}.ps-sm-3{padding-left:1rem!important}.ps-sm-4{padding-left:1.5rem!important}.ps-sm-5{padding-left:3rem!important}.gap-sm-0{gap:0!important}.gap-sm-1{gap:.25rem!important}.gap-sm-2{gap:.5rem!important}.gap-sm-3{gap:1rem!important}.gap-sm-4{gap:1.5rem!important}.gap-sm-5{gap:3rem!important}.row-gap-sm-0{row-gap:0!important}.row-gap-sm-1{row-gap:.25rem!important}.row-gap-sm-2{row-gap:.5rem!important}.row-gap-sm-3{row-gap:1rem!important}.row-gap-sm-4{row-gap:1.5rem!important}.row-gap-sm-5{row-gap:3rem!important}.column-gap-sm-0{-moz-column-gap:0!important;column-gap:0!important}.column-gap-sm-1{-moz-column-gap:0.25rem!important;column-gap:.25rem!important}.column-gap-sm-2{-moz-column-gap:0.5rem!important;column-gap:.5rem!important}.column-gap-sm-3{-moz-column-gap:1rem!important;column-gap:1rem!important}.column-gap-sm-4{-moz-column-gap:1.5rem!important;column-gap:1.5rem!important}.column-gap-sm-5{-moz-column-gap:3rem!important;column-gap:3rem!important}.text-sm-start{text-align:left!important}.text-sm-end{text-align:right!important}.text-sm-center{text-align:center!important}}@media (min-width:768px){.float-md-start{float:left!important}.float-md-end{float:right!important}.float-md-none{float:none!important}.object-fit-md-contain{-o-object-fit:contain!important;object-fit:contain!important}.object-fit-md-cover{-o-object-fit:cover!important;object-fit:cover!important}.object-fit-md-fill{-o-object-fit:fill!important;object-fit:fill!important}.object-fit-md-scale{-o-object-fit:scale-down!important;object-fit:scale-down!important}.object-fit-md-none{-o-object-fit:none!important;object-fit:none!important}.d-md-inline{display:inline!important}.d-md-inline-block{display:inline-block!important}.d-md-block{display:block!important}.d-md-grid{display:grid!important}.d-md-inline-grid{display:inline-grid!important}.d-md-table{display:table!important}.d-md-table-row{display:table-row!important}.d-md-table-cell{display:table-cell!important}.d-md-flex{display:flex!important}.d-md-inline-flex{display:inline-flex!important}.d-md-none{display:none!important}.flex-md-fill{flex:1 1 auto!important}.flex-md-row{flex-direction:row!important}.flex-md-column{flex-direction:column!important}.flex-md-row-reverse{flex-direction:row-reverse!important}.flex-md-column-reverse{flex-direction:column-reverse!important}.flex-md-grow-0{flex-grow:0!important}.flex-md-grow-1{flex-grow:1!important}.flex-md-shrink-0{flex-shrink:0!important}.flex-md-shrink-1{flex-shrink:1!important}.flex-md-wrap{flex-wrap:wrap!important}.flex-md-nowrap{flex-wrap:nowrap!important}.flex-md-wrap-reverse{flex-wrap:wrap-reverse!important}.justify-content-md-start{justify-content:flex-start!important}.justify-content-md-end{justify-content:flex-end!important}.justify-content-md-center{justify-content:center!important}.justify-content-md-between{justify-content:space-between!important}.justify-content-md-around{justify-content:space-around!important}.justify-content-md-evenly{justify-content:space-evenly!important}.align-items-md-start{align-items:flex-start!important}.align-items-md-end{align-items:flex-end!important}.align-items-md-center{align-items:center!important}.align-items-md-baseline{align-items:baseline!important}.align-items-md-stretch{align-items:stretch!important}.align-content-md-start{align-content:flex-start!important}.align-content-md-end{align-content:flex-end!important}.align-content-md-center{align-content:center!important}.align-content-md-between{align-content:space-between!important}.align-content-md-around{align-content:space-around!important}.align-content-md-stretch{align-content:stretch!important}.align-self-md-auto{align-self:auto!important}.align-self-md-start{align-self:flex-start!important}.align-self-md-end{align-self:flex-end!important}.align-self-md-center{align-self:center!important}.align-self-md-baseline{align-self:baseline!important}.align-self-md-stretch{align-self:stretch!important}.order-md-first{order:-1!important}.order-md-0{order:0!important}.order-md-1{order:1!important}.order-md-2{order:2!important}.order-md-3{order:3!important}.order-md-4{order:4!important}.order-md-5{order:5!important}.order-md-last{order:6!important}.m-md-0{margin:0!important}.m-md-1{margin:.25rem!important}.m-md-2{margin:.5rem!important}.m-md-3{margin:1rem!important}.m-md-4{margin:1.5rem!important}.m-md-5{margin:3rem!important}.m-md-auto{margin:auto!important}.mx-md-0{margin-right:0!important;margin-left:0!important}.mx-md-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-md-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-md-3{margin-right:1rem!important;margin-left:1rem!important}.mx-md-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-md-5{margin-right:3rem!important;margin-left:3rem!important}.mx-md-auto{margin-right:auto!important;margin-left:auto!important}.my-md-0{margin-top:0!important;margin-bottom:0!important}.my-md-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-md-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-md-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-md-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-md-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-md-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-md-0{margin-top:0!important}.mt-md-1{margin-top:.25rem!important}.mt-md-2{margin-top:.5rem!important}.mt-md-3{margin-top:1rem!important}.mt-md-4{margin-top:1.5rem!important}.mt-md-5{margin-top:3rem!important}.mt-md-auto{margin-top:auto!important}.me-md-0{margin-right:0!important}.me-md-1{margin-right:.25rem!important}.me-md-2{margin-right:.5rem!important}.me-md-3{margin-right:1rem!important}.me-md-4{margin-right:1.5rem!important}.me-md-5{margin-right:3rem!important}.me-md-auto{margin-right:auto!important}.mb-md-0{margin-bottom:0!important}.mb-md-1{margin-bottom:.25rem!important}.mb-md-2{margin-bottom:.5rem!important}.mb-md-3{margin-bottom:1rem!important}.mb-md-4{margin-bottom:1.5rem!important}.mb-md-5{margin-bottom:3rem!important}.mb-md-auto{margin-bottom:auto!important}.ms-md-0{margin-left:0!important}.ms-md-1{margin-left:.25rem!important}.ms-md-2{margin-left:.5rem!important}.ms-md-3{margin-left:1rem!important}.ms-md-4{margin-left:1.5rem!important}.ms-md-5{margin-left:3rem!important}.ms-md-auto{margin-left:auto!important}.p-md-0{padding:0!important}.p-md-1{padding:.25rem!important}.p-md-2{padding:.5rem!important}.p-md-3{padding:1rem!important}.p-md-4{padding:1.5rem!important}.p-md-5{padding:3rem!important}.px-md-0{padding-right:0!important;padding-left:0!important}.px-md-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-md-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-md-3{padding-right:1rem!important;padding-left:1rem!important}.px-md-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-md-5{padding-right:3rem!important;padding-left:3rem!important}.py-md-0{padding-top:0!important;padding-bottom:0!important}.py-md-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-md-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-md-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-md-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-md-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-md-0{padding-top:0!important}.pt-md-1{padding-top:.25rem!important}.pt-md-2{padding-top:.5rem!important}.pt-md-3{padding-top:1rem!important}.pt-md-4{padding-top:1.5rem!important}.pt-md-5{padding-top:3rem!important}.pe-md-0{padding-right:0!important}.pe-md-1{padding-right:.25rem!important}.pe-md-2{padding-right:.5rem!important}.pe-md-3{padding-right:1rem!important}.pe-md-4{padding-right:1.5rem!important}.pe-md-5{padding-right:3rem!important}.pb-md-0{padding-bottom:0!important}.pb-md-1{padding-bottom:.25rem!important}.pb-md-2{padding-bottom:.5rem!important}.pb-md-3{padding-bottom:1rem!important}.pb-md-4{padding-bottom:1.5rem!important}.pb-md-5{padding-bottom:3rem!important}.ps-md-0{padding-left:0!important}.ps-md-1{padding-left:.25rem!important}.ps-md-2{padding-left:.5rem!important}.ps-md-3{padding-left:1rem!important}.ps-md-4{padding-left:1.5rem!important}.ps-md-5{padding-left:3rem!important}.gap-md-0{gap:0!important}.gap-md-1{gap:.25rem!important}.gap-md-2{gap:.5rem!important}.gap-md-3{gap:1rem!important}.gap-md-4{gap:1.5rem!important}.gap-md-5{gap:3rem!important}.row-gap-md-0{row-gap:0!important}.row-gap-md-1{row-gap:.25rem!important}.row-gap-md-2{row-gap:.5rem!important}.row-gap-md-3{row-gap:1rem!important}.row-gap-md-4{row-gap:1.5rem!important}.row-gap-md-5{row-gap:3rem!important}.column-gap-md-0{-moz-column-gap:0!important;column-gap:0!important}.column-gap-md-1{-moz-column-gap:0.25rem!important;column-gap:.25rem!important}.column-gap-md-2{-moz-column-gap:0.5rem!important;column-gap:.5rem!important}.column-gap-md-3{-moz-column-gap:1rem!important;column-gap:1rem!important}.column-gap-md-4{-moz-column-gap:1.5rem!important;column-gap:1.5rem!important}.column-gap-md-5{-moz-column-gap:3rem!important;column-gap:3rem!important}.text-md-start{text-align:left!important}.text-md-end{text-align:right!important}.text-md-center{text-align:center!important}}@media (min-width:992px){.float-lg-start{float:left!important}.float-lg-end{float:right!important}.float-lg-none{float:none!important}.object-fit-lg-contain{-o-object-fit:contain!important;object-fit:contain!important}.object-fit-lg-cover{-o-object-fit:cover!important;object-fit:cover!important}.object-fit-lg-fill{-o-object-fit:fill!important;object-fit:fill!important}.object-fit-lg-scale{-o-object-fit:scale-down!important;object-fit:scale-down!important}.object-fit-lg-none{-o-object-fit:none!important;object-fit:none!important}.d-lg-inline{display:inline!important}.d-lg-inline-block{display:inline-block!important}.d-lg-block{display:block!important}.d-lg-grid{display:grid!important}.d-lg-inline-grid{display:inline-grid!important}.d-lg-table{display:table!important}.d-lg-table-row{display:table-row!important}.d-lg-table-cell{display:table-cell!important}.d-lg-flex{display:flex!important}.d-lg-inline-flex{display:inline-flex!important}.d-lg-none{display:none!important}.flex-lg-fill{flex:1 1 auto!important}.flex-lg-row{flex-direction:row!important}.flex-lg-column{flex-direction:column!important}.flex-lg-row-reverse{flex-direction:row-reverse!important}.flex-lg-column-reverse{flex-direction:column-reverse!important}.flex-lg-grow-0{flex-grow:0!important}.flex-lg-grow-1{flex-grow:1!important}.flex-lg-shrink-0{flex-shrink:0!important}.flex-lg-shrink-1{flex-shrink:1!important}.flex-lg-wrap{flex-wrap:wrap!important}.flex-lg-nowrap{flex-wrap:nowrap!important}.flex-lg-wrap-reverse{flex-wrap:wrap-reverse!important}.justify-content-lg-start{justify-content:flex-start!important}.justify-content-lg-end{justify-content:flex-end!important}.justify-content-lg-center{justify-content:center!important}.justify-content-lg-between{justify-content:space-between!important}.justify-content-lg-around{justify-content:space-around!important}.justify-content-lg-evenly{justify-content:space-evenly!important}.align-items-lg-start{align-items:flex-start!important}.align-items-lg-end{align-items:flex-end!important}.align-items-lg-center{align-items:center!important}.align-items-lg-baseline{align-items:baseline!important}.align-items-lg-stretch{align-items:stretch!important}.align-content-lg-start{align-content:flex-start!important}.align-content-lg-end{align-content:flex-end!important}.align-content-lg-center{align-content:center!important}.align-content-lg-between{align-content:space-between!important}.align-content-lg-around{align-content:space-around!important}.align-content-lg-stretch{align-content:stretch!important}.align-self-lg-auto{align-self:auto!important}.align-self-lg-start{align-self:flex-start!important}.align-self-lg-end{align-self:flex-end!important}.align-self-lg-center{align-self:center!important}.align-self-lg-baseline{align-self:baseline!important}.align-self-lg-stretch{align-self:stretch!important}.order-lg-first{order:-1!important}.order-lg-0{order:0!important}.order-lg-1{order:1!important}.order-lg-2{order:2!important}.order-lg-3{order:3!important}.order-lg-4{order:4!important}.order-lg-5{order:5!important}.order-lg-last{order:6!important}.m-lg-0{margin:0!important}.m-lg-1{margin:.25rem!important}.m-lg-2{margin:.5rem!important}.m-lg-3{margin:1rem!important}.m-lg-4{margin:1.5rem!important}.m-lg-5{margin:3rem!important}.m-lg-auto{margin:auto!important}.mx-lg-0{margin-right:0!important;margin-left:0!important}.mx-lg-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-lg-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-lg-3{margin-right:1rem!important;margin-left:1rem!important}.mx-lg-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-lg-5{margin-right:3rem!important;margin-left:3rem!important}.mx-lg-auto{margin-right:auto!important;margin-left:auto!important}.my-lg-0{margin-top:0!important;margin-bottom:0!important}.my-lg-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-lg-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-lg-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-lg-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-lg-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-lg-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-lg-0{margin-top:0!important}.mt-lg-1{margin-top:.25rem!important}.mt-lg-2{margin-top:.5rem!important}.mt-lg-3{margin-top:1rem!important}.mt-lg-4{margin-top:1.5rem!important}.mt-lg-5{margin-top:3rem!important}.mt-lg-auto{margin-top:auto!important}.me-lg-0{margin-right:0!important}.me-lg-1{margin-right:.25rem!important}.me-lg-2{margin-right:.5rem!important}.me-lg-3{margin-right:1rem!important}.me-lg-4{margin-right:1.5rem!important}.me-lg-5{margin-right:3rem!important}.me-lg-auto{margin-right:auto!important}.mb-lg-0{margin-bottom:0!important}.mb-lg-1{margin-bottom:.25rem!important}.mb-lg-2{margin-bottom:.5rem!important}.mb-lg-3{margin-bottom:1rem!important}.mb-lg-4{margin-bottom:1.5rem!important}.mb-lg-5{margin-bottom:3rem!important}.mb-lg-auto{margin-bottom:auto!important}.ms-lg-0{margin-left:0!important}.ms-lg-1{margin-left:.25rem!important}.ms-lg-2{margin-left:.5rem!important}.ms-lg-3{margin-left:1rem!important}.ms-lg-4{margin-left:1.5rem!important}.ms-lg-5{margin-left:3rem!important}.ms-lg-auto{margin-left:auto!important}.p-lg-0{padding:0!important}.p-lg-1{padding:.25rem!important}.p-lg-2{padding:.5rem!important}.p-lg-3{padding:1rem!important}.p-lg-4{padding:1.5rem!important}.p-lg-5{padding:3rem!important}.px-lg-0{padding-right:0!important;padding-left:0!important}.px-lg-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-lg-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-lg-3{padding-right:1rem!important;padding-left:1rem!important}.px-lg-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-lg-5{padding-right:3rem!important;padding-left:3rem!important}.py-lg-0{padding-top:0!important;padding-bottom:0!important}.py-lg-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-lg-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-lg-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-lg-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-lg-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-lg-0{padding-top:0!important}.pt-lg-1{padding-top:.25rem!important}.pt-lg-2{padding-top:.5rem!important}.pt-lg-3{padding-top:1rem!important}.pt-lg-4{padding-top:1.5rem!important}.pt-lg-5{padding-top:3rem!important}.pe-lg-0{padding-right:0!important}.pe-lg-1{padding-right:.25rem!important}.pe-lg-2{padding-right:.5rem!important}.pe-lg-3{padding-right:1rem!important}.pe-lg-4{padding-right:1.5rem!important}.pe-lg-5{padding-right:3rem!important}.pb-lg-0{padding-bottom:0!important}.pb-lg-1{padding-bottom:.25rem!important}.pb-lg-2{padding-bottom:.5rem!important}.pb-lg-3{padding-bottom:1rem!important}.pb-lg-4{padding-bottom:1.5rem!important}.pb-lg-5{padding-bottom:3rem!important}.ps-lg-0{padding-left:0!important}.ps-lg-1{padding-left:.25rem!important}.ps-lg-2{padding-left:.5rem!important}.ps-lg-3{padding-left:1rem!important}.ps-lg-4{padding-left:1.5rem!important}.ps-lg-5{padding-left:3rem!important}.gap-lg-0{gap:0!important}.gap-lg-1{gap:.25rem!important}.gap-lg-2{gap:.5rem!important}.gap-lg-3{gap:1rem!important}.gap-lg-4{gap:1.5rem!important}.gap-lg-5{gap:3rem!important}.row-gap-lg-0{row-gap:0!important}.row-gap-lg-1{row-gap:.25rem!important}.row-gap-lg-2{row-gap:.5rem!important}.row-gap-lg-3{row-gap:1rem!important}.row-gap-lg-4{row-gap:1.5rem!important}.row-gap-lg-5{row-gap:3rem!important}.column-gap-lg-0{-moz-column-gap:0!important;column-gap:0!important}.column-gap-lg-1{-moz-column-gap:0.25rem!important;column-gap:.25rem!important}.column-gap-lg-2{-moz-column-gap:0.5rem!important;column-gap:.5rem!important}.column-gap-lg-3{-moz-column-gap:1rem!important;column-gap:1rem!important}.column-gap-lg-4{-moz-column-gap:1.5rem!important;column-gap:1.5rem!important}.column-gap-lg-5{-moz-column-gap:3rem!important;column-gap:3rem!important}.text-lg-start{text-align:left!important}.text-lg-end{text-align:right!important}.text-lg-center{text-align:center!important}}@media (min-width:1200px){.float-xl-start{float:left!important}.float-xl-end{float:right!important}.float-xl-none{float:none!important}.object-fit-xl-contain{-o-object-fit:contain!important;object-fit:contain!important}.object-fit-xl-cover{-o-object-fit:cover!important;object-fit:cover!important}.object-fit-xl-fill{-o-object-fit:fill!important;object-fit:fill!important}.object-fit-xl-scale{-o-object-fit:scale-down!important;object-fit:scale-down!important}.object-fit-xl-none{-o-object-fit:none!important;object-fit:none!important}.d-xl-inline{display:inline!important}.d-xl-inline-block{display:inline-block!important}.d-xl-block{display:block!important}.d-xl-grid{display:grid!important}.d-xl-inline-grid{display:inline-grid!important}.d-xl-table{display:table!important}.d-xl-table-row{display:table-row!important}.d-xl-table-cell{display:table-cell!important}.d-xl-flex{display:flex!important}.d-xl-inline-flex{display:inline-flex!important}.d-xl-none{display:none!important}.flex-xl-fill{flex:1 1 auto!important}.flex-xl-row{flex-direction:row!important}.flex-xl-column{flex-direction:column!important}.flex-xl-row-reverse{flex-direction:row-reverse!important}.flex-xl-column-reverse{flex-direction:column-reverse!important}.flex-xl-grow-0{flex-grow:0!important}.flex-xl-grow-1{flex-grow:1!important}.flex-xl-shrink-0{flex-shrink:0!important}.flex-xl-shrink-1{flex-shrink:1!important}.flex-xl-wrap{flex-wrap:wrap!important}.flex-xl-nowrap{flex-wrap:nowrap!important}.flex-xl-wrap-reverse{flex-wrap:wrap-reverse!important}.justify-content-xl-start{justify-content:flex-start!important}.justify-content-xl-end{justify-content:flex-end!important}.justify-content-xl-center{justify-content:center!important}.justify-content-xl-between{justify-content:space-between!important}.justify-content-xl-around{justify-content:space-around!important}.justify-content-xl-evenly{justify-content:space-evenly!important}.align-items-xl-start{align-items:flex-start!important}.align-items-xl-end{align-items:flex-end!important}.align-items-xl-center{align-items:center!important}.align-items-xl-baseline{align-items:baseline!important}.align-items-xl-stretch{align-items:stretch!important}.align-content-xl-start{align-content:flex-start!important}.align-content-xl-end{align-content:flex-end!important}.align-content-xl-center{align-content:center!important}.align-content-xl-between{align-content:space-between!important}.align-content-xl-around{align-content:space-around!important}.align-content-xl-stretch{align-content:stretch!important}.align-self-xl-auto{align-self:auto!important}.align-self-xl-start{align-self:flex-start!important}.align-self-xl-end{align-self:flex-end!important}.align-self-xl-center{align-self:center!important}.align-self-xl-baseline{align-self:baseline!important}.align-self-xl-stretch{align-self:stretch!important}.order-xl-first{order:-1!important}.order-xl-0{order:0!important}.order-xl-1{order:1!important}.order-xl-2{order:2!important}.order-xl-3{order:3!important}.order-xl-4{order:4!important}.order-xl-5{order:5!important}.order-xl-last{order:6!important}.m-xl-0{margin:0!important}.m-xl-1{margin:.25rem!important}.m-xl-2{margin:.5rem!important}.m-xl-3{margin:1rem!important}.m-xl-4{margin:1.5rem!important}.m-xl-5{margin:3rem!important}.m-xl-auto{margin:auto!important}.mx-xl-0{margin-right:0!important;margin-left:0!important}.mx-xl-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-xl-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-xl-3{margin-right:1rem!important;margin-left:1rem!important}.mx-xl-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-xl-5{margin-right:3rem!important;margin-left:3rem!important}.mx-xl-auto{margin-right:auto!important;margin-left:auto!important}.my-xl-0{margin-top:0!important;margin-bottom:0!important}.my-xl-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-xl-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-xl-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-xl-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-xl-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-xl-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-xl-0{margin-top:0!important}.mt-xl-1{margin-top:.25rem!important}.mt-xl-2{margin-top:.5rem!important}.mt-xl-3{margin-top:1rem!important}.mt-xl-4{margin-top:1.5rem!important}.mt-xl-5{margin-top:3rem!important}.mt-xl-auto{margin-top:auto!important}.me-xl-0{margin-right:0!important}.me-xl-1{margin-right:.25rem!important}.me-xl-2{margin-right:.5rem!important}.me-xl-3{margin-right:1rem!important}.me-xl-4{margin-right:1.5rem!important}.me-xl-5{margin-right:3rem!important}.me-xl-auto{margin-right:auto!important}.mb-xl-0{margin-bottom:0!important}.mb-xl-1{margin-bottom:.25rem!important}.mb-xl-2{margin-bottom:.5rem!important}.mb-xl-3{margin-bottom:1rem!important}.mb-xl-4{margin-bottom:1.5rem!important}.mb-xl-5{margin-bottom:3rem!important}.mb-xl-auto{margin-bottom:auto!important}.ms-xl-0{margin-left:0!important}.ms-xl-1{margin-left:.25rem!important}.ms-xl-2{margin-left:.5rem!important}.ms-xl-3{margin-left:1rem!important}.ms-xl-4{margin-left:1.5rem!important}.ms-xl-5{margin-left:3rem!important}.ms-xl-auto{margin-left:auto!important}.p-xl-0{padding:0!important}.p-xl-1{padding:.25rem!important}.p-xl-2{padding:.5rem!important}.p-xl-3{padding:1rem!important}.p-xl-4{padding:1.5rem!important}.p-xl-5{padding:3rem!important}.px-xl-0{padding-right:0!important;padding-left:0!important}.px-xl-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-xl-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-xl-3{padding-right:1rem!important;padding-left:1rem!important}.px-xl-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-xl-5{padding-right:3rem!important;padding-left:3rem!important}.py-xl-0{padding-top:0!important;padding-bottom:0!important}.py-xl-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-xl-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-xl-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-xl-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-xl-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-xl-0{padding-top:0!important}.pt-xl-1{padding-top:.25rem!important}.pt-xl-2{padding-top:.5rem!important}.pt-xl-3{padding-top:1rem!important}.pt-xl-4{padding-top:1.5rem!important}.pt-xl-5{padding-top:3rem!important}.pe-xl-0{padding-right:0!important}.pe-xl-1{padding-right:.25rem!important}.pe-xl-2{padding-right:.5rem!important}.pe-xl-3{padding-right:1rem!important}.pe-xl-4{padding-right:1.5rem!important}.pe-xl-5{padding-right:3rem!important}.pb-xl-0{padding-bottom:0!important}.pb-xl-1{padding-bottom:.25rem!important}.pb-xl-2{padding-bottom:.5rem!important}.pb-xl-3{padding-bottom:1rem!important}.pb-xl-4{padding-bottom:1.5rem!important}.pb-xl-5{padding-bottom:3rem!important}.ps-xl-0{padding-left:0!important}.ps-xl-1{padding-left:.25rem!important}.ps-xl-2{padding-left:.5rem!important}.ps-xl-3{padding-left:1rem!important}.ps-xl-4{padding-left:1.5rem!important}.ps-xl-5{padding-left:3rem!important}.gap-xl-0{gap:0!important}.gap-xl-1{gap:.25rem!important}.gap-xl-2{gap:.5rem!important}.gap-xl-3{gap:1rem!important}.gap-xl-4{gap:1.5rem!important}.gap-xl-5{gap:3rem!important}.row-gap-xl-0{row-gap:0!important}.row-gap-xl-1{row-gap:.25rem!important}.row-gap-xl-2{row-gap:.5rem!important}.row-gap-xl-3{row-gap:1rem!important}.row-gap-xl-4{row-gap:1.5rem!important}.row-gap-xl-5{row-gap:3rem!important}.column-gap-xl-0{-moz-column-gap:0!important;column-gap:0!important}.column-gap-xl-1{-moz-column-gap:0.25rem!important;column-gap:.25rem!important}.column-gap-xl-2{-moz-column-gap:0.5rem!important;column-gap:.5rem!important}.column-gap-xl-3{-moz-column-gap:1rem!important;column-gap:1rem!important}.column-gap-xl-4{-moz-column-gap:1.5rem!important;column-gap:1.5rem!important}.column-gap-xl-5{-moz-column-gap:3rem!important;column-gap:3rem!important}.text-xl-start{text-align:left!important}.text-xl-end{text-align:right!important}.text-xl-center{text-align:center!important}}@media (min-width:1400px){.float-xxl-start{float:left!important}.float-xxl-end{float:right!important}.float-xxl-none{float:none!important}.object-fit-xxl-contain{-o-object-fit:contain!important;object-fit:contain!important}.object-fit-xxl-cover{-o-object-fit:cover!important;object-fit:cover!important}.object-fit-xxl-fill{-o-object-fit:fill!important;object-fit:fill!important}.object-fit-xxl-scale{-o-object-fit:scale-down!important;object-fit:scale-down!important}.object-fit-xxl-none{-o-object-fit:none!important;object-fit:none!important}.d-xxl-inline{display:inline!important}.d-xxl-inline-block{display:inline-block!important}.d-xxl-block{display:block!important}.d-xxl-grid{display:grid!important}.d-xxl-inline-grid{display:inline-grid!important}.d-xxl-table{display:table!important}.d-xxl-table-row{display:table-row!important}.d-xxl-table-cell{display:table-cell!important}.d-xxl-flex{display:flex!important}.d-xxl-inline-flex{display:inline-flex!important}.d-xxl-none{display:none!important}.flex-xxl-fill{flex:1 1 auto!important}.flex-xxl-row{flex-direction:row!important}.flex-xxl-column{flex-direction:column!important}.flex-xxl-row-reverse{flex-direction:row-reverse!important}.flex-xxl-column-reverse{flex-direction:column-reverse!important}.flex-xxl-grow-0{flex-grow:0!important}.flex-xxl-grow-1{flex-grow:1!important}.flex-xxl-shrink-0{flex-shrink:0!important}.flex-xxl-shrink-1{flex-shrink:1!important}.flex-xxl-wrap{flex-wrap:wrap!important}.flex-xxl-nowrap{flex-wrap:nowrap!important}.flex-xxl-wrap-reverse{flex-wrap:wrap-reverse!important}.justify-content-xxl-start{justify-content:flex-start!important}.justify-content-xxl-end{justify-content:flex-end!important}.justify-content-xxl-center{justify-content:center!important}.justify-content-xxl-between{justify-content:space-between!important}.justify-content-xxl-around{justify-content:space-around!important}.justify-content-xxl-evenly{justify-content:space-evenly!important}.align-items-xxl-start{align-items:flex-start!important}.align-items-xxl-end{align-items:flex-end!important}.align-items-xxl-center{align-items:center!important}.align-items-xxl-baseline{align-items:baseline!important}.align-items-xxl-stretch{align-items:stretch!important}.align-content-xxl-start{align-content:flex-start!important}.align-content-xxl-end{align-content:flex-end!important}.align-content-xxl-center{align-content:center!important}.align-content-xxl-between{align-content:space-between!important}.align-content-xxl-around{align-content:space-around!important}.align-content-xxl-stretch{align-content:stretch!important}.align-self-xxl-auto{align-self:auto!important}.align-self-xxl-start{align-self:flex-start!important}.align-self-xxl-end{align-self:flex-end!important}.align-self-xxl-center{align-self:center!important}.align-self-xxl-baseline{align-self:baseline!important}.align-self-xxl-stretch{align-self:stretch!important}.order-xxl-first{order:-1!important}.order-xxl-0{order:0!important}.order-xxl-1{order:1!important}.order-xxl-2{order:2!important}.order-xxl-3{order:3!important}.order-xxl-4{order:4!important}.order-xxl-5{order:5!important}.order-xxl-last{order:6!important}.m-xxl-0{margin:0!important}.m-xxl-1{margin:.25rem!important}.m-xxl-2{margin:.5rem!important}.m-xxl-3{margin:1rem!important}.m-xxl-4{margin:1.5rem!important}.m-xxl-5{margin:3rem!important}.m-xxl-auto{margin:auto!important}.mx-xxl-0{margin-right:0!important;margin-left:0!important}.mx-xxl-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-xxl-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-xxl-3{margin-right:1rem!important;margin-left:1rem!important}.mx-xxl-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-xxl-5{margin-right:3rem!important;margin-left:3rem!important}.mx-xxl-auto{margin-right:auto!important;margin-left:auto!important}.my-xxl-0{margin-top:0!important;margin-bottom:0!important}.my-xxl-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-xxl-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-xxl-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-xxl-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-xxl-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-xxl-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-xxl-0{margin-top:0!important}.mt-xxl-1{margin-top:.25rem!important}.mt-xxl-2{margin-top:.5rem!important}.mt-xxl-3{margin-top:1rem!important}.mt-xxl-4{margin-top:1.5rem!important}.mt-xxl-5{margin-top:3rem!important}.mt-xxl-auto{margin-top:auto!important}.me-xxl-0{margin-right:0!important}.me-xxl-1{margin-right:.25rem!important}.me-xxl-2{margin-right:.5rem!important}.me-xxl-3{margin-right:1rem!important}.me-xxl-4{margin-right:1.5rem!important}.me-xxl-5{margin-right:3rem!important}.me-xxl-auto{margin-right:auto!important}.mb-xxl-0{margin-bottom:0!important}.mb-xxl-1{margin-bottom:.25rem!important}.mb-xxl-2{margin-bottom:.5rem!important}.mb-xxl-3{margin-bottom:1rem!important}.mb-xxl-4{margin-bottom:1.5rem!important}.mb-xxl-5{margin-bottom:3rem!important}.mb-xxl-auto{margin-bottom:auto!important}.ms-xxl-0{margin-left:0!important}.ms-xxl-1{margin-left:.25rem!important}.ms-xxl-2{margin-left:.5rem!important}.ms-xxl-3{margin-left:1rem!important}.ms-xxl-4{margin-left:1.5rem!important}.ms-xxl-5{margin-left:3rem!important}.ms-xxl-auto{margin-left:auto!important}.p-xxl-0{padding:0!important}.p-xxl-1{padding:.25rem!important}.p-xxl-2{padding:.5rem!important}.p-xxl-3{padding:1rem!important}.p-xxl-4{padding:1.5rem!important}.p-xxl-5{padding:3rem!important}.px-xxl-0{padding-right:0!important;padding-left:0!important}.px-xxl-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-xxl-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-xxl-3{padding-right:1rem!important;padding-left:1rem!important}.px-xxl-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-xxl-5{padding-right:3rem!important;padding-left:3rem!important}.py-xxl-0{padding-top:0!important;padding-bottom:0!important}.py-xxl-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-xxl-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-xxl-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-xxl-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-xxl-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-xxl-0{padding-top:0!important}.pt-xxl-1{padding-top:.25rem!important}.pt-xxl-2{padding-top:.5rem!important}.pt-xxl-3{padding-top:1rem!important}.pt-xxl-4{padding-top:1.5rem!important}.pt-xxl-5{padding-top:3rem!important}.pe-xxl-0{padding-right:0!important}.pe-xxl-1{padding-right:.25rem!important}.pe-xxl-2{padding-right:.5rem!important}.pe-xxl-3{padding-right:1rem!important}.pe-xxl-4{padding-right:1.5rem!important}.pe-xxl-5{padding-right:3rem!important}.pb-xxl-0{padding-bottom:0!important}.pb-xxl-1{padding-bottom:.25rem!important}.pb-xxl-2{padding-bottom:.5rem!important}.pb-xxl-3{padding-bottom:1rem!important}.pb-xxl-4{padding-bottom:1.5rem!important}.pb-xxl-5{padding-bottom:3rem!important}.ps-xxl-0{padding-left:0!important}.ps-xxl-1{padding-left:.25rem!important}.ps-xxl-2{padding-left:.5rem!important}.ps-xxl-3{padding-left:1rem!important}.ps-xxl-4{padding-left:1.5rem!important}.ps-xxl-5{padding-left:3rem!important}.gap-xxl-0{gap:0!important}.gap-xxl-1{gap:.25rem!important}.gap-xxl-2{gap:.5rem!important}.gap-xxl-3{gap:1rem!important}.gap-xxl-4{gap:1.5rem!important}.gap-xxl-5{gap:3rem!important}.row-gap-xxl-0{row-gap:0!important}.row-gap-xxl-1{row-gap:.25rem!important}.row-gap-xxl-2{row-gap:.5rem!important}.row-gap-xxl-3{row-gap:1rem!important}.row-gap-xxl-4{row-gap:1.5rem!important}.row-gap-xxl-5{row-gap:3rem!important}.column-gap-xxl-0{-moz-column-gap:0!important;column-gap:0!important}.column-gap-xxl-1{-moz-column-gap:0.25rem!important;column-gap:.25rem!important}.column-gap-xxl-2{-moz-column-gap:0.5rem!important;column-gap:.5rem!important}.column-gap-xxl-3{-moz-column-gap:1rem!important;column-gap:1rem!important}.column-gap-xxl-4{-moz-column-gap:1.5rem!important;column-gap:1.5rem!important}.column-gap-xxl-5{-moz-column-gap:3rem!important;column-gap:3rem!important}.text-xxl-start{text-align:left!important}.text-xxl-end{text-align:right!important}.text-xxl-center{text-align:center!important}}@media (min-width:1200px){.fs-1{font-size:2.5rem!important}.fs-2{font-size:2rem!important}.fs-3{font-size:1.75rem!important}.fs-4{font-size:1.5rem!important}}@media print{.d-print-inline{display:inline!important}.d-print-inline-block{display:inline-block!important}.d-print-block{display:block!important}.d-print-grid{display:grid!important}.d-print-inline-grid{display:inline-grid!important}.d-print-table{display:table!important}.d-print-table-row{display:table-row!important}.d-print-table-cell{display:table-cell!important}.d-print-flex{display:flex!important}.d-print-inline-flex{display:inline-flex!important}.d-print-none{display:none!important}} -/*# sourceMappingURL=bootstrap.min.css.map */ \ No newline at end of file diff --git a/EnvelopeGenerator.ReceiverUI/wwwroot/css/envelope-viewer.css b/EnvelopeGenerator.ReceiverUI/wwwroot/css/envelope-viewer.css deleted file mode 100644 index 60e2ccdb..00000000 --- a/EnvelopeGenerator.ReceiverUI/wwwroot/css/envelope-viewer.css +++ /dev/null @@ -1,767 +0,0 @@ -.envelope-viewer-layout { - display: flex; - flex-direction: column; - height: 100vh; - overflow: hidden; - background: linear-gradient(135deg, #1e3c72 0%, #2a5298 50%, #7e22ce 100%); -} - -.envelope-action-bar { - background: rgba(255, 255, 255, 0.95); - backdrop-filter: blur(20px); - border-bottom: 3px solid rgba(126, 34, 206, 0.3); - padding: 1.25rem 2rem; - flex-shrink: 0; - box-shadow: 0 4px 20px rgba(0, 0, 0, 0.1); -} - -.envelope-action-bar__inner { - max-width: 1600px; - margin: 0 auto; - display: flex; - align-items: center; - gap: 2rem; -} - -.envelope-logo svg { - filter: drop-shadow(0 2px 4px rgba(126, 34, 206, 0.3)); - color: #7e22ce; -} - -.envelope-title { - font-size: 1.125rem; - font-weight: 700; - color: #1e293b; - letter-spacing: -0.025em; -} - -.envelope-key { - font-size: 0.8125rem; - color: #64748b; - font-family: 'SF Mono', 'Monaco', 'Consolas', monospace; - font-weight: 500; - margin-top: 0.25rem; -} - -.envelope-content { - flex: 1; - min-height: 0; - padding: 1.5rem; - position: relative; - overflow: auto; -} - -.pdf-viewer-container { - height: 100%; - display: flex; - flex-direction: column; - align-items: center; - gap: 1rem; -} - -.pdf-thumbnails { - position: relative; - width: 260px; - background: rgba(255, 255, 255, 0.98); - backdrop-filter: blur(20px); - border-radius: 16px 0 0 16px; - box-shadow: - 0 8px 32px rgba(0, 0, 0, 0.12), - 0 0 0 1px rgba(126, 34, 206, 0.1); - border: 1px solid rgba(126, 34, 206, 0.15); - border-right: none; - display: flex; - flex-direction: column; - overflow: hidden; - flex-shrink: 0; -} - -.pdf-thumbnails__content { - flex: 1; - overflow-y: auto; - overflow-x: hidden; - padding: 1rem; - display: flex; - flex-direction: column; - gap: 0.75rem; -} - -.pdf-thumbnails__content::-webkit-scrollbar { - width: 6px; -} - -.pdf-thumbnails__content::-webkit-scrollbar-track { - background: rgba(0, 0, 0, 0.05); - border-radius: 3px; -} - -.pdf-thumbnails__content::-webkit-scrollbar-thumb { - background: linear-gradient(135deg, #7e22ce 0%, #2a5298 100%); - border-radius: 3px; -} - -.pdf-thumbnails__content::-webkit-scrollbar-thumb:hover { - background: linear-gradient(135deg, #6b1cb0 0%, #1e3a72 100%); -} - -.pdf-splitter { - width: 4px; - background: transparent; - cursor: col-resize; - flex-shrink: 0; - position: relative; - transition: background 0.2s ease; - z-index: 10; - user-select: none; -} - -.pdf-splitter::before { - content: ''; - position: absolute; - left: -4px; - right: -4px; - top: 0; - bottom: 0; - /* Enlarged hitbox for easier grabbing */ -} - -.pdf-splitter:hover, -.pdf-splitter.resizing { - background: linear-gradient(90deg, - rgba(126, 34, 206, 0.4) 0%, - rgba(42, 82, 152, 0.4) 100%); -} - -.pdf-splitter:active { - background: linear-gradient(90deg, - rgba(126, 34, 206, 0.6) 0%, - rgba(42, 82, 152, 0.6) 100%); -} - -/* Prevent text selection during resize */ -body.resizing { - user-select: none; - cursor: col-resize !important; -} - -.pdf-thumbnail { - cursor: pointer; - border-radius: 8px; - overflow: hidden; - background: white; - border: 2px solid transparent; - transition: all 0.2s ease; - box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08); -} - -.pdf-thumbnail:hover { - border-color: rgba(126, 34, 206, 0.3); - box-shadow: 0 4px 16px rgba(126, 34, 206, 0.2); - transform: translateY(-2px); -} - -.pdf-thumbnail--active { - border-color: #7e22ce; - box-shadow: - 0 4px 16px rgba(126, 34, 206, 0.3), - 0 0 0 3px rgba(126, 34, 206, 0.1); -} - -.pdf-thumbnail__preview { - width: 100%; - aspect-ratio: 210 / 297; - background: linear-gradient(135deg, #f8fafc 0%, #f1f5f9 100%); - display: flex; - align-items: center; - justify-content: center; - overflow: hidden; -} - -.pdf-thumbnail__canvas { - width: 100%; - height: 100%; - object-fit: contain; - object-position: center; - image-rendering: -webkit-optimize-contrast; - image-rendering: crisp-edges; -} - -.pdf-thumbnail__label { - padding: 0.5rem; - text-align: center; - font-size: 0.75rem; - font-weight: 600; - color: #64748b; - background: rgba(126, 34, 206, 0.03); - border-top: 1px solid rgba(126, 34, 206, 0.1); -} - -.pdf-thumbnail--active .pdf-thumbnail__label { - background: linear-gradient(135deg, rgba(126, 34, 206, 0.1) 0%, rgba(42, 82, 152, 0.1) 100%); - color: #7e22ce; - font-weight: 700; -} - -.pdf-toolbar__btn--toggle { - background: linear-gradient(135deg, rgba(126, 34, 206, 0.08) 0%, rgba(42, 82, 152, 0.08) 100%); - border-color: rgba(126, 34, 206, 0.25); -} - -.pdf-toolbar__btn--toggle:hover:not(:disabled) { - background: linear-gradient(135deg, rgba(126, 34, 206, 0.15) 0%, rgba(42, 82, 152, 0.15) 100%); - border-color: rgba(126, 34, 206, 0.5); -} - -.pdf-toolbar { - background: rgba(255, 255, 255, 0.98); - backdrop-filter: blur(20px); - border-radius: 12px; - padding: 0.75rem 1.5rem; - display: flex; - align-items: center; - justify-content: space-between; - gap: 1.5rem; - box-shadow: - 0 4px 16px rgba(0, 0, 0, 0.1), - 0 0 0 1px rgba(126, 34, 206, 0.1); - border: 1px solid rgba(126, 34, 206, 0.15); - flex-shrink: 0; - width: 95%; -} - -.pdf-toolbar__section { - display: flex; - align-items: center; - gap: 0.5rem; - flex-shrink: 0; -} - -.pdf-toolbar__zoom-section { - gap: 0.75rem; - flex: 1; - max-width: 400px; - min-width: 280px; - justify-content: center; -} - -.pdf-toolbar__divider { - width: 1px; - height: 32px; - background: linear-gradient(180deg, transparent 0%, rgba(126, 34, 206, 0.2) 50%, transparent 100%); -} - -.pdf-toolbar__btn { - background: linear-gradient(135deg, rgba(126, 34, 206, 0.05) 0%, rgba(42, 82, 152, 0.05) 100%); - border: 1px solid rgba(126, 34, 206, 0.2); - border-radius: 8px; - padding: 0.5rem; - cursor: pointer; - transition: all 0.2s ease; - display: flex; - align-items: center; - justify-content: center; - color: #1e293b; - min-width: 34px; - min-height: 34px; -} - -.pdf-toolbar__btn:hover:not(:disabled) { - background: linear-gradient(135deg, rgba(126, 34, 206, 0.1) 0%, rgba(42, 82, 152, 0.1) 100%); - border-color: rgba(126, 34, 206, 0.4); - transform: translateY(-1px); - box-shadow: 0 4px 12px rgba(126, 34, 206, 0.2); -} - -.pdf-toolbar__btn:active:not(:disabled) { - transform: translateY(0); - box-shadow: 0 2px 6px rgba(126, 34, 206, 0.15); -} - -.pdf-toolbar__btn:disabled { - opacity: 0.4; - cursor: not-allowed; - background: rgba(0, 0, 0, 0.02); - border-color: rgba(0, 0, 0, 0.1); -} - -.pdf-toolbar__btn--preset { - padding: 0.5rem 0.875rem; - font-size: 0.813rem; - font-weight: 600; - color: #475569; - min-width: auto; - white-space: nowrap; -} - -.pdf-toolbar__btn--preset svg { - flex-shrink: 0; -} - -.pdf-toolbar__page-input-group { - display: flex; - align-items: center; - gap: 0.375rem; - background: white; - border: 1px solid rgba(126, 34, 206, 0.2); - border-radius: 8px; - padding: 0.25rem 0.625rem; -} - -.pdf-toolbar__page-input { - width: 48px; - border: none; - outline: none; - text-align: center; - font-size: 0.875rem; - font-weight: 600; - color: #1e293b; - background: transparent; - -moz-appearance: textfield; -} - -.pdf-toolbar__page-input::-webkit-outer-spin-button, -.pdf-toolbar__page-input::-webkit-inner-spin-button { - -webkit-appearance: none; - margin: 0; -} - -.pdf-toolbar__page-total { - font-size: 0.875rem; - font-weight: 500; - color: #64748b; -} - -.pdf-toolbar__zoom-slider-container { - position: relative; - display: flex; - flex-direction: column; - align-items: center; - gap: 0.25rem; -} - -.pdf-toolbar__zoom-slider { - -webkit-appearance: none; - width: 100%; - min-width: 180px; - max-width: 350px; - height: 6px; - border-radius: 3px; - background: linear-gradient(90deg, - rgba(126, 34, 206, 0.1) 0%, - rgba(126, 34, 206, 0.2) 50%, - rgba(126, 34, 206, 0.1) 100%); - outline: none; - cursor: pointer; -} - -.pdf-toolbar__zoom-slider::-webkit-slider-thumb { - -webkit-appearance: none; - appearance: none; - width: 18px; - height: 18px; - border-radius: 50%; - background: linear-gradient(135deg, #7e22ce 0%, #2a5298 100%); - cursor: pointer; - box-shadow: 0 2px 8px rgba(126, 34, 206, 0.3); - transition: all 0.2s ease; -} - -.pdf-toolbar__zoom-slider::-webkit-slider-thumb:hover { - transform: scale(1.15); - box-shadow: 0 4px 12px rgba(126, 34, 206, 0.4); -} - -.pdf-toolbar__zoom-slider::-moz-range-thumb { - width: 18px; - height: 18px; - border-radius: 50%; - background: linear-gradient(135deg, #7e22ce 0%, #2a5298 100%); - cursor: pointer; - border: none; - box-shadow: 0 2px 8px rgba(126, 34, 206, 0.3); - transition: all 0.2s ease; -} - -.pdf-toolbar__zoom-slider::-moz-range-thumb:hover { - transform: scale(1.15); - box-shadow: 0 4px 12px rgba(126, 34, 206, 0.4); -} - -.pdf-toolbar__zoom-label { - font-size: 0.75rem; - font-weight: 700; - color: #7e22ce; - letter-spacing: 0.025em; - min-width: 45px; - text-align: center; -} - -/* Signature Navigation Styles */ -.pdf-toolbar__signature-nav { - display: flex; - align-items: center; - gap: 0.375rem; - background: linear-gradient(135deg, rgba(126, 34, 206, 0.05) 0%, rgba(42, 82, 152, 0.05) 100%); - border: 1px solid rgba(126, 34, 206, 0.2); - border-radius: 10px; - padding: 0.25rem 0.5rem; - flex-shrink: 0; -} - -.pdf-toolbar__btn--signature-nav { - min-width: 30px; - min-height: 30px; - padding: 0.25rem; - background: white; - border: 1px solid rgba(126, 34, 206, 0.25); -} - -.pdf-toolbar__btn--signature-nav:hover:not(:disabled) { - background: linear-gradient(135deg, #7e22ce 0%, #2a5298 100%); - border-color: transparent; -} - -.pdf-toolbar__btn--signature-nav:hover:not(:disabled) svg { - color: white; -} - -.pdf-toolbar__signature-counter { - display: flex; - align-items: center; - gap: 0.375rem; - padding: 0 0.375rem; -} - -.pdf-toolbar__signature-counter svg { - color: #7e22ce; - flex-shrink: 0; -} - -.pdf-toolbar__signature-counter-text { - font-size: 0.8125rem; - font-weight: 600; - color: #1e293b; - white-space: nowrap; -} - -.pdf-toolbar__signature-badge { - font-size: 0.625rem; - font-weight: 700; - padding: 0.1875rem 0.5rem; - border-radius: 5px; - background: linear-gradient(135deg, rgba(126, 34, 206, 0.1) 0%, rgba(42, 82, 152, 0.1) 100%); - color: #7e22ce; - text-transform: uppercase; - letter-spacing: 0.05em; - white-space: nowrap; -} - -.pdf-toolbar__signature-badge--complete { - background: linear-gradient(135deg, rgba(16, 185, 129, 0.1) 0%, rgba(5, 150, 105, 0.1) 100%); - color: #059669; -} - -/* Reset Button Styles */ -.pdf-toolbar__btn--reset { - background: linear-gradient(135deg, rgba(239, 68, 68, 0.08) 0%, rgba(220, 38, 38, 0.08) 100%); - border-color: rgba(239, 68, 68, 0.3); - color: #dc2626; -} - -.pdf-toolbar__btn--reset:hover:not(:disabled) { - background: linear-gradient(135deg, #ef4444 0%, #dc2626 100%); - border-color: transparent; - color: white; - transform: translateY(-1px); - box-shadow: 0 4px 12px rgba(239, 68, 68, 0.3); -} - -.pdf-toolbar__btn--reset svg { - transition: color 0.2s ease; -} - -.pdf-toolbar__btn--reset:hover:not(:disabled) svg { - color: white; -} - -/* Success Button Styles (Signature Created) */ -.pdf-toolbar__btn--success { - background: linear-gradient(135deg, rgba(16, 185, 129, 0.1) 0%, rgba(5, 150, 105, 0.1) 100%); - border-color: rgba(16, 185, 129, 0.3); - color: #059669; -} - -.pdf-toolbar__btn--success:hover:not(:disabled) { - background: linear-gradient(135deg, #10b981 0%, #059669 100%); - border-color: transparent; - color: white; - transform: translateY(-1px); - box-shadow: 0 4px 12px rgba(16, 185, 129, 0.3); -} - -.pdf-toolbar__btn--success svg { - transition: color 0.2s ease; -} - -.pdf-toolbar__btn--success:hover:not(:disabled) svg { - color: white; -} - -/* Signature Change Button */ -.pdf-toolbar__btn--signature-change { - display: flex; - align-items: center; - gap: 0.375rem; - min-width: auto; - padding: 0.5rem 0.75rem; - background: linear-gradient(135deg, rgba(126, 34, 206, 0.05) 0%, rgba(42, 82, 152, 0.05) 100%); - border: 1px solid rgba(126, 34, 206, 0.2); - color: #7e22ce; -} - -.pdf-toolbar__btn--signature-change:hover:not(:disabled) { - background: linear-gradient(135deg, rgba(126, 34, 206, 0.1) 0%, rgba(42, 82, 152, 0.1) 100%); - border-color: rgba(126, 34, 206, 0.4); -} - -.pdf-toolbar__btn--signature-change-active { - background: linear-gradient(135deg, rgba(16, 185, 129, 0.08) 0%, rgba(5, 150, 105, 0.08) 100%); - border-color: rgba(16, 185, 129, 0.25); - color: #059669; -} - -.pdf-toolbar__btn--signature-change-active:hover:not(:disabled) { - background: linear-gradient(135deg, rgba(16, 185, 129, 0.12) 0%, rgba(5, 150, 105, 0.12) 100%); - border-color: rgba(16, 185, 129, 0.35); -} - -.pdf-toolbar__btn--signature-change:disabled { - opacity: 0.5; - cursor: not-allowed; -} - -.pdf-toolbar__btn-text { - font-size: 0.813rem; - font-weight: 600; - white-space: nowrap; -} - -.pdf-frame { - background: white; - border-radius: 16px; - box-shadow: - 0 25px 50px -12px rgba(0, 0, 0, 0.25), - 0 0 0 1px rgba(255, 255, 255, 0.1); - overflow: hidden; - position: relative; - flex: 1; - width: 95%; - display: flex; - flex-direction: row; - align-items: stretch; -} - -.pdf-frame::before { - content: ''; - position: absolute; - top: 0; - left: 0; - right: 0; - height: 4px; - background: linear-gradient(90deg, #7e22ce 0%, #2a5298 100%); - z-index: 1; - border-radius: 16px 16px 0 0; -} - -.pdf-canvas-wrapper { - flex: 1; - overflow: auto; - padding: 2rem; - text-align: center; - display: flex; - flex-direction: column; - align-items: center; - justify-content: flex-start; -} - -.pdf-page-container { - position: relative; - display: inline-block; - box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1); -} - -.pdf-canvas { - display: block; - vertical-align: top; - image-rendering: -webkit-optimize-contrast; - image-rendering: crisp-edges; - transition: opacity 0.15s ease-out; -} - -.pdf-canvas.rendering { - opacity: 0; -} - -.pdf-text-layer { - position: absolute; - left: 0; - top: 0; - right: 0; - bottom: 0; - overflow: hidden; - opacity: 1; - line-height: 1.0; - pointer-events: auto; -} - -.pdf-text-layer > span { - color: transparent; - position: absolute; - white-space: pre; - cursor: text; - transform-origin: 0% 0%; -} - -.pdf-text-layer ::selection { - background: rgba(126, 34, 206, 0.3); -} - -.pdf-text-layer ::-moz-selection { - background: rgba(126, 34, 206, 0.3); -} - -.pdf-signature-layer { - position: absolute; - left: 0; - top: 0; - right: 0; - bottom: 0; - overflow: visible; - pointer-events: none; - z-index: 20; -} - -.pdf-signature-layer .signature-button { - pointer-events: auto; -} - -.signature-button { - font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif; -} - -.signature-button:focus { - outline: 2px solid #7e22ce; - outline-offset: 2px; -} - -.signature-button:active { - transform: scale(0.98); -} - -.error-container { - display: flex; - align-items: center; - justify-content: center; - height: 100%; - padding: 2rem; -} - -.alert { - border-radius: 12px; - border: none; - padding: 2rem; - max-width: 600px; -} - -.alert-danger { - background: linear-gradient(135deg, #fff1f2 0%, #ffe4e6 100%); - color: #be123c; - border-left: 4px solid #e11d48; -} - -.alert-warning { - background: linear-gradient(135deg, #fffbeb 0%, #fef3c7 100%); - color: #92400e; - border-left: 4px solid #f59e0b; -} - -.spinner-border { - border-width: 0.35rem; -} - -@media (max-width: 768px) { -.envelope-content { - padding: 0.75rem; -} - -.pdf-thumbnails { - width: 180px; - border-radius: 0 0 0 16px; -} - -.pdf-thumbnails__content { - padding: 0.75rem; - gap: 0.5rem; -} - -.pdf-toolbar { - flex-wrap: wrap; - padding: 0.625rem 1rem; - gap: 0.75rem; - width: 98%; - justify-content: center; -} - -.pdf-toolbar__divider { - display: none; -} - -.pdf-toolbar__zoom-section { - width: 100%; - max-width: 100%; -} - -.pdf-toolbar__zoom-slider { - min-width: 150px; -} - -.pdf-toolbar__btn--preset { - padding: 0.425rem 0.75rem; - font-size: 0.75rem; -} - -.pdf-frame { - border-radius: 12px; - width: 98%; - flex-direction: column; -} - -.pdf-canvas-wrapper { - padding: 1rem; -} - - .envelope-action-bar { - padding: 1rem 1.25rem; - } - - .envelope-action-bar__inner { - flex-wrap: wrap; - } - - .envelope-title { - font-size: 1rem; - } - - .envelope-key { - font-size: 0.75rem; - } - - .envelope-logo svg { - width: 20px; - height: 20px; - } - - .alert { - padding: 1.5rem; - } -} diff --git a/EnvelopeGenerator.ReceiverUI/wwwroot/css/open-iconic/FONT-LICENSE b/EnvelopeGenerator.ReceiverUI/wwwroot/css/open-iconic/FONT-LICENSE deleted file mode 100644 index a1dc03f3..00000000 --- a/EnvelopeGenerator.ReceiverUI/wwwroot/css/open-iconic/FONT-LICENSE +++ /dev/null @@ -1,86 +0,0 @@ -SIL OPEN FONT LICENSE Version 1.1 - -Copyright (c) 2014 Waybury - -PREAMBLE -The goals of the Open Font License (OFL) are to stimulate worldwide -development of collaborative font projects, to support the font creation -efforts of academic and linguistic communities, and to provide a free and -open framework in which fonts may be shared and improved in partnership -with others. - -The OFL allows the licensed fonts to be used, studied, modified and -redistributed freely as long as they are not sold by themselves. The -fonts, including any derivative works, can be bundled, embedded, -redistributed and/or sold with any software provided that any reserved -names are not used by derivative works. The fonts and derivatives, -however, cannot be released under any other type of license. The -requirement for fonts to remain under this license does not apply -to any document created using the fonts or their derivatives. - -DEFINITIONS -"Font Software" refers to the set of files released by the Copyright -Holder(s) under this license and clearly marked as such. This may -include source files, build scripts and documentation. - -"Reserved Font Name" refers to any names specified as such after the -copyright statement(s). - -"Original Version" refers to the collection of Font Software components as -distributed by the Copyright Holder(s). - -"Modified Version" refers to any derivative made by adding to, deleting, -or substituting -- in part or in whole -- any of the components of the -Original Version, by changing formats or by porting the Font Software to a -new environment. - -"Author" refers to any designer, engineer, programmer, technical -writer or other person who contributed to the Font Software. - -PERMISSION & CONDITIONS -Permission is hereby granted, free of charge, to any person obtaining -a copy of the Font Software, to use, study, copy, merge, embed, modify, -redistribute, and sell modified and unmodified copies of the Font -Software, subject to the following conditions: - -1) Neither the Font Software nor any of its individual components, -in Original or Modified Versions, may be sold by itself. - -2) Original or Modified Versions of the Font Software may be bundled, -redistributed and/or sold with any software, provided that each copy -contains the above copyright notice and this license. These can be -included either as stand-alone text files, human-readable headers or -in the appropriate machine-readable metadata fields within text or -binary files as long as those fields can be easily viewed by the user. - -3) No Modified Version of the Font Software may use the Reserved Font -Name(s) unless explicit written permission is granted by the corresponding -Copyright Holder. This restriction only applies to the primary font name as -presented to the users. - -4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font -Software shall not be used to promote, endorse or advertise any -Modified Version, except to acknowledge the contribution(s) of the -Copyright Holder(s) and the Author(s) or with their explicit written -permission. - -5) The Font Software, modified or unmodified, in part or in whole, -must be distributed entirely under this license, and must not be -distributed under any other license. The requirement for fonts to -remain under this license does not apply to any document created -using the Font Software. - -TERMINATION -This license becomes null and void if any of the above conditions are -not met. - -DISCLAIMER -THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT -OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE -COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL -DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM -OTHER DEALINGS IN THE FONT SOFTWARE. diff --git a/EnvelopeGenerator.ReceiverUI/wwwroot/css/open-iconic/ICON-LICENSE b/EnvelopeGenerator.ReceiverUI/wwwroot/css/open-iconic/ICON-LICENSE deleted file mode 100644 index 2199f4a6..00000000 --- a/EnvelopeGenerator.ReceiverUI/wwwroot/css/open-iconic/ICON-LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2014 Waybury - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. \ No newline at end of file diff --git a/EnvelopeGenerator.ReceiverUI/wwwroot/css/open-iconic/README.md b/EnvelopeGenerator.ReceiverUI/wwwroot/css/open-iconic/README.md deleted file mode 100644 index 5ac0c170..00000000 --- a/EnvelopeGenerator.ReceiverUI/wwwroot/css/open-iconic/README.md +++ /dev/null @@ -1,114 +0,0 @@ -[Open Iconic v1.1.1](https://github.com/iconic/open-iconic) -=========== - -### Open Iconic is the open source sibling of [Iconic](https://github.com/iconic/open-iconic). It is a hyper-legible collection of 223 icons with a tiny footprint—ready to use with Bootstrap and Foundation. [View the collection](https://github.com/iconic/open-iconic) - - - -## What's in Open Iconic? - -* 223 icons designed to be legible down to 8 pixels -* Super-light SVG files - 61.8 for the entire set -* SVG sprite—the modern replacement for icon fonts -* Webfont (EOT, OTF, SVG, TTF, WOFF), PNG and WebP formats -* Webfont stylesheets (including versions for Bootstrap and Foundation) in CSS, LESS, SCSS and Stylus formats -* PNG and WebP raster images in 8px, 16px, 24px, 32px, 48px and 64px. - - -## Getting Started - -#### For code samples and everything else you need to get started with Open Iconic, check out our [Icons](https://github.com/iconic/open-iconic) and [Reference](https://github.com/iconic/open-iconic) sections. - -### General Usage - -#### Using Open Iconic's SVGs - -We like SVGs and we think they're the way to display icons on the web. Since Open Iconic are just basic SVGs, we suggest you display them like you would any other image (don't forget the `alt` attribute). - -``` -icon name -``` - -#### Using Open Iconic's SVG Sprite - -Open Iconic also comes in a SVG sprite which allows you to display all the icons in the set with a single request. It's like an icon font, without being a hack. - -Adding an icon from an SVG sprite is a little different than what you're used to, but it's still a piece of cake. *Tip: To make your icons easily style able, we suggest adding a general class to the* `` *tag and a unique class name for each different icon in the* `` *tag.* - -``` - - - -``` - -Sizing icons only needs basic CSS. All the icons are in a square format, so just set the `` tag with equal width and height dimensions. - -``` -.icon { - width: 16px; - height: 16px; -} -``` - -Coloring icons is even easier. All you need to do is set the `fill` rule on the `` tag. - -``` -.icon-account-login { - fill: #f00; -} -``` - -To learn more about SVG Sprites, read [Chris Coyier's guide](http://css-tricks.com/svg-sprites-use-better-icon-fonts/). - -#### Using Open Iconic's Icon Font... - - -##### …with Bootstrap - -You can find our Bootstrap stylesheets in `font/css/open-iconic-bootstrap.{css, less, scss, styl}` - - -``` - -``` - - -``` - -``` - -##### …with Foundation - -You can find our Foundation stylesheets in `font/css/open-iconic-foundation.{css, less, scss, styl}` - -``` - -``` - - -``` - -``` - -##### …on its own - -You can find our default stylesheets in `font/css/open-iconic.{css, less, scss, styl}` - -``` - -``` - -``` - -``` - - -## License - -### Icons - -All code (including SVG markup) is under the [MIT License](http://opensource.org/licenses/MIT). - -### Fonts - -All fonts are under the [SIL Licensed](http://scripts.sil.org/cms/scripts/page.php?item_id=OFL_web). diff --git a/EnvelopeGenerator.ReceiverUI/wwwroot/css/open-iconic/font/css/open-iconic-bootstrap.min.css b/EnvelopeGenerator.ReceiverUI/wwwroot/css/open-iconic/font/css/open-iconic-bootstrap.min.css deleted file mode 100644 index 4664f2e8..00000000 --- a/EnvelopeGenerator.ReceiverUI/wwwroot/css/open-iconic/font/css/open-iconic-bootstrap.min.css +++ /dev/null @@ -1 +0,0 @@ -@font-face{font-family:Icons;src:url(../fonts/open-iconic.eot);src:url(../fonts/open-iconic.eot?#iconic-sm) format('embedded-opentype'),url(../fonts/open-iconic.woff) format('woff'),url(../fonts/open-iconic.ttf) format('truetype'),url(../fonts/open-iconic.otf) format('opentype'),url(../fonts/open-iconic.svg#iconic-sm) format('svg');font-weight:400;font-style:normal}.oi{position:relative;top:1px;display:inline-block;speak:none;font-family:Icons;font-style:normal;font-weight:400;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.oi:empty:before{width:1em;text-align:center;box-sizing:content-box}.oi.oi-align-center:before{text-align:center}.oi.oi-align-left:before{text-align:left}.oi.oi-align-right:before{text-align:right}.oi.oi-flip-horizontal:before{-webkit-transform:scale(-1,1);-ms-transform:scale(-1,1);transform:scale(-1,1)}.oi.oi-flip-vertical:before{-webkit-transform:scale(1,-1);-ms-transform:scale(-1,1);transform:scale(1,-1)}.oi.oi-flip-horizontal-vertical:before{-webkit-transform:scale(-1,-1);-ms-transform:scale(-1,1);transform:scale(-1,-1)}.oi-account-login:before{content:'\e000'}.oi-account-logout:before{content:'\e001'}.oi-action-redo:before{content:'\e002'}.oi-action-undo:before{content:'\e003'}.oi-align-center:before{content:'\e004'}.oi-align-left:before{content:'\e005'}.oi-align-right:before{content:'\e006'}.oi-aperture:before{content:'\e007'}.oi-arrow-bottom:before{content:'\e008'}.oi-arrow-circle-bottom:before{content:'\e009'}.oi-arrow-circle-left:before{content:'\e00a'}.oi-arrow-circle-right:before{content:'\e00b'}.oi-arrow-circle-top:before{content:'\e00c'}.oi-arrow-left:before{content:'\e00d'}.oi-arrow-right:before{content:'\e00e'}.oi-arrow-thick-bottom:before{content:'\e00f'}.oi-arrow-thick-left:before{content:'\e010'}.oi-arrow-thick-right:before{content:'\e011'}.oi-arrow-thick-top:before{content:'\e012'}.oi-arrow-top:before{content:'\e013'}.oi-audio-spectrum:before{content:'\e014'}.oi-audio:before{content:'\e015'}.oi-badge:before{content:'\e016'}.oi-ban:before{content:'\e017'}.oi-bar-chart:before{content:'\e018'}.oi-basket:before{content:'\e019'}.oi-battery-empty:before{content:'\e01a'}.oi-battery-full:before{content:'\e01b'}.oi-beaker:before{content:'\e01c'}.oi-bell:before{content:'\e01d'}.oi-bluetooth:before{content:'\e01e'}.oi-bold:before{content:'\e01f'}.oi-bolt:before{content:'\e020'}.oi-book:before{content:'\e021'}.oi-bookmark:before{content:'\e022'}.oi-box:before{content:'\e023'}.oi-briefcase:before{content:'\e024'}.oi-british-pound:before{content:'\e025'}.oi-browser:before{content:'\e026'}.oi-brush:before{content:'\e027'}.oi-bug:before{content:'\e028'}.oi-bullhorn:before{content:'\e029'}.oi-calculator:before{content:'\e02a'}.oi-calendar:before{content:'\e02b'}.oi-camera-slr:before{content:'\e02c'}.oi-caret-bottom:before{content:'\e02d'}.oi-caret-left:before{content:'\e02e'}.oi-caret-right:before{content:'\e02f'}.oi-caret-top:before{content:'\e030'}.oi-cart:before{content:'\e031'}.oi-chat:before{content:'\e032'}.oi-check:before{content:'\e033'}.oi-chevron-bottom:before{content:'\e034'}.oi-chevron-left:before{content:'\e035'}.oi-chevron-right:before{content:'\e036'}.oi-chevron-top:before{content:'\e037'}.oi-circle-check:before{content:'\e038'}.oi-circle-x:before{content:'\e039'}.oi-clipboard:before{content:'\e03a'}.oi-clock:before{content:'\e03b'}.oi-cloud-download:before{content:'\e03c'}.oi-cloud-upload:before{content:'\e03d'}.oi-cloud:before{content:'\e03e'}.oi-cloudy:before{content:'\e03f'}.oi-code:before{content:'\e040'}.oi-cog:before{content:'\e041'}.oi-collapse-down:before{content:'\e042'}.oi-collapse-left:before{content:'\e043'}.oi-collapse-right:before{content:'\e044'}.oi-collapse-up:before{content:'\e045'}.oi-command:before{content:'\e046'}.oi-comment-square:before{content:'\e047'}.oi-compass:before{content:'\e048'}.oi-contrast:before{content:'\e049'}.oi-copywriting:before{content:'\e04a'}.oi-credit-card:before{content:'\e04b'}.oi-crop:before{content:'\e04c'}.oi-dashboard:before{content:'\e04d'}.oi-data-transfer-download:before{content:'\e04e'}.oi-data-transfer-upload:before{content:'\e04f'}.oi-delete:before{content:'\e050'}.oi-dial:before{content:'\e051'}.oi-document:before{content:'\e052'}.oi-dollar:before{content:'\e053'}.oi-double-quote-sans-left:before{content:'\e054'}.oi-double-quote-sans-right:before{content:'\e055'}.oi-double-quote-serif-left:before{content:'\e056'}.oi-double-quote-serif-right:before{content:'\e057'}.oi-droplet:before{content:'\e058'}.oi-eject:before{content:'\e059'}.oi-elevator:before{content:'\e05a'}.oi-ellipses:before{content:'\e05b'}.oi-envelope-closed:before{content:'\e05c'}.oi-envelope-open:before{content:'\e05d'}.oi-euro:before{content:'\e05e'}.oi-excerpt:before{content:'\e05f'}.oi-expand-down:before{content:'\e060'}.oi-expand-left:before{content:'\e061'}.oi-expand-right:before{content:'\e062'}.oi-expand-up:before{content:'\e063'}.oi-external-link:before{content:'\e064'}.oi-eye:before{content:'\e065'}.oi-eyedropper:before{content:'\e066'}.oi-file:before{content:'\e067'}.oi-fire:before{content:'\e068'}.oi-flag:before{content:'\e069'}.oi-flash:before{content:'\e06a'}.oi-folder:before{content:'\e06b'}.oi-fork:before{content:'\e06c'}.oi-fullscreen-enter:before{content:'\e06d'}.oi-fullscreen-exit:before{content:'\e06e'}.oi-globe:before{content:'\e06f'}.oi-graph:before{content:'\e070'}.oi-grid-four-up:before{content:'\e071'}.oi-grid-three-up:before{content:'\e072'}.oi-grid-two-up:before{content:'\e073'}.oi-hard-drive:before{content:'\e074'}.oi-header:before{content:'\e075'}.oi-headphones:before{content:'\e076'}.oi-heart:before{content:'\e077'}.oi-home:before{content:'\e078'}.oi-image:before{content:'\e079'}.oi-inbox:before{content:'\e07a'}.oi-infinity:before{content:'\e07b'}.oi-info:before{content:'\e07c'}.oi-italic:before{content:'\e07d'}.oi-justify-center:before{content:'\e07e'}.oi-justify-left:before{content:'\e07f'}.oi-justify-right:before{content:'\e080'}.oi-key:before{content:'\e081'}.oi-laptop:before{content:'\e082'}.oi-layers:before{content:'\e083'}.oi-lightbulb:before{content:'\e084'}.oi-link-broken:before{content:'\e085'}.oi-link-intact:before{content:'\e086'}.oi-list-rich:before{content:'\e087'}.oi-list:before{content:'\e088'}.oi-location:before{content:'\e089'}.oi-lock-locked:before{content:'\e08a'}.oi-lock-unlocked:before{content:'\e08b'}.oi-loop-circular:before{content:'\e08c'}.oi-loop-square:before{content:'\e08d'}.oi-loop:before{content:'\e08e'}.oi-magnifying-glass:before{content:'\e08f'}.oi-map-marker:before{content:'\e090'}.oi-map:before{content:'\e091'}.oi-media-pause:before{content:'\e092'}.oi-media-play:before{content:'\e093'}.oi-media-record:before{content:'\e094'}.oi-media-skip-backward:before{content:'\e095'}.oi-media-skip-forward:before{content:'\e096'}.oi-media-step-backward:before{content:'\e097'}.oi-media-step-forward:before{content:'\e098'}.oi-media-stop:before{content:'\e099'}.oi-medical-cross:before{content:'\e09a'}.oi-menu:before{content:'\e09b'}.oi-microphone:before{content:'\e09c'}.oi-minus:before{content:'\e09d'}.oi-monitor:before{content:'\e09e'}.oi-moon:before{content:'\e09f'}.oi-move:before{content:'\e0a0'}.oi-musical-note:before{content:'\e0a1'}.oi-paperclip:before{content:'\e0a2'}.oi-pencil:before{content:'\e0a3'}.oi-people:before{content:'\e0a4'}.oi-person:before{content:'\e0a5'}.oi-phone:before{content:'\e0a6'}.oi-pie-chart:before{content:'\e0a7'}.oi-pin:before{content:'\e0a8'}.oi-play-circle:before{content:'\e0a9'}.oi-plus:before{content:'\e0aa'}.oi-power-standby:before{content:'\e0ab'}.oi-print:before{content:'\e0ac'}.oi-project:before{content:'\e0ad'}.oi-pulse:before{content:'\e0ae'}.oi-puzzle-piece:before{content:'\e0af'}.oi-question-mark:before{content:'\e0b0'}.oi-rain:before{content:'\e0b1'}.oi-random:before{content:'\e0b2'}.oi-reload:before{content:'\e0b3'}.oi-resize-both:before{content:'\e0b4'}.oi-resize-height:before{content:'\e0b5'}.oi-resize-width:before{content:'\e0b6'}.oi-rss-alt:before{content:'\e0b7'}.oi-rss:before{content:'\e0b8'}.oi-script:before{content:'\e0b9'}.oi-share-boxed:before{content:'\e0ba'}.oi-share:before{content:'\e0bb'}.oi-shield:before{content:'\e0bc'}.oi-signal:before{content:'\e0bd'}.oi-signpost:before{content:'\e0be'}.oi-sort-ascending:before{content:'\e0bf'}.oi-sort-descending:before{content:'\e0c0'}.oi-spreadsheet:before{content:'\e0c1'}.oi-star:before{content:'\e0c2'}.oi-sun:before{content:'\e0c3'}.oi-tablet:before{content:'\e0c4'}.oi-tag:before{content:'\e0c5'}.oi-tags:before{content:'\e0c6'}.oi-target:before{content:'\e0c7'}.oi-task:before{content:'\e0c8'}.oi-terminal:before{content:'\e0c9'}.oi-text:before{content:'\e0ca'}.oi-thumb-down:before{content:'\e0cb'}.oi-thumb-up:before{content:'\e0cc'}.oi-timer:before{content:'\e0cd'}.oi-transfer:before{content:'\e0ce'}.oi-trash:before{content:'\e0cf'}.oi-underline:before{content:'\e0d0'}.oi-vertical-align-bottom:before{content:'\e0d1'}.oi-vertical-align-center:before{content:'\e0d2'}.oi-vertical-align-top:before{content:'\e0d3'}.oi-video:before{content:'\e0d4'}.oi-volume-high:before{content:'\e0d5'}.oi-volume-low:before{content:'\e0d6'}.oi-volume-off:before{content:'\e0d7'}.oi-warning:before{content:'\e0d8'}.oi-wifi:before{content:'\e0d9'}.oi-wrench:before{content:'\e0da'}.oi-x:before{content:'\e0db'}.oi-yen:before{content:'\e0dc'}.oi-zoom-in:before{content:'\e0dd'}.oi-zoom-out:before{content:'\e0de'} \ No newline at end of file diff --git a/EnvelopeGenerator.ReceiverUI/wwwroot/css/open-iconic/font/fonts/open-iconic.eot b/EnvelopeGenerator.ReceiverUI/wwwroot/css/open-iconic/font/fonts/open-iconic.eot deleted file mode 100644 index f98177db..00000000 Binary files a/EnvelopeGenerator.ReceiverUI/wwwroot/css/open-iconic/font/fonts/open-iconic.eot and /dev/null differ diff --git a/EnvelopeGenerator.ReceiverUI/wwwroot/css/open-iconic/font/fonts/open-iconic.otf b/EnvelopeGenerator.ReceiverUI/wwwroot/css/open-iconic/font/fonts/open-iconic.otf deleted file mode 100644 index f6bd6846..00000000 Binary files a/EnvelopeGenerator.ReceiverUI/wwwroot/css/open-iconic/font/fonts/open-iconic.otf and /dev/null differ diff --git a/EnvelopeGenerator.ReceiverUI/wwwroot/css/open-iconic/font/fonts/open-iconic.svg b/EnvelopeGenerator.ReceiverUI/wwwroot/css/open-iconic/font/fonts/open-iconic.svg deleted file mode 100644 index 32b2c4e9..00000000 --- a/EnvelopeGenerator.ReceiverUI/wwwroot/css/open-iconic/font/fonts/open-iconic.svg +++ /dev/null @@ -1,543 +0,0 @@ - - - - - -Created by FontForge 20120731 at Tue Jul 1 20:39:22 2014 - By P.J. Onori -Created by P.J. Onori with FontForge 2.0 (http://fontforge.sf.net) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/EnvelopeGenerator.ReceiverUI/wwwroot/css/open-iconic/font/fonts/open-iconic.ttf b/EnvelopeGenerator.ReceiverUI/wwwroot/css/open-iconic/font/fonts/open-iconic.ttf deleted file mode 100644 index fab60486..00000000 Binary files a/EnvelopeGenerator.ReceiverUI/wwwroot/css/open-iconic/font/fonts/open-iconic.ttf and /dev/null differ diff --git a/EnvelopeGenerator.ReceiverUI/wwwroot/css/open-iconic/font/fonts/open-iconic.woff b/EnvelopeGenerator.ReceiverUI/wwwroot/css/open-iconic/font/fonts/open-iconic.woff deleted file mode 100644 index f9309988..00000000 Binary files a/EnvelopeGenerator.ReceiverUI/wwwroot/css/open-iconic/font/fonts/open-iconic.woff and /dev/null differ diff --git a/EnvelopeGenerator.ReceiverUI/wwwroot/css/privacy-policy.css b/EnvelopeGenerator.ReceiverUI/wwwroot/css/privacy-policy.css deleted file mode 100644 index 12d2fc42..00000000 --- a/EnvelopeGenerator.ReceiverUI/wwwroot/css/privacy-policy.css +++ /dev/null @@ -1,41 +0,0 @@ -body { - font-family: system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif; - line-height: 1.6; - margin: 1.25rem; - background-color: #f4f4f4; -} - -header { - text-align: center; - margin: 0rem 10rem 3rem 10rem; - box-shadow: 0 .25rem .5rem rgba(0, 0, 0, 0.1); -} - -h1 { - color: #333; -} - -h2 { - color: #0056b3; -} - -section { - background-color: white; - padding: 1.25rem; - border-radius: 0.5rem; - box-shadow: 0 .25rem .5rem rgba(0, 0, 0, 0.1); - margin: 0rem 10rem 3rem 10rem -} - -ul { - list-style: disc inside; -} - -a { - color: #0056b3; - text-decoration: none; -} - -a:hover { - text-decoration: underline; -} \ No newline at end of file diff --git a/EnvelopeGenerator.ReceiverUI/wwwroot/css/privacy-policy.min.css b/EnvelopeGenerator.ReceiverUI/wwwroot/css/privacy-policy.min.css deleted file mode 100644 index eb1528de..00000000 --- a/EnvelopeGenerator.ReceiverUI/wwwroot/css/privacy-policy.min.css +++ /dev/null @@ -1 +0,0 @@ -body{font-family:system-ui,-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Oxygen,Ubuntu,Cantarell,'Open Sans','Helvetica Neue',sans-serif;line-height:1.6;margin:1.25rem;background-color:#f4f4f4}header{text-align:center;margin:0 10rem 3rem 10rem;box-shadow:0 .25rem .5rem rgba(0,0,0,.1)}h1{color:#333}h2{color:#0056b3}section{background-color:#fff;padding:1.25rem;border-radius:.5rem;box-shadow:0 .25rem .5rem rgba(0,0,0,.1);margin:0 10rem 3rem 10rem}ul{list-style:disc inside}a{color:#0056b3;text-decoration:none}a:hover{text-decoration:underline} \ No newline at end of file diff --git a/EnvelopeGenerator.ReceiverUI/wwwroot/css/sender-page.css b/EnvelopeGenerator.ReceiverUI/wwwroot/css/sender-page.css deleted file mode 100644 index 9195af48..00000000 --- a/EnvelopeGenerator.ReceiverUI/wwwroot/css/sender-page.css +++ /dev/null @@ -1,297 +0,0 @@ -.sender-dashboard-layout { - display: flex; - flex-direction: column; - height: 100vh; - overflow: hidden; - background: linear-gradient(135deg, #1e3c72 0%, #2a5298 50%, #7e22ce 100%); -} - -.sender-action-bar { - background: rgba(255, 255, 255, 0.95); - backdrop-filter: blur(20px); - border-bottom: 3px solid rgba(126, 34, 206, 0.3); - padding: 1rem 2rem; - flex-shrink: 0; - box-shadow: 0 4px 20px rgba(0, 0, 0, 0.1); -} - -.sender-action-bar__inner { - max-width: 1600px; - margin: 0 auto; - display: flex; - align-items: center; - justify-content: space-between; - gap: 1.5rem; -} - -.sender-title-section { - display: flex; - align-items: center; - gap: 1rem; -} - -.sender-logo svg { - filter: drop-shadow(0 2px 4px rgba(126, 34, 206, 0.3)); - color: #7e22ce; -} - -.sender-title { - font-size: 1.25rem; - font-weight: 700; - color: #1e293b; - letter-spacing: -0.025em; -} - -.sender-toolbar { - display: flex; - align-items: center; - gap: 0.75rem; - flex-wrap: wrap; -} - -.sender-btn { - display: flex; - align-items: center; - gap: 0.5rem; - padding: 0.625rem 1.125rem; - background: linear-gradient(135deg, rgba(126, 34, 206, 0.05) 0%, rgba(42, 82, 152, 0.05) 100%); - border: 1px solid rgba(126, 34, 206, 0.2); - border-radius: 8px; - font-size: 0.875rem; - font-weight: 600; - color: #1e293b; - cursor: pointer; - transition: all 0.2s ease; - white-space: nowrap; -} - - .sender-btn:hover:not(:disabled) { - background: linear-gradient(135deg, rgba(126, 34, 206, 0.1) 0%, rgba(42, 82, 152, 0.1) 100%); - border-color: rgba(126, 34, 206, 0.4); - transform: translateY(-1px); - box-shadow: 0 4px 12px rgba(126, 34, 206, 0.2); - } - - .sender-btn:disabled { - opacity: 0.4; - cursor: not-allowed; - background: rgba(0, 0, 0, 0.02); - border-color: rgba(0, 0, 0, 0.1); - } - -.sender-btn--primary { - background: linear-gradient(135deg, #7e22ce 0%, #2a5298 100%); - border-color: transparent; - color: white; -} - - .sender-btn--primary:hover:not(:disabled) { - background: linear-gradient(135deg, #6b1cb0 0%, #1e3a72 100%); - transform: translateY(-1px); - box-shadow: 0 4px 16px rgba(126, 34, 206, 0.3); - } - -.sender-btn--danger { - background: linear-gradient(135deg, rgba(239, 68, 68, 0.08) 0%, rgba(220, 38, 38, 0.08) 100%); - border-color: rgba(239, 68, 68, 0.3); - color: #dc2626; -} - - .sender-btn--danger:hover:not(:disabled) { - background: linear-gradient(135deg, #ef4444 0%, #dc2626 100%); - border-color: transparent; - color: white; - } - -.sender-btn--logout { - padding: 0.5rem; - min-width: 38px; -} - -.sender-content { - flex: 1; - min-height: 0; - padding: 1.5rem; - position: relative; - overflow: auto; -} - -.sender-grid-container { - background: rgba(255, 255, 255, 0.98); - backdrop-filter: blur(20px); - border-radius: 16px; - box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.25), 0 0 0 1px rgba(255, 255, 255, 0.1); - overflow: hidden; - position: relative; - max-width: 1600px; - margin: 0 auto; -} - - .sender-grid-container::before { - content: ''; - position: absolute; - top: 0; - left: 0; - right: 0; - height: 4px; - background: linear-gradient(90deg, #7e22ce 0%, #2a5298 100%); - z-index: 1; - border-radius: 16px 16px 0 0; - } - -.sender-tabs { - display: flex; - border-bottom: 2px solid rgba(126, 34, 206, 0.1); - padding: 0 2rem; - background: rgba(126, 34, 206, 0.02); -} - -.sender-tab { - padding: 1rem 1.5rem; - font-size: 0.875rem; - font-weight: 600; - color: #6b7280; - background: transparent; - border: none; - border-bottom: 3px solid transparent; - cursor: pointer; - transition: all 0.2s ease; - white-space: nowrap; -} - - .sender-tab:hover { - color: #7e22ce; - background: rgba(126, 34, 206, 0.05); - } - -.sender-tab--active { - color: #7e22ce; - border-bottom-color: #7e22ce; - background: white; -} - -.sender-grid-wrapper { - padding: 1.5rem 2rem 2rem; -} - -/* Hide DevExpress empty cells */ -.dxbl-grid-empty-cell { - display: none !important; -} - -.status-badge { - display: inline-flex; - align-items: center; - gap: 0.375rem; - padding: 0.25rem 0.625rem; - border-radius: 6px; - font-size: 0.75rem; - font-weight: 600; - white-space: nowrap; -} - -.status-badge--partly-signed, -.status-badge--completed { - background: rgba(129, 199, 132, 0.15); - color: #2e7d32; -} - -.status-badge--queued, -.status-badge--sent { - background: rgba(255, 183, 77, 0.15); - color: #e65100; -} - -.status-badge--deleted, -.status-badge--rejected, -.status-badge--withdrawn { - background: rgba(229, 115, 115, 0.15); - color: #c62828; -} - -.status-badge--created, -.status-badge--saved { - background: rgba(100, 181, 246, 0.15); - color: #1565c0; -} - -.status-dot { - width: 6px; - height: 6px; - border-radius: 50%; -} - -.status-dot--green { - background: #81c784; -} - -.status-dot--orange { - background: #ffb74d; -} - -.status-dot--red { - background: #e57373; -} - -.status-dot--blue { - background: #64b5f6; -} - -.receiver-badge { - display: inline-flex; - align-items: center; - gap: 0.25rem; - padding: 0.125rem 0.5rem; - background: #f3f4f6; - border-radius: 4px; - font-size: 0.75rem; - color: #374151; - white-space: nowrap; -} - -.receiver-badge--signed { - background: rgba(129, 199, 132, 0.15); - color: #2e7d32; -} - -.receiver-badge--unsigned { - background: rgba(229, 115, 115, 0.15); - color: #c62828; -} - -@@media (max-width: 768px) { - .sender-action-bar { - padding: 1rem 1.25rem; - } - - .sender-action-bar__inner { - flex-wrap: wrap; - } - - .sender-toolbar { - width: 100%; - justify-content: flex-start; - } - - .sender-title { - font-size: 1.125rem; - } - - .sender-content { - padding: 0.75rem; - } - - .sender-grid-wrapper { - padding: 1rem; - } - - .sender-tabs { - padding: 0 1rem; - overflow-x: auto; - } - - .sender-tab { - padding: 0.875rem 1rem; - font-size: 0.813rem; - } -} diff --git a/EnvelopeGenerator.ReceiverUI/wwwroot/docs/Document.pdf b/EnvelopeGenerator.ReceiverUI/wwwroot/docs/Document.pdf deleted file mode 100644 index e36adb6c..00000000 Binary files a/EnvelopeGenerator.ReceiverUI/wwwroot/docs/Document.pdf and /dev/null differ diff --git a/EnvelopeGenerator.ReceiverUI/wwwroot/docs/privacy-policy.de-DE.html b/EnvelopeGenerator.ReceiverUI/wwwroot/docs/privacy-policy.de-DE.html deleted file mode 100644 index 6b1bc8d4..00000000 --- a/EnvelopeGenerator.ReceiverUI/wwwroot/docs/privacy-policy.de-DE.html +++ /dev/null @@ -1,167 +0,0 @@ - - - - - - - Datenschutzinformation für das Fernsignatursystem: signFLOW - - - - -
-

Datenschutzinformation für das Fernsignatursystem signFLOW

-

Stand: 18.11.2025

-
- -
-

1. Allgemeine Informationen

-

In der heutigen schnelllebigen und zunehmend digitalen Welt, sind personenbezogene Daten eine wichtige - Ressource. Ihre Daten sind wertvoll und müssen daher mit der durch diverse Gesetze und Vorschriften (DSGVO, - TDDDG, ...) gebotenen Sorgfalt behandelt werden.

-

Als Anbieter von lokalen Lösungen (OnPremise) setzt der Hersteller des signFLOWs, die Digital Data GmbH, - einen klaren Schwerpunkt auf Datenschutz und Datensicherheit. Für Sie bedeutet dies, dass nur die nötigsten - Daten erhoben und gespeichert werden (Datensparsamkeit bzw. Datenminimierung). Außerdem kommen bei der - Verarbeitung aktuelle und als sicher geltende Technologien zum Einsatz.

-

Kontaktdaten des Herstellers:

-
- Digital Data GmbH
- Ludwig-Rinn-Straße 16
- 35452 Heuchelheim
- https://digitaldata.works
- info-flow@digitaldata.works
- Telefon: 0049 641 202360
-
-

Kontakt zum Datenschutzbeauftragten: privacy-flow@digitaldata.works

-
- -
-

2. Verantwortliche Stelle der Datenverarbeitung

-

Ihre Daten werden vertrauensvoll verarbeitet von:

-
- Digital Data GmbH
- Ludwig-Rinn-Straße 16
- 35452 Heuchelheim
- https://digitaldata.works
- info-flow@digitaldata.works
- Telefon: 0049 641 202360
-
-

Kontakt zu unserer Datenschutzbeauftragten: privacy-flow@digitaldata.works

-
- -
-

3. Datenerhebung

-

3.1 Die folgenden Kategorien personenbezogener Daten werden verarbeitet

-
    -
  • Namen: Benutzername, Vor- und Zunamen sowie Ihre digitale Unterschrift
  • -
  • Kontaktdaten: Telefonnummer, Mobilfunknummer und E-Mail-Adresse
  • -
  • Technische Daten: IP-Adresse, Zeitpunkt des Zugriffs oder Zugriffsversuchs
  • -
- -

3.2 Ursprung der personenbezogenen Daten

-

Sie haben die unter 3.1 stehenden Daten vorab an Ihren Geschäftspartner (die verantwortliche Stelle) - übermittelt. Diese Übermittlung kann mündlich per Telefon, im persönlichen Kontakt, per E-Mail oder per - Kontaktformular geschehen sein.

-

Ihre digitale Signatur übermitteln Sie eigenständig, bei der Unterzeichnung eines Dokuments.

- -

3.3 Aufbewahrungsfristen / Speicherungsdauer

-
    -
  • Die automatische E-Mail Korrespondenz wird für 6 Jahre aufbewahrt.
  • -
  • Unterzeichnete Verträge werden für die Dauer ihrer Laufzeit + 10 Jahre aufbewahrt.
  • -
  • Der technische Vorgang wird in der signFLOW Softwarelösung je nach Dokumentart bzw. Vertragsart - unbegrenzt aufbewahrt.
  • -
-

Ihre personenbezogenen Daten werden aber grundsätzlich anonymisiert, wenn:

-
    -
  • Der Vertrag ausgelaufen ist und die gesetzliche Aufbewahrungszeit vorbei ist.
  • -
  • Der Vertrag von Ihnen abgelehnt wurde bzw. nie unterschrieben wurde.
  • -
-

Die gesetzlichen Grundlagen dieser Aufbewahrungsfristen bieten unter anderen:

-
    -
  • Handelsgesetzbuch (HGB)
  • -
  • Abgabenordnung (AO)
  • -
  • Grundsätze zur ordnungsgemäßen Führung und Aufbewahrung von Büchern, Aufzeichnungen und Unterlagen in - elektronischer Form sowie zum Datenzugriff (GoBD)
  • -
-

- Abhängig von der spezifischen Dokumentart, kann die Aufbewahrungsfrist variieren. Außerdem können sich - Zeiten - verlängern, falls Unregelmäßigkeiten auftreten. Z.B.: eine rechtliche Auseinandersetzung droht oder aktuell - läuft. -

- -

3.4 Verarbeitungszweck

-

Die unter 3.1 definierten personenbezogenen Daten werden verarbeitet um:

-
    -
  • Den technisch notwendigen Prozess abzubilden bzw. anbieten zu können.
  • -
  • Damit Sie als Endbenutzer in der Lage sind, ein zu unterzeichnendes Dokument, digital zu unterschreiben, - ist die Feststellung der Identität des Antragstellers, Antragsprüfung und -abwicklung, Abrechnung sowie - die Wahrung der Dokumentationspflichten notwendig.
  • -
-

In Einzelfällen werden Daten zur Fehlerbehebung insbesondere bei Supportanfragen von der IT-Abteilung - gesondert behandelt oder ggf. an den Hersteller weitergegeben.

-

Im Zuge der Maßnahmen zur Sicherstellung der Informationssicherheit, insbesondere zur Identifizierung und - Abwehr von Angriffen, sowie zur Durchführung interner und externer Audits, der Exportkontrolle und der - Prüfung von Sanktionslisten, erfolgt ebenfalls eine Datenverarbeitung. Bei Anfragen gemäß §8 Abs. 2 VDG - werden die entsprechenden Informationen an die zuständigen Stellen übermittelt.

- -

3.5 Rechtmäßigkeit der Verarbeitung

-

Ihre Daten werden auf Grundlage einer sich anbahnenden oder bereits vorhandenen Geschäftsbeziehung erhoben. -

-

Die rechtliche Grundlage für die Übermittlung an zuständige Stellen bildet §8 Abs. 2 VDG. Anfragen von - Betroffenen werden gemäß den Artikeln 12 bis 23 der DSGVO sowie den Paragraphen 32 bis 37 des BDSG - bearbeitet.

- -

3.6 Berechtigte Interessen

-

Ein berechtigtes Interesse der verantwortlichen Stelle gemäß Art. 6 Abs. 1 lit. f DSGVO besteht in den - folgenden Fällen:

-

Es werden Maßnahmen zur Informationssicherheit ergriffen, die sowohl präventive technische als auch - organisatorische Maßnahmen sowie die Behandlung von Vorfällen umfassen. Ziel ist es, potenzielle Schäden für - das Unternehmen, die von der Datenverarbeitung betroffenen Personen und die Nutzer der Vertrauensdienste zu - bewerten und zu vermeiden.

- -

3.7 Erforderlichkeit der Daten

-

Die erhobenen Daten stellen das Minimum der nötigen Daten zwecks digitaler Unterschrift dar. Ohne die unter - 3.1 genannten Daten, kann der Dienst nicht betrieben werden.

-

Besonders wichtig ist die Angabe einer Mobilfunknummer oder einer deutschen Festnetznummer, da diese für die - Authentifizierung und die Signaturauslösung als zweiter Faktor verwendet wird. Ohne diesen - Sicherheitsmechanismus kann der Dienst leider nicht bereitgestellt werden.

- -

3.8 Weitergabe von Daten

-

Eine systemische Übermittlung von Daten findet nicht statt.

-

Daten werden nur in Ausnahmefällen, zwecks Supportleistungen, an den Hersteller weitergegeben. Mit der - Hersteller besteht ein gültiger Auftragsdatenverarbeitungsvertrag (AVV), welcher die Sicherheit und - Integrität des Umgangs mit Ihren Daten gewährleistet.

-
- -
-

4. Verwendung von Cookies

-

- Beim Besuch bestimmter Seiten kommen temporäre Cookies zum Einsatz, die für die technische Bereitstellung - der Dienste notwendig sind. Diese sogenannten Session-Cookies enthalten keine personenbezogenen Daten und - werden nach Beendigung der Sitzung automatisch gelöscht. Methoden wie Java-Applets oder Active-X-Controls, - die das Nutzerverhalten nachvollziehbar machen könnten, werden nicht verwendet. -

-
- -
-

5. Betroffenenrechte

-

- Wenn Sie Fragen zu Ihren Daten haben oder eine Berichtigung, Löschung oder Einschränkung der Verarbeitung - wünschen, senden Sie bitte Ihre Anfrage per Post oder E-Mail an die oben angegebene Adresse. Dies gilt auch, - wenn Sie gemäß Art. 21 DSGVO Widerspruch gegen die Verarbeitung einlegen möchten oder eine Anfrage zur - Datenübertragbarkeit haben. -

-

- Bei Fragen oder Beschwerden zu einem Verfahren können Sie sich ebenfalls über die genannten - Kontaktmöglichkeiten an uns wenden. Sollten Sie darüber hinaus einen Grund zur Beschwerde haben, haben Sie - die Möglichkeit, sich an unsere Aufsichtsbehörde zu wenden. Welche Aufsichtsbehörde für Sie zuständig ist, - erfahren Sie hier: - Laender-node.html -

-
- - - \ No newline at end of file diff --git a/EnvelopeGenerator.ReceiverUI/wwwroot/docs/privacy-policy.en-US.html b/EnvelopeGenerator.ReceiverUI/wwwroot/docs/privacy-policy.en-US.html deleted file mode 100644 index 8117bfe5..00000000 --- a/EnvelopeGenerator.ReceiverUI/wwwroot/docs/privacy-policy.en-US.html +++ /dev/null @@ -1,158 +0,0 @@ - - - - - - - Data Protection Information for the Remote Signature System signFLOW - - - - -
-

Data Protection Information for the Remote Signature System: signFLOW

-

As of: 18.11.2025

-
-
-

1. General Information

-

In today's fast-paced and increasingly digital world, personal data is an important resource. Your data is - valuable and must therefore be handled with the care required by various laws and regulations (GDPR, TDDDG, - ...).

-

As a provider of local solutions (OnPremise), the manufacturer of signFLOW, Digital Data GmbH, places a clear - focus on data protection and data security. For you, this means that only the necessary data is collected - and stored (data minimization). Furthermore, current and secure technologies are used in processing.

-

Contact details of the manufacturer:

-
- Digital Data GmbH
- Ludwig-Rinn-Straße 16
- 35452 Heuchelheim
- https://digitaldata.works
- info-flow@digitaldata.works
- Phone: 0049 641 202360
-
-

Contact the Data Protection Officer: privacy-flow@digitaldata.works

-
- -
-

2. Responsible Entity for Data Processing

-

Your data is processed with confidence by:

-
- Digital Data GmbH
- Ludwig-Rinn-Straße 16
- 35452 Heuchelheim
- https://digitaldata.works
- info-flow@digitaldata.works
- Phone: 0049 641 202360
-
-

Contact our Data Protection Officer: privacy-flow@digitaldata.works

-
- -
-

3. Data Collection

-

3.1 The following categories of personal data are processed

-
    -
  • Names: Username, first and last names as well as your digital signature
  • -
  • Contact details: Phone number, mobile phone number, and email address
  • -
  • Technical data: IP address, time of access, or access attempts
  • -
- -

3.2 Source of the personal data

-

You have previously provided the data mentioned under 3.1 to your business partner (the responsible entity). - This transmission may have occurred verbally over the phone, in personal contact, via email, or via a - contact form.

-

You transmit your digital signature independently when signing a document.

- -

3.3 Retention periods / Storage duration

-
    -
  • Automatic email correspondence is stored for 6 years.
  • -
  • Signed contracts are retained for the duration of their term + 10 years.
  • -
  • The technical process is stored in the signFLOW software solution indefinitely, depending on the - document or contract type.
  • -
-

Your personal data will generally be anonymized when:

-
    -
  • The contract has expired, and the statutory retention period is over.
  • -
  • The contract was rejected by you or never signed.
  • -
-

The legal basis for these retention periods includes:

-
    -
  • Commercial Code (HGB)
  • -
  • Tax Code (AO)
  • -
  • Principles for the Proper Keeping and Retention of Books, Records, and Documents in Electronic Form and - for Data Access (GoBD)
  • -
-

- Depending on the specific type of document, the retention period may vary. Additionally, the periods may be - extended in case of irregularities, such as a pending or ongoing legal dispute. -

- -

3.4 Purpose of processing

-

The personal data defined under 3.1 is processed to:

-
    -
  • Support or provide the technically necessary process.
  • -
  • Enable you, as the end user, to sign a document digitally. This requires the identification of the - applicant, application verification and processing, billing, and compliance with documentation - requirements.
  • -
-

In individual cases, data is processed separately by the IT department, particularly in response to support - requests, or possibly forwarded to the manufacturer for further processing.

-

Data processing also occurs to ensure information security, especially for the identification and prevention - of attacks, and for conducting internal and external audits, export controls, and sanctions list checks. - Information may also be transmitted to the relevant authorities in accordance with Section 8 (2) VDG.

- -

3.5 Legality of processing

-

Your data is collected based on an impending or already existing business relationship.

-

The legal basis for the transmission to competent authorities is Section 8 (2) VDG. Requests from data - subjects are processed in accordance with Articles 12 to 23 of the GDPR and Sections 32 to 37 of the Federal - Data Protection Act (BDSG).

- -

3.6 Legitimate interests

-

A legitimate interest of the responsible entity in accordance with Article 6 (1) (f) GDPR exists in the - following cases:

-

Measures are taken for information security, which include both preventive technical and organizational - measures as well as incident handling. The aim is to assess and avoid potential harm to the company, the - individuals affected by data processing, and the users of trust services.

- -

3.7 Necessity of data

-

The collected data represents the minimum necessary for the digital signature. Without the data mentioned - under 3.1, the service cannot be operated.

-

It is particularly important to provide a mobile number or a German landline number, as this is used for - authentication and signature triggering as a second factor. Without this security mechanism, the service - cannot be provided.

- -

3.8 Data transfer

-

Systematic data transmission does not take place.

-

Data is only forwarded to the manufacturer for support services in exceptional cases. A valid data processing - agreement (DPA) exists with the manufacturer, which ensures the security and integrity of the handling of - your data.

-
- -
-

4. Use of Cookies

-

- When visiting certain pages, temporary cookies are used, which are necessary for the technical provision of - the services. These so-called session cookies do not contain any personal data and are automatically deleted - after the session ends. Methods such as Java applets or Active-X controls that could track user behavior are - not used. -

-
- -
-

5. Rights of Affected Persons

-

- If you have questions about your data or wish to request correction, deletion, or restriction of processing, - please send your request by mail or email to the address provided above. This also applies if you wish to - object to the processing in accordance with Article 21 GDPR or request data portability. -

-

- If you have questions or complaints about a procedure, you can also contact us using the contact details - provided. If you have further grounds for complaint, you can contact our supervisory authority. You can find - out which supervisory authority is responsible for you here: - Laender-node.html -

-
- - - \ No newline at end of file diff --git a/EnvelopeGenerator.ReceiverUI/wwwroot/docs/privacy-policy.fr-FR.html b/EnvelopeGenerator.ReceiverUI/wwwroot/docs/privacy-policy.fr-FR.html deleted file mode 100644 index 9299b72d..00000000 --- a/EnvelopeGenerator.ReceiverUI/wwwroot/docs/privacy-policy.fr-FR.html +++ /dev/null @@ -1,126 +0,0 @@ - - - - - - - Informations sur la protection des données pour le système de signature à distance signFLOW - - - - -
-

Informations sur la protection des données pour le système de signature à distance : signFLOW

-

À jour au : 18.11.2025

-
- -
-

1. Informations générales

-

Dans le monde actuel, rapide et de plus en plus numérique, les données personnelles sont une ressource précieuse. Vos données sont importantes et doivent donc être traitées avec le soin requis par les différentes lois et réglementations (RGPD, TDDDG, ...).

-

En tant que fournisseur de solutions locales (OnPremise), le fabricant de signFLOW, Digital Data GmbH, accorde une attention particulière à la protection et à la sécurité des données. Pour vous, cela signifie que seules les données nécessaires sont collectées et stockées (minimisation des données). De plus, des technologies actuelles et sécurisées sont utilisées lors du traitement.

-

Coordonnées du fabricant :

-
- Digital Data GmbH
- Ludwig-Rinn-Straße 16
- 35452 Heuchelheim
- https://digitaldata.works
- info-flow@digitaldata.works
- Téléphone : 0049 641 202360
-
-

Contactez le délégué à la protection des données : privacy-flow@digitaldata.works

-
- -
-

2. Responsable du traitement des données

-

Vos données sont traitées en toute confiance par :

-
- Digital Data GmbH
- Ludwig-Rinn-Straße 16
- 35452 Heuchelheim
- https://digitaldata.works
- info-flow@digitaldata.works
- Téléphone : 0049 641 202360
-
-

Contactez notre délégué à la protection des données : privacy-flow@digitaldata.works

-
- -
-

3. Collecte des données

-

3.1 Catégories de données personnelles traitées

-
    -
  • Noms : nom d’utilisateur, prénom et nom ainsi que votre signature numérique
  • -
  • Coordonnées : numéro de téléphone, numéro de mobile et adresse e-mail
  • -
  • Données techniques : adresse IP, heure d’accès ou tentatives d’accès
  • -
- -

3.2 Source des données personnelles

-

Vous avez précédemment fourni les données mentionnées en 3.1 à votre partenaire commercial (le responsable du traitement). Cette transmission a pu se faire verbalement par téléphone, lors d’un contact personnel, par e-mail ou via un formulaire de contact.

-

Vous transmettez votre signature numérique de manière autonome lors de la signature d’un document.

- -

3.3 Durée de conservation / stockage

-
    -
  • La correspondance par e-mail automatique est conservée pendant 6 ans.
  • -
  • Les contrats signés sont conservés pendant leur durée + 10 ans.
  • -
  • Le processus technique est stocké dans la solution logicielle signFLOW indéfiniment, selon le type de document ou de contrat.
  • -
-

Vos données personnelles seront généralement anonymisées lorsque :

-
    -
  • Le contrat a expiré et la période légale de conservation est terminée.
  • -
  • Le contrat a été refusé par vous ou jamais signé.
  • -
-

La base légale de ces périodes de conservation comprend :

-
    -
  • Code de commerce (HGB)
  • -
  • Code fiscal (AO)
  • -
  • Principes de tenue correcte et de conservation des livres, registres et documents sous forme électronique et d’accès aux données (GoBD)
  • -
-

- Selon le type spécifique de document, la période de conservation peut varier. De plus, ces périodes peuvent être prolongées en cas d’irrégularités, telles qu’un litige en cours ou imminent. -

- -

3.4 Finalité du traitement

-

Les données personnelles définies en 3.1 sont traitées pour :

-
    -
  • Supporter ou fournir le processus techniquement nécessaire.
  • -
  • Permettre à l’utilisateur final de signer un document numériquement. Cela nécessite l’identification du demandeur, la vérification et le traitement de la demande, la facturation et le respect des obligations documentaires.
  • -
-

Dans certains cas, les données sont traitées séparément par le département informatique, notamment en réponse à des demandes de support, ou éventuellement transmises au fabricant pour un traitement supplémentaire.

-

Le traitement des données intervient également pour garantir la sécurité de l’information, notamment pour identifier et prévenir les attaques, et pour effectuer des audits internes et externes, le contrôle des exportations et les vérifications des listes de sanctions. Les informations peuvent également être transmises aux autorités compétentes conformément à l’article 8 (2) VDG.

- -

3.5 Licéité du traitement

-

Vos données sont collectées sur la base d’une relation commerciale existante ou imminente.

-

La base légale pour la transmission aux autorités compétentes est l’article 8 (2) VDG. Les demandes des personnes concernées sont traitées conformément aux articles 12 à 23 du RGPD et aux articles 32 à 37 de la loi fédérale sur la protection des données (BDSG).

- -

3.6 Intérêts légitimes

-

Un intérêt légitime du responsable du traitement conformément à l’article 6 (1) (f) RGPD existe dans les cas suivants :

-

Des mesures sont prises pour la sécurité de l’information, incluant à la fois des mesures techniques et organisationnelles préventives ainsi que la gestion des incidents. L’objectif est d’évaluer et d’éviter les dommages potentiels pour l’entreprise, les personnes concernées par le traitement des données et les utilisateurs des services de confiance.

- -

3.7 Nécessité des données

-

Les données collectées représentent le minimum nécessaire pour la signature numérique. Sans les données mentionnées en 3.1, le service ne peut pas être opéré.

-

Il est particulièrement important de fournir un numéro de mobile ou un numéro fixe allemand, car cela est utilisé pour l’authentification et le déclenchement de la signature comme second facteur. Sans ce mécanisme de sécurité, le service ne peut être fourni.

- -

3.8 Transfert de données

-

Aucun transfert systématique de données n’a lieu.

-

Les données ne sont transmises au fabricant pour le support que dans des cas exceptionnels. Un accord de traitement des données (DPA) valide existe avec le fabricant, garantissant la sécurité et l’intégrité de la gestion de vos données.

-
- -
-

4. Utilisation des cookies

-

- Lors de la visite de certaines pages, des cookies temporaires sont utilisés, nécessaires à la fourniture technique des services. Ces cookies de session ne contiennent aucune donnée personnelle et sont automatiquement supprimés à la fin de la session. Aucune méthode telle que les applets Java ou les contrôles Active-X, pouvant suivre le comportement de l’utilisateur, n’est utilisée. -

-
- -
-

5. Droits des personnes concernées

-

- Si vous avez des questions concernant vos données ou souhaitez demander une correction, suppression ou limitation du traitement, veuillez envoyer votre demande par courrier ou e-mail à l’adresse indiquée ci-dessus. Cela s’applique également si vous souhaitez vous opposer au traitement conformément à l’article 21 RGPD ou demander la portabilité des données. -

-

- Si vous avez des questions ou des plaintes concernant une procédure, vous pouvez également nous contacter via les coordonnées fournies. Si vous avez d’autres motifs de plainte, vous pouvez contacter notre autorité de contrôle. Vous pouvez vérifier quelle autorité de contrôle est compétente pour vous ici : - Laender-node.html -

-
- - - \ No newline at end of file diff --git a/EnvelopeGenerator.ReceiverUI/wwwroot/fake-data/annotations.json b/EnvelopeGenerator.ReceiverUI/wwwroot/fake-data/annotations.json deleted file mode 100644 index 333c83b2..00000000 --- a/EnvelopeGenerator.ReceiverUI/wwwroot/fake-data/annotations.json +++ /dev/null @@ -1,20 +0,0 @@ -[ - { - "id": 1, - "page": 1, - "x": 390.0, - "y": 380.0 - }, - { - "id": 2, - "page": 2, - "x": 390.0, - "y": 680.0 - }, - { - "id": 3, - "page": 3, - "x": 390.0, - "y": 980.0 - } -] diff --git a/EnvelopeGenerator.ReceiverUI/wwwroot/fonts/opensans.ttf b/EnvelopeGenerator.ReceiverUI/wwwroot/fonts/opensans.ttf deleted file mode 100644 index ac587b48..00000000 Binary files a/EnvelopeGenerator.ReceiverUI/wwwroot/fonts/opensans.ttf and /dev/null differ diff --git a/EnvelopeGenerator.ReceiverUI/wwwroot/images/banner.png b/EnvelopeGenerator.ReceiverUI/wwwroot/images/banner.png deleted file mode 100644 index 2da0ee1d..00000000 Binary files a/EnvelopeGenerator.ReceiverUI/wwwroot/images/banner.png and /dev/null differ diff --git a/EnvelopeGenerator.ReceiverUI/wwwroot/images/sad.svg b/EnvelopeGenerator.ReceiverUI/wwwroot/images/sad.svg deleted file mode 100644 index aab2fdda..00000000 --- a/EnvelopeGenerator.ReceiverUI/wwwroot/images/sad.svg +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - diff --git a/EnvelopeGenerator.ReceiverUI/wwwroot/index.html b/EnvelopeGenerator.ReceiverUI/wwwroot/index.html deleted file mode 100644 index ec48b8fa..00000000 --- a/EnvelopeGenerator.ReceiverUI/wwwroot/index.html +++ /dev/null @@ -1,74 +0,0 @@ - - - - - - - - - - EnvelopeGenerator.ReceiverUI - - - - - - - - - -
- -
-
-
EnvelopeGenerator.ReceiverUI
-
Loading...
-
-
- -
- An unhandled error has occurred. - Reload - X -
- - - - - - - \ No newline at end of file diff --git a/EnvelopeGenerator.ReceiverUI/wwwroot/js/pdf-viewer.js b/EnvelopeGenerator.ReceiverUI/wwwroot/js/pdf-viewer.js deleted file mode 100644 index 20998519..00000000 --- a/EnvelopeGenerator.ReceiverUI/wwwroot/js/pdf-viewer.js +++ /dev/null @@ -1,1138 +0,0 @@ -// PDF.js Viewer for Blazor WASM -window.pdfViewer = { - pdfDoc: null, - pageNum: 1, - pageRendering: false, - pageNumPending: null, - scale: 1.5, - canvas: null, - ctx: null, - totalPages: 0, - currentRenderTask: null, - dotNetReference: null, - wheelEventAttached: false, - _renderLock: false, // Lock to prevent concurrent renders - - // Quality options (configurable from appsettings.json) - qualityOptions: { - thumbnailBaseScale: 0.75, - thumbnailEnableHiDPI: true, - thumbnailMaxDPR: 2.0, - mainCanvasEnableHiDPI: true, - mainCanvasMaxDPR: 2.0, - enableSmoothZoom: true, - zoomTransitionDuration: 150, - renderingOpacity: 0.85, - zoomStepPercentage: 5 - }, - - setQualityOptions(options) { - this.qualityOptions = { ...this.qualityOptions, ...options }; - - // Apply CSS variables for dynamic styling - document.documentElement.style.setProperty('--zoom-transition-duration', `${options.zoomTransitionDuration}ms`); - document.documentElement.style.setProperty('--rendering-opacity', options.renderingOpacity); - }, - - async initialize(canvasId, pdfDataUrl, dotNetRef) { - try { - this.dotNetReference = dotNetRef; - - if (typeof window.pdfjsLib === 'undefined') { - await this.waitForPdfJs(); - } - - const pdfjsLib = window.pdfjsLib; - pdfjsLib.GlobalWorkerOptions.workerSrc = 'https://cdnjs.cloudflare.com/ajax/libs/pdf.js/3.11.174/pdf.worker.min.js'; - - this.canvas = document.getElementById(canvasId); - if (!this.canvas) { - return false; - } - - this.ctx = this.canvas.getContext('2d'); - this.attachWheelEvent(); - - const uint8Array = this.base64ToUint8Array(pdfDataUrl); - const loadingTask = pdfjsLib.getDocument({ data: uint8Array }); - this.pdfDoc = await loadingTask.promise; - this.totalPages = this.pdfDoc.numPages; - - await this.renderPage(this.pageNum); - return true; - } catch (error) { - console.error('PDF viewer initialization failed:', error); - return false; - } - }, - - attachWheelEvent() { - if (this.wheelEventAttached) return; - - // Attach to the entire document body for global zoom control - document.body.addEventListener('wheel', (e) => { - // Check if Ctrl key is pressed (zoom gesture) - if (e.ctrlKey || e.metaKey) { - e.preventDefault(); - - const step = this.qualityOptions.zoomStepPercentage / 100; // Convert to decimal - - if (e.deltaY < 0) { - // Scroll up = Zoom In - this.scale = Math.min(this.scale + step, 3.0); - this.queueRenderPage(this.pageNum); - if (this.dotNetReference) { - this.dotNetReference.invokeMethodAsync('OnZoomChanged', this.scale); - } - } else { - // Scroll down = Zoom Out - this.scale = Math.max(this.scale - step, 0.5); - this.queueRenderPage(this.pageNum); - if (this.dotNetReference) { - this.dotNetReference.invokeMethodAsync('OnZoomChanged', this.scale); - } - } - } - }, { passive: false }); - - this.wheelEventAttached = true; - }, - - async waitForPdfJs() { - for (let i = 0; i < 50; i++) { - if (typeof window.pdfjsLib !== 'undefined') { - return; - } - await new Promise(resolve => setTimeout(resolve, 100)); - } - throw new Error('PDF.js failed to load after 5 seconds'); - }, - - base64ToUint8Array(base64) { - // Remove data URL prefix if present - const base64String = base64.includes(',') ? base64.split(',')[1] : base64; - const raw = atob(base64String); - const uint8Array = new Uint8Array(raw.length); - for (let i = 0; i < raw.length; i++) { - uint8Array[i] = raw.charCodeAt(i); - } - return uint8Array; - }, - - async renderPage(num) { - // CRITICAL: Single render at a time - use a lock - if (this._renderLock) { - // Another render is in progress, queue it - this.pageNumPending = num; - return; - } - - this._renderLock = true; - - // Cancel any existing render task - if (this.currentRenderTask) { - try { - this.currentRenderTask.cancel(); - await new Promise(resolve => setTimeout(resolve, 100)); - } catch (e) { - // Ignore cancellation errors - } - this.currentRenderTask = null; - } - - this.pageRendering = true; - - // Add rendering class for smooth transition (if enabled) - if (this.qualityOptions.enableSmoothZoom) { - this.canvas.classList.add('rendering'); - } - - try { - // Get scroll container - const container = this.canvas.closest('.pdf-canvas-wrapper'); - - // Store scroll position and viewport center BEFORE rendering - let scrollLeft = 0, scrollTop = 0; - let centerX = 0, centerY = 0; - let oldWidth = this.canvas.width; - let oldHeight = this.canvas.height; - - if (container) { - scrollLeft = container.scrollLeft; - scrollTop = container.scrollTop; - centerX = scrollLeft + container.clientWidth / 2; - centerY = scrollTop + container.clientHeight / 2; - } - - const page = await this.pdfDoc.getPage(num); - - // HiDPI support for main canvas (configurable) - const dpr = this.qualityOptions.mainCanvasEnableHiDPI - ? Math.min(window.devicePixelRatio || 1, this.qualityOptions.mainCanvasMaxDPR) - : 1.0; - const viewport = page.getViewport({ scale: this.scale * dpr }); - - // Set internal canvas resolution (high quality) - this.canvas.width = viewport.width; - this.canvas.height = viewport.height; - - // Set CSS display size (visual size) - this.canvas.style.width = `${viewport.width / dpr}px`; - this.canvas.style.height = `${viewport.height / dpr}px`; - - const renderContext = { - canvasContext: this.ctx, - viewport: viewport - }; - - // Enable high-quality rendering - this.ctx.imageSmoothingEnabled = true; - this.ctx.imageSmoothingQuality = 'high'; - - // Start new render task - this.currentRenderTask = page.render(renderContext); - await this.currentRenderTask.promise; - - // Render text layer for copy-paste functionality - await this.renderTextLayer(page, viewport, dpr); - - // Restore viewport center position AFTER rendering - if (container && oldWidth > 0 && oldHeight > 0) { - const scaleX = this.canvas.width / oldWidth; - const scaleY = this.canvas.height / oldHeight; - - const newCenterX = centerX * scaleX; - const newCenterY = centerY * scaleY; - - container.scrollLeft = newCenterX - container.clientWidth / 2; - container.scrollTop = newCenterY - container.clientHeight / 2; - } - - // Remove rendering class after completion - if (this.qualityOptions.enableSmoothZoom) { - this.canvas.classList.remove('rendering'); - } - - this.currentRenderTask = null; - this.pageRendering = false; - - } catch (error) { - if (error.name !== 'RenderingCancelledException') { - console.error('Render error:', error); - } - this.canvas.classList.remove('rendering'); - this.currentRenderTask = null; - this.pageRendering = false; - } finally { - // Always release lock - this._renderLock = false; - - // Process pending render - if (this.pageNumPending !== null) { - const pendingPage = this.pageNumPending; - this.pageNumPending = null; - this.renderPage(pendingPage); - } - } - }, - - async renderTextLayer(page, viewport, dpr) { - try { - const textLayerDiv = document.getElementById('pdf-text-layer'); - if (!textLayerDiv) { - return; - } - - // Clear previous text layer - textLayerDiv.innerHTML = ''; - - // Set text layer dimensions to match canvas display size - textLayerDiv.style.width = `${viewport.width / dpr}px`; - textLayerDiv.style.height = `${viewport.height / dpr}px`; - - // Set --scale-factor CSS variable required by PDF.js - textLayerDiv.style.setProperty('--scale-factor', this.scale); - - // Get text content from PDF - const textContent = await page.getTextContent(); - - // Create viewport for text layer (without DPR scaling for positioning) - const textViewport = page.getViewport({ scale: this.scale }); - - // Render text layer using PDF.js built-in function - const pdfjsLib = window.pdfjsLib; - await pdfjsLib.renderTextLayer({ - textContentSource: textContent, - container: textLayerDiv, - viewport: textViewport, - textDivs: [] - }).promise; - - } catch (error) { - // Silently handle text layer errors (non-critical feature) - } - }, - - queueRenderPage(num) { - // Always use pending mechanism to avoid race conditions - if (this.pageRendering || this.currentRenderTask) { - this.pageNumPending = num; - } else { - this.renderPage(num); - } - }, - - nextPage() { - if (this.pageNum >= this.totalPages) { - return false; - } - this.pageNum++; - this.queueRenderPage(this.pageNum); - return true; - }, - - previousPage() { - if (this.pageNum <= 1) { - return false; - } - this.pageNum--; - this.queueRenderPage(this.pageNum); - return true; - }, - - goToPage(num) { - if (num < 1 || num > this.totalPages) { - return false; - } - this.pageNum = num; - this.queueRenderPage(this.pageNum); - return true; - }, - - async zoomIn() { - const step = this.qualityOptions.zoomStepPercentage / 100; - this.scale = Math.min(this.scale + step, 3.0); - await this.renderPage(this.pageNum); - }, - - async zoomOut() { - const step = this.qualityOptions.zoomStepPercentage / 100; - this.scale = Math.max(this.scale - step, 0.5); - await this.renderPage(this.pageNum); - }, - - setScale(scale) { - if (scale >= 0.5 && scale <= 3.0) { - this.scale = scale; - this.queueRenderPage(this.pageNum); - } - }, - - async fitToWidth() { - const container = this.canvas.closest('.pdf-frame'); - if (!container || !this.pdfDoc) return; - - try { - const page = await this.pdfDoc.getPage(this.pageNum); - const viewport = page.getViewport({ scale: 1.0 }); - - const containerWidth = container.clientWidth - 80; - const optimalScale = containerWidth / viewport.width; - - this.scale = Math.min(Math.max(optimalScale, 0.5), 3.0); - this.queueRenderPage(this.pageNum); - } catch (error) { - console.error('Error fitting to width:', error); - } - }, - - async renderThumbnail(pageNum, canvasId) { - if (!this.pdfDoc) { - return; - } - - try { - // Wait for canvas to be in DOM - let canvas = document.getElementById(canvasId); - let retries = 0; - while (!canvas && retries < 10) { - await new Promise(resolve => setTimeout(resolve, 100)); - canvas = document.getElementById(canvasId); - retries++; - } - - if (!canvas) { - return; - } - - // Check if canvas is already being used by a render task - if (canvas._renderTask) { - try { - await canvas._renderTask; - } catch (e) { - // Ignore cancellation errors - } - } - - const page = await this.pdfDoc.getPage(pageNum); - - // High-quality rendering with HiDPI support (configurable) - const dpr = this.qualityOptions.thumbnailEnableHiDPI - ? Math.min(window.devicePixelRatio || 1, this.qualityOptions.thumbnailMaxDPR) - : 1.0; - const baseScale = this.qualityOptions.thumbnailBaseScale; - const scale = baseScale * dpr; - - const viewport = page.getViewport({ scale: scale }); - - // Set actual canvas pixel dimensions (internal resolution) - canvas.width = viewport.width; - canvas.height = viewport.height; - - // Remove any inline styles - let CSS handle display size - canvas.style.width = ''; - canvas.style.height = ''; - - const ctx = canvas.getContext('2d'); - - // Enable maximum quality rendering - ctx.imageSmoothingEnabled = true; - ctx.imageSmoothingQuality = 'high'; - - const renderContext = { - canvasContext: ctx, - viewport: viewport - }; - - // Store render task on canvas to track active renders - const renderTask = page.render(renderContext); - canvas._renderTask = renderTask.promise; - - await renderTask.promise; - - // Clear the task when done - delete canvas._renderTask; - } catch (error) { - // Silently handle thumbnail errors (non-critical) - } - }, - - getCurrentPage() { - return this.pageNum; - }, - - getTotalPages() { - return this.totalPages; - }, - - getScale() { - return this.scale; - }, - - dispose() { - if (this.wheelEventAttached) { - this.wheelEventAttached = false; - this.dotNetReference = null; - } - this.detachResizeListeners(); - }, - - // Resizable splitter functionality - isResizing: false, - resizeMouseMoveHandler: null, - resizeMouseUpHandler: null, - - attachResizeListeners(dotNetRef) { - this.dotNetReference = dotNetRef; - - this.resizeMouseMoveHandler = (e) => { - if (this.isResizing && this.dotNetReference) { - this.dotNetReference.invokeMethodAsync('OnSplitterMouseMove', e.clientX); - } - }; - - this.resizeMouseUpHandler = () => { - if (this.isResizing && this.dotNetReference) { - this.isResizing = false; - this.dotNetReference.invokeMethodAsync('OnSplitterMouseUp'); - } - }; - - document.addEventListener('mousemove', this.resizeMouseMoveHandler); - document.addEventListener('mouseup', this.resizeMouseUpHandler); - }, - - detachResizeListeners() { - if (this.resizeMouseMoveHandler) { - document.removeEventListener('mousemove', this.resizeMouseMoveHandler); - this.resizeMouseMoveHandler = null; - } - if (this.resizeMouseUpHandler) { - document.removeEventListener('mouseup', this.resizeMouseUpHandler); - this.resizeMouseUpHandler = null; - } - this.isResizing = false; - }, - - startResize() { - this.isResizing = true; - }, - - // Signature button functionality - signatureButtons: [], - appliedSignatures: [], // Track which signatures have been applied (ID list) - appliedSignatureElements: [], // ✅ NEW: Track applied signature DOM elements - _lastViewedSignatureId: null, // Track last viewed signature for navigation - - /** - * Gets signature navigation state (for toolbar display) - * @returns {object} { total, signed, unsigned, currentIndex, canGoPrev, canGoNext } - */ - getSignatureNavState() { - // Return empty state if global signature list is empty - if (!this._allSignatures || this._allSignatures.length === 0) { - return { - total: 0, - signed: 0, - unsigned: 0, - currentIndex: -1, - canGoPrev: false, - canGoNext: false - }; - } - - - // Count signatures across ALL pages (from database global list) - const total = this._allSignatures.length; // Global: Total signature count - const signed = this.appliedSignatures.length; // Signed signatures - const unsigned = total - signed; // Calculated: Unsigned signatures - - // Find the current viewed signature index - let currentIndex = 0; - if (this._lastViewedSignatureId) { - const index = this._allSignatures.findIndex(s => s.id === this._lastViewedSignatureId); - currentIndex = index !== -1 ? index + 1 : 0; // 1-based index (for user display) - } - - return { - total: total, - signed: signed, - unsigned: unsigned, - currentIndex: currentIndex, // Current signature index (1-5 range) - canGoPrev: total > 0, // Always active (if signatures exist) - canGoNext: total > 0 // Always active (if signatures exist) - }; - }, - - /** - * Navigates to the next unsigned signature button. - * Scrolls to button position and changes page if necessary. - * Cross-page navigation: searches ALL pages for next unsigned signature. - */ - async goToNextSignature(dotNetRef) { - // Exit if no global signature list - if (!this._allSignatures || this._allSignatures.length === 0) { - return false; - } - - // Find current displayed signature's index - let currentIndex = -1; - if (this._lastViewedSignatureId) { - currentIndex = this._allSignatures.findIndex(s => s.id === this._lastViewedSignatureId); - } - - // Get next signature (regardless of signed status) - let nextIndex = currentIndex + 1; - - // Infinite loop: If at last signature, return to first - if (nextIndex >= this._allSignatures.length) { - nextIndex = 0; // Return to first signature - } - - const nextSignature = this._allSignatures[nextIndex]; - - // Change page if signature is on different page - if (nextSignature.page !== this.pageNum) { - // Change page - this.pageNum = nextSignature.page; - this.queueRenderPage(this.pageNum); - - // Wait until render completes - let waitCount = 0; - while (this.pageRendering && waitCount < 20) { - await new Promise(resolve => setTimeout(resolve, 100)); - waitCount++; - } - - // Notify Blazor - re-render signature buttons - if (dotNetRef) { - await dotNetRef.invokeMethodAsync('OnPageChangedBySignatureNav', this.pageNum); - } - - // Wait for buttons to be added to DOM - await new Promise(resolve => setTimeout(resolve, 150)); - } - - - // Save last viewed signature - this._lastViewedSignatureId = nextSignature.id; - - // Check if signature is signed - const isApplied = this.appliedSignatures.some(s => s.id === nextSignature.id); - - if (isApplied) { - // Signed - find overlay container and scroll - const container = document.querySelector(`.applied-signature[data-signature-id="${nextSignature.id}"]`); - if (container) { - this.scrollToElement(container); - } - } else { - // Unsigned - find button and scroll - const button = this.signatureButtons.find(btn => - parseInt(btn.getAttribute('data-signature-id')) === nextSignature.id - ); - if (button) { - this.scrollToButton(button); - } - } - - // Update counter (notify Blazor) - if (dotNetRef) { - dotNetRef.invokeMethodAsync('OnSignatureNavChanged'); - } - - return true; - }, - - /** - * Navigates to the previous signature (last applied one). - * Scrolls to signature position and changes page if necessary. - */ - async goToPreviousSignature(dotNetRef) { - if (!this._allSignatures || this._allSignatures.length === 0) { - return false; - } - - // Find current displayed signature's index - let currentIndex = this._allSignatures.length; // Default: after last signature - if (this._lastViewedSignatureId) { - currentIndex = this._allSignatures.findIndex(s => s.id === this._lastViewedSignatureId); - } - - // Get previous signature - let prevIndex = currentIndex - 1; - - // Infinite loop: If at first signature, go to last - if (prevIndex < 0) { - prevIndex = this._allSignatures.length - 1; // Go to last signature - } - - const prevSignature = this._allSignatures[prevIndex]; - - // Change page if needed - if (prevSignature.page !== this.pageNum) { - // Change page - this.pageNum = prevSignature.page; - this.queueRenderPage(this.pageNum); - - // Wait until render completes - let waitCount = 0; - while (this.pageRendering && waitCount < 20) { - await new Promise(resolve => setTimeout(resolve, 100)); - waitCount++; - } - - // Notify Blazor - re-render signature buttons - if (dotNetRef) { - await dotNetRef.invokeMethodAsync('OnPageChangedBySignatureNav', this.pageNum); - } - - // Wait for DOM update - await new Promise(resolve => setTimeout(resolve, 150)); - } - - // Save last viewed signature - this._lastViewedSignatureId = prevSignature.id; - - // Check if signature is signed - const isApplied = this.appliedSignatures.some(s => s.id === prevSignature.id); - - if (isApplied) { - // Signed - find overlay container and scroll - const container = document.querySelector(`.applied-signature[data-signature-id="${prevSignature.id}"]`); - if (container) { - this.scrollToElement(container); - } - } else { - // Unsigned - find button and scroll - const button = this.signatureButtons.find(btn => - parseInt(btn.getAttribute('data-signature-id')) === prevSignature.id - ); - if (button) { - this.scrollToButton(button); - } - } - - // Notify Blazor - if (dotNetRef) { - dotNetRef.invokeMethodAsync('OnSignatureNavChanged'); - } - - return true; - }, - - /** - * Scrolls to center a button in the viewport - */ - scrollToButton(button) { - const wrapper = this.canvas.closest('.pdf-canvas-wrapper'); - if (!wrapper) return; - - const buttonRect = button.getBoundingClientRect(); - const wrapperRect = wrapper.getBoundingClientRect(); - - // Calculate scroll to center button - const scrollLeft = wrapper.scrollLeft + buttonRect.left - wrapperRect.left - (wrapperRect.width / 2) + (buttonRect.width / 2); - const scrollTop = wrapper.scrollTop + buttonRect.top - wrapperRect.top - (wrapperRect.height / 2) + (buttonRect.height / 2); - - wrapper.scrollTo({ - left: scrollLeft, - top: scrollTop, - behavior: 'smooth' - }); - }, - - /** - * Scrolls to center an element in the viewport - */ - scrollToElement(element) { - const wrapper = this.canvas.closest('.pdf-canvas-wrapper'); - if (!wrapper) return; - - const elemRect = element.getBoundingClientRect(); - const wrapperRect = wrapper.getBoundingClientRect(); - - const scrollLeft = wrapper.scrollLeft + elemRect.left - wrapperRect.left - (wrapperRect.width / 2) + (elemRect.width / 2); - const scrollTop = wrapper.scrollTop + elemRect.top - wrapperRect.top - (wrapperRect.height / 2) + (elemRect.height / 2); - - wrapper.scrollTo({ - left: scrollLeft, - top: scrollTop, - behavior: 'smooth' - }); - }, - - /** - * Renders clickable signature buttons on the PDF canvas. - * @param {Array} signatures - Array of SignatureDto objects with x, y coordinates in PDF POINTS - * @param {number} currentPageNum - Current page number (1-based) - * @param {object} dotNetRef - .NET reference for callbacks - */ - async renderSignatureButtons(signatures, currentPageNum, dotNetRef) { - // Clear existing buttons (NOT applied signatures!) - this.clearSignatureButtons(); - - if (!this.pdfDoc || !signatures || signatures.length === 0) { - return; - } - - this.dotNetReference = dotNetRef; - this._allSignatures = signatures; // Store for navigation - - try { - // CRITICAL: Filter OUT already applied signatures! - const appliedIds = new Set(this.appliedSignatures.map(s => s.id)); - const pageSignatures = signatures.filter(sig => - sig.page === currentPageNum && !appliedIds.has(sig.id) // ? Skip applied ones! - ); - - if (pageSignatures.length === 0) { - return; - } - - // Get current page and viewport - const page = await this.pdfDoc.getPage(currentPageNum); - const dpr = this.qualityOptions.mainCanvasEnableHiDPI - ? Math.min(window.devicePixelRatio || 1, this.qualityOptions.mainCanvasMaxDPR) - : 1.0; - const viewport = page.getViewport({ scale: this.scale * dpr }); - - // Get signature layer container - const signatureLayer = document.getElementById('pdf-signature-layer'); - if (!signatureLayer) { - console.warn('Signature layer not found'); - return; - } - - // Set signature layer dimensions to match canvas display size - signatureLayer.style.width = `${viewport.width / dpr}px`; - signatureLayer.style.height = `${viewport.height / dpr}px`; - - // Update applied signature coordinates for current zoom level - this.updateAppliedSignaturePositions(signatureLayer, currentPageNum); - - // Create button for each UNSIGNED signature - pageSignatures.forEach(sig => { - // Coordinates are in PDF POINTS - convert to display pixels - const xPx = (sig.x * this.scale); - const yPx = (sig.y * this.scale); - - // ✅ FIXED: Scale button size proportionally with zoom - const baseScale = 1.5; // Reference scale (initial load) - const scaleFactor = this.scale / baseScale; - const baseWidth = 150; - const baseHeight = 60; - const baseFontSize = 18; - const baseIconSize = 24; - - const scaledWidth = baseWidth * scaleFactor; - const scaledHeight = baseHeight * scaleFactor; - const scaledFontSize = Math.max(baseFontSize * scaleFactor, 10); // Min 10px - const scaledIconSize = baseIconSize * scaleFactor; - - // Create button element - const button = document.createElement('button'); - button.className = 'signature-button'; - button.setAttribute('data-signature-id', sig.id); - button.setAttribute('type', 'button'); - button.setAttribute('tabindex', '0'); - button.style.position = 'absolute'; - button.style.left = `${xPx}px`; - button.style.top = `${yPx}px`; - button.style.width = `${scaledWidth}px`; // ✅ Scaled - button.style.height = `${scaledHeight}px`; // ✅ Scaled - button.style.backgroundColor = '#4F46E5'; - button.style.color = 'white'; - button.style.border = 'none'; - button.style.borderRadius = '8px'; - button.style.cursor = 'pointer'; - button.style.fontSize = '16px'; - button.style.fontWeight = '600'; - button.style.display = 'flex'; - button.style.flexDirection = 'column'; - button.style.alignItems = 'center'; - button.style.justifyContent = 'center'; - button.style.gap = '4px'; - button.style.boxShadow = '0 2px 8px rgba(0,0,0,0.15)'; - button.style.transition = 'all 0.2s ease'; - button.style.zIndex = '100'; - - // Add text - const textDiv = document.createElement('div'); - textDiv.textContent = 'Unterschreiben'; - textDiv.style.fontSize = `${scaledFontSize}px`; // ✅ Scaled - textDiv.style.fontWeight = '700'; - - // Add SVG icon - const svgNS = 'http://www.w3.org/2000/svg'; - const svg = document.createElementNS(svgNS, 'svg'); - svg.setAttribute('width', scaledIconSize); // ✅ Scaled - svg.setAttribute('height', scaledIconSize); // ✅ Scaled - svg.setAttribute('viewBox', '0 8 32 36'); - svg.setAttribute('fill', 'none'); - svg.style.filter = 'drop-shadow(0 1px 2px rgba(0,0,0,0.2))'; - - const path = document.createElementNS(svgNS, 'path'); - path.setAttribute('fill-rule', 'evenodd'); - path.setAttribute('clip-rule', 'evenodd'); - path.setAttribute('d', 'M25.061 6.90625L23.7115 8.25503C23.2861 8.05188 22.8241 7.9503 22.3621 7.9503C21.5605 7.9503 20.7589 8.25613 20.1483 8.86778L8.18147 20.8336L6.70565 26.7379H6.70557V27.7817H26.5372V26.7379H6.70671L12.6102 25.2623L24.576 13.2955C25.5404 12.3318 25.7445 10.8952 25.1882 9.73146L26.5369 8.38214L25.061 6.90625ZM23.174 10.27C22.9569 10.0539 22.6688 9.93388 22.362 9.93388C22.0551 9.93388 21.767 10.0539 21.5499 10.27L13.5323 18.2876L15.1564 19.9117L23.174 11.8941C23.6218 11.4463 23.6218 10.7177 23.174 10.27ZM14.4922 20.5759L12.868 18.9518L9.97241 21.8475L9.43069 24.0133L11.5965 23.4716L14.4922 20.5759Z'); - path.setAttribute('fill', 'white'); - - svg.appendChild(path); - button.appendChild(textDiv); - button.appendChild(svg); - - // Add hover effect - button.addEventListener('mouseenter', () => { - button.style.backgroundColor = '#4338CA'; - button.style.transform = 'scale(1.05)'; - button.style.boxShadow = '0 4px 12px rgba(79, 70, 229, 0.4)'; - }); - button.addEventListener('mouseleave', () => { - button.style.backgroundColor = '#4F46E5'; - button.style.transform = 'scale(1)'; - button.style.boxShadow = '0 2px 8px rgba(0,0,0,0.15)'; - }); - - // Add click handler - button.addEventListener('click', () => { - if (this.dotNetReference) { - this.dotNetReference.invokeMethodAsync('OnSignatureButtonClick', sig.id); - } - }); - - signatureLayer.appendChild(button); - this.signatureButtons.push(button); - }); - - } catch (error) { - console.error('Error rendering signature buttons:', error); - } - }, - - /** - * Scales an applied signature container based on current zoom level - * @param {HTMLElement} container - Applied signature container - * @param {number} currentScale - Current PDF zoom scale - */ - scaleAppliedSignature(container, currentScale) { - const baseScale = 1.5; // Reference scale (initial load) - const scaleFactor = currentScale / baseScale; - - // Scale width - const baseWidth = parseInt(container.getAttribute('data-base-width') || 230); - container.style.width = `${baseWidth * scaleFactor}px`; - - // Scale padding - const basePadding = parseInt(container.getAttribute('data-base-padding') || 12); - container.style.padding = `${basePadding * scaleFactor}px`; - - // Scale border radius (subtle detail) - const baseBorderRadius = parseInt(container.getAttribute('data-base-border-radius') || 6); - container.style.borderRadius = `${baseBorderRadius * scaleFactor}px`; - - // Scale font size (with min 6px for readability) - const infoContainer = container.querySelector('.signature-info-text'); - if (infoContainer) { - const baseFontSize = parseInt(infoContainer.getAttribute('data-base-font-size') || 9); - const scaledFontSize = Math.max(baseFontSize * scaleFactor, 6); - infoContainer.style.fontSize = `${scaledFontSize}px`; - } - - // Scale image max height - const baseImgHeight = parseInt(container.getAttribute('data-base-img-height') || 70); - const img = container.querySelector('img'); - if (img) { - img.style.maxHeight = `${baseImgHeight * scaleFactor}px`; - } - - // Scale separator line margin - const baseSeparatorMargin = 6; - const separators = container.querySelectorAll('div[style*="border-top"]'); - separators.forEach(sep => { - sep.style.marginTop = `${baseSeparatorMargin * scaleFactor}px`; - sep.style.marginBottom = `${(baseSeparatorMargin + 2) * scaleFactor}px`; - }); - }, - - /** - * Updates applied signature positions based on current zoom level - * @param {HTMLElement} signatureLayer - Signature layer container - * @param {number} currentPageNum - Current page number - */ - updateAppliedSignaturePositions(signatureLayer, currentPageNum) { - if (!signatureLayer || !this._allSignatures) return; - - const appliedContainers = signatureLayer.querySelectorAll('.applied-signature'); - appliedContainers.forEach(container => { - const signatureId = parseInt(container.getAttribute('data-signature-id')); - const signature = this._allSignatures.find(s => s.id === signatureId); - - if (signature) { - // ✅ Position calculation (same as renderSignatureButtons) - const xPx = signature.x * this.scale; - const yPx = signature.y * this.scale; - - container.style.left = `${xPx}px`; - container.style.top = `${yPx}px`; - - // ✅ FIXED: Apply comprehensive scaling using helper method - this.scaleAppliedSignature(container, this.scale); - - // Show/hide based on current page - container.style.display = (signature.page === currentPageNum) ? '' : 'none'; - } - }); - }, - - /** - * Clears all signature buttons from the canvas. - * Also hides applied signatures that don't belong to current page. - */ - clearSignatureButtons() { - // Remove unsigned signature buttons - this.signatureButtons.forEach(button => { - if (button.parentNode) { - button.parentNode.removeChild(button); - } - }); - this.signatureButtons = []; - - // ✅ FIXED: Update applied signatures (position + scaling) - this.appliedSignatureElements.forEach(container => { - const signatureId = parseInt(container.getAttribute('data-signature-id')); - const signature = this._allSignatures?.find(s => s.id === signatureId); - - if (signature) { - // Update position - const xPx = signature.x * this.scale; - const yPx = signature.y * this.scale; - container.style.left = `${xPx}px`; - container.style.top = `${yPx}px`; - - // Update scaling - this.scaleAppliedSignature(container, this.scale); - - // Show/hide based on current page - container.style.display = (signature.page === this.pageNum) ? '' : 'none'; - } - }); - }, - - /** - * Applies a signature to a specific signature field, removing the button and rendering the signature. - * German standard: Signature image + Name, Position, Place, Date - * @param {number} signatureId - ID of the signature field - * @param {string} signatureDataUrl - Base64 PNG data URL of signature - * @param {string} fullName - Signer's full name - * @param {string} position - Signer's position (optional, can be empty) - * @param {string} place - Signing place - */ - async applySignature(signatureId, signatureDataUrl, fullName, position, place) { - try { - // Find and remove the button - const buttonIndex = this.signatureButtons.findIndex(btn => { - return btn.getAttribute('data-signature-id') == signatureId; - }); - - if (buttonIndex === -1) { - console.warn(`Signature button #${signatureId} not found`); - return; - } - - const button = this.signatureButtons[buttonIndex]; - const signatureLayer = document.getElementById('pdf-signature-layer'); - - if (!signatureLayer) { - console.error('Signature layer not found'); - return; - } - - // Get button position before removing it - const left = button.style.left; - const top = button.style.top; - - // Find signature data for tracking - const signature = this._allSignatures?.find(s => s.id === signatureId); - - // Remove button - if (button.parentNode) { - button.parentNode.removeChild(button); - } - this.signatureButtons.splice(buttonIndex, 1); - - // Track applied signature - if (signature) { - this.appliedSignatures.push({ - id: signatureId, - page: signature.page - }); - } - - // Create signature container - const signatureContainer = document.createElement('div'); - signatureContainer.className = 'applied-signature'; - signatureContainer.setAttribute('data-signature-id', signatureId); - - // ✅ FIXED: Store base values for scaling - signatureContainer.setAttribute('data-base-width', '230'); - signatureContainer.setAttribute('data-base-padding', '12'); - signatureContainer.setAttribute('data-base-font-size', '9'); - signatureContainer.setAttribute('data-base-img-height', '70'); - signatureContainer.setAttribute('data-base-border-radius', '6'); - - signatureContainer.style.position = 'absolute'; - signatureContainer.style.left = left; - signatureContainer.style.top = top; - signatureContainer.style.width = '230px'; - signatureContainer.style.backgroundColor = '#f8f9fa'; - signatureContainer.style.border = '1px solid #dee2e6'; - signatureContainer.style.borderRadius = '6px'; - signatureContainer.style.padding = '12px'; - signatureContainer.style.boxShadow = '0 2px 8px rgba(0,0,0,0.1)'; - signatureContainer.style.fontFamily = "'Open Sans', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif"; - - // Signature image - const signatureImg = document.createElement('img'); - signatureImg.src = signatureDataUrl; - signatureImg.alt = 'Unterschrift'; - signatureImg.style.width = '100%'; - signatureImg.style.height = 'auto'; - signatureImg.style.maxHeight = '70px'; - signatureImg.style.display = 'block'; - signatureImg.style.objectFit = 'contain'; - signatureImg.style.marginBottom = '6px'; - - // Separator line (German standard) - const separator = document.createElement('div'); - separator.style.width = '100%'; - separator.style.height = '1px'; - separator.style.backgroundColor = '#495057'; - separator.style.marginBottom = '8px'; - - // Text information container - const infoContainer = document.createElement('div'); - infoContainer.className = 'signature-info-text'; // ✅ Add class (for querySelector) - infoContainer.setAttribute('data-base-font-size', '9'); // ✅ Store base font size - infoContainer.style.fontSize = '9px'; - infoContainer.style.lineHeight = '1.4'; - infoContainer.style.color = '#495057'; - infoContainer.style.fontWeight = '400'; - - // Format date (German style: dd.MM.yyyy) - const today = new Date(); - const dateStr = today.toLocaleDateString('de-DE', { - day: '2-digit', - month: '2-digit', - year: 'numeric' - }); - - // Build text lines (German standard format) - const lines = []; - lines.push(`${this.escapeHtml(fullName)}`); - - if (position && position.trim() !== '') { - lines.push(`${this.escapeHtml(position)}`); - } - - lines.push(`${this.escapeHtml(place)}, ${dateStr}`); - - infoContainer.innerHTML = lines.join('
'); - - // Assemble container - signatureContainer.appendChild(signatureImg); - signatureContainer.appendChild(separator); - signatureContainer.appendChild(infoContainer); - - // Add to signature layer - signatureLayer.appendChild(signatureContainer); - - // ✅ FIXED: Track applied signature element for zoom updates - this.appliedSignatureElements.push(signatureContainer); - - // ✅ FIXED: Apply initial scaling based on current zoom - this.scaleAppliedSignature(signatureContainer, this.scale); - - console.log(`Signature #${signatureId} applied successfully`); - - } catch (error) { - console.error('Error applying signature:', error); - } - }, - - /** - * Escapes HTML to prevent XSS attacks - */ - escapeHtml(text) { - const div = document.createElement('div'); - div.textContent = text; - return div.innerHTML; - } -}; - - - - - - - diff --git a/EnvelopeGenerator.ReceiverUI/wwwroot/js/receiver-signature.js b/EnvelopeGenerator.ReceiverUI/wwwroot/js/receiver-signature.js deleted file mode 100644 index 11bc80fc..00000000 --- a/EnvelopeGenerator.ReceiverUI/wwwroot/js/receiver-signature.js +++ /dev/null @@ -1,353 +0,0 @@ -window.receiverSignature = (() => { - - // ?? State ??????????????????????????????????????????????????????????????? - const pads = new Map(); - const typedSignatures = new Map(); - const imageSignatures = new Map(); - const overlayButtons = new Map(); // annotationId -> { btn, signed } - let _dotNetRef = null; - - // DevExpress Blazor Report Viewer selectors (confirmed via debugDumpViewerDom) - const PAGE_IMG_SEL = '.dxbrv-report-preview-content-img'; - const SCROLL_CONTAINER_SEL = '.dxbrv-surface-wrapper'; - const VIEWER_WRAPPER_SEL = '.receiver-viewer-wrapper'; - - // DX report coordinate space (1/100 inch, A4) - const DX_PAGE_WIDTH = 827.0; - const DX_PAGE_HEIGHT = 1169.0; - - // Signature field size in DX units - const SIG_WIDTH_DX = 230.0; - const SIG_HEIGHT_DX = 154.0; - - // ?? Annotation Checkboxes ???????????????????????????????????????????????? - - // Active install context — holds everything needed to reposition on resize/scroll - let _installCtx = null; - - function installAnnotationCheckboxes(annotations, checkedIds, dotNetRef) { - _dotNetRef = dotNetRef; - - // Tear down previous install completely - _teardownCheckboxes(); - - if (!annotations || annotations.length === 0) return; - - const ctx = { - annotations, - checkedIds: new Set(Array.isArray(checkedIds) ? checkedIds : []), - scrollEl: null, - pageEls: [], - resizeObs: null, - onScroll: null, - onResize: null, - resizeTimer: null, - }; - _installCtx = ctx; - - _waitForCheckboxPages(ctx); - } - - function _teardownCheckboxes() { - document.querySelectorAll('.annot-sig-cb-wrapper').forEach(el => el.remove()); - overlayButtons.clear(); - - if (!_installCtx) return; - const ctx = _installCtx; - - if (ctx.resizeObs) { ctx.resizeObs.disconnect(); ctx.resizeObs = null; } - if (ctx.scrollEl && ctx.onScroll) ctx.scrollEl.removeEventListener('scroll', ctx.onScroll); - if (ctx.onResize) window.removeEventListener('resize', ctx.onResize); - if (ctx.resizeTimer) clearTimeout(ctx.resizeTimer); - - _installCtx = null; - } - - function _waitForCheckboxPages(ctx) { - const wrapper = document.querySelector(VIEWER_WRAPPER_SEL); - if (!wrapper) return; - - if (!_tryInstallCheckboxes(ctx)) { - const observer = new MutationObserver(() => { - if (_tryInstallCheckboxes(ctx)) observer.disconnect(); - }); - observer.observe(wrapper, { childList: true, subtree: true }); - setTimeout(() => observer.disconnect(), 15000); - } - } - - function _tryInstallCheckboxes(ctx) { - const scrollEl = document.querySelector(SCROLL_CONTAINER_SEL); - if (!scrollEl) return false; - - const pageEls = Array.from(document.querySelectorAll(PAGE_IMG_SEL)); - if (pageEls.length === 0) return false; - - if (getComputedStyle(scrollEl).position === 'static') - scrollEl.style.position = 'relative'; - - ctx.scrollEl = scrollEl; - ctx.pageEls = pageEls; - - // Initial render - _renderAllCheckboxes(ctx); - - // ResizeObserver — watches every page image for size changes (zoom in/out) - const ro = new ResizeObserver(() => _repositionAll(ctx)); - pageEls.forEach(el => ro.observe(el)); - ctx.resizeObs = ro; - - // Scroll — reposition when user scrolls the viewer - ctx.onScroll = () => _repositionAll(ctx); - scrollEl.addEventListener('scroll', ctx.onScroll, { passive: true }); - - // Window resize — debounced 60 ms - ctx.onResize = () => { - if (ctx.resizeTimer) clearTimeout(ctx.resizeTimer); - ctx.resizeTimer = setTimeout(() => _repositionAll(ctx), 60); - }; - window.addEventListener('resize', ctx.onResize, { passive: true }); - - return true; - } - - function _repositionAll(ctx) { - if (!ctx || !ctx.scrollEl) return; - - const scrollEl = ctx.scrollEl; - const pageEls = Array.from(document.querySelectorAll(PAGE_IMG_SEL)); // re-query in case DOM changed - if (pageEls.length === 0) return; - - const scrollRect = scrollEl.getBoundingClientRect(); - - ctx.annotations.forEach(ann => { - const wrapper = document.querySelector(`.annot-sig-cb-wrapper[data-annot-id="${ann.id}"]`); - if (!wrapper) return; - - const pageEl = pageEls[(ann.page || 1) - 1] ?? pageEls[pageEls.length - 1]; - if (!pageEl) return; - - const pageRect = pageEl.getBoundingClientRect(); - if (pageRect.width === 0 || pageRect.height === 0) return; - - const scaleX = pageRect.width / DX_PAGE_WIDTH; - const scaleY = pageRect.height / DX_PAGE_HEIGHT; - - const absLeft = pageRect.left - scrollRect.left + scrollEl.scrollLeft + (ann.x || 0) * scaleX; - const absTop = pageRect.top - scrollRect.top + scrollEl.scrollTop + (ann.y || 0) * scaleY; - const boxW = SIG_WIDTH_DX * scaleX; - const boxH = SIG_HEIGHT_DX * scaleY; - - wrapper.style.left = Math.round(absLeft) + 'px'; - wrapper.style.top = Math.round(absTop) + 'px'; - wrapper.style.width = Math.round(boxW) + 'px'; - wrapper.style.height = Math.round(boxH) + 'px'; - }); - } - - function _renderAllCheckboxes(ctx) { - const scrollEl = ctx.scrollEl; - const pageEls = ctx.pageEls; - const scrollRect = scrollEl.getBoundingClientRect(); - - ctx.annotations.forEach(ann => { - const pageEl = pageEls[(ann.page || 1) - 1] ?? pageEls[pageEls.length - 1]; - if (!pageEl) return; - - const pageRect = pageEl.getBoundingClientRect(); - if (pageRect.width === 0 || pageRect.height === 0) return; - - const scaleX = pageRect.width / DX_PAGE_WIDTH; - const scaleY = pageRect.height / DX_PAGE_HEIGHT; - - const absLeft = pageRect.left - scrollRect.left + scrollEl.scrollLeft + (ann.x || 0) * scaleX; - const absTop = pageRect.top - scrollRect.top + scrollEl.scrollTop + (ann.y || 0) * scaleY; - const boxW = SIG_WIDTH_DX * scaleX; - const boxH = SIG_HEIGHT_DX * scaleY; - - const isChecked = ctx.checkedIds.has(ann.id); - _createCheckboxOverlay(ann.id, scrollEl, absLeft, absTop, boxW, boxH, isChecked); - }); - } - - function _createCheckboxOverlay(annotationId, container, left, top, width, height, isChecked) { - const wrapper = document.createElement('div'); - wrapper.className = 'annot-sig-cb-wrapper' + (isChecked ? ' annot-sig-cb-wrapper--checked' : ''); - wrapper.setAttribute('data-annot-id', String(annotationId)); - - Object.assign(wrapper.style, { - position: 'absolute', - left: Math.round(left) + 'px', - top: Math.round(top) + 'px', - width: Math.round(width) + 'px', - height: Math.round(height) + 'px', - zIndex: '9999', - cursor: 'pointer', - boxSizing: 'border-box', - }); - - const cb = document.createElement('input'); - cb.type = 'checkbox'; - cb.checked = isChecked; - cb.className = 'annot-sig-cb'; - cb.setAttribute('aria-label', 'Unterschriftsfeld bestaetigen'); - - const label = document.createElement('span'); - label.className = 'annot-sig-cb__label'; - label.textContent = isChecked ? '\u2713 Bestaetigt' : '\u270e Hier unterschreiben'; - - wrapper.appendChild(cb); - wrapper.appendChild(label); - - wrapper.addEventListener('click', (e) => { - if (e.target !== cb) cb.checked = !cb.checked; - const checked = cb.checked; - wrapper.classList.toggle('annot-sig-cb-wrapper--checked', checked); - label.textContent = checked ? '\u2713 Bestaetigt' : '\u270e Hier unterschreiben'; - if (_installCtx) { - if (checked) _installCtx.checkedIds.add(annotationId); - else _installCtx.checkedIds.delete(annotationId); - } - if (_dotNetRef) - _dotNetRef.invokeMethodAsync('OnAnnotationToggled', annotationId, checked); - }); - - container.appendChild(wrapper); - overlayButtons.set(annotationId, { btn: wrapper, signed: isChecked }); - } - - // ?? Signature Pad ??????????????????????????????????????????????????????? - - function _pos(canvas, event) { - const r = canvas.getBoundingClientRect(); - const s = (event.touches && event.touches.length) ? event.touches[0] : event; - return { x: (s.clientX - r.left) * (canvas.width / r.width), y: (s.clientY - r.top) * (canvas.height / r.height) }; - } - - function _clear(canvas) { canvas.getContext('2d').clearRect(0, 0, canvas.width, canvas.height); } - - function initialize(canvasId) { - const canvas = document.getElementById(canvasId); - if (!canvas || pads.has(canvasId)) return; - const ctx = canvas.getContext('2d'); - ctx.lineWidth = 2.5; ctx.lineCap = 'round'; ctx.lineJoin = 'round'; ctx.strokeStyle = '#111'; - const state = { drawing: false, hasSignature: false }; - pads.set(canvasId, state); - const start = e => { e.preventDefault(); const p = _pos(canvas, e); state.drawing = true; ctx.beginPath(); ctx.moveTo(p.x, p.y); }; - const move = e => { if (!state.drawing) return; e.preventDefault(); const p = _pos(canvas, e); ctx.lineTo(p.x, p.y); ctx.stroke(); state.hasSignature = true; }; - const end = e => { if (!state.drawing) return; e.preventDefault(); state.drawing = false; }; - canvas.addEventListener('mousedown', start); - canvas.addEventListener('mousemove', move); - window.addEventListener('mouseup', end); - canvas.addEventListener('touchstart', start, { passive: false }); - canvas.addEventListener('touchmove', move, { passive: false }); - canvas.addEventListener('touchend', end, { passive: false }); - } - - function initializeTyped(canvasId) { - const canvas = document.getElementById(canvasId); - if (!canvas || typedSignatures.has(canvasId)) return; - typedSignatures.set(canvasId, { hasSignature: false }); - } - - function initializeImage(inputId, canvasId) { - const input = document.getElementById(inputId); - const canvas = document.getElementById(canvasId); - if (!input || !canvas || imageSignatures.has(canvasId)) return; - const state = { hasSignature: false }; - imageSignatures.set(canvasId, state); - input.addEventListener('change', () => { - const file = input.files && input.files[0]; - if (!file || !file.type.startsWith('image/')) { _clear(canvas); state.hasSignature = false; return; } - const reader = new FileReader(); - reader.onload = () => { - const img = new Image(); - img.onload = () => { - const ctx = canvas.getContext('2d'); _clear(canvas); - const p = 10, mw = canvas.width - p * 2, mh = canvas.height - p * 2; - const s = Math.min(mw / img.width, mh / img.height, 1); - ctx.drawImage(img, (canvas.width - img.width * s) / 2, (canvas.height - img.height * s) / 2, img.width * s, img.height * s); - state.hasSignature = true; - }; - img.src = reader.result; - }; - reader.readAsDataURL(file); - }); - } - - function clear(canvasId) { - const c = document.getElementById(canvasId); const s = pads.get(canvasId); - if (c && s) { _clear(c); s.hasSignature = false; } - } - - function clearTyped(canvasId) { - const c = document.getElementById(canvasId); const s = typedSignatures.get(canvasId); - if (c && s) { _clear(c); s.hasSignature = false; } - } - - function clearImage(inputId, canvasId) { - const inp = document.getElementById(inputId); const c = document.getElementById(canvasId); const s = imageSignatures.get(canvasId); - if (c && s) { if (inp) inp.value = ''; _clear(c); s.hasSignature = false; } - } - - function renderTypedSignature(canvasId, text, fontFamily) { - const canvas = document.getElementById(canvasId); const state = typedSignatures.get(canvasId); - if (!canvas || !state) return; - const value = (text || '').trim(); _clear(canvas); - if (!value) { state.hasSignature = false; return; } - const ctx = canvas.getContext('2d'); let fs = 54; - do { ctx.font = 'italic ' + fs + 'px ' + (fontFamily || 'cursive'); fs -= 2; } - while (ctx.measureText(value).width > canvas.width - 30 && fs > 24); - ctx.fillStyle = '#111'; ctx.textBaseline = 'middle'; ctx.textAlign = 'center'; - ctx.fillText(value, canvas.width / 2, canvas.height / 2); - state.hasSignature = true; - } - - function startTyped(elementId, text, typeSpeed) { - if (typeof Typed === 'undefined') return; - new Typed('#' + elementId, { - strings: [text], - typeSpeed: typeSpeed || 15, - showCursor: false - }); - } - - function getDataUrl(id) { const c = document.getElementById(id); const s = pads.get(id); return (c && s && s.hasSignature) ? c.toDataURL('image/png') : null; } - function getTypedDataUrl(id) { const c = document.getElementById(id); const s = typedSignatures.get(id); return (c && s && s.hasSignature) ? c.toDataURL('image/png') : null; } - function getImageDataUrl(id) { const c = document.getElementById(id); const s = imageSignatures.get(id); return (c && s && s.hasSignature) ? c.toDataURL('image/png') : null; } - - function loadExistingSignature(canvasId, dataUrl) { - const canvas = document.getElementById(canvasId); - const state = pads.get(canvasId); - if (!canvas || !state || !dataUrl) return; - - const ctx = canvas.getContext('2d'); - const img = new Image(); - - img.onload = () => { - _clear(canvas); - ctx.drawImage(img, 0, 0, canvas.width, canvas.height); - state.hasSignature = true; - }; - - img.src = dataUrl; - } - - // ?? Public API ?????????????????????????????????????????????????????????? - return { - startTyped: startTyped, - installAnnotationCheckboxes: installAnnotationCheckboxes, - initialize: initialize, - initializeTyped: initializeTyped, - initializeImage: initializeImage, - clear: clear, - clearTyped: clearTyped, - clearImage: clearImage, - renderTypedSignature: renderTypedSignature, - getDataUrl: getDataUrl, - getTypedDataUrl: getTypedDataUrl, - getImageDataUrl: getImageDataUrl, - loadExistingSignature: loadExistingSignature - }; -})(); - diff --git a/EnvelopeGenerator.ReceiverUI/wwwroot/js/typed.umd.js b/EnvelopeGenerator.ReceiverUI/wwwroot/js/typed.umd.js deleted file mode 100644 index 0a4e41d6..00000000 --- a/EnvelopeGenerator.ReceiverUI/wwwroot/js/typed.umd.js +++ /dev/null @@ -1,3 +0,0 @@ -!function(t,s){"object"==typeof exports&&"undefined"!=typeof module?module.exports=s():"function"==typeof define&&define.amd?define(s):(t||self).Typed=s()}(this,function(){function t(){return t=Object.assign?Object.assign.bind():function(t){for(var s=1;s0&&(e.strPos=e.currentElContent.length-1,e.strings.unshift(e.currentElContent)),e.sequence=[],e.strings)e.sequence[u]=u;e.arrayPos=0,e.stopNum=0,e.loop=e.options.loop,e.loopCount=e.options.loopCount,e.curLoop=0,e.shuffle=e.options.shuffle,e.pause={status:!1,typewrite:!0,curString:"",curStrPos:0},e.typingComplete=!1,e.autoInsertCss=e.options.autoInsertCss,e.autoInsertCss&&(this.appendCursorAnimationCss(e),this.appendFadeOutAnimationCss(e))},n.getCurrentElContent=function(t){return t.attr?t.el.getAttribute(t.attr):t.isInput?t.el.value:"html"===t.contentType?t.el.innerHTML:t.el.textContent},n.appendCursorAnimationCss=function(t){var s="data-typed-js-cursor-css";if(t.showCursor&&!document.querySelector("["+s+"]")){var e=document.createElement("style");e.setAttribute(s,"true"),e.innerHTML="\n .typed-cursor{\n opacity: 1;\n }\n .typed-cursor.typed-cursor--blink{\n animation: typedjsBlink 0.7s infinite;\n -webkit-animation: typedjsBlink 0.7s infinite;\n animation: typedjsBlink 0.7s infinite;\n }\n @keyframes typedjsBlink{\n 50% { opacity: 0.0; }\n }\n @-webkit-keyframes typedjsBlink{\n 0% { opacity: 1; }\n 50% { opacity: 0.0; }\n 100% { opacity: 1; }\n }\n ",document.body.appendChild(e)}},n.appendFadeOutAnimationCss=function(t){var s="data-typed-fadeout-js-css";if(t.fadeOut&&!document.querySelector("["+s+"]")){var e=document.createElement("style");e.setAttribute(s,"true"),e.innerHTML="\n .typed-fade-out{\n opacity: 0;\n transition: opacity .25s;\n }\n .typed-cursor.typed-cursor--blink.typed-fade-out{\n -webkit-animation: 0;\n animation: 0;\n }\n ",document.body.appendChild(e)}},e}()),n=new(/*#__PURE__*/function(){function t(){}var s=t.prototype;return s.typeHtmlChars=function(t,s,e){if("html"!==e.contentType)return s;var n=t.substring(s).charAt(0);if("<"===n||"&"===n){var i;for(i="<"===n?">":";";t.substring(s+1).charAt(0)!==i&&!(1+ ++s>t.length););s++}return s},s.backSpaceHtmlChars=function(t,s,e){if("html"!==e.contentType)return s;var n=t.substring(s).charAt(0);if(">"===n||";"===n){var i;for(i=">"===n?"<":"&";t.substring(s-1).charAt(0)!==i&&!(--s<0););s--}return s},t}());/*#__PURE__*/ -return function(){function t(t,s){e.load(this,s,t),this.begin()}var s=t.prototype;return s.toggle=function(){this.pause.status?this.start():this.stop()},s.stop=function(){this.typingComplete||this.pause.status||(this.toggleBlinking(!0),this.pause.status=!0,this.options.onStop(this.arrayPos,this))},s.start=function(){this.typingComplete||this.pause.status&&(this.pause.status=!1,this.pause.typewrite?this.typewrite(this.pause.curString,this.pause.curStrPos):this.backspace(this.pause.curString,this.pause.curStrPos),this.options.onStart(this.arrayPos,this))},s.destroy=function(){this.reset(!1),this.options.onDestroy(this)},s.reset=function(t){void 0===t&&(t=!0),clearInterval(this.timeout),this.replaceText(""),this.cursor&&this.cursor.parentNode&&(this.cursor.parentNode.removeChild(this.cursor),this.cursor=null),this.strPos=0,this.arrayPos=0,this.curLoop=0,t&&(this.insertCursor(),this.options.onReset(this),this.begin())},s.begin=function(){var t=this;this.options.onBegin(this),this.typingComplete=!1,this.shuffleStringsIfNeeded(this),this.insertCursor(),this.bindInputFocusEvents&&this.bindFocusEvents(),this.timeout=setTimeout(function(){0===t.strPos?t.typewrite(t.strings[t.sequence[t.arrayPos]],t.strPos):t.backspace(t.strings[t.sequence[t.arrayPos]],t.strPos)},this.startDelay)},s.typewrite=function(t,s){var e=this;this.fadeOut&&this.el.classList.contains(this.fadeOutClass)&&(this.el.classList.remove(this.fadeOutClass),this.cursor&&this.cursor.classList.remove(this.fadeOutClass));var i=this.humanizer(this.typeSpeed),r=1;!0!==this.pause.status?this.timeout=setTimeout(function(){s=n.typeHtmlChars(t,s,e);var i=0,o=t.substring(s);if("^"===o.charAt(0)&&/^\^\d+/.test(o)){var a=1;a+=(o=/\d+/.exec(o)[0]).length,i=parseInt(o),e.temporaryPause=!0,e.options.onTypingPaused(e.arrayPos,e),t=t.substring(0,s)+t.substring(s+a),e.toggleBlinking(!0)}if("`"===o.charAt(0)){for(;"`"!==t.substring(s+r).charAt(0)&&(r++,!(s+r>t.length)););var u=t.substring(0,s),p=t.substring(u.length+1,s+r),c=t.substring(s+r+1);t=u+p+c,r--}e.timeout=setTimeout(function(){e.toggleBlinking(!1),s>=t.length?e.doneTyping(t,s):e.keepTyping(t,s,r),e.temporaryPause&&(e.temporaryPause=!1,e.options.onTypingResumed(e.arrayPos,e))},i)},i):this.setPauseStatus(t,s,!0)},s.keepTyping=function(t,s,e){0===s&&(this.toggleBlinking(!1),this.options.preStringTyped(this.arrayPos,this));var n=t.substring(0,s+=e);this.replaceText(n),this.typewrite(t,s)},s.doneTyping=function(t,s){var e=this;this.options.onStringTyped(this.arrayPos,this),this.toggleBlinking(!0),this.arrayPos===this.strings.length-1&&(this.complete(),!1===this.loop||this.curLoop===this.loopCount)||(this.timeout=setTimeout(function(){e.backspace(t,s)},this.backDelay))},s.backspace=function(t,s){var e=this;if(!0!==this.pause.status){if(this.fadeOut)return this.initFadeOut();this.toggleBlinking(!1);var i=this.humanizer(this.backSpeed);this.timeout=setTimeout(function(){s=n.backSpaceHtmlChars(t,s,e);var i=t.substring(0,s);if(e.replaceText(i),e.smartBackspace){var r=e.strings[e.arrayPos+1];e.stopNum=r&&i===r.substring(0,s)?s:0}s>e.stopNum?(s--,e.backspace(t,s)):s<=e.stopNum&&(e.arrayPos++,e.arrayPos===e.strings.length?(e.arrayPos=0,e.options.onLastStringBackspaced(),e.shuffleStringsIfNeeded(),e.begin()):e.typewrite(e.strings[e.sequence[e.arrayPos]],s))},i)}else this.setPauseStatus(t,s,!1)},s.complete=function(){this.options.onComplete(this),this.loop?this.curLoop++:this.typingComplete=!0},s.setPauseStatus=function(t,s,e){this.pause.typewrite=e,this.pause.curString=t,this.pause.curStrPos=s},s.toggleBlinking=function(t){this.cursor&&(this.pause.status||this.cursorBlinking!==t&&(this.cursorBlinking=t,t?this.cursor.classList.add("typed-cursor--blink"):this.cursor.classList.remove("typed-cursor--blink")))},s.humanizer=function(t){return Math.round(Math.random()*t/2)+t},s.shuffleStringsIfNeeded=function(){this.shuffle&&(this.sequence=this.sequence.sort(function(){return Math.random()-.5}))},s.initFadeOut=function(){var t=this;return this.el.className+=" "+this.fadeOutClass,this.cursor&&(this.cursor.className+=" "+this.fadeOutClass),setTimeout(function(){t.arrayPos++,t.replaceText(""),t.strings.length>t.arrayPos?t.typewrite(t.strings[t.sequence[t.arrayPos]],0):(t.typewrite(t.strings[0],0),t.arrayPos=0)},this.fadeOutDelay)},s.replaceText=function(t){this.attr?this.el.setAttribute(this.attr,t):this.isInput?this.el.value=t:"html"===this.contentType?this.el.innerHTML=t:this.el.textContent=t},s.bindFocusEvents=function(){var t=this;this.isInput&&(this.el.addEventListener("focus",function(s){t.stop()}),this.el.addEventListener("blur",function(s){t.el.value&&0!==t.el.value.length||t.start()}))},s.insertCursor=function(){this.showCursor&&(this.cursor||(this.cursor=document.createElement("span"),this.cursor.className="typed-cursor",this.cursor.setAttribute("aria-hidden",!0),this.cursor.innerHTML=this.cursorChar,this.el.parentNode&&this.el.parentNode.insertBefore(this.cursor,this.el.nextSibling)))},t}()}); -//# sourceMappingURL=typed.umd.js.map diff --git a/EnvelopeGenerator.sln b/EnvelopeGenerator.sln index 7508a491..d769a5cc 100644 --- a/EnvelopeGenerator.sln +++ b/EnvelopeGenerator.sln @@ -42,8 +42,6 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "EnvelopeGenerator.API", "En EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "EnvelopeGenerator.DependencyInjection", "EnvelopeGenerator.DependencyInjection\EnvelopeGenerator.DependencyInjection.csproj", "{5DCCF9A1-C03F-90E6-87D3-E96DB25250C2}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "EnvelopeGenerator.ReceiverUI", "EnvelopeGenerator.ReceiverUI\EnvelopeGenerator.ReceiverUI.csproj", "{FB2D306B-1042-4A70-31ED-F991A1599371}" -EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "EnvelopeGenerator.Server", "EnvelopeGenerator.Server", "{BF1700D5-592E-4FFA-84E8-5480E289A1F0}" ProjectSection(SolutionItems) = preProject EnvelopeGenerator.Server\publish.bat = EnvelopeGenerator.Server\publish.bat @@ -108,10 +106,6 @@ Global {5DCCF9A1-C03F-90E6-87D3-E96DB25250C2}.Debug|Any CPU.Build.0 = Debug|Any CPU {5DCCF9A1-C03F-90E6-87D3-E96DB25250C2}.Release|Any CPU.ActiveCfg = Release|Any CPU {5DCCF9A1-C03F-90E6-87D3-E96DB25250C2}.Release|Any CPU.Build.0 = Release|Any CPU - {FB2D306B-1042-4A70-31ED-F991A1599371}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {FB2D306B-1042-4A70-31ED-F991A1599371}.Debug|Any CPU.Build.0 = Debug|Any CPU - {FB2D306B-1042-4A70-31ED-F991A1599371}.Release|Any CPU.ActiveCfg = Release|Any CPU - {FB2D306B-1042-4A70-31ED-F991A1599371}.Release|Any CPU.Build.0 = Release|Any CPU {4E6C54DA-576D-0955-2564-9EC890BB8279}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {4E6C54DA-576D-0955-2564-9EC890BB8279}.Debug|Any CPU.Build.0 = Debug|Any CPU {4E6C54DA-576D-0955-2564-9EC890BB8279}.Release|Any CPU.ActiveCfg = Release|Any CPU @@ -147,7 +141,6 @@ Global {224C4845-1CDE-22B7-F3A9-1FF9297F70E8} = {0CBC2432-A561-4440-89BC-671B66A24146} {EC768913-6270-14F4-1DD3-69C87A659462} = {E3C758DC-914D-4B7E-8457-0813F1FDB0CB} {5DCCF9A1-C03F-90E6-87D3-E96DB25250C2} = {E3C758DC-914D-4B7E-8457-0813F1FDB0CB} - {FB2D306B-1042-4A70-31ED-F991A1599371} = {E3C758DC-914D-4B7E-8457-0813F1FDB0CB} {BF1700D5-592E-4FFA-84E8-5480E289A1F0} = {E3C758DC-914D-4B7E-8457-0813F1FDB0CB} {4E6C54DA-576D-0955-2564-9EC890BB8279} = {BF1700D5-592E-4FFA-84E8-5480E289A1F0} {9C41A0B1-6AFE-AFC5-CE33-08052F45DAEF} = {BF1700D5-592E-4FFA-84E8-5480E289A1F0}