77 changed files with 60713 additions and 11 deletions
@ -0,0 +1,5 @@ |
|||||||
|
using Microsoft.AspNetCore.Components.WebAssembly.Hosting; |
||||||
|
|
||||||
|
var builder = WebAssemblyHostBuilder.CreateDefault(args); |
||||||
|
|
||||||
|
await builder.Build().RunAsync(); |
||||||
@ -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.6" /> |
||||||
|
</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 Website.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,4 @@ |
|||||||
|
<Solution> |
||||||
|
<Project Path="Website.Client/Website.Client.csproj" /> |
||||||
|
<Project Path="Website/Website.csproj" /> |
||||||
|
</Solution> |
||||||
@ -0,0 +1,23 @@ |
|||||||
|
<!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["Website.styles.css"]" /> |
||||||
|
<ImportMap /> |
||||||
|
<link rel="icon" type="image/png" href="favicon.png" /> |
||||||
|
<HeadOutlet /> |
||||||
|
</head> |
||||||
|
|
||||||
|
<body> |
||||||
|
<Routes /> |
||||||
|
<ReconnectModal /> |
||||||
|
<script src="@Assets["_framework/blazor.web.js"]"></script> |
||||||
|
</body> |
||||||
|
|
||||||
|
</html> |
||||||
@ -0,0 +1,9 @@ |
|||||||
|
@inherits LayoutComponentBase |
||||||
|
<div class="page"> |
||||||
|
<main> |
||||||
|
|
||||||
|
<article class="content px-4"> |
||||||
|
@Body |
||||||
|
</article> |
||||||
|
</main> |
||||||
|
</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,31 @@ |
|||||||
|
<script type="module" src="@Assets["Components/Layout/ReconnectModal.razor.js"]"></script> |
||||||
|
|
||||||
|
<dialog id="components-reconnect-modal" data-nosnippet> |
||||||
|
<div class="components-reconnect-container"> |
||||||
|
<div class="components-rejoining-animation" aria-hidden="true"> |
||||||
|
<div></div> |
||||||
|
<div></div> |
||||||
|
</div> |
||||||
|
<p class="components-reconnect-first-attempt-visible"> |
||||||
|
Rejoining the server... |
||||||
|
</p> |
||||||
|
<p class="components-reconnect-repeated-attempt-visible"> |
||||||
|
Rejoin failed... trying again in <span id="components-seconds-to-next-attempt"></span> seconds. |
||||||
|
</p> |
||||||
|
<p class="components-reconnect-failed-visible"> |
||||||
|
Failed to rejoin.<br />Please retry or reload the page. |
||||||
|
</p> |
||||||
|
<button id="components-reconnect-button" class="components-reconnect-failed-visible"> |
||||||
|
Retry |
||||||
|
</button> |
||||||
|
<p class="components-pause-visible"> |
||||||
|
The session has been paused by the server. |
||||||
|
</p> |
||||||
|
<p class="components-resume-failed-visible"> |
||||||
|
Failed to resume the session.<br />Please retry or reload the page. |
||||||
|
</p> |
||||||
|
<button id="components-resume-button" class="components-pause-visible components-resume-failed-visible"> |
||||||
|
Resume |
||||||
|
</button> |
||||||
|
</div> |
||||||
|
</dialog> |
||||||
@ -0,0 +1,157 @@ |
|||||||
|
.components-reconnect-first-attempt-visible, |
||||||
|
.components-reconnect-repeated-attempt-visible, |
||||||
|
.components-reconnect-failed-visible, |
||||||
|
.components-pause-visible, |
||||||
|
.components-resume-failed-visible, |
||||||
|
.components-rejoining-animation { |
||||||
|
display: none; |
||||||
|
} |
||||||
|
|
||||||
|
#components-reconnect-modal.components-reconnect-show .components-reconnect-first-attempt-visible, |
||||||
|
#components-reconnect-modal.components-reconnect-show .components-rejoining-animation, |
||||||
|
#components-reconnect-modal.components-reconnect-paused .components-pause-visible, |
||||||
|
#components-reconnect-modal.components-reconnect-resume-failed .components-resume-failed-visible, |
||||||
|
#components-reconnect-modal.components-reconnect-retrying, |
||||||
|
#components-reconnect-modal.components-reconnect-retrying .components-reconnect-repeated-attempt-visible, |
||||||
|
#components-reconnect-modal.components-reconnect-retrying .components-rejoining-animation, |
||||||
|
#components-reconnect-modal.components-reconnect-failed, |
||||||
|
#components-reconnect-modal.components-reconnect-failed .components-reconnect-failed-visible { |
||||||
|
display: block; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
#components-reconnect-modal { |
||||||
|
background-color: white; |
||||||
|
width: 20rem; |
||||||
|
margin: 20vh auto; |
||||||
|
padding: 2rem; |
||||||
|
border: 0; |
||||||
|
border-radius: 0.5rem; |
||||||
|
box-shadow: 0 3px 6px 2px rgba(0, 0, 0, 0.3); |
||||||
|
opacity: 0; |
||||||
|
transition: display 0.5s allow-discrete, overlay 0.5s allow-discrete; |
||||||
|
animation: components-reconnect-modal-fadeOutOpacity 0.5s both; |
||||||
|
&[open] |
||||||
|
|
||||||
|
{ |
||||||
|
animation: components-reconnect-modal-slideUp 1.5s cubic-bezier(.05, .89, .25, 1.02) 0.3s, components-reconnect-modal-fadeInOpacity 0.5s ease-in-out 0.3s; |
||||||
|
animation-fill-mode: both; |
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
#components-reconnect-modal::backdrop { |
||||||
|
background-color: rgba(0, 0, 0, 0.4); |
||||||
|
animation: components-reconnect-modal-fadeInOpacity 0.5s ease-in-out; |
||||||
|
opacity: 1; |
||||||
|
} |
||||||
|
|
||||||
|
@keyframes components-reconnect-modal-slideUp { |
||||||
|
0% { |
||||||
|
transform: translateY(30px) scale(0.95); |
||||||
|
} |
||||||
|
|
||||||
|
100% { |
||||||
|
transform: translateY(0); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
@keyframes components-reconnect-modal-fadeInOpacity { |
||||||
|
0% { |
||||||
|
opacity: 0; |
||||||
|
} |
||||||
|
|
||||||
|
100% { |
||||||
|
opacity: 1; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
@keyframes components-reconnect-modal-fadeOutOpacity { |
||||||
|
0% { |
||||||
|
opacity: 1; |
||||||
|
} |
||||||
|
|
||||||
|
100% { |
||||||
|
opacity: 0; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
.components-reconnect-container { |
||||||
|
display: flex; |
||||||
|
flex-direction: column; |
||||||
|
align-items: center; |
||||||
|
gap: 1rem; |
||||||
|
} |
||||||
|
|
||||||
|
#components-reconnect-modal p { |
||||||
|
margin: 0; |
||||||
|
text-align: center; |
||||||
|
} |
||||||
|
|
||||||
|
#components-reconnect-modal button { |
||||||
|
border: 0; |
||||||
|
background-color: #6b9ed2; |
||||||
|
color: white; |
||||||
|
padding: 4px 24px; |
||||||
|
border-radius: 4px; |
||||||
|
} |
||||||
|
|
||||||
|
#components-reconnect-modal button:hover { |
||||||
|
background-color: #3b6ea2; |
||||||
|
} |
||||||
|
|
||||||
|
#components-reconnect-modal button:active { |
||||||
|
background-color: #6b9ed2; |
||||||
|
} |
||||||
|
|
||||||
|
.components-rejoining-animation { |
||||||
|
position: relative; |
||||||
|
width: 80px; |
||||||
|
height: 80px; |
||||||
|
} |
||||||
|
|
||||||
|
.components-rejoining-animation div { |
||||||
|
position: absolute; |
||||||
|
border: 3px solid #0087ff; |
||||||
|
opacity: 1; |
||||||
|
border-radius: 50%; |
||||||
|
animation: components-rejoining-animation 1.5s cubic-bezier(0, 0.2, 0.8, 1) infinite; |
||||||
|
} |
||||||
|
|
||||||
|
.components-rejoining-animation div:nth-child(2) { |
||||||
|
animation-delay: -0.5s; |
||||||
|
} |
||||||
|
|
||||||
|
@keyframes components-rejoining-animation { |
||||||
|
0% { |
||||||
|
top: 40px; |
||||||
|
left: 40px; |
||||||
|
width: 0; |
||||||
|
height: 0; |
||||||
|
opacity: 0; |
||||||
|
} |
||||||
|
|
||||||
|
4.9% { |
||||||
|
top: 40px; |
||||||
|
left: 40px; |
||||||
|
width: 0; |
||||||
|
height: 0; |
||||||
|
opacity: 0; |
||||||
|
} |
||||||
|
|
||||||
|
5% { |
||||||
|
top: 40px; |
||||||
|
left: 40px; |
||||||
|
width: 0; |
||||||
|
height: 0; |
||||||
|
opacity: 1; |
||||||
|
} |
||||||
|
|
||||||
|
100% { |
||||||
|
top: 0px; |
||||||
|
left: 0px; |
||||||
|
width: 80px; |
||||||
|
height: 80px; |
||||||
|
opacity: 0; |
||||||
|
} |
||||||
|
} |
||||||
@ -0,0 +1,63 @@ |
|||||||
|
// Set up event handlers
|
||||||
|
const reconnectModal = document.getElementById("components-reconnect-modal"); |
||||||
|
reconnectModal.addEventListener("components-reconnect-state-changed", handleReconnectStateChanged); |
||||||
|
|
||||||
|
const retryButton = document.getElementById("components-reconnect-button"); |
||||||
|
retryButton.addEventListener("click", retry); |
||||||
|
|
||||||
|
const resumeButton = document.getElementById("components-resume-button"); |
||||||
|
resumeButton.addEventListener("click", resume); |
||||||
|
|
||||||
|
function handleReconnectStateChanged(event) { |
||||||
|
if (event.detail.state === "show") { |
||||||
|
reconnectModal.showModal(); |
||||||
|
} else if (event.detail.state === "hide") { |
||||||
|
reconnectModal.close(); |
||||||
|
} else if (event.detail.state === "failed") { |
||||||
|
document.addEventListener("visibilitychange", retryWhenDocumentBecomesVisible); |
||||||
|
} else if (event.detail.state === "rejected") { |
||||||
|
location.reload(); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
async function retry() { |
||||||
|
document.removeEventListener("visibilitychange", retryWhenDocumentBecomesVisible); |
||||||
|
|
||||||
|
try { |
||||||
|
// Reconnect will asynchronously return:
|
||||||
|
// - true to mean success
|
||||||
|
// - false to mean we reached the server, but it rejected the connection (e.g., unknown circuit ID)
|
||||||
|
// - exception to mean we didn't reach the server (this can be sync or async)
|
||||||
|
const successful = await Blazor.reconnect(); |
||||||
|
if (!successful) { |
||||||
|
// We have been able to reach the server, but the circuit is no longer available.
|
||||||
|
// We'll reload the page so the user can continue using the app as quickly as possible.
|
||||||
|
const resumeSuccessful = await Blazor.resumeCircuit(); |
||||||
|
if (!resumeSuccessful) { |
||||||
|
location.reload(); |
||||||
|
} else { |
||||||
|
reconnectModal.close(); |
||||||
|
} |
||||||
|
} |
||||||
|
} catch (err) { |
||||||
|
// We got an exception, server is currently unavailable
|
||||||
|
document.addEventListener("visibilitychange", retryWhenDocumentBecomesVisible); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
async function resume() { |
||||||
|
try { |
||||||
|
const successful = await Blazor.resumeCircuit(); |
||||||
|
if (!successful) { |
||||||
|
location.reload(); |
||||||
|
} |
||||||
|
} catch { |
||||||
|
reconnectModal.classList.replace("components-reconnect-paused", "components-reconnect-resume-failed"); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
async function retryWhenDocumentBecomesVisible() { |
||||||
|
if (document.visibilityState === "visible") { |
||||||
|
await retry(); |
||||||
|
} |
||||||
|
} |
||||||
@ -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,55 @@ |
|||||||
|
@page "/" |
||||||
|
|
||||||
|
@using Website.Data |
||||||
|
|
||||||
|
<div class="page"> |
||||||
|
<div class="title"> |
||||||
|
<div><b>Jonathan McCaffrey</b></div> |
||||||
|
@foreach (var part in Overview.Get().Parts.OrderBy(a => a.Order)) |
||||||
|
{ |
||||||
|
@if (part.IsVisible) |
||||||
|
{ |
||||||
|
<div>@part.Description</div> |
||||||
|
} |
||||||
|
} |
||||||
|
</div> |
||||||
|
|
||||||
|
<div class="side"> |
||||||
|
@foreach (var info in PersonalInfo.Get().Info) |
||||||
|
{ |
||||||
|
@if (info.IsVisible) |
||||||
|
{ |
||||||
|
<div><i>@info.Name</i></div> |
||||||
|
<div>@info.Value</div> |
||||||
|
<br /> |
||||||
|
} |
||||||
|
} |
||||||
|
<br /> |
||||||
|
<i>Skills:</i> |
||||||
|
@foreach (var skill in Skills.Get().Skills) |
||||||
|
{ |
||||||
|
@if (skill.IsVisible) |
||||||
|
{ |
||||||
|
<div>@skill.Name</div> |
||||||
|
} |
||||||
|
} |
||||||
|
</div> |
||||||
|
|
||||||
|
<div class="experience"> |
||||||
|
@foreach (var experience in WorkExperience.Get().Experiences) |
||||||
|
{ |
||||||
|
<div><b>@experience.Role</b></div> |
||||||
|
<div>@experience.Location</div> |
||||||
|
<div>@experience.DateRange</div> |
||||||
|
<ul> |
||||||
|
@foreach (var point in experience.Points) |
||||||
|
{ |
||||||
|
@if (point.IsVisible) |
||||||
|
{ |
||||||
|
<li>@point.Description</li> |
||||||
|
} |
||||||
|
} |
||||||
|
</ul> |
||||||
|
} |
||||||
|
</div> |
||||||
|
</div> |
||||||
@ -0,0 +1,26 @@ |
|||||||
|
.page { |
||||||
|
width: 816px; |
||||||
|
height: 1054px; |
||||||
|
display: grid; |
||||||
|
gap: 14px; |
||||||
|
grid-template-columns: min-content 1fr; |
||||||
|
grid-template-rows: min-content 1fr; |
||||||
|
grid-template-areas: |
||||||
|
"title title" |
||||||
|
"side experience"; |
||||||
|
} |
||||||
|
|
||||||
|
.title { |
||||||
|
grid-area: title; |
||||||
|
font-size: 12px; |
||||||
|
} |
||||||
|
|
||||||
|
.side { |
||||||
|
grid-area: side; |
||||||
|
font-size: 12px; |
||||||
|
} |
||||||
|
|
||||||
|
.experience { |
||||||
|
grid-area: experience; |
||||||
|
font-size: 12px; |
||||||
|
} |
||||||
@ -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,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 Website |
||||||
|
@using Website.Client |
||||||
|
@using Website.Components |
||||||
|
@using Website.Components.Layout |
||||||
@ -0,0 +1,35 @@ |
|||||||
|
namespace Website.Data; |
||||||
|
|
||||||
|
public static class Overview |
||||||
|
{ |
||||||
|
public static Data Get() |
||||||
|
{ |
||||||
|
return new Data |
||||||
|
{ |
||||||
|
Parts = |
||||||
|
[ |
||||||
|
new Part |
||||||
|
{ |
||||||
|
IsVisible = true, |
||||||
|
Order = 1, |
||||||
|
Description = |
||||||
|
"Software Developer with a focus on the .NET tech stack.", |
||||||
|
LastModified = new DateTime(2025, 9, 8) |
||||||
|
} |
||||||
|
] |
||||||
|
}; |
||||||
|
} |
||||||
|
|
||||||
|
public class Data |
||||||
|
{ |
||||||
|
public List<Part> Parts { get; set; } |
||||||
|
} |
||||||
|
|
||||||
|
public class Part |
||||||
|
{ |
||||||
|
public bool IsVisible { get; set; } |
||||||
|
public int Order { get; set; } = 9999; |
||||||
|
public required string Description { get; set; } |
||||||
|
public DateTime LastModified { get; set; } |
||||||
|
} |
||||||
|
} |
||||||
@ -0,0 +1,67 @@ |
|||||||
|
namespace Website.Data; |
||||||
|
|
||||||
|
public static class PersonalInfo |
||||||
|
{ |
||||||
|
public static Data Get() |
||||||
|
{ |
||||||
|
return new Data |
||||||
|
{ |
||||||
|
Info = |
||||||
|
[ |
||||||
|
new Info |
||||||
|
{ |
||||||
|
Name = "Location", |
||||||
|
Value = "Ottawa, ON" |
||||||
|
}, |
||||||
|
new Info |
||||||
|
{ |
||||||
|
Name = "Email", |
||||||
|
Value = "jonmcc0723@gmail.com" |
||||||
|
}, |
||||||
|
new Info |
||||||
|
{ |
||||||
|
Name = "Phone", |
||||||
|
Value = "613-277-8353", |
||||||
|
IsVisible = true |
||||||
|
}, |
||||||
|
new Info |
||||||
|
{ |
||||||
|
Name = "Experience Length", |
||||||
|
Value = Math.Round((DateTime.Today - new DateTime(2012, 1, 1)).TotalDays / 360, |
||||||
|
MidpointRounding.ToNegativeInfinity) |
||||||
|
+ " years in tech, 3 in education" |
||||||
|
}, |
||||||
|
new Info |
||||||
|
{ |
||||||
|
Name = "Education", |
||||||
|
Value = "Game Development (2012)" |
||||||
|
}, |
||||||
|
new Info |
||||||
|
{ |
||||||
|
Name = "Awaiting Release", |
||||||
|
Value = "Path of Exile 2", |
||||||
|
IsVisible = false |
||||||
|
}, |
||||||
|
new Info |
||||||
|
{ |
||||||
|
Name = "Favourite Games", |
||||||
|
Value = "Armored Core 4: For Answers, Warcraft 3, TimeSplitters: Future Perfect, Mass Effect 2", |
||||||
|
IsVisible = false |
||||||
|
} |
||||||
|
] |
||||||
|
}; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
public class Data |
||||||
|
{ |
||||||
|
public required List<Info> Info { get; set; } |
||||||
|
} |
||||||
|
|
||||||
|
public class Info |
||||||
|
{ |
||||||
|
public required string Name { get; set; } |
||||||
|
public required string Value { get; set; } |
||||||
|
public bool IsVisible { get; set; } = true; |
||||||
|
} |
||||||
|
} |
||||||
@ -0,0 +1,101 @@ |
|||||||
|
namespace Website.Data; |
||||||
|
|
||||||
|
public static class Skills |
||||||
|
{ |
||||||
|
public static Data Get() |
||||||
|
{ |
||||||
|
return new Data |
||||||
|
{ |
||||||
|
Skills = |
||||||
|
[ |
||||||
|
new Skill |
||||||
|
{ |
||||||
|
Name = "C#, .NET" |
||||||
|
}, |
||||||
|
new Skill |
||||||
|
{ |
||||||
|
Name = "Blazor" |
||||||
|
}, |
||||||
|
new Skill |
||||||
|
{ |
||||||
|
Name = "React" |
||||||
|
}, |
||||||
|
new Skill |
||||||
|
{ |
||||||
|
Name = "Angular" |
||||||
|
}, |
||||||
|
new Skill |
||||||
|
{ |
||||||
|
Name = "HTML, CSS" |
||||||
|
}, |
||||||
|
new Skill |
||||||
|
{ |
||||||
|
Name = "JS, TypeScript" |
||||||
|
}, |
||||||
|
new Skill |
||||||
|
{ |
||||||
|
Name = "Agile, Scrum" |
||||||
|
}, |
||||||
|
new Skill |
||||||
|
{ |
||||||
|
Name = "Jira, Azure DevOps" |
||||||
|
}, |
||||||
|
new Skill |
||||||
|
{ |
||||||
|
Name = "Unit Tests" |
||||||
|
}, |
||||||
|
new Skill |
||||||
|
{ |
||||||
|
Name = "Test Automation" |
||||||
|
}, |
||||||
|
new Skill |
||||||
|
{ |
||||||
|
Name = "Jenkins, Azure Pipelines" |
||||||
|
}, |
||||||
|
new Skill |
||||||
|
{ |
||||||
|
Name = "REST, APIs" |
||||||
|
}, |
||||||
|
new Skill |
||||||
|
{ |
||||||
|
Name = "SQL" |
||||||
|
}, |
||||||
|
new Skill |
||||||
|
{ |
||||||
|
Name = "git" |
||||||
|
}, |
||||||
|
new Skill |
||||||
|
{ |
||||||
|
Name = "PC, Mac, Linux, Mobile" |
||||||
|
}, |
||||||
|
new Skill |
||||||
|
{ |
||||||
|
Name = "Azure, AWS, Self-Hosting (Ubuntu Server)" |
||||||
|
}, |
||||||
|
new Skill |
||||||
|
{ |
||||||
|
Name = "Google Analytics, 3rd Party APIs/Libraries" |
||||||
|
}, |
||||||
|
new Skill |
||||||
|
{ |
||||||
|
Name = "Documentation, Training Videos" |
||||||
|
}, |
||||||
|
new Skill |
||||||
|
{ |
||||||
|
Name = "Customer Support and Debugging" |
||||||
|
} |
||||||
|
] |
||||||
|
}; |
||||||
|
} |
||||||
|
|
||||||
|
public class Data |
||||||
|
{ |
||||||
|
public required List<Skill> Skills { get; init; } |
||||||
|
} |
||||||
|
|
||||||
|
public class Skill |
||||||
|
{ |
||||||
|
public string Name { get; init; } = ""; |
||||||
|
public bool IsVisible { get; init; } = true; |
||||||
|
} |
||||||
|
} |
||||||
@ -0,0 +1,194 @@ |
|||||||
|
namespace Website.Data; |
||||||
|
|
||||||
|
public static class WorkExperience |
||||||
|
{ |
||||||
|
public static Data Get() |
||||||
|
{ |
||||||
|
return new Data |
||||||
|
{ |
||||||
|
Experiences = |
||||||
|
[ |
||||||
|
new Experience |
||||||
|
{ |
||||||
|
Role = "Server Developer", |
||||||
|
Location = "TotalETO, Company providing engineering to order solutions", |
||||||
|
DateRange = "2021 - 2026", |
||||||
|
Points = |
||||||
|
[ |
||||||
|
new Point |
||||||
|
{ |
||||||
|
Description = |
||||||
|
"Wrote various API calls, unit tests to test said calls, and exact examples to show the frontend team on how to consume the GraphQL API.", |
||||||
|
IsVisible = true |
||||||
|
}, |
||||||
|
new Point |
||||||
|
{ |
||||||
|
Description = |
||||||
|
"Converted SQL stored procedures into views usable by Entity Framework to support old functionality with new web app features.", |
||||||
|
IsVisible = true |
||||||
|
}, |
||||||
|
new Point |
||||||
|
{ |
||||||
|
Description = |
||||||
|
"Moved from backend to frontend as needed to fix bugs and add features to React frontend to help the UI team with their higher workload.", |
||||||
|
IsVisible = true |
||||||
|
}, |
||||||
|
new Point |
||||||
|
{ |
||||||
|
Description = |
||||||
|
"Took part in converting legacy VB-coded app functionality to a C# web development server.", |
||||||
|
IsVisible = true |
||||||
|
}, |
||||||
|
new Point |
||||||
|
{ |
||||||
|
Description = |
||||||
|
"Taken the initiative in creating a variety of onboarding internal wiki documents explaining parts of the codebase that were well-loved by the team.", |
||||||
|
IsVisible = true |
||||||
|
} |
||||||
|
] |
||||||
|
}, |
||||||
|
new Experience |
||||||
|
{ |
||||||
|
Role = "Fullstack Blazor Developer", |
||||||
|
Location = "Personal Projects, on various interests", |
||||||
|
DateRange = "2021", |
||||||
|
Points = |
||||||
|
[ |
||||||
|
new Point |
||||||
|
{ |
||||||
|
Description = |
||||||
|
"Created igpfanreference.ca to teach players in unreleased game basic play patterns, and to experiment with Blazor, Linux self-hosting and Azure web hosting.", |
||||||
|
IsVisible = true |
||||||
|
}, |
||||||
|
new Point |
||||||
|
{ |
||||||
|
Description = |
||||||
|
"Twitch streamed live coding sessions to demonstrate developing the website, and crowd-sourced and credited players on ideas and functionality for the website.", |
||||||
|
IsVisible = true |
||||||
|
} |
||||||
|
] |
||||||
|
}, |
||||||
|
new Experience |
||||||
|
{ |
||||||
|
Role = "Angular Web Developer", |
||||||
|
Location = "CleanCode, Software consultancy on various projects", |
||||||
|
DateRange = "2020 - 2021", |
||||||
|
Points = |
||||||
|
[ |
||||||
|
new Point |
||||||
|
{ |
||||||
|
Description = |
||||||
|
"Came to the conclusion that I wanted to focus my career in .NET, and left the company to pursue Blazor research and C# opportunities. Unfortunately, Blazor development work is not as popular as one would hope.", |
||||||
|
IsVisible = true |
||||||
|
} |
||||||
|
] |
||||||
|
}, |
||||||
|
|
||||||
|
new Experience |
||||||
|
{ |
||||||
|
Role = "Full Stack Developer", |
||||||
|
Location = "bitHeads, Tech shop with a focus on cloud-based technology", |
||||||
|
DateRange = "2015 - 2020", |
||||||
|
Points = |
||||||
|
[ |
||||||
|
new Point |
||||||
|
{ |
||||||
|
Description = |
||||||
|
"Worked on a portal and mobile-facing web app for a SaaS project written in React.", |
||||||
|
IsVisible = true |
||||||
|
}, |
||||||
|
new Point |
||||||
|
{ |
||||||
|
Description = |
||||||
|
"Eliminated routine project hours spent documenting by creating a Node.js tool in TypeScript that generated the API doc contents.", |
||||||
|
IsVisible = true |
||||||
|
}, |
||||||
|
new Point |
||||||
|
{ |
||||||
|
Description = |
||||||
|
"Created brainCloud’s Command Line tool in Node.js and other test tools, for developers and QA to test and stress test API and server features.", |
||||||
|
IsVisible = true |
||||||
|
}, |
||||||
|
new Point |
||||||
|
{ |
||||||
|
Description = |
||||||
|
"Maintained customer success and brainCloud’s unit tests, examples, and libraries in Java, ObjC, C++, C#, JS, Unity, and Unreal.", |
||||||
|
IsVisible = true |
||||||
|
}, |
||||||
|
new Point |
||||||
|
{ |
||||||
|
Description = |
||||||
|
"Wrote documentation, tutorials, and offered guidance to bring new co-workers up to speed on the BaaS environment.", |
||||||
|
IsVisible = true |
||||||
|
}, |
||||||
|
new Point |
||||||
|
{ |
||||||
|
Description = |
||||||
|
"Maintained and wrote Jenkins Pipeline in Groovy for improved test reporting and team CI.", |
||||||
|
IsVisible = true |
||||||
|
}, |
||||||
|
new Point |
||||||
|
{ |
||||||
|
Description = |
||||||
|
"Developed Test Automation for brainCloud and Nortec/Condair Help websites in Java, to reduce manual testing time spent on an agile team.", |
||||||
|
IsVisible = true |
||||||
|
} |
||||||
|
] |
||||||
|
}, |
||||||
|
new Experience |
||||||
|
{ |
||||||
|
Role = "Mobile Game Developer", |
||||||
|
Location = "Smoke Labs, Tech startup with a focus on mobile games", |
||||||
|
DateRange = "2012 - 2015", |
||||||
|
Points = |
||||||
|
[ |
||||||
|
new Point |
||||||
|
{ |
||||||
|
Description = |
||||||
|
"Developed key systems in Blokus, Mattel-branded title nominated in the Canadian Video Game Awards for 'Best Game Design' and 'Best Social or Casual Game.'", |
||||||
|
IsVisible = true |
||||||
|
}, |
||||||
|
new Point |
||||||
|
{ |
||||||
|
Description = |
||||||
|
"Experience integrating a multitude of analytics, ad systems, and backends, including Google Analytics, Game Analytics, Flurry, Mopub, and Playhaven.", |
||||||
|
IsVisible = true |
||||||
|
}, |
||||||
|
new Point |
||||||
|
{ |
||||||
|
Description = |
||||||
|
"Spent time working with the external QA team to bridge the company's knowledge gaps between the developer and QA workflows.", |
||||||
|
IsVisible = true |
||||||
|
}, |
||||||
|
new Point |
||||||
|
{ |
||||||
|
Description = |
||||||
|
"Integrated ads, in-app purchases, analytics, and handled product releases of legacy client apps.", |
||||||
|
IsVisible = true |
||||||
|
} |
||||||
|
] |
||||||
|
} |
||||||
|
] |
||||||
|
}; |
||||||
|
} |
||||||
|
|
||||||
|
public class Data |
||||||
|
{ |
||||||
|
public List<Experience> Experiences = new(); |
||||||
|
} |
||||||
|
|
||||||
|
public class Experience |
||||||
|
{ |
||||||
|
public string Role { get; set; } |
||||||
|
public string Location { get; set; } |
||||||
|
public string DateRange { get; set; } |
||||||
|
|
||||||
|
public List<Point> Points { get; set; } |
||||||
|
} |
||||||
|
|
||||||
|
public class Point |
||||||
|
{ |
||||||
|
public string Description { get; set; } |
||||||
|
public bool IsVisible { get; set; } |
||||||
|
} |
||||||
|
} |
||||||
@ -0,0 +1,33 @@ |
|||||||
|
using Website.Components; |
||||||
|
|
||||||
|
var builder = WebApplication.CreateBuilder(args); |
||||||
|
|
||||||
|
// Add services to the container. |
||||||
|
builder.Services.AddRazorComponents() |
||||||
|
.AddInteractiveServerComponents() |
||||||
|
.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>() |
||||||
|
.AddInteractiveServerRenderMode() |
||||||
|
.AddInteractiveWebAssemblyRenderMode() |
||||||
|
.AddAdditionalAssemblies(typeof(Website.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:5202", |
||||||
|
"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:7263;http://localhost:5202", |
||||||
|
"environmentVariables": { |
||||||
|
"ASPNETCORE_ENVIRONMENT": "Development" |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
@ -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="..\Website.Client\Website.Client.csproj" /> |
||||||
|
<PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly.Server" Version="10.0.6" /> |
||||||
|
</ItemGroup> |
||||||
|
|
||||||
|
</Project> |
||||||
@ -0,0 +1,6 @@ |
|||||||
|
<?xml version="1.0" encoding="utf-8"?> |
||||||
|
<Project ToolsVersion="Current" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> |
||||||
|
<PropertyGroup> |
||||||
|
<ActiveDebugProfile>https</ActiveDebugProfile> |
||||||
|
</PropertyGroup> |
||||||
|
</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
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
Loading…
Reference in new issue