142 changed files with 120501 additions and 14 deletions
@ -0,0 +1,16 @@ |
|||||||
|
<Project Sdk="Microsoft.NET.Sdk.BlazorWebAssembly"> |
||||||
|
|
||||||
|
<PropertyGroup> |
||||||
|
<TargetFramework>net10.0</TargetFramework> |
||||||
|
<ImplicitUsings>enable</ImplicitUsings> |
||||||
|
<Nullable>enable</Nullable> |
||||||
|
<NoDefaultLaunchSettingsFile>true</NoDefaultLaunchSettingsFile> |
||||||
|
<StaticWebAssetProjectMode>Default</StaticWebAssetProjectMode> |
||||||
|
<BlazorDisableThrowNavigationException>true</BlazorDisableThrowNavigationException> |
||||||
|
</PropertyGroup> |
||||||
|
|
||||||
|
<ItemGroup> |
||||||
|
<PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly" Version="10.0.0" /> |
||||||
|
</ItemGroup> |
||||||
|
|
||||||
|
</Project> |
||||||
@ -0,0 +1,19 @@ |
|||||||
|
@page "/counter" |
||||||
|
@rendermode InteractiveWebAssembly |
||||||
|
|
||||||
|
<PageTitle>Counter</PageTitle> |
||||||
|
|
||||||
|
<h1>Counter</h1> |
||||||
|
|
||||||
|
<p role="status">Current count: @currentCount</p> |
||||||
|
|
||||||
|
<button class="btn btn-primary" @onclick="IncrementCount">Click me</button> |
||||||
|
|
||||||
|
@code { |
||||||
|
private int currentCount = 0; |
||||||
|
|
||||||
|
private void IncrementCount() |
||||||
|
{ |
||||||
|
currentCount++; |
||||||
|
} |
||||||
|
} |
||||||
@ -0,0 +1,5 @@ |
|||||||
|
using Microsoft.AspNetCore.Components.WebAssembly.Hosting; |
||||||
|
|
||||||
|
var builder = WebAssemblyHostBuilder.CreateDefault(args); |
||||||
|
|
||||||
|
await builder.Build().RunAsync(); |
||||||
@ -0,0 +1,9 @@ |
|||||||
|
@using System.Net.Http |
||||||
|
@using System.Net.Http.Json |
||||||
|
@using Microsoft.AspNetCore.Components.Forms |
||||||
|
@using Microsoft.AspNetCore.Components.Routing |
||||||
|
@using Microsoft.AspNetCore.Components.Web |
||||||
|
@using static Microsoft.AspNetCore.Components.Web.RenderMode |
||||||
|
@using Microsoft.AspNetCore.Components.Web.Virtualization |
||||||
|
@using Microsoft.JSInterop |
||||||
|
@using Client.Client |
||||||
@ -0,0 +1,8 @@ |
|||||||
|
{ |
||||||
|
"Logging": { |
||||||
|
"LogLevel": { |
||||||
|
"Default": "Information", |
||||||
|
"Microsoft.AspNetCore": "Warning" |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
@ -0,0 +1,8 @@ |
|||||||
|
{ |
||||||
|
"Logging": { |
||||||
|
"LogLevel": { |
||||||
|
"Default": "Information", |
||||||
|
"Microsoft.AspNetCore": "Warning" |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
@ -0,0 +1,15 @@ |
|||||||
|
<Project Sdk="Microsoft.NET.Sdk.Web"> |
||||||
|
|
||||||
|
<PropertyGroup> |
||||||
|
<TargetFramework>net10.0</TargetFramework> |
||||||
|
<Nullable>enable</Nullable> |
||||||
|
<ImplicitUsings>enable</ImplicitUsings> |
||||||
|
<BlazorDisableThrowNavigationException>true</BlazorDisableThrowNavigationException> |
||||||
|
</PropertyGroup> |
||||||
|
|
||||||
|
<ItemGroup> |
||||||
|
<ProjectReference Include="..\Client.Client\Client.Client.csproj" /> |
||||||
|
<PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly.Server" Version="10.0.0" /> |
||||||
|
</ItemGroup> |
||||||
|
|
||||||
|
</Project> |
||||||
@ -0,0 +1,22 @@ |
|||||||
|
<!DOCTYPE html> |
||||||
|
<html lang="en"> |
||||||
|
|
||||||
|
<head> |
||||||
|
<meta charset="utf-8" /> |
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" /> |
||||||
|
<base href="/" /> |
||||||
|
<ResourcePreloader /> |
||||||
|
<link rel="stylesheet" href="@Assets["lib/bootstrap/dist/css/bootstrap.min.css"]" /> |
||||||
|
<link rel="stylesheet" href="@Assets["app.css"]" /> |
||||||
|
<link rel="stylesheet" href="@Assets["Client.styles.css"]" /> |
||||||
|
<ImportMap /> |
||||||
|
<link rel="icon" type="image/png" href="favicon.png" /> |
||||||
|
<HeadOutlet /> |
||||||
|
</head> |
||||||
|
|
||||||
|
<body> |
||||||
|
<Routes /> |
||||||
|
<script src="@Assets["_framework/blazor.web.js"]"></script> |
||||||
|
</body> |
||||||
|
|
||||||
|
</html> |
||||||
@ -0,0 +1,23 @@ |
|||||||
|
@inherits LayoutComponentBase |
||||||
|
|
||||||
|
<div class="page"> |
||||||
|
<div class="sidebar"> |
||||||
|
<NavMenu /> |
||||||
|
</div> |
||||||
|
|
||||||
|
<main> |
||||||
|
<div class="top-row px-4"> |
||||||
|
<a href="https://learn.microsoft.com/aspnet/core/" target="_blank">About</a> |
||||||
|
</div> |
||||||
|
|
||||||
|
<article class="content px-4"> |
||||||
|
@Body |
||||||
|
</article> |
||||||
|
</main> |
||||||
|
</div> |
||||||
|
|
||||||
|
<div id="blazor-error-ui" data-nosnippet> |
||||||
|
An unhandled error has occurred. |
||||||
|
<a href="." class="reload">Reload</a> |
||||||
|
<span class="dismiss">🗙</span> |
||||||
|
</div> |
||||||
@ -0,0 +1,98 @@ |
|||||||
|
.page { |
||||||
|
position: relative; |
||||||
|
display: flex; |
||||||
|
flex-direction: column; |
||||||
|
} |
||||||
|
|
||||||
|
main { |
||||||
|
flex: 1; |
||||||
|
} |
||||||
|
|
||||||
|
.sidebar { |
||||||
|
background-image: linear-gradient(180deg, rgb(5, 39, 103) 0%, #3a0647 70%); |
||||||
|
} |
||||||
|
|
||||||
|
.top-row { |
||||||
|
background-color: #f7f7f7; |
||||||
|
border-bottom: 1px solid #d6d5d5; |
||||||
|
justify-content: flex-end; |
||||||
|
height: 3.5rem; |
||||||
|
display: flex; |
||||||
|
align-items: center; |
||||||
|
} |
||||||
|
|
||||||
|
.top-row ::deep a, .top-row ::deep .btn-link { |
||||||
|
white-space: nowrap; |
||||||
|
margin-left: 1.5rem; |
||||||
|
text-decoration: none; |
||||||
|
} |
||||||
|
|
||||||
|
.top-row ::deep a:hover, .top-row ::deep .btn-link:hover { |
||||||
|
text-decoration: underline; |
||||||
|
} |
||||||
|
|
||||||
|
.top-row ::deep a:first-child { |
||||||
|
overflow: hidden; |
||||||
|
text-overflow: ellipsis; |
||||||
|
} |
||||||
|
|
||||||
|
@media (max-width: 640.98px) { |
||||||
|
.top-row { |
||||||
|
justify-content: space-between; |
||||||
|
} |
||||||
|
|
||||||
|
.top-row ::deep a, .top-row ::deep .btn-link { |
||||||
|
margin-left: 0; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
@media (min-width: 641px) { |
||||||
|
.page { |
||||||
|
flex-direction: row; |
||||||
|
} |
||||||
|
|
||||||
|
.sidebar { |
||||||
|
width: 250px; |
||||||
|
height: 100vh; |
||||||
|
position: sticky; |
||||||
|
top: 0; |
||||||
|
} |
||||||
|
|
||||||
|
.top-row { |
||||||
|
position: sticky; |
||||||
|
top: 0; |
||||||
|
z-index: 1; |
||||||
|
} |
||||||
|
|
||||||
|
.top-row.auth ::deep a:first-child { |
||||||
|
flex: 1; |
||||||
|
text-align: right; |
||||||
|
width: 0; |
||||||
|
} |
||||||
|
|
||||||
|
.top-row, article { |
||||||
|
padding-left: 2rem !important; |
||||||
|
padding-right: 1.5rem !important; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
#blazor-error-ui { |
||||||
|
color-scheme: light only; |
||||||
|
background: lightyellow; |
||||||
|
bottom: 0; |
||||||
|
box-shadow: 0 -1px 2px rgba(0, 0, 0, 0.2); |
||||||
|
box-sizing: border-box; |
||||||
|
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; |
||||||
|
} |
||||||
@ -0,0 +1,30 @@ |
|||||||
|
<div class="top-row ps-3 navbar navbar-dark"> |
||||||
|
<div class="container-fluid"> |
||||||
|
<a class="navbar-brand" href="">Client</a> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
|
||||||
|
<input type="checkbox" title="Navigation menu" class="navbar-toggler" /> |
||||||
|
|
||||||
|
<div class="nav-scrollable" onclick="document.querySelector('.navbar-toggler').click()"> |
||||||
|
<nav class="nav flex-column"> |
||||||
|
<div class="nav-item px-3"> |
||||||
|
<NavLink class="nav-link" href="" Match="NavLinkMatch.All"> |
||||||
|
<span class="bi bi-house-door-fill-nav-menu" aria-hidden="true"></span> Home |
||||||
|
</NavLink> |
||||||
|
</div> |
||||||
|
|
||||||
|
<div class="nav-item px-3"> |
||||||
|
<NavLink class="nav-link" href="counter"> |
||||||
|
<span class="bi bi-plus-square-fill-nav-menu" aria-hidden="true"></span> Counter |
||||||
|
</NavLink> |
||||||
|
</div> |
||||||
|
|
||||||
|
<div class="nav-item px-3"> |
||||||
|
<NavLink class="nav-link" href="weather"> |
||||||
|
<span class="bi bi-list-nested-nav-menu" aria-hidden="true"></span> Weather |
||||||
|
</NavLink> |
||||||
|
</div> |
||||||
|
</nav> |
||||||
|
</div> |
||||||
|
|
||||||
@ -0,0 +1,105 @@ |
|||||||
|
.navbar-toggler { |
||||||
|
appearance: none; |
||||||
|
cursor: pointer; |
||||||
|
width: 3.5rem; |
||||||
|
height: 2.5rem; |
||||||
|
color: white; |
||||||
|
position: absolute; |
||||||
|
top: 0.5rem; |
||||||
|
right: 1rem; |
||||||
|
border: 1px solid rgba(255, 255, 255, 0.1); |
||||||
|
background: 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") no-repeat center/1.75rem rgba(255, 255, 255, 0.1); |
||||||
|
} |
||||||
|
|
||||||
|
.navbar-toggler:checked { |
||||||
|
background-color: rgba(255, 255, 255, 0.5); |
||||||
|
} |
||||||
|
|
||||||
|
.top-row { |
||||||
|
min-height: 3.5rem; |
||||||
|
background-color: rgba(0,0,0,0.4); |
||||||
|
} |
||||||
|
|
||||||
|
.navbar-brand { |
||||||
|
font-size: 1.1rem; |
||||||
|
} |
||||||
|
|
||||||
|
.bi { |
||||||
|
display: inline-block; |
||||||
|
position: relative; |
||||||
|
width: 1.25rem; |
||||||
|
height: 1.25rem; |
||||||
|
margin-right: 0.75rem; |
||||||
|
top: -1px; |
||||||
|
background-size: cover; |
||||||
|
} |
||||||
|
|
||||||
|
.bi-house-door-fill-nav-menu { |
||||||
|
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='white' class='bi bi-house-door-fill' viewBox='0 0 16 16'%3E%3Cpath d='M6.5 14.5v-3.505c0-.245.25-.495.5-.495h2c.25 0 .5.25.5.5v3.5a.5.5 0 0 0 .5.5h4a.5.5 0 0 0 .5-.5v-7a.5.5 0 0 0-.146-.354L13 5.793V2.5a.5.5 0 0 0-.5-.5h-1a.5.5 0 0 0-.5.5v1.293L8.354 1.146a.5.5 0 0 0-.708 0l-6 6A.5.5 0 0 0 1.5 7.5v7a.5.5 0 0 0 .5.5h4a.5.5 0 0 0 .5-.5Z'/%3E%3C/svg%3E"); |
||||||
|
} |
||||||
|
|
||||||
|
.bi-plus-square-fill-nav-menu { |
||||||
|
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='white' class='bi bi-plus-square-fill' viewBox='0 0 16 16'%3E%3Cpath d='M2 0a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V2a2 2 0 0 0-2-2H2zm6.5 4.5v3h3a.5.5 0 0 1 0 1h-3v3a.5.5 0 0 1-1 0v-3h-3a.5.5 0 0 1 0-1h3v-3a.5.5 0 0 1 1 0z'/%3E%3C/svg%3E"); |
||||||
|
} |
||||||
|
|
||||||
|
.bi-list-nested-nav-menu { |
||||||
|
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='white' class='bi bi-list-nested' viewBox='0 0 16 16'%3E%3Cpath fill-rule='evenodd' d='M4.5 11.5A.5.5 0 0 1 5 11h10a.5.5 0 0 1 0 1H5a.5.5 0 0 1-.5-.5zm-2-4A.5.5 0 0 1 3 7h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5zm-2-4A.5.5 0 0 1 1 3h10a.5.5 0 0 1 0 1H1a.5.5 0 0 1-.5-.5z'/%3E%3C/svg%3E"); |
||||||
|
} |
||||||
|
|
||||||
|
.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 .nav-link { |
||||||
|
color: #d7d7d7; |
||||||
|
background: none; |
||||||
|
border: none; |
||||||
|
border-radius: 4px; |
||||||
|
height: 3rem; |
||||||
|
display: flex; |
||||||
|
align-items: center; |
||||||
|
line-height: 3rem; |
||||||
|
width: 100%; |
||||||
|
} |
||||||
|
|
||||||
|
.nav-item ::deep a.active { |
||||||
|
background-color: rgba(255,255,255,0.37); |
||||||
|
color: white; |
||||||
|
} |
||||||
|
|
||||||
|
.nav-item ::deep .nav-link:hover { |
||||||
|
background-color: rgba(255,255,255,0.1); |
||||||
|
color: white; |
||||||
|
} |
||||||
|
|
||||||
|
.nav-scrollable { |
||||||
|
display: none; |
||||||
|
} |
||||||
|
|
||||||
|
.navbar-toggler:checked ~ .nav-scrollable { |
||||||
|
display: block; |
||||||
|
} |
||||||
|
|
||||||
|
@media (min-width: 641px) { |
||||||
|
.navbar-toggler { |
||||||
|
display: none; |
||||||
|
} |
||||||
|
|
||||||
|
.nav-scrollable { |
||||||
|
/* Never collapse the sidebar for wide screens */ |
||||||
|
display: block; |
||||||
|
|
||||||
|
/* Allow sidebar to scroll for tall menus */ |
||||||
|
height: calc(100vh - 3.5rem); |
||||||
|
overflow-y: auto; |
||||||
|
} |
||||||
|
} |
||||||
@ -0,0 +1,36 @@ |
|||||||
|
@page "/Error" |
||||||
|
@using System.Diagnostics |
||||||
|
|
||||||
|
<PageTitle>Error</PageTitle> |
||||||
|
|
||||||
|
<h1 class="text-danger">Error.</h1> |
||||||
|
<h2 class="text-danger">An error occurred while processing your request.</h2> |
||||||
|
|
||||||
|
@if (ShowRequestId) |
||||||
|
{ |
||||||
|
<p> |
||||||
|
<strong>Request ID:</strong> <code>@RequestId</code> |
||||||
|
</p> |
||||||
|
} |
||||||
|
|
||||||
|
<h3>Development Mode</h3> |
||||||
|
<p> |
||||||
|
Swapping to <strong>Development</strong> environment will display more detailed information about the error that occurred. |
||||||
|
</p> |
||||||
|
<p> |
||||||
|
<strong>The Development environment shouldn't be enabled for deployed applications.</strong> |
||||||
|
It can result in displaying sensitive information from exceptions to end users. |
||||||
|
For local debugging, enable the <strong>Development</strong> environment by setting the <strong>ASPNETCORE_ENVIRONMENT</strong> environment variable to <strong>Development</strong> |
||||||
|
and restarting the app. |
||||||
|
</p> |
||||||
|
|
||||||
|
@code{ |
||||||
|
[CascadingParameter] |
||||||
|
private HttpContext? HttpContext { get; set; } |
||||||
|
|
||||||
|
private string? RequestId { get; set; } |
||||||
|
private bool ShowRequestId => !string.IsNullOrEmpty(RequestId); |
||||||
|
|
||||||
|
protected override void OnInitialized() => |
||||||
|
RequestId = Activity.Current?.Id ?? HttpContext?.TraceIdentifier; |
||||||
|
} |
||||||
@ -0,0 +1,7 @@ |
|||||||
|
@page "/" |
||||||
|
|
||||||
|
<PageTitle>Home</PageTitle> |
||||||
|
|
||||||
|
<h1>Hello, world!</h1> |
||||||
|
|
||||||
|
Welcome to your new app. |
||||||
@ -0,0 +1,5 @@ |
|||||||
|
@page "/not-found" |
||||||
|
@layout MainLayout |
||||||
|
|
||||||
|
<h3>Not Found</h3> |
||||||
|
<p>Sorry, the content you are looking for does not exist.</p> |
||||||
@ -0,0 +1,64 @@ |
|||||||
|
@page "/weather" |
||||||
|
@attribute [StreamRendering] |
||||||
|
|
||||||
|
<PageTitle>Weather</PageTitle> |
||||||
|
|
||||||
|
<h1>Weather</h1> |
||||||
|
|
||||||
|
<p>This component demonstrates showing data.</p> |
||||||
|
|
||||||
|
@if (forecasts == null) |
||||||
|
{ |
||||||
|
<p><em>Loading...</em></p> |
||||||
|
} |
||||||
|
else |
||||||
|
{ |
||||||
|
<table class="table"> |
||||||
|
<thead> |
||||||
|
<tr> |
||||||
|
<th>Date</th> |
||||||
|
<th aria-label="Temperature in Celsius">Temp. (C)</th> |
||||||
|
<th aria-label="Temperature in Fahrenheit">Temp. (F)</th> |
||||||
|
<th>Summary</th> |
||||||
|
</tr> |
||||||
|
</thead> |
||||||
|
<tbody> |
||||||
|
@foreach (var forecast in forecasts) |
||||||
|
{ |
||||||
|
<tr> |
||||||
|
<td>@forecast.Date.ToShortDateString()</td> |
||||||
|
<td>@forecast.TemperatureC</td> |
||||||
|
<td>@forecast.TemperatureF</td> |
||||||
|
<td>@forecast.Summary</td> |
||||||
|
</tr> |
||||||
|
} |
||||||
|
</tbody> |
||||||
|
</table> |
||||||
|
} |
||||||
|
|
||||||
|
@code { |
||||||
|
private WeatherForecast[]? forecasts; |
||||||
|
|
||||||
|
protected override async Task OnInitializedAsync() |
||||||
|
{ |
||||||
|
// Simulate asynchronous loading to demonstrate streaming rendering |
||||||
|
await Task.Delay(500); |
||||||
|
|
||||||
|
var startDate = DateOnly.FromDateTime(DateTime.Now); |
||||||
|
var summaries = new[] { "Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching" }; |
||||||
|
forecasts = Enumerable.Range(1, 5).Select(index => new WeatherForecast |
||||||
|
{ |
||||||
|
Date = startDate.AddDays(index), |
||||||
|
TemperatureC = Random.Shared.Next(-20, 55), |
||||||
|
Summary = summaries[Random.Shared.Next(summaries.Length)] |
||||||
|
}).ToArray(); |
||||||
|
} |
||||||
|
|
||||||
|
private class WeatherForecast |
||||||
|
{ |
||||||
|
public DateOnly Date { get; set; } |
||||||
|
public int TemperatureC { get; set; } |
||||||
|
public string? Summary { get; set; } |
||||||
|
public int TemperatureF => 32 + (int)(TemperatureC / 0.5556); |
||||||
|
} |
||||||
|
} |
||||||
@ -0,0 +1,6 @@ |
|||||||
|
<Router AppAssembly="typeof(Program).Assembly" AdditionalAssemblies="new[] { typeof(Client._Imports).Assembly }" NotFoundPage="typeof(Pages.NotFound)"> |
||||||
|
<Found Context="routeData"> |
||||||
|
<RouteView RouteData="routeData" DefaultLayout="typeof(Layout.MainLayout)" /> |
||||||
|
<FocusOnNavigate RouteData="routeData" Selector="h1" /> |
||||||
|
</Found> |
||||||
|
</Router> |
||||||
@ -0,0 +1,12 @@ |
|||||||
|
@using System.Net.Http |
||||||
|
@using System.Net.Http.Json |
||||||
|
@using Microsoft.AspNetCore.Components.Forms |
||||||
|
@using Microsoft.AspNetCore.Components.Routing |
||||||
|
@using Microsoft.AspNetCore.Components.Web |
||||||
|
@using static Microsoft.AspNetCore.Components.Web.RenderMode |
||||||
|
@using Microsoft.AspNetCore.Components.Web.Virtualization |
||||||
|
@using Microsoft.JSInterop |
||||||
|
@using Client |
||||||
|
@using Client.Client |
||||||
|
@using Client.Components |
||||||
|
@using Client.Components.Layout |
||||||
@ -0,0 +1,32 @@ |
|||||||
|
using Client.Client.Pages; |
||||||
|
using Client.Components; |
||||||
|
|
||||||
|
var builder = WebApplication.CreateBuilder(args); |
||||||
|
|
||||||
|
// Add services to the container. |
||||||
|
builder.Services.AddRazorComponents() |
||||||
|
.AddInteractiveWebAssemblyComponents(); |
||||||
|
|
||||||
|
var app = builder.Build(); |
||||||
|
|
||||||
|
// Configure the HTTP request pipeline. |
||||||
|
if (app.Environment.IsDevelopment()) |
||||||
|
{ |
||||||
|
app.UseWebAssemblyDebugging(); |
||||||
|
} else |
||||||
|
{ |
||||||
|
app.UseExceptionHandler("/Error", createScopeForErrors: true); |
||||||
|
// The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts. |
||||||
|
app.UseHsts(); |
||||||
|
} |
||||||
|
app.UseStatusCodePagesWithReExecute("/not-found", createScopeForStatusCodePages: true); |
||||||
|
app.UseHttpsRedirection(); |
||||||
|
|
||||||
|
app.UseAntiforgery(); |
||||||
|
|
||||||
|
app.MapStaticAssets(); |
||||||
|
app.MapRazorComponents<App>() |
||||||
|
.AddInteractiveWebAssemblyRenderMode() |
||||||
|
.AddAdditionalAssemblies(typeof(Client.Client._Imports).Assembly); |
||||||
|
|
||||||
|
app.Run(); |
||||||
@ -0,0 +1,25 @@ |
|||||||
|
{ |
||||||
|
"$schema": "https://json.schemastore.org/launchsettings.json", |
||||||
|
"profiles": { |
||||||
|
"http": { |
||||||
|
"commandName": "Project", |
||||||
|
"dotnetRunMessages": true, |
||||||
|
"launchBrowser": true, |
||||||
|
"inspectUri": "{wsProtocol}://{url.hostname}:{url.port}/_framework/debug/ws-proxy?browser={browserInspectUri}", |
||||||
|
"applicationUrl": "http://localhost:5029", |
||||||
|
"environmentVariables": { |
||||||
|
"ASPNETCORE_ENVIRONMENT": "Development" |
||||||
|
} |
||||||
|
}, |
||||||
|
"https": { |
||||||
|
"commandName": "Project", |
||||||
|
"dotnetRunMessages": true, |
||||||
|
"launchBrowser": true, |
||||||
|
"inspectUri": "{wsProtocol}://{url.hostname}:{url.port}/_framework/debug/ws-proxy?browser={browserInspectUri}", |
||||||
|
"applicationUrl": "https://localhost:7182;http://localhost:5029", |
||||||
|
"environmentVariables": { |
||||||
|
"ASPNETCORE_ENVIRONMENT": "Development" |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
@ -0,0 +1,8 @@ |
|||||||
|
{ |
||||||
|
"Logging": { |
||||||
|
"LogLevel": { |
||||||
|
"Default": "Information", |
||||||
|
"Microsoft.AspNetCore": "Warning" |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
@ -0,0 +1,9 @@ |
|||||||
|
{ |
||||||
|
"Logging": { |
||||||
|
"LogLevel": { |
||||||
|
"Default": "Information", |
||||||
|
"Microsoft.AspNetCore": "Warning" |
||||||
|
} |
||||||
|
}, |
||||||
|
"AllowedHosts": "*" |
||||||
|
} |
||||||
@ -0,0 +1,60 @@ |
|||||||
|
html, body { |
||||||
|
font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; |
||||||
|
} |
||||||
|
|
||||||
|
a, .btn-link { |
||||||
|
color: #006bb7; |
||||||
|
} |
||||||
|
|
||||||
|
.btn-primary { |
||||||
|
color: #fff; |
||||||
|
background-color: #1b6ec2; |
||||||
|
border-color: #1861ac; |
||||||
|
} |
||||||
|
|
||||||
|
.btn:focus, .btn:active:focus, .btn-link.nav-link:focus, .form-control:focus, .form-check-input:focus { |
||||||
|
box-shadow: 0 0 0 0.1rem white, 0 0 0 0.25rem #258cfb; |
||||||
|
} |
||||||
|
|
||||||
|
.content { |
||||||
|
padding-top: 1.1rem; |
||||||
|
} |
||||||
|
|
||||||
|
h1:focus { |
||||||
|
outline: none; |
||||||
|
} |
||||||
|
|
||||||
|
.valid.modified:not([type=checkbox]) { |
||||||
|
outline: 1px solid #26b050; |
||||||
|
} |
||||||
|
|
||||||
|
.invalid { |
||||||
|
outline: 1px solid #e50000; |
||||||
|
} |
||||||
|
|
||||||
|
.validation-message { |
||||||
|
color: #e50000; |
||||||
|
} |
||||||
|
|
||||||
|
.blazor-error-boundary { |
||||||
|
background: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTYiIGhlaWdodD0iNDkiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIG92ZXJmbG93PSJoaWRkZW4iPjxkZWZzPjxjbGlwUGF0aCBpZD0iY2xpcDAiPjxyZWN0IHg9IjIzNSIgeT0iNTEiIHdpZHRoPSI1NiIgaGVpZ2h0PSI0OSIvPjwvY2xpcFBhdGg+PC9kZWZzPjxnIGNsaXAtcGF0aD0idXJsKCNjbGlwMCkiIHRyYW5zZm9ybT0idHJhbnNsYXRlKC0yMzUgLTUxKSI+PHBhdGggZD0iTTI2My41MDYgNTFDMjY0LjcxNyA1MSAyNjUuODEzIDUxLjQ4MzcgMjY2LjYwNiA1Mi4yNjU4TDI2Ny4wNTIgNTIuNzk4NyAyNjcuNTM5IDUzLjYyODMgMjkwLjE4NSA5Mi4xODMxIDI5MC41NDUgOTIuNzk1IDI5MC42NTYgOTIuOTk2QzI5MC44NzcgOTMuNTEzIDI5MSA5NC4wODE1IDI5MSA5NC42NzgyIDI5MSA5Ny4wNjUxIDI4OS4wMzggOTkgMjg2LjYxNyA5OUwyNDAuMzgzIDk5QzIzNy45NjMgOTkgMjM2IDk3LjA2NTEgMjM2IDk0LjY3ODIgMjM2IDk0LjM3OTkgMjM2LjAzMSA5NC4wODg2IDIzNi4wODkgOTMuODA3MkwyMzYuMzM4IDkzLjAxNjIgMjM2Ljg1OCA5Mi4xMzE0IDI1OS40NzMgNTMuNjI5NCAyNTkuOTYxIDUyLjc5ODUgMjYwLjQwNyA1Mi4yNjU4QzI2MS4yIDUxLjQ4MzcgMjYyLjI5NiA1MSAyNjMuNTA2IDUxWk0yNjMuNTg2IDY2LjAxODNDMjYwLjczNyA2Ni4wMTgzIDI1OS4zMTMgNjcuMTI0NSAyNTkuMzEzIDY5LjMzNyAyNTkuMzEzIDY5LjYxMDIgMjU5LjMzMiA2OS44NjA4IDI1OS4zNzEgNzAuMDg4N0wyNjEuNzk1IDg0LjAxNjEgMjY1LjM4IDg0LjAxNjEgMjY3LjgyMSA2OS43NDc1QzI2Ny44NiA2OS43MzA5IDI2Ny44NzkgNjkuNTg3NyAyNjcuODc5IDY5LjMxNzkgMjY3Ljg3OSA2Ny4xMTgyIDI2Ni40NDggNjYuMDE4MyAyNjMuNTg2IDY2LjAxODNaTTI2My41NzYgODYuMDU0N0MyNjEuMDQ5IDg2LjA1NDcgMjU5Ljc4NiA4Ny4zMDA1IDI1OS43ODYgODkuNzkyMSAyNTkuNzg2IDkyLjI4MzcgMjYxLjA0OSA5My41Mjk1IDI2My41NzYgOTMuNTI5NSAyNjYuMTE2IDkzLjUyOTUgMjY3LjM4NyA5Mi4yODM3IDI2Ny4zODcgODkuNzkyMSAyNjcuMzg3IDg3LjMwMDUgMjY2LjExNiA4Ni4wNTQ3IDI2My41NzYgODYuMDU0N1oiIGZpbGw9IiNGRkU1MDAiIGZpbGwtcnVsZT0iZXZlbm9kZCIvPjwvZz48L3N2Zz4=) no-repeat 1rem/1.8rem, #b32121; |
||||||
|
padding: 1rem 1rem 1rem 3.7rem; |
||||||
|
color: white; |
||||||
|
} |
||||||
|
|
||||||
|
.blazor-error-boundary::after { |
||||||
|
content: "An error has occurred." |
||||||
|
} |
||||||
|
|
||||||
|
.darker-border-checkbox.form-check-input { |
||||||
|
border-color: #929292; |
||||||
|
} |
||||||
|
|
||||||
|
.form-floating > .form-control-plaintext::placeholder, .form-floating > .form-control::placeholder { |
||||||
|
color: var(--bs-secondary-color); |
||||||
|
text-align: end; |
||||||
|
} |
||||||
|
|
||||||
|
.form-floating > .form-control-plaintext:focus::placeholder, .form-floating > .form-control:focus::placeholder { |
||||||
|
text-align: start; |
||||||
|
} |
||||||
|
After Width: | Height: | Size: 1.1 KiB |
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@ -0,0 +1,597 @@ |
|||||||
|
/*! |
||||||
|
* Bootstrap Reboot v5.3.3 (https://getbootstrap.com/) |
||||||
|
* Copyright 2011-2024 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-color: #212529; |
||||||
|
--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-highlight-color: #dee2e6; |
||||||
|
--bs-highlight-bg: #664d03; |
||||||
|
--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, h5, h4, h3, h2, h1 { |
||||||
|
margin-top: 0; |
||||||
|
margin-bottom: 0.5rem; |
||||||
|
font-weight: 500; |
||||||
|
line-height: 1.2; |
||||||
|
color: var(--bs-heading-color); |
||||||
|
} |
||||||
|
|
||||||
|
h1 { |
||||||
|
font-size: calc(1.375rem + 1.5vw); |
||||||
|
} |
||||||
|
@media (min-width: 1200px) { |
||||||
|
h1 { |
||||||
|
font-size: 2.5rem; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
h2 { |
||||||
|
font-size: calc(1.325rem + 0.9vw); |
||||||
|
} |
||||||
|
@media (min-width: 1200px) { |
||||||
|
h2 { |
||||||
|
font-size: 2rem; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
h3 { |
||||||
|
font-size: calc(1.3rem + 0.6vw); |
||||||
|
} |
||||||
|
@media (min-width: 1200px) { |
||||||
|
h3 { |
||||||
|
font-size: 1.75rem; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
h4 { |
||||||
|
font-size: calc(1.275rem + 0.3vw); |
||||||
|
} |
||||||
|
@media (min-width: 1200px) { |
||||||
|
h4 { |
||||||
|
font-size: 1.5rem; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
h5 { |
||||||
|
font-size: 1.25rem; |
||||||
|
} |
||||||
|
|
||||||
|
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 { |
||||||
|
font-size: 0.875em; |
||||||
|
} |
||||||
|
|
||||||
|
mark { |
||||||
|
padding: 0.1875em; |
||||||
|
color: var(--bs-highlight-color); |
||||||
|
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; |
||||||
|
} |
||||||
|
|
||||||
|
/*# sourceMappingURL=bootstrap-reboot.css.map */ |
||||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@ -0,0 +1,594 @@ |
|||||||
|
/*! |
||||||
|
* Bootstrap Reboot v5.3.3 (https://getbootstrap.com/) |
||||||
|
* Copyright 2011-2024 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-color: #212529; |
||||||
|
--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-highlight-color: #dee2e6; |
||||||
|
--bs-highlight-bg: #664d03; |
||||||
|
--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, h5, h4, h3, h2, h1 { |
||||||
|
margin-top: 0; |
||||||
|
margin-bottom: 0.5rem; |
||||||
|
font-weight: 500; |
||||||
|
line-height: 1.2; |
||||||
|
color: var(--bs-heading-color); |
||||||
|
} |
||||||
|
|
||||||
|
h1 { |
||||||
|
font-size: calc(1.375rem + 1.5vw); |
||||||
|
} |
||||||
|
@media (min-width: 1200px) { |
||||||
|
h1 { |
||||||
|
font-size: 2.5rem; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
h2 { |
||||||
|
font-size: calc(1.325rem + 0.9vw); |
||||||
|
} |
||||||
|
@media (min-width: 1200px) { |
||||||
|
h2 { |
||||||
|
font-size: 2rem; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
h3 { |
||||||
|
font-size: calc(1.3rem + 0.6vw); |
||||||
|
} |
||||||
|
@media (min-width: 1200px) { |
||||||
|
h3 { |
||||||
|
font-size: 1.75rem; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
h4 { |
||||||
|
font-size: calc(1.275rem + 0.3vw); |
||||||
|
} |
||||||
|
@media (min-width: 1200px) { |
||||||
|
h4 { |
||||||
|
font-size: 1.5rem; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
h5 { |
||||||
|
font-size: 1.25rem; |
||||||
|
} |
||||||
|
|
||||||
|
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-right: 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-right: 0; |
||||||
|
} |
||||||
|
|
||||||
|
blockquote { |
||||||
|
margin: 0 0 1rem; |
||||||
|
} |
||||||
|
|
||||||
|
b, |
||||||
|
strong { |
||||||
|
font-weight: bolder; |
||||||
|
} |
||||||
|
|
||||||
|
small { |
||||||
|
font-size: 0.875em; |
||||||
|
} |
||||||
|
|
||||||
|
mark { |
||||||
|
padding: 0.1875em; |
||||||
|
color: var(--bs-highlight-color); |
||||||
|
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: right; |
||||||
|
} |
||||||
|
|
||||||
|
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: right; |
||||||
|
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: right; |
||||||
|
} |
||||||
|
|
||||||
|
::-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; |
||||||
|
} |
||||||
|
|
||||||
|
[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; |
||||||
|
} |
||||||
|
/*# sourceMappingURL=bootstrap-reboot.rtl.css.map */ |
||||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@ -0,0 +1,19 @@ |
|||||||
|
@page "/counter" |
||||||
|
@rendermode InteractiveWebAssembly |
||||||
|
|
||||||
|
<PageTitle>Counter</PageTitle> |
||||||
|
|
||||||
|
<h1>Counter</h1> |
||||||
|
|
||||||
|
<p role="status">Current count: @currentCount</p> |
||||||
|
|
||||||
|
<button class="btn btn-primary" @onclick="IncrementCount">Click me</button> |
||||||
|
|
||||||
|
@code { |
||||||
|
private int currentCount = 0; |
||||||
|
|
||||||
|
private void IncrementCount() |
||||||
|
{ |
||||||
|
currentCount++; |
||||||
|
} |
||||||
|
} |
||||||
@ -0,0 +1,5 @@ |
|||||||
|
using Microsoft.AspNetCore.Components.WebAssembly.Hosting; |
||||||
|
|
||||||
|
var builder = WebAssemblyHostBuilder.CreateDefault(args); |
||||||
|
|
||||||
|
await builder.Build().RunAsync(); |
||||||
@ -0,0 +1,20 @@ |
|||||||
|
<Project Sdk="Microsoft.NET.Sdk.BlazorWebAssembly"> |
||||||
|
|
||||||
|
<PropertyGroup> |
||||||
|
<TargetFramework>net10.0</TargetFramework> |
||||||
|
<ImplicitUsings>enable</ImplicitUsings> |
||||||
|
<Nullable>enable</Nullable> |
||||||
|
<NoDefaultLaunchSettingsFile>true</NoDefaultLaunchSettingsFile> |
||||||
|
<StaticWebAssetProjectMode>Default</StaticWebAssetProjectMode> |
||||||
|
<BlazorDisableThrowNavigationException>true</BlazorDisableThrowNavigationException> |
||||||
|
</PropertyGroup> |
||||||
|
|
||||||
|
<ItemGroup> |
||||||
|
<PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly" Version="10.0.0" /> |
||||||
|
</ItemGroup> |
||||||
|
|
||||||
|
<ItemGroup> |
||||||
|
<ProjectReference Include="..\..\Components\Components.csproj" /> |
||||||
|
</ItemGroup> |
||||||
|
|
||||||
|
</Project> |
||||||
@ -0,0 +1,9 @@ |
|||||||
|
@using System.Net.Http |
||||||
|
@using System.Net.Http.Json |
||||||
|
@using Microsoft.AspNetCore.Components.Forms |
||||||
|
@using Microsoft.AspNetCore.Components.Routing |
||||||
|
@using Microsoft.AspNetCore.Components.Web |
||||||
|
@using static Microsoft.AspNetCore.Components.Web.RenderMode |
||||||
|
@using Microsoft.AspNetCore.Components.Web.Virtualization |
||||||
|
@using Microsoft.JSInterop |
||||||
|
@using Pyre.Client |
||||||
@ -0,0 +1,8 @@ |
|||||||
|
{ |
||||||
|
"Logging": { |
||||||
|
"LogLevel": { |
||||||
|
"Default": "Information", |
||||||
|
"Microsoft.AspNetCore": "Warning" |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
@ -0,0 +1,8 @@ |
|||||||
|
{ |
||||||
|
"Logging": { |
||||||
|
"LogLevel": { |
||||||
|
"Default": "Information", |
||||||
|
"Microsoft.AspNetCore": "Warning" |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
@ -0,0 +1,27 @@ |
|||||||
|
<!DOCTYPE html> |
||||||
|
<html lang="en"> |
||||||
|
|
||||||
|
<head> |
||||||
|
<meta charset="utf-8" /> |
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" /> |
||||||
|
<base href="/" /> |
||||||
|
<ResourcePreloader /> |
||||||
|
<link rel="stylesheet" href="@Assets["lib/bootstrap/dist/css/bootstrap.min.css"]" /> |
||||||
|
<link rel="stylesheet" href="@Assets["app.css"]" /> |
||||||
|
<link rel="stylesheet" href="@Assets["Pyre.styles.css"]" /> |
||||||
|
<ImportMap /> |
||||||
|
<link rel="icon" type="image/png" href="favicon.png" /> |
||||||
|
<HeadOutlet /> |
||||||
|
<link href="https://fonts.googleapis.com/css?family=Roboto:300,400,500,700&display=swap" rel="stylesheet" /> |
||||||
|
<link href="@Assets["_content/MudBlazor/MudBlazor.min.css"]" rel="stylesheet" /> |
||||||
|
|
||||||
|
</head> |
||||||
|
|
||||||
|
<body> |
||||||
|
<Routes /> |
||||||
|
<script src="@Assets["_framework/blazor.web.js"]"></script> |
||||||
|
<script src="@Assets["_content/MudBlazor/MudBlazor.min.js"]"></script> |
||||||
|
|
||||||
|
</body> |
||||||
|
|
||||||
|
</html> |
||||||
@ -0,0 +1,56 @@ |
|||||||
|
@using global::Components.Feedback |
||||||
|
@using global::Components.Feedback |
||||||
|
@using global::Components.Feedback |
||||||
|
@using global::Components.Feedback |
||||||
|
@using Model.Feedback |
||||||
|
@inherits LayoutComponentBase |
||||||
|
|
||||||
|
|
||||||
|
<AlertComponent Type="@SeverityType.Warning"> |
||||||
|
<Title>Work In Progress and Not Fully Tested</Title> |
||||||
|
<Message> |
||||||
|
Build Calculator hasn't been thoroughly tested. Bugs and inaccurate results assumed. |
||||||
|
<br/> |
||||||
|
Currently not considering running out of alloy and ether to harvest. |
||||||
|
<br/> |
||||||
|
<br/> |
||||||
|
Build Calculator was built based on a much older version of the game and was only quickly modified for the |
||||||
|
June 2025 Playtest version, so the above disclaimer is only more true. |
||||||
|
<br/> |
||||||
|
Expect even more oddities and invalid data then the above warning implies. |
||||||
|
</Message> |
||||||
|
</AlertComponent> |
||||||
|
|
||||||
|
|
||||||
|
<div class="page"> |
||||||
|
<div class="sidebar"> |
||||||
|
<NavMenu /> |
||||||
|
</div> |
||||||
|
|
||||||
|
<main> |
||||||
|
<div class="top-row px-4"> |
||||||
|
<a href="https://learn.microsoft.com/aspnet/core/" target="_blank">About</a> |
||||||
|
</div> |
||||||
|
|
||||||
|
<article class="content px-4"> |
||||||
|
@Body |
||||||
|
</article> |
||||||
|
</main> |
||||||
|
</div> |
||||||
|
|
||||||
|
<div id="blazor-error-ui" data-nosnippet> |
||||||
|
An unhandled error has occurred. |
||||||
|
<a href="." class="reload">Reload</a> |
||||||
|
<span class="dismiss">🗙</span> |
||||||
|
</div> |
||||||
|
|
||||||
|
|
||||||
|
@* Required *@ |
||||||
|
<MudThemeProvider /> |
||||||
|
<MudPopoverProvider /> |
||||||
|
|
||||||
|
@* Needed for dialogs *@ |
||||||
|
<MudDialogProvider /> |
||||||
|
|
||||||
|
@* Needed for snackbars *@ |
||||||
|
<MudSnackbarProvider /> |
||||||
@ -0,0 +1,98 @@ |
|||||||
|
.page { |
||||||
|
position: relative; |
||||||
|
display: flex; |
||||||
|
flex-direction: column; |
||||||
|
} |
||||||
|
|
||||||
|
main { |
||||||
|
flex: 1; |
||||||
|
} |
||||||
|
|
||||||
|
.sidebar { |
||||||
|
background-image: linear-gradient(180deg, rgb(5, 39, 103) 0%, #3a0647 70%); |
||||||
|
} |
||||||
|
|
||||||
|
.top-row { |
||||||
|
background-color: #f7f7f7; |
||||||
|
border-bottom: 1px solid #d6d5d5; |
||||||
|
justify-content: flex-end; |
||||||
|
height: 3.5rem; |
||||||
|
display: flex; |
||||||
|
align-items: center; |
||||||
|
} |
||||||
|
|
||||||
|
.top-row ::deep a, .top-row ::deep .btn-link { |
||||||
|
white-space: nowrap; |
||||||
|
margin-left: 1.5rem; |
||||||
|
text-decoration: none; |
||||||
|
} |
||||||
|
|
||||||
|
.top-row ::deep a:hover, .top-row ::deep .btn-link:hover { |
||||||
|
text-decoration: underline; |
||||||
|
} |
||||||
|
|
||||||
|
.top-row ::deep a:first-child { |
||||||
|
overflow: hidden; |
||||||
|
text-overflow: ellipsis; |
||||||
|
} |
||||||
|
|
||||||
|
@media (max-width: 640.98px) { |
||||||
|
.top-row { |
||||||
|
justify-content: space-between; |
||||||
|
} |
||||||
|
|
||||||
|
.top-row ::deep a, .top-row ::deep .btn-link { |
||||||
|
margin-left: 0; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
@media (min-width: 641px) { |
||||||
|
.page { |
||||||
|
flex-direction: row; |
||||||
|
} |
||||||
|
|
||||||
|
.sidebar { |
||||||
|
width: 250px; |
||||||
|
height: 100vh; |
||||||
|
position: sticky; |
||||||
|
top: 0; |
||||||
|
} |
||||||
|
|
||||||
|
.top-row { |
||||||
|
position: sticky; |
||||||
|
top: 0; |
||||||
|
z-index: 1; |
||||||
|
} |
||||||
|
|
||||||
|
.top-row.auth ::deep a:first-child { |
||||||
|
flex: 1; |
||||||
|
text-align: right; |
||||||
|
width: 0; |
||||||
|
} |
||||||
|
|
||||||
|
.top-row, article { |
||||||
|
padding-left: 2rem !important; |
||||||
|
padding-right: 1.5rem !important; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
#blazor-error-ui { |
||||||
|
color-scheme: light only; |
||||||
|
background: lightyellow; |
||||||
|
bottom: 0; |
||||||
|
box-shadow: 0 -1px 2px rgba(0, 0, 0, 0.2); |
||||||
|
box-sizing: border-box; |
||||||
|
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; |
||||||
|
} |
||||||
@ -0,0 +1,30 @@ |
|||||||
|
<div class="top-row ps-3 navbar navbar-dark"> |
||||||
|
<div class="container-fluid"> |
||||||
|
<a class="navbar-brand" href="">Pyre</a> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
|
||||||
|
<input type="checkbox" title="Navigation menu" class="navbar-toggler" /> |
||||||
|
|
||||||
|
<div class="nav-scrollable" onclick="document.querySelector('.navbar-toggler').click()"> |
||||||
|
<nav class="nav flex-column"> |
||||||
|
<div class="nav-item px-3"> |
||||||
|
<NavLink class="nav-link" href="" Match="NavLinkMatch.All"> |
||||||
|
<span class="bi bi-house-door-fill-nav-menu" aria-hidden="true"></span> Home |
||||||
|
</NavLink> |
||||||
|
</div> |
||||||
|
|
||||||
|
<div class="nav-item px-3"> |
||||||
|
<NavLink class="nav-link" href="counter"> |
||||||
|
<span class="bi bi-plus-square-fill-nav-menu" aria-hidden="true"></span> Counter |
||||||
|
</NavLink> |
||||||
|
</div> |
||||||
|
|
||||||
|
<div class="nav-item px-3"> |
||||||
|
<NavLink class="nav-link" href="weather"> |
||||||
|
<span class="bi bi-list-nested-nav-menu" aria-hidden="true"></span> Weather |
||||||
|
</NavLink> |
||||||
|
</div> |
||||||
|
</nav> |
||||||
|
</div> |
||||||
|
|
||||||
@ -0,0 +1,105 @@ |
|||||||
|
.navbar-toggler { |
||||||
|
appearance: none; |
||||||
|
cursor: pointer; |
||||||
|
width: 3.5rem; |
||||||
|
height: 2.5rem; |
||||||
|
color: white; |
||||||
|
position: absolute; |
||||||
|
top: 0.5rem; |
||||||
|
right: 1rem; |
||||||
|
border: 1px solid rgba(255, 255, 255, 0.1); |
||||||
|
background: 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") no-repeat center/1.75rem rgba(255, 255, 255, 0.1); |
||||||
|
} |
||||||
|
|
||||||
|
.navbar-toggler:checked { |
||||||
|
background-color: rgba(255, 255, 255, 0.5); |
||||||
|
} |
||||||
|
|
||||||
|
.top-row { |
||||||
|
min-height: 3.5rem; |
||||||
|
background-color: rgba(0,0,0,0.4); |
||||||
|
} |
||||||
|
|
||||||
|
.navbar-brand { |
||||||
|
font-size: 1.1rem; |
||||||
|
} |
||||||
|
|
||||||
|
.bi { |
||||||
|
display: inline-block; |
||||||
|
position: relative; |
||||||
|
width: 1.25rem; |
||||||
|
height: 1.25rem; |
||||||
|
margin-right: 0.75rem; |
||||||
|
top: -1px; |
||||||
|
background-size: cover; |
||||||
|
} |
||||||
|
|
||||||
|
.bi-house-door-fill-nav-menu { |
||||||
|
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='white' class='bi bi-house-door-fill' viewBox='0 0 16 16'%3E%3Cpath d='M6.5 14.5v-3.505c0-.245.25-.495.5-.495h2c.25 0 .5.25.5.5v3.5a.5.5 0 0 0 .5.5h4a.5.5 0 0 0 .5-.5v-7a.5.5 0 0 0-.146-.354L13 5.793V2.5a.5.5 0 0 0-.5-.5h-1a.5.5 0 0 0-.5.5v1.293L8.354 1.146a.5.5 0 0 0-.708 0l-6 6A.5.5 0 0 0 1.5 7.5v7a.5.5 0 0 0 .5.5h4a.5.5 0 0 0 .5-.5Z'/%3E%3C/svg%3E"); |
||||||
|
} |
||||||
|
|
||||||
|
.bi-plus-square-fill-nav-menu { |
||||||
|
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='white' class='bi bi-plus-square-fill' viewBox='0 0 16 16'%3E%3Cpath d='M2 0a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V2a2 2 0 0 0-2-2H2zm6.5 4.5v3h3a.5.5 0 0 1 0 1h-3v3a.5.5 0 0 1-1 0v-3h-3a.5.5 0 0 1 0-1h3v-3a.5.5 0 0 1 1 0z'/%3E%3C/svg%3E"); |
||||||
|
} |
||||||
|
|
||||||
|
.bi-list-nested-nav-menu { |
||||||
|
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='white' class='bi bi-list-nested' viewBox='0 0 16 16'%3E%3Cpath fill-rule='evenodd' d='M4.5 11.5A.5.5 0 0 1 5 11h10a.5.5 0 0 1 0 1H5a.5.5 0 0 1-.5-.5zm-2-4A.5.5 0 0 1 3 7h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5zm-2-4A.5.5 0 0 1 1 3h10a.5.5 0 0 1 0 1H1a.5.5 0 0 1-.5-.5z'/%3E%3C/svg%3E"); |
||||||
|
} |
||||||
|
|
||||||
|
.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 .nav-link { |
||||||
|
color: #d7d7d7; |
||||||
|
background: none; |
||||||
|
border: none; |
||||||
|
border-radius: 4px; |
||||||
|
height: 3rem; |
||||||
|
display: flex; |
||||||
|
align-items: center; |
||||||
|
line-height: 3rem; |
||||||
|
width: 100%; |
||||||
|
} |
||||||
|
|
||||||
|
.nav-item ::deep a.active { |
||||||
|
background-color: rgba(255,255,255,0.37); |
||||||
|
color: white; |
||||||
|
} |
||||||
|
|
||||||
|
.nav-item ::deep .nav-link:hover { |
||||||
|
background-color: rgba(255,255,255,0.1); |
||||||
|
color: white; |
||||||
|
} |
||||||
|
|
||||||
|
.nav-scrollable { |
||||||
|
display: none; |
||||||
|
} |
||||||
|
|
||||||
|
.navbar-toggler:checked ~ .nav-scrollable { |
||||||
|
display: block; |
||||||
|
} |
||||||
|
|
||||||
|
@media (min-width: 641px) { |
||||||
|
.navbar-toggler { |
||||||
|
display: none; |
||||||
|
} |
||||||
|
|
||||||
|
.nav-scrollable { |
||||||
|
/* Never collapse the sidebar for wide screens */ |
||||||
|
display: block; |
||||||
|
|
||||||
|
/* Allow sidebar to scroll for tall menus */ |
||||||
|
height: calc(100vh - 3.5rem); |
||||||
|
overflow-y: auto; |
||||||
|
} |
||||||
|
} |
||||||
@ -0,0 +1,36 @@ |
|||||||
|
@page "/Error" |
||||||
|
@using System.Diagnostics |
||||||
|
|
||||||
|
<PageTitle>Error</PageTitle> |
||||||
|
|
||||||
|
<h1 class="text-danger">Error.</h1> |
||||||
|
<h2 class="text-danger">An error occurred while processing your request.</h2> |
||||||
|
|
||||||
|
@if (ShowRequestId) |
||||||
|
{ |
||||||
|
<p> |
||||||
|
<strong>Request ID:</strong> <code>@RequestId</code> |
||||||
|
</p> |
||||||
|
} |
||||||
|
|
||||||
|
<h3>Development Mode</h3> |
||||||
|
<p> |
||||||
|
Swapping to <strong>Development</strong> environment will display more detailed information about the error that occurred. |
||||||
|
</p> |
||||||
|
<p> |
||||||
|
<strong>The Development environment shouldn't be enabled for deployed applications.</strong> |
||||||
|
It can result in displaying sensitive information from exceptions to end users. |
||||||
|
For local debugging, enable the <strong>Development</strong> environment by setting the <strong>ASPNETCORE_ENVIRONMENT</strong> environment variable to <strong>Development</strong> |
||||||
|
and restarting the app. |
||||||
|
</p> |
||||||
|
|
||||||
|
@code{ |
||||||
|
[CascadingParameter] |
||||||
|
private HttpContext? HttpContext { get; set; } |
||||||
|
|
||||||
|
private string? RequestId { get; set; } |
||||||
|
private bool ShowRequestId => !string.IsNullOrEmpty(RequestId); |
||||||
|
|
||||||
|
protected override void OnInitialized() => |
||||||
|
RequestId = Activity.Current?.Id ?? HttpContext?.TraceIdentifier; |
||||||
|
} |
||||||
@ -0,0 +1,7 @@ |
|||||||
|
@page "/" |
||||||
|
|
||||||
|
<PageTitle>Home</PageTitle> |
||||||
|
|
||||||
|
<h1>Hello, world!</h1> |
||||||
|
|
||||||
|
Welcome to your new app. |
||||||
@ -0,0 +1,5 @@ |
|||||||
|
@page "/not-found" |
||||||
|
@layout MainLayout |
||||||
|
|
||||||
|
<h3>Not Found</h3> |
||||||
|
<p>Sorry, the content you are looking for does not exist.</p> |
||||||
@ -0,0 +1,64 @@ |
|||||||
|
@page "/weather" |
||||||
|
@attribute [StreamRendering] |
||||||
|
|
||||||
|
<PageTitle>Weather</PageTitle> |
||||||
|
|
||||||
|
<h1>Weather</h1> |
||||||
|
|
||||||
|
<p>This component demonstrates showing data.</p> |
||||||
|
|
||||||
|
@if (forecasts == null) |
||||||
|
{ |
||||||
|
<p><em>Loading...</em></p> |
||||||
|
} |
||||||
|
else |
||||||
|
{ |
||||||
|
<table class="table"> |
||||||
|
<thead> |
||||||
|
<tr> |
||||||
|
<th>Date</th> |
||||||
|
<th aria-label="Temperature in Celsius">Temp. (C)</th> |
||||||
|
<th aria-label="Temperature in Fahrenheit">Temp. (F)</th> |
||||||
|
<th>Summary</th> |
||||||
|
</tr> |
||||||
|
</thead> |
||||||
|
<tbody> |
||||||
|
@foreach (var forecast in forecasts) |
||||||
|
{ |
||||||
|
<tr> |
||||||
|
<td>@forecast.Date.ToShortDateString()</td> |
||||||
|
<td>@forecast.TemperatureC</td> |
||||||
|
<td>@forecast.TemperatureF</td> |
||||||
|
<td>@forecast.Summary</td> |
||||||
|
</tr> |
||||||
|
} |
||||||
|
</tbody> |
||||||
|
</table> |
||||||
|
} |
||||||
|
|
||||||
|
@code { |
||||||
|
private WeatherForecast[]? forecasts; |
||||||
|
|
||||||
|
protected override async Task OnInitializedAsync() |
||||||
|
{ |
||||||
|
// Simulate asynchronous loading to demonstrate streaming rendering |
||||||
|
await Task.Delay(500); |
||||||
|
|
||||||
|
var startDate = DateOnly.FromDateTime(DateTime.Now); |
||||||
|
var summaries = new[] { "Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching" }; |
||||||
|
forecasts = Enumerable.Range(1, 5).Select(index => new WeatherForecast |
||||||
|
{ |
||||||
|
Date = startDate.AddDays(index), |
||||||
|
TemperatureC = Random.Shared.Next(-20, 55), |
||||||
|
Summary = summaries[Random.Shared.Next(summaries.Length)] |
||||||
|
}).ToArray(); |
||||||
|
} |
||||||
|
|
||||||
|
private class WeatherForecast |
||||||
|
{ |
||||||
|
public DateOnly Date { get; set; } |
||||||
|
public int TemperatureC { get; set; } |
||||||
|
public string? Summary { get; set; } |
||||||
|
public int TemperatureF => 32 + (int)(TemperatureC / 0.5556); |
||||||
|
} |
||||||
|
} |
||||||
@ -0,0 +1,6 @@ |
|||||||
|
<Router AppAssembly="typeof(Program).Assembly" AdditionalAssemblies="new[] { typeof(Client._Imports).Assembly }" NotFoundPage="typeof(Pages.NotFound)"> |
||||||
|
<Found Context="routeData"> |
||||||
|
<RouteView RouteData="routeData" DefaultLayout="typeof(Layout.MainLayout)" /> |
||||||
|
<FocusOnNavigate RouteData="routeData" Selector="h1" /> |
||||||
|
</Found> |
||||||
|
</Router> |
||||||
@ -0,0 +1,13 @@ |
|||||||
|
@using System.Net.Http |
||||||
|
@using System.Net.Http.Json |
||||||
|
@using Microsoft.AspNetCore.Components.Forms |
||||||
|
@using Microsoft.AspNetCore.Components.Routing |
||||||
|
@using Microsoft.AspNetCore.Components.Web |
||||||
|
@using static Microsoft.AspNetCore.Components.Web.RenderMode |
||||||
|
@using Microsoft.AspNetCore.Components.Web.Virtualization |
||||||
|
@using Microsoft.JSInterop |
||||||
|
@using Pyre |
||||||
|
@using Pyre.Client |
||||||
|
@using Pyre.Components |
||||||
|
@using Pyre.Components.Layout |
||||||
|
@using MudBlazor |
||||||
@ -0,0 +1,38 @@ |
|||||||
|
using MudBlazor.Services; |
||||||
|
using Pyre.Client.Pages; |
||||||
|
using Pyre.Components; |
||||||
|
using Components.Display; |
||||||
|
using Components.Feedback; |
||||||
|
|
||||||
|
|
||||||
|
var builder = WebApplication.CreateBuilder(args); |
||||||
|
|
||||||
|
// Add services to the container. |
||||||
|
builder.Services.AddRazorComponents() |
||||||
|
.AddInteractiveWebAssemblyComponents(); |
||||||
|
|
||||||
|
builder.Services.AddMudServices(); |
||||||
|
|
||||||
|
var app = builder.Build(); |
||||||
|
|
||||||
|
// Configure the HTTP request pipeline. |
||||||
|
if (app.Environment.IsDevelopment()) |
||||||
|
{ |
||||||
|
app.UseWebAssemblyDebugging(); |
||||||
|
} else |
||||||
|
{ |
||||||
|
app.UseExceptionHandler("/Error", createScopeForErrors: true); |
||||||
|
// The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts. |
||||||
|
app.UseHsts(); |
||||||
|
} |
||||||
|
app.UseStatusCodePagesWithReExecute("/not-found", createScopeForStatusCodePages: true); |
||||||
|
app.UseHttpsRedirection(); |
||||||
|
|
||||||
|
app.UseAntiforgery(); |
||||||
|
|
||||||
|
app.MapStaticAssets(); |
||||||
|
app.MapRazorComponents<App>() |
||||||
|
.AddInteractiveWebAssemblyRenderMode() |
||||||
|
.AddAdditionalAssemblies(typeof(Pyre.Client._Imports).Assembly); |
||||||
|
|
||||||
|
app.Run(); |
||||||
@ -0,0 +1,25 @@ |
|||||||
|
{ |
||||||
|
"$schema": "https://json.schemastore.org/launchsettings.json", |
||||||
|
"profiles": { |
||||||
|
"http": { |
||||||
|
"commandName": "Project", |
||||||
|
"dotnetRunMessages": true, |
||||||
|
"launchBrowser": true, |
||||||
|
"inspectUri": "{wsProtocol}://{url.hostname}:{url.port}/_framework/debug/ws-proxy?browser={browserInspectUri}", |
||||||
|
"applicationUrl": "http://localhost:5218", |
||||||
|
"environmentVariables": { |
||||||
|
"ASPNETCORE_ENVIRONMENT": "Development" |
||||||
|
} |
||||||
|
}, |
||||||
|
"https": { |
||||||
|
"commandName": "Project", |
||||||
|
"dotnetRunMessages": true, |
||||||
|
"launchBrowser": true, |
||||||
|
"inspectUri": "{wsProtocol}://{url.hostname}:{url.port}/_framework/debug/ws-proxy?browser={browserInspectUri}", |
||||||
|
"applicationUrl": "https://localhost:7245;http://localhost:5218", |
||||||
|
"environmentVariables": { |
||||||
|
"ASPNETCORE_ENVIRONMENT": "Development" |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
@ -0,0 +1,16 @@ |
|||||||
|
<Project Sdk="Microsoft.NET.Sdk.Web"> |
||||||
|
|
||||||
|
<PropertyGroup> |
||||||
|
<TargetFramework>net10.0</TargetFramework> |
||||||
|
<Nullable>enable</Nullable> |
||||||
|
<ImplicitUsings>enable</ImplicitUsings> |
||||||
|
<BlazorDisableThrowNavigationException>true</BlazorDisableThrowNavigationException> |
||||||
|
</PropertyGroup> |
||||||
|
|
||||||
|
<ItemGroup> |
||||||
|
<PackageReference Include="MudBlazor" Version="8.14.0" /> |
||||||
|
<ProjectReference Include="..\Pyre.Client\Pyre.Client.csproj" /> |
||||||
|
<PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly.Server" Version="10.0.0" /> |
||||||
|
</ItemGroup> |
||||||
|
|
||||||
|
</Project> |
||||||
@ -0,0 +1,8 @@ |
|||||||
|
{ |
||||||
|
"Logging": { |
||||||
|
"LogLevel": { |
||||||
|
"Default": "Information", |
||||||
|
"Microsoft.AspNetCore": "Warning" |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
@ -0,0 +1,9 @@ |
|||||||
|
{ |
||||||
|
"Logging": { |
||||||
|
"LogLevel": { |
||||||
|
"Default": "Information", |
||||||
|
"Microsoft.AspNetCore": "Warning" |
||||||
|
} |
||||||
|
}, |
||||||
|
"AllowedHosts": "*" |
||||||
|
} |
||||||
@ -0,0 +1,60 @@ |
|||||||
|
html, body { |
||||||
|
font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; |
||||||
|
} |
||||||
|
|
||||||
|
a, .btn-link { |
||||||
|
color: #006bb7; |
||||||
|
} |
||||||
|
|
||||||
|
.btn-primary { |
||||||
|
color: #fff; |
||||||
|
background-color: #1b6ec2; |
||||||
|
border-color: #1861ac; |
||||||
|
} |
||||||
|
|
||||||
|
.btn:focus, .btn:active:focus, .btn-link.nav-link:focus, .form-control:focus, .form-check-input:focus { |
||||||
|
box-shadow: 0 0 0 0.1rem white, 0 0 0 0.25rem #258cfb; |
||||||
|
} |
||||||
|
|
||||||
|
.content { |
||||||
|
padding-top: 1.1rem; |
||||||
|
} |
||||||
|
|
||||||
|
h1:focus { |
||||||
|
outline: none; |
||||||
|
} |
||||||
|
|
||||||
|
.valid.modified:not([type=checkbox]) { |
||||||
|
outline: 1px solid #26b050; |
||||||
|
} |
||||||
|
|
||||||
|
.invalid { |
||||||
|
outline: 1px solid #e50000; |
||||||
|
} |
||||||
|
|
||||||
|
.validation-message { |
||||||
|
color: #e50000; |
||||||
|
} |
||||||
|
|
||||||
|
.blazor-error-boundary { |
||||||
|
background: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTYiIGhlaWdodD0iNDkiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIG92ZXJmbG93PSJoaWRkZW4iPjxkZWZzPjxjbGlwUGF0aCBpZD0iY2xpcDAiPjxyZWN0IHg9IjIzNSIgeT0iNTEiIHdpZHRoPSI1NiIgaGVpZ2h0PSI0OSIvPjwvY2xpcFBhdGg+PC9kZWZzPjxnIGNsaXAtcGF0aD0idXJsKCNjbGlwMCkiIHRyYW5zZm9ybT0idHJhbnNsYXRlKC0yMzUgLTUxKSI+PHBhdGggZD0iTTI2My41MDYgNTFDMjY0LjcxNyA1MSAyNjUuODEzIDUxLjQ4MzcgMjY2LjYwNiA1Mi4yNjU4TDI2Ny4wNTIgNTIuNzk4NyAyNjcuNTM5IDUzLjYyODMgMjkwLjE4NSA5Mi4xODMxIDI5MC41NDUgOTIuNzk1IDI5MC42NTYgOTIuOTk2QzI5MC44NzcgOTMuNTEzIDI5MSA5NC4wODE1IDI5MSA5NC42NzgyIDI5MSA5Ny4wNjUxIDI4OS4wMzggOTkgMjg2LjYxNyA5OUwyNDAuMzgzIDk5QzIzNy45NjMgOTkgMjM2IDk3LjA2NTEgMjM2IDk0LjY3ODIgMjM2IDk0LjM3OTkgMjM2LjAzMSA5NC4wODg2IDIzNi4wODkgOTMuODA3MkwyMzYuMzM4IDkzLjAxNjIgMjM2Ljg1OCA5Mi4xMzE0IDI1OS40NzMgNTMuNjI5NCAyNTkuOTYxIDUyLjc5ODUgMjYwLjQwNyA1Mi4yNjU4QzI2MS4yIDUxLjQ4MzcgMjYyLjI5NiA1MSAyNjMuNTA2IDUxWk0yNjMuNTg2IDY2LjAxODNDMjYwLjczNyA2Ni4wMTgzIDI1OS4zMTMgNjcuMTI0NSAyNTkuMzEzIDY5LjMzNyAyNTkuMzEzIDY5LjYxMDIgMjU5LjMzMiA2OS44NjA4IDI1OS4zNzEgNzAuMDg4N0wyNjEuNzk1IDg0LjAxNjEgMjY1LjM4IDg0LjAxNjEgMjY3LjgyMSA2OS43NDc1QzI2Ny44NiA2OS43MzA5IDI2Ny44NzkgNjkuNTg3NyAyNjcuODc5IDY5LjMxNzkgMjY3Ljg3OSA2Ny4xMTgyIDI2Ni40NDggNjYuMDE4MyAyNjMuNTg2IDY2LjAxODNaTTI2My41NzYgODYuMDU0N0MyNjEuMDQ5IDg2LjA1NDcgMjU5Ljc4NiA4Ny4zMDA1IDI1OS43ODYgODkuNzkyMSAyNTkuNzg2IDkyLjI4MzcgMjYxLjA0OSA5My41Mjk1IDI2My41NzYgOTMuNTI5NSAyNjYuMTE2IDkzLjUyOTUgMjY3LjM4NyA5Mi4yODM3IDI2Ny4zODcgODkuNzkyMSAyNjcuMzg3IDg3LjMwMDUgMjY2LjExNiA4Ni4wNTQ3IDI2My41NzYgODYuMDU0N1oiIGZpbGw9IiNGRkU1MDAiIGZpbGwtcnVsZT0iZXZlbm9kZCIvPjwvZz48L3N2Zz4=) no-repeat 1rem/1.8rem, #b32121; |
||||||
|
padding: 1rem 1rem 1rem 3.7rem; |
||||||
|
color: white; |
||||||
|
} |
||||||
|
|
||||||
|
.blazor-error-boundary::after { |
||||||
|
content: "An error has occurred." |
||||||
|
} |
||||||
|
|
||||||
|
.darker-border-checkbox.form-check-input { |
||||||
|
border-color: #929292; |
||||||
|
} |
||||||
|
|
||||||
|
.form-floating > .form-control-plaintext::placeholder, .form-floating > .form-control::placeholder { |
||||||
|
color: var(--bs-secondary-color); |
||||||
|
text-align: end; |
||||||
|
} |
||||||
|
|
||||||
|
.form-floating > .form-control-plaintext:focus::placeholder, .form-floating > .form-control:focus::placeholder { |
||||||
|
text-align: start; |
||||||
|
} |
||||||
|
After Width: | Height: | Size: 1.1 KiB |
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in new issue