Cache refresh.

This commit is contained in:
2026-04-12 02:19:02 +05:00
parent 2089f76d1a
commit 9df0292291
24 changed files with 3842 additions and 0 deletions
+3
View File
@@ -0,0 +1,3 @@
node_modules/
[Bb]in/
[Oo]bj/
+20
View File
@@ -0,0 +1,20 @@
<!DOCTYPE html>
<html lang="en" class="dark">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<base href="/" />
<ResourcePreloader />
<link rel="stylesheet" href="@Assets["css/output.css"]" />
<ImportMap />
<link rel="icon" type="image/svg+xml" href="enci_white.svg" />
<HeadOutlet />
</head>
<body>
<Routes @rendermode="RenderMode.InteractiveServer" />
<script src="@Assets["_framework/blazor.web.js"]"></script>
</body>
</html>
+77
View File
@@ -0,0 +1,77 @@
@inherits LayoutComponentBase
<div class="flex min-h-screen">
@* Desktop sidebar — collapsible *@
<aside class="@($"hidden shrink-0 border-r border-sidebar-border bg-sidebar transition-all duration-300 ease-in-out md:block {(sidebarCollapsed ? "w-16" : "w-64")}")">
<NavMenu Collapsed="sidebarCollapsed" OnToggleSidebar="ToggleSidebar" />
</aside>
@* Mobile overlay *@
@if (mobileOpen)
{
<div class="fixed inset-0 z-40 flex md:hidden">
@* Backdrop *@
<div class="fixed inset-0 bg-black/60 backdrop-blur-sm" @onclick="CloseMobile"></div>
@* Drawer *@
<aside class="relative z-50 flex w-72 flex-col bg-sidebar shadow-xl">
@* Close button *@
<button class="absolute right-3 top-3 rounded-md p-1 text-muted-foreground transition-colors hover:bg-sidebar-accent hover:text-sidebar-foreground"
@onclick="CloseMobile">
<svg xmlns="http://www.w3.org/2000/svg" class="h-5 w-5" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
<path d="M18 6 6 18" /><path d="m6 6 12 12" />
</svg>
</button>
<NavMenu OnNavigated="CloseMobile" />
</aside>
</div>
}
@* Main content *@
<div class="flex flex-1 flex-col overflow-hidden">
@* Top bar *@
<header class="sticky top-0 z-10 flex h-14 items-center gap-4 border-b border-border bg-background/80 px-4 backdrop-blur-sm md:px-6">
@* Mobile menu button *@
<button class="rounded-md p-1.5 text-muted-foreground transition-colors hover:bg-accent hover:text-foreground md:hidden"
@onclick="OpenMobile">
<svg xmlns="http://www.w3.org/2000/svg" class="h-5 w-5" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
<line x1="4" x2="20" y1="12" y2="12" /><line x1="4" x2="20" y1="6" y2="6" /><line x1="4" x2="20" y1="18" y2="18" />
</svg>
</button>
@* Desktop collapse toggle *@
<button class="hidden rounded-md p-1.5 text-muted-foreground transition-colors hover:bg-accent hover:text-foreground md:inline-flex"
@onclick="ToggleSidebar"
title="@(sidebarCollapsed ? "Expand sidebar" : "Collapse sidebar")">
<svg xmlns="http://www.w3.org/2000/svg" class="h-5 w-5" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
<rect width="18" height="18" x="3" y="3" rx="2" />
<path d="M9 3v18" />
</svg>
</button>
<div class="flex-1 text-sm font-medium text-muted-foreground">
Enciphered UI Components
</div>
<a href="https://learn.microsoft.com/aspnet/core/"
target="_blank"
class="text-sm text-muted-foreground transition-colors hover:text-foreground">
About
</a>
</header>
@* Page content *@
<main class="flex-1 overflow-auto p-4 md:p-6">
@Body
</main>
</div>
</div>
@code {
private bool sidebarCollapsed;
private bool mobileOpen;
private void ToggleSidebar() => sidebarCollapsed = !sidebarCollapsed;
private void OpenMobile() => mobileOpen = true;
private void CloseMobile() => mobileOpen = false;
}
+73
View File
@@ -0,0 +1,73 @@
@* Sidebar header *@
<div class="flex h-14 items-center border-b border-sidebar-border px-4">
<button type="button"
class="flex items-center gap-2 font-semibold text-sidebar-foreground rounded-md transition-colors hover:bg-sidebar-accent px-1 py-1"
title="Toggle sidebar"
@onclick="HandleToggle">
<img src="enci_white.svg" alt="Logo" class="h-6 w-6 shrink-0 transition-transform duration-300" />
@if (!Collapsed)
{
<span class="text-sm tracking-tight">Enciphered</span>
}
</button>
</div>
@* Navigation *@
<div class="flex flex-col gap-1 p-3">
@if (!Collapsed)
{
<p class="mb-1 px-2 text-xs font-medium uppercase tracking-wider text-muted-foreground">
Navigation
</p>
}
<NavLink class="@NavLinkClass" href="" Match="NavLinkMatch.All"
ActiveClass="bg-sidebar-accent text-accent-foreground"
@onclick="HandleNav"
title="Home">
<svg xmlns="http://www.w3.org/2000/svg" class="h-4 w-4 shrink-0" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
<path d="M15 21v-8a1 1 0 0 0-1-1h-4a1 1 0 0 0-1 1v8" />
<path d="M3 10a2 2 0 0 1 .709-1.528l7-5.999a2 2 0 0 1 2.582 0l7 5.999A2 2 0 0 1 21 10v9a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z" />
</svg>
@if (!Collapsed)
{
<span>Home</span>
}
</NavLink>
<NavLink class="@NavLinkClass" href="weather"
ActiveClass="bg-sidebar-accent text-accent-foreground"
@onclick="HandleNav"
title="Weather">
<svg xmlns="http://www.w3.org/2000/svg" class="h-4 w-4 shrink-0" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
<path d="M17.5 19H9a7 7 0 1 1 6.71-9h1.79a4.5 4.5 0 1 1 0 9Z" />
</svg>
@if (!Collapsed)
{
<span>Weather</span>
}
</NavLink>
</div>
@code {
[Parameter] public bool Collapsed { get; set; }
[Parameter] public EventCallback OnToggleSidebar { get; set; }
[Parameter] public EventCallback OnNavigated { get; set; }
private string NavLinkClass => Collapsed
? "nav-link group flex items-center justify-center rounded-md p-2 text-sm font-medium text-sidebar-foreground transition-colors hover:bg-sidebar-accent"
: "nav-link group flex items-center gap-3 rounded-md px-3 py-2 text-sm font-medium text-sidebar-foreground transition-colors hover:bg-sidebar-accent";
private async Task HandleToggle()
{
if (OnToggleSidebar.HasDelegate)
await OnToggleSidebar.InvokeAsync();
}
private async Task HandleNav()
{
if (OnNavigated.HasDelegate)
await OnNavigated.InvokeAsync();
}
}
+36
View File
@@ -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;
}
+7
View File
@@ -0,0 +1,7 @@
@page "/"
<PageTitle>Home</PageTitle>
<h1>Hello, world!</h1>
Welcome to your new app.
+5
View File
@@ -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>
+64
View File
@@ -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);
}
}
+5
View File
@@ -0,0 +1,5 @@
<Router AppAssembly="typeof(Program).Assembly" NotFoundPage="typeof(Pages.NotFound)">
<Found Context="routeData">
<RouteView RouteData="routeData" DefaultLayout="typeof(Layout.MainLayout)" />
</Found>
</Router>
+11
View File
@@ -0,0 +1,11 @@
@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 Enciphered.Blazor.UIComponents
@using Enciphered.Blazor.UIComponents.Components
@using Enciphered.Blazor.UIComponents.Components.Layout
+13
View File
@@ -0,0 +1,13 @@
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
<TargetFramework>net10.0</TargetFramework>
<Nullable>enable</Nullable>
<ImplicitUsings>enable</ImplicitUsings>
<BlazorDisableThrowNavigationException>true</BlazorDisableThrowNavigationException>
</PropertyGroup>
<Target Name="Tailwind" BeforeTargets="Build">
<Exec Command="npx @tailwindcss/cli -i ./input.css -o ./wwwroot/css/output.css" />
</Target>
</Project>
+24
View File
@@ -0,0 +1,24 @@
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 17
VisualStudioVersion = 17.5.2.0
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Enciphered.Blazor.UIComponents", "Enciphered.Blazor.UIComponents.csproj", "{DE462D5E-ACD4-81EA-1348-92F9F8ED70ED}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{DE462D5E-ACD4-81EA-1348-92F9F8ED70ED}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{DE462D5E-ACD4-81EA-1348-92F9F8ED70ED}.Debug|Any CPU.Build.0 = Debug|Any CPU
{DE462D5E-ACD4-81EA-1348-92F9F8ED70ED}.Release|Any CPU.ActiveCfg = Release|Any CPU
{DE462D5E-ACD4-81EA-1348-92F9F8ED70ED}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {BD883197-1262-4DEF-87D0-4D8308793382}
EndGlobalSection
EndGlobal
+27
View File
@@ -0,0 +1,27 @@
using Enciphered.Blazor.UIComponents.Components;
var builder = WebApplication.CreateBuilder(args);
// Add services to the container.
builder.Services.AddRazorComponents()
.AddInteractiveServerComponents();
var app = builder.Build();
// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{
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();
app.Run();
+23
View File
@@ -0,0 +1,23 @@
{
"$schema": "https://json.schemastore.org/launchsettings.json",
"profiles": {
"http": {
"commandName": "Project",
"dotnetRunMessages": true,
"launchBrowser": true,
"applicationUrl": "http://localhost:5182",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
},
"https": {
"commandName": "Project",
"dotnetRunMessages": true,
"launchBrowser": true,
"applicationUrl": "https://localhost:7009;http://localhost:5182",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
}
}
}
File diff suppressed because it is too large Load Diff
+8
View File
@@ -0,0 +1,8 @@
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning"
}
}
}
+9
View File
@@ -0,0 +1,9 @@
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning"
}
},
"AllowedHosts": "*"
}
+63
View File
@@ -0,0 +1,63 @@
@import "tailwindcss";
@theme {
--color-background: oklch(0.145 0 0);
--color-foreground: oklch(0.985 0 0);
--color-card: oklch(0.17 0 0);
--color-card-foreground: oklch(0.985 0 0);
--color-muted: oklch(0.21 0 0);
--color-muted-foreground: oklch(0.556 0 0);
--color-border: oklch(0.3 0 0);
--color-primary: oklch(0.985 0 0);
--color-primary-foreground: oklch(0.205 0 0);
--color-secondary: oklch(0.269 0 0);
--color-secondary-foreground: oklch(0.985 0 0);
--color-accent: oklch(0.269 0 0);
--color-accent-foreground: oklch(0.985 0 0);
--color-destructive: oklch(0.396 0.141 25.723);
--color-ring: oklch(0.556 0 0);
--color-sidebar: oklch(0.15 0 0);
--color-sidebar-foreground: oklch(0.985 0 0);
--color-sidebar-accent: oklch(0.269 0 0);
--color-sidebar-border: oklch(0.3 0 0);
--radius-sm: 0.375rem;
--radius-md: 0.5rem;
--radius-lg: 0.75rem;
}
@layer base {
* {
@apply border-border;
}
body {
@apply bg-background text-foreground antialiased;
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
}
h1 {
@apply text-3xl font-bold tracking-tight;
}
h2 {
@apply text-2xl font-semibold tracking-tight;
}
h3 {
@apply text-xl font-semibold tracking-tight;
}
p {
@apply leading-7;
}
table {
@apply w-full caption-bottom text-sm;
}
thead {
@apply border-b border-border;
}
th {
@apply h-10 px-2 text-left align-middle font-medium text-muted-foreground;
}
td {
@apply p-2 align-middle;
}
tr {
@apply border-b border-border transition-colors hover:bg-muted/50;
}
}
+1228
View File
File diff suppressed because it is too large Load Diff
+21
View File
@@ -0,0 +1,21 @@
{
"name": "enciphered.blazor.uicomponents",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"keywords": [],
"author": "",
"license": "ISC",
"type": "commonjs",
"devDependencies": {
"autoprefixer": "^10.4.27",
"postcss": "^8.5.9",
"tailwindcss": "^4.2.2"
},
"dependencies": {
"@tailwindcss/cli": "^4.2.2"
}
}
+746
View File
@@ -0,0 +1,746 @@
/*! tailwindcss v4.2.2 | MIT License | https://tailwindcss.com */
@layer properties;
@layer theme, base, components, utilities;
@layer theme {
:root, :host {
--font-sans: ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji",
"Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
--font-mono: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono",
"Courier New", monospace;
--color-black: #000;
--spacing: 0.25rem;
--text-xs: 0.75rem;
--text-xs--line-height: calc(1 / 0.75);
--text-sm: 0.875rem;
--text-sm--line-height: calc(1.25 / 0.875);
--text-xl: 1.25rem;
--text-xl--line-height: calc(1.75 / 1.25);
--text-2xl: 1.5rem;
--text-2xl--line-height: calc(2 / 1.5);
--text-3xl: 1.875rem;
--text-3xl--line-height: calc(2.25 / 1.875);
--font-weight-medium: 500;
--font-weight-semibold: 600;
--font-weight-bold: 700;
--tracking-tight: -0.025em;
--tracking-wider: 0.05em;
--radius-md: 0.5rem;
--ease-in-out: cubic-bezier(0.4, 0, 0.2, 1);
--blur-sm: 8px;
--default-transition-duration: 150ms;
--default-transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
--default-font-family: var(--font-sans);
--default-mono-font-family: var(--font-mono);
--color-background: oklch(0.145 0 0);
--color-foreground: oklch(0.985 0 0);
--color-muted: oklch(0.21 0 0);
--color-muted-foreground: oklch(0.556 0 0);
--color-border: oklch(0.3 0 0);
--color-accent: oklch(0.269 0 0);
--color-accent-foreground: oklch(0.985 0 0);
--color-sidebar: oklch(0.15 0 0);
--color-sidebar-foreground: oklch(0.985 0 0);
--color-sidebar-accent: oklch(0.269 0 0);
--color-sidebar-border: oklch(0.3 0 0);
}
}
@layer base {
*, ::after, ::before, ::backdrop, ::file-selector-button {
box-sizing: border-box;
margin: 0;
padding: 0;
border: 0 solid;
}
html, :host {
line-height: 1.5;
-webkit-text-size-adjust: 100%;
tab-size: 4;
font-family: var(--default-font-family, ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");
font-feature-settings: var(--default-font-feature-settings, normal);
font-variation-settings: var(--default-font-variation-settings, normal);
-webkit-tap-highlight-color: transparent;
}
hr {
height: 0;
color: inherit;
border-top-width: 1px;
}
abbr:where([title]) {
-webkit-text-decoration: underline dotted;
text-decoration: underline dotted;
}
h1, h2, h3, h4, h5, h6 {
font-size: inherit;
font-weight: inherit;
}
a {
color: inherit;
-webkit-text-decoration: inherit;
text-decoration: inherit;
}
b, strong {
font-weight: bolder;
}
code, kbd, samp, pre {
font-family: var(--default-mono-font-family, ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);
font-feature-settings: var(--default-mono-font-feature-settings, normal);
font-variation-settings: var(--default-mono-font-variation-settings, normal);
font-size: 1em;
}
small {
font-size: 80%;
}
sub, sup {
font-size: 75%;
line-height: 0;
position: relative;
vertical-align: baseline;
}
sub {
bottom: -0.25em;
}
sup {
top: -0.5em;
}
table {
text-indent: 0;
border-color: inherit;
border-collapse: collapse;
}
:-moz-focusring {
outline: auto;
}
progress {
vertical-align: baseline;
}
summary {
display: list-item;
}
ol, ul, menu {
list-style: none;
}
img, svg, video, canvas, audio, iframe, embed, object {
display: block;
vertical-align: middle;
}
img, video {
max-width: 100%;
height: auto;
}
button, input, select, optgroup, textarea, ::file-selector-button {
font: inherit;
font-feature-settings: inherit;
font-variation-settings: inherit;
letter-spacing: inherit;
color: inherit;
border-radius: 0;
background-color: transparent;
opacity: 1;
}
:where(select:is([multiple], [size])) optgroup {
font-weight: bolder;
}
:where(select:is([multiple], [size])) optgroup option {
padding-inline-start: 20px;
}
::file-selector-button {
margin-inline-end: 4px;
}
::placeholder {
opacity: 1;
}
@supports (not (-webkit-appearance: -apple-pay-button)) or (contain-intrinsic-size: 1px) {
::placeholder {
color: currentcolor;
@supports (color: color-mix(in lab, red, red)) {
color: color-mix(in oklab, currentcolor 50%, transparent);
}
}
}
textarea {
resize: vertical;
}
::-webkit-search-decoration {
-webkit-appearance: none;
}
::-webkit-date-and-time-value {
min-height: 1lh;
text-align: inherit;
}
::-webkit-datetime-edit {
display: inline-flex;
}
::-webkit-datetime-edit-fields-wrapper {
padding: 0;
}
::-webkit-datetime-edit, ::-webkit-datetime-edit-year-field, ::-webkit-datetime-edit-month-field, ::-webkit-datetime-edit-day-field, ::-webkit-datetime-edit-hour-field, ::-webkit-datetime-edit-minute-field, ::-webkit-datetime-edit-second-field, ::-webkit-datetime-edit-millisecond-field, ::-webkit-datetime-edit-meridiem-field {
padding-block: 0;
}
::-webkit-calendar-picker-indicator {
line-height: 1;
}
:-moz-ui-invalid {
box-shadow: none;
}
button, input:where([type="button"], [type="reset"], [type="submit"]), ::file-selector-button {
appearance: button;
}
::-webkit-inner-spin-button, ::-webkit-outer-spin-button {
height: auto;
}
[hidden]:where(:not([hidden="until-found"])) {
display: none !important;
}
}
@layer utilities {
.collapse {
visibility: collapse;
}
.absolute {
position: absolute;
}
.fixed {
position: fixed;
}
.relative {
position: relative;
}
.static {
position: static;
}
.sticky {
position: sticky;
}
.inset-0 {
inset: calc(var(--spacing) * 0);
}
.end {
inset-inline-end: var(--spacing);
}
.top-0 {
top: calc(var(--spacing) * 0);
}
.top-3 {
top: calc(var(--spacing) * 3);
}
.right-3 {
right: calc(var(--spacing) * 3);
}
.z-10 {
z-index: 10;
}
.z-40 {
z-index: 40;
}
.z-50 {
z-index: 50;
}
.mb-1 {
margin-bottom: calc(var(--spacing) * 1);
}
.flex {
display: flex;
}
.hidden {
display: none;
}
.table {
display: table;
}
.h-4 {
height: calc(var(--spacing) * 4);
}
.h-5 {
height: calc(var(--spacing) * 5);
}
.h-6 {
height: calc(var(--spacing) * 6);
}
.h-14 {
height: calc(var(--spacing) * 14);
}
.min-h-screen {
min-height: 100vh;
}
.w-4 {
width: calc(var(--spacing) * 4);
}
.w-5 {
width: calc(var(--spacing) * 5);
}
.w-6 {
width: calc(var(--spacing) * 6);
}
.w-16 {
width: calc(var(--spacing) * 16);
}
.w-64 {
width: calc(var(--spacing) * 64);
}
.w-72 {
width: calc(var(--spacing) * 72);
}
.flex-1 {
flex: 1;
}
.shrink-0 {
flex-shrink: 0;
}
.flex-col {
flex-direction: column;
}
.items-center {
align-items: center;
}
.justify-center {
justify-content: center;
}
.gap-1 {
gap: calc(var(--spacing) * 1);
}
.gap-2 {
gap: calc(var(--spacing) * 2);
}
.gap-3 {
gap: calc(var(--spacing) * 3);
}
.gap-4 {
gap: calc(var(--spacing) * 4);
}
.overflow-auto {
overflow: auto;
}
.overflow-hidden {
overflow: hidden;
}
.rounded-md {
border-radius: var(--radius-md);
}
.border-r {
border-right-style: var(--tw-border-style);
border-right-width: 1px;
}
.border-b {
border-bottom-style: var(--tw-border-style);
border-bottom-width: 1px;
}
.border-border {
border-color: var(--color-border);
}
.border-sidebar-border {
border-color: var(--color-sidebar-border);
}
.bg-background\/80 {
background-color: color-mix(in srgb, oklch(0.145 0 0) 80%, transparent);
@supports (color: color-mix(in lab, red, red)) {
background-color: color-mix(in oklab, var(--color-background) 80%, transparent);
}
}
.bg-black\/60 {
background-color: color-mix(in srgb, #000 60%, transparent);
@supports (color: color-mix(in lab, red, red)) {
background-color: color-mix(in oklab, var(--color-black) 60%, transparent);
}
}
.bg-sidebar {
background-color: var(--color-sidebar);
}
.bg-sidebar-accent {
background-color: var(--color-sidebar-accent);
}
.p-1 {
padding: calc(var(--spacing) * 1);
}
.p-1\.5 {
padding: calc(var(--spacing) * 1.5);
}
.p-2 {
padding: calc(var(--spacing) * 2);
}
.p-3 {
padding: calc(var(--spacing) * 3);
}
.p-4 {
padding: calc(var(--spacing) * 4);
}
.px-1 {
padding-inline: calc(var(--spacing) * 1);
}
.px-2 {
padding-inline: calc(var(--spacing) * 2);
}
.px-3 {
padding-inline: calc(var(--spacing) * 3);
}
.px-4 {
padding-inline: calc(var(--spacing) * 4);
}
.py-1 {
padding-block: calc(var(--spacing) * 1);
}
.py-2 {
padding-block: calc(var(--spacing) * 2);
}
.text-sm {
font-size: var(--text-sm);
line-height: var(--tw-leading, var(--text-sm--line-height));
}
.text-xs {
font-size: var(--text-xs);
line-height: var(--tw-leading, var(--text-xs--line-height));
}
.font-medium {
--tw-font-weight: var(--font-weight-medium);
font-weight: var(--font-weight-medium);
}
.font-semibold {
--tw-font-weight: var(--font-weight-semibold);
font-weight: var(--font-weight-semibold);
}
.tracking-tight {
--tw-tracking: var(--tracking-tight);
letter-spacing: var(--tracking-tight);
}
.tracking-wider {
--tw-tracking: var(--tracking-wider);
letter-spacing: var(--tracking-wider);
}
.text-accent-foreground {
color: var(--color-accent-foreground);
}
.text-muted-foreground {
color: var(--color-muted-foreground);
}
.text-sidebar-foreground {
color: var(--color-sidebar-foreground);
}
.uppercase {
text-transform: uppercase;
}
.shadow-xl {
--tw-shadow: 0 20px 25px -5px var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 8px 10px -6px var(--tw-shadow-color, rgb(0 0 0 / 0.1));
box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
}
.backdrop-blur-sm {
--tw-backdrop-blur: blur(var(--blur-sm));
-webkit-backdrop-filter: var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);
backdrop-filter: var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);
}
.transition-all {
transition-property: all;
transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));
transition-duration: var(--tw-duration, var(--default-transition-duration));
}
.transition-colors {
transition-property: color, background-color, border-color, outline-color, text-decoration-color, fill, stroke, --tw-gradient-from, --tw-gradient-via, --tw-gradient-to;
transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));
transition-duration: var(--tw-duration, var(--default-transition-duration));
}
.transition-transform {
transition-property: transform, translate, scale, rotate;
transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));
transition-duration: var(--tw-duration, var(--default-transition-duration));
}
.duration-300 {
--tw-duration: 300ms;
transition-duration: 300ms;
}
.ease-in-out {
--tw-ease: var(--ease-in-out);
transition-timing-function: var(--ease-in-out);
}
.hover\:bg-accent {
&:hover {
@media (hover: hover) {
background-color: var(--color-accent);
}
}
}
.hover\:bg-sidebar-accent {
&:hover {
@media (hover: hover) {
background-color: var(--color-sidebar-accent);
}
}
}
.hover\:text-foreground {
&:hover {
@media (hover: hover) {
color: var(--color-foreground);
}
}
}
.hover\:text-sidebar-foreground {
&:hover {
@media (hover: hover) {
color: var(--color-sidebar-foreground);
}
}
}
.md\:block {
@media (width >= 48rem) {
display: block;
}
}
.md\:hidden {
@media (width >= 48rem) {
display: none;
}
}
.md\:inline-flex {
@media (width >= 48rem) {
display: inline-flex;
}
}
.md\:p-6 {
@media (width >= 48rem) {
padding: calc(var(--spacing) * 6);
}
}
.md\:px-6 {
@media (width >= 48rem) {
padding-inline: calc(var(--spacing) * 6);
}
}
}
@layer base {
* {
border-color: var(--color-border);
}
body {
background-color: var(--color-background);
color: var(--color-foreground);
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
}
h1 {
font-size: var(--text-3xl);
line-height: var(--tw-leading, var(--text-3xl--line-height));
--tw-font-weight: var(--font-weight-bold);
font-weight: var(--font-weight-bold);
--tw-tracking: var(--tracking-tight);
letter-spacing: var(--tracking-tight);
}
h2 {
font-size: var(--text-2xl);
line-height: var(--tw-leading, var(--text-2xl--line-height));
--tw-font-weight: var(--font-weight-semibold);
font-weight: var(--font-weight-semibold);
--tw-tracking: var(--tracking-tight);
letter-spacing: var(--tracking-tight);
}
h3 {
font-size: var(--text-xl);
line-height: var(--tw-leading, var(--text-xl--line-height));
--tw-font-weight: var(--font-weight-semibold);
font-weight: var(--font-weight-semibold);
--tw-tracking: var(--tracking-tight);
letter-spacing: var(--tracking-tight);
}
p {
--tw-leading: calc(var(--spacing) * 7);
line-height: calc(var(--spacing) * 7);
}
table {
width: 100%;
caption-side: bottom;
font-size: var(--text-sm);
line-height: var(--tw-leading, var(--text-sm--line-height));
}
thead {
border-bottom-style: var(--tw-border-style);
border-bottom-width: 1px;
border-color: var(--color-border);
}
th {
height: calc(var(--spacing) * 10);
padding-inline: calc(var(--spacing) * 2);
text-align: left;
vertical-align: middle;
--tw-font-weight: var(--font-weight-medium);
font-weight: var(--font-weight-medium);
color: var(--color-muted-foreground);
}
td {
padding: calc(var(--spacing) * 2);
vertical-align: middle;
}
tr {
border-bottom-style: var(--tw-border-style);
border-bottom-width: 1px;
border-color: var(--color-border);
transition-property: color, background-color, border-color, outline-color, text-decoration-color, fill, stroke, --tw-gradient-from, --tw-gradient-via, --tw-gradient-to;
transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));
transition-duration: var(--tw-duration, var(--default-transition-duration));
&:hover {
@media (hover: hover) {
background-color: color-mix(in srgb, oklch(0.21 0 0) 50%, transparent);
@supports (color: color-mix(in lab, red, red)) {
background-color: color-mix(in oklab, var(--color-muted) 50%, transparent);
}
}
}
}
}
@property --tw-border-style {
syntax: "*";
inherits: false;
initial-value: solid;
}
@property --tw-font-weight {
syntax: "*";
inherits: false;
}
@property --tw-tracking {
syntax: "*";
inherits: false;
}
@property --tw-shadow {
syntax: "*";
inherits: false;
initial-value: 0 0 #0000;
}
@property --tw-shadow-color {
syntax: "*";
inherits: false;
}
@property --tw-shadow-alpha {
syntax: "<percentage>";
inherits: false;
initial-value: 100%;
}
@property --tw-inset-shadow {
syntax: "*";
inherits: false;
initial-value: 0 0 #0000;
}
@property --tw-inset-shadow-color {
syntax: "*";
inherits: false;
}
@property --tw-inset-shadow-alpha {
syntax: "<percentage>";
inherits: false;
initial-value: 100%;
}
@property --tw-ring-color {
syntax: "*";
inherits: false;
}
@property --tw-ring-shadow {
syntax: "*";
inherits: false;
initial-value: 0 0 #0000;
}
@property --tw-inset-ring-color {
syntax: "*";
inherits: false;
}
@property --tw-inset-ring-shadow {
syntax: "*";
inherits: false;
initial-value: 0 0 #0000;
}
@property --tw-ring-inset {
syntax: "*";
inherits: false;
}
@property --tw-ring-offset-width {
syntax: "<length>";
inherits: false;
initial-value: 0px;
}
@property --tw-ring-offset-color {
syntax: "*";
inherits: false;
initial-value: #fff;
}
@property --tw-ring-offset-shadow {
syntax: "*";
inherits: false;
initial-value: 0 0 #0000;
}
@property --tw-backdrop-blur {
syntax: "*";
inherits: false;
}
@property --tw-backdrop-brightness {
syntax: "*";
inherits: false;
}
@property --tw-backdrop-contrast {
syntax: "*";
inherits: false;
}
@property --tw-backdrop-grayscale {
syntax: "*";
inherits: false;
}
@property --tw-backdrop-hue-rotate {
syntax: "*";
inherits: false;
}
@property --tw-backdrop-invert {
syntax: "*";
inherits: false;
}
@property --tw-backdrop-opacity {
syntax: "*";
inherits: false;
}
@property --tw-backdrop-saturate {
syntax: "*";
inherits: false;
}
@property --tw-backdrop-sepia {
syntax: "*";
inherits: false;
}
@property --tw-duration {
syntax: "*";
inherits: false;
}
@property --tw-ease {
syntax: "*";
inherits: false;
}
@property --tw-leading {
syntax: "*";
inherits: false;
}
@layer properties {
@supports ((-webkit-hyphens: none) and (not (margin-trim: inline))) or ((-moz-orient: inline) and (not (color:rgb(from red r g b)))) {
*, ::before, ::after, ::backdrop {
--tw-border-style: solid;
--tw-font-weight: initial;
--tw-tracking: initial;
--tw-shadow: 0 0 #0000;
--tw-shadow-color: initial;
--tw-shadow-alpha: 100%;
--tw-inset-shadow: 0 0 #0000;
--tw-inset-shadow-color: initial;
--tw-inset-shadow-alpha: 100%;
--tw-ring-color: initial;
--tw-ring-shadow: 0 0 #0000;
--tw-inset-ring-color: initial;
--tw-inset-ring-shadow: 0 0 #0000;
--tw-ring-inset: initial;
--tw-ring-offset-width: 0px;
--tw-ring-offset-color: #fff;
--tw-ring-offset-shadow: 0 0 #0000;
--tw-backdrop-blur: initial;
--tw-backdrop-brightness: initial;
--tw-backdrop-contrast: initial;
--tw-backdrop-grayscale: initial;
--tw-backdrop-hue-rotate: initial;
--tw-backdrop-invert: initial;
--tw-backdrop-opacity: initial;
--tw-backdrop-saturate: initial;
--tw-backdrop-sepia: initial;
--tw-duration: initial;
--tw-ease: initial;
--tw-leading: initial;
}
}
}
+1
View File
@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 139.27 93.46"><path d="M128.29,55.27c-1.93,1-3.41,6.08-4.63,8.07-4.94-.5-19.7,1.54-23.15-2.21-4.84-6.2-1.65-15.38,2.41-23,55.47,5.25,22.88-51.53-5.14-8.68-1.63-.74-8.13-.29-10-.41-2.7-.14-5.21.51-6.26,3.34l-.56,1.41L71.41,57.21,69.58,33.8c-.25-3.49-1.85-5.24-4.78-5.24-8.21-1-19.41,46.6-26.49,51.72-14.58,13-21.06-11-7.36-17.76,3.3-2.81,11.63-2.46,15.82-4.57,3.46-3.2-.07-8.4-4.82-8H22.4C7.72,50.53,11.68,34.1,17,24.78c55.73,5.19,22.63-51.72-5.31-8.4-2.66.2-8-.77-10,1.46-4.12,4.85-.27,7.73,5.2,6.94-8,14.89-5,35.13,14.46,33.61-23.34,22.92,8.22,51.13,26.77,23.87,3.12-5,11-25.5,14.08-33C63,53.2,63,73.15,65.33,76c2.19,2.62,7.64,1.84,8.86-1.9l.67-1.65,14-34.41c.73.14,3.22.06,4,.08-7.47,14.23-5.8,34,13,33.6h20.39c7.45.64,5.49-6.53,7.73-11.12C136.09,57.39,131.2,53.68,128.29,55.27ZM113.85,23.9c9.51-7.48,15.64,6.48,1.13,5.83h-6.82A23.27,23.27,0,0,1,113.85,23.9ZM28,10.55c9.5-7.48,15.62,6.49,1.12,5.83H22.26A23.13,23.13,0,0,1,28,10.55Z"/><path d="M139.27,46.91a4.87,4.87,0,1,1-1.43-3.46A4.73,4.73,0,0,1,139.27,46.91Z"/></svg>

After

Width:  |  Height:  |  Size: 1.1 KiB

+1
View File
@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 139.27 93.46"><defs><style>.a{fill:#fff;}</style></defs><path class="a" d="M128.29,55.27c-1.93,1-3.41,6.08-4.63,8.07-4.94-.5-19.7,1.54-23.15-2.21-4.84-6.2-1.65-15.38,2.41-23,55.47,5.25,22.88-51.53-5.14-8.68-1.63-.74-8.13-.29-10-.41-2.7-.14-5.21.51-6.26,3.34l-.56,1.41L71.41,57.21,69.58,33.8c-.25-3.49-1.85-5.24-4.78-5.24-8.21-1-19.41,46.6-26.49,51.72-14.58,13-21.06-11-7.36-17.76,3.3-2.81,11.63-2.46,15.82-4.57,3.46-3.2-.07-8.4-4.82-8H22.4C7.72,50.53,11.68,34.1,17,24.78c55.73,5.19,22.63-51.72-5.31-8.4-2.66.2-8-.77-10,1.46-4.12,4.85-.27,7.73,5.2,6.94-8,14.89-5,35.13,14.46,33.61-23.34,22.92,8.22,51.13,26.77,23.87,3.12-5,11-25.5,14.08-33C63,53.2,63,73.15,65.33,76c2.19,2.62,7.64,1.84,8.86-1.9l.67-1.65,14-34.41c.73.14,3.22.06,4,.08-7.47,14.23-5.8,34,13,33.6h20.39c7.45.64,5.49-6.53,7.73-11.12C136.09,57.39,131.2,53.68,128.29,55.27ZM113.85,23.9c9.51-7.48,15.64,6.48,1.13,5.83h-6.82A23.27,23.27,0,0,1,113.85,23.9ZM28,10.55c9.5-7.48,15.62,6.49,1.12,5.83H22.26A23.13,23.13,0,0,1,28,10.55Z"/><path class="a" d="M139.27,46.91a4.87,4.87,0,1,1-1.43-3.46A4.73,4.73,0,0,1,139.27,46.91Z"/></svg>

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB